FMU Analysis
The FMUAnalysis
builds an FMU from a Dyad model for use and execution in a myad 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 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()
This builds an FMU. The path for the FMU is given as an artifact:
fmu_path = artifacts(result, :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.