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