Skip to content

Commit

Permalink
- improve algortihm for handling undifferentiable mss
Browse files Browse the repository at this point in the history
- 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
  • Loading branch information
Jens Frenkel committed Dec 1, 2012
1 parent aa6266a commit 60bef9f
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 35 deletions.
2 changes: 1 addition & 1 deletion Compiler/BackEnd/BackendDAE.mo
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ end BackendDAEType;
public
uniontype VarKind "- Variabile kind"
record VARIABLE end VARIABLE;
record STATE end STATE;
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
record STATE_DER end STATE_DER;
record DUMMY_DER end DUMMY_DER;
record DUMMY_STATE end DUMMY_STATE;
Expand Down
112 changes: 85 additions & 27 deletions Compiler/BackEnd/IndexReduction.mo
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ algorithm
// BackendDump.dumpEqSystem(isyst);
// BackendDump.dumpMatching(inAssignments1);
// BackendDump.dumpMatching(inAssignments2);
// syst = BackendDAEUtil.setEqSystemMatching(isyst,BackendDAE.MATCHING(inAssignments1,inAssignments2,{}));
// dumpSystemGraphML(syst,ishared,NONE(),"ConstrainRevoluteJoint.graphml");
// check by count vars of equations, if len(eqns) > len(vars) stop because of structural singular system
(b,eqns_1,unassignedStates,unassignedEqns,discEqns) = minimalStructurallySingularSystem(eqns,isyst,inAssignments1,inAssignments2);
size = BackendDAEUtil.systemSize(isyst);
Expand Down Expand Up @@ -274,7 +276,7 @@ algorithm
// do not differentiate self generated equations $_DER.x = der(x)
eqns1 = List.select1(eqns1,intLe,noofeqns);
Debug.fcall(Flags.BLT_DUMP, print, "marked equations: ");
Debug.fcall(Flags.BLT_DUMP, BackendDump.debuglst, (eqns1,intString," ","\n"));
Debug.fcall(Flags.BLT_DUMP, BackendDump.debuglst, (eqns,intString," ","\n"));
eqnstr = Debug.bcallret2(Flags.isSet(Flags.BLT_DUMP),BackendDump.dumpMarkedEqns,isyst, eqns1,"");
Debug.fcall(Flags.BLT_DUMP, print, eqnstr);
// diff Alias does not yet work proper
Expand Down Expand Up @@ -303,6 +305,7 @@ algorithm
equation
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");
// get from scalar eqns indexes the indexes in the equation array
Debug.fcall(Flags.BLT_DUMP, BackendDump.debuglst, (eqns,intString," ","\n"));
eqns1 = List.map1r(eqns,arrayGet,mapIncRowEqn);
eqns1 = List.uniqueIntN(eqns1,arrayLength(mapIncRowEqn));
Debug.fcall(Flags.BLT_DUMP, print, BackendDump.dumpMarkedEqns(isyst, eqns1));
Expand Down Expand Up @@ -427,6 +430,7 @@ algorithm
case ({},_,_,_,_,_,_,_,_,_,_) then (true,inEqnsLstAcc,inStateIndxsAcc,inUnassEqnsAcc,inDiscEqnsAcc);
case (ilst::rest,_,_,_,_,_,_,_,_,_,_)
equation
// print("Eqns " +& stringDelimitList(List.map(ilst,intString),", ") +& "\n");
((unassignedEqns,eqnsLst,discEqns)) = List.fold2(ilst,unassignedContinuesEqns,vars,(inAssignments2,m),({},{},inDiscEqnsAcc));
// print("unassignedEqns " +& stringDelimitList(List.map(unassignedEqns,intString),", ") +& "\n");
stateIndxs = List.fold2(ilst,statesInEquations,(m,statemark,mark),inAssignments1,{});
Expand Down Expand Up @@ -761,7 +765,7 @@ algorithm
then
(syst,ishared,ass1,ass2,so,orgEqnsLst,mapEqnIncRow,mapIncRowEqn);
// not all equations are differentiated
case (_::_,_,_,_,_,_,BackendDAE.EQSYSTEM(mT = SOME(mt)),_,_,_,_,_,_,_)
case (_::_,_,_,_,_,_,BackendDAE.EQSYSTEM(orderedVars=v,mT = SOME(mt)),_,_,_,_,_,_,_)
equation
Debug.fcall(Flags.BLT_DUMP,print,"notDiffedEquations:\n");
Debug.fcall(Flags.BLT_DUMP,BackendDump.dumpEqns,notDiffedEquations);
Expand All @@ -774,6 +778,8 @@ algorithm
Debug.fcall(Flags.BLT_DUMP,print,"unassignedStates:\n");
Debug.fcall(Flags.BLT_DUMP,BackendDump.debuglst,(unassignedStates,intString,", ","\n"));
ilst = List.fold1(unassignedStates,statesWithUnusedDerivative,mt,{});
// check also initial equations (this could be done alse once before
((ilst,_)) = BackendDAEUtil.traverseBackendDAEExpsEqns(BackendEquation.daeInitialEqns(ishared),searchDerivativesEqn,(ilst,v));
Debug.fcall(Flags.BLT_DUMP,print,"states without used derivative:\n");
Debug.fcall(Flags.BLT_DUMP,BackendDump.debuglst,(ilst,intString,", ","\n"));
(syst,shared,ass1,ass2,so,orgEqnsLst,mapEqnIncRow,mapIncRowEqn) =
Expand All @@ -783,6 +789,39 @@ algorithm
end matchcontinue;
end differentiateEqns;

