]> gerrit.simantics Code Review - simantics/sysdyn.git/commitdiff
Another example model (simulation not working)
authorlempinen <lempinen@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Thu, 5 Aug 2010 12:44:24 +0000 (12:44 +0000)
committerlempinen <lempinen@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Thu, 5 Aug 2010 12:44:24 +0000 (12:44 +0000)
git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@16964 ac1ea38d-2e2b-0410-8846-a27921b304fc

org.simantics.sysdyn/src/org/simantics/sysdyn/SysdynResource.java
org.simantics.sysdyn/src/org/simantics/sysdyn/modelica/ModelicaWriter.java
sysdyn_ontologies/sysdyn.graph

index da9f555a3d0b65712e83f0fa977bbef05765c16b..e95f4987de91418e36c45177ae26346db039cf5d 100644 (file)
@@ -21,6 +21,8 @@ import org.simantics.db.exception.DatabaseException;
 public class SysdynResource {\r
     \r
     public final Resource Admin1;\r
+    public final Resource Admin1;\r
+    public final Resource Admin2;\r
     public final Resource Admin2;\r
     public final Resource Auxiliary;\r
     public final Resource AuxiliarySymbol;\r
@@ -41,7 +43,6 @@ public class SysdynResource {
     public final Resource DiagramToCompositeMapping;\r
     public final Resource Experiment;\r
     public final Resource Expression;\r
-    public final Resource FirstModule;\r
     public final Resource Flow;\r
     public final Resource FlowConnection;\r
     public final Resource GameExperiment;\r
@@ -86,7 +87,6 @@ public class SysdynResource {
     public final Resource RefersTo;\r
     public final Resource Result;\r
     public final Resource RootConfigurationDiagram;\r
-    public final Resource SecondModule;\r
     public final Resource SimulateOnChangeExperiment;\r
     public final Resource Stock;\r
     public final Resource StockExpression;\r
@@ -100,11 +100,18 @@ public class SysdynResource {
     public final Resource ValveSymbol;\r
     public final Resource Variable;\r
     public final Resource WithLookupExpression;\r
+    public final Resource WorkModelConfigurationDiagram;\r
+    public final Resource WorkModuleConfigurationDiagram;\r
+    public final Resource WorkSymbol;\r
+    public final Resource WorkforceModuleConfigurationDiagram;\r
+    public final Resource WorkforceSymbol;\r
     public final Resource angle;\r
     \r
     public static class URIs {\r
+        public static final String Admin1 = "http://www.simantics.org/Sysdyn-1.0/Admin1";\r
         public static final String Admin1 = "http://www.simantics.org/Sysdyn-1.0/Admin1";\r
         public static final String Admin2 = "http://www.simantics.org/Sysdyn-1.0/Admin2";\r
+        public static final String Admin2 = "http://www.simantics.org/Sysdyn-1.0/Admin2";\r
         public static final String Auxiliary = "http://www.simantics.org/Sysdyn-1.0/Auxiliary";\r
         public static final String AuxiliarySymbol = "http://www.simantics.org/Sysdyn-1.0/AuxiliarySymbol";\r
         public static final String BasicExperiment = "http://www.simantics.org/Sysdyn-1.0/BasicExperiment";\r
@@ -124,7 +131,6 @@ public class SysdynResource {
         public static final String DiagramToCompositeMapping = "http://www.simantics.org/Sysdyn-1.0/DiagramToCompositeMapping";\r
         public static final String Experiment = "http://www.simantics.org/Sysdyn-1.0/Experiment";\r
         public static final String Expression = "http://www.simantics.org/Sysdyn-1.0/Expression";\r
-        public static final String FirstModule = "http://www.simantics.org/Sysdyn-1.0/FirstModule";\r
         public static final String Flow = "http://www.simantics.org/Sysdyn-1.0/Flow";\r
         public static final String FlowConnection = "http://www.simantics.org/Sysdyn-1.0/FlowConnection";\r
         public static final String GameExperiment = "http://www.simantics.org/Sysdyn-1.0/GameExperiment";\r
@@ -169,7 +175,6 @@ public class SysdynResource {
         public static final String RefersTo = "http://www.simantics.org/Sysdyn-1.0/RefersTo";\r
         public static final String Result = "http://www.simantics.org/Sysdyn-1.0/Result";\r
         public static final String RootConfigurationDiagram = "http://www.simantics.org/Sysdyn-1.0/RootConfigurationDiagram";\r
-        public static final String SecondModule = "http://www.simantics.org/Sysdyn-1.0/SecondModule";\r
         public static final String SimulateOnChangeExperiment = "http://www.simantics.org/Sysdyn-1.0/SimulateOnChangeExperiment";\r
         public static final String Stock = "http://www.simantics.org/Sysdyn-1.0/Stock";\r
         public static final String StockExpression = "http://www.simantics.org/Sysdyn-1.0/StockExpression";\r
@@ -183,6 +188,11 @@ public class SysdynResource {
         public static final String ValveSymbol = "http://www.simantics.org/Sysdyn-1.0/ValveSymbol";\r
         public static final String Variable = "http://www.simantics.org/Sysdyn-1.0/Variable";\r
         public static final String WithLookupExpression = "http://www.simantics.org/Sysdyn-1.0/WithLookupExpression";\r
+        public static final String WorkModelConfigurationDiagram = "http://www.simantics.org/Sysdyn-1.0/WorkModelConfigurationDiagram";\r
+        public static final String WorkModuleConfigurationDiagram = "http://www.simantics.org/Sysdyn-1.0/WorkModuleConfigurationDiagram";\r
+        public static final String WorkSymbol = "http://www.simantics.org/Sysdyn-1.0/WorkSymbol";\r
+        public static final String WorkforceModuleConfigurationDiagram = "http://www.simantics.org/Sysdyn-1.0/WorkforceModuleConfigurationDiagram";\r
+        public static final String WorkforceSymbol = "http://www.simantics.org/Sysdyn-1.0/WorkforceSymbol";\r
         public static final String angle = "http://www.simantics.org/Sysdyn-1.0/angle";\r
     }\r
     \r
@@ -197,6 +207,8 @@ public class SysdynResource {
     \r
     public SysdynResource(ReadGraph graph) {\r
         Admin1 = getResourceOrNull(graph, URIs.Admin1);\r
+        Admin1 = getResourceOrNull(graph, URIs.Admin1);\r
+        Admin2 = getResourceOrNull(graph, URIs.Admin2);\r
         Admin2 = getResourceOrNull(graph, URIs.Admin2);\r
         Auxiliary = getResourceOrNull(graph, URIs.Auxiliary);\r
         AuxiliarySymbol = getResourceOrNull(graph, URIs.AuxiliarySymbol);\r
@@ -217,7 +229,6 @@ public class SysdynResource {
         DiagramToCompositeMapping = getResourceOrNull(graph, URIs.DiagramToCompositeMapping);\r
         Experiment = getResourceOrNull(graph, URIs.Experiment);\r
         Expression = getResourceOrNull(graph, URIs.Expression);\r
-        FirstModule = getResourceOrNull(graph, URIs.FirstModule);\r
         Flow = getResourceOrNull(graph, URIs.Flow);\r
         FlowConnection = getResourceOrNull(graph, URIs.FlowConnection);\r
         GameExperiment = getResourceOrNull(graph, URIs.GameExperiment);\r
@@ -262,7 +273,6 @@ public class SysdynResource {
         RefersTo = getResourceOrNull(graph, URIs.RefersTo);\r
         Result = getResourceOrNull(graph, URIs.Result);\r
         RootConfigurationDiagram = getResourceOrNull(graph, URIs.RootConfigurationDiagram);\r
-        SecondModule = getResourceOrNull(graph, URIs.SecondModule);\r
         SimulateOnChangeExperiment = getResourceOrNull(graph, URIs.SimulateOnChangeExperiment);\r
         Stock = getResourceOrNull(graph, URIs.Stock);\r
         StockExpression = getResourceOrNull(graph, URIs.StockExpression);\r
@@ -276,6 +286,11 @@ public class SysdynResource {
         ValveSymbol = getResourceOrNull(graph, URIs.ValveSymbol);\r
         Variable = getResourceOrNull(graph, URIs.Variable);\r
         WithLookupExpression = getResourceOrNull(graph, URIs.WithLookupExpression);\r
+        WorkModelConfigurationDiagram = getResourceOrNull(graph, URIs.WorkModelConfigurationDiagram);\r
+        WorkModuleConfigurationDiagram = getResourceOrNull(graph, URIs.WorkModuleConfigurationDiagram);\r
+        WorkSymbol = getResourceOrNull(graph, URIs.WorkSymbol);\r
+        WorkforceModuleConfigurationDiagram = getResourceOrNull(graph, URIs.WorkforceModuleConfigurationDiagram);\r
+        WorkforceSymbol = getResourceOrNull(graph, URIs.WorkforceSymbol);\r
         angle = getResourceOrNull(graph, URIs.angle);\r
     }\r
     \r
index f3abe32ed28a915f527881e8314ae05ee996a813..21aef064e583dfd1c4cb18da223a292f01cff5fe 100644 (file)
@@ -24,20 +24,21 @@ import org.simantics.sysdyn.representation.Stock;
 import org.simantics.sysdyn.representation.IndependentVariable;\r
 import org.simantics.sysdyn.representation.Variable;\r
 import org.simantics.sysdyn.representation.expressions.IExpression;\r
-import org.simantics.sysdyn.representation.expressions.WithLookupExpression;\r
 \r
 public class ModelicaWriter {\r
 \r
     StringBuilder b = new StringBuilder();\r
     String app;\r
     boolean initialEquations = false;\r
-    boolean insertInterpolate = false;\r
+    boolean functionsWritten = false;\r
 \r
     public void write(Configuration conf) {\r
 \r
         writeConfiguration(conf);\r
 \r
-        if(insertInterpolate)\r
+        if(!functionsWritten) {\r
+\r
+            // THIS INTERPOLATE DOESN'T WORK PROPERLY\r
             b.append(\r
                     "\nfunction Interpolate\n" +\r
                     "    input Real table[:, 2];\n" +\r
@@ -54,7 +55,23 @@ public class ModelicaWriter {
                     "    yp := table[i,2] + (xp - table[i,1]) * (table[i+1,2] - table[i,2]) / (table[i+1,1] - table[i,1]);\n" +\r
                     "    end if;\n" +\r
                     "    end for;\n" +\r
-            " end Interpolate;\n");\r
+            "end Interpolate;\n");\r
+\r
+            b.append(\r
+                    "function xidz\n" +\r
+                    "    input Real first;\n" +\r
+                    "    input Real second;\n" +\r
+                    "    input Real x;\n" +\r
+                    "    output Real answer;\n" +\r
+                    "algorithm\n" +\r
+                    "    if second > 0.0 or second < 0.0 then\n" +\r
+                    "        answer := first / second;\n" +\r
+                    "    else\n" +\r
+                    "        answer := x;\n" +\r
+                    "    end if;\n" +\r
+            "end xidz;\n\n\n");\r
+            functionsWritten = true;\r
+        }\r
     }\r
 \r
     private void writeConfiguration(Configuration configuration) {\r
@@ -68,7 +85,7 @@ public class ModelicaWriter {
         ArrayList<Dependency> inputDependencies = new ArrayList<Dependency>();\r
         ArrayList<Dependency> outputDependencies = new ArrayList<Dependency>();\r
         HashMap<String, ArrayList<Input>> moduleInputs = new HashMap<String, ArrayList<Input>>();\r
-        \r
+\r
         // Initialize lists\r
         for(IElement element : configuration.getElements()) {\r
             if(element instanceof IndependentVariable) {\r
@@ -98,31 +115,30 @@ public class ModelicaWriter {
         ModuleType mt = configuration.getModuleType();\r
         String className = mt != null ? (mt.getName().replace(" ", "")) : (configuration.getName().replace(" ", ""));\r
         b.append("class ").append(className).append('\n');\r
-        \r
+\r
         b.append("// Variable definitions\n");\r
         for(IndependentVariable variable : variables) {\r
             IExpression expr = variable.getExpression();\r
-            if(expr != null && insertInterpolate == false) {\r
+            if(expr != null) {\r
                 app = expr.getDeclaration(variable);\r
                 if (app != null) b.append(app);\r
-                if (expr instanceof WithLookupExpression) insertInterpolate = true;\r
             }\r
         }\r
-        \r
+\r
         if(!modules.isEmpty()) {\r
             b.append("// Module definitions\n");\r
             for(Module m : modules) {\r
                 b.append("    " + m.getType().getName() + " " + m.getName() + ";\n");\r
             }\r
         }\r
-        \r
+\r
         if(!inputs.isEmpty()) {\r
             b.append("// Input definitions\n");\r
             for(Input i : inputs) {\r
                 b.append("    " + i.getType() + " " + i.getName() + ";\n");\r
             }\r
         }\r
-        \r
+\r
         for(Stock stock : stocks) {\r
             IExpression expr = stock.getExpression();\r
             if(expr != null) {\r
@@ -166,21 +182,21 @@ public class ModelicaWriter {
             b.append("    " + module.getName() + "." + reference.getName() + " = " + variable.getName() + ";\n");\r
             moduleInputs.get(module.getName()).remove(reference);\r
         }\r
-        \r
+\r
         b.append("// Default values for inputs in modules\n");\r
         for(String moduleLabel : moduleInputs.keySet()) {\r
             for(Input input : moduleInputs.get(moduleLabel)) {\r
                 b.append("    " + moduleLabel + "." + input.getName() + " = " + input.getDefaultInputValue() + ";\n");\r
             }\r
         }\r
-        \r
+\r
         b.append("end ").append(className).append(";\n\n");\r
 \r
 \r
 //        for(Module m : modules) {\r
 //            writeConfiguration(m.getConfiguration());\r
 //        }\r
-        \r
+\r
     }\r
 \r
     public String escape(String name) {\r
index ce87242493010c8d978b9d3a3782556c5b02ace9..78f3a9b76677b34c37fb52f93b27d466073db17a 100644 (file)
@@ -453,132 +453,626 @@ DependencyConnection <T DIA.Connection
   assert(angle, "0.1" : L0.Double)  \r
   MOD.DiagramConnectionTypeToConnectionType\r
     Dependency\r
-    \r
+\r
 ######################################################################\r
-# Example model with modules\r
+# Work model with two modules\r
 ######################################################################\r
 \r
-ModuleModel @ "ModuleModel" : SysdynModel\r
-  L0.HasLabel "Malli" : L0.String\r
-#  L0.PartOf SysdynModuleTestProject\r
-  SIMU.HasConfiguration ModuleConfiguration\r
-  L0.ConsistsOf _ @ "Experiment" : Experiment\r
-    L0.HasLabel "Experiment" : L0.String\r
-      \r
-  \r
-ModuleConfiguration @ "ModuleConfiguration" : Configuration\r
-  L0.HasLabel "Mallikonfiguraatio" : L0.String\r
+%define dep($e1, $e2, $angle)\r
+    $subject\r
+        tag(AdminIsVisible)\r
+        tag(AdminIsFocusable)\r
+        ST.HasConnectionType SysdynConnectionType\r
+        angle $angle : L0.Double\r
+        DIA.HasArrowConnector _ : DIA.Connector\r
+            HasHeadTerminal $e1\r
+            DIA.AreConnected _ : DIA.Connector \r
+              HasTailTerminal $e2\r
+              DIA.IsPlainConnectorOf $subject\r
+\r
+%define flow($e1, $e2)\r
+    $subject\r
+        tag(AdminIsVisible)\r
+        tag(AdminIsFocusable)\r
+        ST.HasConnectionType SysdynConnectionType\r
+        DIA.HasPlainConnector _ : DIA.Connector\r
+            HasTailTerminal $e2\r
+            DIA.AreConnected _ : DIA.Connector \r
+              HasHeadTerminal $e1\r
+              DIA.IsArrowConnectorOf $subject\r
+              \r
+%define conf_dep($v1, $v2)\r
+    $subject\r
+        tag(MOD.Mapped)\r
+        HasHead $v1\r
+        HasTail $v2\r
+\r
+%define conf_dep_ref($v1, $v2, $ref)\r
+    $subject\r
+        tag(MOD.Mapped)\r
+        HasHead $v1\r
+        HasTail $v2\r
+        RefersTo $ref              \r
+              \r
+WorkSymbol <T ModuleSymbol\r
+  MOD.SymbolToComponentType WorkModule\r
+  ST.IsDefinedBy %list : DIA.Composite <R L0.HasNext\r
+      _ : SysdynTerminal\r
+        terminal(ModuleSymbol, IsHeadOfTerminal)\r
+      _ : SysdynTerminal\r
+        terminal(ModuleSymbol, IsTailOfTerminal)\r
+\r
+WorkforceSymbol <T ModuleSymbol\r
+  MOD.SymbolToComponentType WorkforceModule\r
+  ST.IsDefinedBy %list : DIA.Composite <R L0.HasNext\r
+      _ : SysdynTerminal\r
+        terminal(ModuleSymbol, IsHeadOfTerminal)\r
+      _ : SysdynTerminal\r
+        terminal(ModuleSymbol, IsTailOfTerminal)\r
+\r
+_ @ "WorkModel" : SysdynModel\r
+  L0.HasLabel "Work Model" : L0.String\r
+  L0.PartOf SysdynModuleTestProject\r
+  SIMU.HasConfiguration WorkModelConfiguration\r
+  L0.ConsistsOf \r
+    _ @ "Experiment" : Experiment\r
+      L0.HasLabel "Experiment" : L0.String\r
+    WorkModule\r
+    WorkforceModule  \r
+    WorkModelConfiguration   \r
+\r
+\r
+WorkModelConfiguration @ "WorkModelConfiguration" : Configuration\r
+  L0.HasLabel "WorkModelConfiguration" : L0.String\r
   HasStartTime "0.0" : L0.Double\r
-  HasStopTime "100.0" : L0.Double\r
+  HasStopTime "20.0" : L0.Double\r
   L0.ConsistsOf\r
-    Moduuli1 @ "Moduuli1" : Module1\r
-      L0.HasLabel "EkaModuuli" : L0.String\r
-    ToinenModuuli1 @ "ToinenModuuli1" : Module1\r
-      L0.HasLabel "ToinenEkaModuuli" : L0.String\r
-    RootAux1 @ "Aux1" : Auxiliary\r
-      HasUnit "m" : L0.String\r
-      HasExpression _ : NormalExpression\r
-        HasEquation "1+1" : L0.String\r
-    RootAux2 @ "Aux2" : Auxiliary\r
-      HasUnit "s" : L0.String\r
-      HasExpression _ : NormalExpression\r
-        HasEquation "Aux1" : L0.String\r
-    RootInput1 @ "rootInput" : Auxiliary\r
-      HasUnit "s" : L0.String\r
+    ### Modules\r
+    Workforce @ "Workforce" : WorkforceModule\r
+      tag(MOD.Mapped)\r
+      L0.HasLabel "Workforce" : L0.String\r
+    Work1 @ "Work1" : WorkModule\r
+      tag(MOD.Mapped)\r
+      L0.HasLabel "Work1" : L0.String   \r
+    Work2 @ "Work2" : WorkModule\r
+      tag(MOD.Mapped)\r
+      L0.HasLabel "Work2" : L0.String       \r
+      \r
+    ## Parameters\r
+    Work1CompletionTime @ "Work1CompletionTime" : Auxiliary\r
+      tag(MOD.Mapped)\r
+      HasExpression _ : ParameterExpression\r
+        HasEquation "10" : L0.String     \r
+    Work2CompletionTime @ "Work2CompletionTime" : Auxiliary\r
+      tag(MOD.Mapped)    \r
+      HasExpression _ : ParameterExpression\r
+        HasEquation "11" : L0.String    \r
+     \r
+    ## Inputs\r
+    TotalPossibleWorkingSpeedInput @ "TotalPossibleWorkingSpeedInput" : Input\r
+      tag(MOD.Mapped)\r
+    RequiredWorkingSpeed1 @ "RequiredWorkingSpeed1" : Input\r
+      tag(MOD.Mapped)\r
+    RequiredWorkingSpeed2 @ "RequiredWorkingSpeed2" : Input\r
+      tag(MOD.Mapped)     \r
+      \r
+    ## Auxiliaries    \r
+    RequiredWorkingSpeedTotal @ "RequiredWorkingSpeedTotal" : Auxiliary\r
+      tag(MOD.Mapped)\r
       HasExpression _ : NormalExpression\r
-        HasEquation "1000" : L0.String\r
-    _ : Dependency\r
-      HasHead RootAux2\r
-      HasTail RootAux1\r
-    _  : Dependency\r
-      HasHead Moduuli1\r
-      HasTail RootAux2\r
-      RefersTo FirstModuleInput2\r
-    _  : Dependency\r
-      HasHead ToinenModuuli1\r
-      HasTail RootAux2\r
-      RefersTo FirstModuleInput2\r
-    _  : Dependency\r
-      HasHead RootInput1\r
-      HasTail Moduuli1\r
-      RefersTo FirstModuleOutput1\r
-  \r
-Module1 @ "FirstModule" <T Module\r
-  ST.IsDefinedBy Module1Configuration\r
+        HasEquation "RequiredWorkingSpeed1+RequiredWorkingSpeed2" : L0.String                           \r
+          \r
+    d1  : Dependency\r
+      conf_dep_ref(TotalPossibleWorkingSpeedInput, Workforce, PossibleWorkingSpeed)        \r
+    d2  : Dependency\r
+      conf_dep_ref(Work1, TotalPossibleWorkingSpeedInput, PossibleWorkingSpeedInput)       \r
+    d3  : Dependency\r
+      conf_dep_ref(Work1, Work1CompletionTime, WorkCompletionTimeInput)       \r
+    d4  : Dependency\r
+      conf_dep_ref(Work1, RequiredWorkingSpeed2, RequiredWorkingSpeedOtherProjectsInput)       \r
+    d5  : Dependency\r
+      conf_dep_ref(RequiredWorkingSpeed1, Work1, RequiredWorkingSpeed)       \r
+    d6  : Dependency\r
+      conf_dep_ref(Work2, TotalPossibleWorkingSpeedInput, PossibleWorkingSpeedInput)       \r
+    d7  : Dependency\r
+      conf_dep_ref(Work2, Work2CompletionTime, WorkCompletionTimeInput)       \r
+    d8  : Dependency\r
+      conf_dep_ref(Work2, RequiredWorkingSpeed1, RequiredWorkingSpeedOtherProjectsInput)       \r
+    d9  : Dependency\r
+      conf_dep_ref(RequiredWorkingSpeed2, Work2, RequiredWorkingSpeed)       \r
+    d10  : Dependency\r
+      conf_dep_ref(Workforce, RequiredWorkingSpeedTotal, RequiredWorkingSpeedInput)    \r
+    d11  : Dependency\r
+      conf_dep(RequiredWorkingSpeedTotal, RequiredWorkingSpeed1) \r
+    d12  : Dependency\r
+      conf_dep(RequiredWorkingSpeedTotal, RequiredWorkingSpeed2)\r
+             \r
+WorkModelConfigurationDiagram : ConfigurationDiagram <R L0.HasNext\r
+  MOD.DiagramToComposite WorkModelConfiguration\r
+  DIA.HasLayer _ @ "Admin" : DIA.Layer\r
+    DIA.IsActive "true" : L0.Boolean\r
+    DIA.HasFocusableTag AdminIsFocusable @ "Admin1" <R DIA.IsFocusable\r
+      symmetric()\r
+    DIA.HasVisibleTag AdminIsVisible @ "Admin2" <R DIA.IsVisible\r
+      symmetric()\r
+  L0.HasTrigger _ : DiagramToCompositeMapping\r
+  #DIA.NavigationEnabled "false" : L0.Boolean\r
+  %list_elements\r
+    WorkforceElement : WorkforceSymbol\r
+        MOD.ElementToComponent Workforce\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 101.0, 50.0" : G2D.Transform\r
+    Work1Element : WorkSymbol\r
+        MOD.ElementToComponent Work1\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 114.0, 87.0" : G2D.Transform\r
+    Work2Element : WorkSymbol\r
+        MOD.ElementToComponent Work2\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 108.0, 161.0" : G2D.Transform        \r
+    Work1CompletionTimeElement : AuxiliarySymbol\r
+        MOD.ElementToComponent Work1CompletionTime\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 165.0, 99.0" : G2D.Transform        \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
+    RequiredWorkingSpeedTotalElement : AuxiliarySymbol\r
+        MOD.ElementToComponent RequiredWorkingSpeedTotal\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 32.0, 76.0" : G2D.Transform           \r
+    TotalPossibleWorkingSpeedInputElement : InputSymbol\r
+        MOD.ElementToComponent TotalPossibleWorkingSpeedInput\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 141.0, 60.0" : G2D.Transform\r
+    RequiredWorkingSpeed1Element : InputSymbol\r
+        MOD.ElementToComponent RequiredWorkingSpeed1\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 65.0, 125.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
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d1 \r
+        dep(TotalPossibleWorkingSpeedInputElement, WorkforceElement, "-0.1")        \r
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d2\r
+        dep(Work1Element, TotalPossibleWorkingSpeedInputElement,  "-0.1")      \r
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d3 \r
+        dep(Work1Element , Work1CompletionTimeElement, "-0.1")      \r
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d4 \r
+        dep(Work1Element , RequiredWorkingSpeed2Element, "-0.1")        \r
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d5 \r
+        dep(RequiredWorkingSpeed1Element , Work1Element, "-0.1")      \r
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d6\r
+        dep(Work2Element , TotalPossibleWorkingSpeedInputElement,  "-0.1")      \r
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d7 \r
+        dep(Work2Element , Work2CompletionTimeElement, "-0.1")        \r
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d8 \r
+        dep(Work2Element , RequiredWorkingSpeed1Element, "-0.1")      \r
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d9\r
+        dep(RequiredWorkingSpeed2Element , Work2Element, "-0.1")      \r
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d10\r
+        dep(WorkforceElement, RequiredWorkingSpeedTotalElement, "-0.1")      \r
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d11\r
+        dep(RequiredWorkingSpeedTotalElement, RequiredWorkingSpeed1Element, "-0.1")      \r
+    _ : DependencyConnection\r
+        MOD.DiagramConnectionToConnection d12\r
+        dep(RequiredWorkingSpeedTotalElement, RequiredWorkingSpeed2Element, "-0.1")                      \r
+                                                     \r
+        \r
+WorkModule @ "WorkModule" <T Module\r
+  ST.IsDefinedBy WorkModuleConfiguration\r
+\r
+WorkModuleConfiguration @ "WorkModuleConfiguration" : Configuration\r
+  L0.ConsistsOf   \r
   \r
-Module1Configuration @ "Mod1Conf" : Configuration\r
-  L0.ConsistsOf \r
-    Moduuli2 @ "Moduuli2" : Module2\r
-      L0.HasLabel "TokaModuuli" : L0.String\r
-    FirstModuleInput1 @ "Aux1" : Auxiliary\r
-      HasUnit "s" : L0.String\r
+    ## Parameters\r
+    MaximumWorkingSpeed @ "MaximumWorkingSpeed" : Auxiliary\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
+        HasEquation "0.9" : L0.String \r
+                                     \r
+    ## Valves\r
+    WorkingSpeed @ "WorkingSpeed" : Valve\r
+      tag(MOD.Mapped)\r
       HasExpression _ : NormalExpression\r
-        HasEquation "2+2" : L0.String\r
-    FirstModuleInput2 @ "Aux2" : Auxiliary\r
-      HasUnit "s" : L0.String\r
+        HasEquation "if ProjectIsReady > 0 then 0 else WorkAllocation" : L0.String\r
+    ErrorsGenerated @ "ErrorsGenerated" : Valve\r
+      tag(MOD.Mapped)\r
+      HasExpression _ : NormalExpression\r
+        HasEquation "(1-WorkQuality)*WorkingSpeed" : L0.String                                                         \r
+    ErrorsFoundRate @ "ErrorsFoundRate" : Valve\r
+      tag(MOD.Mapped)\r
       HasExpression _ : NormalExpression\r
-        HasEquation "2+2" : L0.String\r
-    FirstModuleStock @ "Stock1" : Stock\r
+        HasEquation "Errors/ErrorsFoundTime" : L0.String   \r
+        \r
+    ## Stocks\r
+    WorkToDo @ "WorkToDo" : Stock\r
+      tag(MOD.Mapped)\r
+      HasExpression _ : StockExpression\r
+        HasInitialEquation "ProjectWorkAmount" : L0.String     \r
+    WorkDone @ "WorkDone" : Stock\r
+      tag(MOD.Mapped)\r
       HasExpression _ : StockExpression\r
-        HasInitialEquation "0" : L0.String\r
-    FirstModuleCloud : Cloud\r
-    FirstModuleOutput1 @ "Valve" : Valve\r
-      HasUnit "s" : L0.String\r
+        HasInitialEquation "0" : L0.String    \r
+    Errors @ "Errors" : 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
       HasExpression _ : NormalExpression\r
-        HasEquation "Aux1 + Aux2" : L0.String    \r
-      tag(IsOutput)  \r
-    _ : Flow\r
-      HasHead FirstModuleOutput1\r
-      HasTail FirstModuleCloud\r
-    _ : Flow\r
-      HasHead FirstModuleStock\r
-      HasTail FirstModuleOutput1\r
-    _ : Dependency\r
-      HasHead FirstModuleOutput1\r
-      HasTail FirstModuleInput1\r
-    _ : Dependency\r
-      HasHead FirstModuleOutput1\r
-      HasTail FirstModuleInput2\r
-    _  : Dependency\r
-      HasHead Moduuli2\r
-      HasTail FirstModuleOutput1\r
-      RefersTo SecondModuleInput1\r
-  \r
-Module2 @ "SecondModule" <T Module\r
-  ST.IsDefinedBy Module2Configuration\r
-\r
-Module2Configuration @ "Mod2Conf" : Configuration\r
-  L0.ConsistsOf \r
-    SecondModuleInput1 @ "Aux1" : Auxiliary\r
-      HasUnit "s" : L0.String\r
+        HasEquation "max(0, WorkCompletionTimeInput-time)" : L0.String     \r
+    RequiredWorkingSpeed @ "RequiredWorkingSpeed" : 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
+    WorkAllocation @ "WorkAllocation" : Auxiliary\r
+      tag(MOD.Mapped)\r
       HasExpression _ : NormalExpression\r
-        HasEquation "2+2" : L0.String\r
-    SecondModuleInput2 @ "Aux2" : Auxiliary\r
-      HasUnit "s" : L0.String\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 "2+2" : L0.String\r
-    SecondModuleStock @ "Stock1" : Stock\r
+        HasEquation "WorkDone/ProjectWorkAmount" : L0.String     \r
+    ErrorsFoundTime @ "ErrorsFoundTime" : Auxiliary\r
+      tag(MOD.Mapped)\r
+      HasExpression _ : WithLookupExpression\r
+        HasEquation "ProjectReadyness" : L0.String   \r
+        HasLookup "{{0,5},{0.5,3},{1,0.5},{2,0.5}}" : L0.String   \r
+\r
+    ## Inputs\r
+    WorkCompletionTimeInput @ "WorkCompletionTimeInput" : Input\r
+      tag(MOD.Mapped)\r
+    PossibleWorkingSpeedInput @ "PossibleWorkingSpeedInput" : Input\r
+      tag(MOD.Mapped)   \r
+    RequiredWorkingSpeedOtherProjectsInput @ "RequiredWorkingSpeedOtherProjectsInput" : Input\r
+      tag(MOD.Mapped)                                    \r
+   \r
+    c31 : Cloud\r
+   \r
+    d31  : Dependency\r
+      conf_dep(TimeToDeadline, WorkCompletionTimeInput)     \r
+    d32  : Dependency\r
+      conf_dep(RequiredWorkingSpeed, MaximumWorkingSpeed)     \r
+    d33  : Dependency\r
+      conf_dep(RequiredWorkingSpeed, TimeToDeadline)     \r
+    d34  : Dependency\r
+      conf_dep(RequiredWorkingSpeed, ProjectIsReady)     \r
+    d35  : Dependency\r
+      conf_dep(RequiredWorkingSpeed, WorkToDo)     \r
+    d36  : Dependency\r
+      conf_dep(WorkAllocation, RequiredWorkingSpeedOtherProjectsInput)     \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
+    d40  : Dependency\r
+      conf_dep(ProjectReadyness, WorkDone)     \r
+    d41  : Dependency\r
+      conf_dep(ProjectReadyness, ProjectWorkAmount)     \r
+    d42 : Dependency\r
+      conf_dep(WorkingSpeed, WorkAllocation)     \r
+    d43 : Dependency\r
+      conf_dep(WorkingSpeed, ProjectIsReady)     \r
+    d44 : Dependency\r
+      conf_dep(ErrorsGenerated, WorkingSpeed)     \r
+    d45 : Dependency\r
+      conf_dep(ErrorsGenerated, WorkQuality)     \r
+    d46 : Dependency\r
+      conf_dep(ErrorsFoundRate, Errors)     \r
+    d47 : Dependency\r
+      conf_dep(ErrorsFoundRate, ErrorsFoundTime)     \r
+    d48 : Dependency\r
+      conf_dep(ErrorsFoundTime, ProjectReadyness)     \r
+    f31  : Flow\r
+      conf_dep(WorkingSpeed, WorkToDo)   \r
+    f32  : Flow\r
+      conf_dep(WorkDone, WorkingSpeed)   \r
+    f33  : Flow\r
+      conf_dep(ErrorsGenerated, c31)   \r
+    f34  : Flow\r
+      conf_dep(Errors, ErrorsGenerated)   \r
+    f35  : Flow\r
+      conf_dep(ErrorsFoundRate, Errors)   \r
+    f36  : Flow\r
+      conf_dep(ErrorsFoundRate, WorkDone)   \r
+    f37  : Flow\r
+      conf_dep(WorkToDo, ErrorsFoundRate)   \r
+       \r
+WorkModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext\r
+  MOD.DiagramToComposite WorkModuleConfiguration\r
+  DIA.HasLayer _ @ "Admin" : DIA.Layer\r
+    DIA.IsActive "true" : L0.Boolean\r
+    DIA.HasFocusableTag AdminIsFocusable\r
+    DIA.HasVisibleTag AdminIsVisible\r
+  L0.HasTrigger _ : DiagramToCompositeMapping\r
+  %list_elements  \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
+    PossibleWorkingSpeedInputElement : InputSymbol\r
+        MOD.ElementToComponent PossibleWorkingSpeedInput\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 155.0, 35.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
+      \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
+    ErrorsGeneratedElement : ValveSymbol\r
+        MOD.ElementToComponent ErrorsGenerated\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 120.0, 90.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
+        \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
+    WorkDoneElement : StockSymbol\r
+        MOD.ElementToComponent WorkDone\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 141.0, 75.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
+          \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
+    WorkQualityElement : AuxiliarySymbol\r
+        MOD.ElementToComponent WorkQuality\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 105.0, 110.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
+    RequiredWorkingSpeedElement : AuxiliarySymbol\r
+        MOD.ElementToComponent RequiredWorkingSpeed\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 85.0, 55.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
+    ErrorsFoundTimeElement : AuxiliarySymbol\r
+        MOD.ElementToComponent ErrorsFoundTime\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 145.0, 135.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
+              \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d31\r
+      dep(TimeToDeadlineElement, WorkCompletionTimeInputElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d32\r
+      dep(RequiredWorkingSpeedElement, MaximumWorkingSpeedElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d33\r
+      dep(RequiredWorkingSpeedElement, TimeToDeadlineElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d34\r
+      dep(RequiredWorkingSpeedElement, ProjectIsReadyElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d35\r
+      dep(RequiredWorkingSpeedElement, WorkToDoElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d36\r
+      dep(WorkAllocationElement, RequiredWorkingSpeedOtherProjectsInputElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d37\r
+      dep(WorkAllocationElement, PossibleWorkingSpeedInputElement  , "-0.1")  \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
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d41\r
+      dep(ProjectReadynessElement, ProjectWorkAmountElement  , "-0.1")      \r
+    _ : DependencyConnection      \r
+      MOD.DiagramConnectionToConnection d42\r
+      dep(WorkingSpeedElement, WorkAllocationElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d43\r
+      dep(WorkingSpeedElement, ProjectIsReadyElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d44\r
+      dep(ErrorsGeneratedElement, WorkingSpeedElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d45\r
+      dep(ErrorsGeneratedElement, WorkQualityElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d46\r
+      dep(ErrorsFoundRateElement, ErrorsElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d47\r
+      dep(ErrorsFoundRateElement, ErrorsFoundTimeElement  , "-0.1")  \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d48\r
+      dep(ErrorsFoundTimeElement, ProjectReadynessElement  , "-0.1")  \r
+\r
+    _ : FlowConnection\r
+        MOD.DiagramConnectionToConnection f31\r
+        flow(WorkingSpeedElement, WorkToDoElement  ) \r
+    _ : FlowConnection\r
+        MOD.DiagramConnectionToConnection f32\r
+        flow(WorkDoneElement, WorkingSpeedElement  ) \r
+    _ : FlowConnection\r
+        MOD.DiagramConnectionToConnection f33\r
+        flow(ErrorsGeneratedElement, c31Element  ) \r
+    _ : FlowConnection\r
+        MOD.DiagramConnectionToConnection f34\r
+        flow(ErrorsElement, ErrorsGeneratedElement  ) \r
+    _ : FlowConnection\r
+        MOD.DiagramConnectionToConnection f35\r
+        flow(ErrorsFoundRateElement, ErrorsElement  ) \r
+    _ : FlowConnection\r
+        MOD.DiagramConnectionToConnection f36\r
+        flow(ErrorsFoundRateElement, WorkDoneElement  ) \r
+    _ : FlowConnection\r
+        MOD.DiagramConnectionToConnection f37\r
+        flow(WorkToDoElement, ErrorsFoundRateElement  ) \r
+                      \r
+      \r
+WorkforceModule @ "WorkforceModule" <T Module\r
+  ST.IsDefinedBy WorkforceModuleConfiguration\r
+\r
+WorkforceModuleConfiguration @ "WorkforceModuleConfiguration" : Configuration\r
+  L0.ConsistsOf   \r
+  \r
+    ## Parameters\r
+    TimeToAllocateResources @ "TimeToAllocateResources" : Auxiliary\r
+      tag(MOD.Mapped)\r
+      HasExpression _ : ParameterExpression\r
+        HasEquation "2" : L0.String    \r
+    Productivity @ "Productivity" : Auxiliary\r
+      tag(MOD.Mapped)      \r
+      HasExpression _ : ParameterExpression\r
+        HasEquation "1" : L0.String      \r
+    \r
+    ## Valve\r
+    NetResources @ "NetResources" : Valve\r
+      tag(MOD.Mapped)\r
+      HasExpression _ : NormalExpression\r
+        HasEquation "(WorkForceRequired-WorkforceStock)/TimeToAllocateResources" : L0.String      \r
+\r
+    ## Stock\r
+    WorkforceStock @ "WorkforceStock" : Stock\r
+      tag(MOD.Mapped)\r
       HasExpression _ : StockExpression\r
-        HasInitialEquation "0" : L0.String\r
-    SecondModuleCloud : Cloud\r
-    SecondModuleOutput1 @ "Valve" : Valve\r
-      HasUnit "s" : L0.String\r
+        HasInitialEquation "0" : L0.String        \r
+    \r
+    ## Auxiliaries    \r
+    WorkForceRequired @ "WorkForceRequired" : Auxiliary\r
+      tag(MOD.Mapped)\r
       HasExpression _ : NormalExpression\r
-        HasEquation "Aux1 + Aux2" : L0.String      \r
+        HasEquation "RequiredWorkingSpeedInput/Productivity" : L0.String     \r
+    PossibleWorkingSpeed @ "PossibleWorkingSpeed" : Auxiliary\r
+      tag(MOD.Mapped)\r
       tag(IsOutput)\r
-    _ : Flow\r
-      HasHead SecondModuleOutput1\r
-      HasTail SecondModuleCloud\r
-    _ : Flow\r
-      HasHead SecondModuleStock\r
-      HasTail SecondModuleOutput1\r
-    _ : Dependency\r
-      HasHead SecondModuleOutput1\r
-      HasTail SecondModuleInput1\r
-    _ : Dependency\r
-      HasHead SecondModuleOutput1\r
-      HasTail SecondModuleInput2\r
-  \r
+      HasExpression _ : NormalExpression\r
+        HasEquation "WorkforceStock*Productivity" : L0.String     \r
+                \r
+    ## Inputs\r
+    RequiredWorkingSpeedInput @ "RequiredWorkingSpeedInput" : Input\r
+      tag(MOD.Mapped)     \r
+      \r
+    c21 : Cloud\r
+      \r
+    d21  : Dependency\r
+      conf_dep(NetResources, TimeToAllocateResources)     \r
+    d22  : Dependency\r
+      conf_dep(NetResources, WorkforceStock)  \r
+    d23  : Dependency\r
+      conf_dep(NetResources, WorkForceRequired)  \r
+    d24  : Dependency\r
+      conf_dep(WorkForceRequired, Productivity)  \r
+    d25  : Dependency\r
+      conf_dep(WorkForceRequired, RequiredWorkingSpeedInput)   \r
+    d26  : Dependency\r
+      conf_dep(PossibleWorkingSpeed, WorkforceStock)  \r
+    d27  : Dependency\r
+      conf_dep(PossibleWorkingSpeed, Productivity)                                                \r
+    f21  : Flow\r
+      conf_dep(WorkforceStock, NetResources)     \r
+    f22  : Flow\r
+      conf_dep(NetResources, c21)  \r
+   \r
+WorkforceModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext\r
+  MOD.DiagramToComposite WorkforceModuleConfiguration\r
+  DIA.HasLayer _ @ "Admin" : DIA.Layer\r
+    DIA.IsActive "true" : L0.Boolean\r
+    DIA.HasFocusableTag AdminIsFocusable\r
+    DIA.HasVisibleTag AdminIsVisible\r
+  L0.HasTrigger _ : DiagramToCompositeMapping\r
+  %list_elements  \r
+    TimeToAllocateResourcesElement : AuxiliarySymbol\r
+        MOD.ElementToComponent TimeToAllocateResources\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 45.0, 75.0" : G2D.Transform   \r
+    ProductivityElement : AuxiliarySymbol\r
+        MOD.ElementToComponent Productivity\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 120.0, 115.0" : G2D.Transform\r
+    NetResourcesElement : ValveSymbol\r
+        MOD.ElementToComponent NetResources\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 60.0, 84.0" : G2D.Transform    \r
+    WorkforceStockElement : StockSymbol\r
+        MOD.ElementToComponent WorkforceStock\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 93.0, 84.0" : G2D.Transform               \r
+    WorkForceRequiredElement : AuxiliarySymbol\r
+        MOD.ElementToComponent WorkForceRequired\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 82.0, 117.0" : G2D.Transform\r
+    PossibleWorkingSpeedElement : AuxiliarySymbol\r
+        MOD.ElementToComponent PossibleWorkingSpeed\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 115.0, 102.0" : G2D.Transform    \r
+    RequiredWorkingSpeedInputElement : InputSymbol\r
+        MOD.ElementToComponent RequiredWorkingSpeedInput\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 45.0, 127.0" : G2D.Transform     \r
+    c21Element : CloudSymbol\r
+        MOD.ElementToComponent c21\r
+        DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 45.0, 85.0" : G2D.Transform       \r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d21\r
+      dep(NetResourcesElement, TimeToAllocateResourcesElement , "-0.1")\r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d22\r
+      dep(NetResourcesElement, WorkforceStockElement , "-0.1")\r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d23\r
+      dep(NetResourcesElement, WorkForceRequiredElement , "-0.1")\r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d24\r
+      dep(WorkForceRequiredElement, ProductivityElement , "-0.1")\r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d25\r
+      dep(WorkForceRequiredElement, RequiredWorkingSpeedInputElement , "-0.1")\r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d26\r
+      dep(PossibleWorkingSpeedElement, WorkforceStockElement , "-0.1")\r
+    _ : DependencyConnection\r
+      MOD.DiagramConnectionToConnection d27\r
+      dep(PossibleWorkingSpeedElement, ProductivityElement , "-0.1")        \r
+    _ : FlowConnection\r
+        MOD.DiagramConnectionToConnection f21\r
+        flow(WorkforceStockElement, NetResourcesElement )              \r
+    _ : FlowConnection\r
+        MOD.DiagramConnectionToConnection f22\r
+        flow(c21Element, NetResourcesElement )                                    \r
+        \r
   \r
 ######################################################################\r
 # Customer model\r
@@ -611,39 +1105,13 @@ _ @ "CustomerModel" : SysdynModel
     CapacityModule  \r
     RootConfiguration   \r
 \r
-# Layerit ja connectiontype!\r
-\r
-%define dep($e1, $e2, $angle)\r
-    $subject\r
-        tag(AdminIsVisible)\r
-        tag(AdminIsFocusable)\r
-        ST.HasConnectionType SysdynConnectionType\r
-        angle $angle : L0.Double\r
-        DIA.HasArrowConnector _ : DIA.Connector\r
-            HasHeadTerminal $e1\r
-            DIA.AreConnected _ : DIA.Connector \r
-              HasTailTerminal $e2\r
-              DIA.IsPlainConnectorOf $subject\r
-\r
-%define flow($e1, $e2)\r
-    $subject\r
-        tag(AdminIsVisible)\r
-        tag(AdminIsFocusable)\r
-        ST.HasConnectionType SysdynConnectionType\r
-        DIA.HasPlainConnector _ : DIA.Connector\r
-            HasTailTerminal $e1\r
-            DIA.AreConnected _ : DIA.Connector \r
-              HasHeadTerminal $e2\r
-              DIA.IsArrowConnectorOf $subject\r
-\r
-\r
 RootConfigurationDiagram : ConfigurationDiagram <R L0.HasNext\r
   MOD.DiagramToComposite RootConfiguration\r
   DIA.HasLayer _ @ "Admin" : DIA.Layer\r
     DIA.IsActive "true" : L0.Boolean\r
-    DIA.HasFocusableTag AdminIsFocusable @ "Admin1" <R DIA.IsFocusable\r
+    DIA.HasFocusableTag AdminIsFocusableCM @ "Admin1" <R DIA.IsFocusable\r
       symmetric()\r
-    DIA.HasVisibleTag AdminIsVisible @ "Admin2" <R DIA.IsVisible\r
+    DIA.HasVisibleTag AdminIsVisibleCM @ "Admin2" <R DIA.IsVisible\r
       symmetric()\r
   L0.HasTrigger _ : DiagramToCompositeMapping\r
   #DIA.NavigationEnabled "false" : L0.Boolean\r
@@ -683,10 +1151,10 @@ RootConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
         DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 136.0, 90.0" : G2D.Transform\r
     _ : FlowConnection\r
         MOD.DiagramConnectionToConnection Flow1 \r
-        flow(DummyCloudElement, SalesRevenueElement)\r
+        flow(SalesRevenueElement, DummyCloudElement)\r
     _ : FlowConnection\r
         MOD.DiagramConnectionToConnection Flow2\r
-        flow(SalesRevenueElement, CumulativeRevenueElement)\r
+        flow(CumulativeRevenueElement ,SalesRevenueElement)\r
     _ : DependencyConnection\r
         MOD.DiagramConnectionToConnection Dependency1 \r
         dep(SalesRevenueElement, PriceElement, "-0.1")\r
@@ -760,56 +1228,37 @@ RootConfiguration @ "RootConfiguration" : Configuration
     WordOfMouthDemandInput @ "PuskaradioKysynta" : Input\r
       tag(MOD.Mapped)\r
     CapacityInput @ "KapasiteettiInput" : Input\r
+      tag(MOD.Mapped) \r
+    Flow1 : Flow\r
       tag(MOD.Mapped)\r
-\r
-%define conf_dep($v1, $v2)\r
-    $subject\r
-        tag(MOD.Mapped)\r
-        HasHead $v1\r
-        HasTail $v2\r
-        L0.PartOf RootConfiguration\r
-\r
-%define conf_dep_ref($v1, $v2, $ref)\r
-    $subject\r
-        tag(MOD.Mapped)\r
-        HasHead $v1\r
-        HasTail $v2\r
-        L0.PartOf RootConfiguration\r
-        RefersTo $ref\r
-\r
-## RootConfiguration Dependencies    \r
-Flow1 : Flow\r
-  tag(MOD.Mapped)\r
-  HasHead SalesRevenue\r
-  HasTail DummyCloud\r
-  L0.PartOf RootConfiguration\r
-Flow2 : Flow\r
-  tag(MOD.Mapped)\r
-  HasHead CumulativeRevenue\r
-  HasTail SalesRevenue      \r
-  L0.PartOf RootConfiguration\r
-Dependency1 : Dependency\r
-  conf_dep(SalesRevenue, Price)\r
-Dependency2 : Dependency\r
-  conf_dep(SalesRevenue, Sales)\r
-Dependency3 : Dependency\r
-  conf_dep(Sales, NewCustomersInput)\r
-Dependency4 : Dependency\r
-  conf_dep(Sales, WidgetsPerPersonInput)\r
-Dependency5  : Dependency\r
-  conf_dep_ref(Customers, CapacityInput, CapacityInput2)\r
-Dependency6  : Dependency\r
-  conf_dep_ref(Customers, WidgetsPerPersonInput, WidgetsPerPersonInput2)\r
-Dependency7  : Dependency\r
-  conf_dep_ref(WordOfMouthDemandInput, Customers, WordOfMouthDemandOutput)\r
-Dependency8  : Dependency\r
-  conf_dep_ref(Capacity, WordOfMouthDemandInput, WordOfMouthDemandInput2)\r
-Dependency9  : Dependency\r
-  conf_dep_ref(NewCustomersInput, Customers, NewCustomers)\r
-Dependency10  : Dependency\r
-  conf_dep_ref(WidgetsPerPersonInput, Capacity, WidgetsPerPersonOutput)\r
-Dependency11  : Dependency\r
-  conf_dep_ref(CapacityInput, Capacity, CapacityStock)\r
+      HasHead SalesRevenue\r
+      HasTail DummyCloud\r
+    Flow2 : Flow\r
+      tag(MOD.Mapped)\r
+      HasHead CumulativeRevenue\r
+      HasTail SalesRevenue      \r
+    Dependency1 : Dependency\r
+      conf_dep(SalesRevenue, Price)\r
+    Dependency2 : Dependency\r
+      conf_dep(SalesRevenue, Sales)\r
+    Dependency3 : Dependency\r
+      conf_dep(Sales, NewCustomersInput)\r
+    Dependency4 : Dependency\r
+      conf_dep(Sales, WidgetsPerPersonInput)\r
+    Dependency5  : Dependency\r
+      conf_dep_ref(Customers, CapacityInput, CapacityInput2)\r
+    Dependency6  : Dependency\r
+      conf_dep_ref(Customers, WidgetsPerPersonInput, WidgetsPerPersonInput2)\r
+    Dependency7  : Dependency\r
+      conf_dep_ref(WordOfMouthDemandInput, Customers, WordOfMouthDemandOutput)\r
+    Dependency8  : Dependency\r
+      conf_dep_ref(Capacity, WordOfMouthDemandInput, WordOfMouthDemandInput2)\r
+    Dependency9  : Dependency\r
+      conf_dep_ref(NewCustomersInput, Customers, NewCustomers)\r
+    Dependency10  : Dependency\r
+      conf_dep_ref(WidgetsPerPersonInput, Capacity, WidgetsPerPersonOutput)\r
+    Dependency11  : Dependency\r
+      conf_dep_ref(CapacityInput, Capacity, CapacityStock)\r
       \r
 CapacityModule @ "Kapasiteettimoduuli" <T Module\r
   ST.IsDefinedBy CapacityModuleConfiguration\r
@@ -830,7 +1279,7 @@ CapacityModuleConfiguration @ "Kapasiteettimoduulikonfiguraatio" : Configuration
         HasEquation "Kapasiteetti" : L0.String\r
     Production @ "Tuotanto" : Auxiliary\r
       HasExpression _ : NormalExpression\r
-        HasEquation "min({Tavoitetuotanto, PotentiaalinenTuotanto})" : L0.String\r
+        HasEquation "min(Tavoitetuotanto, PotentiaalinenTuotanto)" : L0.String\r
     CapacityLife @ "Kapasiteettielama" : Auxiliary\r
       HasExpression _ : ParameterExpression\r
         HasEquation "20" : L0.String        \r
@@ -928,8 +1377,8 @@ CapacityModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
   MOD.DiagramToComposite CapacityModuleConfiguration\r
   DIA.HasLayer _ @ "Admin" : DIA.Layer\r
     DIA.IsActive "true" : L0.Boolean\r
-    DIA.HasFocusableTag AdminIsFocusable\r
-    DIA.HasVisibleTag AdminIsVisible\r
+    DIA.HasFocusableTag AdminIsFocusableCM\r
+    DIA.HasVisibleTag AdminIsVisibleCM\r
   L0.HasTrigger _ : DiagramToCompositeMapping\r
   %list_elements\r
     DummyCloud2Element : CloudSymbol\r
@@ -949,16 +1398,16 @@ CapacityModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
         DIA.HasTransform "1.0, 0.0, 0.0, 1.0, 175.0, 90.0" : G2D.Transform\r
     _ : FlowConnection\r
         MOD.DiagramConnectionToConnection Flow3\r
-        flow(DummyCloud2Element, InvestmentElement)\r
+        flow(InvestmentElement, DummyCloud2Element)\r
     _ : FlowConnection\r
         MOD.DiagramConnectionToConnection Flow4\r
-        flow(InvestmentElement, CapacityStockElement)\r
+        flow(CapacityStockElement, InvestmentElement)\r
     _ : FlowConnection\r
         MOD.DiagramConnectionToConnection Flow5\r
-        flow(CapacityStockElement, ReductionsElement)\r
+        flow(ReductionsElement, CapacityStockElement)\r
     _ : FlowConnection\r
         MOD.DiagramConnectionToConnection Flow6\r
-        flow(ReductionsElement, DummyCloud3Element)\r
+        flow(DummyCloud3Element, ReductionsElement)\r
    \r
     CapacityAdjustmentElement : AuxiliarySymbol\r
         MOD.ElementToComponent CapacityAdjustment\r
@@ -1062,7 +1511,7 @@ CustomerModuleConfiguration @ "Asiakasmoduulikonfiguraatio" : Configuration
         HasInitialEquation "1000" : L0.String           \r
     NewCustomers @ "UudetAsiakkaat" : Valve\r
       HasExpression _ : NormalExpression\r
-        HasEquation " min({Puskaradiokysynta, Kapasiteetti/WidgettejaHenkilolle})" : L0.String    \r
+        HasEquation " min(Puskaradiokysynta, Kapasiteetti/WidgettejaHenkilolle)" : L0.String    \r
       tag(IsOutput)\r
     ### Input variables\r
     CapacityInput2 @ "Kapasiteetti" : Input\r
@@ -1134,8 +1583,8 @@ CustomerModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
   MOD.DiagramToComposite CustomerModuleConfiguration\r
   DIA.HasLayer _ @ "Admin" : DIA.Layer\r
     DIA.IsActive "true" : L0.Boolean\r
-    DIA.HasFocusableTag AdminIsFocusable\r
-    DIA.HasVisibleTag AdminIsVisible\r
+    DIA.HasFocusableTag AdminIsFocusableCM\r
+    DIA.HasVisibleTag AdminIsVisibleCM\r
   L0.HasTrigger _ : DiagramToCompositeMapping\r
   %list_elements      \r
     ContactsOfNoncustomersWithCustomersElement : AuxiliarySymbol\r
@@ -1179,10 +1628,10 @@ CustomerModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
     ### Dependencies    \r
     _ : FlowConnection\r
         MOD.DiagramConnectionToConnection Flow7\r
-        flow(PotentialCustomersStockElement, NewCustomersElement)      \r
+        flow(NewCustomersElement, PotentialCustomersStockElement)      \r
     _ : FlowConnection\r
         MOD.DiagramConnectionToConnection Flow8\r
-        flow(NewCustomersElement, CustomersStockElement)\r
+        flow(CustomersStockElement, NewCustomersElement)\r
     _ : DependencyConnection\r
       MOD.DiagramConnectionToConnection Dependency24\r
       dep(PotentialCustomerConcentrationElement, TotalMarketElement, "-1.7")\r
@@ -1222,3 +1671,4 @@ CustomerModuleConfigurationDiagram : ConfigurationDiagram <R L0.HasNext
     _ : DependencyConnection\r
       MOD.DiagramConnectionToConnection Dependency36\r
       dep(PotentialCustomerConcentrationElement, PotentialCustomersStockElement, "-0.1")  \r
+        
\ No newline at end of file