Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

NamdState Class Reference

#include <NamdState.h>

List of all members.

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


Constructor & Destructor Documentation

NamdState::NamdState void   ) 
 

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 }

NamdState::~NamdState  )  [inline]
 

Definition at line 37 of file NamdState.h.

00037 {}


Member Function Documentation

int NamdState::configFileInit char *   ) 
 

int NamdState::configListInit ConfigList  ) 
 

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 }

void NamdState::runController void   ) 
 

Definition at line 75 of file NamdState.C.

References Controller::run().

Referenced by Node::run().

00076 {
00077   controller->run();
00078 }

int NamdState::status  ) 
 

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 }

void NamdState::useController Controller controllerPtr  ) 
 

Definition at line 70 of file NamdState.C.

00071 {
00072   controller=controllerPtr;
00073 }


Friends And Related Function Documentation

friend class Controller [friend]
 

Definition at line 25 of file NamdState.h.

friend class Namd [friend]
 

Definition at line 23 of file NamdState.h.

friend class Node [friend]
 

Definition at line 24 of file NamdState.h.

friend class ScriptTcl [friend]
 

Definition at line 39 of file NamdState.h.


The documentation for this class was generated from the following files:
Generated on Thu Jul 24 04:07:44 2008 for NAMD by  doxygen 1.3.9.1