1 #include "nidr.h"
2 #include "NIDRProblemDescDB.H"
3 #include "NPSOLOptimizer.H"
4 #include "NLSSOLLeastSq.H"
5
6 namespace Dakota {
7
8 struct
9 Meth_Info {
10 DataMethodRep *dme;
11 DataMethod *dme0;
12 };
13
14 void NIDRProblemDescDB::
method_Real(const char * keyname,Values * val,void ** g,void * v)15 method_Real(const char *keyname, Values *val, void **g, void *v)
16 {
17 (*(Meth_Info**)g)->dme->**(Real DataMethodRep::**)v = *val->r;
18 }
19
20 struct
21 Method_mp_lit {
22 String DataMethodRep::* sp;
23 const char *lit;
24 };
25
26 void NIDRProblemDescDB::
method_lit(const char * keyname,Values * val,void ** g,void * v)27 method_lit(const char *keyname, Values *val, void **g, void *v)
28 {
29 (*(Meth_Info**)g)->dme->*((Method_mp_lit*)v)->sp = ((Method_mp_lit*)v)->lit;
30 }
31
32 #define MP_(x) DataMethodRep::* method_mp_##x = &DataMethodRep::x
33 #define MP2(x,y) method_mp_##x##_##y = {&DataMethodRep::x,#y}
34
35 static Method_mp_lit
36 MP2(methodName,nlssol_sqp),
37 MP2(methodName,npsol_sqp);
38
39 static Real
40 MP_(functionPrecision),
41 MP_(lineSearchTolerance);
42
43 static int
44 MP_(verifyLevel);
45
46 extern NLSSOLLeastSq *(*new_NLSSOLLeastSq)(Model& model);
47 extern NLSSOLLeastSq *(*new_NLSSOLLeastSq1)(NoDBBaseConstructor, Model &model);
48 extern NPSOLOptimizer *(*new_NPSOLOptimizer)(Model& model);
49 extern NPSOLOptimizer *(*new_NPSOLOptimizer1)(NoDBBaseConstructor, Model &model);
50
51 static NPSOLOptimizer *
my_new_NPSOLOptimizer(Model & model)52 my_new_NPSOLOptimizer(Model& model)
53 {
54 return new NPSOLOptimizer(model);
55 }
56
57 static NPSOLOptimizer *
my_new_NPSOLOptimizer1(NoDBBaseConstructor,Model & model)58 my_new_NPSOLOptimizer1(NoDBBaseConstructor, Model& model)
59 {
60 return new NPSOLOptimizer(NoDBBaseConstructor(), model);
61 }
62
63 static NPSOLOptimizer *
my_new_NPSOLOptimizer2(Model & model,const int & derivative_level,const Real & conv_tol)64 my_new_NPSOLOptimizer2(Model& model, const int& derivative_level, const Real& conv_tol)
65 {
66 return new NPSOLOptimizer(model, derivative_level, conv_tol);
67 }
68
69 static NPSOLOptimizer *
my_new_NPSOLOptimizer3(const RealVector & initial_point,const RealVector & var_lower_bnds,const RealVector & var_upper_bnds,const RealMatrix & lin_ineq_coeffs,const RealVector & lin_ineq_lower_bnds,const RealVector & lin_ineq_upper_bnds,const RealMatrix & lin_eq_coeffs,const RealVector & lin_eq_targets,const RealVector & nonlin_ineq_lower_bnds,const RealVector & nonlin_ineq_upper_bnds,const RealVector & nonlin_eq_targets,void (* user_obj_eval)(int &,int &,double *,double &,double *,int &),void (* user_con_eval)(int &,int &,int &,int &,int *,double *,double *,double *,int &),const int & derivative_level,const Real & conv_tol)70 my_new_NPSOLOptimizer3(const RealVector& initial_point,
71 const RealVector& var_lower_bnds,
72 const RealVector& var_upper_bnds,
73 const RealMatrix& lin_ineq_coeffs,
74 const RealVector& lin_ineq_lower_bnds,
75 const RealVector& lin_ineq_upper_bnds,
76 const RealMatrix& lin_eq_coeffs,
77 const RealVector& lin_eq_targets,
78 const RealVector& nonlin_ineq_lower_bnds,
79 const RealVector& nonlin_ineq_upper_bnds,
80 const RealVector& nonlin_eq_targets,
81 void (*user_obj_eval) (int&, int&, double*, double&, double*, int&),
82 void (*user_con_eval) (int&, int&, int&, int&, int*, double*, double*,
83 double*, int&),
84 const int& derivative_level, const Real& conv_tol)
85 {
86 return new NPSOLOptimizer(initial_point,
87 var_lower_bnds,
88 var_upper_bnds,
89 lin_ineq_coeffs,
90 lin_ineq_lower_bnds,
91 lin_ineq_upper_bnds,
92 lin_eq_coeffs,
93 lin_eq_targets,
94 nonlin_ineq_lower_bnds,
95 nonlin_ineq_upper_bnds,
96 nonlin_eq_targets,
97 user_obj_eval,
98 user_con_eval,
99 derivative_level,
100 conv_tol);
101 }
102
103 static NLSSOLLeastSq *
my_new_NLSSOLLeastSq(Model & model)104 my_new_NLSSOLLeastSq(Model& model)
105 {
106 return new NLSSOLLeastSq(model);
107 }
108
109 static NLSSOLLeastSq *
my_new_NLSSOLLeastSq1(NoDBBaseConstructor,Model & model)110 my_new_NLSSOLLeastSq1(NoDBBaseConstructor, Model& model)
111 {
112 return new NLSSOLLeastSq(NoDBBaseConstructor(), model);
113 }
114
115 static void
stanford_start(const char * keyname,Values * val,void ** g,void * v)116 stanford_start(const char *keyname, Values *val, void **g, void *v)
117 {
118 new_NLSSOLLeastSq = my_new_NLSSOLLeastSq;
119 new_NLSSOLLeastSq1 = my_new_NLSSOLLeastSq1;
120 new_NPSOLOptimizer = my_new_NPSOLOptimizer;
121 new_NPSOLOptimizer1 = my_new_NPSOLOptimizer1;
122 }
123
124 #define N_mdm(x,y) NIDRProblemDescDB::method_##x,&method_mp_##y
125
126 /** 6 distinct keywords (plus 2 aliases) **/
127
128 static KeyWordx
129 kw_1[7] = {
130 {{"function_precision",0x2000a,0,3,0,0,0.,0.,0,N_mdm(Real,functionPrecision)},7,9,"N_mdm(Real,functionPrecision)","{Function precision} http://www.cs.sandia.gov/dakota/licensing/votd/html-ref/MethodCommands.html#MethodNPSOLDC"},
131 {{"linesearch_tolerance",0x2000a,0,4,0,0,0.,0.,0,N_mdm(Real,lineSearchTolerance)},8,11,"N_mdm(Real,lineSearchTolerance)","{Line search tolerance} http://www.cs.sandia.gov/dakota/licensing/votd/html-ref/MethodCommands.html#MethodNPSOLDC"},
132 {{"nlssol",0x20008,0,1,1,0,0.,0.,0,N_mdm(lit,methodName_nlssol_sqp)},4,5,"N_mdm(lit,methodName_nlssol_sqp)",0,"Nonlinear Least Squares"},
133 {{"nlssol_sqp",0x20000,0,1,1,0,0.,0.,-1,N_mdm(lit,methodName_nlssol_sqp)},5,4,"N_mdm(lit,methodName_nlssol_sqp)"},
134 {{"npsol",0x20008,0,1,1,0,0.,0.,0,N_mdm(lit,methodName_npsol_sqp)},2,3,"N_mdm(lit,methodName_npsol_sqp)",0,"Optimization: Local, Derivative-based"},
135 {{"npsol_sqp",0x20000,0,1,1,0,0.,0.,-1,N_mdm(lit,methodName_npsol_sqp)},3,2,"N_mdm(lit,methodName_npsol_sqp)"},
136 {{"verify_level",0x20009,0,2,0,0,0.,0.,0,N_mdm(int,verifyLevel)},6,7,"N_mdm(int,verifyLevel)","{Gradient verification level} http://www.cs.sandia.gov/dakota/licensing/votd/html-ref/MethodCommands.html#MethodNPSOLDC"}
137 },
138 kw_2[1] = {
139 {{"stanford",0x20008,7,1,1,(KeyWord*)kw_1,0.,0.,0,stanford_start},1,1,"stanford_start"}
140 };
141
142 } // namespace Dakota
143
144 #ifdef __cplusplus
145 extern "C" {
146 KeyWord *keyword_add(void);
147 }
148 #endif
149
150 KeyWord*
keyword_add(void)151 keyword_add(void) {
152 return &Dakota::kw_2[0].kw;
153 }
154