Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci-build.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: ghactions-ci-build
on: [pull_request]
on: [push]

jobs:
cmake-msvc2019:
Expand Down
102 changes: 54 additions & 48 deletions 3rdparty/fmi/fmi3FunctionTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
#include "fmi3PlatformTypes.h"

/*
This header file defines the data and function types of FMI 3.0-beta.2.
This header file defines the data and function types of FMI 3.0.
It must be used when compiling an FMU or an FMI importer.

Copyright (C) 2011 MODELISAR consortium,
2012-2021 Modelica Association Project "FMI"
2012-2022 Modelica Association Project "FMI"
All rights reserved.

This file is licensed by the copyright holders under the 2-Clause BSD License
Expand Down Expand Up @@ -79,18 +79,21 @@ typedef enum {
/* end::IntervalQualifier[] */

/* tag::CallbackLogMessage[] */
typedef void (*fmi3CallbackLogMessage) (fmi3InstanceEnvironment instanceEnvironment,
fmi3String instanceName,
typedef void (*fmi3LogMessageCallback) (fmi3InstanceEnvironment instanceEnvironment,
fmi3Status status,
fmi3String category,
fmi3String message);
/* end::CallbackLogMessage[] */

/* tag::CallbackClockUpdate[] */
typedef void (*fmi3ClockUpdateCallback) (
fmi3InstanceEnvironment instanceEnvironment);
/* end::CallbackClockUpdate[] */

/* tag::CallbackIntermediateUpdate[] */
typedef void (*fmi3CallbackIntermediateUpdate) (
typedef void (*fmi3IntermediateUpdateCallback) (
fmi3InstanceEnvironment instanceEnvironment,
fmi3Float64 intermediateUpdateTime,
fmi3Boolean clocksTicked,
fmi3Boolean intermediateVariableSetRequested,
fmi3Boolean intermediateVariableGetAllowed,
fmi3Boolean intermediateStepFinished,
Expand All @@ -100,8 +103,8 @@ typedef void (*fmi3CallbackIntermediateUpdate) (
/* end::CallbackIntermediateUpdate[] */

/* tag::CallbackPreemptionLock[] */
typedef void (*fmi3CallbackLockPreemption) ();
typedef void (*fmi3CallbackUnlockPreemption) ();
typedef void (*fmi3LockPreemptionCallback) ();
typedef void (*fmi3UnlockPreemptionCallback) ();
/* end::CallbackPreemptionLock[] */

/* Define fmi3 function pointer types to simplify dynamic loading */
Expand Down Expand Up @@ -131,7 +134,7 @@ typedef fmi3Instance fmi3InstantiateModelExchangeTYPE(
fmi3Boolean visible,
fmi3Boolean loggingOn,
fmi3InstanceEnvironment instanceEnvironment,
fmi3CallbackLogMessage logMessage);
fmi3LogMessageCallback logMessage);

typedef fmi3Instance fmi3InstantiateCoSimulationTYPE(
fmi3String instanceName,
Expand All @@ -144,22 +147,20 @@ typedef fmi3Instance fmi3InstantiateCoSimulationTYPE(
const fmi3ValueReference requiredIntermediateVariables[],
size_t nRequiredIntermediateVariables,
fmi3InstanceEnvironment instanceEnvironment,
fmi3CallbackLogMessage logMessage,
fmi3CallbackIntermediateUpdate intermediateUpdate);
fmi3LogMessageCallback logMessage,
fmi3IntermediateUpdateCallback intermediateUpdate);

typedef fmi3Instance fmi3InstantiateScheduledExecutionTYPE(
fmi3String instanceName,
fmi3String instantiationToken,
fmi3String resourcePath,
fmi3Boolean visible,
fmi3Boolean loggingOn,
const fmi3ValueReference requiredIntermediateVariables[],
size_t nRequiredIntermediateVariables,
fmi3InstanceEnvironment instanceEnvironment,
fmi3CallbackLogMessage logMessage,
fmi3CallbackIntermediateUpdate intermediateUpdate,
fmi3CallbackLockPreemption lockPreemption,
fmi3CallbackUnlockPreemption unlockPreemption);
fmi3LogMessageCallback logMessage,
fmi3ClockUpdateCallback clockUpdate,
fmi3LockPreemptionCallback lockPreemption,
fmi3UnlockPreemptionCallback unlockPreemption);
/* end::Instantiate[] */

/* tag::FreeInstance[] */
Expand All @@ -181,12 +182,7 @@ typedef fmi3Status fmi3ExitInitializationModeTYPE(fmi3Instance instance);
/* end::ExitInitializationMode[] */

/* tag::EnterEventMode[] */
typedef fmi3Status fmi3EnterEventModeTYPE(fmi3Instance instance,
fmi3Boolean stepEvent,
fmi3Boolean stateEvent,
const fmi3Int32 rootsFound[],
size_t nEventIndicators,
fmi3Boolean timeEvent);
typedef fmi3Status fmi3EnterEventModeTYPE(fmi3Instance instance);
/* end::EnterEventMode[] */

/* tag::Terminate[] */
Expand Down Expand Up @@ -274,7 +270,7 @@ typedef fmi3Status fmi3GetStringTYPE (fmi3Instance instance,
typedef fmi3Status fmi3GetBinaryTYPE (fmi3Instance instance,
const fmi3ValueReference valueReferences[],
size_t nValueReferences,
size_t sizes[],
size_t valueSizes[],
fmi3Binary values[],
size_t nValues);
/* end::Getters[] */
Expand Down Expand Up @@ -362,16 +358,15 @@ typedef fmi3Status fmi3SetStringTYPE (fmi3Instance instance,
typedef fmi3Status fmi3SetBinaryTYPE (fmi3Instance instance,
const fmi3ValueReference valueReferences[],
size_t nValueReferences,
const size_t sizes[],
const size_t valueSizes[],
const fmi3Binary values[],
size_t nValues);
/* end::Setters[] */
/* tag::SetClock[] */
typedef fmi3Status fmi3SetClockTYPE (fmi3Instance instance,
const fmi3ValueReference valueReferences[],
size_t nValueReferences,
const fmi3Clock values[],
size_t nValues);
const fmi3Clock values[]);
/* end::SetClock[] */

/* Getting Variable Dependency Information */
Expand Down Expand Up @@ -406,13 +401,13 @@ typedef fmi3Status fmi3FreeFMUStateTYPE(fmi3Instance instance, fmi3FMUState* FMU

/* tag::SerializedFMUStateSize[] */
typedef fmi3Status fmi3SerializedFMUStateSizeTYPE(fmi3Instance instance,
fmi3FMUState FMUState,
fmi3FMUState FMUState,
size_t* size);
/* end::SerializedFMUStateSize[] */

/* tag::SerializeFMUState[] */
typedef fmi3Status fmi3SerializeFMUStateTYPE (fmi3Instance instance,
fmi3FMUState FMUState,
fmi3FMUState FMUState,
fmi3Byte serializedState[],
size_t size);
/* end::SerializeFMUState[] */
Expand Down Expand Up @@ -449,9 +444,8 @@ typedef fmi3Status fmi3GetAdjointDerivativeTYPE(fmi3Instance instance,
size_t nSensitivity);
/* end::GetAdjointDerivative[] */



/* Entering and exiting the Configuration or Reconfiguration Mode */

/* tag::EnterConfigurationMode[] */
typedef fmi3Status fmi3EnterConfigurationModeTYPE(fmi3Instance instance);
/* end::EnterConfigurationMode[] */
Expand All @@ -465,54 +459,63 @@ typedef fmi3Status fmi3GetIntervalDecimalTYPE(fmi3Instance instance,
const fmi3ValueReference valueReferences[],
size_t nValueReferences,
fmi3Float64 intervals[],
fmi3IntervalQualifier qualifiers[],
size_t nIntervals);
fmi3IntervalQualifier qualifiers[]);
/* end::GetIntervalDecimal[] */

/* tag::GetIntervalFraction[] */
typedef fmi3Status fmi3GetIntervalFractionTYPE(fmi3Instance instance,
const fmi3ValueReference valueReferences[],
size_t nValueReferences,
fmi3UInt64 intervalCounters[],
fmi3UInt64 counters[],
fmi3UInt64 resolutions[],
fmi3IntervalQualifier qualifiers[],
size_t nIntervals);
fmi3IntervalQualifier qualifiers[]);
/* end::GetIntervalFraction[] */

/* tag::GetShiftDecimal[] */
typedef fmi3Status fmi3GetShiftDecimalTYPE(fmi3Instance instance,
const fmi3ValueReference valueReferences[],
size_t nValueReferences,
fmi3Float64 shifts[],
size_t nShifts);
fmi3Float64 shifts[]);
/* end::GetShiftDecimal[] */

/* tag::GetShiftFraction[] */
typedef fmi3Status fmi3GetShiftFractionTYPE(fmi3Instance instance,
const fmi3ValueReference valueReferences[],
size_t nValueReferences,
fmi3UInt64 shiftCounters[],
fmi3UInt64 resolutions[],
size_t nShifts);
fmi3UInt64 counters[],
fmi3UInt64 resolutions[]);
/* end::GetShiftFraction[] */

