FMU Analysis
The FMUAnalysis
builds an FMU from a Dyad model for use and execution in a myriad of simulation tools.
Method Overview
The Dyad compiler uses the physical description of the system to generate a system of differential-algebraic equations:
where TransientAnalysis
and SteadyStateAnalysis
, is the existance of the values u(t)
are values which are given by connections in the system in which the FMU connected. Additionally,
For a Model Exechange FMU, a binary is created which executes the TransientAnalysis
is embedded into the system. I.e. a Cosimulation FMU is a clocked component which takes a dt
and solves using an ODE solver to predict
Example Definition
analysis MyFMUAnalysis
extends DyadFMUGeneration.FMUAnalysis()
model = BlockComponents.Sine(frequency = 1.0, amplitude = 1.0)
end
The Dyad compiler will generate the MyFMUAnalysis
function that will run the analysis.
result = MyFMUAnalysis()
DyadFMUGeneration.FMUAnalysisSolution{DyadFMUGeneration.FMUAnalysisSpec{ModelingToolkit.System, String, String, String, Vector{String}, Vector{String}}}(DyadFMUGeneration.FMUAnalysisSpec{ModelingToolkit.System, String, String, String, Vector{String}, Vector{String}}(:FMUAnalysis, Model Sine:
Equations (1):
1 standard: see equations(Sine)
Unknowns (1): see unknowns(Sine)
y(t)
Parameters (5): see parameters(Sine)
start_time [defaults to 0]: Time at which the signal starts changing from its offset value
offset [defaults to 0]: Constant value added to the signal output
amplitude [defaults to 1]: Peak value of the sine wave
frequency [defaults to 1]: Number of cycles per time unit
⋮, "FMI_V2", "FMI_BOTH", "auto", 0, String[], 0, String[]), "/home/actions-runner-10/.julia/scratchspaces/ca28fe3e-7809-4c0f-9d3e-a21c6e6f3e9d/JSDeploymentjl/MIsxZl/Sine.fmu")
This builds an FMU. The path for the FMU is given as an artifact:
using DyadInterface
fmu_path = artifacts(result, :FMU)
"/home/actions-runner-10/.julia/scratchspaces/ca28fe3e-7809-4c0f-9d3e-a21c6e6f3e9d/JSDeploymentjl/MIsxZl/Sine.fmu"
Analysis Arguments
Required Arguments
model
: the Dyad model that the analysis is being applied to.
Optional Arguments
version::String
: the FMU version to use. Defaults to "FMI_V2", with the other possible choice being "FMI_V3".type::String
: the type of FMU to build. Choices are"FMI_ME"
for Model Exchange,"FMI_CS"
for Cosimulation, or"FMI_BOTH"
for a binary which has both embedded within it.alg::String
: chooses the solver algorithm for the solution process of the Cosimulation FMU. The default is "auto". The choices are:"auto"
- Automatic algorithm choice with stiffness detection, size detection, and linear solve swapping from OrdinaryDiffEq.jl."Rodas5P"
- Adaptive time Rosenbrock method from OrdinaryDiffEqRosenbrock.jl. The Rosenbrock methods are specifically fast for small systems of stiff equations and DAEs which avoid Jacobian singularity issues (i.e. no variable-index DAE behavior)."FBDF"
- Adaptive order, adaptive time fixed leading coefficient backwards differentiation formulae (BDF) method from OrdinaryDiffEqBDF.jl, modeled after the FLC formulation of VODE. This is a good method for large stiff systems and DAEs."Tsit5"
- 5th order explicit Runge-Kutta method from OrdinaryDiffEqTsit5.jl. This method is not applicable to DAEs and is only applicable to systems which have no algebraic constraints (post simplification).
n_inputs::Integer
: the number of inputs, i.e. the length of thevector. inputs::String[n_inputs]
: the variables of the Dyad model which will be defined by the inputs. The ordering of the vector needs to match the ordering of thevector definition. n_outputs::Integer
: the number of outputs, i.e. the length of the output of. outputs::String[n_outputs]
: the names of the variables to include in the output vector. The ordering of the vector needs to match the ordering of .
Artifacts
The FMUAnalysis
returns the following artifacts:
Standard Artifacts
:FMU
: A string for the path to the generated FMU.