]> gerrit.simantics Code Review - simantics/sysdyn.git/commitdiff
Unit validation for functions in Sysdyn: unit definitions for built-in functions...
authormiettinen <miettinen@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Mon, 27 Jan 2014 10:07:38 +0000 (10:07 +0000)
committermiettinen <miettinen@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Mon, 27 Jan 2014 10:07:38 +0000 (10:07 +0000)
git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@28714 ac1ea38d-2e2b-0410-8846-a27921b304fc

30 files changed:
org.simantics.sysdyn.ontology/graph.tg
org.simantics.sysdyn.ontology/graph/ModelicaArrayFunctions.pgraph
org.simantics.sysdyn.ontology/graph/ModelicaFunctions.pgraph
org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph
org.simantics.sysdyn.ontology/graph/SysdynFunctions.pgraph
org.simantics.sysdyn.ontology/graph/VensimFunctions.pgraph
org.simantics.sysdyn.ontology/src/org/simantics/sysdyn/SysdynResource.java
org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ShortcutTabWidget.java
org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/CompletionProcessor.java
org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/utils/NameValidator.java
org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/UnitFunction.java
org.simantics.sysdyn/src/org/simantics/sysdyn/TestParser.java
org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/UnitUtils.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/UnitCheckingNode.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/AddOp.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/Arithmetic.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/ArrayDefinition.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/ComponentReferenceFull.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/Divide.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/Factor.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/ForIndex.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/FunctionCall.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/IfThenElse.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/Multiplication.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/Power.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/RelOp.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/Relation.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/Term.java
org.simantics.sysdyn/src/org/simantics/sysdyn/unitParser/nodes/Value.java
org.simantics.sysdyn/src/org/simantics/sysdyn/utils/Function.java [moved from org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/Function.java with 72% similarity]

index afa595a6e4d2dfbdce0ff3b4c4f8fb787af6c971..130ecefff6f26226ed31a108d800b43ac917dda6 100644 (file)
Binary files a/org.simantics.sysdyn.ontology/graph.tg and b/org.simantics.sysdyn.ontology/graph.tg differ
index aefaea03720caf3d4922e7f1eee5018523ea9be9..847db26c495f56cee5d5a76982e74e6fa319202c 100644 (file)
@@ -16,10 +16,12 @@ Returns the single element of array A. size(A,i) = 1 is required for 1 <= i <= n
             MAF.scalar.A : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.scalar.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
 \r
 \r
 \r
@@ -38,10 +40,12 @@ Real v[2] = vector(A);  // = {3,4}"""
             MAF.vector.A : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.vector.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     \r
     \r
     \r
@@ -61,10 +65,12 @@ C[i_1, ..., i_nA, 1, ..., 1] = A[i_1, ..., i_nA]."""
             MAF.matrix.A : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.matrix.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     \r
     \r
     \r
@@ -79,10 +85,12 @@ Returns the number of dimensions k of array expression A, with k >= 0."""
             MAF.ndims.A : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.ndims.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Integer"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     \r
     \r
     \r
@@ -105,13 +113,16 @@ Integer n[:] = size(A);    // = {8,4,5}"""
             MAF.size.A : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
             MAF.size.i : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional true\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.size.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     \r
     \r
     \r
@@ -131,6 +142,7 @@ The constructor function array(A,B,C,...) constructs an array from its arguments
             MAF.array.A : SYSDYN.SysdynModelicaFunction.VariableLengthInput\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
                 SYSDYN.SysdynModelicaFunction.VariableLengthInput.shownLabels _ : L0.List\r
                     @L0.list\r
                         MAF.array.A.A : L0.String\r
@@ -140,6 +152,7 @@ The constructor function array(A,B,C,...) constructs an array from its arguments
         @L0.list\r
             MAF.array.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     \r
     \r
     \r
@@ -162,9 +175,11 @@ Real[2,6] r2 = cat(2, r1, 2*r1);"""
             MAF.cat.k : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
             MAF.cat.A : SYSDYN.SysdynModelicaFunction.VariableLengthInput\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
                 SYSDYN.SysdynModelicaFunction.VariableLengthInput.shownLabels _ : L0.List\r
                     @L0.list\r
                         MAF.cat.A.A : L0.String\r
@@ -174,6 +189,7 @@ Real[2,6] r2 = cat(2, r1, 2*r1);"""
         @L0.list\r
             MAF.cat.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
 \r
 \r
     \r