/* tag::SetIntervalDecimal[] */
typedef fmi3Status fmi3SetIntervalDecimalTYPE(fmi3Instance instance,
const fmi3ValueReference valueReferences[],
size_t nValueReferences,
const fmi3Float64 intervals[],
size_t nIntervals);
const fmi3Float64 intervals[]);
/* end::SetIntervalDecimal[] */

/* tag::SetIntervalFraction[] */
typedef fmi3Status fmi3SetIntervalFractionTYPE(fmi3Instance instance,
const fmi3ValueReference valueReferences[],
size_t nValueReferences,
const fmi3UInt64 intervalCounters[],
const fmi3UInt64 resolutions[],
size_t nIntervals);
const fmi3UInt64 counters[],
const fmi3UInt64 resolutions[]);
/* end::SetIntervalFraction[] */

/* tag::SetShiftDecimal[] */
typedef fmi3Status fmi3SetShiftDecimalTYPE(fmi3Instance instance,
const fmi3ValueReference valueReferences[],
size_t nValueReferences,
const fmi3Float64 shifts[]);
/* end::SetShiftDecimal[] */

/* tag::SetShiftFraction[] */
typedef fmi3Status fmi3SetShiftFractionTYPE(fmi3Instance instance,
const fmi3ValueReference valueReferences[],
size_t nValueReferences,
const fmi3UInt64 counters[],
const fmi3UInt64 resolutions[]);
/* end::SetShiftFraction[] */

