--- trunk/OOPSE/libmdtools/SimSetup.cpp 2004/02/09 14:48:57 1041 +++ trunk/OOPSE/libmdtools/SimSetup.cpp 2004/03/17 14:22:59 1093 @@ -9,7 +9,8 @@ #include "parse_me.h" #include "Integrator.hpp" #include "simError.h" -#include "ConjugateMinimizer.hpp" +//#include "ConjugateMinimizer.hpp" +#include "OOPSEMinimizer.hpp" #ifdef IS_MPI #include "mpiBASS.h" @@ -1663,6 +1664,33 @@ void SimSetup::setupZConstraint(SimInfo& theInfo){ theInfo.addProperty(zconsForcePolicy); + //set zcons gap + DoubleData* zconsGap = new DoubleData(); + zconsGap->setID(ZCONSGAP_ID); + + if (globals->haveZConsGap()){ + zconsGap->setData(globals->getZconsGap()); + theInfo.addProperty(zconsGap); + } + + //set zcons fixtime + DoubleData* zconsFixtime = new DoubleData(); + zconsFixtime->setID(ZCONSFIXTIME_ID); + + if (globals->haveZConsFixTime()){ + zconsFixtime->setData(globals->getZconsFixtime()); + theInfo.addProperty(zconsFixtime); + } + + //set zconsUsingSMD + IntData* zconsUsingSMD = new IntData(); + zconsUsingSMD->setID(ZCONSUSINGSMD_ID); + + if (globals->haveZConsUsingSMD()){ + zconsUsingSMD->setData(globals->getZconsUsingSMD()); + theInfo.addProperty(zconsUsingSMD); + } + //Determine the name of ouput file and add it into SimInfo's property list //Be careful, do not use inFileName, since it is a pointer which //point to a string at master node, and slave nodes do not contain that string @@ -1692,7 +1720,8 @@ void SimSetup::setupZConstraint(SimInfo& theInfo){ tempParaItem.zPos = zconStamp[i]->getZpos(); tempParaItem.zconsIndex = zconStamp[i]->getMolIndex(); tempParaItem.kRatio = zconStamp[i]->getKratio(); - + tempParaItem.havingCantVel = zconStamp[i]->haveCantVel(); + tempParaItem.cantVel = zconStamp[i]->getCantVel(); zconsParaData->addItem(tempParaItem); } @@ -1713,33 +1742,12 @@ void SimSetup::makeMinimizer(){ void SimSetup::makeMinimizer(){ - OOPSEMinimizerBase* myOOPSEMinimizerBase; - ObjFunctor1 * objFunc; - OutputFunctor* outputFunc; - ConcreteNLModel1* nlp; + OOPSEMinimizer* myOOPSEMinimizer; MinimizerParameterSet* param; - ConjugateMinimizerBase* minimizer; - int dim; + char minimizerName[100]; for (int i = 0; i < nInfo; i++){ - //creat - myOOPSEMinimizerBase = new OOPSEMinimizerBase(&(info[i]), the_ff); - - info[i].the_integrator = myOOPSEMinimizerBase; - //creat the object functor; - objFunc = (ObjFunctor1*) new ClassMemObjFunctor1 - (myOOPSEMinimizerBase, &OOPSEMinimizerBase::calcGradient); - - //creat output functor; - outputFunc = new ClassMemOutputFunctor - (myOOPSEMinimizerBase, &OOPSEMinimizerBase::output); - - //creat nonlinear model - dim = myOOPSEMinimizerBase->getDim(); - nlp = new ConcreteNLModel1(dim, objFunc); - - nlp->setX(myOOPSEMinimizerBase->getCoor()); - + //prepare parameter set for minimizer param = new MinimizerParameterSet(); param->setDefaultParameter(); @@ -1764,8 +1772,8 @@ void SimSetup::makeMinimizer(){ param->setWriteFrq(globals->getMinWriteFrq()); } - if (globals->haveMinResetFrq()){ - param->setResetFrq(globals->getMinResetFrq()); + if (globals->haveMinStepSize()){ + param->setStepSize(globals->getMinStepSize()); } if (globals->haveMinLSMaxIter()){ @@ -1775,14 +1783,28 @@ void SimSetup::makeMinimizer(){ if (globals->haveMinLSTol()){ param->setLineSearchTol(globals->getMinLSTol()); } - - //creat the minimizer - minimizer = new PRCGMinimizer(nlp, param); - minimizer->setLineSearchStrategy(nlp, GoldenSection); - minimizer->setOutputFunctor(outputFunc); + strcpy(minimizerName, globals->getMinimizer()); + + if (!strcasecmp(minimizerName, "CG")){ + myOOPSEMinimizer = new PRCGMinimizer(&(info[i]), the_ff, param); + } + else if (!strcasecmp(minimizerName, "SD")){ + //myOOPSEMinimizer = MinimizerFactory.creatMinimizer("", &(info[i]), the_ff, param); + myOOPSEMinimizer = new SDMinimizer(&(info[i]), the_ff, param); + } + else{ + sprintf(painCave.errMsg, + "SimSetup error: Unrecognized Minimizer, use Conjugate Gradient \n"); + painCave.isFatal = 0; + simError(); + + myOOPSEMinimizer = new PRCGMinimizer(&(info[i]), the_ff, param); + } + info[i].the_integrator = myOOPSEMinimizer; + //store the minimizer into simInfo - info[i].the_minimizer = minimizer; + info[i].the_minimizer = myOOPSEMinimizer; info[i].has_minimizer = true; }