1 #ifndef SimTK_SIMMATH_CPODES_H_ 2 #define SimTK_SIMMATH_CPODES_H_ 60 virtual int constraint(
Real t,
const Vector& y,
64 virtual int quadrature(
Real t,
const Vector& y,
68 virtual int weight(
const Vector& y,
Vector& weights)
const;
69 virtual void errorHandler(
int error_code,
const char* module,
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,
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;
235 int quadInit(
const Vector& q0);
236 int quadReInit(
const Vector& q0);
240 int rootInit(
int nrtfn);
244 int setErrHandlerFn();
253 int dlsSetJacFn(
void* jac,
void* jac_data);
254 int dlsProjSetJacFn(
void* jacP,
void* jacP_data);
260 int setErrFile(FILE* errfp);
261 int setMaxOrd(
int maxord);
262 int setMaxNumSteps(
int mxsteps);
263 int setMaxHnilWarns(
int mxhnil);
264 int setStabLimDet(
bool stldet) ;
265 int setInitStep(
Real hin);
266 int setMinStep(
Real hmin);
267 int setMaxStep(
Real hmax);
268 int setStopTime(
Real tstop);
269 int setMaxErrTestFails(
int maxnef);
271 int setMaxNonlinIters(
int maxcor);
272 int setMaxConvFails(
int maxncf);
273 int setNonlinConvCoef(
Real nlscoef);
275 int setProjUpdateErrEst(
bool proj_err);
276 int setProjFrequency(
int proj_freq);
277 int setProjTestCnstr(
bool test_cnstr);
278 int setProjLsetupFreq(
int proj_lset_freq);
279 int setProjNonlinConvCoef(
Real prjcoef);
281 int setQuadErrCon(
bool errconQ,
282 int tol_typeQ,
Real reltolQ,
void* abstolQ);
284 int setTolerances(
int tol_type,
Real reltol,
void* abstol);
293 int getWorkSpace(
int* lenrw,
int* leniw);
294 int getNumSteps(
int* nsteps);
295 int getNumFctEvals(
int* nfevals);
296 int getNumLinSolvSetups(
int* nlinsetups);
297 int getNumErrTestFails(
int* netfails);
298 int getLastOrder(
int* qlast);
299 int getCurrentOrder(
int* qcur);
300 int getNumStabLimOrderReds(
int* nslred);
301 int getActualInitStep(
Real* hinused);
302 int getLastStep(
Real* hlast);
303 int getCurrentStep(
Real* hcur);
304 int getCurrentTime(
Real* tcur);
305 int getTolScaleFactor(
Real* tolsfac);
306 int getErrWeights(
Vector& eweight);
307 int getEstLocalErrors(
Vector& ele) ;
308 int getNumGEvals(
int* ngevals);
309 int getRootInfo(
int* rootsfound);
310 int getRootWindow(
Real* tLo,
Real* tHi);
311 int getIntegratorStats(
int* nsteps,
312 int* nfevals,
int* nlinsetups,
313 int* netfails,
int* qlast,
314 int* qcur,
Real* hinused,
Real* hlast,
317 int getNumNonlinSolvIters(
int* nniters);
318 int getNumNonlinSolvConvFails(
int* nncfails);
319 int getNonlinSolvStats(
int* nniters,
int* nncfails);
320 int getProjNumProj(
int* nproj);
321 int getProjNumCnstrEvals(
int* nce);
322 int getProjNumLinSolvSetups(
int* nsetupsP);
323 int getProjNumFailures(
int* nprf) ;
324 int getProjStats(
int* nproj,
325 int* nce,
int* nsetupsP,
327 int getQuadNumFunEvals(
int* nqevals);
328 int getQuadErrWeights(
Vector& eQweight);
329 char* getReturnFlagName(
int flag);
332 int dlsGetWorkSpace(
int* lenrwLS,
int* leniwLS);
333 int dlsGetNumJacEvals(
int* njevals);
334 int dlsGetNumFctEvals(
int* nfevalsLS);
335 int dlsGetLastFlag(
int* flag);
336 char* dlsGetReturnFlagName(
int flag);
338 int dlsProjGetNumJacEvals(
int* njPevals);
339 int dlsProjGetNumFctEvals(
int* ncevalsLS);
341 int lapackDense(
int N);
342 int lapackBand(
int N,
int mupper,
int mlower);
351 typedef int (*ImplicitODEFunc)(
const CPodesSystem&,
354 typedef int (*ConstraintFunc) (
const CPodesSystem&,
356 typedef int (*ProjectFunc) (
const CPodesSystem&,
359 typedef int (*QuadratureFunc) (
const CPodesSystem&,
361 typedef int (*RootFunc) (
const CPodesSystem&,
364 typedef int (*WeightFunc) (
const CPodesSystem&,
366 typedef void (*ErrorHandlerFunc)(
const CPodesSystem&,
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;}
421 #endif // SimTK_CPODES_H_ ODEType
Definition: SimTKcpodes.h:127
static int explicitODE_static(const CPodesSystem &sys, Real t, const Vector &y, Vector &fout)
Definition: SimTKcpodes.h:80
Definition: SimTKcpodes.h:176
that it contains events that have triggered but have not been processed Thus it is not a legitimate point along the systemТs trajectory and should never be returned to the caller For discussion we label this УimproperФ state EMBED Equation DSMT4 The event handler will correct the state creating a modified state with time still at thigh but not triggering any events We label the modified state EMBED Equation DSMT4 Once the systemТs handler the state EMBED Equation DSMT4 can be output as part of the trajectory and used as the initial condition for the next continuous interval Thus the time stepper generates the sequence of legitimate trajectory points just prior to event immediately followed by EMBED Equation DSMT4 which is the time at which the but after the event handler has modified the state to deal with those events Consecutive intervals I and I will consist of trajectory points EMBED Equation DSMT4 with round brackets indicating that EMBED Equation DSMT4 is not part of the trajectory Event handlers Event handlers are solvers which are able to take a state in an resolve the set up appropriate event triggers for the next and report back to the time stepper the degree to which the system continuity has been so that the integrator can be reinitialized appropriately An event handler can also indicate that the simulation should be in which case the time stepper will return the final state to its caller and disallow further time stepping Other event types Not all events have to be localized There are several special case clock user interrupt control is returned to the time stepper The time stepper can then declare that a scheduled event has call the systemТs event and reinitialize the integrator if continuity has been violated Time advanced events occur whenever the integrator has advanced time that at the end of every successful internal integration step These are generally restricted to discrete variable updates which do not affect the continuous such as min max values used only for reporting Normally the integrator does not return control at the end of a step
Definition: SimmathUserGuide.doc:227
static int weight_static(const CPodesSystem &sys, const Vector &y, Vector &weights)
Definition: SimTKcpodes.h:105
This abstract class defines the system to be integrated with SimTK CPodes.
Definition: SimTKcpodes.h:49
virtual int quadrature(Real t, const Vector &y, Vector &qout) const
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
Definition: SimTKcpodes.h:135
static int project_static(const CPodesSystem &sys, Real t, const Vector &ycur, Vector &corr, Real epsProj, Vector &err)
Definition: SimTKcpodes.h:92
Definition: SimTKcpodes.h:167
static int quadrature_static(const CPodesSystem &sys, Real t, const Vector &y, Vector &qout)
Definition: SimTKcpodes.h:97
LinearMultistepMethod
Definition: SimTKcpodes.h:133
ProjectionNorm
Definition: SimTKcpodes.h:152
static int constraint_static(const CPodesSystem &sys, Real t, const Vector &y, Vector &cout)
Definition: SimTKcpodes.h:88
virtual int implicitODE(Real t, const Vector &y, const Vector &yp, Vector &fout) const
Definition: SimTKcpodes.h:160
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:593
Definition: SimTKcpodes.h:141
╨╧ рб▒ с ■ ╖ ╣ ■ │ ┤ ╡ ╢ ье┴ А ° ┐ ч bjbjcTcT ┌┘ │ ├ ╗ t ╖ Я ┴ K K K D П П П А Л2 Ф П Z╞ j J a n u a r y
Definition: Simmatrix.doc:5
ConstraintLinearity
Definition: SimTKcpodes.h:158
Definition: SimTKcpodes.h:147
Includes internal headers providing declarations for the basic SimTK Core classes, including Simmatrix.
virtual int explicitODE(Real t, const Vector &y, Vector &fout) const
virtual int weight(const Vector &y, Vector &weights) const
virtual ~CPodesSystem()
Definition: SimTKcpodes.h:51
This is a straightforward translation of the Sundials CPODES C interface into C++.
Definition: SimTKcpodes.h:122
virtual int root(Real t, const Vector &y, const Vector &yp, Vector &gout) const
StepMode
Definition: SimTKcpodes.h:172
NonlinearSystemIterationType
Definition: SimTKcpodes.h:139
Definition: SimTKcpodes.h:148
This is the header file that every Simmath compilation unit should include first. ...
Definition: SimTKcpodes.h:129
Definition: SimTKcpodes.h:168
Definition: SimTKcpodes.h:174
virtual int project(Real t, const Vector &ycur, Vector &corr, Real epsProj, Vector &err) const
Definition: SimTKcpodes.h:154
ToleranceType
Definition: SimTKcpodes.h:145
Definition: SimTKcpodes.h:175
static int implicitODE_static(const CPodesSystem &sys, Real t, const Vector &y, const Vector &yp, Vector &fout)
Definition: SimTKcpodes.h:84
ProjectionFactorizationType
Definition: SimTKcpodes.h:164
#define SimTK_SIMMATH_EXPORT
Definition: SimTKmath/include/simmath/internal/common.h:64
static int root_static(const CPodesSystem &sys, Real t, const Vector &y, const Vector &yp, Vector &gout)
Definition: SimTKcpodes.h:101
virtual void errorHandler(int error_code, const char *module, const char *function, char *msg) const
static void errorHandler_static(const CPodesSystem &sys, int error_code, const char *module, const char *function, char *msg)
Definition: SimTKcpodes.h:109
virtual int constraint(Real t, const Vector &y, Vector &cout) const
Definition: SimTKcpodes.h:166