protected function searchDerivativesEqn "function searchDerivativesEqn
author: Frenkel TUD 2012-11"
input tuple<DAE.Exp,tuple<list<Integer>,BackendDAE.Variables>> itpl;
output tuple<DAE.Exp,tuple<list<Integer>,BackendDAE.Variables>> outTpl;
protected
DAE.Exp e;
tuple<list<Integer>,BackendDAE.Variables> tpl;
algorithm
(e,tpl) := itpl;
outTpl := Expression.traverseExp(e,searchDerivativesExp,tpl);
end searchDerivativesEqn;

protected function searchDerivativesExp "function searchDerivativesExp
author: Frenkel TUD 2012-11"
input tuple<DAE.Exp,tuple<list<Integer>,BackendDAE.Variables>> tpl;
output tuple<DAE.Exp,tuple<list<Integer>,BackendDAE.Variables>> outTpl;
algorithm
outTpl := matchcontinue(tpl)
local
BackendDAE.Variables vars;
list<Integer> ilst,i1lst;
DAE.Exp e;
DAE.ComponentRef cr;
case((e as DAE.CALL(path=Absyn.IDENT(name = "der"),expLst={DAE.CREF(componentRef=cr)}),(ilst,vars)))
equation
(_,i1lst) = BackendVariable.getVar(cr,vars);
ilst = List.fold1(i1lst,List.removeOnTrue, intEq, ilst);
then
((e,(ilst,vars)));
case _ then tpl;
end matchcontinue;
end searchDerivativesExp;

protected function differentiateEqnsLst
"function: differentiateEqnsLst
author: Frenkel TUD 2012-11
Expand Down Expand Up @@ -947,14 +986,33 @@ algorithm
array<Boolean> barray;
list<BackendDAE.Var> varlst;
BackendDAE.Var var;
// 1th try to replace final parameter
case (_,_,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
equation
((eqns,eqnslst as _::_,_)) = List.fold1(inEqns,replaceFinalVars,BackendVariable.daeKnVars(ishared),(eqns,{},BackendVarTransform.emptyReplacements()));
// unassign changed equations and assigned vars
eqnslst1 = List.flatten(List.map1r(eqnslst,arrayGet,imapEqnIncRow));
ilst = List.map1r(eqnslst1,arrayGet,inAss2);
ilst = List.select1(ilst,intGt,0);
ass2 = List.fold1r(eqnslst1,arrayUpdate,-1,inAss2);
ass1 = List.fold1r(ilst,arrayUpdate,-1,inAss1);
// update IncidenceMatrix
Debug.fcall(Flags.BLT_DUMP, print, "Replaced final Parameter in Eqns\n");
syst = BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching);
Debug.fcall(Flags.BLT_DUMP, print, "Update Incidence Matrix: ");
Debug.fcall(Flags.BLT_DUMP, BackendDump.debuglst,(eqnslst,intString," ","\n"));
(syst,mapEqnIncRow,mapIncRowEqn) = BackendDAEUtil.updateIncidenceMatrixScalar(syst,BackendDAE.SOLVABLE(), eqnslst, imapEqnIncRow, imapIncRowEqn);
then
(syst,ishared,ass1,ass2,inStateOrd,inOrgEqnsLst,mapEqnIncRow,mapIncRowEqn);

