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 557 by mmeineke, Thu Jun 19 19:11:53 2003 UTC vs.
Revision 604 by gezelter, Tue Jul 15 03:08:00 2003 UTC

# Line 14 | Line 14
14  
15   // some defines for ensemble and Forcefield  cases
16  
17 < #define NVE_ENS 0
18 < #define NVT_ENS 1
19 < #define NPT_ENS 2
17 > #define NVE_ENS   0
18 > #define NVT_ENS   1
19 > #define NPTi_ENS  2
20 > #define NPTf_ENS  3
21 > #define NPTim_ENS 4
22 > #define NPTfm_ENS 5
23  
24 +
25   #define FF_DUFF 0
26   #define FF_LJ   1
27  
# Line 97 | Line 101 | void SimSetup::createSim( void ){
101    n_components = the_globals->getNComponents();
102    strcpy( force_field, the_globals->getForceField() );
103  
104 <  if( !strcasecmp( force_field, "DUFF" ))    ffCase = FF_DUFF;
104 >  if( !strcasecmp( force_field, "DUFF" )) ffCase = FF_DUFF;
105    else if( !strcasecmp( force_field, "LJ" )) ffCase = FF_LJ;
106    else{
107      sprintf( painCave.errMsg,
# Line 110 | Line 114 | void SimSetup::createSim( void ){
114    // get the ensemble:
115    strcpy( ensemble, the_globals->getEnsemble() );
116  
117 <  if( !strcasecmp( ensemble, "NVE" ))      ffCase = NVE_ENS;
118 <  else if( !strcasecmp( ensemble, "NVT" )) ffCase = NVT_ENS;
119 <  else if( !strcasecmp( ensemble, "NPT" )) ffCase = NPT_ENS;
117 >  if( !strcasecmp( ensemble, "NVE" ))      ensembleCase = NVE_ENS;
118 >  else if( !strcasecmp( ensemble, "NVT" )) ensembleCase = NVT_ENS;
119 >  else if( !strcasecmp( ensemble, "NPTi" ) || !strcasecmp( ensemble, "NPT") )
120 >    ensembleCase = NPTi_ENS;
121 >  else if( !strcasecmp( ensemble, "NPTf" )) ensembleCase = NPTf_ENS;
122 >  else if( !strcasecmp( ensemble, "NPTim" )) ensembleCase = NPTim_ENS;
123 >  else if( !strcasecmp( ensemble, "NPTfm" )) ensembleCase = NPTfm_ENS;
124    else{
125      sprintf( painCave.errMsg,
126               "SimSetup Warning. Unrecognized Ensemble -> %s, "
# Line 193 | Line 201 | void SimSetup::createSim( void ){
201      break;
202  
203    case FF_LJ:
204 <    the_ff = LJFF();
204 >    the_ff = new LJFF();
205      break;
206  
207    default:
# Line 479 | Line 487 | void SimSetup::createSim( void ){
487  
488    // get some of the tricky things that may still be in the globals
489  
490 <  
490 >  double boxVector[3];
491    if( the_globals->haveBox() ){
492 <    simnfo->box_x = the_globals->getBox();
493 <    simnfo->box_y = the_globals->getBox();
494 <    simnfo->box_z = the_globals->getBox();
492 >    boxVector[0] = the_globals->getBox();
493 >    boxVector[1] = the_globals->getBox();
494 >    boxVector[2] = the_globals->getBox();
495 >    
496 >    simnfo->setBox( boxVector );
497    }
498    else if( the_globals->haveDensity() ){
499  
500      double vol;
501      vol = (double)tot_nmol / the_globals->getDensity();
502 <    simnfo->box_x = pow( vol, ( 1.0 / 3.0 ) );
503 <    simnfo->box_y = simnfo->box_x;
504 <    simnfo->box_z = simnfo->box_x;
502 >     boxVector[0] = pow( vol, ( 1.0 / 3.0 ) );
503 >     boxVector[1] = boxVector[0];
504 >     boxVector[2] = boxVector[0];
505 >
506 >    simnfo->setBox( boxVector );
507    }
508    else{
509      if( !the_globals->haveBoxX() ){
# Line 500 | Line 512 | void SimSetup::createSim( void ){
512        painCave.isFatal = 1;
513        simError();
514      }
515 <    simnfo->box_x = the_globals->getBoxX();
515 >    boxVector[0] = the_globals->getBoxX();
516  
517      if( !the_globals->haveBoxY() ){
518        sprintf( painCave.errMsg,
# Line 508 | Line 520 | void SimSetup::createSim( void ){
520        painCave.isFatal = 1;
521        simError();
522      }
523 <    simnfo->box_y = the_globals->getBoxY();
523 >    boxVector[1] = the_globals->getBoxY();
524  
525      if( !the_globals->haveBoxZ() ){
526        sprintf( painCave.errMsg,
# Line 516 | Line 528 | void SimSetup::createSim( void ){
528        painCave.isFatal = 1;
529        simError();
530      }
531 <    simnfo->box_z = the_globals->getBoxZ();
531 >    boxVector[2] = the_globals->getBoxZ();
532 >
533 >    simnfo->setBox( boxVector );
534    }
535  
536   #ifdef IS_MPI
# Line 546 | Line 560 | void SimSetup::createSim( void ){
560        painCave.isFatal = 0;
561        simError();
562        double smallest;
563 <      smallest = simnfo->box_x;
564 <      if (simnfo->box_y <= smallest) smallest = simnfo->box_y;
565 <      if (simnfo->box_z <= smallest) smallest = simnfo->box_z;
563 >      smallest = simnfo->boxLx;
564 >      if (simnfo->boxLy <= smallest) smallest = simnfo->boxLy;
565 >      if (simnfo->boxLz <= smallest) smallest = simnfo->boxLz;
566        simnfo->ecr = 0.5 * smallest;
567      } else {
568        simnfo->ecr        = the_globals->getECR();
# Line 586 | Line 600 | void SimSetup::createSim( void ){
600          painCave.isFatal = 0;
601          simError();
602          double smallest;
603 <        smallest = simnfo->box_x;
604 <        if (simnfo->box_y <= smallest) smallest = simnfo->box_y;
605 <        if (simnfo->box_z <= smallest) smallest = simnfo->box_z;
603 >        smallest = simnfo->boxLx;
604 >        if (simnfo->boxLy <= smallest) smallest = simnfo->boxLy;
605 >        if (simnfo->boxLz <= smallest) smallest = simnfo->boxLz;
606          simnfo->ecr = 0.5 * smallest;
607        } else {
608          simnfo->ecr        = the_globals->getECR();
# Line 768 | Line 782 | void SimSetup::createSim( void ){
782  
783  
784    // make the integrator
785 +  
786 +  
787 +  NVT*  myNVT = NULL;
788 +  NPTi* myNPTi = NULL;
789 +  NPTf* myNPTf = NULL;
790 +  NPTim* myNPTim = NULL;
791  
792 +  switch( ensembleCase ){
793  
794 <  if( !strcmp( ensemble, "TraPPE_Ex" ) ){
795 <    new Symplectic(simnfo, the_ff, the_extendedsystem);
796 <  }
797 <  else if( !strcmp( force_field, "LJ" ) ){
798 <    new Verlet( *simnfo, the_ff, the_extendedsystem );
794 >  case NVE_ENS:
795 >    new NVE( simnfo, the_ff );
796 >    break;
797 >
798 >  case NVT_ENS:
799 >    myNVT = new NVT( simnfo, the_ff );
800 >    myNVT->setTargetTemp(the_globals->getTargetTemp());
801 >
802 >    if (the_globals->haveTauThermostat())
803 >      myNVT->setTauThermostat(the_globals->getTauThermostat());
804 >
805 >    else {
806 >      sprintf( painCave.errMsg,
807 >               "SimSetup error: If you use the NVT\n"
808 >               "    ensemble, you must set tauThermostat.\n");
809 >      painCave.isFatal = 1;
810 >      simError();
811 >    }
812 >    break;
813 >
814 >  case NPTi_ENS:
815 >    myNPTi = new NPTi( simnfo, the_ff );
816 >    myNPTi->setTargetTemp( the_globals->getTargetTemp());
817 >
818 >    if (the_globals->haveTargetPressure())
819 >      myNPTi->setTargetPressure(the_globals->getTargetPressure());
820 >    else {
821 >      sprintf( painCave.errMsg,
822 >               "SimSetup error: If you use a constant pressure\n"
823 >               "    ensemble, you must set targetPressure in the BASS file.\n");
824 >      painCave.isFatal = 1;
825 >      simError();
826 >    }
827 >    
828 >    if( the_globals->haveTauThermostat() )
829 >      myNPTi->setTauThermostat( the_globals->getTauThermostat() );
830 >    else{
831 >      sprintf( painCave.errMsg,
832 >               "SimSetup error: If you use an NPT\n"
833 >               "    ensemble, you must set tauThermostat.\n");
834 >      painCave.isFatal = 1;
835 >      simError();
836 >    }
837 >
838 >    if( the_globals->haveTauBarostat() )
839 >      myNPTi->setTauBarostat( the_globals->getTauBarostat() );
840 >    else{
841 >      sprintf( painCave.errMsg,
842 >               "SimSetup error: If you use an NPT\n"
843 >               "    ensemble, you must set tauBarostat.\n");
844 >      painCave.isFatal = 1;
845 >      simError();
846 >    }
847 >    break;
848 >
849 >  case NPTf_ENS:
850 >    myNPTf = new NPTf( simnfo, the_ff );
851 >    myNPTf->setTargetTemp( the_globals->getTargetTemp());
852 >
853 >    if (the_globals->haveTargetPressure())
854 >      myNPTf->setTargetPressure(the_globals->getTargetPressure());
855 >    else {
856 >      sprintf( painCave.errMsg,
857 >               "SimSetup error: If you use a constant pressure\n"
858 >               "    ensemble, you must set targetPressure in the BASS file.\n");
859 >      painCave.isFatal = 1;
860 >      simError();
861 >    }    
862 >
863 >    if( the_globals->haveTauThermostat() )
864 >      myNPTf->setTauThermostat( the_globals->getTauThermostat() );
865 >    else{
866 >      sprintf( painCave.errMsg,
867 >               "SimSetup error: If you use an NPT\n"
868 >               "    ensemble, you must set tauThermostat.\n");
869 >      painCave.isFatal = 1;
870 >      simError();
871 >    }
872 >
873 >    if( the_globals->haveTauBarostat() )
874 >      myNPTf->setTauBarostat( the_globals->getTauBarostat() );
875 >    else{
876 >      sprintf( painCave.errMsg,
877 >               "SimSetup error: If you use an NPT\n"
878 >               "    ensemble, you must set tauBarostat.\n");
879 >      painCave.isFatal = 1;
880 >      simError();
881 >    }
882 >    break;
883 >    
884 >  case NPTim_ENS:
885 >    myNPTim = new NPTim( simnfo, the_ff );
886 >    myNPTim->setTargetTemp( the_globals->getTargetTemp());
887 >
888 >    if (the_globals->haveTargetPressure())
889 >      myNPTim->setTargetPressure(the_globals->getTargetPressure());
890 >    else {
891 >      sprintf( painCave.errMsg,
892 >               "SimSetup error: If you use a constant pressure\n"
893 >               "    ensemble, you must set targetPressure in the BASS file.\n");
894 >      painCave.isFatal = 1;
895 >      simError();
896 >    }
897 >    
898 >    if( the_globals->haveTauThermostat() )
899 >      myNPTim->setTauThermostat( the_globals->getTauThermostat() );
900 >    else{
901 >      sprintf( painCave.errMsg,
902 >               "SimSetup error: If you use an NPT\n"
903 >               "    ensemble, you must set tauThermostat.\n");
904 >      painCave.isFatal = 1;
905 >      simError();
906 >    }
907 >
908 >    if( the_globals->haveTauBarostat() )
909 >      myNPTim->setTauBarostat( the_globals->getTauBarostat() );
910 >    else{
911 >      sprintf( painCave.errMsg,
912 >               "SimSetup error: If you use an NPT\n"
913 >               "    ensemble, you must set tauBarostat.\n");
914 >      painCave.isFatal = 1;
915 >      simError();
916 >    }
917 >    break;
918 >
919 >    
920 >
921 >  default:
922 >    sprintf( painCave.errMsg,
923 >             "SimSetup Error. Unrecognized ensemble in case statement.\n");
924 >    painCave.isFatal = 1;
925 >    simError();
926    }
927  
928 +
929   #ifdef IS_MPI
930    mpiSim->mpiRefresh();
931   #endif
# Line 1089 | Line 1238 | void SimSetup::initFromBass( void ){
1238      have_extra =1;
1239  
1240      n_cells = (int)temp3 - 1;
1241 <    cellx = simnfo->box_x / temp3;
1242 <    celly = simnfo->box_y / temp3;
1243 <    cellz = simnfo->box_z / temp3;
1241 >    cellx = simnfo->boxLx / temp3;
1242 >    celly = simnfo->boxLy / temp3;
1243 >    cellz = simnfo->boxLz / temp3;
1244      n_extra = tot_nmol - ( 4 * n_cells * n_cells * n_cells );
1245      temp1 = ((double)n_extra) / ( pow( temp3, 3.0 ) - pow( n_cells, 3.0 ) );
1246      n_per_extra = (int)ceil( temp1 );
# Line 1106 | Line 1255 | void SimSetup::initFromBass( void ){
1255    }
1256    else{
1257      n_cells = (int)temp3;
1258 <    cellx = simnfo->box_x / temp3;
1259 <    celly = simnfo->box_y / temp3;
1260 <    cellz = simnfo->box_z / temp3;
1258 >    cellx = simnfo->boxLx / temp3;
1259 >    celly = simnfo->boxLy / temp3;
1260 >    cellz = simnfo->boxLz / temp3;
1261    }
1262  
1263    current_mol = 0;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines