Skip to content

Commit cab8786

Browse files
niklworsOpenModelica-Hudson
authored andcommitted
Separated nonlinear and linear system and the corresponding solver in two classes
-adapted Newton,Kinsol,Umfpack,Hybrj,Broyden for new linear and nonlinear System/AlgLoopDefaultImplementation.cpp -separted AlgLoopDefaultImplementation in two classes -adapted cpp and fmu cpp tempalted to new linear and nonlinear System/AlgLoopDefaultImplementation.cpp
1 parent d60d7e6 commit cab8786

File tree

72 files changed

+2073
-1807
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+2073
-1807
lines changed

Compiler/SimCode/SimCodeUtil.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3354,7 +3354,7 @@ algorithm
33543354
(beqs, sources) = BackendDAEUtil.getEqnSysRhs(inEquationArray, inVars, SOME(inFuncs));
33553355
beqs = listReverse(beqs);
33563356
simJac = List.map1(jac, jacToSimjac, inVars);
3357-
//simJac = List.sort(simJac,simJacCSRToCSC);
3357+
simJac = List.sort(simJac,simJacCSRToCSC);
33583358

33593359
then ({SimCode.SES_LINEAR(SimCode.LINEARSYSTEM(iuniqueEqIndex, mixedEvent, simVars, beqs, simJac, {}, NONE(), sources, 0), NONE())}, iuniqueEqIndex+1, itempvars);
33603360

Compiler/Template/CodegenCpp.tpl

Lines changed: 194 additions & 267 deletions
Large diffs are not rendered by default.

Compiler/Template/CodegenFMUCpp.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -677,7 +677,7 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
677677
# /MD - link with MSVCRT.LIB
678678
# /link - [linker options and libraries]
679679
# /LIBPATH: - Directories where libs can be found
680-
OMCPP_SOLVER_LIBS=OMCppNewton_static.lib OMCppDgesv_static.lib
680+
OMCPP_SOLVER_LIBS=OMCppNewton_static.lib OMCppDgesv_static.lib OMCppDgesvSolver_static.lib
681681
EXTRA_LIBS=<%dirExtra%> <%libsExtra%>
682682
LDFLAGS=/link /DLL /NOENTRY /LIBPATH:"<%makefileParams.omhome%>/lib/omc/cpp/msvc" /LIBPATH:"<%makefileParams.omhome%>/bin" OMCppSystem_static.lib OMCppMath_static.lib OMCppExtensionUtilities_static.lib OMCppFMU_static.lib $(OMCPP_SOLVER_LIBS) ModelicaExternalC.lib ModelicaStandardTables.lib OMCppModelicaUtilities_static.lib $(EXTRA_LIBS)
683683
PLATFORM="<%makefileParams.platform%>"
@@ -766,7 +766,7 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
766766
CALCHELPERMAINFILE=OMCpp<%fileNamePrefix%>CalcHelperMain.cpp
767767

768768
# CVode can be used for Co-Simulation FMUs, Kinsol is available to handle non linear equation systems
769-
OMCPP_SOLVER_LIBS=-lOMCppNewton_static
769+
OMCPP_SOLVER_LIBS=-lOMCppNewton_static -lOMCppDgesvSolver_static
770770
ifeq ($(USE_FMU_SUNDIALS),ON)
771771
$(eval OMCPP_SOLVER_LIBS=$(OMCPP_SOLVER_LIBS) -lOMCppKinsol_static $(SUNDIALS_LIBRARIES))
772772
$(eval CFLAGS=-DENABLE_SUNDIALS_STATIC $(CFLAGS))

Compiler/Template/SimCodeTV.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3348,6 +3348,7 @@ package Flags
33483348
constant DebugFlag MULTIRATE_PARTITION;
33493349
constant ConfigFlag DAE_MODE;
33503350
constant ConfigFlag EQUATIONS_PER_FILE;
3351+
constant ConfigFlag GENERATE_SYMBOLIC_JACOBIAN;
33513352

33523353
function set
33533354
input DebugFlag inFlag;

