28 #ifndef _nmrFminSolver_h
29 #define _nmrFminSolver_h
76 nmrFminSolver(CISSTNETLIB_INTEGER n, CISSTNETLIB_INTEGER nlin, CISSTNETLIB_INTEGER nnonlin, CISSTNETLIB_INTEGER niter, CISSTNETLIB_INTEGER nstep)
78 Allocate(n, nlin, nnonlin, niter, nstep);
91 inline void Allocate(CISSTNETLIB_INTEGER n, CISSTNETLIB_INTEGER nlin, CISSTNETLIB_INTEGER nnonlin, CISSTNETLIB_INTEGER niter, CISSTNETLIB_INTEGER nstep)
93 memset (&
UserFn, 0,
sizeof(
struct O8USERFUNC));
94 donlp2_init_size(n, nlin, nnonlin, niter, nstep);
95 donlp2_memory_malloc();
105 memcpy (&
UserCfg, &userCfg,
sizeof(
struct O8USERCONFIG));
110 donlp2_printoptions(stderr);
113 template <
int __instanceLine,
class __elementType>
115 throw (std::runtime_error) {
116 if (
N+1 != static_cast<CISSTNETLIB_INTEGER>(X.size())) {
117 cmnThrow(std::runtime_error(
"nmrFminSolver Solve: Size used for Allocate was different"));
120 UserFn.user_ef = callBack.FunctionFdonlp2;
121 donlp2_setuserfunctions(&
UserFn);
122 donlp2_setuserinit(X.Pointer(), NULL, NULL, NULL);
125 CISSTNETLIB_DOUBLE fx;
126 donlp2_getresult(X.Pointer(), &fx);
129 template <
int __instanceLine,
class __elementType>
133 throw (std::runtime_error) {
134 if (
N+1 != static_cast<CISSTNETLIB_INTEGER>(X.size())) {
135 cmnThrow(std::runtime_error(
"nmrFminSolver Solve: Size used for Allocate was different"));
138 UserFn.user_ef = callBack.FunctionFdonlp2;
139 donlp2_setuserfunctions(&
UserFn);
141 alinRowPointers.
SetSize(alin.rows());
142 for (
unsigned int i = 0; i < alin.rows(); i++) {
143 alinRowPointers(i) = alin.Row(i).
Pointer();
145 donlp2_setuserinit(X.Pointer(), lbound.Pointer(), ubound.Pointer(), alinRowPointers.
Pointer());
148 CISSTNETLIB_DOUBLE fx;
149 donlp2_getresult(X.Pointer(), &fx);
152 template <
int __instanceLineF,
class __elementTypeF,
int __instanceLineC,
class __elementTypeC>
156 throw (std::runtime_error) {
157 if (
N+1 != static_cast<CISSTNETLIB_INTEGER>(X.size())) {
158 cmnThrow(std::runtime_error(
"nmrFminSolver Solve: Size used for Allocate was different"));
161 UserFn.user_ef = callBackF.FunctionFdonlp2;
162 UserFn.user_econ = callBackC.FunctionFdonlp2;
163 donlp2_setuserfunctions(&
UserFn);
164 donlp2_setuserinit(X.Pointer(), lbound.Pointer(), ubound.Pointer(), NULL);
167 CISSTNETLIB_DOUBLE fx;
168 donlp2_getresult(X.Pointer(), &fx);
171 template <
int __instanceLineF,
class __elementTypeF,
int __instanceLineC,
class __elementTypeC>
177 throw (std::runtime_error) {
178 if (
N+1 != static_cast<CISSTNETLIB_INTEGER>(X.size())) {
179 cmnThrow(std::runtime_error(
"nmrFminSolver Solve: Size used for Allocate was different"));
182 UserFn.user_ef = callBackF.FunctionFdonlp2;
183 UserFn.user_econ = callBackC.FunctionFdonlp2;
184 donlp2_setuserfunctions(&
UserFn);
186 alinRowPointers.
SetSize(alin.rows());
187 for (
unsigned int i = 0; i < alin.rows(); i++) {
188 alinRowPointers(i) = alin.Row(i).
Pointer();
190 donlp2_setuserinit(X.Pointer(), lbound.Pointer(), ubound.Pointer(), alinRowPointers.
Pointer());
194 CISSTNETLIB_DOUBLE fx;
195 donlp2_getresult(X.Pointer(), &fx);
198 inline void Solve(
void (*efFunctionPointer)(CISSTNETLIB_INTEGER,CISSTNETLIB_DOUBLE[],CISSTNETLIB_DOUBLE*),
200 void (*econFunctionPointer)(CISSTNETLIB_INTEGER,CISSTNETLIB_INTEGER,CISSTNETLIB_INTEGER,CISSTNETLIB_INTEGER[],CISSTNETLIB_DOUBLE[],CISSTNETLIB_DOUBLE[],CISSTNETLIB_INTEGER[]),
204 if (
N+1 != static_cast<CISSTNETLIB_INTEGER>(X.
size())) {
205 cmnThrow(std::runtime_error(
"nmrFminSolver Solve: Size used for Allocate was different"));
207 UserFn.user_ef = efFunctionPointer;
208 UserFn.user_econ = econFunctionPointer;
209 donlp2_setuserfunctions(&
UserFn);
211 alinRowPointers.
SetSize(alin.rows());
212 for (
unsigned int i = 0; i < alin.rows(); i++) {
213 alinRowPointers(i) = alin.Row(i).
Pointer();
215 donlp2_setuserinit(X.
Pointer(), lbound.Pointer(), ubound.Pointer(), alinRowPointers.
Pointer());
219 CISSTNETLIB_DOUBLE fx;
220 donlp2_getresult(X.
Pointer(), &fx);
224 template <
int __instanceLineF,
class __elementTypeF,
int __instanceLineG,
class __elementTypeG,
225 int __instanceLineC,
class __elementTypeC,
int __instanceLineCG,
class __elementTypeCG>
229 nmrCallBackFunctionCG<__instanceLineCG, __elementTypeCG> &callBackCG,
233 throw (std::runtime_error) {
234 if (
N != static_cast<CISSTNETLIB_INTEGER>(X.
size())) {
235 cmnThrow(std::runtime_error(
"nmrFminSolver Solve: Size used for Allocate was different"));
238 UserFn.user_ef = callBackF.FunctionFdonlp2;
239 UserFn.user_egradf = callBackG.FunctionFdonlp2;
240 UserFn.user_econ = callBackC.FunctionFdonlp2;
241 UserFn.user_econgrad = callBackCG.FunctionFdonlp2;
242 donlp2_setuserfunctions(&
UserFn);
243 donlp2_setuserinit(X.
Pointer, Lb.Pointer(), Ub.Pointer(), ALin.Pointer());
250 #endif // _nmrFminSolver_h
CISSTNETLIB_INTEGER NLin
Definition: nmrFminSolver.h:51
Declaration of nmrCallBackLSNonLinSolver.
Declaration of vctDynamicMatrix.
struct O8USERFUNC UserFn
Definition: nmrFminSolver.h:49
CISSTNETLIB_INTEGER NNonLin
Definition: nmrFminSolver.h:51
void Solve(nmrCallBackFunctionF1< __instanceLine, __elementType > &callBack, vctDynamicVector< CISSTNETLIB_DOUBLE > &X)
Definition: nmrFminSolver.h:114
struct O8USERCONFIG & GetOptions(void)
Definition: nmrFminSolver.h:99
Definition: nmrCallBack.h:169
void SetOptions(struct O8USERCONFIG &userCfg)
Definition: nmrFminSolver.h:104
Definition: nmrCallBack.h:204
Definition: nmrFminSolver.h:43
CISSTNETLIB_INTEGER NStep
Definition: nmrFminSolver.h:51
void SetSize(size_type size)
Definition: vctDynamicVector.h:315
struct O8USERCONFIG UserCfg
Definition: nmrFminSolver.h:50
~nmrFminSolver()
Definition: nmrFminSolver.h:81
size_type size(void) const
Definition: vctDynamicConstVectorBase.h:164
Definition: nmrCallBack.h:45
nmrFminSolver(void)
Definition: nmrFminSolver.h:58
void Solve(void(*efFunctionPointer)(CISSTNETLIB_INTEGER, CISSTNETLIB_DOUBLE[], CISSTNETLIB_DOUBLE *), vctDynamicVector< CISSTNETLIB_DOUBLE > &X, void(*econFunctionPointer)(CISSTNETLIB_INTEGER, CISSTNETLIB_INTEGER, CISSTNETLIB_INTEGER, CISSTNETLIB_INTEGER[], CISSTNETLIB_DOUBLE[], CISSTNETLIB_DOUBLE[], CISSTNETLIB_INTEGER[]), vctDynamicVector< CISSTNETLIB_DOUBLE > &lbound, vctDynamicVector< CISSTNETLIB_DOUBLE > &ubound, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &alin)
Definition: nmrFminSolver.h:198
void Allocate(CISSTNETLIB_INTEGER n, CISSTNETLIB_INTEGER nlin, CISSTNETLIB_INTEGER nnonlin, CISSTNETLIB_INTEGER niter, CISSTNETLIB_INTEGER nstep)
Definition: nmrFminSolver.h:91
CISSTNETLIB_INTEGER N
Definition: nmrFminSolver.h:51
#define cmnThrow(a)
Definition: MinimalCmn.h:4
nmrFminSolver(CISSTNETLIB_INTEGER n, CISSTNETLIB_INTEGER nlin, CISSTNETLIB_INTEGER nnonlin, CISSTNETLIB_INTEGER niter, CISSTNETLIB_INTEGER nstep)
Definition: nmrFminSolver.h:76
CISSTNETLIB_INTEGER NIter
Definition: nmrFminSolver.h:51
pointer Pointer(index_type index=0)
Definition: vctDynamicVectorBase.h:155
void PrintOptions(void)
Definition: nmrFminSolver.h:109
void Solve(nmrCallBackFunctionF1< __instanceLine, __elementType > &callBack, vctDynamicVector< CISSTNETLIB_DOUBLE > &X, vctDynamicVector< CISSTNETLIB_DOUBLE > &lbound, vctDynamicVector< CISSTNETLIB_DOUBLE > &ubound, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &alin)
Definition: nmrFminSolver.h:130
void Solve(nmrCallBackFunctionF1< __instanceLineF, __elementTypeF > &callBackF, vctDynamicVector< CISSTNETLIB_DOUBLE > &X, nmrCallBackFunctionC< __instanceLineC, __elementTypeC > &callBackC, vctDynamicVector< CISSTNETLIB_DOUBLE > &lbound, vctDynamicVector< CISSTNETLIB_DOUBLE > &ubound)
Definition: nmrFminSolver.h:153
void Solve(nmrCallBackFunctionF1< __instanceLineF, __elementTypeF > &callBackF, vctDynamicVector< CISSTNETLIB_DOUBLE > &X, nmrCallBackFunctionC< __instanceLineC, __elementTypeC > &callBackC, vctDynamicVector< CISSTNETLIB_DOUBLE > &lbound, vctDynamicVector< CISSTNETLIB_DOUBLE > &ubound, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &alin)
Definition: nmrFminSolver.h:172