Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
Arquivo: main.c Projeto: fenech/2d
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;
}
Exemplo n.º 4
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;
}