v0.11.0
ModiaLang v0.11.0
Non-backwards compatible changes
-
Equations can only be defined with key
equationsand no other key. -
Parameter values in the code are now type cast to the type of the parameter value from the
@instantiatedModel(..)call. The benefit is that access of parameter values in the code is type stable
and operations with the parameter value are more efficient and at run-time no memory is allocated.
Existing models can no longer be simulated, if parameter values provided viasimulate!(.., merge=xx)are not
type compatible to their definition. For example, an error is thrown if the @instantedModel(..) uses a Float64 value and the
simulate!(.., merge=xx)uses aMeasurement{Float64}value for the same parameter
Other changes
-
Hierarchical names in function calls supported (e.g.
a.b.c.fc(..)). -
Functions can return multiple values, e.g.
(tau1,tau2) = generalizedForces(derw1, derw2). -
Support for StaticArrays variables (the StaticArrays feature is kept in the generated AST).
For an example, seeModiaLang/test/TestArrays.jl. -
Support for Array variables (especially of state and tearing variables)
where the dimension can change after@instantiateModel(..).
For examples, seeModiaLang/test/TestArrays.jlandTestMultiReturningFunction10.jl. -
New keyword
Var(hideResult=true)removes variable from the result (has no effect on states, derivative of states and parameters).
For an example, seeModiaLang/test/TestMultiReturningFunction10.jl -
New feature of @instantiatedModel(..): If a Model(..) has key
:_buildFunction, call this function to merge additional code to the model.
For details see the docu of function buildSubModels! in ModiaLang.jl.
For examples, seeModiaLang/test/TestMultiReturningFunction10.jland
constructorModel3D(..)inModia3D/src/ModiaInterface/model3D.jlandModia3D/src/ModiaInterface/buildModia3D.jl. -
Generalized connection semantics.
-
Functions converting model to/from JSON:
modelToJSON(model),JSONtoModel(json_string) -
simulate!(..):- New option
logProgress=falsein functionsimulate!(..)to print current simulation time every 5s (cpu-time). - If tolerance is too small, a warning is prented and it is automatically enlarged to a meaningful value
(e.g. tolerance = 1e-8 is not useful ifFloatType=Float32) - Logging improved: If log=true or logTiming=true, then timing, memory allocation and compilation time is
reported for initialization (ths includes compilation of the generated getDerivatives(..) function).
The remaining log shows cpu-time and memory allocation without initialization
(and without the resources needed to compile getDerivatives(..)). - Prefix messages of the timers with "ModiaLang" or "DifferentialEquations" to more clearly see
the origin of a message in the timer log.
- New option
-
Large speedup of symbolic transformation, if function depends on many input (and output) arguments
(includes new operatorimplicitDependency(..)). -
Included DAE-Mode in solution of linear equation system (if DAE integrator is used and all unknowns of a linear
equation system are part of the DAE states, solve the linear equation system during continuous integration
via DAE solver (= usually large simulation speed-up, for larger linear equation systems)
Bug fixes
-
If unitless=true, units in instantiatedModel.evaluatedParameters are removed.
-
The unit macro is kept in the generated code and is no longer expanded. For example,
u"N", is kept in the code that is
displayed withlogCode=true(previously, this was expanded and the unit was displayed in the code asNwhich is not correct Julia code). -
Function
ModiaLang.firstInitialOfAllSegments(..)now correctly returns true for the first call of the getDerivatives function during the simulation.
Merged pull requests:
- Merge development to main (#6) (@MartinOtter)