1 #ifndef SimTK_SIMMATH_CPODES_H_
2 #define SimTK_SIMMATH_CPODES_H_
70 const char*
function,
char* msg)
const;
95 {
return sys.
project(t,ycur,corr,epsProj,err); }
103 {
return sys.
root(t,y,yp,gout); }
107 {
return sys.
weight(y,weights); }
110 int error_code,
const char* module,
111 const char*
function,
char* msg)
128 UnspecifiedODEType=0,
134 UnspecifiedLinearMultistepMethod=0,
140 UnspecifiedNonlinearSystemIterationType=0,
146 UnspecifiedToleranceType=0,
153 UnspecifiedProjectionNorm=0,
159 UnspecifiedConstraintLinearity=0,
165 UnspecifiedProjectionFactorizationType=0,
173 UnspecifiedStepMode=0,
181 (
ODEType ode=UnspecifiedODEType,
186 librarySideCPodesConstructor(ode, lmm, nls);
188 clientSideCPodesConstructor();
194 static const int Success = 0;
195 static const int TstopReturn = 1;
196 static const int RootReturn = 2;
197 static const int Warning = 99;
198 static const int TooMuchWork = -1;
199 static const int TooClose = -27;
207 static const int RecoverableError = 9999;
208 static const int UnrecoverableError = -9999;
282 int tol_typeQ,
Real reltolQ,
void* abstolQ);
312 int* nfevals,
int* nlinsetups,
313 int* netfails,
int* qlast,
314 int* qcur,
Real* hinused,
Real* hlast,
325 int* nce,
int* nsetupsP,
367 int error_code,
const char* module,
368 const char*
function,
char* msg);
378 void registerExplicitODEFunc(ExplicitODEFunc);
379 void registerImplicitODEFunc(ImplicitODEFunc);
380 void registerConstraintFunc(ConstraintFunc);
381 void registerProjectFunc(ProjectFunc);
382 void registerQuadratureFunc(QuadratureFunc);
383 void registerRootFunc(RootFunc);
384 void registerWeightFunc(WeightFunc);
385 void registerErrorHandlerFunc(ErrorHandlerFunc);
395 void clientSideCPodesConstructor() {
408 class CPodesRep* rep;
409 friend class CPodesRep;
411 const CPodesRep& getRep()
const {assert(rep);
return *rep;}
412 CPodesRep& updRep() {assert(rep);
return *rep;}
415 CPodes(
const CPodes&);
416 CPodes& operator=(
const CPodes&);
Includes internal headers providing declarations for the basic SimTK Core classes,...
This is the header file that every Simmath compilation unit should include first.
#define SimTK_SIMMATH_EXPORT
Definition: SimTKmath/include/simmath/internal/common.h:64
This abstract class defines the system to be integrated with SimTK CPodes.
Definition: SimTKcpodes.h:49
virtual int root(Real t, const Vector &y, const Vector &yp, Vector &gout) const
virtual int weight(const Vector &y, Vector &weights) const
virtual void errorHandler(int error_code, const char *module, const char *function, char *msg) const
virtual int explicitODE(Real t, const Vector &y, Vector &fout) const
virtual int constraint(Real t, const Vector &y, Vector &cout) const
virtual int project(Real t, const Vector &ycur, Vector &corr, Real epsProj, Vector &err) const
virtual ~CPodesSystem()
Definition: SimTKcpodes.h:51
virtual int implicitODE(Real t, const Vector &y, const Vector &yp, Vector &fout) const
virtual int quadrature(Real t, const Vector &y, Vector &qout) const
This is a straightforward translation of the Sundials CPODES C interface into C++.
Definition: SimTKcpodes.h:122
int getProjNumFailures(int *nprf)
int getNumFctEvals(int *nfevals)
int lapackBand(int N, int mupper, int mlower)
int getIntegratorStats(int *nsteps, int *nfevals, int *nlinsetups, int *netfails, int *qlast, int *qcur, Real *hinused, Real *hlast, Real *hcur, Real *tcur)
int quadInit(const Vector &q0)
NonlinearSystemIterationType
Definition: SimTKcpodes.h:139
@ Newton
Definition: SimTKcpodes.h:141
int getRootInfo(int *rootsfound)
int reInit(CPodesSystem &sys, Real t0, const Vector &y0, const Vector &yp0, ToleranceType tt, Real reltol, void *abstol)
int setTolerances(int tol_type, Real reltol, void *abstol)
int getNumGEvals(int *ngevals)
int getNumNonlinSolvConvFails(int *nncfails)
ProjectionFactorizationType
Definition: SimTKcpodes.h:164
@ ProjectWithQR
Definition: SimTKcpodes.h:167
@ ProjectWithSchurComplement
Definition: SimTKcpodes.h:168
@ ProjectWithLU
Definition: SimTKcpodes.h:166
int getCurrentTime(Real *tcur)
LinearMultistepMethod
Definition: SimTKcpodes.h:133
@ BDF
Definition: SimTKcpodes.h:135
int getNonlinSolvStats(int *nniters, int *nncfails)
int setMinStep(Real hmin)
int dlsProjSetJacFn(void *jacP, void *jacP_data)
int dlsProjGetNumJacEvals(int *njPevals)
int setRootDirection(Array_< int > &rootdir)
ConstraintLinearity
Definition: SimTKcpodes.h:158
@ Linear
Definition: SimTKcpodes.h:160
int dlsSetJacFn(void *jac, void *jac_data)
int getNumLinSolvSetups(int *nlinsetups)
int dlsProjGetNumFctEvals(int *ncevalsLS)
int setStopTime(Real tstop)
int getCurrentOrder(int *qcur)
int getQuadNumFunEvals(int *nqevals)
int step(Real tout, Real *tret, Vector &y_inout, Vector &yp_inout, StepMode=Normal)
int getQuad(Real t, Vector &yQout)
int getWorkSpace(int *lenrw, int *leniw)
int setNonlinConvCoef(Real nlscoef)
int getNumNonlinSolvIters(int *nniters)
ToleranceType
Definition: SimTKcpodes.h:145
@ ScalarScalar
Definition: SimTKcpodes.h:147
@ ScalarVector
Definition: SimTKcpodes.h:148
int dlsGetWorkSpace(int *lenrwLS, int *leniwLS)
int setMaxStep(Real hmax)
int getProjNumCnstrEvals(int *nce)
ODEType
Definition: SimTKcpodes.h:127
@ ExplicitODE
Definition: SimTKcpodes.h:129
int setProjUpdateErrEst(bool proj_err)
int getDky(Real t, int k, Vector &dky)
int getNumSteps(int *nsteps)
int setProjFrequency(int proj_freq)
int getNumErrTestFails(int *netfails)
StepMode
Definition: SimTKcpodes.h:172
@ NormalTstop
Definition: SimTKcpodes.h:176
@ Normal
Definition: SimTKcpodes.h:174
@ OneStep
Definition: SimTKcpodes.h:175
int getNumStabLimOrderReds(int *nslred)
int setProjNonlinConvCoef(Real prjcoef)
int setProjLsetupFreq(int proj_lset_freq)
char * getReturnFlagName(int flag)
int getProjStats(int *nproj, int *nce, int *nsetupsP, int *nprf)
int projInit(ProjectionNorm, ConstraintLinearity, const Vector &ctol)
int getEstLocalErrors(Vector &ele)
int init(CPodesSystem &sys, Real t0, const Vector &y0, const Vector &yp0, ToleranceType tt, Real reltol, void *abstol)
int dlsGetLastFlag(int *flag)
ProjectionNorm
Definition: SimTKcpodes.h:152
@ L2Norm
Definition: SimTKcpodes.h:154
int dlsGetNumJacEvals(int *njevals)
int setMaxHnilWarns(int mxhnil)
int lapackDenseProj(int Nc, int Ny, ProjectionFactorizationType)
CPodes(ODEType ode=UnspecifiedODEType, LinearMultistepMethod lmm=UnspecifiedLinearMultistepMethod, NonlinearSystemIterationType nls=UnspecifiedNonlinearSystemIterationType)
Definition: SimTKcpodes.h:181
int setProjTestCnstr(bool test_cnstr)
int setMaxNumSteps(int mxsteps)
int setMaxNonlinIters(int maxcor)
int getLastOrder(int *qlast)
int setErrFile(FILE *errfp)
int setInitStep(Real hin)
int getProjNumProj(int *nproj)
int setQuadErrCon(bool errconQ, int tol_typeQ, Real reltolQ, void *abstolQ)
int getQuadErrWeights(Vector &eQweight)
int setMaxErrTestFails(int maxnef)
int getCurrentStep(Real *hcur)
int getRootWindow(Real *tLo, Real *tHi)
int setMaxConvFails(int maxncf)
int setMaxOrd(int maxord)
int getProjNumLinSolvSetups(int *nsetupsP)
int quadReInit(const Vector &q0)
int dlsGetNumFctEvals(int *nfevalsLS)
int setStabLimDet(bool stldet)
int getErrWeights(Vector &eweight)
char * dlsGetReturnFlagName(int flag)
int getQuadDky(Real t, int k, Vector &dky)
int getTolScaleFactor(Real *tolsfac)
int getLastStep(Real *hlast)
int getActualInitStep(Real *hinused)
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
static int weight_static(const CPodesSystem &sys, const Vector &y, Vector &weights)
Definition: SimTKcpodes.h:105
static int explicitODE_static(const CPodesSystem &sys, Real t, const Vector &y, Vector &fout)
Definition: SimTKcpodes.h:80
static int quadrature_static(const CPodesSystem &sys, Real t, const Vector &y, Vector &qout)
Definition: SimTKcpodes.h:97
static int root_static(const CPodesSystem &sys, Real t, const Vector &y, const Vector &yp, Vector &gout)
Definition: SimTKcpodes.h:101
static int project_static(const CPodesSystem &sys, Real t, const Vector &ycur, Vector &corr, Real epsProj, Vector &err)
Definition: SimTKcpodes.h:92
static int constraint_static(const CPodesSystem &sys, Real t, const Vector &y, Vector &cout)
Definition: SimTKcpodes.h:88
static void errorHandler_static(const CPodesSystem &sys, int error_code, const char *module, const char *function, char *msg)
Definition: SimTKcpodes.h:109
static int implicitODE_static(const CPodesSystem &sys, Real t, const Vector &y, const Vector &yp, Vector &fout)
Definition: SimTKcpodes.h:84
SimTK_Real Real
This is the default compiled-in floating point type for SimTK, either float or double.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:607