/* tag::EvaluateDiscreteStates[] */
typedef fmi3Status fmi3EvaluateDiscreteStatesTYPE(fmi3Instance instance);
/* end::EvaluateDiscreteStates[] */
Expand Down Expand Up @@ -612,16 +615,19 @@ typedef fmi3Status fmi3DoStepTYPE(fmi3Instance instance,
fmi3Float64 currentCommunicationPoint,
fmi3Float64 communicationStepSize,
fmi3Boolean noSetFMUStatePriorToCurrentPoint,
fmi3Boolean* eventEncountered,
fmi3Boolean* eventHandlingNeeded,
fmi3Boolean* terminateSimulation,
fmi3Boolean* earlyReturn,
fmi3Float64* lastSuccessfulTime);
/* end::DoStep[] */

/***************************************************
Types for Functions for Scheduled Execution
****************************************************/

/* tag::ActivateModelPartition[] */
typedef fmi3Status fmi3ActivateModelPartitionTYPE(fmi3Instance instance,
fmi3ValueReference clockReference,
size_t clockElementIndex,
fmi3Float64 activationTime);
/* end::ActivateModelPartition[] */

Expand Down
39 changes: 30 additions & 9 deletions 3rdparty/fmi/fmi3Functions.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#define fmi3Functions_h

/*
This header file declares the functions of FMI 3.0-beta.2.
This header file declares the functions of FMI 3.0.
It must be used when compiling an FMU.

In order to have unique function names even if several FMUs
Expand All @@ -21,7 +21,7 @@ static link library. For FMUs compiled in a DLL/sharedObject, the "actual" funct
names are used and "FMI3_FUNCTION_PREFIX" must not be defined.

Copyright (C) 2008-2011 MODELISAR consortium,
2012-2021 Modelica Association Project "FMI"
2012-2022 Modelica Association Project "FMI"
All rights reserved.

This file is licensed by the copyright holders under the 2-Clause BSD License
Expand Down Expand Up @@ -60,14 +60,24 @@ extern "C" {
#include "fmi3FunctionTypes.h"
#include <stdlib.h>

/*
Allow override of FMI3_FUNCTION_PREFIX: If FMI3_OVERRIDE_FUNCTION_PREFIX
is defined, then FMI3_ACTUAL_FUNCTION_PREFIX will be used, if defined,
or no prefix if undefined. Otherwise FMI3_FUNCTION_PREFIX will be used,
if defined.
*/
#if !defined(FMI3_OVERRIDE_FUNCTION_PREFIX) && defined(FMI3_FUNCTION_PREFIX)
#define FMI3_ACTUAL_FUNCTION_PREFIX FMI3_FUNCTION_PREFIX
#endif