// if size of unmatched eqns is equal to size of states without used derivative change all to algebraic
case (true,_,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
equation
// change varKind
varlst = List.map1r(statesWithUnusedDer,BackendVariable.getVarAt,v);
Debug.fcall(Flags.BLT_DUMP, print, "Change varKind to algebraic for\n");
Debug.fcall(Flags.BLT_DUMP, BackendDump.dumpVars, varlst);
varlst = BackendVariable.setVarsKind(varlst,BackendDAE.DUMMY_STATE());
varlst = BackendVariable.setVarsKind(varlst,BackendDAE.VARIABLE());
v1 = BackendVariable.addVars(varlst,v);
// update IncidenceMatrix
eqnslst1 = BackendDAETransform.collectVarEqns(statesWithUnusedDer,{},mt,arrayLength(mt));
Expand All @@ -978,36 +1036,21 @@ algorithm
then
fail();
*/
// if all of these does not work try to replace final parameter
case (_,_,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
equation
((eqns,eqnslst as _::_,_)) = List.fold1(inEqns,replaceFinalVars,BackendVariable.daeKnVars(ishared),(eqns,{},BackendVarTransform.emptyReplacements()));
// unassign changed equations and assigned vars
eqnslst1 = List.flatten(List.map1r(eqnslst,arrayGet,imapEqnIncRow));
ilst = List.map1r(eqnslst1,arrayGet,inAss2);
ilst = List.select1(ilst,intGt,0);
ass2 = List.fold1r(eqnslst1,arrayUpdate,-1,inAss2);
ass1 = List.fold1r(ilst,arrayUpdate,-1,inAss1);
// update IncidenceMatrix
Debug.fcall(Flags.BLT_DUMP, print, "Replaced final Parameter in Eqns\n");
syst = BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching);
Debug.fcall(Flags.BLT_DUMP, print, "Update Incidence Matrix: ");
Debug.fcall(Flags.BLT_DUMP, BackendDump.debuglst,(eqnslst,intString," ","\n"));
(syst,mapEqnIncRow,mapIncRowEqn) = BackendDAEUtil.updateIncidenceMatrixScalar(syst,BackendDAE.SOLVABLE(), eqnslst, imapEqnIncRow, imapIncRowEqn);
then
(syst,ishared,ass1,ass2,inStateOrd,inOrgEqnsLst,mapEqnIncRow,mapIncRowEqn);

// if size of unmatched eqns is not equal to size of states without used derivative change first to algebraic
// until I have a better sulution
case (false,i::_,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
case (false,i::ilst,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
equation
// change varKind
var = BackendVariable.getVarAt(v,i);
varlst = {var};
Debug.fcall(Flags.BLT_DUMP, print, "Change varKind to algebraic for\n");
Debug.fcall(Flags.BLT_DUMP, BackendDump.dumpVars, varlst);
varlst = BackendVariable.setVarsKind(varlst,BackendDAE.DUMMY_STATE());
varlst = BackendVariable.setVarsKind(varlst,BackendDAE.VARIABLE());
v1 = BackendVariable.addVars(varlst,v);
varlst = List.map1r(ilst,BackendVariable.getVarAt,v);
Debug.fcall(Flags.BLT_DUMP, print, "Other Candidates are\n");
Debug.fcall(Flags.BLT_DUMP, BackendDump.dumpVars, varlst);
// update IncidenceMatrix
eqnslst1 = BackendDAETransform.collectVarEqns({i},{},mt,arrayLength(mt));
syst = BackendDAE.EQSYSTEM(v1,eqns,SOME(m),SOME(mt),matching);
Expand All @@ -1016,6 +1059,14 @@ algorithm
(syst,mapEqnIncRow,mapIncRowEqn) = BackendDAEUtil.updateIncidenceMatrixScalar(syst,BackendDAE.SOLVABLE(), eqnslst1, imapEqnIncRow, imapIncRowEqn);
then
(syst,ishared,inAss1,inAss2,inStateOrd,inOrgEqnsLst,mapEqnIncRow,mapIncRowEqn);

case (false,_,_,_,_,_,_,_,BackendDAE.EQSYSTEM(v,eqns,SOME(m),SOME(mt),matching),_,_,_,_,_,_,_)
equation
varlst = List.map1r(unassignedStates,BackendVariable.getVarAt,v);
Debug.fcall(Flags.BLT_DUMP, print, "unassignedStates\n");
Debug.fcall(Flags.BLT_DUMP, BackendDump.dumpVars, varlst);
then
fail();
end matchcontinue;
end handleundifferntiableMSS;

Expand Down Expand Up @@ -5059,6 +5110,13 @@ algorithm
(outVars,outChangedVars) = changeDerVariablestoStates1(rest,ilst,vars,i::inChangedVars);
then
(outVars,outChangedVars);
case ((v as BackendDAE.VAR(varKind=BackendDAE.DUMMY_STATE()))::rest,i::ilst,_,_)
equation
v = BackendVariable.setVarKind(v,BackendDAE.STATE());
vars = BackendVariable.addVar(v,inVars);
(outVars,outChangedVars) = changeDerVariablestoStates1(rest,ilst,vars,i::inChangedVars);
then
(outVars,outChangedVars);
case ((v as BackendDAE.VAR(varKind=BackendDAE.DUMMY_DER()))::rest,i::ilst,_,_)
equation
v = BackendVariable.setVarKind(v,BackendDAE.STATE());
Expand Down Expand Up @@ -5155,12 +5213,12 @@ algorithm
vars = BackendVariable.daeVars(isyst);
eqns = BackendEquation.daeEqns(isyst);
//(_,m,mt) = BackendDAEUtil.getIncidenceMatrix(isyst,BackendDAE.NORMAL());
mapIncRowEqn = listArray(List.intRange(arrayLength(m)));
//(_,m,mt,_,mapIncRowEqn) = BackendDAEUtil.getIncidenceMatrixScalar(isyst,BackendDAE.NORMAL());
//mapIncRowEqn = listArray(List.intRange(arrayLength(m)));
(_,m,mt,_,mapIncRowEqn) = BackendDAEUtil.getIncidenceMatrixScalar(isyst,BackendDAE.NORMAL());
graph = GraphML.getGraph("G",false);
((_,graph)) = BackendVariable.traverseBackendDAEVars(vars,addVarGraph,(1,graph));
neqns = BackendDAEUtil.equationArraySize(eqns);
//neqns = BackendDAEUtil.equationSize(eqns);
//neqns = BackendDAEUtil.equationArraySize(eqns);
neqns = BackendDAEUtil.equationSize(eqns);
eqnsids = List.intRange(neqns);
graph = List.fold2(eqnsids,addEqnGraph,eqns,mapIncRowEqn,graph);
((_,_,graph)) = List.fold(eqnsids,addEdgesGraph,(1,m,graph));
Expand Down
46 changes: 39 additions & 7 deletions SimulationRuntime/c/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ ENDIF(NOT OMDEV)

INCLUDE_DIRECTORIES(${OMDEV}/lib/expat-win32-msvc)
link_directories(${OMDEV}/lib/expat-win32-msvc)
link_directories(${OMDEV}/lib/lapack-win32-msvc)

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

INCLUDE_DIRECTORIES(${OMDEV}/lib/expat-win32-msvc)
link_directories(${OMDEV}/lib/expat-win32-msvc)
link_directories(${OMDEV}/lib/lapack-win32-msvc)

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

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

# Dependencies
ADD_DEPENDENCIES(${model} ${model}codegen)
Expand Down Expand Up @@ -220,18 +222,46 @@ ENDIF(SUNDIALS_INCLUDE_DIR AND

INCLUDE_DIRECTORIES(${OMDEV}/lib/expat-win32-msvc)
link_directories(${OMDEV}/lib/expat-win32-msvc)
link_directories(${OMDEV}/lib/lapack-win32-msvc)

# custom command to copy xml file
# custom command to copy expat.dll file
SET(expat_CODE ${OMDEV}/lib/expat-win32-msvc/libexpat.dll)
STRING(REGEX REPLACE "/" "\\\\" expat_CODE_NEU ${expat_CODE})
SET(expat_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/libexpat.dll)
STRING(REGEX REPLACE "/" "\\\\" expat_OUTPUT_NEU ${expat_OUTPUT})
ADD_CUSTOM_COMMAND(OUTPUT ${expat_OUTPUT}

ADD_CUSTOM_COMMAND(OUTPUT ${expat_OUTPUT}
COMMAND ${COPY} ${expat_CODE_NEU} ${expat_OUTPUT_NEU}
WORKING_DIRECTORY ${dir}
COMMENT "copy file ${expat_CODE_NEU} to ${expat_OUTPUT_NEU}")
# target fuer OM_OUTPUT
ADD_CUSTOM_TARGET(expat${model} ALL DEPENDS ${expat_OUTPUT})


SET(lapack_CODE ${OMDEV}/lib/lapack-win32-msvc/lapack_win32_MT.dll)
STRING(REGEX REPLACE "/" "\\\\" lapack_CODE_NEU ${lapack_CODE})
SET(lapack_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/lapack_win32_MT.dll)
STRING(REGEX REPLACE "/" "\\\\" lapack_OUTPUT_NEU ${lapack_OUTPUT})

ADD_CUSTOM_COMMAND(OUTPUT ${lapack_OUTPUT} ${blas_OUTPUT} ${lapack_OUTPUT}
COMMAND ${COPY} ${lapack_CODE_NEU} ${lapack_OUTPUT_NEU}
WORKING_DIRECTORY ${dir}
COMMENT "copy file ${lapack_CODE_NEU} to ${lapack_OUTPUT_NEU}")
# target fuer OM_OUTPUT
ADD_CUSTOM_TARGET(lapack${model} ALL DEPENDS ${lapack_OUTPUT})


SET(blas_CODE ${OMDEV}/lib/lapack-win32-msvc/blas_win32_MT.dll)
STRING(REGEX REPLACE "/" "\\\\" blas_CODE_NEU ${blas_CODE})
SET(blas_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/blas_win32_MT.dll)
STRING(REGEX REPLACE "/" "\\\\" blas_OUTPUT_NEU ${blas_OUTPUT})

ADD_CUSTOM_COMMAND(OUTPUT ${blas_OUTPUT} ${blas_OUTPUT} ${lapack_OUTPUT}
COMMAND ${COPY} ${blas_CODE_NEU} ${blas_OUTPUT_NEU}
WORKING_DIRECTORY ${dir}
COMMENT "copy file ${blas_CODE_NEU} to ${blas_OUTPUT_NEU}")
# target fuer OM_OUTPUT
ADD_CUSTOM_TARGET(blas${model} ALL DEPENDS ${blas_OUTPUT})

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

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

# Dependencies
ADD_DEPENDENCIES(${model}cp_xml ${model}codegen expat)
ADD_DEPENDENCIES(${model}cp_xml ${model}codegen expat${model} lapack${model} blas${model})
ADD_DEPENDENCIES(${model} ${model}cp_xml)

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

INCLUDE_DIRECTORIES(${OMDEV}/lib/expat-win32-msvc)
link_directories(${OMDEV}/lib/expat-win32-msvc)
link_directories(${OMDEV}/lib/lapack-win32-msvc)

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

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

# Dependencies
ADD_DEPENDENCIES(${model} ${model}codegen)
Expand Down Expand Up @@ -411,6 +442,7 @@ ENDIF(SUNDIALS_INCLUDE_DIR AND

INCLUDE_DIRECTORIES(${OMDEV}/lib/expat-win32-msvc)
link_directories(${OMDEV}/lib/expat-win32-msvc)
link_directories(${OMDEV}/lib/lapack-win32-msvc)

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

# Dependencies
ADD_DEPENDENCIES(${model} ${model}codegen)
Expand Down

0 comments on commit 60bef9f

Please sign in to comment.