Skip to content

Commit 60bef9f

Browse files
author
Jens Frenkel
committed
- improve algortihm for handling undifferentiable mss
- copy also lapack and blas for msvc debugging - comment for further developemnt to BackendDAE.STATE git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@14181 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent aa6266a commit 60bef9f

File tree

3 files changed

+125
-35
lines changed

3 files changed

+125
-35
lines changed

Compiler/BackEnd/BackendDAE.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ end BackendDAEType;
8686
public
8787
uniontype VarKind "- Variabile kind"
8888
record VARIABLE end VARIABLE;
89-
record STATE end STATE;
89+
record STATE end STATE; // we should also save information if it is a state with used derivative and the how often this states was differentiated
9090
record STATE_DER end STATE_DER;
9191
record DUMMY_DER end DUMMY_DER;
9292
record DUMMY_STATE end DUMMY_STATE;

Compiler/BackEnd/IndexReduction.mo

Lines changed: 85 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ algorithm
118118
// BackendDump.dumpEqSystem(isyst);
119119
// BackendDump.dumpMatching(inAssignments1);
120120
// BackendDump.dumpMatching(inAssignments2);
121+
// syst = BackendDAEUtil.setEqSystemMatching(isyst,BackendDAE.MATCHING(inAssignments1,inAssignments2,{}));
122+
// dumpSystemGraphML(syst,ishared,NONE(),"ConstrainRevoluteJoint.graphml");
121123
// check by count vars of equations, if len(eqns) > len(vars) stop because of structural singular system
122124
(b,eqns_1,unassignedStates,unassignedEqns,discEqns) = minimalStructurallySingularSystem(eqns,isyst,inAssignments1,inAssignments2);
123125
size = BackendDAEUtil.systemSize(isyst);
@@ -274,7 +276,7 @@ algorithm
274276
// do not differentiate self generated equations $_DER.x = der(x)
275277
eqns1 = List.select1(eqns1,intLe,noofeqns);
276278
Debug.fcall(Flags.BLT_DUMP, print, "marked equations: ");
277-
Debug.fcall(Flags.BLT_DUMP, BackendDump.debuglst, (eqns1,intString," ","\n"));
279+
Debug.fcall(Flags.BLT_DUMP, BackendDump.debuglst, (eqns,intString," ","\n"));
278280
eqnstr = Debug.bcallret2(Flags.isSet(Flags.BLT_DUMP),BackendDump.dumpMarkedEqns,isyst, eqns1,"");
279281
Debug.fcall(Flags.BLT_DUMP, print, eqnstr);
280282
// diff Alias does not yet work proper
@@ -303,6 +305,7 @@ algorithm
303305
equation
304306
Debug.fcall(Flags.BLT_DUMP, print, "Reduce Index failed! System is structurally singulare and cannot handled because number of unassigned equations is larger than number of states.\nmarked equations:\n");
305307
// get from scalar eqns indexes the indexes in the equation array
308+
Debug.fcall(Flags.BLT_DUMP, BackendDump.debuglst, (eqns,intString," ","\n"));
306309
eqns1 = List.map1r(eqns,arrayGet,mapIncRowEqn);
307310
eqns1 = List.uniqueIntN(eqns1,arrayLength(mapIncRowEqn));
308311
Debug.fcall(Flags.BLT_DUMP, print, BackendDump.dumpMarkedEqns(isyst, eqns1));
@@ -427,6 +430,7 @@ algorithm
427430
case ({},_,_,_,_,_,_,_,_,_,_) then (true,inEqnsLstAcc,inStateIndxsAcc,inUnassEqnsAcc,inDiscEqnsAcc);
428431
case (ilst::rest,_,_,_,_,_,_,_,_,_,_)
429432
equation
433+
// print("Eqns " +& stringDelimitList(List.map(ilst,intString),", ") +& "\n");
430434
((unassignedEqns,eqnsLst,discEqns)) = List.fold2(ilst,unassignedContinuesEqns,vars,(inAssignments2,m),({},{},inDiscEqnsAcc));
431435
// print("unassignedEqns " +& stringDelimitList(List.map(unassignedEqns,intString),", ") +& "\n");
432436
stateIndxs = List.fold2(ilst,statesInEquations,(m,statemark,mark),inAssignments1,{});
@@ -761,7 +765,7 @@ algorithm
761765
then
762766
(syst,ishared,ass1,ass2,so,orgEqnsLst,mapEqnIncRow,mapIncRowEqn);
763767
// not all equations are differentiated
764-
case (_::_,_,_,_,_,_,BackendDAE.EQSYSTEM(mT = SOME(mt)),_,_,_,_,_,_,_)
768+
case (_::_,_,_,_,_,_,BackendDAE.EQSYSTEM(orderedVars=v,mT = SOME(mt)),_,_,_,_,_,_,_)
765769
equation
766770
Debug.fcall(Flags.BLT_DUMP,print,"notDiffedEquations:\n");
767771
Debug.fcall(Flags.BLT_DUMP,BackendDump.dumpEqns,notDiffedEquations);
@@ -774,6 +778,8 @@ algorithm
774778
Debug.fcall(Flags.BLT_DUMP,print,"unassignedStates:\n");
775779
Debug.fcall(Flags.BLT_DUMP,BackendDump.debuglst,(unassignedStates,intString,", ","\n"));
776780
ilst = List.fold1(unassignedStates,statesWithUnusedDerivative,mt,{});
781+
// check also initial equations (this could be done alse once before
782+
((ilst,_)) = BackendDAEUtil.traverseBackendDAEExpsEqns(BackendEquation.daeInitialEqns(ishared),searchDerivativesEqn,(ilst,v));
777783
Debug.fcall(Flags.BLT_DUMP,print,"states without used derivative:\n");
778784
Debug.fcall(Flags.BLT_DUMP,BackendDump.debuglst,(ilst,intString,", ","\n"));
779785
(syst,shared,ass1,ass2,so,orgEqnsLst,mapEqnIncRow,mapIncRowEqn) =
@@ -783,6 +789,39 @@ algorithm
783789
end matchcontinue;
784790
end differentiateEqns;
785791

