--- trunk/OOPSE/libmdtools/Integrator.cpp 2004/05/20 20:24:07 1180 +++ trunk/OOPSE/libmdtools/Integrator.cpp 2004/06/21 18:52:21 1284 @@ -1,7 +1,8 @@ #include #include #include - +#include "Rattle.hpp" +#include "Roll.hpp" #ifdef IS_MPI #include "mpiSimulation.hpp" #include @@ -32,7 +33,17 @@ template Integrator::Integrator(SimInfo nAtoms = info->n_atoms; integrableObjects = info->integrableObjects; - + + consFramework = new RattleFramework(info); + + if(consFramework == NULL){ + sprintf(painCave.errMsg, + "Integrator::Intergrator() Error: Memory allocation error for RattleFramework" ); + painCave.isFatal = 1; + simError(); + } + +/* // check for constraints constrainedA = NULL; @@ -45,12 +56,13 @@ template Integrator::Integrator(SimInfo nConstrained = 0; checkConstraints(); - - for (i=0; i Integrator::~Integrator(){ + if (consFramework != NULL) + delete consFramework; +/* if (nConstrained){ delete[] constrainedA; delete[] constrainedB; @@ -59,8 +71,10 @@ template Integrator::~Integrator(){ delete[] moved; delete[] oldPos; } +*/ } +/* template void Integrator::checkConstraints(void){ isConstrained = 0; @@ -95,7 +109,7 @@ template void Integrator::checkConstrai if (constrained){ dummy_plug = theArray[j]->get_constraint(); temp_con[nConstrained].set_a(dummy_plug->get_a()); - temp_con[nConstrained].set_b(dummy_plug->get_b()); + temp_con[nConstrained].set_b(Dummy_plug->get_b()); temp_con[nConstrained].set_dsqr(dummy_plug->get_dsqr()); nConstrained++; @@ -153,8 +167,8 @@ template void Integrator::checkConstrai delete[] temp_con; } +*/ - template void Integrator::integrate(void){ double runTime = info->run_time; @@ -187,20 +201,19 @@ template void Integrator::integrate(voi tStats->removeCOMdrift(); // initialize the retraints if necessary - if (info->useThermInt) { + if (info->useSolidThermInt && !info->useLiquidThermInt) { myFF->initRestraints(); } // initialize the forces before the first step calcForce(1, 1); - - if (nConstrained){ - preMove(); - constrainA(); - calcForce(1, 1); - constrainB(); - } + + //execute constraint algorithm to make sure at the very beginning the system is constrained + //consFramework->doPreConstraint(); + //consFramework->doConstrainA(); + //calcForce(1, 1); + //consFramework->doConstrainB(); if (info->setTemp){ thermalize(); @@ -257,7 +270,6 @@ template void Integrator::integrate(voi if (info->getTime() >= currStatus){ statOut->writeStat(info->getTime()); - statOut->writeRaw(info->getTime()); calcPot = 0; calcStress = 0; currStatus += statusTime; @@ -281,7 +293,7 @@ template void Integrator::integrate(voi } // dump out a file containing the omega values for the final configuration - if (info->useThermInt) + if (info->useSolidThermInt && !info->useLiquidThermInt) myFF->dumpzAngle(); @@ -297,7 +309,8 @@ template void Integrator::integrateStep startProfile(pro3); #endif //profile - preMove(); + //save old state (position, velocity etc) + consFramework->doPreConstraint(); #ifdef PROFILE endProfile(pro3); @@ -319,9 +332,7 @@ template void Integrator::integrateStep MPIcheckPoint(); #endif // is_mpi - // calc forces - calcForce(calcPot, calcStress); #ifdef IS_MPI @@ -356,6 +367,7 @@ template void Integrator::moveA(void){ double Tb[3], ji[3]; double vel[3], pos[3], frc[3]; double mass; + double omega; for (i = 0; i < integrableObjects.size() ; i++){ integrableObjects[i]->getVel(vel); @@ -394,9 +406,7 @@ template void Integrator::moveA(void){ } } - if (nConstrained){ - constrainA(); - } + consFramework->doConstrainA(); } @@ -437,11 +447,10 @@ template void Integrator::moveB(void){ } } - if (nConstrained){ - constrainB(); - } + consFramework->doConstrainB(); } +/* template void Integrator::preMove(void){ int i, j; double pos[3]; @@ -700,7 +709,7 @@ template void Integrator::constrainB(vo simError(); } } - +*/ template void Integrator::rotationPropagation ( StuntDouble* sd, double ji[3] ){ @@ -739,6 +748,7 @@ template void Integrator::rotationPropa // rotate about the z-axis angle = dt * ji[2] / I[2][2]; + sd->addZangle(angle); this->rotate( 0, 1, angle, ji, A); // rotate about the y-axis