void initStrain(){
	printf("Initializing strain tensor...\n");

	//createDeformGradientTensor();

	initDeformGradient();

	if (stretchOn) initStretch();

	atomGreenStrain = (double**)calloc(pdbData.atomCount, sizeof(double*));
	int i;
	for (i = 0; i < pdbData.atomCount; i++){
		atomGreenStrain[i] = (double*)calloc(9, sizeof(double));
	}

	if (computeOn){
		getMaskedParameter(outGreenStrainFilename, "outputGreenStrain", "", 0);
		outGreenStrain = fopen(outGreenStrainFilename, "w");
		fclose(outGreenStrain);
	}

	if (printPDBOn){
		if (!computeOn){
			getMaskedParameter(tnsrGreenStrainFilename, "inputGreenStrain", "", 0);
			tnsrGreenStrain = fopen(tnsrGreenStrainFilename, "r");
		}
		getMaskedParameter(pdbGreenStrainFilename, "outputPDBGreenStrain", "", 0);
		pdbGreenStrain = fopen(pdbGreenStrainFilename, "w");
		fclose(pdbGreenStrain);
		strainNormalScale = getDoubleParameter("strainNormalScaleFactor", 1.0, 1);
		strainShearScale = getDoubleParameter("strainShearScaleFactor", 1.0, 1);
	}

}
void initSphereStress(){
	printf("Initializing sphere stress tensor...\n");

	atomSphereStress = (Vector*)calloc(pdbData.atomCount, sizeof(Vector));

	if (computeOn){
		getMaskedParameter(outSphereStressFilename, "outputSphereStress", "", 0);
		outSphereStress = fopen(outSphereStressFilename, "w");
		fclose(outSphereStress);
	}

	if (printPDBOn) {
		if (!computeOn){
			getMaskedParameter(tnsrSphereStressFilename, "inputSphereStress", "", 0);
			tnsrSphereStress = fopen(tnsrSphereStressFilename, "r");
		}
		getMaskedParameter(pdbSphereStressFilename, "outputPDBSphereStress", "", 0);
		pdbSphereStress = fopen(pdbSphereStressFilename, "w");
		fclose(pdbSphereStress);
		sphereLateralScale = getDoubleParameter("sphereScaleFactor", 1.0, 1);
		sphere45ShearScale = getDoubleParameter("sphereScaleFactor", 1.0, 1);
		sphereRadialScale = getDoubleParameter("sphereScaleFactor", 1.0, 1);
	}

}
Пример #3
0
int main(int argc, char *argv[])
{
  char line[80];
  char *xs;
  double x;
  int which_bin;
  int i=0;

  instream = stdin;

  setCommandLineParameters(argc, argv);
  if (getFlagParam("-usage")){
    printf("usage:     dst2hst    -width [1.0]\n");
    printf("                      -n_bins [64]\n");
    printf("                      -start_x [0.0]\n");
    printf("                      \n");
    exit(0);
  }

  while (++i < argc)
  {
    if ((argc>1) && ((*argv[i]) != '-')) instream = fopen(argv[i], "r");
    else if (!strcmp(argv[i], "-width")) width = getDoubleParameter("width", argv[++i]);
    else if (!strcmp(argv[i], "-n_bins")) n_bins = getIntParameter("n_bins", argv[++i]);
    else if (!strcmp(argv[i], "-start_x")) start_x = getDoubleParameter("start_x", argv[++i]);
  }

  end_x = start_x + n_bins * width;

  while (1)
  {
    fgets(line, 80, instream);
    if (feof(instream)) break;

    xs = strtok(line, "\n");
    x = strtod(xs, NULL);

    if ((x < start_x) || (x > end_x)) fprintf(stderr, "%lf outside of range, discarding...\n", x);

    else
    {
      which_bin = (int)floor((x - start_x)/width);
      all_bins[which_bin]++;
    }

  }

  for (which_bin = 0; which_bin<n_bins; which_bin++) printf("%lf\t%d\n", start_x + which_bin*width, all_bins[which_bin]);
}
Пример #4
0
int main(int argc, char *argv[])
{
    int i=0;
    double old_energy, new_energy;
    double delta_energy;
    double boltzmann_factor;
    double the_exponential;
    int monte_carlo_steps;
    int trial_number;
    double x0, y0, z0;
    double dx, dy, dz;
    double rvlen;

    double sum_dx, sum_dy, sum_dz;

    instream = stdin;

    while (++i < argc)
    {
        if ((argc>1) && (*argv[i] != '-')) instream = fopen(argv[i], "r");
        else if (!strcmp(argv[i], "-v")) verbose = 1;
        else if (!strcmp(argv[i], "-T")) temperature = getDoubleParameter("temperature", argv[++i]);
        else if (!strcmp(argv[i], "-dim"))
        {
            box_x = getDoubleParameter("box_x", argv[++i]);
            box_y = getDoubleParameter("box_y", argv[++i]);
            box_z = getDoubleParameter("box_z", argv[++i]);
        }
        else if (!strcmp(argv[i], "-n_trials")) n_trials = getDoubleParameter("n_trials", argv[++i]);
        else if (!strcmp(argv[i], "-rng_seed")) rng_seed = getIntParameter("rng_seed", argv[++i]);
        else if (!strcmp(argv[i], "-n_steps")) n_steps = getIntParameter("n_steps", argv[++i]);
        else if (!strcmp(argv[i], "-randomize")) rng_seed = getRandomSeed();
        else if (!strcmp(argv[i], "-perturbation_length")) perturbation_length = getDoubleParameter("perturbation_length", argv[++i]);
    }

    initializeRandomNumberGeneratorTo(rng_seed);
    loadConfiguration();

    for (trial_number = 0; trial_number < n_trials; trial_number++)
    {
        sum_dx = 0;
        sum_dy = 0;
        sum_dz = 0;
        V printf("trial number %d\n", trial_number);
        accepted_moves = 0;

        // pick starting point
        x0 = x[number_of_molecules] = box_x * rnd();
        y0 = y[number_of_molecules] = box_y * rnd();
        z0 = z[number_of_molecules] = box_z * rnd();

        // move it a bunch of times
        for(monte_carlo_steps=0; monte_carlo_steps<n_steps; monte_carlo_steps++)
        {
            dx = 2*(rnd() - .5);
            dy = 2*(rnd() - .5);
            dz = 2*(rnd() - .5);

            rvlen = perturbation_length / sqrt(dx*dx + dy*dy + dz*dz);
            dx *= rvlen;
            dy *= rvlen;
            dz *= rvlen;

            // try out the new position
            old_energy = calculateSystemEnergy();

            x[number_of_molecules] += dx;
            y[number_of_molecules] += dy;
            z[number_of_molecules] += dz;
            adjustForBoundary(number_of_molecules);

            new_energy = calculateSystemEnergy();
            delta_energy = new_energy - old_energy;

            if (delta_energy <= 0)
            {
                accepted_moves++;
                sum_dx += dx;
                sum_dy += dy;
                sum_dz += dz;
                continue; /* move accepted */
            }

            the_exponential = 0.0 - delta_energy/temperature;

            if (the_exponential > -75)
            {
                boltzmann_factor = exp(the_exponential);
                if (boltzmann_factor > rnd())
                {
                    accepted_moves++;
                    sum_dx += dx;
                    sum_dy += dy;
                    sum_dz += dz;
                    continue; /* move accepted */
                }
            }

            /* move rejected: */
            x[number_of_molecules] -= dx;
            y[number_of_molecules] -= dy;
            z[number_of_molecules] -= dz;
            adjustForBoundary(number_of_molecules);
        }

        // look at end point, compare

        total_translation = sqrt(sum_dx*sum_dx + sum_dy*sum_dy + sum_dz*sum_dz);

        printf("%lf\n", total_translation);
        V printf("%lf\t%lf\t%lf\t%lf\n", sum_dx, sum_dy, sum_dz, total_translation);
        V printf("acceptance ratio:  %lf\n", (0.0 + accepted_moves)/n_steps);
    }

    return 0;
} /* end main */
Пример #5
0
Control::Control( int argc, char** argv ) {

	// parse the command line options to set all vars

	if( ( argc % 2 == 0 ) || ( argc == 1 ) ) {
		cerr << "Parse error: Number of command line parameters incorrect\n";
		cerr << "Usage:" << endl;
		cerr << argv[ 0 ] << " -i InputFile [-o OutputFile] [-n NumberOfTries] [-s RandomSeed] [-t TimeLimit] [-p ProblemType]" << endl;
		exit(1);
	}
	
	for( int i = 1; i < argc / 2 + 1; i++ ) {
		parameters[ argv[ i * 2 - 1 ] ] = argv[ i * 2 ];
	}
	
	nrTry = 0;
	
	// check for input parameter
	
	if( parameterExists( "-i") ) {
		is = new ifstream( getStringParameter( "-i" ).c_str() );
	} else {
		cerr << "Error: No input file given, exiting" << endl;
		cerr << "Usage:" << endl;
		cerr << argv[ 0 ] << " -i InputFile [-o OutputFile] [-n NumberOfTries] [-s RandomSeed] [-t TimeLimit] [-p ProblemType]" << endl;
		exit(1);
	}
	
	// check for ouput parameter
	
	if( parameterExists( "-o" ) ) {
		os = new ofstream( getStringParameter( "-o" ).c_str() );
	} else {
		cerr << "Warning: No output file given, writing to stdout" << endl;
		os = &cout;
	}
	
	// check for number of tries parameter
	
	if( parameterExists( "-n" ) ) {
		maxTry = getIntParameter( "-n" );
		cout << "Max number of tries " << maxTry << endl;
	} else {
		cerr << "Warning: Number of tries is set to default (10)" << endl;
		maxTry = 10; // default number of tries
	}

	// check for time limit parameter
	
	if( parameterExists( "-t" ) ) {
		timeLimit = getDoubleParameter( "-t" );
		cout <<"Time limit " << timeLimit << endl;
	} else {
		cerr << "Warning: Time limit is set to default (90 sec)" << endl;
		timeLimit = 90; // default time limit
	}

        // check for problem instance type parameter for the local search

	if( parameterExists( "-p" ) ) {
		problemType = getIntParameter( "-p" );
		cout <<"Problem instance type " << problemType << endl;
	} else {
	  //cerr << "Warning: The problem instance type is set by default to 1 (easy)" << endl;
		problemType = 1; // default problem type
	}


        // check for maximum steps parameter for the local search
	
	if( parameterExists( "-m" ) ) {
		maxSteps = getIntParameter( "-m" );
		cout <<"Max number of steps in the local search " << maxSteps << endl;
	} else {
	  //cerr << "Warning: The maximum number of steps for the local search is set by default to 100" << endl;
		maxSteps = 100; // default max steps
	}

        // check for time limit parameter for the local search
	
	if( parameterExists( "-l" ) ) {
		LS_limit = getDoubleParameter( "-l" );
		cout <<"Local search time limit " << LS_limit << endl;
	} else {
		cerr << "Warning: The local search time limit is set to default (99999 sec)" << endl;
		LS_limit = 99999; // default local search time limit
	}

        // check for probability parameter for each move in the local search
	
	if( parameterExists( "-p1" ) ) {
		prob1 = getDoubleParameter( "-p1" );
		cout << "LS move 1 probability " << prob1 <<endl;
	} else {
		cerr << "Warning: The local search move 1 probability is set to default 1.0" << endl;
		prob1 = 1.0; // default local search probability for each move of type 1 to be performed
	}

	if( parameterExists( "-p2" ) ) {
		prob2 = getDoubleParameter( "-p2" );
		cout <<"LS move 2 probability " << prob2 << endl;
	} else {
		cerr << "Warning: The local search move 2 probability is set to default 1.0" << endl;
		prob2 = 1.0; // default local search probability for each move to be performed
	}

	if( parameterExists( "-p3" ) ) {
		prob3 = getDoubleParameter( "-p3" );
		cout <<"LS move 3 probability " << prob3 <<  endl;
	} else {
		cerr << "Warning: The local search move 3 probability is set to default 0.0" << endl;
		prob3 = 0.0; // default local search probability for each move to be performed
	}

	// check for random seed
	
	if( parameterExists( "-s" ) ) {
		seed = getIntParameter( "-s" );
		srand( seed );
	} else {
		seed = time( NULL );
		cerr << "Warning: " << seed << " used as default random seed" << endl;
		srand( seed );
	}
}