@@ -188,6 +204,7 @@ Returns the n1 x n2 x n3 x ... Integer array with all elements equal to zero (ni
             MAF.zeros.n : SYSDYN.SysdynModelicaFunction.VariableLengthInput\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
                 SYSDYN.SysdynModelicaFunction.VariableLengthInput.shownLabels _ : L0.List\r
                     @L0.list\r
                         MAF.zeros.n.n1 : L0.String\r
@@ -197,6 +214,7 @@ Returns the n1 x n2 x n3 x ... Integer array with all elements equal to zero (ni
         @L0.list\r
             MAF.zeros.o : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Integer"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Integer n annotation(__OpenModelica_varArgs = true);\r
     output Integer o[:];"""\r
     \r
@@ -213,6 +231,7 @@ Return the n1 x n2 x n3 x ... Integer array with all elements equal to one (ni >
             MAF.ones.n : SYSDYN.SysdynModelicaFunction.VariableLengthInput\r
                 SYSDYN.Variable.type "Integer"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
                 SYSDYN.SysdynModelicaFunction.VariableLengthInput.shownLabels _ : L0.List\r
                     @L0.list\r
                         MAF.ones.n.n1 : L0.String\r
@@ -222,6 +241,7 @@ Return the n1 x n2 x n3 x ... Integer array with all elements equal to one (ni >
         @L0.list\r
             MAF.ones.o : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Integer"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Integer n annotation(__OpenModelica_varArgs = true);\r
     output Integer o[:];"""\r
     \r
@@ -244,9 +264,11 @@ Boolean vb[3]   = fill(true,3);  // = {true, true, true}"""
             MAF.fill.s : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MAF.fill.n : SYSDYN.SysdynModelicaFunction.VariableLengthInput\r
                 SYSDYN.Variable.type "Integer"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
                 SYSDYN.SysdynModelicaFunction.VariableLengthInput.shownLabels _ : L0.List\r
                     @L0.list\r
                         MAF.fill.n.n1 : L0.String\r
@@ -256,6 +278,7 @@ Boolean vb[3]   = fill(true,3);  // = {true, true, true}"""
         @L0.list\r
             MAF.fill.o : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input OpenModelica.Internal.BuiltinType s;\r
     input Integer n annotation(__OpenModelica_varArgs = true);\r
     output OpenModelica.Internal.BuiltinType o[:];"""\r
@@ -273,10 +296,12 @@ Returns the n x n Integer identity matrix, with ones on the diagonal and zeros a
             MAF.identity.n : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Integer "\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.identity.outArray : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Integer "\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Integer n;\r
     output Integer[n,n] outArray;"""\r
     \r
@@ -293,10 +318,12 @@ Returns a square matrix with the elements of vector v on the diagonal and all ot
             MAF.diagonal.v : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.diagonal.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     \r
     \r
     \r
@@ -316,16 +343,20 @@ Real v[:] = linspace(1,7,4);  // = {1, 3, 5, 7}"""
             MAF.linspace.x1 : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MAF.linspace.x2 : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MAF.linspace.n : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Integer"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.linspace.v : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real x1 "start";\r
     input Real x2 "end";\r
     input Integer n "number";\r
@@ -344,10 +375,12 @@ Returns the smallest element of array expression A."""
             MAF.min.A : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.min.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     \r
     \r
     \r
@@ -362,10 +395,12 @@ Returns the largest element of array expression A."""
             MAF.max.A : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.max.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     \r
     \r
     \r
@@ -391,10 +426,12 @@ sum(i for i in 1:10)  // Gives  1+2+...+10=55
             MAF.sum.A : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.sum.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     \r
     \r
     \r
@@ -419,10 +456,12 @@ Example:
             MAF.product.A : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.product.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     \r
     \r
     \r
@@ -437,10 +476,12 @@ Permutes the first two dimensions of array A. It is an error, if array A does no
             MAF.transpose.A : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.transpose.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     \r
     \r
     \r
@@ -458,13 +499,16 @@ cross(x,y) = vector( [ x[2]*y[3]-x[3]*y[2];
             MAF.cross.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MAF.cross.y : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'q"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.cross.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p*'q"\r
     \r
     \r
     \r
@@ -483,7 +527,10 @@ skew(x) = [ 0   , -x[3],  x[2];
             MAF.skew.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MAF.skew.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
+                
\ No newline at end of file
index 21e2f7d27a6c6abee5d0dce25c1bb660a10e063b..942591adc477bf480669fe66a57488b357cbeab2 100644 (file)
@@ -16,10 +16,12 @@ Returns the absolute value of v. Is expanded into "(if v >= 0 then v else -v)" (
             MF.abs.v : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.abs.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     \r
     \r
     \r
@@ -34,10 +36,12 @@ Returns the inverse of cos of u, with -1 <= u <= +1. Argument u needs to be an I
             MF.acos.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.acos.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real u;\r
     output Real y;"""\r
 \r
@@ -54,10 +58,12 @@ Returns the inverse of sin of u, with -1 <= u <= +1. Argument u needs to be an I
             MF.asin.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.asin.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real u;\r
     output Real y;"""\r
 \r
@@ -74,10 +80,12 @@ Returns the inverse of tan of u, with -INF < u < INF. Argument u needs to be an
             MF.atan.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.atan.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real u;\r
     output Real y;"""\r
         \r
@@ -94,13 +102,16 @@ Returns y = atan2(u1,u2) such that tan(y) = u1/u2 and y is in the range -pi < y
             MF.atan2.u1 : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MF.atan2.u2 : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.atan2.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real u1;\r
     input Real u2;\r
     output Real z;"""\r
@@ -118,10 +129,12 @@ Returns the smallest integer not less than x (i.e. the closest integer above x).
             MF.ceil.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.ceil.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real x;\r
     output Real y;"""\r
         \r
@@ -138,10 +151,12 @@ Returns the cosine of u, with -INF < u < INF Argument u needs to be an Integer o
             MF.ceil.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.ceil.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real u;\r
     output Real y;"""\r
         \r
@@ -158,10 +173,12 @@ Returns the cosh of u, with -INF < u < INF. Argument u needs to be an Integer or
             MF.cosh.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.cosh.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real u;\r
     output Real y;"""\r
         \r
@@ -179,16 +196,20 @@ Returns "expr(time - delayTime)" for time > time.start + delayTime and "expr(tim
             MF.delay.expr : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MF.delay.delayTime : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "TIME"\r
             MF.delay.delayMax : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional true\r
+                SYSDYN.SysdynModelicaFunction.unit "TIME"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.delay.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
         \r
         \r
         \r
@@ -209,10 +230,12 @@ equation
             MF.der.expr : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.der.dexpr : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p/TIME"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """  input Real expr(unit = "'p");\r
   output Real dexpr(unit = "'p/s");"""\r
         \r
@@ -229,13 +252,16 @@ Returns the algebraic quotient x/y with any fractional part discarted (also know
             MF.div.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MF.div.y : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'q"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.div.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p/'q"\r
         \r
         \r
         \r
@@ -250,10 +276,12 @@ Returns true when the value of the boolean expression b changes. Expanded into (
             MF.edge.b : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Boolean"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.edge.edgeEvent : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Boolean"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Boolean b;\r
     output Boolean edgeEvent;"""\r
         \r
@@ -270,10 +298,12 @@ Returns the base e exponential of u, with -INF < u < INF Argument u needs to be
             MF.exp.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.exp.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real u(unit = "1");\r
     output Real y(unit = "1");"""\r
         \r
@@ -290,10 +320,12 @@ Returns the largest integer not greater than x (i.e. the closest integer below x
             MF.floor.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.floor.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real x;\r
     output Real y;"""\r
         \r
@@ -311,6 +343,7 @@ Returns true during the initialization phase and false otherwise."""
         @L0.list\r
             MF.initial.isInitial : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Boolean"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    output Boolean isInitial;"""\r
 \r
 \r
@@ -326,10 +359,12 @@ Returns the base e logarithm of u, with u > 0. Argument u needs to be an Integer
             MF.log.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.log.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                 SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real u(unit = "1");\r
     output Real y(unit = "1");"""\r
         \r
@@ -346,10 +381,12 @@ Returns the base 10 logarithm of u, with u > 0. Argument u needs to be an Intege
             MF.log10.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.log10.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real u(unit = "1");\r
     output Real y(unit = "1");"""\r
         \r
@@ -372,13 +409,16 @@ max(i^2 for i in {3,7,6})  // = 49"""
             MF.max.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MF.max.y : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.max.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
         \r
         \r
         \r
@@ -399,13 +439,16 @@ min(i^2 for i in {3,7,6})  // = 9"""
             MF.min.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MF.min.y : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.min.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
         \r
         \r
         \r
@@ -420,13 +463,16 @@ Returns the integer modulus of x/y: mod(x,y) = x - floor(x/y) * y."""
             MF.mod.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MF.mod.y : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.mod.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
         \r
         \r
         \r
@@ -444,10 +490,12 @@ If you want a condition to be checked only on time steps, use noEvent.
             MF.noEvent.expr : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.noEvent.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
         \r
         \r
         \r
@@ -467,10 +515,14 @@ A new event is triggered if at least for one variable v "pre(v) <> v" after the
             MF.pre.y : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.pre.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
+\r
+\r
         \r
 MF.rem : SYSDYN.SysdynModelicaFunction\r
     L0.HasDescription """rem(x, y)\r
@@ -483,13 +535,16 @@ Returns the integer remainder of x/y: rem(x,y) = x - div(x,y) * y."""
             MF.rem.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MF.rem.y : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.rem.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
         \r
         \r
         \r
@@ -504,13 +559,16 @@ Returns true and triggers time events at times start + i * interval (i=0,1,...).
             MF.sample.start : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "TIME"\r
             MF.sample.interval : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "TIME"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.sample.isSample : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Boolean"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    parameter input Real start(fixed = false);\r
     parameter input Real interval(fixed = false);\r
     output Boolean isSample;"""\r
@@ -551,16 +609,20 @@ sa = sb;"""
             MF.semiLinear.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             MF.semiLinear.positiveSlope : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'q"\r
             MF.semiLinear.negativeSlope : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'q"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.semiLinear.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p*'q"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real x;\r
     input Real positiveSlope;\r
     input Real negativeSlope;\r
@@ -579,10 +641,12 @@ Returns -1 if v is negative, 1 if v is positive. Expanded into "(if v > 0 then 1
             MF.sign.v : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.sign.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Integer"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real v;\r
     output Integer result;"""\r
         \r
@@ -599,10 +663,12 @@ Returns the sine of u, with -INF < u < INF. Argument u needs to be an Integer or
             MF.sin.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.sin.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real x;\r
     output Real y;"""\r
         \r
@@ -619,10 +685,12 @@ Returns the sinh of u, with -INF < u < INF. Argument u needs to be an Integer or
             MF.sinh.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.sinh.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real x;\r
     output Real y;"""\r
         \r
@@ -640,13 +708,16 @@ The only allowed types for expr in smooth are: real expressions, arrays of allow
             MF.smooth.p : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
             MF.smooth.expr : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.smooth.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
         \r
         \r
         \r
@@ -661,10 +732,12 @@ Square root of v. The value of v must be greater or equal to 0 or an assertion e
             MF.sqrt.v : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.sqrt.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real v(unit = "'p");\r
     output Real y(unit = "'p(1/2)");"""\r
         \r
@@ -681,10 +754,12 @@ Returns the tangent of u, with -INF < u < INF (if u is a multiple of (2n-1)*pi/2
             MF.tan.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.tan.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real u;\r
     output Real y;"""\r
         \r
@@ -701,10 +776,12 @@ Returns the tanh of u, with -INF < u < INF. Argument u needs to be an Integer or
             MF.tanh.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             MF.tanh.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    input Real x;\r
     output Real y;"""\r
         \r
@@ -722,5 +799,6 @@ Returns true at the end of a successful simulation."""
         @L0.list\r
             MF.terminal.isTerminal : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Boolean"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """    output Boolean isTerminal;"""\r
         
\ No newline at end of file
index b14b917b2a78708a0de982b818365aa7446b7da8..4fc523d69f5eba066de40a5da247e3649e6e050d 100644 (file)
@@ -324,6 +324,7 @@ SYSDYN.SysdynModelicaFunctionLibrary <T L0.Library
 SYSDYN.SysdynModelicaFunction.InterfaceVariable <T L0.Entity
     @L0.singleProperty L0.HasName
     >-- SYSDYN.SysdynModelicaFunction.definition --> L0.String <R L0.HasProperty
+    >-- SYSDYN.SysdynModelicaFunction.unit --> L0.String <R L0.HasProperty
 
 SYSDYN.SysdynModelicaFunction.Input <T SYSDYN.SysdynModelicaFunction.InterfaceVariable
     >-- SYSDYN.SysdynModelicaFunction.optional --> L0.Boolean <R L0.HasProperty : L0.FunctionalRelation
index c4542a9f2c237327a0d8743aeb763e64f1c17c4f..111bd73bc330f077c411ba749fc936de3b728ab5 100644 (file)
@@ -14,16 +14,20 @@ Limits the result of an equation to between the given minimum and maximum values
             FL.minmax.expression : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             FL.minmax.minimum : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             FL.minmax.maximum : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             FL.minmax.result : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real expression;\r
     input Real minimum;\r
     input Real maximum;\r
@@ -42,17 +46,21 @@ x if divided by zero, divident/divisor otherwise"""
             FL.xidz.divident : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             FL.xidz.divisor : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'q"\r
             FL.xidz.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p/'q"\r
                 SYSDYN.SysdynModelicaFunction.definition "Result if divisor = 0"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             FL.xidz.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p/'q"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real divident;\r
     input Real divisor;\r
     input Real x;\r
@@ -75,13 +83,16 @@ Zero if divided by zero, divident/divisor otherwise"
             FL.zidz.divident : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             FL.zidz.divisor : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'q"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             FL.zidz.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p/'q"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real divident;\r
     input Real divisor;\r
     output Real z;\r
@@ -99,15 +110,18 @@ Interpolate function for two-dimensional table"""
             FL.interpolate.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
                 SYSDYN.SysdynModelicaFunction.definition "input value (first column of table)"\r
             FL.interpolate.table : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
                 SYSDYN.SysdynModelicaFunction.definition "table to be interpolated"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             FL.interpolate.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real u "input value (first column of table)";\r
     input Real table[:, :] "table to be interpolated";\r
     output Real y "interpolated input value (icol column of table)";\r
@@ -125,19 +139,23 @@ The full interpolate function"""
             FL.interpolateFull.u : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
                 SYSDYN.SysdynModelicaFunction.definition "input value (first column of table)"\r
             FL.interpolateFull.table : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
                 SYSDYN.SysdynModelicaFunction.definition "table to be interpolated"\r
             FL.interpolateFull.icol : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Integer"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
                 SYSDYN.SysdynModelicaFunction.definition "column of table to be interpolated"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             FL.interpolateFull.y : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real u "input value (first column of table)";\r
     input Real table[:, :] "table to be interpolated";\r
     input Integer icol "column of table to be interpolated";\r
index f40dfc05a91cd2b77002b95d7f62f69f261f6ae5..3684f3f0bbcb40dce5baf031ca0c0015d48308ee 100644 (file)
@@ -31,16 +31,20 @@ Returns ontrue if cond, otherwise onfalse"""
             VF.IFTHENELSE.cond : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
             VF.IFTHENELSE.ontrue : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             VF.IFTHENELSE.onfalse : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.IFTHENELSE.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Boolean cond;\r
     input Real ontrue;\r
     input Real onfalse;\r
@@ -59,13 +63,16 @@ Returns the larger of a and b."""
             VF.MAX.a : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             VF.MAX.b : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.MAX.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real a;\r
     input Real b;\r
     output Real z;\r
@@ -83,13 +90,16 @@ Returns the smaller of a and b."""
             VF.MIN.a : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             VF.MIN.b : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.MIN.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real a;\r
     input Real b;\r
     output Real z;\r
@@ -107,16 +117,20 @@ x if divided by zero, a/b otherwise."""
             VF.XIDZ.a : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             VF.XIDZ.b : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'q"\r
             VF.XIDZ.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p/'q"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.XIDZ.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p/'q"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real a;\r
     input Real b;\r
     input Real x;\r
@@ -135,13 +149,16 @@ Zero if divided by zero, a/b otherwise."""
             VF.ZIDZ.a : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             VF.ZIDZ.b : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'q"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.ZIDZ.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p/'q"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real a;\r
     input Real b;\r
     output Real z;\r
@@ -159,10 +176,12 @@ Returns the absolute value of x."""
             VF.ABS.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.ABS.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real x;\r
     output Real z;\r
 algorithm\r
@@ -179,10 +198,12 @@ Returns the square root of x."""
             VF.SQRT.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.SQRT.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real x;\r
     output Real z;\r
 algorithm\r
@@ -199,13 +220,16 @@ Returns the remainder when a is divided by b. """
             VF.MODULO.a : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             VF.MODULO.b : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.MODULO.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real a;\r
     input Real b;\r
     output Real z;\r
@@ -223,13 +247,16 @@ Returns 1.0 starting at time start and lasting for interval width. 0.0 is return
             VF.PULSE.start : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "TIME"\r
             VF.PULSE.width : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "TIME"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.PULSE.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real start;\r
     input Real width;\r
     input Real t = time;\r
@@ -248,16 +275,20 @@ Returns 0 until the start time and then slopes upward until end time and then ho
             VF.RAMP.slope : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
             VF.RAMP.startTime : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "TIME"\r
             VF.RAMP.endTime : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "TIME"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.RAMP.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real slope;\r
     input Real startTime;\r
     input Real endTime;\r
@@ -284,13 +315,16 @@ Returns 0.0 until the step time and then returns height."""
             VF.STEP.height : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit ".p"\r
             VF.STEP.stepTime : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "TIME"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.STEP.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "'p"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real height;\r
     input Real stepTime;\r
     input Real t = time;\r
@@ -311,10 +345,12 @@ Exponential, base e."""
             VF.EXP.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.EXP.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real x;\r
     output Real z;\r
 algorithm\r
@@ -331,10 +367,12 @@ Returns the sine of x."""
             VF.SIN.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.SIN.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real x;\r
     output Real z;\r
 algorithm\r
@@ -351,10 +389,12 @@ Returns the hyperbolic sine of x."""
             VF.SINH.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.SINH.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real x;\r
     output Real z;\r
 algorithm\r
@@ -371,10 +411,12 @@ Returns the cosine of x."""
             VF.COS.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.COS.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real x;\r
     output Real z;\r
 algorithm\r
@@ -391,10 +433,12 @@ Returns the hyperbolic cosine of x."""
             VF.COSH.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.COSH.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real x;\r
     output Real z;\r
 algorithm\r
@@ -411,10 +455,12 @@ Returns the tangent of x."""
             VF.TAN.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.TAN.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real x;\r
     output Real z;\r
 algorithm\r
@@ -431,10 +477,12 @@ Returns the hyperbolic tangent of x."""
             VF.TANH.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.TANH.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real x;\r
     output Real z;\r
 algorithm\r
@@ -453,10 +501,12 @@ In modelica log(x) is the natural logarighm and log10(x) is base 10 logarighm.""
             VF.LN.x : SYSDYN.SysdynModelicaFunction.Input\r
                 SYSDYN.Variable.type "Real"\r
                 SYSDYN.SysdynModelicaFunction.optional false\r
+                SYSDYN.SysdynModelicaFunction.unit "ANY"\r
     SYSDYN.SysdynModelicaFunction.outputs _ : L0.List\r
         @L0.list\r
             VF.LN.z : SYSDYN.SysdynModelicaFunction.Output\r
                 SYSDYN.Variable.type "Real"\r
+                SYSDYN.SysdynModelicaFunction.unit "1"\r
     SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """    input Real x;\r
     output Real z;\r
 algorithm\r
index 4c872803d52546f308316a0fbe079a2480b4d55a..11f5bf51a362d296b0662321768746e3d14186ae 100644 (file)
@@ -662,6 +662,8 @@ public class SysdynResource {
     public final Resource SysdynModelicaFunction_optional_Inverse;\r
     public final Resource SysdynModelicaFunction_outputs;\r
     public final Resource SysdynModelicaFunction_outputs_Inverse;\r
+    public final Resource SysdynModelicaFunction_unit;\r
+    public final Resource SysdynModelicaFunction_unit_Inverse;\r
     public final Resource SysdynModuleLibrary;\r
     public final Resource SysdynOperationBrowser;\r
     public final Resource SysdynSymbol;\r
@@ -1427,6 +1429,8 @@ public class SysdynResource {
         public static final String SysdynModelicaFunction_optional_Inverse = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/optional/Inverse";\r
         public static final String SysdynModelicaFunction_outputs = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/outputs";\r
         public static final String SysdynModelicaFunction_outputs_Inverse = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/outputs/Inverse";\r
+        public static final String SysdynModelicaFunction_unit = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/unit";\r
+        public static final String SysdynModelicaFunction_unit_Inverse = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/unit/Inverse";\r
         public static final String SysdynModuleLibrary = "http://www.simantics.org/Sysdyn-1.1/SysdynModuleLibrary";\r
         public static final String SysdynOperationBrowser = "http://www.simantics.org/Sysdyn-1.1/SysdynOperationBrowser";\r
         public static final String SysdynSymbol = "http://www.simantics.org/Sysdyn-1.1/SysdynSymbol";\r
@@ -2202,6 +2206,8 @@ public class SysdynResource {
         SysdynModelicaFunction_optional_Inverse = getResourceOrNull(graph, URIs.SysdynModelicaFunction_optional_Inverse);\r
         SysdynModelicaFunction_outputs = getResourceOrNull(graph, URIs.SysdynModelicaFunction_outputs);\r
         SysdynModelicaFunction_outputs_Inverse = getResourceOrNull(graph, URIs.SysdynModelicaFunction_outputs_Inverse);\r
+        SysdynModelicaFunction_unit = getResourceOrNull(graph, URIs.SysdynModelicaFunction_unit);\r
+        SysdynModelicaFunction_unit_Inverse = getResourceOrNull(graph, URIs.SysdynModelicaFunction_unit_Inverse);\r
         SysdynModuleLibrary = getResourceOrNull(graph, URIs.SysdynModuleLibrary);\r
         SysdynOperationBrowser = getResourceOrNull(graph, URIs.SysdynOperationBrowser);\r
         SysdynSymbol = getResourceOrNull(graph, URIs.SysdynSymbol);\r
index cf8fe8dd2e6859b54f9972eb97318fcea9c7f6fe..5a394332f099ebda5d4dba15b9858b9714b6cbf1 100644 (file)
@@ -20,12 +20,14 @@ import java.util.concurrent.CopyOnWriteArrayList;
 \r
 import org.eclipse.jface.layout.GridDataFactory;\r
 import org.eclipse.jface.layout.GridLayoutFactory;\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
 import org.eclipse.jface.resource.JFaceResources;\r
 import org.eclipse.jface.resource.LocalResourceManager;\r
 import org.eclipse.jface.viewers.IStructuredSelection;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.events.FocusListener;\r
 import org.eclipse.swt.events.MouseListener;\r
+import org.eclipse.swt.graphics.Image;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.TabFolder;\r
 import org.eclipse.swt.widgets.TabItem;\r
@@ -42,8 +44,9 @@ import org.simantics.db.management.ISessionContext;
 import org.simantics.db.procedure.AsyncListener;\r
 import org.simantics.db.request.Read;\r
 import org.simantics.layer0.Layer0;\r
-import org.simantics.sysdyn.ui.properties.widgets.expressions.Function;\r
+import org.simantics.sysdyn.ui.Activator;\r
 import org.simantics.sysdyn.ui.validation.ValidationUtils;\r
+import org.simantics.sysdyn.utils.Function;\r
 import org.simantics.ui.SimanticsUI;\r
 import org.simantics.utils.ui.ISelectionUtils;\r
 \r
@@ -108,7 +111,7 @@ public class ShortcutTabWidget implements Widget {
             item = new TableItem(functionTable, SWT.NONE);\r
             item.setText(function.getName() + "()");\r
             item.setData(function.getName() + "(" + function.getParameterList() + ")");\r
-            item.setImage(Function.getImage(this.resourceManager, function));\r
+            item.setImage(getImage(this.resourceManager, function));\r
         }\r
         \r
     }\r
@@ -291,5 +294,28 @@ public class ShortcutTabWidget implements Widget {
         return variableTable;\r
     }\r
 \r
-\r
+    /**\r
+     * Get the icon image for each type of Modelica function.\r
+     * @param rm LocalResourceManager for which the image is created.\r
+     * @param function Modelica function\r
+     * @return Image to be shown e.g. in assistive text feed and ShortcutTab\r
+     */\r
+    public static Image getImage(LocalResourceManager rm, Function function) {\r
+        switch (function.getType()) {\r
+            case USER_DEFINED:\r
+                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/function.png")));\r
+            case SHARED:\r
+                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/functionLink.png")));\r
+            case VENSIM:\r
+                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/vensimFunction.png")));\r
+            case SYSDYN:\r
+                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/sysdynFunction.png")));\r
+            case MODELICA:\r
+                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/modelicaFunction.png")));\r
+            case MODELICA_ARRAY:\r
+                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/modelicaArrayFunction.png")));\r
+            default:\r
+                return null;\r
+        }\r
+    }\r
 }\r
index b5bc30ea0ce0ba6d6c3e99bc78c1cf3a861ab202..9f640b2254d325c29f743b9f88618a0c90b3852f 100644 (file)
@@ -33,7 +33,9 @@ import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.layer0.variable.Variables;\r
 import org.simantics.db.request.Read;\r
 import org.simantics.sysdyn.ui.Activator;\r
+import org.simantics.sysdyn.ui.properties.widgets.ShortcutTabWidget;\r
 import org.simantics.sysdyn.ui.utils.ExpressionUtils;\r
+import org.simantics.sysdyn.utils.Function;\r
 import org.simantics.ui.SimanticsUI;\r
 \r
 \r
@@ -168,7 +170,7 @@ public class CompletionProcessor implements IContentAssistProcessor {
            // Create CompletionProposals out of Functions\r
         for (Function function : functions) {\r
             if (token.length() == 0 || function.getName().toUpperCase().startsWith(token.toUpperCase())) {\r
-                Image image = Function.getImage(resourceManager, function);\r
+                Image image = ShortcutTabWidget.getImage(resourceManager, function);\r
                 array.add(new CompletionProposal(\r
                         function.getName() + "(" + function.getParameterList() + ")", \r
                         offset - token.length(),\r
index 5612ca0f1e73b3d60e4e584acd96e435952dc197..b86d035bd4d5e8b1ec40931f01a409aac99381ff 100644 (file)
@@ -21,7 +21,7 @@ import org.simantics.sysdyn.representation.Module;
 import org.simantics.sysdyn.representation.Sheet;\r
 import org.simantics.sysdyn.representation.Variable;\r
 import org.simantics.sysdyn.ui.modelica.ModelicaSourceViewerConfiguration;\r
-import org.simantics.sysdyn.ui.properties.widgets.expressions.Function;\r
+import org.simantics.sysdyn.utils.Function;\r
 import org.simantics.ui.SimanticsUI;\r
 \r
 \r
index ff07b3949f83e6e4c18f36145d52d8a34b6bbd01..dbf2e2d0ecc730dd06e439992d2a81f9c495487c 100644 (file)
@@ -37,6 +37,7 @@ import org.simantics.sysdyn.manager.SysdynModelManager;
 import org.simantics.sysdyn.representation.IndependentVariable;\r
 import org.simantics.sysdyn.representation.expressions.IExpression;\r
 import org.simantics.sysdyn.representation.utils.UnitUtils;\r
+import org.simantics.sysdyn.utils.Function;\r
 import org.simantics.sysdyn.utils.ModelUtils;\r
 \r
 public class UnitFunction {\r
@@ -126,7 +127,8 @@ public class UnitFunction {
                     continue;\r
                 String left = graph.getPossibleRelatedValue(output, SR.Variable_unit);\r
                 String right = graph.getPossibleRelatedValue(reference, SR.Variable_unit);\r
-                result = UnitUtils.matchUnits(left, right, UnitUtils.allowEquivalents(graph, model));\r
+                ArrayList<Function> functions = Function.getAllBuiltInFunctions(graph);\r
+                result = UnitUtils.matchUnits(left, right, functions, UnitUtils.allowEquivalents(graph, model));\r
                 if(result != null)\r
                     issues.add(new ModuleStandardIssue(SR.Validations_ModuleOutputUnitWarning, module, output, reference));\r
             }\r
@@ -139,7 +141,8 @@ public class UnitFunction {
                     continue;\r
                 String left = graph.getPossibleRelatedValue(variable, SR.Variable_unit);\r
                 String right = graph.getPossibleRelatedValue(reference, SR.Variable_unit);\r
-                result = UnitUtils.matchUnits(left, right, UnitUtils.allowEquivalents(graph, model));\r
+                ArrayList<Function> functions = Function.getAllBuiltInFunctions(graph);\r
+               result = UnitUtils.matchUnits(left, right, functions, UnitUtils.allowEquivalents(graph, model));\r
                 if(result != null)\r
                     issues.add(new ModuleStandardIssue(SR.Validations_ModuleInputUnitWarning, module, variable, reference));\r
             }\r
@@ -230,7 +233,8 @@ public class UnitFunction {
             return "No unit defined for " + NameUtils.getSafeName(graph, rightResource);\r
         \r
         SysdynModel model = ModelUtils.getModel(graph, leftResource);\r
-        String result = UnitUtils.matchUnits(left, right, UnitUtils.allowEquivalents(graph, model));\r
+        ArrayList<Function> functions = Function.getAllBuiltInFunctions(graph);\r
+       String result = UnitUtils.matchUnits(left, right, functions, UnitUtils.allowEquivalents(graph, model));\r
         \r
         if(result != null)\r
             result = prefix + result + suffix;\r
index 953938329faf4869a411b007fdb8b5212821c04e..86b3245ccd66dc0d872760b8c06ff3b9a5b9f3f4 100644 (file)
@@ -20,6 +20,7 @@ import org.simantics.sysdyn.unitParser.UnitCheckingException;
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.UnitParser;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 public class TestParser {\r
     \r
@@ -60,7 +61,7 @@ public class TestParser {
             UnitCheckingNode node = (UnitCheckingNode) parser.expr();\r
             \r
             try {\r
-                UnitResult u = node.getUnits(units, allowEquivalents);\r
+                UnitResult u = node.getUnits(units, Function.getAllBuiltInFunctions(), allowEquivalents);\r
                 System.out.println("Result: " + u.getCleanFullUnit());\r
             } catch (UnitCheckingException e) {\r
                 e.printStackTrace();\r
index 4949b478c87490769e1a396422553e956836e382..04369f79386bf9cde3faaa1004331d42831b53ac 100644 (file)
@@ -13,6 +13,7 @@
 package org.simantics.sysdyn.representation.utils;\r
 \r
 import java.io.StringReader;\r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 import java.util.HashSet;\r
 import java.util.Set;\r
@@ -38,6 +39,7 @@ import org.simantics.sysdyn.unitParser.UnitCheckingNode;
 import org.simantics.sysdyn.unitParser.UnitParser;\r
 import org.simantics.sysdyn.unitParser.nodes.ComponentReferenceFull;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 public class UnitUtils {\r
     \r
@@ -52,7 +54,7 @@ public class UnitUtils {
             HashMap<String, String> units = UnitUtils.findUnits(graph, model, configuration, components);\r
             \r
             try {\r
-                node.getUnits(units, allowEquivalents(graph, model));\r
+                node.getUnits(units, Function.getAllBuiltInFunctions(graph), allowEquivalents(graph, model));\r
             } catch (UnitCheckingException e) {\r
                 return e.getMessage();\r
             } catch (DatabaseException e) {\r
@@ -107,9 +109,10 @@ public class UnitUtils {
             leftReader.close();\r
             \r
             try {\r
+               ArrayList<Function> functions = Function.getAllBuiltInFunctions(graph);\r
                boolean allowEquivalents = allowEquivalents(graph, model);\r
-                UnitResult rightUnits = right.getUnits(units, allowEquivalents);\r
-                UnitResult leftUnits = left.getUnits(null, allowEquivalents);\r
+                UnitResult rightUnits = right.getUnits(units, functions, allowEquivalents);\r
+                UnitResult leftUnits = left.getUnits(null, functions, allowEquivalents);\r
                 \r
                 if(!rightUnits.equals(leftUnits))\r
                     return leftUnits.getCleanFullUnit() + " != " + rightUnits.getCleanFullUnit();\r
@@ -213,7 +216,7 @@ public class UnitUtils {
     }\r
     \r
     \r
-    public static String matchUnits(String left, String right, boolean allowEquivalents) throws DatabaseException {\r
+    public static String matchUnits(String left, String right, ArrayList<Function> functions, boolean allowEquivalents) throws DatabaseException {\r
         if(left == null || right == null || left.isEmpty() || right.isEmpty())\r
             return "No unit defined";\r
         \r
@@ -230,8 +233,8 @@ public class UnitUtils {
             rightReader.close();\r
 \r
             try {\r
-                UnitResult leftUnits = leftNode.getUnits(null, allowEquivalents);\r
-                UnitResult rightUnits = rightNode.getUnits(null, allowEquivalents);\r
+                UnitResult leftUnits = leftNode.getUnits(null, functions, allowEquivalents);\r
+                UnitResult rightUnits = rightNode.getUnits(null, functions, allowEquivalents);\r
 \r
                 if(!rightUnits.equals(leftUnits))\r
                     return leftUnits.getCleanFullUnit() + " != " + rightUnits.getCleanFullUnit();\r
index 2233c88e113f23636f3f430190d74d193c53c3c3..5a7112562975b7f7d54b270fbb843e7219a14812 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 \r
 public class UnitCheckingNode extends SimpleNode {\r
@@ -23,7 +25,7 @@ public class UnitCheckingNode extends SimpleNode {
         super(id);\r
     }\r
 \r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException{\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException{\r
         UnitResult result = new UnitResult(allowEquivalents);\r
 \r
         if(jjtGetNumChildren() == 0){\r
@@ -31,7 +33,7 @@ public class UnitCheckingNode extends SimpleNode {
             result.append(node);\r
         } else {\r
             for(int i = 0; i < jjtGetNumChildren(); i++) {\r
-                result.appendResult(((UnitCheckingNode)jjtGetChild(i)).getUnits(units, allowEquivalents));\r
+                result.appendResult(((UnitCheckingNode)jjtGetChild(i)).getUnits(units, functions, allowEquivalents));\r
             }\r
         }\r
         return result; \r
index 026b8a1c95f44e1a9612ad1f6259912c40b00bab..6aafee9cfd7724def01ba0185f9b30066f9372b8 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -31,8 +33,8 @@ public class AddOp extends UnitCheckingNode {
     }\r
     \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
-        UnitResult result = super.getUnits(units, allowEquivalents);\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
+        UnitResult result = super.getUnits(units, functions, allowEquivalents);\r
         result.setUnitType(UnitType.OPERATOR);\r
         return result;\r
     }\r
index 396bcb1d220a94e4c40f3fd299640831088653bc..44bb2e2106437761206d5073507b323adc6255dd 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -32,7 +34,7 @@ public class Arithmetic extends UnitCheckingNode {
 \r
 \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
         UnitResult result = new UnitResult(allowEquivalents);\r
 \r
         UnitCheckingNode base = null;\r
@@ -41,12 +43,12 @@ public class Arithmetic extends UnitCheckingNode {
 \r
         for(int i = 0; i < jjtGetNumChildren(); i++) {\r
             candidateNode = ((UnitCheckingNode)jjtGetChild(i));\r
-            UnitResult candidateUnits = candidateNode.getUnits(units, allowEquivalents);\r
+            UnitResult candidateUnits = candidateNode.getUnits(units, functions, allowEquivalents);\r
             if(candidateUnits.getUnitType() == UnitType.OPERATOR) {\r
                 continue;\r
             } else if(base == null || result.getUnitType() == UnitType.SCALAR || result.getUnitType() == UnitType.ANY) {\r
                 base = ((UnitCheckingNode)jjtGetChild(i));\r
-                result.appendResult(base.getUnits(units, allowEquivalents));\r
+                result.appendResult(base.getUnits(units, functions, allowEquivalents));\r
                 continue;\r
             } else if(candidateUnits.getUnitType() == UnitType.SCALAR) {\r
                 continue;\r
index 7b300b218c01a165a07e50799b95803cb9f5df09..9754bd3ec8c53961eeb707cb8cdbb6bf363b3da8 100644 (file)
@@ -18,6 +18,7 @@ import java.util.HashMap;
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -33,7 +34,7 @@ public class ArrayDefinition extends UnitCheckingNode {
 \r
 \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
         UnitResult result = new UnitResult(allowEquivalents);\r
         result.setUnitType(UnitType.SCALAR);\r
 \r
@@ -43,13 +44,13 @@ public class ArrayDefinition extends UnitCheckingNode {
             FunctionArguments functionArguments = (FunctionArguments) jjtGetChild(0);\r
 \r
             for(UnitCheckingNode candidateNode : gatherExpressions(functionArguments, new ArrayList<UnitCheckingNode>())) {\r
-                UnitResult candidateUnits = candidateNode.getUnits(units, allowEquivalents);\r
+                UnitResult candidateUnits = candidateNode.getUnits(units, functions, allowEquivalents);\r
                 if(candidateUnits.getUnitType() == UnitType.SCALAR) {\r
                     continue;\r
                 } else if(base == null) {\r
                     base = candidateNode;\r
                     UnitType oldUnitType = result.getUnitType();\r
-                    result.appendResult(base.getUnits(units, allowEquivalents));\r
+                    result.appendResult(base.getUnits(units, functions, allowEquivalents));\r
 \r
                     /*\r
                      * Make sure unit type persist\r
index c110fcb28b4446d7a664bfcaef9f07f74617c9cc..21b016481e03b3282b57963e39efb56e0f57f82d 100644 (file)
@@ -13,6 +13,7 @@
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
 import java.io.StringReader;\r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.ParseException;\r
@@ -20,6 +21,7 @@ import org.simantics.sysdyn.unitParser.UnitCheckingException;
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.UnitParser;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -33,12 +35,12 @@ public class ComponentReferenceFull extends UnitCheckingNode {
         super(id);\r
     }\r
 \r
-    protected UnitResult parseUnits(String units, boolean allowEquivalents) {\r
+    protected UnitResult parseUnits(String units, ArrayList<Function> functions, boolean allowEquivalents) {\r
         StringReader sr = new StringReader(units);\r
         UnitParser parser = new UnitParser(sr);\r
         try {\r
             UnitCheckingNode node = (UnitCheckingNode) parser.expr();\r
-            return node.getUnits(null, allowEquivalents);\r
+            return node.getUnits(null, functions, allowEquivalents);\r
         } catch (ParseException e) {\r
             e.printStackTrace();\r
         } catch (UnitCheckingException e) {\r
@@ -48,7 +50,7 @@ public class ComponentReferenceFull extends UnitCheckingNode {
     }\r
     \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
         String node = printNode();\r
         \r
         if("dmnl".equals(node)) {\r
@@ -61,7 +63,7 @@ public class ComponentReferenceFull extends UnitCheckingNode {
             if(!units.containsKey(node) || units.get(node) == null)\r
                 throw new UnitCheckingException("No units defined for " + node);\r
             else {\r
-                return parseUnits(units.get(node), allowEquivalents);\r
+                return parseUnits(units.get(node), functions, allowEquivalents);\r
             }\r
         } else {\r
             UnitResult result = new UnitResult(allowEquivalents);\r
index 2c090ea2431508660aeea0cdeccb1005ed766fa8..c2061059beb9a3b848d2676509a2b39130c651d1 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -31,8 +33,8 @@ public class Divide extends UnitCheckingNode {
     }\r
     \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
-        UnitResult result = super.getUnits(units, allowEquivalents);\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
+        UnitResult result = super.getUnits(units, functions, allowEquivalents);\r
         result.setUnitType(UnitType.OPERATOR);\r
         return result;\r
     }\r
index 369f67b635bcbc6f548c89a144f9e590f6d2b6d7..fc92f871f6cbfe99d2156d7a00717e8b1b629143 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.Token;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -32,7 +34,7 @@ public class Factor extends UnitCheckingNode {
     }\r
     \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
         UnitResult result = new UnitResult(allowEquivalents);\r
         \r
         UnitCheckingNode current = null;\r
@@ -41,7 +43,7 @@ public class Factor extends UnitCheckingNode {
         \r
         for(int i = 0; i < jjtGetNumChildren(); i++) {\r
             current = ((UnitCheckingNode)jjtGetChild(i));\r
-            UnitResult currentUnits = current.getUnits(units, allowEquivalents);\r
+            UnitResult currentUnits = current.getUnits(units, functions, allowEquivalents);\r
 \r
             if(currentUnits.getUnitType() == UnitType.ANY) {\r
                 result = new UnitResult(allowEquivalents);\r
@@ -59,7 +61,7 @@ public class Factor extends UnitCheckingNode {
                     UnitType unitType = currentUnits.getUnitType();\r
                     if(unitType == UnitType.SCALAR) {\r
                        int exponent;\r
-                       UnitResult baseUnits = base.getUnits(units, allowEquivalents);\r
+                       UnitResult baseUnits = base.getUnits(units, functions, allowEquivalents);\r
                        try {\r
                                exponent = Integer.valueOf(currentUnits.getFullUnit());\r
                        } catch (NumberFormatException e) {\r
index 4a185f7bff7fd064cd070f67f39ba7d526310bc1..40889a106a485ccf3c1268a2bceee599a927561b 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -30,7 +32,7 @@ public class ForIndex extends UnitCheckingNode {
     }\r
     \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
         return new UnitResult(allowEquivalents);\r
     }\r
 \r
index a99be2ec70d594ca9898b61e3d8f3be319b49192..fb04557a709d6b72b51344c70afb903fec5cab8b 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -31,7 +33,7 @@ public class FunctionCall extends UnitCheckingNode {
     }\r
     \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
         UnitResult result = new UnitResult(allowEquivalents);\r
         result.setUnitType(UnitType.ANY);\r
         return result;\r
index 4234acaa9d4e0dd36c29694af195c25ee6e25d8f..05c36d9baf246563fcd134cd9a2c0b78b3556c87 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -31,14 +33,14 @@ public class IfThenElse extends UnitCheckingNode {
     \r
     \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
         UnitResult base = null;\r
         UnitCheckingNode baseNode = null;\r
         UnitCheckingNode candidateNode = null;\r
         \r
         for(int i = 0; i < jjtGetNumChildren(); i++) {\r
             candidateNode = ((UnitCheckingNode)jjtGetChild(i));\r
-            UnitResult candidateUnits = candidateNode.getUnits(units, allowEquivalents);\r
+            UnitResult candidateUnits = candidateNode.getUnits(units, functions, allowEquivalents);\r
             \r
             if(!(candidateNode instanceof Condition)) {\r
                 \r
index 43b13aaeb0363ee3195adcb8793ab74bc147dc56..57f28f79074cb73c3ecf0c575b4e7f336e3d6943 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -31,8 +33,8 @@ public class Multiplication extends UnitCheckingNode {
     }\r
     \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
-        UnitResult result = super.getUnits(units, allowEquivalents);\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
+        UnitResult result = super.getUnits(units, functions, allowEquivalents);\r
         result.setUnitType(UnitType.OPERATOR);\r
         return result;\r
     }\r
index ab1d9adfcd062206f410b1dfc7338917799d827f..8d90de3ae1505e5e27a74358d8bffc025a21d8f7 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -29,8 +31,8 @@ public class Power extends UnitCheckingNode {
     }\r
     \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
-        UnitResult result = super.getUnits(units, allowEquivalents);\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
+        UnitResult result = super.getUnits(units, functions, allowEquivalents);\r
         result.setUnitType(UnitType.OPERATOR);\r
         return result;\r
     }\r
index d7a62adebd579da71f99065612365010272f9363..56b4138f2c1154368c0dce3c8c95173333b29bb1 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -31,8 +33,8 @@ public class RelOp extends UnitCheckingNode {
     }\r
     \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
-        UnitResult result = super.getUnits(units, allowEquivalents);\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
+        UnitResult result = super.getUnits(units, functions, allowEquivalents);\r
         result.setUnitType(UnitType.OPERATOR);\r
         return result;\r
     }\r
index 2fd22f3bf27946f5f843b96498406933e5664ea3..5831092bab57b1e7b2142c9bd830795d737ccca4 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -30,7 +32,7 @@ public class Relation extends UnitCheckingNode {
     }\r
 \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
         UnitResult result = new UnitResult(allowEquivalents);\r
         \r
         UnitCheckingNode base = null;\r
@@ -42,14 +44,14 @@ public class Relation extends UnitCheckingNode {
             base = ((UnitCheckingNode)jjtGetChild(1));\r
             \r
         if(base instanceof Arithmetic) {\r
-            result.appendResult(base.getUnits(units, allowEquivalents));\r
+            result.appendResult(base.getUnits(units, functions, allowEquivalents));\r
 \r
             for(int i = 2; i < jjtGetNumChildren(); i = i + 2) {\r
                 candidateNode = ((UnitCheckingNode)jjtGetChild(i));\r
 \r
                 if(!(candidateNode instanceof Value)) {\r
                     operator = ((UnitCheckingNode)jjtGetChild(i-1));\r
-                    UnitResult candidateUnits = candidateNode.getUnits(units, allowEquivalents);\r
+                    UnitResult candidateUnits = candidateNode.getUnits(units, functions, allowEquivalents);\r
                     if(!result.equals(candidateUnits)) {\r
                         result.equals(candidateUnits);\r
                         throw new UnitCheckingException("Not equals exception: " +\r
index 344cf7eb5462d0628505f9fa3dffdc097a775169..dfdcc54eb60d2f5efdfde55f373fc57f931ab495 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.Token;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -32,7 +34,7 @@ public class Term extends UnitCheckingNode {
     }\r
     \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
         UnitResult result = new UnitResult(allowEquivalents);\r
         \r
         UnitCheckingNode current = null;\r
@@ -41,7 +43,7 @@ public class Term extends UnitCheckingNode {
         \r
         for(int i = 0; i < jjtGetNumChildren(); i++) {\r
             current = ((UnitCheckingNode)jjtGetChild(i));\r
-            UnitResult currentUnits = current.getUnits(units, allowEquivalents);\r
+            UnitResult currentUnits = current.getUnits(units, functions, allowEquivalents);\r
 \r
             if(currentUnits.getUnitType() == UnitType.ANY) {\r
                 result = new UnitResult(allowEquivalents);\r
index 7e26c56910f8251649fac9598bbe672e323e239a..e0edb44534643a751254fddaaeed699ed4eed46f 100644 (file)
  *******************************************************************************/\r
 package org.simantics.sysdyn.unitParser.nodes;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 \r
 import org.simantics.sysdyn.unitParser.UnitCheckingException;\r
 import org.simantics.sysdyn.unitParser.UnitCheckingNode;\r
 import org.simantics.sysdyn.unitParser.nodes.UnitResult.UnitType;\r
+import org.simantics.sysdyn.utils.Function;\r
 \r
 /**\r
  * See UnitCheckingNodeFactory for mapping\r
@@ -31,8 +33,8 @@ public class Value extends UnitCheckingNode {
     }\r
 \r
     @Override\r
-    public UnitResult getUnits(HashMap<String, String> units, boolean allowEquivalents) throws UnitCheckingException {\r
-        UnitResult result = super.getUnits(units, allowEquivalents);\r
+    public UnitResult getUnits(HashMap<String, String> units, ArrayList<Function> functions, boolean allowEquivalents) throws UnitCheckingException {\r
+        UnitResult result = super.getUnits(units, functions, allowEquivalents);\r
         result.setUnitType(UnitType.SCALAR);\r
         return result;\r
     }\r
similarity index 72%
rename from org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/Function.java
rename to org.simantics.sysdyn/src/org/simantics/sysdyn/utils/Function.java
index 6ddacd646e1ea524a6fd43c39cb457b27bf38386..b01c62f6f1e843a941484feef7b113a6879e8058 100644 (file)
@@ -1,12 +1,8 @@
-package org.simantics.sysdyn.ui.properties.widgets.expressions;\r
+package org.simantics.sysdyn.utils;\r
 \r
 import java.util.ArrayList;\r
 import java.util.Collection;\r
 \r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.resource.LocalResourceManager;\r
-import org.eclipse.swt.graphics.Device;\r
-import org.eclipse.swt.graphics.Image;\r
 import org.simantics.databoard.Bindings;\r
 import org.simantics.db.ReadGraph;\r
 import org.simantics.db.Resource;\r
@@ -17,7 +13,6 @@ import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.request.Read;\r
 import org.simantics.layer0.Layer0;\r
 import org.simantics.sysdyn.SysdynResource;\r
-import org.simantics.sysdyn.ui.Activator;\r
 import org.simantics.ui.SimanticsUI;\r
 \r
 \r
@@ -34,6 +29,12 @@ public class Function implements Comparable<Function>{
     private final String parameterList;\r
     private final String description;\r
     \r
+    public static class Parameter {\r
+       public String name;\r
+       public String unit = "1";\r
+       public boolean variableLength = false;\r
+    }\r
+    \r
     public enum Type {\r
         USER_DEFINED,\r
         SHARED,\r
@@ -43,64 +44,14 @@ public class Function implements Comparable<Function>{
         VENSIM\r
     }\r
     \r
-    /**\r
-     * Get the icon image for each type of Modelica function.\r
-     * @param rm LocalResourceManager for which the image is created.\r
-     * @param function Modelica function\r
-     * @return Image to be shown e.g. in assistive text feed and ShortcutTab\r
-     */\r
-    public static Image getImage(LocalResourceManager rm, Function function) {\r
-        switch (function.getType()) {\r
-            case USER_DEFINED:\r
-                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/function.png")));\r
-            case SHARED:\r
-                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/functionLink.png")));\r
-            case VENSIM:\r
-                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/vensimFunction.png")));\r
-            case SYSDYN:\r
-                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/sysdynFunction.png")));\r
-            case MODELICA:\r
-                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/modelicaFunction.png")));\r
-            case MODELICA_ARRAY:\r
-                return rm.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/modelicaArrayFunction.png")));\r
-            default:\r
-                return null;\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Get the icon image for each type of Modelica function.\r
-     * @param device Device for which the image is used.\r
-     * @param function Modelica function\r
-     * @return Image to be shown e.g. in assistive text feed and ShortcutTab\r
-     */\r
-    @Deprecated\r
-    public static Image getImage(Device device, Function function) {\r
-        switch (function.getType()) {\r
-            case USER_DEFINED:\r
-                return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/function.png")).createImage(device);\r
-            case SHARED:\r
-                return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/functionLink.png")).createImage(device);\r
-            case VENSIM:\r
-                return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/vensimFunction.png")).createImage(device);\r
-            case SYSDYN:\r
-                return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/sysdynFunction.png")).createImage(device);\r
-            case MODELICA:\r
-                return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/modelicaFunction.png")).createImage(device);\r
-            case MODELICA_ARRAY:\r
-                return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/modelicaArrayFunction.png")).createImage(device);\r
-            default:\r
-                return null;\r
-        }\r
-    }\r
-    \r
-    public Function(String name, String parameterList, Type type, String description){\r
+    public Function(String name, ArrayList<Parameter> parameterList, Type type, String description){\r
         this.name = new String(name);\r
         \r
         this.type = type;\r
         \r
-        if (parameterList != null)\r
-            this.parameterList = new String(parameterList);\r
+        String parameterListString = parameterListToString(parameterList);\r
+        if (parameterListString != null)\r
+            this.parameterList = new String(parameterListString);\r
         else\r
             this.parameterList = new String("");\r
         \r
@@ -109,6 +60,17 @@ public class Function implements Comparable<Function>{
         else\r
             this.description = null;\r
     }\r
+       \r
+       public static String parameterListToString(ArrayList<Parameter> parameterList) {\r
+               String inputStr = null;\r
+               for (Parameter p : parameterList) {\r
+            if (inputStr == null)\r
+                inputStr = new String(p.name);\r
+            else\r
+                inputStr += ", " + p.name;\r
+               }\r
+               return inputStr;\r
+       }\r
     \r
     public String getParameterList() {\r
         return parameterList;\r
@@ -141,34 +103,33 @@ public class Function implements Comparable<Function>{
      * @return String in which the paramters are ", " delimited\r
      * @throws DatabaseException\r
      */\r
-    public static String getFunctionInputs(ReadGraph graph, SysdynResource sr, Resource r) throws DatabaseException {\r
+    public static ArrayList<Parameter> getFunctionInputs(ReadGraph graph, SysdynResource sr, Resource r) throws DatabaseException {\r
         Resource inputs = graph.getPossibleObject(r, sr.SysdynModelicaFunction_inputs);\r
-        String inputStr = null;\r
+        ArrayList<Parameter> inputParameters = new ArrayList<Parameter>();\r
         if (inputs != null) {\r
             for (Resource input : ListUtils.toList(graph, inputs)) {\r
-                String inputName = null;\r
+                Parameter inputParameter = new Parameter();\r
                 if (graph.isInstanceOf(input, sr.SysdynModelicaFunction_VariableLengthInput)) {\r
-                    inputName = "";\r
+                       inputParameter.name = "";\r
+                       inputParameter.variableLength = true;\r
                     Resource shownLabels = graph.getPossibleObject(\r
                             input, \r
                             sr.SysdynModelicaFunction_VariableLengthInput_shownLabels);\r
                     if (shownLabels != null) {\r
                         for (Resource label : ListUtils.toList(graph, shownLabels)) {\r
-                            inputName += NameUtils.getSafeName(graph, label);\r
-                            inputName += ", ";\r
+                               inputParameter.name += NameUtils.getSafeName(graph, label);\r
+                               inputParameter.name += ", ";\r
                         }\r
                     }\r
-                    inputName += "...";\r
+                    inputParameter.name += "...";\r
                 } else {\r
-                    inputName = NameUtils.getSafeName(graph, input);\r
+                       inputParameter.name = NameUtils.getSafeName(graph, input);\r
                 }\r
-                if (inputStr == null)\r
-                    inputStr = new String(inputName);\r
-                else\r
-                    inputStr += ", " + inputName;\r
+                \r
+                       inputParameters.add(inputParameter);\r
             }\r
         }\r
-        return inputStr;\r
+        return inputParameters;\r
     }\r
 \r
     public static String getFunctionDescription(ReadGraph graph, Resource r) throws DatabaseException {\r
@@ -191,9 +152,9 @@ public class Function implements Comparable<Function>{
         Resource functionLibrary = graph.getPossibleResource(functionTypeUri);\r
         for(Resource r : graph.syncRequest(new ObjectsWithType(functionLibrary, l0.ConsistsOf, sr.SysdynModelicaFunction))) {\r
             String name = NameUtils.getSafeName(graph, r);\r
-            String inputStr = getFunctionInputs(graph, sr, r);\r
+            ArrayList<Parameter> inputs = getFunctionInputs(graph, sr, r);\r
             String description = getFunctionDescription(graph, r);\r
-            functions.add(new Function(name, inputStr, functionType, description));\r
+            functions.add(new Function(name, inputs, functionType, description));\r
         }\r
         return functions;\r
     }\r