]> gerrit.simantics Code Review - simantics/sysdyn.git/commitdiff
Tolerance -option for simulations
authorlempinen <lempinen@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Mon, 9 Aug 2010 06:22:23 +0000 (06:22 +0000)
committerlempinen <lempinen@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Mon, 9 Aug 2010 06:22:23 +0000 (06:22 +0000)
git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@17032 ac1ea38d-2e2b-0410-8846-a27921b304fc

org.simantics.modelica/src/org/simantics/modelica/ModelicaManager.java
org.simantics.sysdyn/src/org/simantics/sysdyn/SysdynResource.java
org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynModel.java
org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Configuration.java
sysdyn_ontologies/sysdyn.graph

index 1eb99156efd779b6e5fadef89384d47debdb7360..198dde1ef5e009320863be1f867df90dd29ef866 100644 (file)
@@ -26,7 +26,7 @@ public class ModelicaManager {
             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
@@ -35,7 +35,7 @@ public class ModelicaManager {
             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
@@ -43,7 +43,7 @@ public class ModelicaManager {
                     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
@@ -51,7 +51,7 @@ public class ModelicaManager {
         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
@@ -62,19 +62,19 @@ public class ModelicaManager {
             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
@@ -83,42 +83,45 @@ public class ModelicaManager {
             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
@@ -126,17 +129,17 @@ public class ModelicaManager {
             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
index f2c110f95cc940049d1627639bdd7e62249403ca..1794aa36b277ab8dc067a38147f9e4b672b92567 100644 (file)
@@ -67,6 +67,7 @@ public class SysdynResource {
     public final Resource HasStopTime;\r
     public final Resource HasTail;\r
     public final Resource HasTailTerminal;\r
+    public final Resource HasTolerance;\r
     public final Resource HasUnit;\r
     public final Resource HasX;\r
     public final Resource HasY;\r
@@ -155,6 +156,7 @@ public class SysdynResource {
         public static final String HasStopTime = "http://www.simantics.org/Sysdyn-1.0/HasStopTime";\r
         public static final String HasTail = "http://www.simantics.org/Sysdyn-1.0/HasTail";\r
         public static final String HasTailTerminal = "http://www.simantics.org/Sysdyn-1.0/HasTailTerminal";\r
+        public static final String HasTolerance = "http://www.simantics.org/Sysdyn-1.0/HasTolerance";\r
         public static final String HasUnit = "http://www.simantics.org/Sysdyn-1.0/HasUnit";\r
         public static final String HasX = "http://www.simantics.org/Sysdyn-1.0/HasX";\r
         public static final String HasY = "http://www.simantics.org/Sysdyn-1.0/HasY";\r
@@ -253,6 +255,7 @@ public class SysdynResource {
         HasStopTime = getResourceOrNull(graph, URIs.HasStopTime);\r
         HasTail = getResourceOrNull(graph, URIs.HasTail);\r
         HasTailTerminal = getResourceOrNull(graph, URIs.HasTailTerminal);\r
+        HasTolerance = getResourceOrNull(graph, URIs.HasTolerance);\r
         HasUnit = getResourceOrNull(graph, URIs.HasUnit);\r
         HasX = getResourceOrNull(graph, URIs.HasX);\r
         HasY = getResourceOrNull(graph, URIs.HasY);\r
index dfb8d396a194e05f04943b2f5f17583d1e8c2729..c8accfab2411c610ea1dfa236ecc8f7bf0dd4245 100644 (file)
@@ -137,7 +137,8 @@ public class SysdynModel implements IMappingListener, IModel {
                     writer.toString(), \r
                     monitor,\r
                     configuration.startTime,\r
-                    configuration.stopTime);       \r
+                    configuration.stopTime,\r
+                    configuration.tolerance);       \r
             sysdynResult.setResult(result);\r
         } catch(Exception e) {\r
             e.printStackTrace();\r
index 77e632bfe5cb6532bd665b8b75f9d18de06a5de9..87e6fbe055d471b51865bc3f139cd59e42b0b458 100644 (file)
@@ -30,6 +30,9 @@ public class Configuration {
     @RelatedValue("http://www.simantics.org/Sysdyn-1.0/HasStopTime")\r
     public Double stopTime = 10.0;\r
     \r
+    @RelatedValue("http://www.simantics.org/Sysdyn-1.0/HasTolerance")\r
+    public Double tolerance;\r
+    \r
     @RelatedValue("http://www.simantics.org/Layer0-1.0/HasName")\r
     private String name;\r
 \r
index 0838d09fbcdbaee76cc277e99c39907e73ac40fa..011c3ff26f67d9819902d5ee9ace37f3120a0311 100644 (file)
@@ -82,6 +82,7 @@ SysdynModel <T SIMU.Model
   [SIMU.HasConfiguration all Configuration]\r
   [HasStartTime card "1"]\r
   [HasStopTime card "1"]\r
+  [HasTolerance card "0..1"]\r
 \r
 ######################################################################\r
 # Configuration\r
@@ -118,6 +119,9 @@ HasStartTime <R L0.HasProperty
 \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
@@ -525,7 +529,8 @@ _ @ "WorkModel" : SysdynModel
 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
@@ -542,11 +547,15 @@ WorkModelConfiguration @ "WorkModelConfiguration" : Configuration
     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
@@ -555,6 +564,10 @@ WorkModelConfiguration @ "WorkModelConfiguration" : Configuration
       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
@@ -586,6 +599,13 @@ WorkModelConfiguration @ "WorkModelConfiguration" : Configuration
       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
@@ -613,6 +633,9 @@ WorkModelConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
     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
@@ -625,6 +648,12 @@ WorkModelConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
     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
@@ -661,8 +690,16 @@ WorkModelConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
     _ : 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
@@ -674,10 +711,6 @@ WorkModuleConfiguration @ "WorkModuleConfiguration" : Configuration
       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
@@ -687,7 +720,7 @@ WorkModuleConfiguration @ "WorkModuleConfiguration" : Configuration
     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
@@ -696,6 +729,12 @@ WorkModuleConfiguration @ "WorkModuleConfiguration" : Configuration
       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
@@ -706,10 +745,15 @@ WorkModuleConfiguration @ "WorkModuleConfiguration" : Configuration
       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
@@ -720,23 +764,15 @@ WorkModuleConfiguration @ "WorkModuleConfiguration" : Configuration
       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
@@ -745,9 +781,13 @@ WorkModuleConfiguration @ "WorkModuleConfiguration" : Configuration
     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
@@ -764,9 +804,7 @@ WorkModuleConfiguration @ "WorkModuleConfiguration" : Configuration
     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
@@ -784,7 +822,11 @@ WorkModuleConfiguration @ "WorkModuleConfiguration" : Configuration
     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
@@ -799,6 +841,10 @@ WorkModuleConfiguration @ "WorkModuleConfiguration" : Configuration
       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
@@ -811,65 +857,68 @@ WorkModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
         \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
@@ -895,9 +944,6 @@ WorkModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
     _ : 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
@@ -924,8 +970,11 @@ WorkModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
       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
@@ -947,6 +996,12 @@ WorkModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
     _ : 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