Skip to content

Commit

Permalink
Include dgesv in static source FMU external code
Browse files Browse the repository at this point in the history
  • Loading branch information
sjoelund committed Oct 27, 2015
1 parent 7c902c1 commit 0f589ef
Show file tree
Hide file tree
Showing 8 changed files with 28 additions and 11 deletions.
2 changes: 1 addition & 1 deletion 3rdParty
Submodule 3rdParty updated 48 files
+3 −1 FMIL/src/Util/src/JM/jm_portability.c
+1 −0 dgesv.txt
+13 −0 dgesv/README.md
+389 −0 dgesv/blas/dgemm.c
+194 −0 dgesv/blas/dger.c
+96 −0 dgesv/blas/dscal.c
+114 −0 dgesv/blas/dswap.c
+490 −0 dgesv/blas/dtrsm.c
+93 −0 dgesv/blas/idamax.c
+117 −0 dgesv/blas/lsame.c
+85 −0 dgesv/blas/zcopy.c
+698 −0 dgesv/blas/zgemm.c
+412 −0 dgesv/blas/zgemv.c
+218 −0 dgesv/blas/zgerc.c
+81 −0 dgesv/blas/zscal.c
+688 −0 dgesv/blas/ztrmm.c
+554 −0 dgesv/blas/ztrmv.c
+160 −0 dgesv/include/blaswrap.h
+7,262 −0 dgesv/include/clapack.h
+225 −0 dgesv/include/f2c.h
+138 −0 dgesv/lapack/dgesv.c
+194 −0 dgesv/lapack/dgetf2.c
+219 −0 dgesv/lapack/dgetrf.c
+186 −0 dgesv/lapack/dgetrs.c
+1,006 −0 dgesv/lapack/dlamch.c
+158 −0 dgesv/lapack/dlaswp.c
+183 −0 dgesv/lapack/dtrtrs.c
+166 −0 dgesv/lapack/ieeeck.c
+654 −0 dgesv/lapack/ilaenv.c
+94 −0 dgesv/lapack/ilazlc.c
+96 −0 dgesv/lapack/ilazlr.c
+282 −0 dgesv/lapack/iparmq.c
+65 −0 dgesv/lapack/xerbla.c
+95 −0 dgesv/lapack/zlacgv.c
+200 −0 dgesv/lapack/zlarf.c
+839 −0 dgesv/lapack/zlarfb.c
+362 −0 dgesv/lapack/zlarft.c
+185 −0 dgesv/lapack/zung2r.c
+310 −0 dgesv/lapack/zungbr.c
+193 −0 dgesv/lapack/zungl2.c
+287 −0 dgesv/lapack/zunglq.c
+288 −0 dgesv/lapack/zungqr.c
+19 −0 dgesv/libf2c/d_cnjg.c
+16 −0 dgesv/libf2c/i_len.c
+19 −0 dgesv/libf2c/i_nint.c
+41 −0 dgesv/libf2c/pow_di.c
+50 −0 dgesv/libf2c/s_cmp.c
+57 −0 dgesv/libf2c/s_copy.c
2 changes: 1 addition & 1 deletion Compiler/Script/CevalScriptBackend.mo
Expand Up @@ -2644,7 +2644,7 @@ algorithm
"CC="+System.getCCompiler(),
"CFLAGS="+quote+System.getCFlags()+quote,
"CPPFLAGS=",
"LDFLAGS="+quote+System.getLDFlags()+" "+(if staticSourceCodeFMU then System.getRTLibsFMU() /*TODO: Should not be needed, once we remove the need for lapack/expat*/ else System.getRTLibsSim()) + quote,
"LDFLAGS="+quote+System.getLDFlags()+" "+(if staticSourceCodeFMU then "" else System.getRTLibsSim()) + quote,
"FMIPLATFORM="+System.modelicaPlatform(),
"DLLEXT="+System.getDllExt(),
"LD="+quote+System.getLinker()+quote,
Expand Down
1 change: 0 additions & 1 deletion Compiler/Template/CodegenC.tpl
Expand Up @@ -1007,7 +1007,6 @@ template simulationFileHeader(SimCode simCode)
#include "simulation/solver/nonlinearSystem.h"
#include "simulation/solver/mixedSystem.h"