SimulationRuntime/cpp/CMakeLists.txt

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ OPTION(USE_BOOST_REALPATHS "USE_BOOST_REALPATHS" OFF)
7676
OPTION(RUNTIME_PROFILING "RUNTIME_PROFILING" OFF)
7777
OPTION(FMU_SUNDIALS "FMU_SUNDIALS" OFF)
7878
OPTION(SUNDIALS_ROOT "SUNDIALS ROOT" "")
79+
OPTION(KLU_ROOT "KLU ROOT" "")
7980
OPTION(USE_CPP_03 "USE_CPP_03" OFF)
8081

8182
#Set Variables
@@ -116,6 +117,8 @@ SET(RTEulerName ${LIBPREFIX}RTEuler${LIBSUFFIX})
116117
SET(IdaName ${LIBPREFIX}Ida${LIBSUFFIX})
117118
SET(IdasName ${LIBPREFIX}Idas${LIBSUFFIX})
118119
SET(KinsolName ${LIBPREFIX}Kinsol${LIBSUFFIX})
120+
SET(LinearSolverName ${LIBPREFIX}LinearSolver${LIBSUFFIX})
121+
SET(DgesvSolverName ${LIBPREFIX}DgesvSolver${LIBSUFFIX})
119122
SET(ModelicaName ${LIBPREFIX}Modelica${LIBSUFFIX})
120123
SET(NewtonName ${LIBPREFIX}Newton${LIBSUFFIX})
121124
SET(BroydenName ${LIBPREFIX}Broyden${LIBSUFFIX})
@@ -130,6 +133,7 @@ SET(FMUName ${LIBPREFIX}FMU${LIBSUFFIX})
130133
SET(DgesvName ${LIBPREFIX}Dgesv) # only static version
131134

132135
SET(USE_MICO OFF)
136+
SET(USE_KLU OFF)
133137
SET(REDUCE_DAE OFF)
134138
IF(NOT FMU_TARGET OR FMU_SUNDIALS)
135139
SET(USE_SUNDIALS ON)
@@ -566,6 +570,56 @@ IF(USE_SUNDIALS)
566570
ENDIF(WIN32)
567571
ENDIF(USE_SUNDIALS)
568572

573+
# Find Klu solvers
574+
IF(USE_KLU)
575+
#set klu solvers include and library directories
576+
IF(MSVC)
577+
SET(Klu_Path "${CMAKE_SOURCE_DIR}/../../3rdParty/SuiteSparse/install_msvc")
578+
ELSE(MSVC)
579+
SET(Klu_Path "${CMAKE_SOURCE_DIR}/../../3rdParty/SuiteSparse/build")
580+
ENDIF(MSVC)
581+
SET(KLU_INLCUDE_HOME ${Klu_Path}/include/omc/c/suitesparse/Include)
582+
SET(KLU_LIBRARY_RELEASE_HOME ${Klu_Path}/lib/omc)
583+
MESSAGE(STATUS "Klu include:")
584+
MESSAGE(STATUS "${KLU_INLCUDE_HOME}")
585+
MESSAGE(STATUS "Klu library:")
586+
MESSAGE(STATUS "${KLU_LIBRARY_RELEASE_HOME}")
587+
588+
FIND_PATH(KLU_INCLUDE_DIR klu.h PATHS ${KLU_INLCUDE_HOME} $ENV{KLU_ROOT}/include)
589+
IF (NOT KLU_INCLUDE_DIR)
590+
MESSAGE(FATAL_ERROR "Could not find Klu, specify environment variable KLU_ROOT")
591+
ELSE(NOT KLU_INCLUDE_DIR)
592+
INCLUDE_DIRECTORIES(${KLU_INCLUDE_DIR})
593+
ENDIF(NOT KLU_INCLUDE_DIR)
594+
595+
FIND_LIBRARY(KLU_LIB "klu" NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH PATHS ${KLU_LIBRARY_RELEASE_HOME} $ENV{SUNDIALS_ROOT}/lib)
596+
IF(NOT KLU_LIB)
597+
MESSAGE(FATAL_ERROR "Could not find klu library!")
598+
ENDIF()
599+
600+
FIND_LIBRARY(AMD_LIB "amd" NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH PATHS ${KLU_LIBRARY_RELEASE_HOME} $ENV{SUNDIALS_ROOT}/lib)
601+
IF(NOT AMD_LIB)
602+
MESSAGE(FATAL_ERROR "Could not find klu amd library!")
603+
ENDIF()
604+
605+
FIND_LIBRARY(BTF "btf" NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH PATHS ${KLU_LIBRARY_RELEASE_HOME} $ENV{SUNDIALS_ROOT}/lib)
606+
IF(NOT BTF)
607+
MESSAGE(FATAL_ERROR "Could not find klu btf library!")
608+
ENDIF()
609+
610+
FIND_LIBRARY(COLAMD "colamd" NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH PATHS ${KLU_LIBRARY_RELEASE_HOME} $ENV{SUNDIALS_ROOT}/lib)
611+
IF(NOT COLAMD)
612+
MESSAGE(FATAL_ERROR "Could not find klu colamd library!")
613+
ENDIF()
614+
615+
SET(KLU_LIBRARIES ${KLU_LIB} ${AMD_LIB} ${BTF} ${COLAMD})
616+
617+
MESSAGE(STATUS "Klu Libraries:")
618+
MESSAGE(STATUS "${KNU_LIBRARIES}")
619+
620+
ADD_DEFINITIONS(-Dklu)
621+
ENDIF(USE_KLU)
622+
569623
#Handle umfpack
570624
#FIND_PACKAGE(SuiteSparse)
571625
IF(SUITESPARSE_UMFPACK_FOUND)
@@ -659,7 +713,7 @@ if(NOT FMU_TARGET)
659713
add_subdirectory(Solver/Hybrj)
660714
add_subdirectory(Solver/UmfPack)
661715
add_subdirectory(Solver/Peer)
662-
716+
add_subdirectory(Solver/LinearSolver)
663717
# add simulation solvers
664718
add_subdirectory(Solver/Euler)
665719
add_subdirectory(Solver/RK12)
@@ -704,6 +758,13 @@ IF(USE_SUNDIALS)
704758

