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); } }
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]); }
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 */
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 ); } }