#include <assert.h>
#include <string.h>

#include "<%fileNamePrefix%>_functions.h"
Expand Down
2 changes: 1 addition & 1 deletion Compiler/Template/CodegenFMU.tpl
Expand Up @@ -1006,7 +1006,7 @@ match platform
<%\t%>$(LD) -o <%modelNamePrefix%>$(DLLEXT) $(MAINOBJ) $(OFILES) $(RUNTIMEFILES) <%dirExtra%> <%libsPos1%> <%libsPos2%> $(LDFLAGS)
<%\t%>mkdir -p ../binaries/$(FMIPLATFORM)
<%\t%>cp <%fileNamePrefix%>$(DLLEXT) <%fileNamePrefix%>_FMU.libs ../binaries/$(FMIPLATFORM)/
<%\t%>rm -f <%fileNamePrefix%>.def <%fileNamePrefix%>.o <%fileNamePrefix%>$(DLLEXT) $(OFILES) $(RUNTIMEFILES)
<%\t%>rm -f <%fileNamePrefix%>.def <%fileNamePrefix%>.o <%fileNamePrefix%>$(DLLEXT) $(MAINOBJ) $(OFILES) $(RUNTIMEFILES)
<%\t%>cd .. && rm -f ../<%fileNamePrefix%>.fmu && zip -r ../<%fileNamePrefix%>.fmu *

>>
Expand Down
15 changes: 13 additions & 2 deletions SimulationRuntime/c/Makefile.common
Expand Up @@ -24,6 +24,7 @@ builddir = ../../build

CDASKRDIR=$(top_builddir)/3rdParty/Cdaskr/solver/
CMINPACKDIR=$(top_builddir)/3rdParty/CMinpack/
LAPACKDIR=$(top_builddir)/3rdParty/dgesv/

RUNTIME_HEADERS = \
./omc_inline.h \
Expand Down Expand Up @@ -252,8 +253,18 @@ sourcedist:

sourcedist_internal:
mkdir -p $(builddir_inc)/c/external_solvers external_solvers
cp $(CMINPACK_OBJS:%=$(CMINPACKDIR)/%.c) "external_solvers/"
cp "$(CMINPACKDIR)/minpack.h" "$(CMINPACKDIR)/cminpack.h" "$(builddir_inc)/c/external_solvers"
cp \
$(CMINPACK_OBJS:%=$(CMINPACKDIR)/%.c) \
$(LAPACK_OBJS:%=$(LAPACKDIR)/lapack/%.c) \
$(BLAS_OBJS:%=$(LAPACKDIR)/blas/%.c) \
$(LIBF2C_OBJS:%=$(LAPACKDIR)/libf2c/%.c) \
"./external_solvers/"
cp \
"$(CMINPACKDIR)/minpack.h" "$(CMINPACKDIR)/cminpack.h" \
"$(LAPACKDIR)/include/blaswrap.h" \
"$(LAPACKDIR)/include/clapack.h" \
"$(LAPACKDIR)/include/f2c.h" \
"$(builddir_inc)/c/external_solvers"
cd $(builddir_inc)/c/ && mkdir -p $(ALL_PATHS)
(D=`pwd` && cd $(builddir_inc)/c/ $(FMI_ME_OBJS:%.o= && (OMCFILE=% && cp $$D/$$OMCFILE.c $$OMCFILE.c)))
cp Makefile.objs $(builddir_inc)/c/
Expand Down
9 changes: 8 additions & 1 deletion SimulationRuntime/c/Makefile.objs
Expand Up @@ -121,11 +121,18 @@ FMIOBJSPATH = $(FMI_OBJS:%=$(FMIPATH)%)

ALL_OBJS = $(METAOBJSPATH) $(UTILOBJSPATH) $(MATHOBJSPATH) $(SOLVEROBJSPATH) $(INITIALIZATIONOBJSPATH) $(OPTIMIZATIONOBJSPATH) $(RESULTSOBJSPATH) $(SIMOBJSPATH) $(SIMOBJSPATHC) meta/meta_modelica_catch$(OBJ_EXT)