/*
Export FMI3 API functions on Windows and under GCC.
If custom linking is desired then the FMI3_Export must be
defined before including this file. For instance,
it may be set to __declspec(dllimport).
*/
#if !defined(FMI3_Export)
#if !defined(FMI3_FUNCTION_PREFIX)
#if !defined(FMI3_ACTUAL_FUNCTION_PREFIX)
#if defined _WIN32 || defined __CYGWIN__
/* Note: both gcc & MSVC on Windows support this syntax. */
#define FMI3_Export __declspec(dllexport)
Expand All @@ -84,16 +94,16 @@ it may be set to __declspec(dllimport).
#endif

/* Macros to construct the real function name (prepend function name by FMI3_FUNCTION_PREFIX) */
#if defined(FMI3_FUNCTION_PREFIX)
#if defined(FMI3_ACTUAL_FUNCTION_PREFIX)
#define fmi3Paste(a,b) a ## b
#define fmi3PasteB(a,b) fmi3Paste(a,b)
#define fmi3FullName(name) fmi3PasteB(FMI3_FUNCTION_PREFIX, name)
#define fmi3FullName(name) fmi3PasteB(FMI3_ACTUAL_FUNCTION_PREFIX, name)
#else
#define fmi3FullName(name) name
#endif

/* FMI version */
#define fmi3Version "3.0-beta.2"
#define fmi3Version "3.0"

/***************************************************
Common Functions
Expand Down Expand Up @@ -173,6 +183,8 @@ Common Functions
#define fmi3GetShiftFraction fmi3FullName(fmi3GetShiftFraction)
#define fmi3SetIntervalDecimal fmi3FullName(fmi3SetIntervalDecimal)
#define fmi3SetIntervalFraction fmi3FullName(fmi3SetIntervalFraction)
#define fmi3SetShiftDecimal fmi3FullName(fmi3SetShiftDecimal)
#define fmi3SetShiftFraction fmi3FullName(fmi3SetShiftFraction)
#define fmi3EvaluateDiscreteStates fmi3FullName(fmi3EvaluateDiscreteStates)
#define fmi3UpdateDiscreteStates fmi3FullName(fmi3UpdateDiscreteStates)

Expand Down Expand Up @@ -283,6 +295,8 @@ FMI3_Export fmi3GetShiftDecimalTYPE fmi3GetShiftDecimal;
FMI3_Export fmi3GetShiftFractionTYPE fmi3GetShiftFraction;
FMI3_Export fmi3SetIntervalDecimalTYPE fmi3SetIntervalDecimal;
FMI3_Export fmi3SetIntervalFractionTYPE fmi3SetIntervalFraction;
FMI3_Export fmi3SetShiftDecimalTYPE fmi3SetShiftDecimal;
FMI3_Export fmi3SetShiftFractionTYPE fmi3SetShiftFraction;
FMI3_Export fmi3EvaluateDiscreteStatesTYPE fmi3EvaluateDiscreteStates;
FMI3_Export fmi3UpdateDiscreteStatesTYPE fmi3UpdateDiscreteStates;

Expand All @@ -294,7 +308,9 @@ FMI3_Export fmi3EnterContinuousTimeModeTYPE fmi3EnterContinuousTimeMode;
FMI3_Export fmi3CompletedIntegratorStepTYPE fmi3CompletedIntegratorStep;

/* Providing independent variables and re-initialization of caching */
/* tag::SetTimeTYPE[] */
FMI3_Export fmi3SetTimeTYPE fmi3SetTime;
/* end::SetTimeTYPE[] */
FMI3_Export fmi3SetContinuousStatesTYPE fmi3SetContinuousStates;

/* Evaluation of the model equations */
Expand All @@ -310,10 +326,15 @@ Functions for Co-Simulation
****************************************************/

/* Simulating the FMU */
FMI3_Export fmi3EnterStepModeTYPE fmi3EnterStepMode;
FMI3_Export fmi3GetOutputDerivativesTYPE fmi3GetOutputDerivatives;
FMI3_Export fmi3EnterStepModeTYPE fmi3EnterStepMode;
FMI3_Export fmi3GetOutputDerivativesTYPE fmi3GetOutputDerivatives;
FMI3_Export fmi3DoStepTYPE fmi3DoStep;

/***************************************************
Functions for Scheduled Execution
****************************************************/

FMI3_Export fmi3ActivateModelPartitionTYPE fmi3ActivateModelPartition;
FMI3_Export fmi3DoStepTYPE fmi3DoStep;

#ifdef __cplusplus
} /* end of extern "C" { */
Expand Down
Loading