ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/SimSetup.cpp
(Generate patch)

Comparing trunk/OOPSE/libmdtools/SimSetup.cpp (file contents):
Revision 962 by tim, Mon Jan 19 18:36:21 2004 UTC vs.
Revision 999 by chrisfen, Fri Jan 30 15:01:09 2004 UTC

# Line 24 | Line 24
24   #define NPTxyz_ENS     4
25  
26  
27 < #define FF_DUFF 0
28 < #define FF_LJ   1
29 < #define FF_EAM  2
27 > #define FF_DUFF  0
28 > #define FF_LJ    1
29 > #define FF_EAM   2
30 > #define FF_H2O 3
31  
32   using namespace std;
33  
# Line 174 | Line 175 | void SimSetup::makeMolecules(void){
175    bend_set* theBends;
176    torsion_set* theTorsions;
177  
177
178    //init the forceField paramters
179  
180    the_ff->readParams();
# Line 182 | Line 182 | void SimSetup::makeMolecules(void){
182  
183    // init the atoms
184  
185 +  double phi, theta, psi;
186 +  double sux, suy, suz;
187 +  double Axx, Axy, Axz, Ayx, Ayy, Ayz, Azx, Azy, Azz;
188    double ux, uy, uz, u, uSqr;
189  
190    for (k = 0; k < nInfo; k++){
# Line 218 | Line 221 | void SimSetup::makeMolecules(void){
221            info[k].n_oriented++;
222            molInfo.myAtoms[j] = dAtom;
223  
224 <          ux = currentAtom->getOrntX();
225 <          uy = currentAtom->getOrntY();
226 <          uz = currentAtom->getOrntZ();
224 >          // Directional Atoms have standard unit vectors which are oriented
225 >          // in space using the three Euler angles.  We assume the standard
226 >          // unit vector was originally along the z axis below.
227  
228 +          phi = currentAtom->getEulerPhi() * M_PI / 180.0;
229 +          theta = currentAtom->getEulerTheta() * M_PI / 180.0;
230 +          psi = currentAtom->getEulerPsi()* M_PI / 180.0;
231 +            
232 +          Axx = (cos(phi) * cos(psi)) - (sin(phi) * cos(theta) * sin(psi));
233 +          Axy = (sin(phi) * cos(psi)) + (cos(phi) * cos(theta) * sin(psi));
234 +          Axz = sin(theta) * sin(psi);
235 +          
236 +          Ayx = -(cos(phi) * sin(psi)) - (sin(phi) * cos(theta) * cos(psi));
237 +          Ayy = -(sin(phi) * sin(psi)) + (cos(phi) * cos(theta) * cos(psi));
238 +          Ayz = sin(theta) * cos(psi);
239 +          
240 +          Azx = sin(phi) * sin(theta);
241 +          Azy = -cos(phi) * sin(theta);
242 +          Azz = cos(theta);
243 +
244 +          sux = 0.0;
245 +          suy = 0.0;
246 +          suz = 1.0;
247 +
248 +          ux = (Axx * sux) + (Ayx * suy) + (Azx * suz);
249 +          uy = (Axy * sux) + (Ayy * suy) + (Azy * suz);
250 +          uz = (Axz * sux) + (Ayz * suy) + (Azz * suz);
251 +
252            uSqr = (ux * ux) + (uy * uy) + (uz * uz);
253  
254            u = sqrt(uSqr);
# Line 609 | Line 636 | void SimSetup::gatherInfo(void){
636    else if (!strcasecmp(force_field, "EAM")){
637      ffCase = FF_EAM;
638    }
639 +  else if (!strcasecmp(force_field, "WATER")){
640 +    ffCase = FF_H2O;
641 +  }
642    else{
643      sprintf(painCave.errMsg, "SimSetup Error. Unrecognized force field -> %s\n",
644              force_field);
# Line 637 | Line 667 | void SimSetup::gatherInfo(void){
667    }
668    else{
669      sprintf(painCave.errMsg,
670 <            "SimSetup Warning. Unrecognized Ensemble -> %s, "
671 <            "reverting to NVE for this simulation.\n",
670 >            "SimSetup Warning. Unrecognized Ensemble -> %s \n"
671 >            "\treverting to NVE for this simulation.\n",
672              ensemble);
673           painCave.isFatal = 0;
674           simError();
# Line 670 | Line 700 | void SimSetup::gatherInfo(void){
700        if (!the_components[i]->haveNMol()){
701          // we have a problem
702          sprintf(painCave.errMsg,
703 <                "SimSetup Error. No global NMol or component NMol"
704 <                " given. Cannot calculate the number of atoms.\n");
703 >                "SimSetup Error. No global NMol or component NMol given.\n"
704 >                "\tCannot calculate the number of atoms.\n");
705          painCave.isFatal = 1;
706          simError();
707        }
# Line 694 | Line 724 | void SimSetup::gatherInfo(void){
724    //check whether sample time, status time, thermal time and reset time are divisble by dt
725    if (!isDivisible(globals->getSampleTime(), globals->getDt())){
726      sprintf(painCave.errMsg,
727 <              "Sample time is not divisible by dt \n");
727 >            "Sample time is not divisible by dt.\n"
728 >            "\tThis will result in samples that are not uniformly\n"
729 >            "\tdistributed in time.  If this is a problem, change\n"
730 >            "\tyour sampleTime variable.\n");
731      painCave.isFatal = 0;
732      simError();    
733    }
734  
735    if (globals->haveStatusTime() && !isDivisible(globals->getSampleTime(), globals->getDt())){
736      sprintf(painCave.errMsg,
737 <              "Status time is not divisible by dt\n");
737 >            "Status time is not divisible by dt.\n"
738 >            "\tThis will result in status reports that are not uniformly\n"
739 >            "\tdistributed in time.  If this is a problem, change \n"
740 >            "\tyour statusTime variable.\n");
741      painCave.isFatal = 0;
742      simError();    
743    }
744  
745    if (globals->haveThermalTime() && !isDivisible(globals->getThermalTime(), globals->getDt())){
746      sprintf(painCave.errMsg,
747 <              "Thermal time is not divisible by dt\n");
747 >            "Thermal time is not divisible by dt.\n"
748 >            "\tThis will result in thermalizations that are not uniformly\n"
749 >            "\tdistributed in time.  If this is a problem, change \n"
750 >            "\tyour thermalTime variable.\n");
751      painCave.isFatal = 0;
752      simError();    
753    }  
754  
755    if (globals->haveResetTime() && !isDivisible(globals->getResetTime(), globals->getDt())){
756      sprintf(painCave.errMsg,
757 <              "Reset time is not divisible by dt\n");
757 >            "Reset time is not divisible by dt.\n"
758 >            "\tThis will result in integrator resets that are not uniformly\n"
759 >            "\tdistributed in time.  If this is a problem, change\n"
760 >            "\tyour resetTime variable.\n");
761      painCave.isFatal = 0;
762      simError();    
763    }
# Line 801 | Line 843 | void SimSetup::gatherInfo(void){
843    }
844  
845   #ifdef IS_MPI
846 <  strcpy(checkPointMsg, "Succesfully gathered all information from Bass\n");
846 >  strcpy(checkPointMsg, "Successfully gathered all information from Bass\n");
847    MPIcheckPoint();
848   #endif // is_mpi
849   }
# Line 834 | Line 876 | void SimSetup::finalInfoCheck(void){
876  
877        if (!globals->haveECR()){
878          sprintf(painCave.errMsg,
879 <                "SimSetup Warning: using default value of 15.0 angstroms"
880 <                "box length for the electrostaticCutoffRadius.\n");
879 >                "SimSetup Warning: No value was set for electrostaticCutoffRadius.\n"
880 >                "\tOOPSE will use a default value of 15.0 angstroms"
881 >                "\tfor the electrostaticCutoffRadius.\n");
882          painCave.isFatal = 0;
883          simError();
884          theEcr = 15.0;
# Line 846 | Line 889 | void SimSetup::finalInfoCheck(void){
889  
890        if (!globals->haveEST()){
891          sprintf(painCave.errMsg,
892 <                "SimSetup Warning: using default value of 0.05 * the "
893 <                "electrostaticCutoffRadius for the electrostaticSkinThickness\n");
892 >                "SimSetup Warning: No value was set for electrostaticSkinThickness.\n"
893 >                "\tOOPSE will use a default value of\n"
894 >                "\t0.05 * electrostaticCutoffRadius\n"
895 >                "\tfor the electrostaticSkinThickness\n");
896          painCave.isFatal = 0;
897          simError();
898          theEst = 0.05 * theEcr;
# Line 860 | Line 905 | void SimSetup::finalInfoCheck(void){
905  
906        if (!globals->haveDielectric()){
907          sprintf(painCave.errMsg,
908 <                "SimSetup Error: You are trying to use Reaction Field without"
909 <                "setting a dielectric constant!\n");
908 >                "SimSetup Error: No Dielectric constant was set.\n"
909 >                "\tYou are trying to use Reaction Field without"
910 >                "\tsetting a dielectric constant!\n");
911          painCave.isFatal = 1;
912          simError();
913        }
# Line 871 | Line 917 | void SimSetup::finalInfoCheck(void){
917        if (usesDipoles){
918          if (!globals->haveECR()){
919            sprintf(painCave.errMsg,
920 <                  "SimSetup Warning: using default value of 15.0 angstroms"
921 <                  "box length for the electrostaticCutoffRadius.\n");
920 >                  "SimSetup Warning: No value was set for electrostaticCutoffRadius.\n"
921 >                  "\tOOPSE will use a default value of 15.0 angstroms"
922 >                  "\tfor the electrostaticCutoffRadius.\n");
923            painCave.isFatal = 0;
924            simError();
925            theEcr = 15.0;
# Line 883 | Line 930 | void SimSetup::finalInfoCheck(void){
930          
931          if (!globals->haveEST()){
932            sprintf(painCave.errMsg,
933 <                  "SimSetup Warning: using default value of 0.05 * the "
934 <                  "electrostaticCutoffRadius for the "
935 <                  "electrostaticSkinThickness\n");
933 >                  "SimSetup Warning: No value was set for electrostaticSkinThickness.\n"
934 >                  "\tOOPSE will use a default value of\n"
935 >                  "\t0.05 * electrostaticCutoffRadius\n"
936 >                  "\tfor the electrostaticSkinThickness\n");
937            painCave.isFatal = 0;
938            simError();
939            theEst = 0.05 * theEcr;
# Line 1092 | Line 1140 | void SimSetup::createFF(void){
1140        the_ff = new EAM_FF();
1141        break;
1142  
1143 +    case FF_H2O:
1144 +      the_ff = new WATER();
1145 +      break;
1146 +
1147      default:
1148        sprintf(painCave.errMsg,
1149                "SimSetup Error. Unrecognized force field in case statement.\n");
# Line 1234 | Line 1286 | void SimSetup::mpiMolDivide(void){
1286  
1287    if (local_atoms != info[0].n_atoms){
1288      sprintf(painCave.errMsg,
1289 <            "SimSetup error: mpiSim's localAtom (%d) and SimSetup's"
1290 <            " localAtom (%d) are not equal.\n",
1289 >            "SimSetup error: mpiSim's localAtom (%d) and SimSetup's\n"
1290 >            "\tlocalAtom (%d) are not equal.\n",
1291              info[0].n_atoms, local_atoms);
1292      painCave.isFatal = 1;
1293      simError();
# Line 1377 | Line 1429 | void SimSetup::makeIntegrator(void){
1429          else{
1430            sprintf(painCave.errMsg,
1431                    "SimSetup error: If you use the NVT\n"
1432 <                  "    ensemble, you must set tauThermostat.\n");
1432 >                  "\tensemble, you must set tauThermostat.\n");
1433            painCave.isFatal = 1;
1434            simError();
1435          }
# Line 1400 | Line 1452 | void SimSetup::makeIntegrator(void){
1452          else{
1453            sprintf(painCave.errMsg,
1454                    "SimSetup error: If you use a constant pressure\n"
1455 <                  "    ensemble, you must set targetPressure in the BASS file.\n");
1455 >                  "\tensemble, you must set targetPressure in the BASS file.\n");
1456            painCave.isFatal = 1;
1457            simError();
1458          }
# Line 1410 | Line 1462 | void SimSetup::makeIntegrator(void){
1462          else{
1463            sprintf(painCave.errMsg,
1464                    "SimSetup error: If you use an NPT\n"
1465 <                  "    ensemble, you must set tauThermostat.\n");
1465 >                  "\tensemble, you must set tauThermostat.\n");
1466            painCave.isFatal = 1;
1467            simError();
1468          }
# Line 1420 | Line 1472 | void SimSetup::makeIntegrator(void){
1472          else{
1473            sprintf(painCave.errMsg,
1474                    "SimSetup error: If you use an NPT\n"
1475 <                  "    ensemble, you must set tauBarostat.\n");
1475 >                  "\tensemble, you must set tauBarostat.\n");
1476            painCave.isFatal = 1;
1477            simError();
1478          }
# Line 1443 | Line 1495 | void SimSetup::makeIntegrator(void){
1495          else{
1496            sprintf(painCave.errMsg,
1497                    "SimSetup error: If you use a constant pressure\n"
1498 <                  "    ensemble, you must set targetPressure in the BASS file.\n");
1498 >                  "\tensemble, you must set targetPressure in the BASS file.\n");
1499            painCave.isFatal = 1;
1500            simError();
1501          }    
# Line 1454 | Line 1506 | void SimSetup::makeIntegrator(void){
1506          else{
1507            sprintf(painCave.errMsg,
1508                    "SimSetup error: If you use an NPT\n"
1509 <                  "    ensemble, you must set tauThermostat.\n");
1509 >                  "\tensemble, you must set tauThermostat.\n");
1510            painCave.isFatal = 1;
1511            simError();
1512          }
# Line 1465 | Line 1517 | void SimSetup::makeIntegrator(void){
1517          else{
1518            sprintf(painCave.errMsg,
1519                    "SimSetup error: If you use an NPT\n"
1520 <                  "    ensemble, you must set tauBarostat.\n");
1520 >                  "\tensemble, you must set tauBarostat.\n");
1521            painCave.isFatal = 1;
1522            simError();
1523          }
# Line 1488 | Line 1540 | void SimSetup::makeIntegrator(void){
1540          else{
1541            sprintf(painCave.errMsg,
1542                    "SimSetup error: If you use a constant pressure\n"
1543 <                  "    ensemble, you must set targetPressure in the BASS file.\n");
1543 >                  "\tensemble, you must set targetPressure in the BASS file.\n");
1544            painCave.isFatal = 1;
1545            simError();
1546          }    
# Line 1498 | Line 1550 | void SimSetup::makeIntegrator(void){
1550          else{
1551            sprintf(painCave.errMsg,
1552                    "SimSetup error: If you use an NPT\n"
1553 <                  "    ensemble, you must set tauThermostat.\n");
1553 >                  "\tensemble, you must set tauThermostat.\n");
1554            painCave.isFatal = 1;
1555            simError();
1556          }
# Line 1508 | Line 1560 | void SimSetup::makeIntegrator(void){
1560          else{
1561            sprintf(painCave.errMsg,
1562                    "SimSetup error: If you use an NPT\n"
1563 <                  "    ensemble, you must set tauBarostat.\n");
1563 >                  "\tensemble, you must set tauBarostat.\n");
1564            painCave.isFatal = 1;
1565            simError();
1566          }
# Line 1561 | Line 1613 | void SimSetup::setupZConstraint(SimInfo& theInfo){
1613    }
1614    else{
1615      sprintf(painCave.errMsg,
1616 <            "ZConstraint error: If you use an ZConstraint\n"
1617 <            " , you must set sample time.\n");
1616 >            "ZConstraint error: If you use a ZConstraint,\n"
1617 >            "\tyou must set zconsTime.\n");
1618      painCave.isFatal = 1;
1619      simError();
1620    }
# Line 1577 | Line 1629 | void SimSetup::setupZConstraint(SimInfo& theInfo){
1629    else{
1630      double defaultZConsTol = 0.01;
1631      sprintf(painCave.errMsg,
1632 <            "ZConstraint Waring: Tolerance for z-constraint methodl is not specified\n"
1633 <            " , default value %f is used.\n",
1632 >            "ZConstraint Warning: Tolerance for z-constraint method is not specified.\n"
1633 >            "\tOOPSE will use a default value of %f.\n"
1634 >            "\tTo set the tolerance, use the zconsTol variable.\n",
1635              defaultZConsTol);
1636      painCave.isFatal = 0;
1637      simError();      
# Line 1596 | Line 1649 | void SimSetup::setupZConstraint(SimInfo& theInfo){
1649    }
1650    else{
1651      sprintf(painCave.errMsg,
1652 <            "ZConstraint Warning: User does not set force Subtraction policy, "
1653 <            "PolicyByMass is used\n");
1652 >            "ZConstraint Warning: No force subtraction policy was set.\n"
1653 >            "\tOOPSE will use PolicyByMass.\n"
1654 >            "\tTo set the policy, use the zconsForcePolicy variable.\n");
1655      painCave.isFatal = 0;
1656      simError();
1657      zconsForcePolicy->setData("BYMASS");
# Line 1641 | Line 1695 | void SimSetup::setupZConstraint(SimInfo& theInfo){
1695    //check the uniqueness of index  
1696    if(!zconsParaData->isIndexUnique()){
1697      sprintf(painCave.errMsg,
1698 <            "ZConstraint Error: molIndex is not unique\n");
1698 >            "ZConstraint Error: molIndex is not unique!\n");
1699      painCave.isFatal = 1;
1700      simError();
1701    }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines