コード例 #1
0
ファイル: gsl-wrappers.c プロジェクト: cran/topicmodels
void scanf_vector(char* filename, gsl_vector* v)
{
    FILE* fileptr;
    fileptr = fopen(filename, "r");
    gsl_vector_fscanf(fileptr, v);
    fclose(fileptr);
}
コード例 #2
0
ファイル: io.c プロジェクト: diogro/evomod
void population_fscanf (Population *pop, FILE *stream)
{
    int i;
    for (i = 0; i < pop->n_e; i++){
        gsl_vector_fscanf(stream, pop->y[i]);
        gsl_matrix_fscanf(stream, pop->b[i]);
    }
    fscanf(stream, "%d", &pop->current_gen);
}
コード例 #3
0
ファイル: slra_common.cpp プロジェクト: jiangshaowu/slra
int read_vec( gsl_vector *a, const char * filename ) {
  FILE *file = fopen(filename, "r");
  if (file == NULL) {
    Log::lprintf(Log::LOG_LEVEL_NOTIFY, "Error opening file %s\n", filename);
    return 0;
  }
  gsl_vector_fscanf(file, a);
  fclose(file);
  return 1;
}
コード例 #4
0
/*
 * read/write a vector/matrix from a file
 *
 */
void vct_fscanf(const char* filename, gsl_vector* v) {
	outlog("reading %ld vector from %s", v->size, filename);
	FILE* fileptr;
	fileptr = fopen(filename, "r");
	if (!fileptr) {
		outlog("Error opening file %s. Failing.", filename);
		exit(1);
	}
	gsl_vector_fscanf(fileptr, v);
	fclose(fileptr);
}
コード例 #5
0
ファイル: red_evol.c プロジェクト: j-silver/quantum_dots
/* 
 *      FUNCTION  
 *         Name:  main
 *  Description:  
 * 
 */
