#2990 closed defect (fixed)
max/min attributes overwrite start at initialization
| Reported by: | Owned by: | Lennart Ochel | |
|---|---|---|---|
| Priority: | critical | Milestone: | 1.9.4 |
| Component: | Run-time | Version: | trunk |
| Keywords: | Cc: | Lennart Ochel |
Description
When max and min equations exist for a variable, the start value gets improperly overwritten with the max attribute value.
Here is some example code:
loadString("
model maxminbug
parameter Real L = 2.5;
parameter Real a = 0.24;
Real x(start = 1.0, min=-L^2.0, max=L^2.0);
Real y;
equation
der(x)=y;
der(y)=-a*x;
end maxminbug;
");
// Notice that pre(x) for initialization is 6.25, this should not be x.max
simulate(maxminbug, simflags="-lv=LOG_INIT");
// With -iim=none, x.start is set to 6.25, this should definitely not be x.max
simulate(maxminbug, simflags="-lv=LOG_INIT -iim=none");
The output:
"true
record SimulationResult
resultFile = \"S:/Scratch/OMBugs/maxminbug_res.mat\",
simulationOptions = \"startTime = 0.0, stopTime = 1.0, numberOfIntervals = 500, tolerance = 1e-006, method = 'dassl', fileNamePrefix = 'maxminbug', options = '', outputFormat = 'mat', variableFilter = '.*', cflags = '', simflags = '-lv=LOG_INIT'\",
messages = \"LOG_INIT | info | ### START INITIALIZATION ###
LOG_INIT | info | updating min-values
| | | | | x(min=-6.25)
LOG_INIT | info | updating max-values
| | | | | x(max=6.25)
LOG_INIT | info | updating nominal-values
LOG_INIT | info | updating start-values
LOG_INIT | info | initialization method: symbolic [solves the initialization problem symbolically - default]
LOG_INIT | info | parameter values
| | | | | real parameters
| | | | | | [1] parameter Real L(start=2.5, fixed=true) = 2.5
| | | | | | [2] parameter Real a(start=0.24, fixed=true) = 0.24
LOG_SOTI | info | ### SOLUTION OF THE INITIALIZATION ###
| | | | | states variables
| | | | | | [1] Real x(start=1, nominal=1) = 1 (pre: 6.25)
| | | | | | [2] Real y(start=0, nominal=1) = 0 (pre: 0)
| | | | | derivatives variables
| | | | | | [3] Real der(x) = 0 (pre: 0)
| | | | | | [4] Real der(y) = -0.24 (pre: 0)
LOG_INIT | info | ### END INITIALIZATION ###
\",
timeFrontend = 0.01207791378747863,
timeBackend = 0.001214175020201499,
timeSimCode = 0.0009431108479240174,
timeTemplates = 0.03195060665444899,
timeCompile = 1.29165318028847,
timeSimulation = 0.09866671713699776,
timeTotal = 1.436676041102952
end SimulationResult;
record SimulationResult
resultFile = \"S:/Scratch/OMBugs/maxminbug_res.mat\",
simulationOptions = \"startTime = 0.0, stopTime = 1.0, numberOfIntervals = 500, tolerance = 1e-006, method = 'dassl', fileNamePrefix = 'maxminbug', options = '', outputFormat = 'mat', variableFilter = '.*', cflags = '', simflags = '-lv=LOG_INIT -iim=none'\",
messages = \"LOG_INIT | info | ### START INITIALIZATION ###
LOG_INIT | info | updating min-values
| | | | | x(min=-6.25)
LOG_INIT | info | updating max-values
| | | | | x(max=6.25)
LOG_INIT | info | updating nominal-values
LOG_INIT | info | updating start-values
LOG_INIT | info | initialization method: none [sets all variables to their start values and skips the initialization process]
LOG_INIT | info | parameter values
| | | | | real parameters
| | | | | | [1] parameter Real L(start=2.5, fixed=true) = 2.5
| | | | | | [2] parameter Real a(start=0.24, fixed=true) = 0.24
LOG_SOTI | info | ### SOLUTION OF THE INITIALIZATION ###
| | | | | states variables
| | | | | | [1] Real x(start=1, nominal=1) = 6.25 (pre: 1)
| | | | | | [2] Real y(start=0, nominal=1) = 0 (pre: 0)
| | | | | derivatives variables
| | | | | | [3] Real der(x) = 0 (pre: 0)
| | | | | | [4] Real der(y) = 0 (pre: 0)
LOG_INIT | info | ### END INITIALIZATION ###
\",
timeFrontend = 0.00790769575244046,
timeBackend = 0.0009164856097003121,
timeSimCode = 0.0007208061480562133,
timeTemplates = 0.02231804456551621,
timeCompile = 1.278270309042027,
timeSimulation = 0.08834574828628097,
timeTotal = 1.398650068343458
end SimulationResult;
"
Warning: The initial conditions are not fully specified. Use +d=initialization for more information.
This bug also shows up in testsuite/simulation/modelica/initialization/bug_2207.mos if the nominal attribute is not set.
Produced using r23393 and somewhat earlier.
Change History (10)
comment:1 by , 11 years ago
| Component: | Unknown → Run-time |
|---|
comment:2 by , 11 years ago
| Cc: | added |
|---|---|
| Owner: | changed from to |
| Status: | new → assigned |
comment:3 by , 11 years ago
| Owner: | changed from to |
|---|---|
| Status: | assigned → accepted |
comment:4 by , 11 years ago
| Resolution: | → fixed |
|---|---|
| Status: | accepted → closed |
Thank you for this very helpful bug report. I added your test to the test suite and fixed the issue with r23423.
comment:5 by , 11 years ago
You guys are awesome! Thank you for the quick fix and for the great work in general.
follow-up: 8 comment:6 by , 11 years ago
| Resolution: | fixed |
|---|---|
| Status: | closed → reopened |
r23423 breaks PlanarMechanics examples (see https://test.openmodelica.org/hudson/job/PlanarMechanics_Simulation/302/).
comment:7 by , 11 years ago
| Status: | reopened → accepted |
|---|
The issue is that the symbolic jacobian for a state set is calculated before all required parameters are initialized properly, which leads to the division by zero.
comment:8 by , 11 years ago
| Resolution: | → fixed |
|---|---|
| Status: | accepted → closed |
Replying to anonymous:
r23423 breaks PlanarMechanics examples (see https://test.openmodelica.org/hudson/job/PlanarMechanics_Simulation/302/).
I opened a new ticket (#3064) for this, since it is not connected to the original problem.
comment:9 by , 10 years ago
| Milestone: | Future → pre1.9.4 |
|---|
It doesn't make sense to keep closed ticket in the "Future" milestone that were simply forgotten to assign to the correct milestone in the past.
comment:10 by , 8 years ago
| Milestone: | pre1.9.4 → 1.9.4 |
|---|
Removing the pre1.9.4 milestone in favor of 1.9.4.

The init-file seems to have start=1.0, so this should be a run-time issue since the generated initial equation is
x=$_start(x).