fmiStatus fmiGetDerivatives(fmiComponent c, fmiReal derivatives[], size_t nx) { unsigned int i=0; ModelInstance* comp = (ModelInstance *)c; threadData_t *threadData = comp->threadData; if (invalidState(comp, "fmiGetDerivatives", not_modelError)) return fmiError; if (invalidNumber(comp, "fmiGetDerivatives", "nx", nx, NUMBER_OF_STATES)) return fmiError; if (nullPointer(comp, "fmiGetDerivatives", "derivatives[]", derivatives)) return fmiError; /* try */ MMC_TRY_INTERNAL(simulationJumpBuffer) comp->fmuData->callback->functionODE(comp->fmuData, comp->threadData); #if (NUMBER_OF_STATES>0) for (i=0; i<nx; i++) { fmiValueReference vr = vrStatesDerivatives[i]; derivatives[i] = getReal(comp, vr); // to be implemented by the includer of this file if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiGetDerivatives: #r%d# = %.16g", vr, derivatives[i]); } #endif return fmiOK; /* catch */ MMC_CATCH_INTERNAL(simulationJumpBuffer) comp->functions.logger(c, comp->instanceName, fmiError, "error", "fmiGetDerivatives: terminated by an assertion."); return fmiError; }
fmiStatus fmiGetNominalContinuousStates(fmiComponent c, fmiReal x_nominal[], size_t nx){ int i; ModelInstance* comp = (ModelInstance *)c; if (invalidState(comp, "fmiGetNominalContinuousStates", not_modelError)) return fmiError; if (invalidNumber(comp, "fmiGetNominalContinuousStates", "nx", nx, NUMBER_OF_STATES)) return fmiError; if (nullPointer(comp, "fmiGetNominalContinuousStates", "x_nominal[]", x_nominal)) return fmiError; if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiGetNominalContinuousStates: x_nominal[0..%d] = 1.0", nx-1); for (i=0; i<nx; i++) x_nominal[i] = 1; return fmiOK; }
fmiStatus fmiGetEventIndicators(fmiComponent c, fmiReal eventIndicators[], size_t ni) { #if NUMBER_OF_EVENT_INDICATORS>0 int i; #endif ModelInstance* comp = (ModelInstance *)c; if (invalidState(comp, "fmiGetEventIndicators", not_modelError)) return fmiError; if (invalidNumber(comp, "fmiGetEventIndicators", "ni", ni, NUMBER_OF_EVENT_INDICATORS)) return fmiError; #if NUMBER_OF_EVENT_INDICATORS>0 for (i=0; i<ni; i++) { eventIndicators[i] = getEventIndicator(comp, i); // to be implemented by the includer of this file if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiGetEventIndicators: z%d = %.16g", i, eventIndicators[i]); } #endif return fmiOK; }
fmiStatus fmiGetStateValueReferences(fmiComponent c, fmiValueReference vrx[], size_t nx) { unsigned int i=0; ModelInstance* comp = (ModelInstance *)c; if (invalidState(comp, "fmiGetStateValueReferences", not_modelError)) return fmiError; if (invalidNumber(comp, "fmiGetStateValueReferences", "nx", nx, NUMBER_OF_STATES)) return fmiError; if (nullPointer(comp, "fmiGetStateValueReferences", "vrx[]", vrx)) return fmiError; #if NUMBER_OF_STATES>0 for (i=0; i<nx; i++) { vrx[i] = vrStates[i]; if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiGetStateValueReferences: vrx[%d] = %d", i, vrx[i]); } #endif return fmiOK; }
fmiStatus fmiGetContinuousStates(fmiComponent c, fmiReal states[], size_t nx) { unsigned int i=0; ModelInstance* comp = (ModelInstance *)c; if (invalidState(comp, "fmiGetContinuousStates", not_modelError)) return fmiError; #if NUMBER_OF_STATES>0 if (invalidNumber(comp, "fmiGetContinuousStates", "nx", nx, NUMBER_OF_STATES)) return fmiError; if (nullPointer(comp, "fmiGetContinuousStates", "states[]", states)) return fmiError; for (i=0; i<nx; i++) { fmiValueReference vr = vrStates[i]; states[i] = getReal(comp, vr); // to be implemented by the includer of this file if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiGetContinuousStates: #r%u# = %.16g", vr, states[i]); } #endif return fmiOK; }
fmiStatus fmiSetContinuousStates(fmiComponent c, const fmiReal x[], size_t nx){ ModelInstance* comp = (ModelInstance *)c; #if NUMBER_OF_REALS>0 int i; #endif if (invalidState(comp, "fmiSetContinuousStates", modelInitialized)) return fmiError; if (invalidNumber(comp, "fmiSetContinuousStates", "nx", nx, NUMBER_OF_STATES)) return fmiError; if (nullPointer(comp, "fmiSetContinuousStates", "x[]", x)) return fmiError; #if NUMBER_OF_REALS>0 for (i=0; i<nx; i++) { fmiValueReference vr = vrStates[i]; if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiSetContinuousStates: #r%d#=%.16g", vr, x[i]); assert(vr<NUMBER_OF_REALS); comp->r[vr] = x[i]; } #endif return fmiOK; }
fmiStatus fmiSetContinuousStates(fmiComponent c, const fmiReal x[], size_t nx) { ModelInstance* comp = (ModelInstance *)c; unsigned int i=0; if (invalidState(comp, "fmiSetContinuousStates", modelInitialized)) return fmiError; if (invalidNumber(comp, "fmiSetContinuousStates", "nx", nx, NUMBER_OF_STATES)) return fmiError; #if NUMBER_OF_STATES>0 if (nullPointer(comp, "fmiSetContinuousStates", "x[]", x)) return fmiError; for (i=0; i<nx; i++) { fmiValueReference vr = vrStates[i]; if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiSetContinuousStates: #r%d#=%.16g", vr, x[i]); if (vr<0 || vr>=NUMBER_OF_REALS || setReal(comp, vr, x[i]) != fmiOK) { // to be implemented by the includer of this file return fmiError; } } #endif return fmiOK; }
fmiStatus fmiGetEventIndicators(fmiComponent c, fmiReal eventIndicators[], size_t ni) { unsigned int i=0; ModelInstance* comp = (ModelInstance *)c; threadData_t *threadData = comp->threadData; if (invalidState(comp, "fmiGetEventIndicators", not_modelError)) return fmiError; if (invalidNumber(comp, "fmiGetEventIndicators", "ni", ni, NUMBER_OF_EVENT_INDICATORS)) return fmiError; /* try */ MMC_TRY_INTERNAL(simulationJumpBuffer) #if NUMBER_OF_EVENT_INDICATORS>0 /* eval needed equations*/ comp->fmuData->callback->function_ZeroCrossingsEquations(comp->fmuData, comp->threadData); comp->fmuData->callback->function_ZeroCrossings(comp->fmuData, comp->threadData, comp->fmuData->simulationInfo->zeroCrossings); for (i=0; i<ni; i++) { /* retVal = getEventIndicator(comp, i, eventIndicators[i]); // to be implemented by the includer of this file * getEventIndicator(comp, eventIndicators); // to be implemented by the includer of this file */ eventIndicators[i] = comp->fmuData->simulationInfo->zeroCrossings[i]; if (comp->loggingOn){ comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiGetEventIndicators: z%d = %.16g", i, eventIndicators[i]); } } #endif return fmiOK; /* catch */ MMC_CATCH_INTERNAL(simulationJumpBuffer) comp->functions.logger(c, comp->instanceName, fmiError, "error", "fmiGetEventIndicators: terminated by an assertion."); return fmiError; }