int main ( int argc, char *argv[] )
{
	gsl_ieee_env_setup () ;			/* read GSL_IEEE_MODE */

	double beta = 1.0/T ;           /* Boltzmann factor: beta */
	double omega_1 = gsl_hypot(OMEGA,D) ;   /* omega' */

	struct f_params params;
	params.omega_c = omega_c ;
	params.beta = beta ;
	params.Omega = OMEGA ;
	params.omega_1 = omega_1 ;
	params.alpha = alpha ;

	/* read the Redfield matrix from a file */
	gsl_matrix* red_m = gsl_matrix_calloc ( 4, 4 ) ;
	mat_read ( red_m, "REDFIELD_MATRIX" ) ;

	/* 
	 * Find the stationary state by solving the linear systems
	 * and the associated stationary currents
	 */
	gsl_vector* req_red = gsl_vector_calloc (4) ;
	FILE* f_red = fopen ( "RED_STATIONARY.dat", "r" ) ;
	if ( f_red == NULL )
		printf("Error: %s.\nFailed to open RED_STATIONARY.dat",
				strerror(errno)) ;
	gsl_vector_fscanf ( f_red, req_red ) ;
	fclose ( f_red ) ;

	printf("REDFIELD DYNAMICS\n") ;
	printf("Stationary state: ( %.1f , %.9f , %.9f , %.9f )\n", 
			VECTOR(req_red,0), VECTOR(req_red,1),
			VECTOR(req_red,2), VECTOR(req_red,3) ) ;
	printf("Stationary normalized (I/I0) DC current: %.9f\n\n",
			-VECTOR(req_red,3)*OMEGA/omega_1) ;
	
	int status = red_evol ( &params, R, t_end, STEP, req_red, red_m ) ;
	if ( status != 0 )
		exit (EXIT_FAILURE) ;

	/* free memory for matrix */
	gsl_matrix_free(red_m) ;

	return EXIT_SUCCESS;
}				/* ----------  end of function main  ---------- */
コード例 #6
0
ファイル: domain_increase.cpp プロジェクト: kentdobias/dipole
int main(int argc, char *argv[]) {

	// Declaring variables.
	gsl_vector *z, *new_z;
	int opt;
	unsigned n;
	double c;
	char out_file[20];

	// Default values.
	sprintf(out_file, "%s", "out.dat");

	// GNU getopt in action.
	while ((opt = getopt(argc, argv, "n:c:i:")) != -1) {
		switch (opt) {
			case 'n':
				n = atoi(optarg);
				break;
			case 'c':
				c = atof(optarg);
				break;
			case 'i':
				sprintf(out_file, "%s", optarg);
				break;
			default:
				exit(EXIT_FAILURE);
		}
	}

	z = gsl_vector_alloc(3 * n + 3);
	new_z = gsl_vector_alloc(6 * n + 3);

	FILE *f = fopen(out_file, "r");
	gsl_vector_fscanf(f, z);
	fclose(f);

	gsl_vector_set(new_z, 2 * n - 1, (gsl_vector_get(z, 0) + gsl_vector_get(z, n - 1)) / 2);
		gsl_vector_set(new_z, 2 * n - 2, gsl_vector_get(z, n - 2));

	for (unsigned i = 0; i < n - 1; i ++) {
		gsl_vector_set(new_z, 2 * i, gsl_vector_get(z, i));
		gsl_vector_set(new_z, 2 * i + 1,
				(gsl_vector_get(z, i) + gsl_vector_get(z, i + 1)) / 2);
	}

	gsl_vector_set(new_z, 2 * n, gsl_vector_get(z, n) / 2);
	gsl_vector_set(new_z, 2 * n + 1, gsl_vector_get(z, n));
	gsl_vector_set(new_z, 4 * n - 2, gsl_vector_get(z, 2 * n - 2) / 2);
	gsl_vector_set(new_z, 4 * n - 3, gsl_vector_get(z, 2 * n - 2));

	for (unsigned i = 1; i < n - 1; i ++) {
		gsl_vector_set(new_z, 2 * (n + i) + 1, gsl_vector_get(z, n + i));
		gsl_vector_set(new_z, 2 * (n + i) ,
				(gsl_vector_get(z, n + i - 1) + gsl_vector_get(z, n + i)) / 2);
	}

	gsl_vector_set(new_z, 4 * n - 1, gsl_vector_get(z, 2 * n -1));

	gsl_vector_set(new_z, 4 * n, gsl_vector_get(z, 2 * n));

	for (unsigned i = 0; i < n; i++) {
		gsl_vector_set(new_z, 4 * n + 1 + 2 * i, gsl_vector_get(z, 2 * n + 1 + i));
		gsl_vector_set(new_z, 4 * n + 2 + 2 * i, gsl_vector_get(z, 2 * n + 1 + i));
	}

	gsl_vector_set(new_z, 6 * n + 1, gsl_vector_get(z, 3 * n + 1));
	gsl_vector_set(new_z, 6 * n + 2, gsl_vector_get(z, 3 * n + 2));

	int result;
	result = domain_minimize_fixed(new_z, 2 * n, c, 1e-8, 0.00001, 5000, 4, 2);

	if (result) printf("Converging failed.");
	else {
		FILE *fout = fopen(out_file, "w");
		gsl_vector_fprintf(fout, new_z, "%.10g");
		fclose(fout);
	}

	gsl_vector_free(z);
	gsl_vector_free(new_z);

}
コード例 #7
0
ファイル: evolve.cpp プロジェクト: kentdobias/dipole
// Initializes the program.
int main(int argc, char *argv[]) {

	int opt, min_fails, eigen_follow, eigen_num, examining;
	unsigned n, N, ord, size, params, j, M;
	double d, c, dc0, dc, g0, g, eigen_thres, approach_thres, eps, eps2, state, old_state, h, bound, da, w, ss;
	char *in_filename, *out_filename, *k_filename, *a_filename, *phi_filename, str[19], in;
	bool subcrit, reset, rand, verbose, fixed, well;

	// Setting default values.

	gsl_vector *z, *k, *a, *phi, *old_z;
	rand = false;
	fixed = false;
	well = false;
	verbose = false;
	j=0;
	ss=1;

	while ((opt = getopt(argc, argv, "n:c:i:o:O:K:A:P:e:g:N:b:rvd:M:a:fws:W:j:")) != -1) {
		switch (opt) {
			case 'n':
				n = atoi(optarg);
				break;
			case 'b':
				bound = atof(optarg);
				break;
			case 'c':
				c = atof(optarg);
				break;
			case 'i':
				in_filename = optarg;
				break;
			case 'o':
				out_filename = optarg;
				break;
			case 'O':
				ord = atoi(optarg);
				break;
			case 'K':
				k_filename = optarg;
				break;
			case 'A':
				a_filename = optarg;
				break;
			case 'P':
				phi_filename = optarg;
				break;
			case 'g':
				g0 = atof(optarg);
				break;
			case 'N':
				N = atoi(optarg);
				break;
			case 'j':
				j = atoi(optarg);
				break;
			case 'M':
				M = atoi(optarg);
				break;
			case 'e':
				eps = atof(optarg);
				break;
			case 'd':
				dc0 = atof(optarg);
				break;
			case 'a':
				da = atof(optarg);
				break;
			case 'r':
				rand = true;
				break;
			case 'f':
				fixed = true;
				break;
			case 'w':
				well = true;
				break;
			case 'W':
				w = atof(optarg);
				break;
			case 's':
				ss = atof(optarg);
				break;
			case 'v':
				verbose = true;
				break;
			default:
				exit(EXIT_FAILURE);
		}
	}

	if (rand || !fixed) {
		size = 3 * n + 2;
		params = 2 * n + 1;
	} else {
		size = 3 * n + 3;
		params = 2 * n;
	}

	z = gsl_vector_alloc(size);
	old_z = gsl_vector_alloc(size);
	if (rand) {
		k = gsl_vector_alloc(2 * ord);
		a = gsl_vector_alloc(ord);
		phi = gsl_vector_alloc(ord);
	}

	FILE *in_file = fopen(in_filename, "r");
	gsl_vector_fscanf(in_file, z);
	fclose(in_file);

	if (rand) {
		FILE *k_file = fopen(k_filename, "r");
		gsl_vector_fscanf(k_file, k);
		fclose(k_file);

		FILE *a_file = fopen(a_filename, "r");
		gsl_vector_fscanf(a_file, a);
		fclose(a_file);

		FILE *phi_file = fopen(phi_filename, "r");
		gsl_vector_fscanf(phi_file, phi);
		fclose(phi_file);
	}

	g = g0;
	dc = dc0;

	double beta = 0.9;
	double s = 1;
	double sigma = 0.5;

	if (rand && well) min_fails = domain_minimize_randWell(z, n, c, ord, k, a, phi, w, ss, eps, N, beta, s, sigma, g, bound, verbose);
	else if (rand) min_fails = domain_minimize_rand(z, n, c, ord, k, a, phi, eps, N, beta, s, sigma, g, bound, verbose);
	else {
		if (fixed) min_fails = domain_minimize_fixedmin(z, n, c, eps, N, beta, ss, sigma, g, bound, verbose);
		else {
			if (well) min_fails = domain_minimize_nakedWell(z, n, c, w, ss, eps, N, beta, s, sigma, g, bound, verbose);
			else min_fails = domain_minimize_naked(z, n, c, eps, N, beta, s, sigma, g, bound, verbose);
		}
	}

	if (min_fails) {
		printf("BIFUR: Initial relaxation failed, exiting.\n");
		FILE *out_file = fopen(out_filename, "w");
		gsl_vector_fprintf(out_file, z, "%.10e");
		fclose(out_file);
		return 1;
	}


	while (j < M) {
		j += 1;
		c += dc;
		g = g0;
		if (rand) gsl_vector_scale(a, da);

		gsl_vector_memcpy(old_z, z);

		printf("EVOLVE: Step %05d, starting with c = %f.\n", j, c);

		while (true) {
			if (rand && well) min_fails = domain_minimize_randWell(z, n, c, ord, k, a, phi, w, ss, eps, N, beta, s, sigma, g, bound, verbose);
			else if (rand) min_fails = domain_minimize_rand(z, n, c, ord, k, a, phi, eps, N, beta, s, sigma, g, bound, verbose);
			else if (fixed) min_fails = domain_minimize_fixedmin(z, n, c, eps, N, beta, s, sigma, g, bound, verbose);
			else if (well) min_fails = domain_minimize_nakedWell(z, n, c, w, ss, eps, N, beta, s, sigma, g, bound, verbose);
			else min_fails = domain_minimize_naked(z, n, c, eps, N, beta, s, sigma, g, bound, verbose);

			if (!min_fails) break;
			printf("EVOLVE: Newton's method failed to converge, reducing gamma.\n");
			gsl_vector_memcpy(z, old_z);
			g *= 0.1;
		}

		sprintf(str, "output/out-%05d.dat", j);
		FILE *fout = fopen(str, "w");
		fprintf(fout, "%.10e\n", c);
		gsl_vector_fprintf(fout, z, "%.10e");
		fclose(fout);
	}

	FILE *out_file = fopen(out_filename, "w");
	gsl_vector_fprintf(out_file, z, "%.10e");
	fclose(out_file);

	gsl_vector_free(z);

	return 0;

}