double cal_energy(double *xx, double *yy, int n1, int n2, int nc, double *cell){ double energy; int status; FILE *fp2 ,*fp3; fp2=fopen("geo.gen","w"); write_gen(fp2,n1,n2,nc,xx,yy,cell,"Pt","Ru","C"); fclose(fp2); status=system("dftb+>dftb_screen"); energy=grep_energy(); fp3 =fopen("geo_end.gen","r"); read_gen(fp3,n1,n2,nc,xx,yy);fclose(fp3); printf("Energy= %12.4f\n",energy); return grep_energy(); }
void gen_initialize(generation &geninit, int &spop, int &apop, int &idnumber, const int &aleaspace, const int &n_param, const vector<parameters> ¶ms, const double &lambda) { if(aleaspace==0) { ///Populate the space with equidistant values. First generation int geninit_nindividuals = (int)pow(spop,n_param); geninit.construct(geninit_nindividuals, n_param, idnumber, lambda); ///Determination of parameters_equally_spaced mat samples = doe_uniform(spop, n_param, params); for(int j=0; j<n_param; j++) { for(int i=0; i<geninit.size(); i++) { geninit.pop[i].p(j) = samples(i,j); } } } if(aleaspace==1) { ///Populate the space with equidistant values. First generation int geninit_nindividuals = (int)pow(spop,n_param); geninit.construct(geninit_nindividuals, n_param, idnumber, lambda); ///Determination of parameters_equally_spaced mat samples = doe_uniform_limit(spop, n_param, params); for(int j=0; j<n_param; j++) { for(int i=0; i<geninit.size(); i++) { geninit.pop[i].p(j) = samples(i,j); } } } else if(aleaspace==2) { int geninit_nindividuals=apop; geninit.construct(geninit_nindividuals, n_param, idnumber, lambda); ///Determination of random values ///Determination of parameters_equally_spaced mat samples = doe_random(geninit_nindividuals, n_param, params); for(int j=0; j<n_param; j++) { for(int i=0; i<geninit.size(); i++) { geninit.pop[i].p(j) = samples(i,j); } } } else if(aleaspace==3) { mat samples; read_gen(apop, samples, n_param); int geninit_nindividuals=apop; geninit.construct(geninit_nindividuals, n_param, idnumber, lambda); for(int j=0; j<n_param; j++) { for(int i=0; i<geninit.size(); i++) { geninit.pop[i].p(j) = samples(i,j); } } } }
int main ( int argc, char **argv ) { char *gen_file; int dprint; int i, j; dprint = 0; if (argc>1 && strcmp(argv[1],"-d")==0) { dprint = 1; argc -= 1; argv += 1; } if (!(gen_file = argv[1]) || argv[2]) { usage(); } read_gen(gen_file,0,1); switch (type) { case 's': { printf("\nGenerator matrix in %s (sparse representation):\n\n",gen_file); printf("Column order (message bits at end):\n"); for (j = 0; j<N; j++) { if (j%20==0) printf("\n"); printf(" %3d",cols[j]); } printf("\n\n"); printf("Row order:\n"); for (i = 0; i<M; i++) { if (i%20==0) printf("\n"); printf(" %3d",rows[i]); } printf("\n\n"); if (dprint) { mod2dense *Ld, *Ud; Ld = mod2dense_allocate(M,M); Ud = mod2dense_allocate(M,N); mod2sparse_to_dense(L,Ld); mod2sparse_to_dense(U,Ud); printf("L:\n\n"); mod2dense_print(stdout,Ld); printf("\n"); printf("U:\n\n"); mod2dense_print(stdout,Ud); printf("\n"); } else { printf("L:\n\n"); mod2sparse_print(stdout,L); printf("\n"); printf("U:\n\n"); mod2sparse_print(stdout,U); printf("\n"); } break; } case 'd': case 'm': { if (type=='d') { printf("\nGenerator matrix in %s (dense representation):\n\n",gen_file); } if (type=='m') { printf("\nGenerator matrix in %s (mixed representation):\n\n",gen_file); } printf("Column order (message bits at end):\n"); for (j = 0; j<N; j++) { if (j%20==0) printf("\n"); printf(" %3d",cols[j]); } printf("\n\n"); printf (type=='d' ? "Inv(A) X B:\n\n" : "Inv(A):\n\n"); mod2dense_print(stdout,G); printf("\n"); break; } default: { fprintf(stderr,"Unknown type of generator matrix file\n"); exit(1); } } return 0; }