705759
GET_TARGET_PROPERTY(libKinsol ${KinsolName} LOCATION)
706760
GET_FILENAME_COMPONENT(libKinsolName ${libKinsol} NAME)
761+
762+
GET_TARGET_PROPERTY(libLinearSolver ${LinearSolverName} LOCATION)
763+
GET_FILENAME_COMPONENT(libLinearSolverName ${libLinearSolver} NAME)
764+
765+
GET_TARGET_PROPERTY(libDgesvSolver ${DgesvSolverName} LOCATION)
766+
GET_FILENAME_COMPONENT(libDgesvSolverName ${libDgesvSolver} NAME)
767+
707768
#GET_TARGET_PROPERTY(libIdas ${IdasName} LOCATION)
708769
#GET_FILENAME_COMPONENT(libIdasName ${libIdas} NAME)
709770
#GET_TARGET_PROPERTY(libIda ${IdaName} LOCATION)
@@ -796,6 +857,8 @@ set (CPPDASSL_LIB ${libCppDASSLName})
796857
set (RTRK_LIB ${libRTRKName})
797858
set (SYSTEM_LIB ${libSystemName})
798859
set (SOLVER_LIB ${libSolverName})
860+
SET (LINEARSOLVER_LIB ${libLinearSolverName})
861+
SET (DGESVSOLVER_LIB ${libDgesvSolverName})
799862
set (MATH_LIB ${libMathName})
800863
set (HYBRJ_LIB ${libHybrjName})
801864
set (SIMOBJFACTORY_LIB ${libSimObjFactoryName})

SimulationRuntime/cpp/Core/Math/Functions.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,6 @@ int pivot(double *A, int n_rows, int n_cols, int *rowInd, int *colInd)
158158
/* all fine */
159159
return 0;
160160
}
161-
void getSparseMatrixData(sparsematrix_t& A, double** px)
162-
{
163-
*px = bindings::begin_value(A);
164-
}
165161

166162

167163
/** @} */ // end of math

SimulationRuntime/cpp/Core/Modelica/ModelicaSystem.cpp

Lines changed: 0 additions & 229 deletions
This file was deleted.

SimulationRuntime/cpp/Core/SimulationSettings/GlobalSettings.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ GlobalSettings::GlobalSettings()
1515
, _emitResults(EMIT_ALL)
1616
, _infoOutput(true)
1717
, _selected_solver("Euler")
18-
, _selected_lin_solver("Newton")
18+
, _selected_lin_solver("linearSolver")
1919
, _selected_nonlin_solver("Newton")
2020
, _resultsfile_name("results.csv")
2121
, _endless_sim(false)

0 commit comments

Comments
 (0)