--- trunk/OOPSE/libmdtools/SimSetup.cpp 2004/02/06 21:37:59 1035 +++ trunk/OOPSE/libmdtools/SimSetup.cpp 2004/02/24 16:36:33 1066 @@ -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" @@ -28,7 +29,7 @@ #define FF_DUFF 0 #define FF_LJ 1 #define FF_EAM 2 -#define FF_H2O 3 +#define FF_H2O 3 using namespace std; @@ -1713,33 +1714,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 +1744,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 +1755,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; }