dir = "c:/OpenModelica1.5.0";\r
return new File(dir);\r
}\r
- \r
+\r
protected static File createTempDirectory() throws IOException {\r
final File temp = File.createTempFile("temp", Long.toString(System.nanoTime()));\r
if(!(temp.delete()))\r
throw new IOException("Could not create temp directory: " + temp.getAbsolutePath());\r
return (temp);\r
}\r
- \r
+\r
protected static boolean recursiveDelete(File fileOrDir) {\r
if(fileOrDir.isDirectory())\r
for(File innerFile: fileOrDir.listFiles())\r
return false;\r
return fileOrDir.delete();\r
}\r
- \r
+\r
protected static String readFile(File file) throws IOException {\r
InputStream stream = new FileInputStream(file);\r
byte[] buffer = new byte[(int)file.length()];\r
stream.close();\r
return new String(buffer);\r
}\r
- \r
+\r
protected static void printProcessOutput(Process process, IModelicaMonitor monitor) throws IOException {\r
InputStream stream = process.getInputStream();\r
StringBuilder b = new StringBuilder();\r
if((char)c != '\n')\r
b.append((char)c);\r
else {\r
- System.out.println("OMC output: " + b.toString());\r
+ System.out.println("OMC output: " + b.toString());\r
monitor.message(b.toString());\r
b.delete(0, b.length());\r
}\r
}\r
}\r
- \r
+\r
static class SimulationLocation {\r
File simulationDir;\r
File inputFile;\r
File outputFile;\r
File initFile;\r
- \r
+\r
public SimulationLocation(File simulationDir, File inputFile,\r
File outputFile, File initFile) {\r
this.simulationDir = simulationDir;\r
this.initFile = initFile;\r
}\r
}\r
- \r
- protected static SimulationLocation createInputFiles(String modelName, String modelText, Double startTime, Double stopTime) throws IOException {\r
+\r
+ protected static SimulationLocation createInputFiles(String modelName, String modelText, Double startTime, Double stopTime, Double tolerance) throws IOException {\r
File simulationDir = createTempDirectory();\r
modelName = modelName.replace(" ", "");\r
File modelFile = new File(simulationDir, modelName + ".mo");\r
File scriptFile = new File(simulationDir, modelName + ".mos");\r
- \r
+\r
{\r
PrintStream s = new PrintStream(modelFile);\r
s.print(modelText);\r
s.close();\r
}\r
- \r
+\r
{\r
PrintStream s = new PrintStream(scriptFile);\r
s.println("loadFile(\"" + modelName + ".mo\");");\r
- s.println("simulate("+modelName+\r
+ s.print("simulate("+modelName+\r
",startTime="+startTime+\r
- ",stopTime="+stopTime+\r
- ");");\r
+ ",stopTime="+stopTime);\r
+ if(tolerance != null) {\r
+ s.print(",tolerance="+tolerance);\r
+ }\r
+ s.print(");\n");\r
s.close();\r
}\r
- \r
+\r
return new SimulationLocation(\r
simulationDir,\r
new File(simulationDir, modelName + ".mos"),\r
new File(simulationDir, modelName + "_res.plt"),\r
new File(simulationDir, modelName + "_init.txt")\r
- );\r
+ );\r
}\r
- \r
+\r
public static SimulationResult runModelica(String modelName, String modelText,\r
- IModelicaMonitor monitor, Double startTime, Double stopTime) throws IOException {\r
+ IModelicaMonitor monitor, Double startTime, Double stopTime, Double tolerance) throws IOException {\r
SimulationLocation simulationLocation = \r
- createInputFiles(modelName, modelText, startTime, stopTime);\r
- \r
+ createInputFiles(modelName, modelText, startTime, stopTime, tolerance);\r
+\r
try {\r
File modelicaHome = getOpenModelicaHome();\r
File omc = new File(modelicaHome, "bin/omc.exe");\r
Process process = new ProcessBuilder(\r
omc.getAbsolutePath(),\r
simulationLocation.inputFile.getAbsolutePath()\r
- )\r
- .directory(simulationLocation.simulationDir.getAbsoluteFile())\r
- .redirectErrorStream(true)\r
- .start();\r
+ )\r
+ .directory(simulationLocation.simulationDir.getAbsoluteFile())\r
+ .redirectErrorStream(true)\r
+ .start();\r
printProcessOutput(process, monitor);\r
- \r
+\r
SimulationResult result = new SimulationResult();\r
result.read(simulationLocation.outputFile);\r
result.readInits(simulationLocation.initFile);\r
result.filter(); \r
- \r
+\r
return result;\r
} catch(IOException e) {\r
e.printStackTrace();\r
[SIMU.HasConfiguration all Configuration]\r
[HasStartTime card "1"]\r
[HasStopTime card "1"]\r
+ [HasTolerance card "0..1"]\r
\r
######################################################################\r
# Configuration\r
\r
HasStopTime <R L0.HasProperty\r
L0.HasRange L0.Double\r
+ \r
+HasTolerance <R L0.HasProperty\r
+ L0.HasRange L0.Double \r
\r
HistoryRealization <T L0.Realization\r
DefaultRealization <T L0.Realization\r
WorkModelConfiguration @ "WorkModelConfiguration" : Configuration\r
L0.HasLabel "WorkModelConfiguration" : L0.String\r
HasStartTime "0.0" : L0.Double\r
- HasStopTime "20.0" : L0.Double\r
+ HasStopTime "24.0" : L0.Double\r
+ \r
L0.ConsistsOf\r
### Modules\r
Workforce @ "Workforce" : WorkforceModule\r
Work1CompletionTime @ "Work1CompletionTime" : Auxiliary\r
tag(MOD.Mapped)\r
HasExpression _ : ParameterExpression\r
- HasEquation "10" : L0.String \r
+ HasEquation "15" : L0.String \r
Work2CompletionTime @ "Work2CompletionTime" : Auxiliary\r
tag(MOD.Mapped) \r
HasExpression _ : ParameterExpression\r
HasEquation "11" : L0.String \r
+ Work2Amount @ "Work2Amount" : Auxiliary\r
+ tag(MOD.Mapped) \r
+ HasExpression _ : ParameterExpression\r
+ HasEquation "700" : L0.String \r
\r
## Inputs\r
TotalPossibleWorkingSpeedInput @ "TotalPossibleWorkingSpeedInput" : Input\r
tag(MOD.Mapped)\r
RequiredWorkingSpeed2 @ "RequiredWorkingSpeed2" : Input\r
tag(MOD.Mapped) \r
+ Work1WorkDone @ "Work1WorkDone" : Input\r
+ tag(MOD.Mapped) \r
+ Work2WorkDone @ "Work2WorkDone" : Input\r
+ tag(MOD.Mapped) \r
\r
## Auxiliaries \r
RequiredWorkingSpeedTotal @ "RequiredWorkingSpeedTotal" : Auxiliary\r
conf_dep(RequiredWorkingSpeedTotal, RequiredWorkingSpeed1) \r
d12 : Dependency\r
conf_dep(RequiredWorkingSpeedTotal, RequiredWorkingSpeed2)\r
+ d13 : Dependency\r
+ conf_dep_ref(Work1WorkDone, Work1, WorkDone)\r
+ d14 : Dependency\r
+ conf_dep_ref(Work2WorkDone, Work2, WorkDone) \r
+ d15 : Dependency\r
+ conf_dep_ref(Work2, Work2Amount, ProjectWorkAmount) \r
+ \r
\r
WorkModelConfigurationDiagram : ConfigurationDiagram <R L0.HasNext\r
MOD.DiagramToComposite WorkModelConfiguration\r
Work2CompletionTimeElement : AuxiliarySymbol\r
MOD.ElementToComponent Work2CompletionTime\r
DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 165.0, 153.0" : G2D.Transform \r
+ Work2AmountElement : AuxiliarySymbol\r
+ MOD.ElementToComponent Work2Amount\r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 75.0, 160.0" : G2D.Transform \r
RequiredWorkingSpeedTotalElement : AuxiliarySymbol\r
MOD.ElementToComponent RequiredWorkingSpeedTotal\r
DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 32.0, 76.0" : G2D.Transform \r
RequiredWorkingSpeed2Element : InputSymbol\r
MOD.ElementToComponent RequiredWorkingSpeed2\r
DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 100.0, 122.0" : G2D.Transform\r
+ Work1WorkDoneElement : InputSymbol\r
+ MOD.ElementToComponent Work1WorkDone\r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 155.0, 110.0" : G2D.Transform\r
+ Work2WorkDoneElement : InputSymbol\r
+ MOD.ElementToComponent Work2WorkDone\r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 155.0, 130.0" : G2D.Transform \r
_ : DependencyConnection\r
MOD.DiagramConnectionToConnection d1 \r
dep(TotalPossibleWorkingSpeedInputElement, WorkforceElement, "-0.1") \r
_ : DependencyConnection\r
MOD.DiagramConnectionToConnection d12\r
dep(RequiredWorkingSpeedTotalElement, RequiredWorkingSpeed2Element, "-0.1") \r
- \r
- \r
+ _ : DependencyConnection\r
+ MOD.DiagramConnectionToConnection d13\r
+ dep(Work1WorkDoneElement, Work1Element , "-0.1") \r
+ _ : DependencyConnection\r
+ MOD.DiagramConnectionToConnection d14\r
+ dep(Work2WorkDoneElement, Work2Element , "-0.1") \r
+ _ : DependencyConnection\r
+ MOD.DiagramConnectionToConnection d15\r
+ dep(Work2Element, Work2AmountElement , "-0.1") \r
+ \r
WorkModule @ "WorkModule" <T Module\r
ST.IsDefinedBy WorkModuleConfiguration\r
\r
tag(MOD.Mapped)\r
HasExpression _ : ParameterExpression\r
HasEquation "500" : L0.String \r
- ProjectWorkAmount @ "ProjectWorkAmount" : Auxiliary\r
- tag(MOD.Mapped)\r
- HasExpression _ : ParameterExpression\r
- HasEquation "1000" : L0.String \r
WorkQuality @ "WorkQuality" : Auxiliary\r
tag(MOD.Mapped)\r
HasExpression _ : ParameterExpression\r
WorkingSpeed @ "WorkingSpeed" : Valve\r
tag(MOD.Mapped)\r
HasExpression _ : NormalExpression\r
- HasEquation "if ProjectIsReady > 0 then 0 else WorkAllocation" : L0.String\r
+ HasEquation "if ProjectIsReady < 1 then WorkAllocation else 0" : L0.String\r
ErrorsGenerated @ "ErrorsGenerated" : Valve\r
tag(MOD.Mapped)\r
HasExpression _ : NormalExpression\r
tag(MOD.Mapped)\r
HasExpression _ : NormalExpression\r
HasEquation "Errors/ErrorsFoundTime" : L0.String \r
+ ProjectReadyness @ "ProjectReadyness" : Valve\r
+ tag(MOD.Mapped)\r
+ HasExpression _ : NormalExpression\r
+ HasEquation "(xidz(first=WorkDone, second=ProjectWorkAmount, x=0.0) - ProjectIsReady) / 0.08" : L0.String \r
+ \r
+\r
\r
## Stocks\r
WorkToDo @ "WorkToDo" : Stock\r
tag(MOD.Mapped)\r
HasExpression _ : StockExpression\r
HasInitialEquation "0" : L0.String \r
+ tag(IsOutput)\r
Errors @ "Errors" : Stock\r
tag(MOD.Mapped)\r
HasExpression _ : StockExpression\r
- HasInitialEquation "0" : L0.String \r
+ HasInitialEquation "0" : L0.String \r
+ ProjectIsReady @ "ProjectIsReady" : Stock\r
+ tag(MOD.Mapped)\r
+ HasExpression _ : StockExpression\r
+ HasInitialEquation "0" : L0.String \r
\r
## Auxiliaries \r
TimeToDeadline @ "TimeToDeadline" : Auxiliary\r
tag(MOD.Mapped)\r
tag(IsOutput)\r
HasExpression _ : NormalExpression\r
- HasEquation "if ProjectIsReady > 0 then 0 else if TimeToDeadline < 0.0 or TimeToDeadline > 0.0 then WorkToDo / TimeToDeadline else MaximumWorkingSpeed" : L0.String \r
+ HasEquation "if ProjectIsReady < 1 then if TimeToDeadline > 0.0 then min(MaximumWorkingSpeed, WorkToDo / TimeToDeadline) else MaximumWorkingSpeed else 0" : L0.String \r
WorkAllocation @ "WorkAllocation" : Auxiliary\r
tag(MOD.Mapped)\r
HasExpression _ : NormalExpression\r
HasEquation "xidz(first = RequiredWorkingSpeed, second = RequiredWorkingSpeed + RequiredWorkingSpeedOtherProjectsInput, x = 0.0) * PossibleWorkingSpeedInput" : L0.String \r
- ProjectIsReady @ "ProjectIsReady" : Auxiliary\r
- tag(MOD.Mapped)\r
- HasExpression _ : NormalExpression\r
- HasEquation "if ProjectReadyness >= 1 then 1 else 0" : L0.String \r
- ProjectReadyness @ "ProjectReadyness" : Auxiliary\r
- tag(MOD.Mapped)\r
- HasExpression _ : NormalExpression\r
- HasEquation "WorkDone/ProjectWorkAmount" : L0.String \r
ErrorsFoundTime @ "ErrorsFoundTime" : Auxiliary\r
tag(MOD.Mapped)\r
HasExpression _ : WithLookupExpression\r
- HasEquation "ProjectReadyness" : L0.String \r
+ HasEquation "xidz(first=WorkDone, second=ProjectWorkAmount, x=0.0)" : L0.String \r
HasLookup "{{0,5},{0.5,3},{1,0.5},{2,0.5}}" : L0.String \r
\r
## Inputs\r
PossibleWorkingSpeedInput @ "PossibleWorkingSpeedInput" : Input\r
tag(MOD.Mapped) \r
RequiredWorkingSpeedOtherProjectsInput @ "RequiredWorkingSpeedOtherProjectsInput" : Input\r
- tag(MOD.Mapped) \r
+ tag(MOD.Mapped) \r
+ ProjectWorkAmount @ "ProjectWorkAmount" : Input\r
+ tag(MOD.Mapped)\r
+ HasDefaultInputValue "1000.0" : L0.Double \r
\r
c31 : Cloud\r
+ c33 : Cloud\r
\r
d31 : Dependency\r
conf_dep(TimeToDeadline, WorkCompletionTimeInput) \r
d37 : Dependency\r
conf_dep(WorkAllocation, PossibleWorkingSpeedInput) \r
d38 : Dependency\r
- conf_dep(WorkAllocation, RequiredWorkingSpeed) \r
- d39 : Dependency\r
- conf_dep(ProjectIsReady, ProjectReadyness) \r
+ conf_dep(WorkAllocation, RequiredWorkingSpeed) \r
d40 : Dependency\r
conf_dep(ProjectReadyness, WorkDone) \r
d41 : Dependency\r
d47 : Dependency\r
conf_dep(ErrorsFoundRate, ErrorsFoundTime) \r
d48 : Dependency\r
- conf_dep(ErrorsFoundTime, ProjectReadyness) \r
+ conf_dep(ErrorsFoundTime, ProjectWorkAmount) \r
+ d49 : Dependency\r
+ conf_dep(ErrorsFoundTime, WorkDone) \r
+ \r
+ \r
f31 : Flow\r
conf_dep(WorkingSpeed, WorkToDo) \r
f32 : Flow\r
conf_dep(ErrorsFoundRate, WorkDone) \r
f37 : Flow\r
conf_dep(WorkToDo, ErrorsFoundRate) \r
+ f40 : Flow\r
+ conf_dep(ProjectIsReady, ProjectReadyness) \r
+ f41 : Flow\r
+ conf_dep(ProjectReadyness, c33) \r
\r
WorkModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext\r
MOD.DiagramToComposite WorkModuleConfiguration\r
\r
WorkCompletionTimeInputElement : InputSymbol\r
MOD.ElementToComponent WorkCompletionTimeInput\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 30.0, 65.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 60.0, 55.0" : G2D.Transform \r
PossibleWorkingSpeedInputElement : InputSymbol\r
MOD.ElementToComponent PossibleWorkingSpeedInput\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 155.0, 35.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 190.0, 60.0" : G2D.Transform \r
RequiredWorkingSpeedOtherProjectsInputElement : InputSymbol\r
MOD.ElementToComponent RequiredWorkingSpeedOtherProjectsInput\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 70.0, 27.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 165.0, 45.0" : G2D.Transform \r
+ ProjectWorkAmountElement : InputSymbol\r
+ MOD.ElementToComponent ProjectWorkAmount\r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 210.0, 120.0" : G2D.Transform \r
\r
WorkingSpeedElement : ValveSymbol\r
MOD.ElementToComponent WorkingSpeed\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 107.0, 75.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 125.0, 100.0" : G2D.Transform \r
ErrorsGeneratedElement : ValveSymbol\r
MOD.ElementToComponent ErrorsGenerated\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 120.0, 90.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 135.0, 110.0" : G2D.Transform \r
ErrorsFoundRateElement : ValveSymbol\r
MOD.ElementToComponent ErrorsFoundRate\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 125.0, 125.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 140.0, 140.0" : G2D.Transform \r
+ ProjectReadynessElement : ValveSymbol\r
+ MOD.ElementToComponent ProjectReadyness\r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 215.0, 85.0" : G2D.Transform \r
\r
WorkToDoElement : StockSymbol\r
MOD.ElementToComponent WorkToDo\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 60.0, 75.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 85.0, 100.0" : G2D.Transform \r
WorkDoneElement : StockSymbol\r
MOD.ElementToComponent WorkDone\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 141.0, 75.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 160.0, 100.0" : G2D.Transform \r
ErrorsElement : StockSymbol\r
MOD.ElementToComponent Errors\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 135.0, 90.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 153.0, 110.0" : G2D.Transform \r
+ ProjectIsReadyElement : StockSymbol\r
+ MOD.ElementToComponent ProjectIsReady\r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 180.0, 85.0" : G2D.Transform \r
\r
MaximumWorkingSpeedElement : AuxiliarySymbol\r
MOD.ElementToComponent MaximumWorkingSpeed\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 65.0, 35.0" : G2D.Transform \r
- ProjectWorkAmountElement : AuxiliarySymbol\r
- MOD.ElementToComponent ProjectWorkAmount\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 185.0, 50.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 45.0, 70.0" : G2D.Transform \r
WorkQualityElement : AuxiliarySymbol\r
MOD.ElementToComponent WorkQuality\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 105.0, 110.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 120.0, 130.0" : G2D.Transform \r
TimeToDeadlineElement : AuxiliarySymbol\r
MOD.ElementToComponent TimeToDeadline\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 55.0, 50.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 80.0, 75.0" : G2D.Transform \r
RequiredWorkingSpeedElement : AuxiliarySymbol\r
MOD.ElementToComponent RequiredWorkingSpeed\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 85.0, 55.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 90.0, 90.0" : G2D.Transform \r
WorkAllocationElement : AuxiliarySymbol\r
MOD.ElementToComponent WorkAllocation\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 120.0, 40.0" : G2D.Transform \r
- ProjectIsReadyElement : AuxiliarySymbol\r
- MOD.ElementToComponent ProjectIsReady\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 145.0, 55.0" : G2D.Transform \r
- ProjectReadynessElement : AuxiliarySymbol\r
- MOD.ElementToComponent ProjectReadyness\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 167.0, 65.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 140.0, 75.0" : G2D.Transform \r
ErrorsFoundTimeElement : AuxiliarySymbol\r
MOD.ElementToComponent ErrorsFoundTime\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 145.0, 135.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 180.0, 140.0" : G2D.Transform \r
\r
c31Element : CloudSymbol\r
MOD.ElementToComponent c31\r
- DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 80.0, 90.0" : G2D.Transform \r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 110.0, 110.0" : G2D.Transform \r
+ c33Element : CloudSymbol\r
+ MOD.ElementToComponent c33\r
+ DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 230.0, 85.0" : G2D.Transform \r
\r
_ : DependencyConnection\r
MOD.DiagramConnectionToConnection d31\r
_ : DependencyConnection\r
MOD.DiagramConnectionToConnection d38\r
dep(WorkAllocationElement, RequiredWorkingSpeedElement , "-0.1") \r
- _ : DependencyConnection\r
- MOD.DiagramConnectionToConnection d39\r
- dep(ProjectIsReadyElement, ProjectReadynessElement , "-0.1") \r
_ : DependencyConnection\r
MOD.DiagramConnectionToConnection d40\r
dep(ProjectReadynessElement, WorkDoneElement , "-0.1") \r
dep(ErrorsFoundRateElement, ErrorsFoundTimeElement , "-0.1") \r
_ : DependencyConnection\r
MOD.DiagramConnectionToConnection d48\r
- dep(ErrorsFoundTimeElement, ProjectReadynessElement , "-0.1") \r
-\r
+ dep(ErrorsFoundTimeElement, ProjectWorkAmountElement , "-0.1") \r
+ _ : DependencyConnection\r
+ MOD.DiagramConnectionToConnection d49\r
+ dep(ErrorsFoundTimeElement, WorkDoneElement , "-0.1") \r
+ \r
_ : FlowConnection\r
MOD.DiagramConnectionToConnection f31\r
flow(WorkingSpeedElement, WorkToDoElement ) \r
_ : FlowConnection\r
MOD.DiagramConnectionToConnection f37\r
flow(WorkToDoElement, ErrorsFoundRateElement ) \r
+ _ : FlowConnection\r
+ MOD.DiagramConnectionToConnection f40\r
+ flow(ProjectIsReadyElement, ProjectReadynessElement ) \r
+ _ : FlowConnection\r
+ MOD.DiagramConnectionToConnection f41\r
+ flow(ProjectReadynessElement, c33Element ) \r
\r
\r
WorkforceModule @ "WorkforceModule" <T Module\r