# | Line 9 | Line 9 | |
---|---|---|
9 | #include "parse_me.h" | |
10 | #include "Integrator.hpp" | |
11 | #include "simError.h" | |
12 | < | #include "ConjugateMinimizer.hpp" |
12 | > | //#include "ConjugateMinimizer.hpp" |
13 | > | #include "OOPSEMinimizer.hpp" |
14 | ||
15 | #ifdef IS_MPI | |
16 | #include "mpiBASS.h" | |
# | Line 1713 | Line 1714 | void SimSetup::makeMinimizer(){ | |
1714 | ||
1715 | void SimSetup::makeMinimizer(){ | |
1716 | ||
1717 | < | OOPSEMinimizerBase* myOOPSEMinimizerBase; |
1717 | < | ObjFunctor1 * objFunc; |
1718 | < | OutputFunctor* outputFunc; |
1719 | < | ConcreteNLModel1* nlp; |
1717 | > | OOPSEMinimizer* myOOPSEMinimizer; |
1718 | MinimizerParameterSet* param; | |
1719 | < | ConjugateMinimizerBase* minimizer; |
1722 | < | int dim; |
1719 | > | char minimizerName[100]; |
1720 | ||
1721 | for (int i = 0; i < nInfo; i++){ | |
1722 | < | //creat |
1726 | < | myOOPSEMinimizerBase = new OOPSEMinimizerBase(&(info[i]), the_ff); |
1727 | < | |
1728 | < | info[i].the_integrator = myOOPSEMinimizerBase; |
1729 | < | //creat the object functor; |
1730 | < | objFunc = (ObjFunctor1*) new ClassMemObjFunctor1<OOPSEMinimizerBase> |
1731 | < | (myOOPSEMinimizerBase, &OOPSEMinimizerBase::calcGradient); |
1732 | < | |
1733 | < | //creat output functor; |
1734 | < | outputFunc = new ClassMemOutputFunctor<OOPSEMinimizerBase> |
1735 | < | (myOOPSEMinimizerBase, &OOPSEMinimizerBase::output); |
1736 | < | |
1737 | < | //creat nonlinear model |
1738 | < | dim = myOOPSEMinimizerBase->getDim(); |
1739 | < | nlp = new ConcreteNLModel1(dim, objFunc); |
1740 | < | |
1741 | < | nlp->setX(myOOPSEMinimizerBase->getCoor()); |
1742 | < | |
1722 | > | |
1723 | //prepare parameter set for minimizer | |
1724 | param = new MinimizerParameterSet(); | |
1725 | param->setDefaultParameter(); | |
# | Line 1764 | Line 1744 | void SimSetup::makeMinimizer(){ | |
1744 | param->setWriteFrq(globals->getMinWriteFrq()); | |
1745 | } | |
1746 | ||
1747 | < | if (globals->haveMinResetFrq()){ |
1748 | < | param->setResetFrq(globals->getMinResetFrq()); |
1747 | > | if (globals->haveMinStepSize()){ |
1748 | > | param->setStepSize(globals->getMinStepSize()); |
1749 | } | |
1750 | ||
1751 | if (globals->haveMinLSMaxIter()){ | |
# | Line 1775 | Line 1755 | void SimSetup::makeMinimizer(){ | |
1755 | if (globals->haveMinLSTol()){ | |
1756 | param->setLineSearchTol(globals->getMinLSTol()); | |
1757 | } | |
1778 | – | |
1779 | – | //creat the minimizer |
1780 | – | minimizer = new PRCGMinimizer(nlp, param); |
1781 | – | minimizer->setLineSearchStrategy(nlp, GoldenSection); |
1782 | – | minimizer->setOutputFunctor(outputFunc); |
1758 | ||
1759 | + | strcpy(minimizerName, globals->getMinimizer()); |
1760 | + | |
1761 | + | if (!strcasecmp(minimizerName, "CG")){ |
1762 | + | myOOPSEMinimizer = new PRCGMinimizer(&(info[i]), the_ff, param); |
1763 | + | } |
1764 | + | else if (!strcasecmp(minimizerName, "SD")){ |
1765 | + | //myOOPSEMinimizer = MinimizerFactory.creatMinimizer("", &(info[i]), the_ff, param); |
1766 | + | myOOPSEMinimizer = new SDMinimizer(&(info[i]), the_ff, param); |
1767 | + | } |
1768 | + | else{ |
1769 | + | sprintf(painCave.errMsg, |
1770 | + | "SimSetup error: Unrecognized Minimizer, use Conjugate Gradient \n"); |
1771 | + | painCave.isFatal = 0; |
1772 | + | simError(); |
1773 | + | |
1774 | + | myOOPSEMinimizer = new PRCGMinimizer(&(info[i]), the_ff, param); |
1775 | + | } |
1776 | + | info[i].the_integrator = myOOPSEMinimizer; |
1777 | + | |
1778 | //store the minimizer into simInfo | |
1779 | < | info[i].the_minimizer = minimizer; |
1779 | > | info[i].the_minimizer = myOOPSEMinimizer; |
1780 | info[i].has_minimizer = true; | |
1781 | } | |
1782 |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |