#include <NamdState.h>
Public Member Functions | |
| NamdState (void) | |
| ~NamdState () | |
| int | configFileInit (char *) |
| int | configListInit (ConfigList *) |
| int | status () |
| void | useController (Controller *controllerPtr) |
| void | runController (void) |
Friends | |
| class | Namd |
| class | Node |
| class | Controller |
| class | ScriptTcl |
|
|
Definition at line 30 of file NamdState.C. 00031 {
00032 configList = NULL;
00033 simParameters = NULL;
00034 parameters = NULL;
00035 molecule = NULL;
00036 pdb = NULL;
00037 }
|
|
|
Definition at line 37 of file NamdState.h. 00037 {}
|
|
|
|
|
|
Definition at line 82 of file NamdState.C. References SimParameters::amberOn, Ambertoppar, Molecule::atomcharge(), Molecule::atommass(), BigReal, Molecule::build_constant_forces(), Molecule::build_constorque_params(), Molecule::build_constraint_params(), Molecule::build_exPressure_atoms(), Molecule::build_extra_bonds(), Molecule::build_fep_flags(), Molecule::build_fixed_atoms(), Molecule::build_gridforce_params(), Molecule::build_langevin_params(), Molecule::build_movdrag_params(), Molecule::build_rotdrag_params(), Molecule::build_stirred_atoms(), SimParameters::comMove, SimParameters::consForceOn, SimParameters::consTorqueOn, SimParameters::constraintsOn, StringList::data, DebugM, SimParameters::excludeFromPressure, SimParameters::extraBondsOn, SimParameters::fepOn, ConfigList::find(), SimParameters::fixedAtomsOn, SimParameters::genCompressedPsf, SimParameters::gridforceOn, SimParameters::gromacsOn, iINFO(), iout, SimParameters::langevinDamping, SimParameters::langevinHydrogen, SimParameters::langevinOn, SimParameters::lattice, SimParameters::lesOn, SimParameters::minimizeCGOn, SimParameters::movDragOn, NAMD_bug(), NAMD_die(), PDB::num_atoms(), Molecule::numAngles, Molecule::numAtoms, Molecule::numBonds, Molecule::numConsForce, Molecule::numConstraints, Molecule::numCrossterms, Molecule::numDihedrals, Molecule::numExclusions, Molecule::numFepFinal, Molecule::numFepInitial, Molecule::numFixedAtoms, Molecule::numFixedGroups, Molecule::numFixedRigidBonds, Molecule::numGridforces, Molecule::numHydrogenGroups, Molecule::numImpropers, Molecule::numMultipleDihedrals, Molecule::numMultipleImpropers, Molecule::numRigidBonds, Molecule::numStirredAtoms, ConfigList::okay(), SimParameters::pairInteractionOn, SimParameters::pairInteractionSelf, SimParameters::paraTypeCharmmOn, SimParameters::paraTypeXplorOn, SimParameters::pressureProfileAtomTypes, Molecule::print_atoms(), Molecule::print_bonds(), Molecule::print_exclusions(), Parameters::print_param_summary(), read_binary_coors(), parm::readparm(), SimParameters::rigidBonds, SimParameters::rotDragOn, SimParameters::stirOn, SimParameters::tCoupleOn, SimParameters::thermInt, and SimParameters::vdwscale14. 00082 {
00083 configList = cfgList;
00084 if (!configList->okay()) {
00085 NAMD_die("Simulation config file is incomplete or contains errors.");
00086 }
00087 DebugM(1,"NamdState::configFileInit configList okay\n");
00088
00089 char *currentdir = 0;
00090 simParameters = new SimParameters(configList,currentdir);
00091 fflush(stdout);
00092 lattice = simParameters->lattice;
00093
00094 // If it's AMBER force field, read the AMBER style files;
00095 // if it's GROMACS, read the GROMACS files;
00096 // Otherwise read the CHARMM style files
00097
00098 if (simParameters->amberOn)
00099 { StringList *parmFilename = configList->find("parmfile");
00100 StringList *coorFilename = configList->find("ambercoor");
00101 // "amber" is a temporary data structure, which records all
00102 // the data from the parm file. After copying them into
00103 // molecule, parameter and pdb structures, it will be deleted.
00104 Ambertoppar *amber;
00105 amber = new Ambertoppar;
00106 if (amber->readparm(parmFilename->data))
00107 { parameters = new Parameters(amber, simParameters->vdwscale14);
00108 molecule = new Molecule(simParameters, parameters, amber);
00109 if (coorFilename != NULL)
00110 pdb = new PDB(coorFilename->data,amber);
00111 delete amber;
00112 }
00113 else
00114 NAMD_die("Failed to read AMBER parm file!");
00115 parameters->print_param_summary();
00116 }
00117 else if (simParameters->gromacsOn) {
00118 StringList *topFilename = configList->find("grotopfile");
00119 StringList *coorFilename = configList->find("grocoorfile");
00120 // "gromacsFile" is a temporary data structure, which records all
00121 // the data from the topology file. After copying it into the
00122 // molecule and parameter and pdb, it will be deleted.
00123 GromacsTopFile *gromacsFile;
00124 gromacsFile = new GromacsTopFile(topFilename->data);
00125 parameters = new Parameters(gromacsFile,simParameters->minimizeCGOn);
00126 if (coorFilename != NULL)
00127 pdb = new PDB(coorFilename->data,gromacsFile);
00128
00129 molecule = new Molecule(simParameters, parameters, gromacsFile);
00130 // XXX does Molecule(needAll,these,arguments)?
00131
00132 delete gromacsFile; // XXX unimplemented
00133
00134 // XXX add error handling when the file doesn't exist
00135 // XXX make sure the right things happen when the parameters are
00136 // not even specified.
00137 // NAMD_die("Failed to read AMBER parm file!");
00138 parameters->print_param_summary();
00139 }
00140 else
00141 { StringList *moleculeFilename = configList->find("structure");
00142 StringList *parameterFilename = configList->find("parameters");
00143 //****** BEGIN CHARMM/XPLOR type changes
00144 // For AMBER use different constructor based on parm_struct!!! -JCP
00145 parameters = new Parameters(simParameters, parameterFilename);
00146 //****** END CHARMM/XPLOR type changes
00147
00148 if(simParameters->genCompressedPsf){
00149 molecule = new Molecule(simParameters, parameters, moleculeFilename->data, configList);
00150 iout << "Finished Compressing psf file!\n" <<endi;
00151 CkExit();
00152 }
00153 else{
00154 parameters->print_param_summary();
00155 molecule = new Molecule(simParameters, parameters, moleculeFilename->data);
00156 }
00157 }
00158 fflush(stdout);
00159
00160 StringList *coordinateFilename = configList->find("coordinates");
00161
00162 #ifdef MEM_OPT_VERSION
00163 if (coordinateFilename != NULL)
00164 pdb = new PDB(coordinateFilename->data, molecule->numAtoms);
00165 #else
00166 if (coordinateFilename != NULL)
00167 pdb = new PDB(coordinateFilename->data);
00168 if (pdb->num_atoms() != molecule->numAtoms) {
00169 NAMD_die("Number of pdb and psf atoms are not the same!");
00170 }
00171 #endif
00172
00173 StringList *binCoordinateFilename = configList->find("bincoordinates");
00174 if ( binCoordinateFilename ) {
00175 read_binary_coors(binCoordinateFilename->data, pdb);
00176 }
00177
00178 // If constraints are active, build the parameters necessary
00179 if (simParameters->constraintsOn)
00180 {
00181 StringList *consRefFile = configList->find("consref");
00182 StringList *consKFile = configList->find("conskfile");
00183
00184 if (coordinateFilename != NULL) {
00185 if(strcasecmp(coordinateFilename->data, consRefFile->data)==0)
00186 consRefFile = NULL;
00187 if(strcasecmp(coordinateFilename->data, consKFile->data)==0)
00188 consKFile = NULL;
00189 }
00190
00191 molecule->build_constraint_params(consRefFile, consKFile,
00192 configList->find("conskcol"),
00193 pdb,
00194 NULL);
00195 }
00196 //CkPrintf ("DEBUG--check if StirOn to build stir params..\n");
00197 if (simParameters->stirOn)
00198 {
00199 //CkPrintf ("DEBUG--now to build stir params..\n");
00200
00201 molecule->build_stirred_atoms(configList->find("stirFilename"),
00202 configList->find("stirredAtomsCol"),
00203 pdb,
00204 NULL);
00205 }
00206
00207 if (simParameters->extraBondsOn) {
00208 #ifdef MEM_OPT_VERSION
00209 iout << "Information about the extra bonds have been already integrated into the compressed psf file!\n" <<endi;
00210 #else
00211 molecule->build_extra_bonds(parameters,
00212 configList->find("extraBondsFile"));
00213 #endif
00214 }
00215
00216 if (simParameters->fixedAtomsOn)
00217 {
00218 molecule->build_fixed_atoms(configList->find("fixedatomsfile"),
00219 configList->find("fixedatomscol"),
00220 pdb,
00221 NULL);
00222 }
00223
00224 /* BEGIN gf */
00225 if (simParameters->gridforceOn)
00226 {
00227 molecule->build_gridforce_params(configList->find("gridforcefile"),
00228 configList->find("gridforcecol"),
00229 configList->find("gridforceqcol"),
00230 configList->find("gridforcevfile"),
00231 pdb,
00232 NULL);
00233 }
00234 /* END gf */
00235
00236 // If constant forces are active, read the forces necessary
00237 if (simParameters->consForceOn) {
00238 char *filename = NULL;
00239 if (configList->find("consforcefile"))
00240 filename = configList->find("consforcefile")->data;
00241 molecule->build_constant_forces(filename);
00242 }
00243
00244 if (simParameters->excludeFromPressure) {
00245 molecule->build_exPressure_atoms(
00246 configList->find("excludeFromPressureFile"),
00247 configList->find("excludeFromPressureCol"),
00248 pdb, NULL);
00249 }
00250
00251 // If moving drag is active, build the parameters necessary
00252 if (simParameters->movDragOn) {
00253 molecule->build_movdrag_params(configList->find("movDragFile"),
00254 configList->find("movDragCol"),
00255 configList->find("movDragVelFile"),
00256 pdb,
00257 NULL);
00258 }
00259
00260 // If rotating drag is active, build the parameters necessary
00261 if (simParameters->rotDragOn) {
00262 molecule->build_rotdrag_params(configList->find("rotDragFile"),
00263 configList->find("rotDragCol"),
00264 configList->find("rotDragAxisFile"),
00265 configList->find("rotDragPivotFile"),
00266 configList->find("rotDragVelFile"),
00267 configList->find("rotDragVelCol"),
00268 pdb,
00269 NULL);
00270 }
00271
00272 // If "constant" torque is active, build the parameters necessary
00273 if (simParameters->consTorqueOn) {
00274 molecule->build_constorque_params(configList->find("consTorqueFile"),
00275 configList->find("consTorqueCol"),
00276 configList->find("consTorqueAxisFile"),
00277 configList->find("consTorquePivotFile"),
00278 configList->find("consTorqueValFile"),
00279 configList->find("consTorqueValCol"),
00280 pdb,
00281 NULL);
00282 }
00283
00284 // If langevin dynamics or temperature coupling are active, build
00285 // the parameters necessary
00286 if (simParameters->langevinOn)
00287 {
00288 if (simParameters->langevinDamping == 0.0) {
00289 molecule->build_langevin_params(configList->find("langevinfile"),
00290 configList->find("langevincol"),
00291 pdb,
00292 NULL);
00293 } else {
00294 molecule->build_langevin_params(simParameters->langevinDamping,
00295 simParameters->langevinHydrogen);
00296 }
00297 }
00298 else if (simParameters->tCoupleOn)
00299 {
00300 // Temperature coupling uses the same parameters, but with different
00301 // names . . .
00302 molecule->build_langevin_params(configList->find("tcouplefile"),
00303 configList->find("tcouplecol"),
00304 pdb,
00305 NULL);
00306 }
00307
00308 //Modifications for alchemical fep
00309 //SD & CC, CNRS - LCTN, Nancy
00310 //identify the mutant atoms for fep simulation
00311 if (simParameters->fepOn) {
00312 molecule->build_fep_flags(configList->find("fepfile"),
00313 configList->find("fepcol"), pdb, NULL);
00314 }
00315 if (simParameters->thermInt) {
00316 molecule->build_fep_flags(configList->find("tifile"),
00317 configList->find("ticol"), pdb, NULL);
00318 }
00319 //fepe
00320 if (simParameters->lesOn) {
00321 if (simParameters->fepOn || simParameters->thermInt) NAMD_bug("FEP/TI and LES are incompatible!");
00322 molecule->build_fep_flags(configList->find("lesfile"),
00323 configList->find("lescol"), pdb, NULL);
00324 }
00325 if (simParameters->pairInteractionOn) {
00326 molecule->build_fep_flags(configList->find("pairInteractionFile"),
00327 configList->find("pairInteractionCol"), pdb, NULL);
00328 }
00329 if (simParameters->pressureProfileAtomTypes > 1) {
00330 molecule->build_fep_flags(configList->find("pressureProfileAtomTypesFile"),
00331 configList->find("pressureProfileAtomTypesCol"), pdb, NULL);
00332 }
00333
00334 iout << iINFO << "****************************\n";
00335 iout << iINFO << "STRUCTURE SUMMARY:\n";
00336 iout << iINFO << molecule->numAtoms << " ATOMS\n";
00337 iout << iINFO << molecule->numBonds << " BONDS\n";
00338 iout << iINFO << molecule->numAngles << " ANGLES\n";
00339 iout << iINFO << molecule->numDihedrals << " DIHEDRALS\n";
00340 iout << iINFO << molecule->numImpropers << " IMPROPERS\n";
00341 iout << iINFO << molecule->numCrossterms << " CROSSTERMS\n";
00342 iout << iINFO << molecule->numExclusions << " EXCLUSIONS\n";
00343
00344 //****** BEGIN CHARMM/XPLOR type changes
00345 if ((molecule->numMultipleDihedrals) && (simParameters->paraTypeXplorOn))
00346 {
00347 iout << iINFO << molecule->numMultipleDihedrals
00348 << " DIHEDRALS WITH MULTIPLE PERIODICITY (BASED ON PSF FILE)\n";
00349 }
00350 if ((molecule->numMultipleDihedrals) && (simParameters->paraTypeCharmmOn))
00351 {
00352 iout << iINFO << molecule->numMultipleDihedrals
00353 << " DIHEDRALS WITH MULTIPLE PERIODICITY IGNORED (BASED ON PSF FILE) \n";
00354 iout << iINFO
00355 << " CHARMM MULTIPLICITIES BASED ON PARAMETER FILE INFO! \n";
00356 }
00357 //****** END CHARMM/XPLOR type changes
00358
00359 if (molecule->numMultipleImpropers)
00360 {
00361 iout << iINFO << molecule->numMultipleImpropers
00362 << " IMPROPERS WITH MULTIPLE PERIODICITY\n";
00363 }
00364
00365 if (simParameters->constraintsOn)
00366 {
00367 iout << iINFO << molecule->numConstraints << " CONSTRAINTS\n";
00368 }
00369
00370 if (simParameters->consForceOn)
00371 iout << iINFO << molecule->numConsForce << " CONSTANT FORCES\n";
00372
00373 if (simParameters->stirOn)
00374 iout << iINFO << molecule->numStirredAtoms << " STIRRED ATOMS\n";
00375
00376 if (simParameters->fixedAtomsOn)
00377 {
00378 iout << iINFO << molecule->numFixedAtoms << " FIXED ATOMS\n";
00379 }
00380
00381 if (simParameters->rigidBonds)
00382 {
00383 iout << iINFO << molecule->numRigidBonds << " RIGID BONDS\n";
00384 }
00385
00386 if (simParameters->fixedAtomsOn && simParameters->rigidBonds)
00387 {
00388 iout << iINFO << molecule->numFixedRigidBonds <<
00389 " RIGID BONDS BETWEEN FIXED ATOMS\n";
00390 }
00391
00392 /* BEGIN gf */
00393 if (simParameters->gridforceOn)
00394 {
00395 iout << iINFO << molecule->numGridforces << " GRID FORCES\n";
00396 }
00397 /* END gf */
00398
00399 //Modifications for alchemical fep
00400 //SD & CC, CNRS - LCTN, Nancy
00401 if (simParameters->fepOn || simParameters->thermInt) {
00402 iout << iINFO << molecule->numFepInitial <<
00403 " ATOMS TO DISAPPEAR IN FINAL STATE\n";
00404 iout << iINFO << molecule->numFepFinal <<
00405 " ATOMS TO APPEAR IN FINAL STATE\n";
00406 }
00407 //fepe
00408
00409 if (simParameters->lesOn) {
00410 iout << iINFO << molecule->numFepInitial <<
00411 " LOCALLY ENHANCED ATOMS ENABLED\n";
00412 }
00413
00414 if (simParameters->pairInteractionOn) {
00415 iout << iINFO << "PAIR INTERACTION GROUP 1 CONTAINS "
00416 << molecule->numFepInitial << " ATOMS\n";
00417 if (!simParameters->pairInteractionSelf) {
00418 iout << iINFO << "PAIR INTERACTION GROUP 2 CONTAINS "
00419 << molecule->numFepFinal << " ATOMS\n";
00420 }
00421 }
00422
00423
00424 {
00425 // Copied from Controller::printEnergies()
00426 int numAtoms = molecule->numAtoms;
00427 int numDegFreedom = 3 * numAtoms;
00428 int numFixedAtoms = molecule->numFixedAtoms;
00429 if ( numFixedAtoms ) numDegFreedom -= 3 * numFixedAtoms;
00430 if ( ! ( numFixedAtoms || molecule->numConstraints
00431 || simParameters->comMove || simParameters->langevinOn ) ) {
00432 numDegFreedom -= 3;
00433 }
00434 int numRigidBonds = molecule->numRigidBonds;
00435 int numFixedRigidBonds = molecule->numFixedRigidBonds;
00436 numDegFreedom -= ( numRigidBonds - numFixedRigidBonds );
00437 iout << iINFO << numDegFreedom << " DEGREES OF FREEDOM\n";
00438 }
00439
00440 iout << iINFO << molecule->numHydrogenGroups << " HYDROGEN GROUPS\n";
00441 if (simParameters->fixedAtomsOn)
00442 {
00443 iout << iINFO << molecule->numFixedGroups <<
00444 " HYDROGEN GROUPS WITH ALL ATOMS FIXED\n";
00445 }
00446
00447 {
00448 BigReal totalMass = 0;
00449 BigReal totalCharge = 0;
00450 int i;
00451 for ( i = 0; i < molecule->numAtoms; ++i ) {
00452 totalMass += molecule->atommass(i);
00453 totalCharge += molecule->atomcharge(i);
00454 }
00455 iout << iINFO << "TOTAL MASS = " << totalMass << " amu\n";
00456 iout << iINFO << "TOTAL CHARGE = " << totalCharge << " e\n";
00457 }
00458
00459 iout << iINFO << "*****************************\n";
00460 iout << endi;
00461 fflush(stdout);
00462
00463 DebugM(4, "::configFileInit() - printing Molecule Information\n");
00464
00465 molecule->print_atoms(parameters);
00466 molecule->print_bonds(parameters);
00467 molecule->print_exclusions();
00468 fflush(stdout);
00469
00470 DebugM(4, "::configFileInit() - done printing Molecule Information\n");
00471 DebugM(1, "::configFileInit() - done\n");
00472
00473 return(0);
00474 }
|
|
|
Definition at line 75 of file NamdState.C. References Controller::run(). Referenced by Node::run(). 00076 {
00077 controller->run();
00078 }
|
|
|
Definition at line 40 of file NamdState.C. References DebugM. 00041 {
00042 int ret=0;
00043 if (configList != NULL) {
00044 DebugM(1, "Config List exists\n");
00045 } else ret++;
00046
00047 if (simParameters != NULL) {
00048 DebugM(1, "SimParameters exists\n");
00049 }
00050 else ret++;
00051
00052 if (parameters != NULL) {
00053 DebugM(1,"Parameters exists\n");
00054 }
00055 else ret++;
00056
00057 if (molecule != NULL) {
00058 DebugM(1, "Molecule exists\n");
00059 }
00060 else ret++;
00061
00062 if (pdb != NULL) {
00063 DebugM(1,"PDB exists \n");
00064 }
00065 else ret++;
00066
00067 return(ret);
00068 }
|
|
|
Definition at line 70 of file NamdState.C. 00071 {
00072 controller=controllerPtr;
00073 }
|
|
|
Definition at line 25 of file NamdState.h. |
|
|
Definition at line 23 of file NamdState.h. |
|
|
Definition at line 24 of file NamdState.h. |
|
|
Definition at line 39 of file NamdState.h. |
1.3.9.1