109 if(_relerr>1) _relerr=1;
112 Dprintf((
"SetAccuracy: maxerror = %g + %g * X ",
176 Dprintf((
"Integrator[%p]::Integrator() #%d",
187 Dprintf((
"Integrator[%p]::Integrator(Input,%g) #%d",
200 Dprintf((
"Integrator[%p]::Integrator(Integrator[%p],%g) #%d",
211 Dprintf((
"destructor: Integrator[%p] #%d",
281 ListPtr =
new std::list<Integrator*>;
294 Dprintf((
"IntegratorContainer::Insert(%p)",ptr));
305 Dprintf((
"IntegratorContainer::Erase(...)"));
318 Dprintf((
"IntegratorContainer::NtoL()"));
333 Dprintf((
"IntegratorContainer::LtoN)"));
348 Dprintf((
"IntegratorContainer::InitAll)"));
352 (*ip)->SetState(0.0);
365 Dprintf((
"IntegratorContainer::EvaluateAll)"));
492 ListPtr =
new std::list<Status*>;
505 Dprintf((
"StatusContainer::Insert(%p)",ptr));
516 Dprintf((
"StatusContainer::Erase(...)"));
529 Dprintf((
"StatusContainer::NtoL()"));
544 Dprintf((
"StatusContainer::LtoN)"));
559 Dprintf((
"StatusContainer::InitAll)"));
563 (*sp)->SetState(0.0);
575 Dprintf((
"StatusContainer::EvaluateAll)"));
591 Dprintf((
"StatusContainer::EvaluateAll)"));
595 (*sp)->SetValid(
false);
block: constant (value can not be changed)
static iterator Insert(Integrator *ptr)
static void Erase(iterator it)
static void EvaluateAll()
static std::list< Integrator * > * ListPtr
list of integrators
std::list< Integrator * >::iterator iterator
static std::list< Integrator * > * Instance(void)
block for numerical integration input is derivative, output is state
double Value() override
the state of integrator
double initval
initial value: y(t0)
void Set(double value)
set the integrator status value (step change)
Integrator()
constructor for special cases (arrays of integrators) Input can be set using method Integrator::Set
double InputValue()
current input value
IntegratorContainer::iterator it_list
position in list of integrators
void Eval() override
evaluate integrator input
~Integrator()
destructor removes integrator from list
void Init()
use preset initial value
virtual std::string Name() const
get object name
static std::list< Status * > * Instance(void)
static iterator Insert(Status *ptr)
std::list< Status * >::iterator iterator
static void EvaluateAll()
static std::list< Status * > * ListPtr
list of status variables
static void ClearAllValueOK()
static void Erase(iterator it)
State variables (memory) base for blocks with internal state (Relay, ...)
virtual void Eval() override
evaluate without loop detection
void Set(double value)
set state variable value (step change)
virtual double Value() override
value of state variable
double stl
status from previous step
Status(Input i, double initvalue=0)
double initval
initial value
StatusContainer::iterator it_list
position in list of status variables
base for continuous blocks with single input and algebraic loop check
abstract base for continuous blocks with single output suitable for expression-tree building and eval...
virtual void _Eval()
evaluate block (with loop detection)
Internal header file for SIMLIB/C++.
Implementation of class CalendarList interface is static - using global functions in SQS namespace.
const double & StepSize
actual integration step
void SIMLIB_ContinueInit()
bool SIMLIB_DynamicFlag
in dynamic section
const double & RelativeError
max. rel. error
void SIMLIB_error(const enum _ErrEnum N)
print error message and abort program
double SIMLIB_RelativeError
relative error
void SetAccuracy(double _abserr, double _relerr)
set max.
double SIMLIB_OptStep
optimal step
void SetStep(double _dtmin, double _dtmax)
Set integration step interval.
const double & MaxStep
maximal integration step
bool SIMLIB_ContractStepFlag
requests shorter step
const double & AbsoluteError
max. abs. error of integration
std::string SIMLIB_create_tmp_name(const char *fmt,...)
printf-like function to create temporary name (the length of temporary names is limited) used only ...
Constant SIMLIB_Integrator_0input(0)
dummy input with zero value
void SIMLIB_Dynamic()
performs evaluation of integrators and status blocks
bool SIMLIB_ResetStatus
flag set if there is a need for integration method restart
const double & MinStep
minimal integration step
double SIMLIB_AbsoluteError
absolute error
double SIMLIB_MinStep
minimal step
double SIMLIB_MaxStep
max. step
const double & OptStep
optimal integration step
double SIMLIB_ContractStep
requested step size
double SIMLIB_StepStartTime
last step time
const double SIMLIB_MAXTIME
maximum time (1e30 works for float, too)
double SIMLIB_StepSize
actual step
double SIMLIB_DeltaTime
Time-SIMLIB_StepStartTime.
void ContractStep()
contract step of integration
Main SIMLIB/C++ interface.