45 #ifndef ROL_PARAMETER_LIST_CONVERTERS_H 46 #define ROL_PARAMETER_LIST_CONVERTERS_H 50 #include "Teuchos_ParameterList.hpp" 55 namespace StringList {
58 inline std::vector<std::string>
join(
const std::string &s1,
59 const std::string &s2 ) {
60 std::vector<std::string> v;
68 inline std::vector<std::string>
join(
const std::string &s1,
69 const std::string &s2,
70 const std::string &s3 ) {
71 std::vector<std::string> v;
80 inline std::vector<std::string>
join(
const std::string &s1,
81 const std::string &s2,
82 const std::string &s3,
83 const std::string &s4 ) {
84 std::vector<std::string> v;
94 inline std::vector<std::string>
join(
const std::string &s1,
95 const std::string &s2,
96 const std::string &s3,
97 const std::string &s4,
98 const std::string &s5 ) {
99 std::vector<std::string> v;
111 template<
class ParameterType>
113 const std::vector<std::string> &location,
114 const std::vector<std::string>::iterator iter,
115 ParameterType value ) {
117 if( iter == location.end()-1 ) {
118 parlist.set(*iter,value);
121 Teuchos::ParameterList &sublist = parlist.sublist(*iter);
132 const Teuchos::ParameterList &inList ) {
134 using namespace Teuchos;
137 typedef std::string Str;
138 typedef std::vector<Str> Vec;
139 typedef std::map<Str,Vec> Map;
140 typedef ParameterList::ConstIterator IterPL;
141 typedef typename Vec::iterator IterVec;
142 typedef typename Map::iterator IterMap;
147 dict[
"Use Inexact Gradient"] =
join(
"General",
"Inexact Gradient");
148 dict[
"Use Inexact Objective Function"] =
join(
"General",
"Inexact Objective Function");
149 dict[
"Use Inexact Hessian-Times-A-Vector"] =
join(
"General",
"Inexact Hessian-Times-A-Vector");
150 dict[
"Use Projected Gradient Criticality Measure"] =
join(
"General",
"Projected Gradient Criticality Measure");
151 dict[
"Scale for Epsilon Active Sets"] =
join(
"General",
"Scale for Epsilon Active Sets");
152 dict[
"Variable Objective Function"] =
join(
"General",
"Variable Objective Function");
154 dict[
"Absolute Krylov Tolerance"] =
join(
"General",
"Krylov",
"Absolute Tolerance");
155 dict[
"Relative Krylov Tolerance"] =
join(
"General",
"Krylov",
"Relative Tolerance");
156 dict[
"Maximum Number of Krylov Iterations"] =
join(
"General",
"Krylov",
"Iteration Limit");
157 dict[
"Krylov Type"] =
join(
"General",
"Krylov",
"Type");
159 dict[
"Barzilai-Borwein Type"] =
join(
"General",
"Secant",
"Barzilai-Borwein Type");
160 dict[
"Maximum Secant Storage"] =
join(
"General",
"Secant",
"Maximum Storage");
161 dict[
"Secant Type"] =
join(
"General",
"Secant",
"Type");
162 dict[
"Use Secant Hessian-Times-A-Vector"] =
join(
"General",
"Secant",
"Use as Hessian");
163 dict[
"Use Secant Preconditioning"] =
join(
"General",
"Secant",
"Use as Preconditioner");
165 dict[
"Gradient Tolerance"] =
join(
"Status Test",
"Gradient Tolerance");
166 dict[
"Maximum Number of Iterations"] =
join(
"Status Test",
"Iteration Limit");
167 dict[
"Step Tolerance"] =
join(
"Status Test",
"Step Tolerance");
169 dict[
"Accept Last Alpha"] =
join(
"Step",
"Line Search",
"Accept Last Alpha");
170 dict[
"Accept Linesearch Minimizer"] =
join(
"Step",
"Line Search",
"Accept Linesearch Minimizer");
171 dict[
"Maximum Number of Function Evaluations"] =
join(
"Step",
"Line Search",
"Function Evaluation Limit");
172 dict[
"Initial Linesearch Parameter"] =
join(
"Step",
"Line Search",
"Initial Step Size");
173 dict[
"Sufficient Decrease Parameter"] =
join(
"Step",
"Line Search",
"Sufficient Decrease Tolerance");
174 dict[
"User Defined Linesearch Parameter"] =
join(
"Step",
"Line Search",
"User Defined Initial Step Size");
176 dict[
"Curvature Conditions Parameter"] =
join(
"Step",
"Line Search",
"Curvature Condition",
"General Parameter");
177 dict[
"Curvature Conditions Parameter: Generalized Wolfe"] =
join(
"Step",
"Line Search",
"Curvature Condition",
"Generalized Wolfe Parameter");
178 dict[
"Linesearch Curvature Condition"] =
join(
"Step",
"Line Search",
"Curvature Condition",
"Type");
180 dict[
"Nonlinear CG Type"] =
join(
"Step",
"Line Search",
"Descent Method",
"Nonlinear CG Type");
181 dict[
"Descent Type"] =
join(
"Step",
"Line Search",
"Descent Method",
"Type");
183 dict[
"Backtracking Rate"] =
join(
"Step",
"Line Search",
"Line-Search Method",
"Backtracking Rate");
184 dict[
"Bracketing Tolerance"] =
join(
"Step",
"Line Search",
"Line-Search Method",
"Bracketing Tolerance");
185 dict[
"Linesearch Type"] =
join(
"Step",
"Line Search",
"Line-Search Method",
"Type");
187 dict[
"Initial Trust-Region Radius"] =
join(
"Step",
"Trust Region",
"Initial Radius");
188 dict[
"Maximum Trust-Region Radius"] =
join(
"Step",
"Trust Region",
"Maximum Radius");
189 dict[
"Radius Growing Threshold"] =
join(
"Step",
"Trust Region",
"Radius Growing Threshold");
190 dict[
"Radius Growing Rate"] =
join(
"Step",
"Trust Region",
"Radius Growing Rate");
191 dict[
"Radius Shrinking Threshold"] =
join(
"Step",
"Trust Region",
"Radius Shrinking Threshold");
192 dict[
"Trust-Region Safeguard"] =
join(
"Step",
"Trust Region",
"Safeguard Size");
193 dict[
"Trust-Region Subproblem Solver Type"] =
join(
"Step",
"Trust Region",
"Subproblem Solver");
194 dict[
"Step Acceptance Parameter"] =
join(
"Step",
"Trust Region",
"Step Acceptance Threshold");
196 dict[
"Gradient Update Relative Tolerance"] =
join(
"Step",
"Trust Region",
"Gradient",
"Relative Tolerance");
197 dict[
"Gradient Update Tolerance Scaling"] =
join(
"Step",
"Trust Region",
"Gradient",
"Tolerance Scaling");
198 dict[
"Value Update Exponent"] =
join(
"Step",
"Trust Region",
"Inexact",
"Value",
"Exponent");
199 dict[
"Value Update Forcing Sequence Initial Value"] =
join(
"Step",
"Trust Region",
"Inexact",
"Value",
"Forcing Sequence Initial Value");
200 dict[
"Value Update Forcing Sequence Reduction Factor"] =
join(
"Step",
"Trust Region",
"Inexact",
"Value",
"Forcing Sequence Reduction Factor");
201 dict[
"Value Update Forcing Sequence Update Frequency"] =
join(
"Step",
"Trust Region",
"Inexact",
"Value",
"Forcing Sequence Update Frequency");
202 dict[
"Value Update Tolerance Scaling"] =
join(
"Step",
"Trust Region",
"Inexact",
"Value",
"Tolerance Scaling");
206 for(IterMap itmap = dict.begin(); itmap != dict.end(); ++itmap) {
207 Str key = itmap->first;
208 Vec value = itmap->second;
214 for(IterPL itpl = inList.begin(); itpl != inList.end(); ++itpl) {
217 Str key( inList.name(itpl) );
223 if(location.size() != 0) {
225 IterVec itvec = location.begin();
227 if( inList.isType<
bool>(key) ) {
228 bool value = inList.get<
bool>( key );
231 else if( inList.isType<
int>(key) ) {
232 int value = inList.get<
int>( key );
235 else if( inList.isType<
double>(key) ) {
236 double value = inList.get<
double>( key );
239 else if( inList.isType<std::string>(key) ) {
240 std::string value = inList.get<std::string>( key );
244 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::invalid_argument,
245 ">>>Error: Unhandled parameter type." );
Contains definitions of custom data types in ROL.
std::string removeStringFormat(std::string s)
void tierParameterList(Teuchos::ParameterList &outList, const Teuchos::ParameterList &inList)
Produce a heirarchical parameter list using the new names from a flat list of the old names...
void setParameter(Teuchos::ParameterList &parlist, const std::vector< std::string > &location, const std::vector< std::string >::iterator iter, ParameterType value)
std::vector< std::string > join(const std::string &s1, const std::string &s2)
Helper function for making vectors of strings.