44 #ifndef GLOBIPACK_BRENTS_LINE_SEARCH_DEF_HPP
45 #define GLOBIPACK_BRENTS_LINE_SEARCH_DEF_HPP
48 #include "GlobiPack_BrentsLineSearch_decl.hpp"
49 #include "Teuchos_TabularOutputter.hpp"
58 template<
typename Scalar>
63 template<
typename Scalar>
71 template<
typename Scalar>
82 template<
class Scalar>
84 RCP<ParameterList>
const& paramList
88 namespace BLSU = BrentsLineSearchUtils;
89 using Teuchos::sublist;
90 paramList->validateParametersAndSetDefaults(*this->getValidParameters());
91 bracket_.setParameterList(sublist(paramList, BLSU::bracket_name,
true));
92 brentsMin_.setParameterList(sublist(paramList, BLSU::minimize_name,
true));
93 setMyParamList(paramList);
97 template<
class Scalar>
98 RCP<const ParameterList>
101 namespace BLSU = BrentsLineSearchUtils;
102 static RCP<const ParameterList> validPL;
103 if (is_null(validPL)) {
104 RCP<Teuchos::ParameterList>
105 pl = Teuchos::rcp(
new Teuchos::ParameterList());
106 pl->sublist(BLSU::bracket_name).setParameters(
107 *bracket_.getValidParameters()
108 ).disableRecursiveValidation();
109 pl->sublist(BLSU::minimize_name).setParameters(
110 *brentsMin_.getValidParameters()
111 ).disableRecursiveValidation();
121 template<
typename Scalar>
128 template<
typename Scalar>
135 template<
typename Scalar>
140 const Ptr<int> &numIters
145 using Teuchos::OSTab;
146 using Teuchos::outArg;
147 using Teuchos::inOutArg;
150 typedef ScalarTraits<Scalar> ST;
153 TEUCHOS_ASSERT_EQUALITY(point_k.
alpha, ST::zero());
154 TEUCHOS_ASSERT_INEQUALITY(point_k.
phi, !=, PE1D::valNotGiven());
155 TEUCHOS_ASSERT_EQUALITY(point_k.
Dphi, PE1D::valNotGiven());
156 TEUCHOS_ASSERT(!is_null(point_kp1));
157 TEUCHOS_ASSERT_INEQUALITY(point_kp1->alpha, >, ST::zero());
158 TEUCHOS_ASSERT_INEQUALITY(point_kp1->phi, !=, PE1D::valNotGiven());
159 TEUCHOS_ASSERT_EQUALITY(point_kp1->Dphi, PE1D::valNotGiven());
162 const RCP<Teuchos::FancyOStream> out = this->getOStream();
163 bracket_.setOStream(out);
164 brentsMin_.setOStream(out);
166 *out <<
"\nStarting bracketing and brents 1D minimization linesearch ...\n";
170 int totalNumIters = 0;
180 int numBracketIters = -1;
182 const bool bracketSuccess = bracket_.bracketMinimum(
183 phi, inOutArg(p_l), inOutArg(p_m), outArg(p_u), outArg(numBracketIters) );
185 if (!bracketSuccess) success =
false;
187 totalNumIters += numBracketIters;
191 if (bracketSuccess) {
193 int numBrentsIters = -1;
195 const bool brentsSuccess = brentsMin_.approxMinimize(
196 phi, p_l, inOutArg(p_m), p_u, outArg(numBrentsIters) );
198 if (!brentsSuccess) success =
false;
200 totalNumIters += numBrentsIters;
206 if (!is_null(numIters))
207 *numIters = totalNumIters;
217 #endif // GLOBIPACK_BRENTS_LINE_SEARCH_DEF_HPP