Opened 7 years ago
Closed 7 years ago
#4747 closed enhancement (fixed)
Treatment of singular equation systems in source code FMUs
Reported by: | Rüdiger Franke | Owned by: | Martin Sjölund |
---|---|---|---|
Priority: | high | Milestone: | 1.13.0 |
Component: | Build Environment | Version: | v1.13.0-dev-nightly |
Keywords: | Cc: |
Description
OMCompiler comes with the LAPACK solver 3rdParty/dgesv
that "is based on https://github.com/sjoelund/dgesv"
This enables the solution of linear equation systems with a call of the form:
dgesv_(&_dimSys, &dimRHS, _A, &_dimSys, _ihelpArray, _b, &_dimSys, &irtrn); if (irtrn != 0) { throw ModelicaSimulationError(ALGLOOP_SOLVER, "error solving linear system (dgesv info: " + to_string(irtrn) + ")"); }
Solvers of the simulation runtimes are able to treat such errors. This is useful in cases where equation systems become singular due to switches inside a model, if parts of the model disappear and the respective variables shall become zero.
FMUs should also treat such errors. LAPACK offers the additional functions dgetc2
and dgesc2
for this:
dgesv_(&_dimSys, &dimRHS, _A, &_dimSys, _ihelpArray, _b, &_dimSys, &irtrn); if (irtrn != 0) { dgetc2_(&_dimSys, _A, &_dimSys, _ihelpArray, _jhelpArray, &irtrn); dgesc2_(&_dimSys, _A, &_dimSys, _b, _ihelpArray, _jhelpArray, _scale); LOGGER_WRITE("LinearSolver: Linear system singular, using perturbed system matrix.", LC_LS, LL_DEBUG); }
Please extend 3rdParty/dgesv with the the functions dgetc2
and dgesc2
.
Attachments (1)
Change History (21)
comment:1 by , 7 years ago
comment:2 by , 7 years ago
Looks good!
I replaced my local directory OpenModelica/OMCompiler/3rdParty/dgesv
with the branch ticket4747
of https://github.com/sjoelund/dgesv
. Additionally I added the code of the ticket opener to the linear solver embedded with the FMU.
Compilation of OpenModelica and the FMU export worked without problem. An example that failed before does simulate now -- showing the LOGGER_WRITE message to prove that dgetc2/dgesc2 are used.
Can you merge your pull request, so that I can push my extension of the linear solver?
comment:3 by , 7 years ago
ad98b03 now has the files added. I guess it would be good if the C runtime would also call dgetc2/dgesc2.
comment:4 by , 7 years ago
The link ad98b03 appears broken. Moreover, git pull does not add the new files. A synchronization issue with github?
comment:6 by , 7 years ago
0a2708a better? Seems Hudson messed up the 3rdParty commit hash so it pointed to something broken... But Trac didn't seem to update based on the changes. I guess after the next PR.
comment:7 by , 7 years ago
Hudson does neither get the new files, see missing symbols during FMI export:
https://test.openmodelica.org/hudson/job/OpenModelica_TEST_PULL_REQUEST/5269/
comment:8 by , 7 years ago
Were they added to the cmake project in the Cpp runtime? libOMCppDgesvSolver_static.a?
comment:9 by , 7 years ago
Implicitly yes (libOMCppDgesvSolver_static.a contains everything from the 3rdParty dgesv folder). It works as soon as I copy the new files in there.
comment:10 by , 7 years ago
Seems not to be the case somehow:
hudson@asap:~/slave/workspace/OpenModelica_TEST_PULL_REQUEST/OpenModelica/build/lib/x86_64-linux-gnu/omc/cpp$ nm libOMCppDgesvSolver_static.a | grep dge U dgesv_
comment:11 by , 7 years ago
This is because the source files are missing. Invoke ls OpenModelica/OMCompiler/3rdParty/dgesv/lapack
. This should result in:
dgesc2.c dgetc2.c dgetrf.c dlabad.c dlaswp.c ilaenv.c xerbla.c dgesv.c dgetf2.c dgetrs.c dlamch.c ieeeck.c iparmq.c
including dgesc2.c
and dgetc2.c
.
comment:12 by , 7 years ago
Yes, that seems to be the case, in the PR job they are not there:
https://test.openmodelica.org/hudson/view/PullRequestTesting/job/OpenModelica_TEST_PULL_REQUEST/ws/OpenModelica/OMCompiler/3rdParty/dgesv/lapack/
Note that only some people have access to Job workspace.
These are the files in OMCompiler / 3rdParty / dgesv / lapack
dgesv.c dgetf2.c dgetrf.c dgetrs.c dlamch.c dlaswp.c ieeeck.c ilaenv.c iparmq.c xerbla.c
comment:13 by , 7 years ago
Strangely the 3rdParty checked out for the PR job has hash: changeset:ad6075ab4a22aebdee753cfdeea3f2f51455ae62/OMCompiler-3rdParty which is an old one.
comment:15 by , 7 years ago
Found the issue: Martin fixed the 3rdParty hash in OMCompiler but we need to update also the OpenModelica qlue project.
comment:16 by , 7 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:17 by , 7 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Funny, I ran some other PR which happened in the meantime.
I'm re-running yours now.
comment:18 by , 7 years ago
Ok. This is weird. Martin added the files in 3rdParty/lapack but I think that they should be in 3rdParty/dgesv/lapack. What is going on here? :)
comment:20 by , 7 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
https://github.com/sjoelund/dgesv/pull/1 adds the required files for dgetc2, dgesc2. I don't have time to test if it works with the FMUs so I won't merge it though.