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());
Definition nmrCallBack.h:204
Definition nmrCallBack.h:169
Definition nmrCallBack.h:45
CISSTNETLIB_INTEGER NLin
Definition nmrFminSolver.h:51
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
CISSTNETLIB_INTEGER NNonLin
Definition nmrFminSolver.h:51
void Solve(nmrCallBackFunctionF1< __instanceLine, __elementType > &callBack, vctDynamicVector< CISSTNETLIB_DOUBLE > &X)
Definition nmrFminSolver.h:114
nmrFminSolver(CISSTNETLIB_INTEGER n, CISSTNETLIB_INTEGER nlin, CISSTNETLIB_INTEGER nnonlin, CISSTNETLIB_INTEGER niter, CISSTNETLIB_INTEGER nstep)
Definition nmrFminSolver.h:76
void Allocate(CISSTNETLIB_INTEGER n, CISSTNETLIB_INTEGER nlin, CISSTNETLIB_INTEGER nnonlin, CISSTNETLIB_INTEGER niter, CISSTNETLIB_INTEGER nstep)
Definition nmrFminSolver.h:91
struct O8USERCONFIG & GetOptions(void)
Definition nmrFminSolver.h:99
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
CISSTNETLIB_INTEGER NStep
Definition nmrFminSolver.h:51
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
~nmrFminSolver()
Definition nmrFminSolver.h:81
struct O8USERCONFIG UserCfg
Definition nmrFminSolver.h:50
void SetOptions(struct O8USERCONFIG &userCfg)
Definition nmrFminSolver.h:104
nmrFminSolver(void)
Definition nmrFminSolver.h:58
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
struct O8USERFUNC UserFn
Definition nmrFminSolver.h:49
CISSTNETLIB_INTEGER N
Definition nmrFminSolver.h:51
CISSTNETLIB_INTEGER NIter
Definition nmrFminSolver.h:51
Definition vctForwardDeclarations.h:157
Definition vctForwardDeclarations.h:131
void cmnThrow(const _exceptionType &except, cmnLogLevel lod=CMN_LOG_LEVEL_INIT_ERROR)
Definition cmnThrow.h:76
Declaration of nmrCallBackLSNonLinSolver.
const value_type & X(void) const
Definition vctDynamicConstVectorBase.h:263
Declaration of vctDynamicMatrix.