#4491 closed defect (fixed)
OM does not compile Modelica trunk experiments with tables
Reported by: | Owned by: | Adrian Pop | |
---|---|---|---|
Priority: | high | Milestone: | 1.12.0 |
Component: | Build Environment | Version: | |
Keywords: | Cc: | Martin Sjölund, Willi Braun, Lennart Ochel, Henning Kiel |
Description
In OMEdit I changed the default Modelica library from "default" to "trunk" in oder to load the actual master version from Github automatically. I then tried to simulate the example Modelica.Electrical.Machines.Examples.AsynchronousInductionMachines.AIMC_Conveyor
but the compilation fails. The error message states:
Modelica.Electrical.Machines.Examples.AsynchronousInductionMachines.AIMC_Conveyor_functions.o: In function `omc_Modelica_Blocks_Types_ExternalCombiTimeTable_constructor': Modelica.Electrical.Machines.Examples.AsynchronousInductionMachines.AIMC_Conveyor_functions.c:(.text+0x618): undefined reference to `ModelicaStandardTables_CombiTimeTable_init2' clang: error: linker command failed with exit code 1 (use -v to see invocation) Modelica.Electrical.Machines.Examples.AsynchronousInductionMachines.AIMC_Conveyor.makefile:30: recipe for target 'omc_main_target' failed make: *** [omc_main_target] Error 1 Compilation process failed. Exited with code 2.
This is a table issue, as other examples without tables work OK. However, the experiment simulates fine if the default Modelica version is used.
I am using the version
OMEdit 1.12.0~dev-327-g7dd1e00 Connected to OpenModelica 1.12.0~dev-944-g1a8dd60
Change History (28)
comment:1 by , 7 years ago
Cc: | added |
---|---|
Component: | OMEdit → Code Generation |
Owner: | changed from | to
Status: | new → assigned |
Summary: | OMEdit does not compile Modelica trunk experiments with tables → OM does not compile Modelica trunk experiments with tables |
comment:2 by , 7 years ago
comment:3 by , 7 years ago
Maybe the up-to-date binaries of https://github.com/modelica/Modelica/pull/2273 are useful for you.
comment:4 by , 7 years ago
Milestone: | Future → 1.13.0 |
---|---|
Priority: | high → critical |
Another non-working model with MSL trunk, also with OM 1.12-beta1 is:
model cyc Modelica.Blocks.Sources.CombiTimeTable driveCyc(columns = {2}, extrapolation = Modelica.Blocks.Types.Extrapolation.Periodic, table = [0, 0; 1, 1; 2, 4], tableOnFile = false); end cyc;
It looks like nearly all table models stop to work with trunk version of MSL.
Maybe I'm wrong, but this seems to me a critical (or even blocker) issue for 1.13.
Obviously developers are free to change again the priority in case they do not agree.
comment:5 by , 7 years ago
Did you really check the latest master which contains the updated binaries?
comment:6 by , 7 years ago
The problem is that we have the same implementation (the one from MSL 3.2.2) that we use for tables regardless of MSL library loaded.
They have changed the table implementation interface in MSL trunk and we need to update our table C code. I have tried to do that but somehow it breaks our tests (is not backwards compatible). I will check it again.
comment:8 by , 7 years ago
One other idea is to use the provided binaries / build-scripts of MSL tables instead of installing pre-built binaries of MSL 3.2.2.
comment:9 by , 7 years ago
Priority: | critical → high |
---|
well, maybe it is not a good idea to set "critical" priority for what is just compliance with a trunk version which, in principle, may happen to be changed before next official MSL release.
comment:10 by , 7 years ago
Owner: | changed from | to
---|---|
Status: | assigned → accepted |
comment:11 by , 7 years ago
Component: | Code Generation → Build Environment |
---|
follow-up: 13 comment:12 by , 7 years ago
MSL table implementation for v3.2.3 (or whatever it will be called one day) is feature-ready in master. Thus, if there is any backward-compatibility breaking issue, please let me know at GiHub.
comment:13 by , 7 years ago
Replying to tbc@…:
MSL table implementation for v3.2.3 (or whatever it will be called one day) is feature-ready in master. Thus, if there is any backward-compatibility breaking issue, please let me know at GiHub.
I asked one of our developer to look into the issue first to get more information so we can tell you where to look for the problem but he had no time. I will try it once again to update the C code to the latest, maybe the problem is solved. If not, I'll get back to you.
comment:14 by , 7 years ago
The current sources don't compile with our C++ runtime. TABLE_SHARE is not set and there are compilation errors for that case (simple solution is to just define TABLE_SHARE, but seems bad if it doesn't work)...
comment:16 by , 7 years ago
comment:18 by , 7 years ago
Cc: | added |
---|
Replying to tbc@…:
Any news on this ticket?
Yes. We have 2 tests that fail:
https://github.com/OpenModelica/OpenModelica-testsuite/blob/master/openmodelica/cruntime/optimization/basic/TT2.mos
https://github.com/OpenModelica/OpenModelica-testsuite/blob/master/openmodelica/cruntime/optimization/basic/TT3.mos
Basically I think the values we get for those tables are different in MSL trunk than in MSL 3.2.2.
Modelica.Blocks.Sources.CombiTimeTable timeTable(table = [0,1; 1,3; 2,-3; 3,5; 4,7; 5, 0], extrapolation = Modelica.Blocks.Types.Extrapolation.Periodic); Modelica.Blocks.Sources.CombiTimeTable timeTable(table = [0,1; 1,3; 2,-3; 3,5; 4,7; 5, 0], extrapolation = Modelica.Blocks.Types.Extrapolation.HoldLastPoint);
The non-default extrapolation seems to be the issue.
The problem is that these are optimization tests and I don't really know what is happening in there. Maybe Willi or Lennart can explain more (cc here).
I guess you could test if the values you get from these tables using 3.2.2 vs trunk are the same, or not, by using some Modelica model.
comment:19 by , 7 years ago
The PR for 3rdParty update to latest C code from MSL trunk:
https://github.com/OpenModelica/OMCompiler-3rdParty/pull/23
comment:20 by , 7 years ago
Cc: | added |
---|
comment:21 by , 7 years ago
Sorry, cannot really reproduce. But, I can think of my changes for msl:#2080 and msl:#1627 that lead to more accurate results as time events on interval boundaries are now generated by default for linear interpolation. Since you only have 20 output points (numberOfIntervals=20) in your result files, you will probably not have hit the interval boundaries with MSL 3.2.2, whereas MSL master does. For me this sounds reasonable and acceptable.
You can prove youself if you compile ModelicaStandardTables with DEBUG_TIME_EVENTS
defined.
comment:22 by , 7 years ago
I think the tests that fail are wrong and we only get that because of the better implementation of tables. I will push the changes in and disable these two tests.
comment:25 by , 7 years ago
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
comment:26 by , 7 years ago
It seems that some ModelicaTest 3.2.1 models do not verify anymore with the MSL trunk table implementation:
https://libraries.openmodelica.org/branches/history/master/2017-09-24%2017:32:58..2017-09-25%2009:30:42.html
We will need to check those to see if the differences are acceptable.
comment:27 by , 7 years ago
Milestone: | 1.13.0 → 1.12.0 |
---|
ModelicaStandardTables_CombiTimeTable_init2 is a new function in ModelicaStandardTables master. I believe you also need to updated C-Sources of ModelicaStandardTables.