int update() { int iters=0; /* do "steps" overrelaxed steps and stepsQ qhb steps */ relax(steps); monte(stepsQ); /* reunitarize the gauge field */ reunitarize(); if(steps > 0)return (iters/steps); else return(-99); }
int update() { int iters=0; /* check unitarity before doing anything */ check_unitarity(); /* do "steps" overrelaxed steps and stepsQ qhb steps */ relax(steps); monte(stepsQ); /* reunitarize the gauge field */ reunitarize(); if(steps > 0)return (iters/steps); else return(-99); }
int main(int argc, char **argv) { double fret; /* Frank energy */ double start, end; /* for timing */ double **grid; /* 2D grid */ int **lock; /* locked cells */ double **fgrid; /* fullgrid */ int **flock; /* locked cells (fullgrid) */ char fname[128] = "log"; char gname[128] = "grid"; char suffix[128]; int iter = 0; long maxiter; int flag, rank, np; /* MPI variables */ float t0; /* starting "temperature" */ FILE *log_fp; t_par par[2]; int sep, ba; MPI_Init(&argc, &argv); MPI_Initialized(&flag); if (flag != 1) MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &np); if (argc < 11 || argc > 12) { if (rank == 0) printf("Usage: <%s> <x length> <y length> <monte carlo steps> <temp> <major axis> <minor axis> <align> <theta> <separation> <boundary angle> [id]\n", argv[0]); MPI_Finalize(); exit(1); } nx = atoi(argv[1]); ny = atoi(argv[2]); maxiter = atoi(argv[3]); t0 = atof(argv[4]); par[0].major = par[1].major = atoi(argv[5]); par[0].minor = par[1].minor = atoi(argv[6]); if (strcmp(argv[7], "para") != 0 && strcmp(argv[7], "perp") != 0) { if (rank == 0) printf("Alignment must be para or perp\n"); MPI_Finalize(); exit(1); } strcpy(par[0].align, argv[7]); strcpy(par[1].align, argv[7]); par[0].theta = 0; par[1].theta = atof(argv[8]); sep = atoi(argv[9]); ba = atoi(argv[10]); if (argc == 12) id = atoi(argv[11]); else id = 1; par[0].cy = par[1].cy = ny / 2; par[0].cx = nx / 2 - par[0].major - sep / 2; par[1].cx = nx / 2 + par[1].major + sep / 2 - 1; sprintf(suffix, "r%dx%d_t%.0f_s%d_a%d_%d_%s", par[0].major, par[0].minor, par[1].theta, sep, ba, id, par[0].align); par[1].theta = PI * par[1].theta / 180.0; random_key key; int success = initialise(&grid, &lock, par, sep, ba, suffix, &key); int all_succeeded; MPI_Allreduce(&success, &all_succeeded, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); if (all_succeeded != np) { MPI_Finalize(); return 0; } strcat(gname, suffix); print(grid, gname); fret = func(grid, lock, 0); if (rank == 0) { printf("Initial Frank Energy: %f\n", fret); strcat(fname, suffix); log_fp = fopen(fname, "w"); } start = MPI_Wtime(); monte(grid, lock, maxiter, t0, log_fp, suffix, key); end = MPI_Wtime(); grid2root(grid, &fgrid); lock2root(lock, &flock); prncont(fgrid, "testgrid"); fret = func(grid, lock, 0); if (rank == 0) conjgrad(fgrid, flock, 10000, &fret, log_fp, suffix, par, sep); if (rank == 0) { printf("End Frank Energy: %f\n", fret); printf("No. iterations: %d\n", iter); printf("Time taken: %f\n", end - start); } MPI_Finalize(); return 0; }
int main(int argc, char *argv[]) { /* Welcome */ welcome(); test(); /* Do step 0, initialization */ db_open(); printf("Step 0. Initialize enviroment\n"); fflush(stdout); if (init()) { db_close(); printf("Help message: double check file \"run.prm\" in current directory.\n"); return USERERR; } else printf("Step 0 Done.\n\n"); /* Do step 1, premcce */ if (env.do_premcce) { printf("Step 1. Test and format structral file\n"); fflush(stdout); if (premcce()) {db_close(); return USERERR;} else printf("Step 1 Done.\n\n"); } else printf("Not doing \"Step 1. Test and format structral file\"\n\n"); /* Do step 2. rotamers */ if (env.do_rotamers) { printf("Step 2. Make multi side chain conformers\n"); fflush(stdout); if (env.sidechain_opt==1) {//genetic algorithm sidechain packing optimization printf("***Using Pascal Comte's (Brock University-Computer Science,2010) [Paper Ref.: ] Sidechain Packing GA & Bi-directional Evolutionary Sampling***\n"); // rotamers_GA(argc,argv); } else if (rotamers()) { db_close(); return USERERR; } else printf("Step 2 Done.\n\n"); } else printf("Not doing \"Step 2. Make multi side chain conformers\"\n\n"); /* Do step 3. energies */ if (env.do_energies) { printf("Step 3. Compute energy lookup table\n"); fflush(stdout); if (energies()) {db_close(); return USERERR;} else printf("Step 3 Done.\n\n"); } else printf("Not doing \"Step 3. Compute energy lookup table\"\n\n"); /* Do step 4. Monte Carlo */ if (env.do_monte) { printf("Step 4. Monte Carlo Sampling\n"); fflush(stdout); if (!env.monte_adv_opt) { if (monte()) {db_close(); return USERERR;} else printf("Step 4 Done.\n\n"); } else { if (monte2()) {db_close(); return USERERR;} else printf("Step 4 Done.\n\n"); } } else printf("Not doing \"Step 4. Monte Carlo Sampling\"\n\n"); db_close(); return 0; }