void scanf_vector(char* filename, gsl_vector* v) { FILE* fileptr; fileptr = fopen(filename, "r"); gsl_vector_fscanf(fileptr, v); fclose(fileptr); }
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); }
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; }
/* * 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); }
/* * 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 ( ¶ms, 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 ---------- */
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); }
// 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; }