# External solvers needed by FMI for ME
CMINPACK_OBJS = enorm_ hybrj_ dpmpar_ qrfac_ qform_ dogleg_ r1updt_ r1mpyq_
LAPACK_OBJS = dgesv dgetrf dlamch dtrtrs ilaenv ilazlr xerbla zlarfb zlarft zungbr zunglq dgetf2 dgetrs dlaswp ieeeck ilazlc iparmq zlacgv zlarf zung2r zungl2 zungqr
BLAS_OBJS = dgemm dger dscal dswap dtrsm idamax lsame zcopy zgemm zgemv zgerc zscal ztrmm ztrmv
LIBF2C_OBJS = d_cnjg i_len i_nint pow_di s_cmp s_copy
# Only objects needed for FMI for Modelica Exchange
FMI_ME_OBJS = $(UTILOBJSPATH) $(MATHOBJSPATH) $(SIMOBJSPATHC) $(SOLVEROBJSPATH) $(INITIALIZATIONOBJSPATH) \
./meta/meta_modelica_catch$(OBJ_EXT) \
$(CMINPACK_OBJS:%=./external_solvers/%$(OBJ_EXT))
$(CMINPACK_OBJS:%=./external_solvers/%$(OBJ_EXT)) \
$(LAPACK_OBJS:%=./external_solvers/%$(OBJ_EXT)) \
$(BLAS_OBJS:%=./external_solvers/%$(OBJ_EXT)) \
$(LIBF2C_OBJS:%=./external_solvers/%$(OBJ_EXT)) \

ALL_HEADERS = $(METAHFILESPATH) $(UTILHFILESPATH) $(MATHHFILESPATH) $(SOLVERHFILESPATH) $(INITIALIZATIONHFILESPATH) $(OPTIMIZATIONHFILESPATH) $(RESULTSHFILESPATH) $(SIMHFILESPATH)
ALL_PATHS = $(METAPATH) $(FMIPATH) $(UTILPATH) $(MATHPATH) $(SOLVERPATH) $(INITIALIZATIONPATH) $(OPTIMIZATIONPATH) $(RESULTSPATH) $(SIMPATH) linearization/
Expand Down
4 changes: 2 additions & 2 deletions SimulationRuntime/fmi/export/fmi1/fmu1_model_interface.c
Expand Up @@ -355,9 +355,9 @@ fmiStatus fmiSetContinuousStates(fmiComponent c, const fmiReal x[], size_t nx)
fmiValueReference vr = vrStates[i];
if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log",
"fmiSetContinuousStates: #r%d#=%.16g", vr, x[i]);
assert(vr>=0 && vr<NUMBER_OF_REALS);
if (setReal(comp, vr, x[i]) != fmiOK) // to be implemented by the includer of this file
if (vr<0 || vr>=NUMBER_OF_REALS || setReal(comp, vr, x[i]) != fmiOK) { // to be implemented by the includer of this file
return fmiError;
}
}
#endif
return fmiOK;
Expand Down
4 changes: 2 additions & 2 deletions SimulationRuntime/fmi/export/fmi2/fmu2_model_interface.c
Expand Up @@ -805,9 +805,9 @@ fmi2Status fmi2SetContinuousStates(fmi2Component c, const fmi2Real x[], size_t n
for (i = 0; i < nx; i++) {
fmi2ValueReference vr = vrStates[i];
FILTERED_LOG(comp, fmi2OK, LOG_FMI2_CALL, "fmi2SetContinuousStates: #r%d# = %.16g", vr, x[i])
assert(vr >= 0 && vr < NUMBER_OF_REALS);
if (setReal(comp, vr, x[i]) != fmi2OK) // to be implemented by the includer of this file
if (vr < 0 || vr >= NUMBER_OF_REALS|| setReal(comp, vr, x[i]) != fmi2OK) { // to be implemented by the includer of this file
return fmi2Error;
}
}
#endif
comp->_need_update = 1;
Expand Down

0 comments on commit 0f589ef

Please sign in to comment.