59 comp->
eventInfo.newDiscreteStatesNeeded = fmi2False;
60 comp->
eventInfo.terminateSimulation = fmi2False;
61 comp->
eventInfo.nominalsOfContinuousStatesChanged = fmi2False;
62 comp->
eventInfo.nextEventTimeDefined = fmi2False;
68 comp->
eventInfo.valuesOfContinuousStatesChanged = fmi2True;
71 comp->
eventInfo.valuesOfContinuousStatesChanged = fmi2False;
101 for (k = 0; k < nvr; k++) {
104 value[k] = comp->
states[cvr];
111 value[k] = comp->
reals[cvr];
125 for (k = 0; k < nvr; k++) {
139 for (k = 0; k < nvr; k++) {
153 for (k = 0; k < nvr; k++) {
154 value[k] = comp->
strings[vr[k]];
167 for (k = 0; k < nvr; k++) {
170 comp->
states[cvr] = value[k];
173 comp->
functions->logger(c, comp->
instanceName,fmi2Warning,
"WARNING",
"Cannot set acceleration value (calculated)");
177 comp->
reals[cvr] = value[k];
191 for (k = 0; k < nvr; k++) {
205 for (k = 0; k < nvr; k++) {
219 for (k = 0; k < nvr; k++) {
224 len = strlen((
char*)s_src) + 1;
225 s_dist = comp->
functions->allocateMemory(len,
sizeof(
char));
226 if (s_dist == NULL) {
229 strcpy((
char*)s_dist, (
char*)s_src);
238 for (k = 0; k < nvr; k++) {
253 return fmi2TypesPlatform;
262 const fmi2CallbackFunctions *functions,
fmi2Boolean visible,
271 }
else if (strcmp(fmuGUID,
FMI_GUID) != 0) {
275 sprintf(comp->
GUID,
"%s",fmuGUID);
338 comp->
tStop = stopTime;
400 for (k = 0; k < nx; k++) {
415 *enterEventMode = fmi2False;
430 for (k = 0; k < nx; k++) {
447 for (k = 0; k < ni; k++) {
462 for (k = 0; k < nx; k++) {
463 states[k] = comp->
states[k];
476 for (k = 0; k < nx; k++) {
496 return fmi2TypesPlatform;
510 for (k = 0; k < nvr; k++) {
525 for (k = 0; k < nvr; k++) {
544 fmi2Real tstart = currentCommunicationPoint;
546 fmi2Real tend = currentCommunicationPoint + communicationStepSize;
553 fmi2EventInfo eventInfo;
556 fmi2Status fmi2Status;
565 callEventUpdate = fmi2False;
568 while (tcur < tend && counter < 100) {
570 int zero_crossning_event = 0;
578 if (z_cur[k]*z_pre[k] < 0) {
579 zero_crossning_event = 1;
585 if (callEventUpdate || zero_crossning_event ||
586 (eventInfo.nextEventTimeDefined && tcur == eventInfo.nextEventTime)) {
594 if (eventInfo.nextEventTimeDefined) {
595 if (tcur + hdef < eventInfo.nextEventTime) {
598 hcur = eventInfo.nextEventTime - tcur;
605 double t_full = tcur + hcur;
607 hcur = (tend - tcur);
617 states[k] = states[k] + hcur*states_der[k];
625 &callEventUpdate, &terminateSimulation);
627 if(fmi2Status != fmi2OK)
break;
640 case fmi2DoStepStatus:
652 case fmi2LastSuccessfulTime:
680 case fmi2PendingStatus:
681 *value =
"Did fmi2DoStep really return with fmi2Pending? Then its time to implement this function";
fmiBoolean StopTimeDefined
fmiReal output_real[N_OUTPUT_REAL][N_OUTPUT_REAL_MAX_ORDER+1]
fmi2Status fmi_get_continuous_states(fmi2Component c, fmi2Real states[], size_t nx)
fmi2Status fmi_enter_continuous_time_mode(fmi2Component c)
fmi2Status fmi_enter_event_mode(fmi2Component c)
fmi2Status fmi_get_string_status(fmi2Component c, const fmi2StatusKind s, fmi2String *value)
fmiReal event_indicators[N_EVENT_INDICATORS]
fmiString strings[N_STRING]
#define N_OUTPUT_REAL_MAX_ORDER
fmi2Status fmi_set_string(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2String value[])
fmi2Status fmi_set_real_input_derivatives(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Integer order[], const fmi2Real value[])
fmi2Status fmi_get_event_indicators(fmi2Component c, fmi2Real eventIndicators[], size_t ni)
fmi2Status fmi_get_real_output_derivatives(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Integer order[], fmi2Real value[])
fmi2Status fmi_do_step(fmi2Component c, fmi2Real currentCommunicationPoint, fmi2Real communicationStepSize, fmi2Boolean newStep)
void fmi_free_instance(fmi2Component c)
fmi2Status fmi_set_integer(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Integer value[])
fmiReal states_prev[N_STATES]
fmi2Status fmi_get_boolean_status(fmi2Component c, const fmi2StatusKind s, fmi2Boolean *value)
fmi2Status fmi_get_derivatives(fmi2Component c, fmi2Real derivatives[], size_t nx)
static int calc_get_derivatives(component_ptr_t comp)
fmi2Status fmi_terminate(fmi2Component c)
#define VAR_R_BOUNCE_CONF
fmi2Status fmi_set_debug_logging(fmi2Component c, fmi2Boolean loggingOn)
fmi2Status fmi_set_boolean(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Boolean value[])
#define N_INPUT_REAL_MAX_ORDER
fmi2Status fmi_set_time(fmi2Component c, fmi2Real fmitime)
fmi2Status fmi_get_real_status(fmi2Component c, const fmi2StatusKind s, fmi2Real *value)
#define VAR_S_LOGGER_TEST
fmi2Status fmi_get_integer(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2Integer value[])
fmi2Status fmi_setup_experiment(fmi2Component c, fmi2Boolean toleranceDefined, fmi2Real tolerance, fmi2Real startTime, fmi2Boolean stopTimeDefined, fmi2Real stopTime)
static int calc_initialize(component_ptr_t comp)
#define fmi2ValueReference
fmiReal relativeTolerance
static int calc_event_update(component_ptr_t comp)
fmi2Component fmi_instantiate(fmi2String instanceName, fmi2Type fmuType, fmi2String fmuGUID, fmi2String fmuLocation, const fmi2CallbackFunctions *functions, fmi2Boolean visible, fmi2Boolean loggingOn)
fmiReal states_nom[N_STATES]
fmiInteger integers[N_INTEGER]
fmi2Status fmi_get_boolean(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2Boolean value[])
fmi2Status fmi_completed_integrator_step(fmi2Component c, fmi2Boolean noSetFMUStatePriorToCurrentPoint, fmi2Boolean *enterEventMode, fmi2Boolean *terminateSimulation)
fmiBoolean booleans[N_BOOLEAN]
const char * fmi_get_version()
fmi2Status fmi_get_integer_status(fmi2Component c, const fmi2StatusKind s, fmi2Integer *value)
fmi2Status fmi_new_discrete_states(fmi2Component c, fmi2EventInfo *eventInfo)
#define VAR_R_HIGHT_SPEED
fmi2Status fmi_cancel_step(fmi2Component c)
fmiReal states_der[N_STATES]
fmiCallbackFunctions functions
static int calc_get_event_indicators(component_ptr_t comp)
char instanceName[BUFFER]
fmi2Status fmi_get_real(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2Real value[])
fmi2Status fmi_enter_initialization_mode(fmi2Component c)
const char * fmi_get_types_platform()
#define N_EVENT_INDICATORS
fmi2Status fmi_get_string(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2String value[])
fmi2Status fmi_reset(fmi2Component c)
component_t * component_ptr_t
fmiReal input_real[N_INPUT_REAL][N_INPUT_REAL_MAX_ORDER+1]
fmi2Status fmi_exit_initialization_mode(fmi2Component c)
fmi2Status fmi_get_nominals_of_continuousstates(fmi2Component c, fmi2Real x_nominal[], size_t nx)
fmi2Status fmi_get_status(fmi2Component c, const fmi2StatusKind s, fmi2Status *value)
fmi2Status fmi_set_continuous_states(fmi2Component c, const fmi2Real x[], size_t nx)
const char * fmi_get_model_types_platform()
fmiBoolean toleranceControlled
fmi2Status fmi_set_real(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Real value[])