792+
protected function searchDerivativesEqn "function searchDerivativesEqn
793+
author: Frenkel TUD 2012-11"
794+
input tuple<DAE.Exp,tuple<list<Integer>,BackendDAE.Variables>> itpl;
795+
output tuple<DAE.Exp,tuple<list<Integer>,BackendDAE.Variables>> outTpl;
796+
protected
797+
DAE.Exp e;
798+
tuple<list<Integer>,BackendDAE.Variables> tpl;
799+
algorithm
800+
(e,tpl) := itpl;
801+
outTpl := Expression.traverseExp(e,searchDerivativesExp,tpl);
802+
end searchDerivativesEqn;
803+
804+
protected function searchDerivativesExp "function searchDerivativesExp
805+
author: Frenkel TUD 2012-11"
806+
input tuple<DAE.Exp,tuple<list<Integer>,BackendDAE.Variables>> tpl;
807+
output tuple<DAE.Exp,tuple<list<Integer>,BackendDAE.Variables>> outTpl;
808+
algorithm
809+
outTpl := matchcontinue(tpl)
810+
local
811+
BackendDAE.Variables vars;
812+
list<Integer> ilst,i1lst;
813+
DAE.Exp e;
814+
DAE.ComponentRef cr;
815+
case((e as DAE.CALL(path=Absyn.IDENT(name = "der"),expLst={DAE.CREF(componentRef=cr)}),(ilst,vars)))
816+
equation
817+
(_,i1lst) = BackendVariable.getVar(cr,vars);
818+
ilst = List.fold1(i1lst,List.removeOnTrue, intEq, ilst);
819+
then
820+
((e,(ilst,vars)));
821+
case _ then tpl;
822+
end matchcontinue;
823+
end searchDerivativesExp;
824+
786825
protected function differentiateEqnsLst
787826
"function: differentiateEqnsLst
788827
author: Frenkel TUD 2012-11
@@ -947,14 +986,33 @@ algorithm
947986
array<Boolean> barray;
948987
list<BackendDAE.Var> varlst;
949988
BackendDAE.Var var;
989+
// 1th try to replace final parameter
990+
case (_,_,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
991+
equation
992+
((eqns,eqnslst as _::_,_)) = List.fold1(inEqns,replaceFinalVars,BackendVariable.daeKnVars(ishared),(eqns,{},BackendVarTransform.emptyReplacements()));
993+
// unassign changed equations and assigned vars
994+
eqnslst1 = List.flatten(List.map1r(eqnslst,arrayGet,imapEqnIncRow));
995+
ilst = List.map1r(eqnslst1,arrayGet,inAss2);
996+
ilst = List.select1(ilst,intGt,0);
997+
ass2 = List.fold1r(eqnslst1,arrayUpdate,-1,inAss2);
998+
ass1 = List.fold1r(ilst,arrayUpdate,-1,inAss1);
999+
// update IncidenceMatrix
1000+
Debug.fcall(Flags.BLT_DUMP, print, "Replaced final Parameter in Eqns\n");
1001+
syst = BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching);
1002+
Debug.fcall(Flags.BLT_DUMP, print, "Update Incidence Matrix: ");
1003+
Debug.fcall(Flags.BLT_DUMP, BackendDump.debuglst,(eqnslst,intString," ","\n"));
1004+
(syst,mapEqnIncRow,mapIncRowEqn) = BackendDAEUtil.updateIncidenceMatrixScalar(syst,BackendDAE.SOLVABLE(), eqnslst, imapEqnIncRow, imapIncRowEqn);
1005+
then
1006+
(syst,ishared,ass1,ass2,inStateOrd,inOrgEqnsLst,mapEqnIncRow,mapIncRowEqn);
1007+
9501008
// if size of unmatched eqns is equal to size of states without used derivative change all to algebraic
9511009
case (true,_,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
9521010
equation
9531011
// change varKind
9541012
varlst = List.map1r(statesWithUnusedDer,BackendVariable.getVarAt,v);
9551013
Debug.fcall(Flags.BLT_DUMP, print, "Change varKind to algebraic for\n");
9561014
Debug.fcall(Flags.BLT_DUMP, BackendDump.dumpVars, varlst);
957-
varlst = BackendVariable.setVarsKind(varlst,BackendDAE.DUMMY_STATE());
1015+
varlst = BackendVariable.setVarsKind(varlst,BackendDAE.VARIABLE());
9581016
v1 = BackendVariable.addVars(varlst,v);
9591017
// update IncidenceMatrix
9601018
eqnslst1 = BackendDAETransform.collectVarEqns(statesWithUnusedDer,{},mt,arrayLength(mt));
@@ -978,36 +1036,21 @@ algorithm
9781036
then
9791037
fail();
9801038
*/
981-
// if all of these does not work try to replace final parameter
982-
case (_,_,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
983-
equation
984-
((eqns,eqnslst as _::_,_)) = List.fold1(inEqns,replaceFinalVars,BackendVariable.daeKnVars(ishared),(eqns,{},BackendVarTransform.emptyReplacements()));
985-
// unassign changed equations and assigned vars
986-
eqnslst1 = List.flatten(List.map1r(eqnslst,arrayGet,imapEqnIncRow));
987-
ilst = List.map1r(eqnslst1,arrayGet,inAss2);
988-
ilst = List.select1(ilst,intGt,0);
989-
ass2 = List.fold1r(eqnslst1,arrayUpdate,-1,inAss2);
990-
ass1 = List.fold1r(ilst,arrayUpdate,-1,inAss1);
991-
// update IncidenceMatrix
992-
Debug.fcall(Flags.BLT_DUMP, print, "Replaced final Parameter in Eqns\n");
993-
syst = BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching);
994-
Debug.fcall(Flags.BLT_DUMP, print, "Update Incidence Matrix: ");
995-
Debug.fcall(Flags.BLT_DUMP, BackendDump.debuglst,(eqnslst,intString," ","\n"));
996-
(syst,mapEqnIncRow,mapIncRowEqn) = BackendDAEUtil.updateIncidenceMatrixScalar(syst,BackendDAE.SOLVABLE(), eqnslst, imapEqnIncRow, imapIncRowEqn);
997-
then
998-
(syst,ishared,ass1,ass2,inStateOrd,inOrgEqnsLst,mapEqnIncRow,mapIncRowEqn);
9991039

10001040
// if size of unmatched eqns is not equal to size of states without used derivative change first to algebraic
10011041
// until I have a better sulution
1002-
case (false,i::_,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
1042+
case (false,i::ilst,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
10031043
equation
10041044
// change varKind
10051045
var = BackendVariable.getVarAt(v,i);
10061046
varlst = {var};
10071047
Debug.fcall(Flags.BLT_DUMP, print, "Change varKind to algebraic for\n");
10081048
Debug.fcall(Flags.BLT_DUMP, BackendDump.dumpVars, varlst);
1009-
varlst = BackendVariable.setVarsKind(varlst,BackendDAE.DUMMY_STATE());
1049+
varlst = BackendVariable.setVarsKind(varlst,BackendDAE.VARIABLE());
10101050
v1 = BackendVariable.addVars(varlst,v);
1051+
varlst = List.map1r(ilst,BackendVariable.getVarAt,v);
1052+
Debug.fcall(Flags.BLT_DUMP, print, "Other Candidates are\n");
1053+
Debug.fcall(Flags.BLT_DUMP, BackendDump.dumpVars, varlst);
10111054
// update IncidenceMatrix
10121055
eqnslst1 = BackendDAETransform.collectVarEqns({i},{},mt,arrayLength(mt));
10131056
syst = BackendDAE.EQSYSTEM(v1,eqns,SOME(m),SOME(mt),matching);
@@ -1016,6 +1059,14 @@ algorithm
10161059
(syst,mapEqnIncRow,mapIncRowEqn) = BackendDAEUtil.updateIncidenceMatrixScalar(syst,BackendDAE.SOLVABLE(), eqnslst1, imapEqnIncRow, imapIncRowEqn);
10171060
then
10181061
(syst,ishared,inAss1,inAss2,inStateOrd,inOrgEqnsLst,mapEqnIncRow,mapIncRowEqn);
1062+
1063+
case (false,_,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
1064+
equation
1065+
varlst = List.map1r(unassignedStates,BackendVariable.getVarAt,v);
1066+
Debug.fcall(Flags.BLT_DUMP, print, "unassignedStates\n");
1067+
Debug.fcall(Flags.BLT_DUMP, BackendDump.dumpVars, varlst);
1068+
then
1069+
fail();
10191070
end matchcontinue;
10201071
end handleundifferntiableMSS;
10211072

@@ -5059,6 +5110,13 @@ algorithm
50595110
(outVars,outChangedVars) = changeDerVariablestoStates1(rest,ilst,vars,i::inChangedVars);
50605111
then
50615112
(outVars,outChangedVars);
5113+
case ((v as BackendDAE.VAR(varKind=BackendDAE.DUMMY_STATE()))::rest,i::ilst,_,_)
5114+
equation
5115+
v = BackendVariable.setVarKind(v,BackendDAE.STATE());
5116+
vars = BackendVariable.addVar(v,inVars);
5117+
(outVars,outChangedVars) = changeDerVariablestoStates1(rest,ilst,vars,i::inChangedVars);
5118+
then
5119+
(outVars,outChangedVars);
50625120
case ((v as BackendDAE.VAR(varKind=BackendDAE.DUMMY_DER()))::rest,i::ilst,_,_)
50635121
equation
50645122
v = BackendVariable.setVarKind(v,BackendDAE.STATE());
@@ -5155,12 +5213,12 @@ algorithm
51555213
vars = BackendVariable.daeVars(isyst);
51565214
eqns = BackendEquation.daeEqns(isyst);
51575215
//(_,m,mt) = BackendDAEUtil.getIncidenceMatrix(isyst,BackendDAE.NORMAL());
5158-
mapIncRowEqn = listArray(List.intRange(arrayLength(m)));
5159-
//(_,m,mt,_,mapIncRowEqn) = BackendDAEUtil.getIncidenceMatrixScalar(isyst,BackendDAE.NORMAL());
5216+
//mapIncRowEqn = listArray(List.intRange(arrayLength(m)));
5217+
(_,m,mt,_,mapIncRowEqn) = BackendDAEUtil.getIncidenceMatrixScalar(isyst,BackendDAE.NORMAL());
51605218
graph = GraphML.getGraph("G",false);
51615219
((_,graph)) = BackendVariable.traverseBackendDAEVars(vars,addVarGraph,(1,graph));
5162-
neqns = BackendDAEUtil.equationArraySize(eqns);
5163-
//neqns = BackendDAEUtil.equationSize(eqns);
5220+
//neqns = BackendDAEUtil.equationArraySize(eqns);
5221+
neqns = BackendDAEUtil.equationSize(eqns);
51645222
eqnsids = List.intRange(neqns);
51655223
graph = List.fold2(eqnsids,addEqnGraph,eqns,mapIncRowEqn,graph);
51665224
((_,_,graph)) = List.fold(eqnsids,addEdgesGraph,(1,m,graph));

SimulationRuntime/c/CMakeLists.txt

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ ENDIF(NOT OMDEV)
1919

2020
INCLUDE_DIRECTORIES(${OMDEV}/lib/expat-win32-msvc)
2121
link_directories(${OMDEV}/lib/expat-win32-msvc)
22+
link_directories(${OMDEV}/lib/lapack-win32-msvc)
2223

2324
# SUNDIALS Header
2425
FIND_PATH(SUNDIALS_INCLUDE_DIR sundials/sundials_config.h /usr/include /usr/local/include $ENV{INCLUDE} ${OMDEV}/lib/3rdParty/Sundials/include)
@@ -141,6 +142,7 @@ MACRO(BUILDMODEL model mo dir Flags CSRC)
141142

142143
INCLUDE_DIRECTORIES(${OMDEV}/lib/expat-win32-msvc)
143144
link_directories(${OMDEV}/lib/expat-win32-msvc)
145+
link_directories(${OMDEV}/lib/lapack-win32-msvc)
144146

145147
# Variablen fuer openmodelica2sarturis
146148
SET(OMC_CODE ${CMAKE_CURRENT_BINARY_DIR}/${model}.c
@@ -161,7 +163,7 @@ MACRO(BUILDMODEL model mo dir Flags CSRC)
161163
ADD_CUSTOM_TARGET(${model}codegen ALL DEPENDS ${OMC_OUTPUT})
162164

163165
ADD_EXECUTABLE(${model} ${OMC_OUTPUT} ${CSRC})
164-
TARGET_LINK_LIBRARIES(${model} simulation util math-support results solver f2c meta ModelicaExternalC libexpat initialization)
166+
TARGET_LINK_LIBRARIES(${model} simulation util math-support results solver f2c meta ModelicaExternalC libexpat initialization lapack_win32_MT)
165167

166168
# Dependencies
167169
ADD_DEPENDENCIES(${model} ${model}codegen)
@@ -220,18 +222,46 @@ ENDIF(SUNDIALS_INCLUDE_DIR AND
220222

221223
INCLUDE_DIRECTORIES(${OMDEV}/lib/expat-win32-msvc)
222224
link_directories(${OMDEV}/lib/expat-win32-msvc)
225+
link_directories(${OMDEV}/lib/lapack-win32-msvc)
223226

224-
# custom command to copy xml file
227+
# custom command to copy expat.dll file
225228
SET(expat_CODE ${OMDEV}/lib/expat-win32-msvc/libexpat.dll)
226229
STRING(REGEX REPLACE "/" "\\\\" expat_CODE_NEU ${expat_CODE})
227230
SET(expat_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/libexpat.dll)
228231
STRING(REGEX REPLACE "/" "\\\\" expat_OUTPUT_NEU ${expat_OUTPUT})
229-
ADD_CUSTOM_COMMAND(OUTPUT ${expat_OUTPUT}
232+
233+
ADD_CUSTOM_COMMAND(OUTPUT ${expat_OUTPUT}
230234
COMMAND ${COPY} ${expat_CODE_NEU} ${expat_OUTPUT_NEU}
231235
WORKING_DIRECTORY ${dir}
232236
COMMENT "copy file ${expat_CODE_NEU} to ${expat_OUTPUT_NEU}")
233237
# target fuer OM_OUTPUT
234238
ADD_CUSTOM_TARGET(expat${model} ALL DEPENDS ${expat_OUTPUT})
239+
240+
241+
SET(lapack_CODE ${OMDEV}/lib/lapack-win32-msvc/lapack_win32_MT.dll)
242+
STRING(REGEX REPLACE "/" "\\\\" lapack_CODE_NEU ${lapack_CODE})
243+
SET(lapack_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/lapack_win32_MT.dll)
244+
STRING(REGEX REPLACE "/" "\\\\" lapack_OUTPUT_NEU ${lapack_OUTPUT})
245+
246+
ADD_CUSTOM_COMMAND(OUTPUT ${lapack_OUTPUT} ${blas_OUTPUT} ${lapack_OUTPUT}
247+
COMMAND ${COPY} ${lapack_CODE_NEU} ${lapack_OUTPUT_NEU}
248+
WORKING_DIRECTORY ${dir}
249+
COMMENT "copy file ${lapack_CODE_NEU} to ${lapack_OUTPUT_NEU}")
250+
# target fuer OM_OUTPUT
251+
ADD_CUSTOM_TARGET(lapack${model} ALL DEPENDS ${lapack_OUTPUT})
252+
253+
254+
SET(blas_CODE ${OMDEV}/lib/lapack-win32-msvc/blas_win32_MT.dll)
255+
STRING(REGEX REPLACE "/" "\\\\" blas_CODE_NEU ${blas_CODE})
256+
SET(blas_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/blas_win32_MT.dll)
257+
STRING(REGEX REPLACE "/" "\\\\" blas_OUTPUT_NEU ${blas_OUTPUT})
258+
259+
ADD_CUSTOM_COMMAND(OUTPUT ${blas_OUTPUT} ${blas_OUTPUT} ${lapack_OUTPUT}
260+
COMMAND ${COPY} ${blas_CODE_NEU} ${blas_OUTPUT_NEU}
261+
WORKING_DIRECTORY ${dir}
262+
COMMENT "copy file ${blas_CODE_NEU} to ${blas_OUTPUT_NEU}")
263+
# target fuer OM_OUTPUT
264+
ADD_CUSTOM_TARGET(blas${model} ALL DEPENDS ${blas_OUTPUT})
235265

236266
SET(OMC_MODELNAME ${model})
237267
# generate model.mos
@@ -257,7 +287,7 @@ ENDIF(SUNDIALS_INCLUDE_DIR AND
257287
ADD_DEFINITIONS(/TP)
258288
set_source_files_properties(${OMC_OUTPUT} PROPERTIES LANGUAGE CXX)
259289
ADD_EXECUTABLE(${model} ${OMC_OUTPUT} ${CSRC})
260-
TARGET_LINK_LIBRARIES(${model} simulation util math-support results solver meta f2c ModelicaExternalC libexpat initialization ${SUNDIALS_LIBRARIES})
290+
TARGET_LINK_LIBRARIES(${model} simulation util math-support results solver meta f2c ModelicaExternalC libexpat initialization lapack_win32_MT ${SUNDIALS_LIBRARIES})
261291

262292
# custom command to copy xml file
263293
SET(XML_CODE ${dir}/${model}_init.xml)
@@ -272,7 +302,7 @@ ENDIF(SUNDIALS_INCLUDE_DIR AND
272302
ADD_CUSTOM_TARGET(${model}cp_xml ALL DEPENDS ${XML_OUTPUT})
273303

274304
# Dependencies
275-
ADD_DEPENDENCIES(${model}cp_xml ${model}codegen expat)
305+
ADD_DEPENDENCIES(${model}cp_xml ${model}codegen expat${model} lapack${model} blas${model})
276306
ADD_DEPENDENCIES(${model} ${model}cp_xml)
277307

278308
#ENDFOREACH(model ${model_sources})
@@ -324,6 +354,7 @@ ENDIF(SUNDIALS_INCLUDE_DIR AND
324354

325355
INCLUDE_DIRECTORIES(${OMDEV}/lib/expat-win32-msvc)
326356
link_directories(${OMDEV}/lib/expat-win32-msvc)
357+
link_directories(${OMDEV}/lib/lapack-win32-msvc)
327358

328359
SET(OMC_MODELNAME ${model})
329360
SET(OMC_MODELDIR ${dir})
@@ -353,7 +384,7 @@ ENDIF(SUNDIALS_INCLUDE_DIR AND
353384
${OMCTRUNCHOME}/SimulationRuntime/fmi/export/fmiModelTypes.h)
354385

355386
ADD_LIBRARY(${model} SHARED ${OMC_OUTPUT} ${CSRC} ${OMC_FMU_CODE})
356-
TARGET_LINK_LIBRARIES(${model} simulation util math-support results solver f2c meta ModelicaExternalC libexpat initialization)
387+
TARGET_LINK_LIBRARIES(${model} simulation util math-support results solver f2c meta ModelicaExternalC libexpat initialization lapack_win32_MT)
357388

358389
# Dependencies
359390
ADD_DEPENDENCIES(${model} ${model}codegen)
@@ -411,6 +442,7 @@ ENDIF(SUNDIALS_INCLUDE_DIR AND
411442

412443
INCLUDE_DIRECTORIES(${OMDEV}/lib/expat-win32-msvc)
413444
link_directories(${OMDEV}/lib/expat-win32-msvc)
445+
link_directories(${OMDEV}/lib/lapack-win32-msvc)
414446

415447
STRING(REPLACE "." "_" FMU_MODELNAME ${model})
416448
# generate model.mos
@@ -439,7 +471,7 @@ ENDIF(SUNDIALS_INCLUDE_DIR AND
439471
ADD_DEFINITIONS(/TP ${FMU_MODELNAME}.c)
440472
set_source_files_properties(${OMC_OUTPUT} PROPERTIES LANGUAGE CXX)
441473
ADD_LIBRARY(${model} SHARED ${OMC_OUTPUT} ${CSRC} ${OMC_FMU_CODE})
442-
TARGET_LINK_LIBRARIES(${model} simulation util math-support results solver meta f2c ModelicaExternalC libexpat initialization ${SUNDIALS_LIBRARIES})
474+
TARGET_LINK_LIBRARIES(${model} simulation util math-support results solver meta f2c ModelicaExternalC libexpat initialization lapack_win32_MT ${SUNDIALS_LIBRARIES})
443475

444476
# Dependencies
445477
ADD_DEPENDENCIES(${model} ${model}codegen)

0 commit comments

Comments
 (0)