Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
E
EMAM2Cpp
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
12
Issues
12
List
Boards
Labels
Service Desk
Milestones
Iterations
Merge Requests
1
Merge Requests
1
Requirements
Requirements
List
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Test Cases
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issue
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
monticore
EmbeddedMontiArc
generators
EMAM2Cpp
Commits
e07c9736
Commit
e07c9736
authored
Jan 02, 2021
by
Malte Heithoff
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
semantics
parent
d4717d80
Pipeline
#384373
failed with stage
in 1 minute and 6 seconds
Changes
53
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
53 changed files
with
481 additions
and
217 deletions
+481
-217
CMakeLists.txt
CMakeLists.txt
+2
-0
build.bat
build.bat
+3
-1
looptest/CMakeLists.txt
looptest/CMakeLists.txt
+5
-2
looptest/mainOscillation.cpp
looptest/mainOscillation.cpp
+2
-1
looptest/mainParallelLoop.cpp
looptest/mainParallelLoop.cpp
+14
-0
looptest/mainSerialLoop.cpp
looptest/mainSerialLoop.cpp
+2
-1
looptest/mainSimpleLoop.cpp
looptest/mainSimpleLoop.cpp
+2
-1
pom.xml
pom.xml
+4
-4
src/main/java/de/monticore/lang/monticar/generator/cmake/CMakeConfig.java
.../monticore/lang/monticar/generator/cmake/CMakeConfig.java
+3
-4
src/main/java/de/monticore/lang/monticar/generator/cpp/ExecutionStepperHelper.java
...e/lang/monticar/generator/cpp/ExecutionStepperHelper.java
+18
-7
src/main/java/de/monticore/lang/monticar/generator/cpp/GeneratorCPP.java
...e/monticore/lang/monticar/generator/cpp/GeneratorCPP.java
+21
-19
src/main/java/de/monticore/lang/monticar/generator/cpp/MathFunctionFixer.java
...ticore/lang/monticar/generator/cpp/MathFunctionFixer.java
+1
-1
src/main/java/de/monticore/lang/monticar/generator/cpp/loopSolver/EquationSystemViewModel.java
...car/generator/cpp/loopSolver/EquationSystemViewModel.java
+54
-2
src/main/java/de/monticore/lang/monticar/generator/cpp/loopSolver/NumericSolverOptions.java
...nticar/generator/cpp/loopSolver/NumericSolverOptions.java
+20
-0
src/main/java/de/monticore/lang/monticar/generator/cpp/loopSolver/daecpp/DAECPPEquationSystemGenerator.java
.../cpp/loopSolver/daecpp/DAECPPEquationSystemGenerator.java
+5
-2
src/main/java/de/monticore/lang/monticar/generator/cpp/loopSolver/odeint/OdeintEquationSystemGenerator.java
.../cpp/loopSolver/odeint/OdeintEquationSystemGenerator.java
+65
-0
src/main/java/de/monticore/lang/monticar/generator/cpp/loopSolver/odeint/OdeintOptions.java
...nticar/generator/cpp/loopSolver/odeint/OdeintOptions.java
+28
-0
src/main/java/de/monticore/lang/monticar/generator/cpp/mathopt/optimizationSolver/solver/cplex/CplexSolverGeneratorImplementation.java
...lver/solver/cplex/CplexSolverGeneratorImplementation.java
+2
-4
src/main/java/de/monticore/lang/monticar/generator/cpp/mathopt/optimizationSolver/solver/ipopt/IpoptSolverGeneratorImplementation.java
...lver/solver/ipopt/IpoptSolverGeneratorImplementation.java
+2
-4
src/main/java/de/monticore/lang/monticar/generator/cpp/template/AllTemplates.java
...re/lang/monticar/generator/cpp/template/AllTemplates.java
+3
-0
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Add.emam
...icore/lang/monticar/semantics/library/arithmetic/Add.emam
+4
-4
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Constant.emam
.../lang/monticar/semantics/library/arithmetic/Constant.emam
+2
-2
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Division.emam
.../lang/monticar/semantics/library/arithmetic/Division.emam
+4
-4
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Gain.emam
...core/lang/monticar/semantics/library/arithmetic/Gain.emam
+3
-3
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Max.emam
...icore/lang/monticar/semantics/library/arithmetic/Max.emam
+2
-3
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Min.emam
...icore/lang/monticar/semantics/library/arithmetic/Min.emam
+5
-5
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Mod.emam
...icore/lang/monticar/semantics/library/arithmetic/Mod.emam
+4
-4
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Multiplication.emam
...monticar/semantics/library/arithmetic/Multiplication.emam
+3
-3
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Saturation.emam
...ang/monticar/semantics/library/arithmetic/Saturation.emam
+3
-3
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Subtract.emam
.../lang/monticar/semantics/library/arithmetic/Subtract.emam
+13
-0
src/main/resources/de/monticore/lang/monticar/semantics/library/basicLibrary/Delay.emam
...e/lang/monticar/semantics/library/basicLibrary/Delay.emam
+5
-5
src/main/resources/de/monticore/lang/monticar/semantics/library/basicLibrary/LookUp.emam
.../lang/monticar/semantics/library/basicLibrary/LookUp.emam
+3
-3
src/main/resources/de/monticore/lang/monticar/semantics/library/differential/Derivative.emam
...g/monticar/semantics/library/differential/Derivative.emam
+3
-3
src/main/resources/de/monticore/lang/monticar/semantics/library/differential/Integrator.emam
...g/monticar/semantics/library/differential/Integrator.emam
+4
-4
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/And.emam
.../monticore/lang/monticar/semantics/library/logic/And.emam
+3
-3
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Equals.emam
...nticore/lang/monticar/semantics/library/logic/Equals.emam
+4
-4
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Greater.emam
...ticore/lang/monticar/semantics/library/logic/Greater.emam
+4
-4
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/GreaterEquals.emam
.../lang/monticar/semantics/library/logic/GreaterEquals.emam
+4
-4
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Less.emam
...monticore/lang/monticar/semantics/library/logic/Less.emam
+4
-4
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/LessEquals.emam
...ore/lang/monticar/semantics/library/logic/LessEquals.emam
+5
-5
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Not.emam
.../monticore/lang/monticar/semantics/library/logic/Not.emam
+5
-5
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Or.emam
...e/monticore/lang/monticar/semantics/library/logic/Or.emam
+5
-5
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Smaller.emam
...ticore/lang/monticar/semantics/library/logic/Smaller.emam
+0
-12
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Switch.emam
...nticore/lang/monticar/semantics/library/logic/Switch.emam
+5
-6
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/SwitchB.emam
...ticore/lang/monticar/semantics/library/logic/SwitchB.emam
+0
-10
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/SwitchM.emam
...ticore/lang/monticar/semantics/library/logic/SwitchM.emam
+0
-10
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/SwitchMultiport.emam
...ang/monticar/semantics/library/logic/SwitchMultiport.emam
+0
-14
src/main/resources/template/loopSolver/daecpp/EquationSystem.ftl
...n/resources/template/loopSolver/daecpp/EquationSystem.ftl
+13
-9
src/main/resources/template/loopSolver/odeint/EquationSystem.ftl
...n/resources/template/loopSolver/odeint/EquationSystem.ftl
+65
-0
src/main/resources/template/loopSolver/odeint/RHS.ftl
src/main/resources/template/loopSolver/odeint/RHS.ftl
+24
-0
src/test/java/de/monticore/lang/monticar/generator/semantics/LoopTest.java
...monticore/lang/monticar/generator/semantics/LoopTest.java
+9
-4
src/test/resources/de/monticore/lang/monticar/semantics/loops/Oscillation.emam
.../monticore/lang/monticar/semantics/loops/Oscillation.emam
+10
-7
src/test/resources/de/monticore/lang/monticar/semantics/loops/OscillationAsSymbol.emam
...re/lang/monticar/semantics/loops/OscillationAsSymbol.emam
+7
-12
No files found.
CMakeLists.txt
View file @
e07c9736
...
...
@@ -5,7 +5,9 @@ enable_language(CXX)
set
(
SERIALLOOPINCLUDE target/generated-sources-cpp/serialLoop
)
set
(
SIMPLELOOPINCLUDE target/generated-sources-cpp/simpleLoop
)
set
(
OSCILLATIONINCLUDE target/generated-sources-cpp/oscillation
)
set
(
PARALLELLOOPINCLUDE target/generated-sources-cpp/parallelLoop
)
add_subdirectory
(
${
SERIALLOOPINCLUDE
}
)
add_subdirectory
(
${
SIMPLELOOPINCLUDE
}
)
add_subdirectory
(
${
OSCILLATIONINCLUDE
}
)
add_subdirectory
(
${
PARALLELLOOPINCLUDE
}
)
add_subdirectory
(
looptest
)
\ No newline at end of file
build.bat
View file @
e07c9736
if
exist
build
del
/F /Q /S
build
@ECHO
OFF
if
exist
build
del
/F /Q /S
build
>
nul
mkdir
build
cd
build
@ECHO
ON
cmake
..
cmake
--build
.
--config
release
cd
..
\ No newline at end of file
looptest/CMakeLists.txt
View file @
e07c9736
...
...
@@ -2,8 +2,6 @@ cmake_minimum_required(VERSION 3.5)
project
(
LoopTest CXX
)
set
(
CMAKE_CXX_STANDARD 11
)
message
(
"JO
${
CMAKE_CURRENT_SOURCE_DIR
}
${
OSCILLATIONINCLUDE
}
"
)
add_executable
(
Oscillation mainOscillation.cpp
)
target_include_directories
(
Oscillation PUBLIC
${
CMAKE_CURRENT_SOURCE_DIR
}
)
target_link_libraries
(
Oscillation de_monticore_lang_monticar_semantics_loops_oscillation
${
LIBS
}
)
...
...
@@ -18,3 +16,8 @@ add_executable(SimpleLoop mainSimpleLoop.cpp)
target_include_directories
(
SimpleLoop PUBLIC
${
CMAKE_CURRENT_SOURCE_DIR
}
)
target_link_libraries
(
SimpleLoop de_monticore_lang_monticar_semantics_loops_simpleLoop
${
LIBS
}
)
export
(
TARGETS SimpleLoop FILE SimpleLoop.cmake
)
add_executable
(
ParallelLoop mainParallelLoop.cpp
)
target_include_directories
(
ParallelLoop PUBLIC
${
CMAKE_CURRENT_SOURCE_DIR
}
)
target_link_libraries
(
ParallelLoop de_monticore_lang_monticar_semantics_loops_parallelLoop
${
LIBS
}
)
export
(
TARGETS ParallelLoop FILE ParallelLoop.cmake
)
looptest/mainOscillation.cpp
View file @
e07c9736
#include "de_monticore_lang_monticar_semantics_loops_oscillation.h"
#include "ExecutionStepper.h"
int
main
(
int
argc
,
char
**
argv
)
{
de_monticore_lang_monticar_semantics_loops_oscillation
instance
;
...
...
@@ -6,7 +7,7 @@ int main(int argc, char** argv)
int
i
;
for
(
i
=
1
;
i
<
atof
(
argv
[
1
]);
i
++
)
{
instance
.
execute
();
std
::
cout
<<
instance
.
out1
<<
"
\n
"
;
std
::
cout
<<
"t = "
<<
getCurrentTime
()
<<
":
\t
"
<<
instance
.
output
<<
"
\n
"
;
}
return
0
;
}
\ No newline at end of file
looptest/mainParallelLoop.cpp
0 → 100644
View file @
e07c9736
#include "de_monticore_lang_monticar_semantics_loops_parallelLoop.h"
#include "ExecutionStepper.h"
int
main
(
int
argc
,
char
**
argv
)
{
de_monticore_lang_monticar_semantics_loops_parallelLoop
instance
;
instance
.
init
();
int
i
;
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
instance
.
in1
=
atof
(
argv
[
i
]);
instance
.
execute
();
std
::
cout
<<
"t = "
<<
getCurrentTime
()
<<
":
\t
"
<<
instance
.
out1
<<
"
\n
"
;
}
return
0
;
}
\ No newline at end of file
looptest/mainSerialLoop.cpp
View file @
e07c9736
#include "de_monticore_lang_monticar_semantics_loops_serialLoop.h"
#include "ExecutionStepper.h"
int
main
(
int
argc
,
char
**
argv
)
{
de_monticore_lang_monticar_semantics_loops_serialLoop
instance
;
...
...
@@ -7,7 +8,7 @@ int main(int argc, char** argv)
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
instance
.
in1
=
atof
(
argv
[
i
]);
instance
.
execute
();
std
::
cout
<<
instance
.
out1
<<
"
\n
"
;
std
::
cout
<<
"t = "
<<
getCurrentTime
()
<<
":
\t
"
<<
instance
.
out1
<<
"
\n
"
;
}
return
0
;
}
\ No newline at end of file
looptest/mainSimpleLoop.cpp
View file @
e07c9736
#include "de_monticore_lang_monticar_semantics_loops_simpleLoop.h"
#include "ExecutionStepper.h"
int
main
(
int
argc
,
char
**
argv
)
{
de_monticore_lang_monticar_semantics_loops_simpleLoop
instance
;
...
...
@@ -7,7 +8,7 @@ int main(int argc, char** argv)
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
instance
.
in1
=
atof
(
argv
[
i
]);
instance
.
execute
();
std
::
cout
<<
instance
.
out1
<<
"
\n
"
;
std
::
cout
<<
"t = "
<<
getCurrentTime
()
<<
":
\t
"
<<
instance
.
out1
<<
"
\n
"
;
}
return
0
;
}
\ No newline at end of file
pom.xml
View file @
e07c9736
...
...
@@ -17,7 +17,7 @@
<properties>
<!-- .. EMA-Libraries ................................................. -->
<EmbeddedMontiArc-
semantics.version>
0.4.4-SNAPSHOT
</EmbeddedMontiArc-s
emantics.version>
<EmbeddedMontiArc-
executionSemantics.version>
0.4.4-SNAPSHOT
</EmbeddedMontiArc-executionS
emantics.version>
<!-- .. Libraries .................................................. -->
<guava.version>
25.1-jre
</guava.version>
...
...
@@ -55,8 +55,8 @@
<!-- MontiCore Dependencies -->
<dependency>
<groupId>
de.monticore.lang.monticar
</groupId>
<artifactId>
s
emantics
</artifactId>
<version>
${EmbeddedMontiArc-
s
emantics.version}
</version>
<artifactId>
executionS
emantics
</artifactId>
<version>
${EmbeddedMontiArc-
executionS
emantics.version}
</version>
</dependency>
...
...
@@ -69,7 +69,7 @@
<dependency>
<groupId>
org.freemarker
</groupId>
<artifactId>
freemarker
</artifactId>
<version>
2.3.2
3
</version>
<version>
2.3.2
9
</version>
</dependency>
<dependency>
...
...
src/main/java/de/monticore/lang/monticar/generator/cmake/CMakeConfig.java
View file @
e07c9736
...
...
@@ -12,10 +12,7 @@ import freemarker.template.TemplateExceptionHandler;
import
java.io.IOException
;
import
java.io.StringWriter
;
import
java.util.ArrayList
;
import
java.util.LinkedHashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
/**
* Class to configure cmake file generation.
...
...
@@ -34,6 +31,8 @@ public class CMakeConfig {
conf
.
setTemplateExceptionHandler
(
TemplateExceptionHandler
.
DEBUG_HANDLER
);
conf
.
setLogTemplateExceptions
(
false
);
conf
.
setClassForTemplateLoading
(
AllTemplates
.
class
,
"/template/cmake/"
);
conf
.
setNumberFormat
(
"#.################"
);
conf
.
setLocale
(
Locale
.
ENGLISH
);
try
{
CMAKE_LISTS_CPP
=
conf
.
getTemplate
(
"CMakeListsCppTemplate.ftl"
);
CMAKE_FIND_PACKAGE
=
conf
.
getTemplate
(
"CMakeFindPackageTemplate.ftl"
);
...
...
src/main/java/de/monticore/lang/monticar/generator/cpp/ExecutionStepperHelper.java
View file @
e07c9736
...
...
@@ -4,21 +4,24 @@ package de.monticore.lang.monticar.generator.cpp;
import
de.monticore.lang.monticar.generator.FileContent
;
public
class
ExecutionStepperHelper
{
public
static
String
fileName
=
"ExecutionStepper"
;
private
static
boolean
usedTime
=
false
;
private
static
double
DT
=
0.1
;
public
static
String
FILENAME
=
"ExecutionStepper"
;
private
static
boolean
TIME_USED
=
false
;
public
static
void
setUsed
()
{
usedTime
=
true
;
TIME_USED
=
true
;
}
public
static
boolean
isUsed
()
{
return
usedTime
;
return
TIME_USED
;
}
public
static
FileContent
getTimeHelperFileContent
(
double
dt
)
{
FileContent
fileContent
=
new
FileContent
();
fileContent
.
setFileName
(
fileName
+
".h"
);
fileContent
.
setFileName
(
FILENAME
+
".h"
);
String
fileContentString
=
getTimeHelperSourceCode
(
dt
);
fileContent
.
setFileContent
(
fileContentString
);
...
...
@@ -26,7 +29,7 @@ public class ExecutionStepperHelper {
}
public
static
FileContent
getTimeHelperFileContent
(){
return
getTimeHelperFileContent
(
1
);
return
getTimeHelperFileContent
(
DT
);
}
public
static
String
getTimeHelperSourceCode
(
double
dt
)
{
...
...
@@ -46,6 +49,14 @@ public class ExecutionStepperHelper {
}
public
static
String
getTimeVariableName
()
{
return
de
.
monticore
.
lang
.
monticar
.
semantics
.
Options
.
timeName
;
return
de
.
monticore
.
lang
.
monticar
.
semantics
.
Constants
.
timeName
;
}
public
static
double
getDT
()
{
return
DT
;
}
public
static
void
setDT
(
double
dt
)
{
ExecutionStepperHelper
.
DT
=
DT
;
}
}
src/main/java/de/monticore/lang/monticar/generator/cpp/GeneratorCPP.java
View file @
e07c9736
...
...
@@ -18,14 +18,17 @@ import de.monticore.lang.monticar.generator.cpp.instruction.ConnectInstructionCP
import
de.monticore.lang.monticar.generator.cpp.loopSolver.CPPEquationSystemHelper
;
import
de.monticore.lang.monticar.generator.cpp.loopSolver.daecpp.DAECPPEquationSystemGenerator
;
import
de.monticore.lang.monticar.generator.cpp.loopSolver.daecpp.DAECPPOptions
;
import
de.monticore.lang.monticar.generator.cpp.loopSolver.odeint.OdeintEquationSystemGenerator
;
import
de.monticore.lang.monticar.generator.cpp.loopSolver.odeint.OdeintOptions
;
import
de.monticore.lang.monticar.generator.cpp.mathopt.MathOptSolverConfig
;
import
de.monticore.lang.monticar.generator.cpp.template.AllTemplates
;
import
de.monticore.lang.monticar.generator.cpp.viewmodel.AutopilotAdapterDataModel
;
import
de.monticore.lang.monticar.generator.cpp.viewmodel.ServerWrapperViewModel
;
import
de.monticore.lang.monticar.generator.testing.StreamTestGenerator
;
import
de.monticore.lang.monticar.semantics.helper.NameHelper
;
import
de.monticore.lang.monticar.semantics.loops.detection.EMAEquationSystem
;
import
de.monticore.lang.monticar.semantics.loops.detection.LoopSymbolInstance
;
import
de.monticore.lang.monticar.semantics.loops.detection.ConnectionHelper
;
import
de.monticore.lang.monticar.semantics.loops.symbols.EMAEquationSystem
;
import
de.monticore.lang.monticar.semantics.loops.symbols.LoopComponentSymbolInstance
;
import
de.monticore.lang.monticar.semantics.resolve.SymbolTableHelper
;
import
de.monticore.lang.monticar.ts.MCTypeSymbol
;
import
de.monticore.lang.tagging._symboltable.TaggingResolver
;
...
...
@@ -63,7 +66,6 @@ public class GeneratorCPP implements EMAMGenerator {
protected
boolean
checkModelDir
=
false
;
protected
boolean
streamTestGenerationMode
=
false
;
public
boolean
isGenerateCV
=
false
;
protected
double
dt
=
1
;
// CMake
private
boolean
generateCMake
=
false
;
...
...
@@ -195,14 +197,14 @@ public class GeneratorCPP implements EMAMGenerator {
return
false
;
}
});
bluePrintCPP
.
addAdditionalIncludeString
(
ExecutionStepperHelper
.
fileName
);
bluePrintCPP
.
addAdditionalIncludeString
(
ExecutionStepperHelper
.
FILENAME
);
}
}
// connect information to eqs
if
(
componentSymbol
instanceof
LoopSymbolInstance
)
{
if
(
componentSymbol
instanceof
Loop
Component
SymbolInstance
)
{
ExecutionStepperHelper
.
setUsed
();
EMAEquationSystem
equationSystem
=
((
LoopSymbolInstance
)
componentSymbol
).
getEquationSystem
();
EMAEquationSystem
equationSystem
=
((
Loop
Component
SymbolInstance
)
componentSymbol
).
getEquationSystem
();
String
eqsName
=
equationSystem
.
getName
();
Variable
eqs
=
new
Variable
(
"eqs"
,
""
);
eqs
.
setVariableType
(
new
VariableType
(
""
,
eqsName
,
eqsName
));
...
...
@@ -212,7 +214,7 @@ public class GeneratorCPP implements EMAMGenerator {
for
(
EMAPortInstanceSymbol
inport
:
equationSystem
.
getInports
())
{
Optional
<
EMAPortInstanceSymbol
>
originalSourcePort
=
equationSystem
.
getAtomicSourceOf
(
inport
);
Optional
<
EMAPortInstanceSymbol
>
currentPort
=
componentSymbol
.
getIncomingPortInstances
().
stream
()
.
filter
(
i
->
SymbolTableHelper
.
getAtomicS
ourceOf
(
i
).
equals
(
originalSourcePort
))
.
filter
(
i
->
ConnectionHelper
.
s
ourceOf
(
i
).
equals
(
originalSourcePort
))
.
findFirst
();
if
(
currentPort
.
isPresent
())
{
String
sourceName
=
currentPort
.
get
().
getName
();
...
...
@@ -270,12 +272,12 @@ public class GeneratorCPP implements EMAMGenerator {
//setGenerateMainClass(true);
}
if
(
componentInstanceSymbol
instanceof
LoopSymbolInstance
)
{
((
LoopSymbolInstance
)
componentInstanceSymbol
).
getEquationSystem
()
if
(
componentInstanceSymbol
instanceof
Loop
Component
SymbolInstance
)
{
((
Loop
Component
SymbolInstance
)
componentInstanceSymbol
).
getEquationSystem
()
.
setName
(
String
.
join
(
"_"
,
NameHelper
.
replaceWithUnderScore
(
NameHelper
.
calculateFullQualifiedNameOf
(
rootModel
)),
((
LoopSymbolInstance
)
componentInstanceSymbol
).
getEquationSystem
().
getName
()));
for
(
CMakeFindModule
dependency
:
DAECPP
Options
.
getDependencies
())
{
((
Loop
Component
SymbolInstance
)
componentInstanceSymbol
).
getEquationSystem
().
getName
()));
for
(
CMakeFindModule
dependency
:
Odeint
Options
.
getDependencies
())
{
cMakeConfig
.
addModuleDependency
(
dependency
);
}
}
...
...
@@ -340,10 +342,10 @@ public class GeneratorCPP implements EMAMGenerator {
}
if
(
componentInstanceSymbol
instanceof
LoopSymbolInstance
)
{
if
(!
equationSystemsAlreadyBuild
.
contains
(((
LoopSymbolInstance
)
componentInstanceSymbol
).
getEquationSystem
()))
{
fileContents
.
addAll
(
DAECPP
EquationSystemGenerator
.
generateEquationSystem
(
((
LoopSymbolInstance
)
componentInstanceSymbol
).
getEquationSystem
()));
if
(
componentInstanceSymbol
instanceof
Loop
Component
SymbolInstance
)
{
if
(!
equationSystemsAlreadyBuild
.
contains
(((
Loop
Component
SymbolInstance
)
componentInstanceSymbol
).
getEquationSystem
()))
{
fileContents
.
addAll
(
Odeint
EquationSystemGenerator
.
generateEquationSystem
(
((
Loop
Component
SymbolInstance
)
componentInstanceSymbol
).
getEquationSystem
()));
}
}
...
...
@@ -384,7 +386,7 @@ public class GeneratorCPP implements EMAMGenerator {
}
// Add advanceTime
if
(
ExecutionStepperHelper
.
isUsed
())
{
fileContents
.
add
(
ExecutionStepperHelper
.
getTimeHelperFileContent
(
dt
));
fileContents
.
add
(
ExecutionStepperHelper
.
getTimeHelperFileContent
());
}
List
<
File
>
files
=
saveFilesToDisk
(
fileContents
);
//cmake
...
...
@@ -691,15 +693,15 @@ public class GeneratorCPP implements EMAMGenerator {
}
public
double
getDeltaT
()
{
return
dt
;
return
ExecutionStepperHelper
.
getDT
()
;
}
public
void
setDeltaT
(
double
dt
)
{
this
.
dt
=
dt
;
ExecutionStepperHelper
.
setDT
(
dt
)
;
}
public
void
setDeltaT
(
String
dt
)
{
double
v
=
Double
.
parseDouble
(
dt
);
this
.
dt
=
v
;
setDeltaT
(
v
)
;
}
}
src/main/java/de/monticore/lang/monticar/generator/cpp/MathFunctionFixer.java
View file @
e07c9736
...
...
@@ -98,7 +98,7 @@ public class MathFunctionFixer extends BaseMathFunctionFixerHandler {
.
equals
(((
MathNameExpressionSymbol
)
mathExpressionSymbol
).
getNameToResolveValue
()))
{
ExecutionStepperHelper
.
setUsed
();
((
MathNameExpressionSymbol
)
mathExpressionSymbol
).
setNameToResolveValue
(
"getCurrentTime()"
);
bluePrintCPP
.
addAdditionalIncludeString
(
ExecutionStepperHelper
.
fileName
);
bluePrintCPP
.
addAdditionalIncludeString
(
ExecutionStepperHelper
.
FILENAME
);
}
notHandled
=
false
;
}
else
if
(((
MathValueExpressionSymbol
)
mathExpressionSymbol
).
isBooleanExpression
())
{
...
...
src/main/java/de/monticore/lang/monticar/generator/cpp/loopSolver/EquationSystemViewModel.java
View file @
e07c9736
...
...
@@ -11,10 +11,11 @@ import de.monticore.lang.math._symboltable.expression.MathExpressionSymbol;
import
de.monticore.lang.math._symboltable.expression.MathNameExpressionSymbol
;
import
de.monticore.lang.math._symboltable.expression.MathParenthesisExpressionSymbol
;
import
de.monticore.lang.math._symboltable.matrix.MathMatrixNameExpressionSymbol
;
import
de.monticore.lang.monticar.generator.cpp.ExecutionStepperHelper
;
import
de.monticore.lang.monticar.generator.cpp.viewmodel.ViewModelBase
;
import
de.monticore.lang.monticar.semantics.helper.NameHelper
;
import
de.monticore.lang.monticar.semantics.loops.analyze.SpecificationConverter
;
import
de.monticore.lang.monticar.semantics.loops.
detection
.EMAEquationSystem
;
import
de.monticore.lang.monticar.semantics.loops.
symbols
.EMAEquationSystem
;
import
de.monticore.lang.monticar.semantics.resolve.SymbolTableHelper
;
import
de.monticore.lang.monticar.semantics.util.math.NameReplacer
;
import
de.se_rwth.commons.logging.Log
;
...
...
@@ -32,6 +33,15 @@ public class EquationSystemViewModel extends ViewModelBase {
private
List
<
String
>
function
=
new
ArrayList
<>();
private
List
<
String
>
inports
=
new
ArrayList
<>();
private
boolean
isAlgebraic
=
true
;
private
double
atol
;
private
double
rtol
;
private
double
jtol
;
private
double
dt_init
;
private
double
dt_max
;
private
double
loggingLevel
;
private
List
<
EMAComponentInstanceSymbol
>
algebraicComponents
=
new
ArrayList
<>();
public
String
getName
()
{
...
...
@@ -58,12 +68,50 @@ public class EquationSystemViewModel extends ViewModelBase {
return
inports
;
}
public
boolean
getIsAlgebraic
()
{
return
isAlgebraic
;
}
public
double
getAtol
()
{
return
atol
;
}
public
double
getRtol
()
{
return
rtol
;
}
public
double
getJtol
()
{
return
jtol
;
}
public
double
getDt_init
()
{
return
dt_init
;
}
public
double
getDt_max
()
{
return
dt_max
;
}
public
double
getLoggingLevel
()
{
return
loggingLevel
;
}
public
List
<
EMAComponentInstanceSymbol
>
getAlgebraicComponents
()
{
return
algebraicComponents
;
}
private
void
setOptions
()
{
this
.
atol
=
NumericSolverOptions
.
ATOL
;
this
.
rtol
=
NumericSolverOptions
.
RTOL
;
this
.
jtol
=
NumericSolverOptions
.
JTOL
;
this
.
loggingLevel
=
NumericSolverOptions
.
LEVEL_LOGGING
;
this
.
dt_init
=
NumericSolverOptions
.
DT_SOLVER
;
this
.
dt_max
=
NumericSolverOptions
.
DT_SOLVER
;
}
public
EquationSystemViewModel
(
EMAEquationSystem
eqs
)
{
setOptions
();
this
.
name
=
eqs
.
getName
();
Map
<
String
,
String
>
inportMapping
=
new
HashMap
<>();
...
...
@@ -151,6 +199,10 @@ public class EquationSystemViewModel extends ViewModelBase {
CPPEquationSystemHelper
.
getNameOfPortOfComponent
(
portVariable
.
getPort
().
get
())));
}
}
if
(
massMatrixDiag
.
stream
().
filter
(
s
->
"1"
.
equals
(
s
))
.
findFirst
().
isPresent
())
this
.
isAlgebraic
=
false
;
}
private
String
getFunction
(
MathExpressionSymbol
symbol
,
...
...
@@ -184,7 +236,7 @@ public class EquationSystemViewModel extends ViewModelBase {
@Override
public
void
visit
(
MathMatrixNameExpressionSymbol
node
)
{
if
(
node
.
getNameToAccess
().
equals
(
de
.
monticore
.
lang
.
monticar
.
semantics
.
Option
s
.
derivativeOperatorName
))
{
if
(
node
.
getNameToAccess
().
equals
(
de
.
monticore
.
lang
.
monticar
.
semantics
.
Constant
s
.
derivativeOperatorName
))
{
if
(!
(
getParents
().
peek
()
instanceof
EMAMEquationSymbol
))
Log
.
error
(
"Not supported diff operator: should stand alone to the lift side of an equation"
);
if
(!
((
EMAMEquationSymbol
)
getParents
().
peek
()).
getLeftExpression
().
equals
(
node
))
...
...
src/main/java/de/monticore/lang/monticar/generator/cpp/loopSolver/NumericSolverOptions.java
0 → 100644
View file @
e07c9736
/* (c) https://github.com/MontiCore/monticore */
package
de.monticore.lang.monticar.generator.cpp.loopSolver
;
public
class
NumericSolverOptions
{
// Absolute tolerance for the solver
public
static
double
ATOL
=
1.0
E
-
15
;
// Relative tolerance for the solver
public
static
double
RTOL
=
1.0
E
-
15
;
// Tolerance for the numerical Jacobian
public
static
double
JTOL
=
1.0
E
-
6
;
// Level for logging, if it is supported
public
static
int
LEVEL_LOGGING
=
0
;
// Delta t used in the solver, lower delta t leads to longer execution times
// but better accuracy
public
static
double
DT_SOLVER
=
1.0
E
-
2
;
}
src/main/java/de/monticore/lang/monticar/generator/cpp/loopSolver/daecpp/DAECPPEquationSystemGenerator.java
View file @
e07c9736
...
...
@@ -5,7 +5,7 @@ import de.monticore.lang.monticar.generator.FileContent;
import
de.monticore.lang.monticar.generator.cpp.loopSolver.EquationSystemViewModel
;
import
de.monticore.lang.monticar.generator.cpp.template.AllTemplates
;
import
de.monticore.lang.monticar.generator.cpp.template.TemplateHelper
;
import
de.monticore.lang.monticar.semantics.loops.
detection
.EMAEquationSystem
;
import
de.monticore.lang.monticar.semantics.loops.
symbols
.EMAEquationSystem
;
import
de.se_rwth.commons.logging.Log
;
import
freemarker.template.Configuration
;
import
freemarker.template.Template
;
...
...
@@ -16,6 +16,7 @@ import java.io.IOException;
import
java.io.StringWriter
;
import
java.util.Collection
;
import
java.util.HashSet
;
import
java.util.Locale
;
import
java.util.Map
;
public
class
DAECPPEquationSystemGenerator
{
...
...
@@ -25,11 +26,13 @@ public class DAECPPEquationSystemGenerator {
private
static
final
Template
RHS_TEMPLATE
;
static
{
Configuration
conf
=
new
Configuration
(
Configuration
.
VERSION_2_3_2
3
);
Configuration
conf
=
new
Configuration
(
Configuration
.
VERSION_2_3_2
9
);
conf
.
setDefaultEncoding
(
"UTF-8"
);
conf
.
setTemplateExceptionHandler
(
TemplateExceptionHandler
.
DEBUG_HANDLER
);
conf
.
setLogTemplateExceptions
(
false
);
conf
.
setClassForTemplateLoading
(
AllTemplates
.
class
,
"/template/loopSolver/daecpp/"
);
conf
.
setNumberFormat
(
"#.################"
);
conf
.
setLocale
(
Locale
.
ENGLISH
);
try
{
EQUATIONSYSTEM_TEMPLATE
=
conf
.
getTemplate
(
"EquationSystem.ftl"
);
MASSMATRIX_TEMPLATE
=
conf
.
getTemplate
(
"MassMatrix.ftl"
);
...
...
src/main/java/de/monticore/lang/monticar/generator/cpp/loopSolver/odeint/OdeintEquationSystemGenerator.java
0 → 100644
View file @
e07c9736
/* (c) https://github.com/MontiCore/monticore */
package
de.monticore.lang.monticar.generator.cpp.loopSolver.odeint
;
import
de.monticore.lang.monticar.generator.FileContent
;
import
de.monticore.lang.monticar.generator.cpp.loopSolver.EquationSystemViewModel
;
import
de.monticore.lang.monticar.generator.cpp.template.AllTemplates
;
import
de.monticore.lang.monticar.generator.cpp.template.TemplateHelper
;
import
de.monticore.lang.monticar.semantics.loops.symbols.EMAEquationSystem
;
import
de.se_rwth.commons.logging.Log
;
import
freemarker.template.Configuration
;
import
freemarker.template.Template
;
import
freemarker.template.TemplateException
;
import
freemarker.template.TemplateExceptionHandler
;
import
java.io.IOException
;
import
java.io.StringWriter
;
import
java.util.Collection
;
import
java.util.HashSet
;
import
java.util.Locale
;
import
java.util.Map
;
public
class
OdeintEquationSystemGenerator
{
private
static
final
Template
EQUATIONSYSTEM_TEMPLATE
;
private
static
final
Template
RHS_TEMPLATE
;
static
{
Configuration
conf
=
new
Configuration
(
Configuration
.
VERSION_2_3_29
);
conf
.
setDefaultEncoding
(
"UTF-8"
);
conf
.
setTemplateExceptionHandler
(
TemplateExceptionHandler
.
DEBUG_HANDLER
);
conf
.
setLogTemplateExceptions
(
false
);
conf
.
setClassForTemplateLoading
(
AllTemplates
.
class
,
"/template/loopSolver/odeint/"
);
conf
.
setNumberFormat
(
"#.################"
);
conf
.
setLocale
(
Locale
.
ENGLISH
);
try
{
EQUATIONSYSTEM_TEMPLATE
=
conf
.
getTemplate
(
"EquationSystem.ftl"
);
RHS_TEMPLATE
=
conf
.
getTemplate
(
"RHS.ftl"
);
}
catch
(
IOException
e
)
{
String
msg
=
"could not load cmake templates"
;
Log
.
error
(
msg
,
e
);
throw
new
RuntimeException
(
msg
,
e
);
}
}
public
static
Collection
<
FileContent
>
generateEquationSystem
(
EMAEquationSystem
eqs
)
{
Collection
<
FileContent
>
result
=
new
HashSet
<>();
EquationSystemViewModel
viewModel
=
new
EquationSystemViewModel
(
eqs
);
// map data
Map
<
String
,
Object
>
dataForTemplate
=
TemplateHelper
.
getDataForTemplate
(
viewModel
);
// try generate file content
try
{
StringWriter
sw
=
new
StringWriter
();
EQUATIONSYSTEM_TEMPLATE
.
process
(
dataForTemplate
,
sw
);
result
.
add
(
new
FileContent
(
sw
.
toString
(),
String
.
format
(
"/%s.h"
,
eqs
.
getName
())));
sw
=
new
StringWriter
();
RHS_TEMPLATE
.
process
(
dataForTemplate
,
sw
);
result
.
add
(
new
FileContent
(
sw
.
toString
(),
String
.
format
(
"/%s_RHS.h"
,
eqs
.
getName
())));
}
catch
(
TemplateException
|
IOException
e
)
{
Log
.
error
(
"EquationSystem template generation failed. "
,
e
);
}
return
result
;
}
}
src/main/java/de/monticore/lang/monticar/generator/cpp/loopSolver/odeint/OdeintOptions.java
0 → 100644
View file @
e07c9736
/* (c) https://github.com/MontiCore/monticore */
package
de.monticore.lang.monticar.generator.cpp.loopSolver.odeint
;
import
de.monticore.lang.monticar.generator.cmake.CMakeFindModule
;
import
org.apache.commons.lang3.SystemUtils
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Collection
;
import
java.util.List
;