From d00a8f7f541b51b76fea57509281e146eba70907 Mon Sep 17 00:00:00 2001 From: Benjamin Uekermann Date: Fri, 15 Mar 2024 14:40:24 +0100 Subject: [PATCH] Remove FMI1 things from flow around controlled moving cyl (#481) --- .../controller-fmi/fmu/include/FMI.h | 3 - .../controller-fmi/fmu/include/FMI1.h | 123 ---- .../fmu/include/fmi1Functions.h | 116 ---- .../controller-fmi/fmu/src/FMI.c | 1 - .../controller-fmi/fmu/src/FMI1.c | 525 -------------- .../controller-fmi/fmu/src/fmi1Functions.c | 638 ------------------ 6 files changed, 1406 deletions(-) delete mode 100644 flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/FMI1.h delete mode 100644 flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/fmi1Functions.h delete mode 100644 flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/FMI1.c delete mode 100644 flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/fmi1Functions.c diff --git a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/FMI.h b/flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/FMI.h index ef5909fe6..33eed8279 100644 --- a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/FMI.h +++ b/flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/FMI.h @@ -94,8 +94,6 @@ typedef unsigned int FMIValueReference; typedef struct FMIInstance_ FMIInstance; -typedef struct FMI1Functions_ FMI1Functions; - typedef struct FMI2Functions_ FMI2Functions; typedef struct FMI3Functions_ FMI3Functions; @@ -106,7 +104,6 @@ typedef void FMILogMessage(FMIInstance *instance, FMIStatus status, const char * struct FMIInstance_ { - FMI1Functions *fmi1Functions; FMI2Functions *fmi2Functions; FMI3Functions *fmi3Functions; diff --git a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/FMI1.h b/flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/FMI1.h deleted file mode 100644 index a6a14b438..000000000 --- a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/FMI1.h +++ /dev/null @@ -1,123 +0,0 @@ -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -#include "FMI.h" -#include "fmi1Functions.h" - -struct FMI1Functions_ { - - /*************************************************** - Common Functions for FMI 1.0 - ****************************************************/ - - fmi1CallbackFunctions callbacks; - fmi1EventInfo eventInfo; - - fmi1SetRealTYPE * fmi1SetReal; - fmi1SetIntegerTYPE * fmi1SetInteger; - fmi1SetBooleanTYPE * fmi1SetBoolean; - fmi1SetStringTYPE * fmi1SetString; - fmi1GetRealTYPE * fmi1GetReal; - fmi1GetIntegerTYPE * fmi1GetInteger; - fmi1GetBooleanTYPE * fmi1GetBoolean; - fmi1GetStringTYPE * fmi1GetString; - fmi1SetDebugLoggingTYPE *fmi1SetDebugLogging; - - /*************************************************** - FMI 1.0 for Model Exchange Functions - ****************************************************/ - - fmi1GetModelTypesPlatformTYPE * fmi1GetModelTypesPlatform; - fmi1GetVersionTYPE * fmi1GetVersion; - fmi1InstantiateModelTYPE * fmi1InstantiateModel; - fmi1FreeModelInstanceTYPE * fmi1FreeModelInstance; - fmi1SetTimeTYPE * fmi1SetTime; - fmi1SetContinuousStatesTYPE * fmi1SetContinuousStates; - fmi1CompletedIntegratorStepTYPE * fmi1CompletedIntegratorStep; - fmi1InitializeTYPE * fmi1Initialize; - fmi1GetDerivativesTYPE * fmi1GetDerivatives; - fmi1GetEventIndicatorsTYPE * fmi1GetEventIndicators; - fmi1EventUpdateTYPE * fmi1EventUpdate; - fmi1GetContinuousStatesTYPE * fmi1GetContinuousStates; - fmi1GetNominalContinuousStatesTYPE *fmi1GetNominalContinuousStates; - fmi1GetStateValueReferencesTYPE * fmi1GetStateValueReferences; - fmi1TerminateTYPE * fmi1Terminate; - - /*************************************************** - FMI 1.0 for Co-Simulation Functions - ****************************************************/ - - fmi1GetTypesPlatformTYPE * fmi1GetTypesPlatform; - fmi1InstantiateSlaveTYPE * fmi1InstantiateSlave; - fmi1InitializeSlaveTYPE * fmi1InitializeSlave; - fmi1TerminateSlaveTYPE * fmi1TerminateSlave; - fmi1ResetSlaveTYPE * fmi1ResetSlave; - fmi1FreeSlaveInstanceTYPE * fmi1FreeSlaveInstance; - fmi1SetRealInputDerivativesTYPE * fmi1SetRealInputDerivatives; - fmi1GetRealOutputDerivativesTYPE *fmi1GetRealOutputDerivatives; - fmi1CancelStepTYPE * fmi1CancelStep; - fmi1DoStepTYPE * fmi1DoStep; - fmi1GetStatusTYPE * fmi1GetStatus; - fmi1GetRealStatusTYPE * fmi1GetRealStatus; - fmi1GetIntegerStatusTYPE * fmi1GetIntegerStatus; - fmi1GetBooleanStatusTYPE * fmi1GetBooleanStatus; - fmi1GetStringStatusTYPE * fmi1GetStringStatus; -}; - -/*************************************************** - Common Functions for FMI 1.0 -****************************************************/ -FMI_STATIC FMIStatus FMI1SetReal(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1Real value[]); -FMI_STATIC FMIStatus FMI1SetInteger(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1Integer value[]); -FMI_STATIC FMIStatus FMI1SetBoolean(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1Boolean value[]); -FMI_STATIC FMIStatus FMI1SetString(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1String value[]); -FMI_STATIC FMIStatus FMI1GetReal(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, fmi1Real value[]); -FMI_STATIC FMIStatus FMI1GetInteger(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, fmi1Integer value[]); -FMI_STATIC FMIStatus FMI1GetBoolean(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, fmi1Boolean value[]); -FMI_STATIC FMIStatus FMI1GetString(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, fmi1String value[]); -FMI_STATIC FMIStatus FMI1SetDebugLogging(FMIInstance *instance, fmi1Boolean loggingOn); - -/*************************************************** - FMI 1.0 for Model Exchange Functions -****************************************************/ -FMI_STATIC const char *FMI1GetModelTypesPlatform(FMIInstance *instance); -FMI_STATIC const char *FMI1GetVersion(FMIInstance *instance); -FMI_STATIC FMIStatus FMI1InstantiateModel(FMIInstance *instance, fmi1String modelIdentifier, fmi1String GUID, fmi1Boolean loggingOn); -FMI_STATIC void FMI1FreeModelInstance(FMIInstance *instance); -FMI_STATIC FMIStatus FMI1SetTime(FMIInstance *instance, fmi1Real time); -FMI_STATIC FMIStatus FMI1SetContinuousStates(FMIInstance *instance, const fmi1Real x[], size_t nx); -FMI_STATIC FMIStatus FMI1CompletedIntegratorStep(FMIInstance *instance, fmi1Boolean *callEventUpdate); -FMI_STATIC FMIStatus FMI1Initialize(FMIInstance *instance, fmi1Boolean toleranceControlled, fmi1Real relativeTolerance); -FMI_STATIC FMIStatus FMI1GetDerivatives(FMIInstance *instance, fmi1Real derivatives[], size_t nx); -FMI_STATIC FMIStatus FMI1GetEventIndicators(FMIInstance *instance, fmi1Real eventIndicators[], size_t ni); -FMI_STATIC FMIStatus FMI1EventUpdate(FMIInstance *instance, fmi1Boolean intermediateResults, fmi1EventInfo *eventInfo); -FMI_STATIC FMIStatus FMI1GetContinuousStates(FMIInstance *instance, fmi1Real states[], size_t nx); -FMI_STATIC FMIStatus FMI1GetNominalContinuousStates(FMIInstance *instance, fmi1Real x_nominal[], size_t nx); -FMI_STATIC FMIStatus FMI1GetStateValueReferences(FMIInstance *instance, fmi1ValueReference vrx[], size_t nx); -FMI_STATIC FMIStatus FMI1Terminate(FMIInstance *instance); - -/*************************************************** - FMI 1.0 for Co-Simulation Functions -****************************************************/ -FMI_STATIC const char *FMI1GetTypesPlatform(FMIInstance *instance); -FMI_STATIC FMIStatus FMI1InstantiateSlave(FMIInstance *instance, fmi1String modelIdentifier, fmi1String fmuGUID, fmi1String fmuLocation, fmi1String mimeType, fmi1Real timeout, fmi1Boolean visible, fmi1Boolean interactive, fmi1Boolean loggingOn); -FMI_STATIC FMIStatus FMI1InitializeSlave(FMIInstance *instance, fmi1Real tStart, fmi1Boolean StopTimeDefined, fmi1Real tStop); -FMI_STATIC FMIStatus FMI1TerminateSlave(FMIInstance *instance); -FMI_STATIC FMIStatus FMI1ResetSlave(FMIInstance *instance); -FMI_STATIC void FMI1FreeSlaveInstance(FMIInstance *instance); -FMI_STATIC FMIStatus FMI1SetRealInputDerivatives(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1Integer order[], const fmi1Real value[]); -FMI_STATIC FMIStatus FMI1GetRealOutputDerivatives(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1Integer order[], fmi1Real value[]); -FMI_STATIC FMIStatus FMI1CancelStep(FMIInstance *instance); -FMI_STATIC FMIStatus FMI1DoStep(FMIInstance *instance, fmi1Real currentCommunicationPoint, fmi1Real communicationStepSize, fmi1Boolean newStep); -FMI_STATIC FMIStatus FMI1GetStatus(FMIInstance *instance, const fmi1StatusKind s, fmi1Status *value); -FMI_STATIC FMIStatus FMI1GetRealStatus(FMIInstance *instance, const fmi1StatusKind s, fmi1Real *value); -FMI_STATIC FMIStatus FMI1GetIntegerStatus(FMIInstance *instance, const fmi1StatusKind s, fmi1Integer *value); -FMI_STATIC FMIStatus FMI1GetBooleanStatus(FMIInstance *instance, const fmi1StatusKind s, fmi1Boolean *value); -FMI_STATIC FMIStatus FMI1GetStringStatus(FMIInstance *instance, const fmi1StatusKind s, fmi1String *value); - -#ifdef __cplusplus -} /* end of extern "C" { */ -#endif diff --git a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/fmi1Functions.h b/flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/fmi1Functions.h deleted file mode 100644 index 6bcb97d30..000000000 --- a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/include/fmi1Functions.h +++ /dev/null @@ -1,116 +0,0 @@ -#pragma once - -/* ------------------------------------------------------------------------- - * Combined FMI 1.0 Functions for Model Exchange & Co-Simulation - * -------------------------------------------------------------------------*/ - -/* Type definitions */ -typedef void * fmi1Component; -typedef unsigned int fmi1ValueReference; -typedef double fmi1Real; -typedef int fmi1Integer; -typedef char fmi1Boolean; -typedef const char * fmi1String; - -/* Values for fmi1Boolean */ -#define fmi1True 1 -#define fmi1False 0 - -/* Undefined value for fmi1ValueReference (largest unsigned int value) */ -#define fmi1UndefinedValueReference (fmi1ValueReference)(-1) - -/* make sure all compiler use the same alignment policies for structures */ -#if defined _MSC_VER || defined __GNUC__ -#pragma pack(push, 8) -#endif - -typedef enum { - fmi1OK, - fmi1Warning, - fmi1Discard, - fmi1Error, - fmi1Fatal -} fmi1Status; - -typedef enum { - fmi1DoStepStatus, - fmi1PendingStatus, - fmi1LastSuccessfulTime -} fmi1StatusKind; - -typedef void (*fmi1CallbackLogger)(fmi1Component c, fmi1String instanceName, fmi1Status status, fmi1String category, fmi1String message, ...); -typedef void *(*fmi1CallbackAllocateMemory)(size_t nobj, size_t size); -typedef void (*fmi1CallbackFreeMemory)(void *obj); -typedef void (*fmi1StepFinished)(fmi1Component c, fmi1Status status); - -typedef struct { - fmi1CallbackLogger logger; - fmi1CallbackAllocateMemory allocateMemory; - fmi1CallbackFreeMemory freeMemory; - fmi1StepFinished stepFinished; -} fmi1CallbackFunctions; - -typedef struct { - fmi1Boolean iterationConverged; - fmi1Boolean stateValueReferencesChanged; - fmi1Boolean stateValuesChanged; - fmi1Boolean terminateSimulation; - fmi1Boolean upcomingTimeEvent; - fmi1Real nextEventTime; -} fmi1EventInfo; - -/* reset alignment policy to the one set before reading this file */ -#if defined _MSC_VER || defined __GNUC__ -#pragma pack(pop) -#endif - -/*************************************************** - Common Functions for FMI 1.0 -****************************************************/ -typedef fmi1Status fmi1SetRealTYPE(fmi1Component c, const fmi1ValueReference vr[], size_t nvr, const fmi1Real value[]); -typedef fmi1Status fmi1SetIntegerTYPE(fmi1Component c, const fmi1ValueReference vr[], size_t nvr, const fmi1Integer value[]); -typedef fmi1Status fmi1SetBooleanTYPE(fmi1Component c, const fmi1ValueReference vr[], size_t nvr, const fmi1Boolean value[]); -typedef fmi1Status fmi1SetStringTYPE(fmi1Component c, const fmi1ValueReference vr[], size_t nvr, const fmi1String value[]); -typedef fmi1Status fmi1GetRealTYPE(fmi1Component c, const fmi1ValueReference vr[], size_t nvr, fmi1Real value[]); -typedef fmi1Status fmi1GetIntegerTYPE(fmi1Component c, const fmi1ValueReference vr[], size_t nvr, fmi1Integer value[]); -typedef fmi1Status fmi1GetBooleanTYPE(fmi1Component c, const fmi1ValueReference vr[], size_t nvr, fmi1Boolean value[]); -typedef fmi1Status fmi1GetStringTYPE(fmi1Component c, const fmi1ValueReference vr[], size_t nvr, fmi1String value[]); -typedef fmi1Status fmi1SetDebugLoggingTYPE(fmi1Component c, fmi1Boolean loggingOn); - -/*************************************************** - FMI 1.0 for Model Exchange Functions -****************************************************/ -typedef const char * fmi1GetModelTypesPlatformTYPE(); -typedef const char * fmi1GetVersionTYPE(); -typedef fmi1Component fmi1InstantiateModelTYPE(fmi1String instanceName, fmi1String GUID, fmi1CallbackFunctions functions, fmi1Boolean loggingOn); -typedef void fmi1FreeModelInstanceTYPE(fmi1Component c); -typedef fmi1Status fmi1SetTimeTYPE(fmi1Component c, fmi1Real time); -typedef fmi1Status fmi1SetContinuousStatesTYPE(fmi1Component c, const fmi1Real x[], size_t nx); -typedef fmi1Status fmi1CompletedIntegratorStepTYPE(fmi1Component c, fmi1Boolean *callEventUpdate); -typedef fmi1Status fmi1InitializeTYPE(fmi1Component c, fmi1Boolean toleranceControlled, fmi1Real relativeTolerance, fmi1EventInfo *eventInfo); -typedef fmi1Status fmi1GetDerivativesTYPE(fmi1Component c, fmi1Real derivatives[], size_t nx); -typedef fmi1Status fmi1GetEventIndicatorsTYPE(fmi1Component c, fmi1Real eventIndicators[], size_t ni); -typedef fmi1Status fmi1EventUpdateTYPE(fmi1Component c, fmi1Boolean intermediateResults, fmi1EventInfo *eventInfo); -typedef fmi1Status fmi1GetContinuousStatesTYPE(fmi1Component c, fmi1Real states[], size_t nx); -typedef fmi1Status fmi1GetNominalContinuousStatesTYPE(fmi1Component c, fmi1Real x_nominal[], size_t nx); -typedef fmi1Status fmi1GetStateValueReferencesTYPE(fmi1Component c, fmi1ValueReference vrx[], size_t nx); -typedef fmi1Status fmi1TerminateTYPE(fmi1Component c); - -/*************************************************** - FMI 1.0 for Co-Simulation Functions -****************************************************/ -typedef const char * fmi1GetTypesPlatformTYPE(); -typedef fmi1Component fmi1InstantiateSlaveTYPE(fmi1String instanceName, fmi1String fmuGUID, fmi1String fmuLocation, fmi1String mimeType, fmi1Real timeout, fmi1Boolean visible, fmi1Boolean interactive, fmi1CallbackFunctions functions, fmi1Boolean loggingOn); -typedef fmi1Status fmi1InitializeSlaveTYPE(fmi1Component c, fmi1Real tStart, fmi1Boolean StopTimeDefined, fmi1Real tStop); -typedef fmi1Status fmi1TerminateSlaveTYPE(fmi1Component c); -typedef fmi1Status fmi1ResetSlaveTYPE(fmi1Component c); -typedef void fmi1FreeSlaveInstanceTYPE(fmi1Component c); -typedef fmi1Status fmi1SetRealInputDerivativesTYPE(fmi1Component c, const fmi1ValueReference vr[], size_t nvr, const fmi1Integer order[], const fmi1Real value[]); -typedef fmi1Status fmi1GetRealOutputDerivativesTYPE(fmi1Component c, const fmi1ValueReference vr[], size_t nvr, const fmi1Integer order[], fmi1Real value[]); -typedef fmi1Status fmi1CancelStepTYPE(fmi1Component c); -typedef fmi1Status fmi1DoStepTYPE(fmi1Component c, fmi1Real currentCommunicationPoint, fmi1Real communicationStepSize, fmi1Boolean newStep); -typedef fmi1Status fmi1GetStatusTYPE(fmi1Component c, const fmi1StatusKind s, fmi1Status *value); -typedef fmi1Status fmi1GetRealStatusTYPE(fmi1Component c, const fmi1StatusKind s, fmi1Real *value); -typedef fmi1Status fmi1GetIntegerStatusTYPE(fmi1Component c, const fmi1StatusKind s, fmi1Integer *value); -typedef fmi1Status fmi1GetBooleanStatusTYPE(fmi1Component c, const fmi1StatusKind s, fmi1Boolean *value); -typedef fmi1Status fmi1GetStringStatusTYPE(fmi1Component c, const fmi1StatusKind s, fmi1String *value); diff --git a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/FMI.c b/flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/FMI.c index e4278db57..579946515 100644 --- a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/FMI.c +++ b/flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/FMI.c @@ -97,7 +97,6 @@ void FMIFreeInstance(FMIInstance *instance) free(instance->buf2); free((void *) instance->name); - free(instance->fmi1Functions); free(instance->fmi2Functions); free(instance->fmi3Functions); diff --git a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/FMI1.c b/flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/FMI1.c deleted file mode 100644 index 5d9361ef0..000000000 --- a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/FMI1.c +++ /dev/null @@ -1,525 +0,0 @@ -#include -#include -#include -#include - -#ifndef _WIN32 -#include -#endif - -#include "FMI1.h" - -// keep track of the current instance for the log callback -static FMIInstance *currentInstance = NULL; - -static void cb_logMessage1(fmi1Component c, fmi1String instanceName, fmi1Status status, fmi1String category, fmi1String message, ...) -{ - - if (!currentInstance) - return; - - char buf[FMI_MAX_MESSAGE_LENGTH]; - - va_list args; - - va_start(args, message); - vsnprintf(buf, FMI_MAX_MESSAGE_LENGTH, message, args); - va_end(args); - - if (!currentInstance->logMessage) - return; - - currentInstance->logMessage(currentInstance, (FMIStatus) status, category, buf); -} - -#define MAX_SYMBOL_LENGTH 256 - -static void *loadSymbol(FMIInstance *instance, const char *prefix, const char *name) -{ - char fname[MAX_SYMBOL_LENGTH]; - strcpy(fname, prefix); - strcat(fname, name); -#ifdef _WIN32 - void *addr = GetProcAddress(instance->libraryHandle, fname); -#else - void *addr = dlsym(instance->libraryHandle, fname); -#endif - if (!addr) { - instance->logFunctionCall(instance, FMIError, "Failed to load function \"%s\".", fname); - } - return addr; -} - -#define LOAD_SYMBOL(f) \ - do { \ - instance->fmi1Functions->fmi1##f = (fmi1##f##TYPE *) loadSymbol(instance, modelIdentifier, "_fmi" #f); \ - if (!instance->fmi1Functions->fmi1##f) { \ - status = FMIError; \ - goto fail; \ - } \ - } while (0) - -#define CALL(f) \ - do { \ - currentInstance = instance; \ - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1##f(instance->component); \ - if (instance->logFunctionCall) { \ - instance->logFunctionCall(instance, status, "fmi" #f "()"); \ - } \ - return status; \ - } while (0) - -#define CALL_ARGS(f, m, ...) \ - do { \ - currentInstance = instance; \ - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1##f(instance->component, __VA_ARGS__); \ - if (instance->logFunctionCall) { \ - instance->logFunctionCall(instance, status, "fmi" #f "(" m ")", __VA_ARGS__); \ - } \ - return status; \ - } while (0) - -#define CALL_ARRAY(s, t) \ - do { \ - currentInstance = instance; \ - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1##s##t(instance->component, vr, nvr, value); \ - if (instance->logFunctionCall) { \ - FMIValueReferencesToString(instance, vr, nvr); \ - FMIValuesToString(instance, nvr, NULL, value, FMI##t##Type); \ - instance->logFunctionCall(instance, status, "fmi" #s #t "(vr=%s, nvr=%zu, value=%s)", instance->buf1, nvr, instance->buf2); \ - } \ - return status; \ - } while (0) - -/*************************************************** - Common Functions for FMI 1.0 -****************************************************/ - -FMIStatus FMI1SetReal(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1Real value[]) -{ - CALL_ARRAY(Set, Real); -} - -FMIStatus FMI1SetInteger(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1Integer value[]) -{ - CALL_ARRAY(Set, Integer); -} - -FMIStatus FMI1SetBoolean(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1Boolean value[]) -{ - CALL_ARRAY(Set, Boolean); -} - -FMIStatus FMI1SetString(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1String value[]) -{ - CALL_ARRAY(Set, String); -} - -FMIStatus FMI1GetReal(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, fmi1Real value[]) -{ - CALL_ARRAY(Get, Real); -} - -FMIStatus FMI1GetInteger(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, fmi1Integer value[]) -{ - CALL_ARRAY(Get, Integer); -} - -FMIStatus FMI1GetBoolean(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, fmi1Boolean value[]) -{ - CALL_ARRAY(Get, Boolean); -} - -FMIStatus FMI1GetString(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, fmi1String value[]) -{ - CALL_ARRAY(Get, String); -} - -FMIStatus FMI1SetDebugLogging(FMIInstance *instance, fmi1Boolean loggingOn) -{ - CALL_ARGS(SetDebugLogging, "loggingOn=%d", loggingOn); -} - -/*************************************************** - FMI 1.0 for Model Exchange Functions -****************************************************/ - -const char *FMI1GetModelTypesPlatform(FMIInstance *instance) -{ - currentInstance = instance; - if (instance->logFunctionCall) { - instance->logFunctionCall(instance, FMIOK, "fmiGetModelTypesPlatform()"); - } - return instance->fmi1Functions->fmi1GetModelTypesPlatform(); -} - -const char *FMI1GetVersion(FMIInstance *instance) -{ - currentInstance = instance; - if (instance->logFunctionCall) { - instance->logFunctionCall(instance, FMIOK, "fmiGetVersion()"); - } - return instance->fmi1Functions->fmi1GetVersion(); -} - -FMIStatus FMI1InstantiateModel(FMIInstance *instance, fmi1String modelIdentifier, fmi1String GUID, fmi1Boolean loggingOn) -{ - - currentInstance = instance; - - instance->fmiVersion = FMIVersion1; - - instance->interfaceType = FMIModelExchange; - - FMIStatus status = FMIOK; - - instance->fmi1Functions = calloc(1, sizeof(FMI1Functions)); - - if (!instance->fmi1Functions) { - return FMIError; - } - - /*************************************************** - Common Functions for FMI 1.0 - ****************************************************/ - LOAD_SYMBOL(SetReal); - LOAD_SYMBOL(SetInteger); - LOAD_SYMBOL(SetBoolean); - LOAD_SYMBOL(SetString); - LOAD_SYMBOL(GetReal); - LOAD_SYMBOL(GetInteger); - LOAD_SYMBOL(GetBoolean); - LOAD_SYMBOL(GetString); - LOAD_SYMBOL(SetDebugLogging); - - /*************************************************** - FMI 1.0 for Model Exchange Functions - ****************************************************/ - LOAD_SYMBOL(GetModelTypesPlatform); - LOAD_SYMBOL(GetVersion); - LOAD_SYMBOL(InstantiateModel); - LOAD_SYMBOL(FreeModelInstance); - LOAD_SYMBOL(SetTime); - LOAD_SYMBOL(SetContinuousStates); - LOAD_SYMBOL(CompletedIntegratorStep); - LOAD_SYMBOL(Initialize); - LOAD_SYMBOL(GetDerivatives); - LOAD_SYMBOL(GetEventIndicators); - LOAD_SYMBOL(EventUpdate); - LOAD_SYMBOL(GetContinuousStates); - LOAD_SYMBOL(GetNominalContinuousStates); - LOAD_SYMBOL(GetStateValueReferences); - LOAD_SYMBOL(Terminate); - - instance->fmi1Functions->callbacks.logger = cb_logMessage1; - instance->fmi1Functions->callbacks.allocateMemory = calloc; - instance->fmi1Functions->callbacks.freeMemory = free; - instance->fmi1Functions->callbacks.stepFinished = NULL; - - instance->component = instance->fmi1Functions->fmi1InstantiateModel(instance->name, GUID, instance->fmi1Functions->callbacks, loggingOn); - - status = instance->component ? FMIOK : FMIError; - - if (instance->logFunctionCall) { - instance->logFunctionCall(instance, status, - "fmi1InstantiateModel(instanceName=\"%s\", GUID=\"%s\", functions=0x%p, loggingOn=%d)", - instance->name, GUID, &instance->fmi1Functions->callbacks, loggingOn); - } - -fail: - return status; -} - -void FMI1FreeModelInstance(FMIInstance *instance) -{ - - if (!instance) { - return; - } - - currentInstance = instance; - - instance->fmi1Functions->fmi1FreeModelInstance(instance->component); - - if (instance->logFunctionCall) { - instance->logFunctionCall(instance, FMIOK, "fmi1FreeModelInstance()"); - } -} - -FMIStatus FMI1SetTime(FMIInstance *instance, fmi1Real time) -{ - CALL_ARGS(SetTime, "time=%.16g", time); -} - -FMIStatus FMI1SetContinuousStates(FMIInstance *instance, const fmi1Real x[], size_t nx) -{ - currentInstance = instance; - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1SetContinuousStates(instance->component, x, nx); - if (instance->logFunctionCall) { - FMIValuesToString(instance, nx, NULL, x, FMIRealType); - instance->logFunctionCall(instance, status, "fmi1SetContinuousStates(x=%s, nx=%zu)", instance->buf2, nx); - } - return status; -} - -FMIStatus FMI1CompletedIntegratorStep(FMIInstance *instance, fmi1Boolean *callEventUpdate) -{ - currentInstance = instance; - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1CompletedIntegratorStep(instance->component, callEventUpdate); - if (instance->logFunctionCall) { - instance->logFunctionCall(instance, status, "fmi1CompletedIntegratorStep(callEventUpdate=%d)", *callEventUpdate); - } - return status; -} - -FMIStatus FMI1Initialize(FMIInstance *instance, fmi1Boolean toleranceControlled, fmi1Real relativeTolerance) -{ - fmi1EventInfo *e = &instance->fmi1Functions->eventInfo; - currentInstance = instance; - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1Initialize(instance->component, toleranceControlled, relativeTolerance, e); - if (instance->logFunctionCall) { - instance->logFunctionCall(instance, status, - "fmi1Initialize(toleranceControlled=%d, relativeTolerance=%.16g, eventInfo={iterationConverged=%d, stateValueReferencesChanged=%d, stateValuesChanged=%d, terminateSimulation=%d, upcomingTimeEvent=%d, nextEventTime=%.16g})", - toleranceControlled, relativeTolerance, e->iterationConverged, e->stateValueReferencesChanged, e->stateValuesChanged, e->terminateSimulation, e->upcomingTimeEvent, e->nextEventTime); - } - return status; -} - -FMIStatus FMI1GetDerivatives(FMIInstance *instance, fmi1Real derivatives[], size_t nx) -{ - currentInstance = instance; - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1GetDerivatives(instance->component, derivatives, nx); - if (instance->logFunctionCall) { - FMIValuesToString(instance, nx, NULL, derivatives, FMIRealType); - instance->logFunctionCall(instance, status, "fmi1GetDerivatives(derivatives=%s, nx=%zu)", instance->buf2, nx); - } - return status; -} - -FMIStatus FMI1GetEventIndicators(FMIInstance *instance, fmi1Real eventIndicators[], size_t ni) -{ - currentInstance = instance; - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1GetEventIndicators(instance->component, eventIndicators, ni); - if (instance->logFunctionCall) { - FMIValuesToString(instance, ni, NULL, eventIndicators, FMIRealType); - instance->logFunctionCall(instance, status, "fmi1GetEventIndicators(eventIndicators=%s, ni=%zu)", instance->buf2, ni); - } - return status; -} - -FMIStatus FMI1EventUpdate(FMIInstance *instance, fmi1Boolean intermediateResults, fmi1EventInfo *eventInfo) -{ - currentInstance = instance; - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1EventUpdate(instance->component, intermediateResults, eventInfo); - if (instance->logFunctionCall) { - instance->logFunctionCall(instance, status, - "fmi1Initialize(intermediateResults=%d, eventInfo={iterationConverged=%d, stateValueReferencesChanged=%d, stateValuesChanged=%d, terminateSimulation=%d, upcomingTimeEvent=%d, nextEventTime=%.16g})", - intermediateResults, eventInfo->iterationConverged, eventInfo->stateValueReferencesChanged, eventInfo->stateValuesChanged, eventInfo->terminateSimulation, eventInfo->upcomingTimeEvent, eventInfo->nextEventTime); - } - return status; -} - -FMIStatus FMI1GetContinuousStates(FMIInstance *instance, fmi1Real states[], size_t nx) -{ - currentInstance = instance; - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1GetContinuousStates(instance->component, states, nx); - if (instance->logFunctionCall) { - FMIValuesToString(instance, nx, NULL, states, FMIRealType); - instance->logFunctionCall(instance, status, "fmi2GetContinuousStates(x=%s, nx=%zu)", instance->buf2, nx); - } - return status; -} - -FMIStatus FMI1GetNominalContinuousStates(FMIInstance *instance, fmi1Real x_nominal[], size_t nx) -{ - currentInstance = instance; - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1GetNominalContinuousStates(instance->component, x_nominal, nx); - if (instance->logFunctionCall) { - FMIValuesToString(instance, nx, NULL, x_nominal, FMIRealType); - instance->logFunctionCall(instance, status, "fmi1GetNominalContinuousStates(x_nominal=%s, nx=%zu)", instance->buf2, nx); - } - return status; -} - -FMIStatus FMI1GetStateValueReferences(FMIInstance *instance, fmi1ValueReference vrx[], size_t nx) -{ - currentInstance = instance; - FMIStatus status = (FMIStatus) instance->fmi1Functions->fmi1GetStateValueReferences(instance->component, vrx, nx); - if (instance->logFunctionCall) { - // TODO - } - return status; -} - -FMIStatus FMI1Terminate(FMIInstance *instance) -{ - CALL(Terminate); -} - -/*************************************************** - FMI 1.0 for Co-Simulation Functions -****************************************************/ - -const char *FMI1GetTypesPlatform(FMIInstance *instance) -{ - currentInstance = instance; - if (instance->logFunctionCall) { - instance->logFunctionCall(instance, FMIOK, "fmi1GetTypesPlatform()"); - } - return instance->fmi1Functions->fmi1GetTypesPlatform(); -} - -FMIStatus FMI1InstantiateSlave(FMIInstance *instance, fmi1String modelIdentifier, fmi1String fmuGUID, fmi1String fmuLocation, fmi1String mimeType, fmi1Real timeout, fmi1Boolean visible, fmi1Boolean interactive, fmi1Boolean loggingOn) -{ - - currentInstance = instance; - - instance->fmiVersion = FMIVersion1; - - instance->interfaceType = FMICoSimulation; - - FMIStatus status = FMIOK; - - instance->fmi1Functions = calloc(1, sizeof(FMI1Functions)); - - if (!instance->fmi1Functions) { - return FMIError; - } - - /*************************************************** - Common Functions for FMI 1.0 - ****************************************************/ - LOAD_SYMBOL(SetReal); - LOAD_SYMBOL(SetInteger); - LOAD_SYMBOL(SetBoolean); - LOAD_SYMBOL(SetString); - LOAD_SYMBOL(GetReal); - LOAD_SYMBOL(GetInteger); - LOAD_SYMBOL(GetBoolean); - LOAD_SYMBOL(GetString); - LOAD_SYMBOL(SetDebugLogging); - - /*************************************************** - FMI 1.0 for Co-Simulation Functions - ****************************************************/ - LOAD_SYMBOL(GetTypesPlatform); - LOAD_SYMBOL(InstantiateSlave); - LOAD_SYMBOL(InitializeSlave); - LOAD_SYMBOL(TerminateSlave); - LOAD_SYMBOL(ResetSlave); - LOAD_SYMBOL(FreeSlaveInstance); - LOAD_SYMBOL(SetRealInputDerivatives); - LOAD_SYMBOL(GetRealOutputDerivatives); - LOAD_SYMBOL(CancelStep); - LOAD_SYMBOL(DoStep); - LOAD_SYMBOL(GetStatus); - LOAD_SYMBOL(GetRealStatus); - LOAD_SYMBOL(GetIntegerStatus); - LOAD_SYMBOL(GetBooleanStatus); - LOAD_SYMBOL(GetStringStatus); - - instance->fmi1Functions->callbacks.logger = cb_logMessage1; - instance->fmi1Functions->callbacks.allocateMemory = calloc; - instance->fmi1Functions->callbacks.freeMemory = free; - instance->fmi1Functions->callbacks.stepFinished = NULL; - - instance->component = instance->fmi1Functions->fmi1InstantiateSlave(instance->name, fmuGUID, fmuLocation, mimeType, timeout, visible, interactive, instance->fmi1Functions->callbacks, loggingOn); - - status = instance->component ? FMIOK : FMIError; - - if (instance->logFunctionCall) { - instance->logFunctionCall(instance, status, - "fmi1InstantiateSlave(instanceName=\"%s\", fmuGUID=\"%s\", fmuLocation=\"%s\", mimeType=\"%s\", timeout=%.16g, visible=%d, interactive=%d, functions=0x%p, loggingOn=%d)", - instance->name, fmuGUID, fmuLocation, mimeType, timeout, visible, interactive, &instance->fmi1Functions->callbacks, loggingOn); - } - -fail: - return status; -} - -FMIStatus FMI1InitializeSlave(FMIInstance *instance, fmi1Real tStart, fmi1Boolean stopTimeDefined, fmi1Real tStop) -{ - CALL_ARGS(InitializeSlave, "tStart=%.16g, stopTimeDefined=%d, tStop=%.16g", tStart, stopTimeDefined, tStop); -} - -FMIStatus FMI1TerminateSlave(FMIInstance *instance) -{ - CALL(TerminateSlave); -} - -FMIStatus FMI1ResetSlave(FMIInstance *instance) -{ - CALL(ResetSlave); -} - -void FMI1FreeSlaveInstance(FMIInstance *instance) -{ - - if (!instance) { - return; - } - - currentInstance = instance; - - instance->fmi1Functions->fmi1FreeSlaveInstance(instance->component); - - if (instance->logFunctionCall) { - instance->logFunctionCall(instance, FMIOK, "fmi1FreeSlaveInstance()"); - } -} - -FMIStatus FMI1SetRealInputDerivatives(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1Integer order[], const fmi1Real value[]) -{ - CALL_ARGS(SetRealInputDerivatives, "vr=0x%p, nvr=%zu, order=0x%p, value=0x%p", vr, nvr, order, value); -} - -FMIStatus FMI1GetRealOutputDerivatives(FMIInstance *instance, const fmi1ValueReference vr[], size_t nvr, const fmi1Integer order[], fmi1Real value[]) -{ - CALL_ARGS(GetRealOutputDerivatives, "vr=0x%p, nvr=%zu, order=0x%p, value=0x%p", vr, nvr, order, value); -} - -FMIStatus FMI1CancelStep(FMIInstance *instance) -{ - CALL(CancelStep); -} - -FMIStatus FMI1DoStep(FMIInstance *instance, fmi1Real currentCommunicationPoint, fmi1Real communicationStepSize, fmi1Boolean newStep) -{ - - currentInstance = instance; - - instance->time = currentCommunicationPoint + communicationStepSize; - - CALL_ARGS(DoStep, "currentCommunicationPoint=%.16g, communicationStepSize=%.16g, newStep=%d", - currentCommunicationPoint, communicationStepSize, newStep); -} - -FMIStatus FMI1GetStatus(FMIInstance *instance, const fmi1StatusKind s, fmi1Status *value) -{ - CALL_ARGS(GetStatus, "s=%d, value=0x%p", s, value); -} - -FMIStatus FMI1GetRealStatus(FMIInstance *instance, const fmi1StatusKind s, fmi1Real *value) -{ - CALL_ARGS(GetRealStatus, "s=%d, value=0x%p", s, value); -} - -FMIStatus FMI1GetIntegerStatus(FMIInstance *instance, const fmi1StatusKind s, fmi1Integer *value) -{ - CALL_ARGS(GetIntegerStatus, "s=%d, value=0x%p", s, value); -} - -FMIStatus FMI1GetBooleanStatus(FMIInstance *instance, const fmi1StatusKind s, fmi1Boolean *value) -{ - CALL_ARGS(GetBooleanStatus, "s=%d, value=0x%p", s, value); -} - -FMIStatus FMI1GetStringStatus(FMIInstance *instance, const fmi1StatusKind s, fmi1String *value) -{ - CALL_ARGS(GetStringStatus, "s=%d, value=0x%p", s, value); -} - -#undef LOAD_SYMBOL -#undef CALL -#undef CALL_ARGS -#undef CALL_ARRAY diff --git a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/fmi1Functions.c b/flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/fmi1Functions.c deleted file mode 100644 index a1d8b3314..000000000 --- a/flow-around-controlled-moving-cylinder/controller-fmi/fmu/src/fmi1Functions.c +++ /dev/null @@ -1,638 +0,0 @@ -#if FMI_VERSION != 1 -#error FMI_VERSION must be 1 -#endif - -#include -#include -#include -#include - -#include "config.h" -#include "cosimulation.h" -#include "model.h" - -#ifdef FMI_COSIMULATION -#include "fmiFunctions.h" -#else -#include "fmiModelFunctions.h" -#endif - -#define ASSERT_NOT_NULL(p) \ - do { \ - if (!p) { \ - logError(S, "Argument %s must not be NULL.", xstr(p)); \ - S->state = modelError; \ - return (fmiStatus) Error; \ - } \ - } while (0) - -#define GET_VARIABLES(T) \ - do { \ - ASSERT_NOT_NULL(vr); \ - ASSERT_NOT_NULL(value); \ - size_t index = 0; \ - Status status = OK; \ - if (nvr == 0) \ - return (fmiStatus) status; \ - if (S->isDirtyValues) { \ - Status s = calculateValues(S); \ - status = max(status, s); \ - if (status > Warning) \ - return (fmiStatus) status; \ - S->isDirtyValues = false; \ - } \ - for (size_t i = 0; i < nvr; i++) { \ - Status s = get##T(S, vr[i], value, &index); \ - status = max(status, s); \ - if (status > Warning) \ - return (fmiStatus) status; \ - } \ - return (fmiStatus) status; \ - } while (0) - -#define SET_VARIABLES(T) \ - do { \ - ASSERT_NOT_NULL(vr); \ - ASSERT_NOT_NULL(value); \ - size_t index = 0; \ - Status status = OK; \ - for (size_t i = 0; i < nvr; i++) { \ - Status s = set##T(S, vr[i], value, &index); \ - status = max(status, s); \ - if (status > Warning) \ - return (fmiStatus) status; \ - } \ - if (nvr > 0) \ - S->isDirtyValues = true; \ - return (fmiStatus) status; \ - } while (0) - -#define GET_BOOLEAN_VARIABLES \ - do { \ - Status status = OK; \ - for (size_t i = 0; i < nvr; i++) { \ - bool v = false; \ - size_t index = 0; \ - Status s = getBoolean(S, vr[i], &v, &index); \ - value[i] = v; \ - status = max(status, s); \ - if (status > Warning) \ - return (fmiStatus) status; \ - } \ - return (fmiStatus) status; \ - } while (0) - -#define SET_BOOLEAN_VARIABLES \ - do { \ - Status status = OK; \ - for (size_t i = 0; i < nvr; i++) { \ - bool v = value[i]; \ - size_t index = 0; \ - Status s = setBoolean(S, vr[i], &v, &index); \ - status = max(status, s); \ - if (status > Warning) \ - return (fmiStatus) status; \ - } \ - return (fmiStatus) status; \ - } while (0) - -#ifndef max -#define max(a, b) ((a) > (b) ? (a) : (b)) -#endif - -#ifndef DT_EVENT_DETECT -#define DT_EVENT_DETECT 1e-10 -#endif - -#define ASSERT_STATE(F, A) \ - if (!c) \ - return fmiError; \ - ModelInstance *S = (ModelInstance *) c; \ - if (invalidState(S, F, not_modelError)) \ - return fmiError; - -// --------------------------------------------------------------------------- -// Private helpers used below to implement functions -// --------------------------------------------------------------------------- - -// fname is fmiInitialize or fmiInitializeSlave -static fmiStatus init(fmiComponent c) -{ - ModelInstance *instance = (ModelInstance *) c; - instance->state = Initialized; - calculateValues(instance); - return fmiOK; -} - -// fname is fmiTerminate or fmiTerminateSlave -static fmiStatus terminate(char *fname, fmiComponent c) -{ - ModelInstance *instance = (ModelInstance *) c; - if (invalidState(instance, fname, Initialized)) - return fmiError; - instance->state = Terminated; - return fmiOK; -} - -// --------------------------------------------------------------------------- -// FMI functions: class methods not depending of a specific model instance -// --------------------------------------------------------------------------- - -const char *fmiGetVersion() -{ - return fmiVersion; -} - -// --------------------------------------------------------------------------- -// FMI functions: for FMI Model Exchange 1.0 and for FMI Co-Simulation 1.0 -// logging control, setters and getters for Real, Integer, Boolean, String -// --------------------------------------------------------------------------- - -fmiStatus fmiSetDebugLogging(fmiComponent c, fmiBoolean loggingOn) -{ - ASSERT_STATE("fmiSetDebugLogging", not_modelError); - return (fmiStatus) setDebugLogging(S, loggingOn, 0, NULL); -} - -fmiStatus fmiSetReal(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]) -{ - ASSERT_STATE("fmiSetReal", Instantiated | Initialized); - SET_VARIABLES(Float64); -} - -fmiStatus fmiSetInteger(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]) -{ - ASSERT_STATE("fmiSetInteger", Instantiated | Initialized); - SET_VARIABLES(Int32); -} - -fmiStatus fmiSetBoolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]) -{ - ASSERT_STATE("fmiSetBoolean", Instantiated | Initialized); - SET_BOOLEAN_VARIABLES; -} - -fmiStatus fmiSetString(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]) -{ - ASSERT_STATE("fmiSetString", not_modelError); - SET_VARIABLES(String); -} - -fmiStatus fmiGetReal(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]) -{ - ASSERT_STATE("fmiGetReal", not_modelError); - GET_VARIABLES(Float64); -} - -fmiStatus fmiGetInteger(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]) -{ - ASSERT_STATE("fmiGetInteger", not_modelError); - GET_VARIABLES(Int32); -} - -fmiStatus fmiGetBoolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]) -{ - ASSERT_STATE("fmiGetBoolean", not_modelError); - GET_BOOLEAN_VARIABLES; -} - -fmiStatus fmiGetString(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]) -{ - ASSERT_STATE("fmiGetString", not_modelError); - GET_VARIABLES(String); -} - -#ifdef FMI_COSIMULATION -// --------------------------------------------------------------------------- -// FMI functions: only for FMI Co-Simulation 1.0 -// --------------------------------------------------------------------------- - -const char *fmiGetTypesPlatform() -{ - return fmiPlatform; -} - -fmiComponent fmiInstantiateSlave(fmiString instanceName, fmiString GUID, - fmiString fmuLocation, fmiString mimeType, fmiReal timeout, fmiBoolean visible, - fmiBoolean interactive, fmiCallbackFunctions functions, fmiBoolean loggingOn) -{ - - UNUSED(mimeType); - UNUSED(timeout); - UNUSED(visible); - UNUSED(interactive); - - if (!functions.logger) { - return NULL; - } - - // ignoring arguments: mimeType, timeout, visible, interactive - return createModelInstance( - (loggerType) functions.logger, - NULL, - NULL, - instanceName, - GUID, - fmuLocation, - loggingOn, - CoSimulation); -} - -fmiStatus fmiInitializeSlave(fmiComponent c, fmiReal tStart, fmiBoolean StopTimeDefined, fmiReal tStop) -{ - - UNUSED(tStart); - UNUSED(StopTimeDefined); - UNUSED(tStop); - - return init(c); -} - -fmiStatus fmiTerminateSlave(fmiComponent c) -{ - return terminate("fmiTerminateSlave", c); -} - -fmiStatus fmiResetSlave(fmiComponent c) -{ - ModelInstance *instance = (ModelInstance *) c; - if (invalidState(instance, "fmiResetSlave", Initialized)) - return fmiError; - reset(instance); - return fmiOK; -} - -void fmiFreeSlaveInstance(fmiComponent c) -{ - ModelInstance *instance = (ModelInstance *) c; - freeModelInstance(instance); -} - -fmiStatus fmiSetRealInputDerivatives(fmiComponent c, const fmiValueReference vr[], size_t nvr, - const fmiInteger order[], const fmiReal value[]) -{ - - UNUSED(vr); - UNUSED(nvr); - UNUSED(order); - UNUSED(value); - - ModelInstance *instance = (ModelInstance *) c; - - if (invalidState(instance, "fmiSetRealInputDerivatives", Initialized)) - return fmiError; - - logError(instance, "fmiSetRealInputDerivatives: This model cannot interpolate inputs: canInterpolateInputs=\"fmiFalse\""); - - return fmiError; -} - -fmiStatus fmiGetRealOutputDerivatives(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger order[], fmiReal value[]) -{ - - UNUSED(vr); - UNUSED(nvr); - UNUSED(order); - UNUSED(value); - - ModelInstance *instance = (ModelInstance *) c; - - if (invalidState(instance, "fmiGetRealOutputDerivatives", Initialized)) - return fmiError; - - logError(instance, "fmiGetRealOutputDerivatives: This model cannot compute derivatives of outputs: MaxOutputDerivativeOrder=\"0\""); - - return fmiError; -} - -fmiStatus fmiCancelStep(fmiComponent c) -{ - - ModelInstance *instance = (ModelInstance *) c; - - if (invalidState(instance, "fmiCancelStep", Initialized)) - return fmiError; - - logError(instance, "fmiCancelStep: Can be called when fmiDoStep returned fmiPending." - " This is not the case."); - - return fmiError; -} - -fmiStatus fmiDoStep(fmiComponent c, fmiReal currentCommunicationPoint, fmiReal communicationStepSize, fmiBoolean newStep) -{ - - UNUSED(newStep); - - ModelInstance *instance = (ModelInstance *) c; - - const fmiReal nextCommunicationPoint = currentCommunicationPoint + communicationStepSize + EPSILON; - - instance->solverStepSize = communicationStepSize; - - fmiBoolean nextCommunicationPointReached; - - while (true) { - - nextCommunicationPointReached = instance->time + instance->solverStepSize > nextCommunicationPoint; - - if (nextCommunicationPointReached) { - break; // next communcation point reached - } - - bool stateEvent, timeEvent; - - doAdaptiveStep(instance, &stateEvent, &timeEvent); -#ifdef EVENT_UPDATE - if (stateEvent || timeEvent) { - eventUpdate(instance); - } -#endif - } - - return fmiOK; -} - -fmiStatus fmiGetStatus(fmiComponent c, const fmiStatusKind s, fmiStatus *value) -{ - - UNUSED(s); - UNUSED(value); - - logError((ModelInstance *) c, "Not implemented."); - - return fmiError; -} - -fmiStatus fmiGetRealStatus(fmiComponent c, const fmiStatusKind s, fmiReal *value) -{ - - UNUSED(c); - UNUSED(s); - UNUSED(value); - - logError((ModelInstance *) c, "Not implemented."); - - return fmiError; -} - -fmiStatus fmiGetIntegerStatus(fmiComponent c, const fmiStatusKind s, fmiInteger *value) -{ - - UNUSED(c); - UNUSED(s); - UNUSED(value); - - logError((ModelInstance *) c, "Not implemented."); - - return fmiError; -} - -fmiStatus fmiGetBooleanStatus(fmiComponent c, const fmiStatusKind s, fmiBoolean *value) -{ - - UNUSED(c); - UNUSED(s); - UNUSED(value); - - logError((ModelInstance *) c, "Not implemented."); - - return fmiError; -} - -fmiStatus fmiGetStringStatus(fmiComponent c, const fmiStatusKind s, fmiString *value) -{ - - UNUSED(c); - UNUSED(s); - UNUSED(value); - - logError((ModelInstance *) c, "Not implemented."); - - return fmiError; -} - -#else -// --------------------------------------------------------------------------- -// FMI functions: only for Model Exchange 1.0 -// --------------------------------------------------------------------------- - -const char *fmiGetModelTypesPlatform() -{ - return fmiModelTypesPlatform; -} - -fmiComponent fmiInstantiateModel(fmiString instanceName, fmiString GUID, fmiCallbackFunctions functions, fmiBoolean loggingOn) -{ - - if (!functions.logger) { - return NULL; - } - - return createModelInstance( - (loggerType) functions.logger, - NULL, - NULL, - instanceName, - GUID, - NULL, - loggingOn, - ModelExchange); -} - -fmiStatus fmiInitialize(fmiComponent c, fmiBoolean toleranceControlled, fmiReal relativeTolerance, fmiEventInfo *eventInfo) -{ - - UNUSED(toleranceControlled); - UNUSED(relativeTolerance); - - ModelInstance *instance = (ModelInstance *) c; - - fmiStatus status = init(c); - -#ifdef EVENT_UPDATE - eventUpdate(instance); -#endif - - eventInfo->iterationConverged = instance->newDiscreteStatesNeeded; - eventInfo->stateValueReferencesChanged = fmiFalse; - eventInfo->stateValuesChanged = instance->valuesOfContinuousStatesChanged; - eventInfo->terminateSimulation = instance->terminateSimulation; - eventInfo->upcomingTimeEvent = instance->nextEventTimeDefined; - eventInfo->nextEventTime = instance->nextEventTime; - - return status; -} - -fmiStatus fmiSetTime(fmiComponent c, fmiReal time) -{ - - ModelInstance *instance = (ModelInstance *) c; - - if (invalidState(instance, "fmiSetTime", Instantiated | Initialized)) - return fmiError; - - instance->time = time; - - return fmiOK; -} - -fmiStatus fmiSetContinuousStates(fmiComponent c, const fmiReal x[], size_t nx) -{ - - ModelInstance *instance = (ModelInstance *) c; - - if (invalidState(instance, "fmiSetContinuousStates", Initialized)) - return fmiError; - - if (invalidNumber(instance, "fmiSetContinuousStates", "nx", nx, NX)) - return fmiError; - - if (nullPointer(instance, "fmiSetContinuousStates", "x[]", x)) - return fmiError; - - setContinuousStates(instance, x, nx); - - return fmiOK; -} - -fmiStatus fmiEventUpdate(fmiComponent c, fmiBoolean intermediateResults, fmiEventInfo *eventInfo) -{ - - UNUSED(intermediateResults); - - ModelInstance *instance = (ModelInstance *) c; - - if (invalidState(instance, "fmiEventUpdate", Initialized)) - return fmiError; - - if (nullPointer(instance, "fmiEventUpdate", "eventInfo", eventInfo)) - return fmiError; - -#ifdef EVENT_UPDATE - eventUpdate(instance); -#endif - - // copy internal eventInfo of component to output eventInfo - eventInfo->iterationConverged = fmiTrue; - eventInfo->stateValueReferencesChanged = fmiFalse; - eventInfo->stateValuesChanged = instance->valuesOfContinuousStatesChanged; - eventInfo->terminateSimulation = instance->terminateSimulation; - eventInfo->upcomingTimeEvent = instance->nextEventTimeDefined; - eventInfo->nextEventTime = instance->nextEventTime; - - return fmiOK; -} - -fmiStatus fmiCompletedIntegratorStep(fmiComponent c, fmiBoolean *callEventUpdate) -{ - - ModelInstance *instance = (ModelInstance *) c; - - if (invalidState(instance, "fmiCompletedIntegratorStep", Initialized)) - return fmiError; - - if (nullPointer(instance, "fmiCompletedIntegratorStep", "callEventUpdate", callEventUpdate)) - return fmiError; - - return fmiOK; -} - -fmiStatus fmiGetStateValueReferences(fmiComponent c, fmiValueReference vrx[], size_t nx) -{ - - UNUSED(vrx); - UNUSED(nx); - - logError((ModelInstance *) c, "Not implemented."); - - return fmiError; -} - -fmiStatus fmiGetContinuousStates(fmiComponent c, fmiReal states[], size_t nx) -{ - - ModelInstance *instance = (ModelInstance *) c; - - if (invalidState(instance, "fmiGetContinuousStates", not_modelError)) - return fmiError; - - if (invalidNumber(instance, "fmiGetContinuousStates", "nx", nx, NX)) - return fmiError; - - if (nullPointer(instance, "fmiGetContinuousStates", "states[]", states)) - return fmiError; - - getContinuousStates(instance, states, nx); - - return fmiOK; -} - -fmiStatus fmiGetNominalContinuousStates(fmiComponent c, fmiReal x_nominal[], size_t nx) -{ - - ModelInstance *instance = (ModelInstance *) c; - - if (invalidState(instance, "fmiGetNominalContinuousStates", not_modelError)) - return fmiError; - - if (invalidNumber(instance, "fmiGetNominalContinuousStates", "nx", nx, NX)) - return fmiError; - - if (nullPointer(instance, "fmiGetNominalContinuousStates", "x_nominal[]", x_nominal)) - return fmiError; - - for (size_t i = 0; i < nx; i++) { - x_nominal[i] = 1; - } - - return fmiOK; -} - -fmiStatus fmiGetDerivatives(fmiComponent c, fmiReal derivatives[], size_t nx) -{ - - ModelInstance *instance = (ModelInstance *) c; - - if (invalidState(instance, "fmiGetDerivatives", not_modelError)) - return fmiError; - - if (invalidNumber(instance, "fmiGetDerivatives", "nx", nx, NX)) - return fmiError; - - if (nullPointer(instance, "fmiGetDerivatives", "derivatives[]", derivatives)) - return fmiError; - - getDerivatives(instance, derivatives, nx); - - return fmiOK; -} - -fmiStatus fmiGetEventIndicators(fmiComponent c, fmiReal eventIndicators[], size_t ni) -{ - - ModelInstance *instance = (ModelInstance *) c; - - if (invalidState(instance, "fmiGetEventIndicators", not_modelError)) - return fmiError; - - if (invalidNumber(instance, "fmiGetEventIndicators", "ni", ni, NZ)) - return fmiError; - - getEventIndicators(instance, eventIndicators, ni); - - return fmiOK; -} - -fmiStatus fmiTerminate(fmiComponent c) -{ - return terminate("fmiTerminate", c); -} - -void fmiFreeModelInstance(fmiComponent c) -{ - ModelInstance *instance = (ModelInstance *) c; - freeModelInstance(instance); -} - -#endif // Model Exchange 1.0