From 6735fa2b199a186a9336e15df2abb3d859415f84 Mon Sep 17 00:00:00 2001 From: miettinen Date: Tue, 19 Feb 2013 14:25:17 +0000 Subject: [PATCH] A huge commit for Functions in equation tab (refs #4030) and expecially for Expression parser: built-in function arguments assistive text feed (refs #3965): * Function parameters are shown in the text feed assistant and printed to the expression when the function is selected or when a function is selected in ShortcutTabWidget. * Added almost all Modelica functions under the model browser, that is, those which seem to work correctly or might be useful. All functions have their interface variables defined in the database as well. Updated also the definitions of the built-in functions. * Added the interfaces of built-in Modelica functions to be shown similarly to the Modelica codes of all other function. * Created another representation for a Modelica function in another Function.java: it is used to store and provide with the name, the type, and the parameterlist of a modelica function, and can easily be expanded to do more such stuff as well. * Added fun icons for different types of functions to the ShortcutTabWidget and the text feed assistant. * In parsing modelica (user defined) functions, the interface variables are recognized. They are not yet used, though. * Size of the modelica code viewer (or modelica interface) of a function in user defined or built-in functions is limited to the minimum of 150 px; otherwise the long lines in the description make the code / interface viewer disappear. * Added auto-generated doc of ModelicaParser. git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@26807 ac1ea38d-2e2b-0410-8846-a27921b304fc --- org.simantics.sysdyn.ontology/graph.tg | Bin 80039 -> 145235 bytes .../graph/ModelicaArrayFunctions.pgraph | 489 +++++++++++ .../graph/ModelicaFunctions.pgraph | 726 +++++++++++++++ .../graph/Sysdyn.pgraph | 17 +- .../graph/SysdynFunctions.pgraph | 127 ++- .../graph/VensimFunctions.pgraph | 311 ++++++- .../org/simantics/sysdyn/SysdynResource.java | 825 ++++++++++++++++++ org.simantics.sysdyn.ui/icons/function.png | Bin 0 -> 296 bytes .../icons/functionLink.png | Bin 0 -> 847 bytes .../icons/modelicaArrayFunction.png | Bin 0 -> 548 bytes .../icons/modelicaFunction.png | Bin 0 -> 532 bytes .../icons/sysdynFunction.png | Bin 0 -> 488 bytes org.simantics.sysdyn.ui/icons/variable.png | Bin 0 -> 758 bytes .../icons/variableGray.png | Bin 0 -> 765 bytes .../icons/vensimFunction.png | Bin 0 -> 872 bytes .../preferences/ModelicaPreferencePage.java | 1 + .../sysdyn/ui/properties/FunctionTab.java | 2 +- .../properties/widgets/ShortcutTabWidget.java | 63 +- .../expressions/CompletionProcessor.java | 220 +++-- .../widgets/expressions/Function.java | 192 ++++ .../widgets/functions/FunctionCodeWidget.java | 7 + .../sysdyn/ui/utils/ExpressionUtils.java | 37 +- org.simantics.sysdyn/ModelicaParser.html | 737 ++++++++++++++++ .../sysdyn/manager/FunctionUtils.java | 6 +- .../sysdyn/modelParser/ModelicaParser.jj | 33 +- 25 files changed, 3595 insertions(+), 198 deletions(-) create mode 100644 org.simantics.sysdyn.ontology/graph/ModelicaArrayFunctions.pgraph create mode 100644 org.simantics.sysdyn.ontology/graph/ModelicaFunctions.pgraph create mode 100644 org.simantics.sysdyn.ui/icons/function.png create mode 100644 org.simantics.sysdyn.ui/icons/functionLink.png create mode 100644 org.simantics.sysdyn.ui/icons/modelicaArrayFunction.png create mode 100644 org.simantics.sysdyn.ui/icons/modelicaFunction.png create mode 100644 org.simantics.sysdyn.ui/icons/sysdynFunction.png create mode 100644 org.simantics.sysdyn.ui/icons/variable.png create mode 100644 org.simantics.sysdyn.ui/icons/variableGray.png create mode 100644 org.simantics.sysdyn.ui/icons/vensimFunction.png create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/Function.java create mode 100644 org.simantics.sysdyn/ModelicaParser.html diff --git a/org.simantics.sysdyn.ontology/graph.tg b/org.simantics.sysdyn.ontology/graph.tg index 23edcbc93fd46d21bb47526dead9b529070c6767..138c666ddf7ebd40296ee66842597ac8e4c07a96 100644 GIT binary patch literal 145235 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

j@Q3m-A{sSh~l`xEeo4W02rUWfR>Ho+P% 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 diff --git a/org.simantics.sysdyn.ontology/graph/ModelicaArrayFunctions.pgraph b/org.simantics.sysdyn.ontology/graph/ModelicaArrayFunctions.pgraph new file mode 100644 index 00000000..aefaea03 --- /dev/null +++ b/org.simantics.sysdyn.ontology/graph/ModelicaArrayFunctions.pgraph @@ -0,0 +1,489 @@ +L0 = +SYSDYN = + +MAF = : SYSDYN.SysdynModelicaFunctionLibrary + + + +MAF.scalar : SYSDYN.SysdynModelicaFunction + L0.HasDescription """scalar(A) + +Returns a one-element array as scalar. + +Returns the single element of array A. size(A,i) = 1 is required for 1 <= i <= ndims(A).""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.scalar.A : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.scalar.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.vector : SYSDYN.SysdynModelicaFunction + L0.HasDescription """vector(A) + +Returns an array with one non-singleton dimension as vector. + +Returns a 1-vector, if A is a scalar and otherwise returns a vector containing all the elements of the array, provided there is at most one dimension size > 1. + +Examples: +Real A[1,2,1] = {{{3},{4}}}; +Real v[2] = vector(A); // = {3,4}""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.vector.A : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.vector.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.matrix : SYSDYN.SysdynModelicaFunction + L0.HasDescription """matrix(A) + +Returns the first two dimensions of an array as matrix. + +Returns promote(A,2), if A is a scalar or vector and otherwise returns the elements of the first two dimensions as a matrix. size(A,i) = 1 is required for 2 < i <= ndims(A). +Function promote(A,n) fills dimensions of size 1 from the right to array A upto dimension n, where "n > ndims(A)" is required. Let C = promote(A,n), with nA = ndims(A), then +ndims(C) = n, +size(C,j) = size(A,j) for 1 <= j <= nA, +size(C,j) = 1 for nA+1 <= j <= n, +C[i_1, ..., i_nA, 1, ..., 1] = A[i_1, ..., i_nA].""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.matrix.A : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.matrix.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.ndims : SYSDYN.SysdynModelicaFunction + L0.HasDescription """ndims(A) + +Return number of array dimensions. + +Returns the number of dimensions k of array expression A, with k >= 0.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.ndims.A : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.ndims.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Integer" + + + +MAF.size : SYSDYN.SysdynModelicaFunction + L0.HasDescription """size(A,i) +size(A) + +Returns dimensions of an array. + +The first form returns the size of dimension i of array expression A where i shall be > 0 and <= ndims(A). + +The second form returns a vector of length ndims(A) containing the dimension sizes of A. + +Examples: +Real A[8,4,5]; +Integer n3 = size(A,3); // = 5 +Integer n[:] = size(A); // = {8,4,5}""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.size.A : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MAF.size.i : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional true + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.size.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.array : SYSDYN.SysdynModelicaFunction + L0.HasDescription """array(A,B,C,...) + +The constructor function array(A,B,C,...) constructs an array from its arguments. + +The constructor function array(A,B,C,...) constructs an array from its arguments according to the following rules: + * Size matching: All arguments must have the same sizes, i.e., size(A)=size(B)=size(C)=... + * All arguments must be type compatible expressions giving the type of the elements. The data type of the result array is the maximally expanded type of the arguments. Real and Integer subtypes can be mixed resulting in a Real result array where the Integer numbers have been transformed to Real numbers. + * Each application of this constructor function adds a one-sized dimension to the left in the result compared to the dimensions of the argument arrays, i.e., ndims(array(A,B,C)) = ndims(A) + 1 = ndims(B) + 1, ... + * {A, B, C, ...} is a shorthand notation for array(A, B, C, ...). + * There must be at least one argument [i.e., array() or {} are not defined].""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.array.A : SYSDYN.SysdynModelicaFunction.VariableLengthInput + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.VariableLengthInput.shownLabels _ : L0.List + @L0.list + MAF.array.A.A : L0.String + MAF.array.A.B : L0.String + MAF.array.A.C : L0.String + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.array.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.cat : SYSDYN.SysdynModelicaFunction + L0.HasDescription """cat(k,A,B,C,...) + +The function cat(k,A,B,C,...)concatenates arrays A,B,C,... along dimension k. + +The function cat(k,A,B,C,...)concatenates arrays A,B,C,... along dimension k according to the following rules: + * Arrays A, B, C, ... must have the same number of dimensions, i.e., ndims(A) = ndims(B) = ... + * Arrays A, B, C, ... must be type compatible expressions giving the type of the elements of the result. The maximally expanded types should be equivalent. Real and Integer subtypes can be mixed resulting in a Real result array where the Integer numbers have been transformed to Real numbers. + * k has to characterize an existing dimension, i.e., 1 <= k <= ndims(A) = ndims(B) = ndims(C); k shall be an integer number. + * Size matching: Arrays A, B, C, ... must have identical array sizes with the exception of the size of dimension k, i.e., size(A,j) = size(B,j), for 1 <= j <= ndims(A) and j <> k. + +Examples: +Real[2,3] r1 = cat(1, {{1.0, 2.0, 3}}, {{4, 5, 6}}); +Real[2,6] r2 = cat(2, r1, 2*r1);""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.cat.k : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MAF.cat.A : SYSDYN.SysdynModelicaFunction.VariableLengthInput + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.VariableLengthInput.shownLabels _ : L0.List + @L0.list + MAF.cat.A.A : L0.String + MAF.cat.A.B : L0.String + MAF.cat.A.C : L0.String + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.cat.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.zeros : SYSDYN.SysdynModelicaFunction + L0.HasDescription """zeros(n1, n2, n3, ...) + +Returns a zero array. + +Returns the n1 x n2 x n3 x ... Integer array with all elements equal to zero (ni >= 0).""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.zeros.n : SYSDYN.SysdynModelicaFunction.VariableLengthInput + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.VariableLengthInput.shownLabels _ : L0.List + @L0.list + MAF.zeros.n.n1 : L0.String + MAF.zeros.n.n2 : L0.String + MAF.zeros.n.n3 : L0.String + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.zeros.o : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Integer" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Integer n annotation(__OpenModelica_varArgs = true); + output Integer o[:];""" + + + +MAF.ones : SYSDYN.SysdynModelicaFunction + L0.HasDescription """ones(n1, n2, n3, ...) + +Returns an array with "1" elements. + +Return the n1 x n2 x n3 x ... Integer array with all elements equal to one (ni >=0 ).""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.ones.n : SYSDYN.SysdynModelicaFunction.VariableLengthInput + SYSDYN.Variable.type "Integer" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.VariableLengthInput.shownLabels _ : L0.List + @L0.list + MAF.ones.n.n1 : L0.String + MAF.ones.n.n2 : L0.String + MAF.ones.n.n3 : L0.String + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.ones.o : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Integer" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Integer n annotation(__OpenModelica_varArgs = true); + output Integer o[:];""" + + + +MAF.fill : SYSDYN.SysdynModelicaFunction + L0.HasDescription """fill(s, n1, n2, n3, ...) + +Return a Real, Integer, Boolean or String array with all elements equal + +Returns the n1 x n2 x n3 x ... array with all elements equal to scalar or array expression s (ni >= 0). The returned array has the same type as s. Recursive definition: +fill(s,n1,n2,n3, ...) = fill(fill(s,n2,n3, ...), n1); +fill(s,n) = {s,s,..., s} + +Examples: +Real mr[2,2] = fill(-1,2,2); // = [-1,-1;-1,-1] +Boolean vb[3] = fill(true,3); // = {true, true, true}""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.fill.s : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MAF.fill.n : SYSDYN.SysdynModelicaFunction.VariableLengthInput + SYSDYN.Variable.type "Integer" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.VariableLengthInput.shownLabels _ : L0.List + @L0.list + MAF.fill.n.n1 : L0.String + MAF.fill.n.n2 : L0.String + MAF.fill.n.n3 : L0.String + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.fill.o : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input OpenModelica.Internal.BuiltinType s; + input Integer n annotation(__OpenModelica_varArgs = true); + output OpenModelica.Internal.BuiltinType o[:];""" + + + +MAF.identity : SYSDYN.SysdynModelicaFunction + L0.HasDescription """identity(n) + +Returns the identity matrix of the desired size. + +Returns the n x n Integer identity matrix, with ones on the diagonal and zeros at the other places.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.identity.n : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Integer " + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.identity.outArray : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Integer " + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Integer n; + output Integer[n,n] outArray;""" + + + +MAF.diagonal : SYSDYN.SysdynModelicaFunction + L0.HasDescription """diagonal(v) + +Returns a diagonal matrix. + +Returns a square matrix with the elements of vector v on the diagonal and all other elements zero.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.diagonal.v : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.diagonal.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.linspace : SYSDYN.SysdynModelicaFunction + L0.HasDescription """linspace(x1, x2, n) + +Return Real vector with equally spaced elements. + +Returns a Real vector with n equally spaced elements, such that +v[i] = x1 + (x2-x1)*(i-1)/(n-1) for 1 <= i <= n. +It is required that n >= 2. The arguments x1 and x2 shall be Real or Integer scalar expressions. + +Example: +Real v[:] = linspace(1,7,4); // = {1, 3, 5, 7}""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.linspace.x1 : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MAF.linspace.x2 : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MAF.linspace.n : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Integer" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.linspace.v : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real x1 "start"; + input Real x2 "end"; + input Integer n "number"; + output Real v[n];""" + + + +MAF.min : SYSDYN.SysdynModelicaFunction + L0.HasDescription """min(A) + +Returns the smallest element. + +Returns the smallest element of array expression A.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.min.A : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.min.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.max : SYSDYN.SysdynModelicaFunction + L0.HasDescription """max(A) + +Returns the largest element. + +Returns the largest element of array expression A.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.max.A : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.max.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.sum : SYSDYN.SysdynModelicaFunction + L0.HasDescription """sum(A) +sum(e(i, ..., j) for i in u, ..., j in v) + +Returns the scalar sum. + +The first form returns the scalar sum of all the elements of array expression A: +A[1,...,1]+A[2,...,1]+....+A[end,...,1]+A[end,...,end] + +The second form is a reduction expression and returns the sum of the expression e(i, ..., j) evaluated for all combinations of i in u, ..., j in v: +e(u[1],...,v[1]) + e(u[2],...,v[1]) + ... + +e(u[end],...,v[1]) + ... + e(u[end],...,v[end]) +The type of sum(e(i, ..., j) for i in u, ..., j in v) is the same as the type of e(i,...j). + +Example: +sum(i for i in 1:10) // Gives 1+2+...+10=55 + // Read it as: compute the sum of i for i in the range 1 to 10.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.sum.A : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.sum.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.product : SYSDYN.SysdynModelicaFunction + L0.HasDescription """product(A) +product(e(i, ..., j) for i in u, ..., j in v) + +Returns the scalar product + +The first form returns the scalar product of all the elements of array expression A: +A[1,...,1]*A[2,...,1]*....*A[end,...,1]*A[end,...,end] + +The second form is a reduction expression and returns the product of the expression e(i, ..., j) evaluated for all combinations of i in u, ..., j in v: +e(u[1],...,v[1]) * e(u[2],...,v[1]) * ... * +e(u[end],...,v[1]) * ... * e(u[end],...,v[end]) +The type of product(e(i, ..., j) for i in u, ..., j in v) is the same as the type of e(i,...j). + +Example: +{product(j for j in 1:i) for i in 0:4} // = {1,1,2,6,24}""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.product.A : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.product.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.transpose : SYSDYN.SysdynModelicaFunction + L0.HasDescription """transpose(A) + +Transpose of a matrix or permutation of the first two dimensions of an array + +Permutes the first two dimensions of array A. It is an error, if array A does not have at least 2 dimensions.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.transpose.A : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.transpose.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.cross : SYSDYN.SysdynModelicaFunction + L0.HasDescription """cross(x,y) + +Return cross product of two vectors. + +Returns the 3-vector cross product of the 3-vectors x and y. +cross(x,y) = vector( [ x[2]*y[3]-x[3]*y[2]; + x[3]*y[1]-x[1]*y[3]; + x[1]*y[2]-x[2]*y[1] ] );""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.cross.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MAF.cross.y : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.cross.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MAF.skew : SYSDYN.SysdynModelicaFunction + L0.HasDescription """skew(x) + +Returns the skew matrix that is associated with a vector + +Returns the 3 x 3 skew symmetric matrix associated with a 3-vector, i.e., +cross(x,y) = skew(x)*y; +skew(x) = [ 0 , -x[3], x[2]; + x[3], 0 , -x[1]; + -x[2], x[1], 0 ];""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MAF.skew.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MAF.skew.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" diff --git a/org.simantics.sysdyn.ontology/graph/ModelicaFunctions.pgraph b/org.simantics.sysdyn.ontology/graph/ModelicaFunctions.pgraph new file mode 100644 index 00000000..21e2f7d2 --- /dev/null +++ b/org.simantics.sysdyn.ontology/graph/ModelicaFunctions.pgraph @@ -0,0 +1,726 @@ +L0 = +SYSDYN = + +MF = : SYSDYN.SysdynModelicaFunctionLibrary + + + +MF.abs : SYSDYN.SysdynModelicaFunction + L0.HasDescription """abs(v) + +Absolute value. + +Returns the absolute value of v. Is expanded into "(if v >= 0 then v else -v)" (into "noEvent(if v >= 0 then v else -v)", to be precise). Argument v needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.abs.v : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.abs.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MF.acos : SYSDYN.SysdynModelicaFunction + L0.HasDescription """acos(u) + +Inverse cosine. + +Returns the inverse of cos of u, with -1 <= u <= +1. Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.acos.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.acos.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real u; + output Real y;""" + + + +MF.asin : SYSDYN.SysdynModelicaFunction + L0.HasDescription """asin(u) + +Inverse sine. + +Returns the inverse of sin of u, with -1 <= u <= +1. Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.asin.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.asin.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real u; + output Real y;""" + + + +MF.atan : SYSDYN.SysdynModelicaFunction + L0.HasDescription """atan(u) + +Inverse tangent. + +Returns the inverse of tan of u, with -INF < u < INF. Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.atan.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.atan.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real u; + output Real y;""" + + + +MF.atan2 : SYSDYN.SysdynModelicaFunction + L0.HasDescription """atan2(u1,u2) + +Four quadrant inverse tangent. + +Returns y = atan2(u1,u2) such that tan(y) = u1/u2 and y is in the range -pi < y <= pi. u2 may be zero, provided u1 is not zero. Usually u1, u2 is provided in such a form that u1 = sin(y) and u2 = cos(y). Arguments u1 and u2 need to be Integer or Real expressions.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.atan2.u1 : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.atan2.u2 : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.atan2.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real u1; + input Real u2; + output Real z;""" + + + +MF.ceil : SYSDYN.SysdynModelicaFunction + L0.HasDescription """ceil(x) + +Round a Real number towards plus infinity + +Returns the smallest integer not less than x (i.e. the closest integer above x).""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.ceil.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.ceil.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real x; + output Real y;""" + + + +MF.cos : SYSDYN.SysdynModelicaFunction + L0.HasDescription """cos(u) + +Cosine. + +Returns the cosine of u, with -INF < u < INF Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.ceil.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.ceil.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real u; + output Real y;""" + + + +MF.cosh : SYSDYN.SysdynModelicaFunction + L0.HasDescription """cosh(u) + +Hyperbolic cosine. + +Returns the cosh of u, with -INF < u < INF. Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.cosh.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.cosh.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real u; + output Real y;""" + + + +MF.delay : SYSDYN.SysdynModelicaFunction + L0.HasDescription """delay(expr, delayTime, delayMax) +delay(expr, delayTime) + +Returns the value of expr at the time time-delayTime. The value of expr is returned when time <= time.start + delayTime. + +Returns "expr(time - delayTime)" for time > time.start + delayTime and "expr(time.start)" for time <= time.start + delayTime. The arguments, i.e., expr, delayTime and delayMax, need to be subtypes of Real. delayMax needs to be additionally a parameter expression. The following relation shall hold: 0 <= delayTime <= delayMax, otherwise an error occurs. If delayMax is not supplied in the argument list, delayTime need to be a parameter expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.delay.expr : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.delay.delayTime : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.delay.delayMax : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional true + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.delay.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MF.der : SYSDYN.SysdynModelicaFunction + L0.HasDescription """der(expr) + +Time derivative of expr. expr must be have continuous-time variability. + +The time derivative of expression expr. If the expression expr is a scalar it needs to be a subtype of Real. The expression and all its subexpressions must be differentiable. If expr is an array, the operator is applied to all elements of the array. For Real parameters and constants the result is a zero scalar or array of the same size as the variable. + +Example: + Real x, xdot1, xdot2; +equation + xdot1 = der(x); + xdot2 = der(x*sin(x));""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.der.expr : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.der.dexpr : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real expr(unit = "'p"); + output Real dexpr(unit = "'p/s");""" + + + +MF.div : SYSDYN.SysdynModelicaFunction + L0.HasDescription """div(x, y) + +Integer part of division of two Real numbers. + +Returns the algebraic quotient x/y with any fractional part discarted (also known as truncation toward zero). E.g. div(10,3) = 3.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.div.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.div.y : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.div.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MF.edge : SYSDYN.SysdynModelicaFunction + L0.HasDescription """edge(b) + +Indicate rising edge + +Returns true when the value of the boolean expression b changes. Expanded into (b and not pre(b)).""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.edge.b : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Boolean" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.edge.edgeEvent : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Boolean" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Boolean b; + output Boolean edgeEvent;""" + + + +MF.exp : SYSDYN.SysdynModelicaFunction + L0.HasDescription """exp(u) + +Exponential, base e. + +Returns the base e exponential of u, with -INF < u < INF Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.exp.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.exp.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real u(unit = "1"); + output Real y(unit = "1");""" + + + +MF.floor : SYSDYN.SysdynModelicaFunction + L0.HasDescription """floor(x) + +Round Real number towards minus infinity + +Returns the largest integer not greater than x (i.e. the closest integer below x).""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.floor.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.floor.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real x; + output Real y;""" + + + +MF.initial : SYSDYN.SysdynModelicaFunction + L0.HasDescription """initial() + +True during initialization. + +Returns true during the initialization phase and false otherwise.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.initial.isInitial : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Boolean" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ output Boolean isInitial;""" + + + +MF.log : SYSDYN.SysdynModelicaFunction + L0.HasDescription """log(u) + +Natural (base e) logarithm. + +Returns the base e logarithm of u, with u > 0. Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.log.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.log.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real u(unit = "1"); + output Real y(unit = "1");""" + + + +MF.log10 : SYSDYN.SysdynModelicaFunction + L0.HasDescription """log10(u) + +Base 10 logarithm. (u > 0) + +Returns the base 10 logarithm of u, with u > 0. Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.log10.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.log10.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real u(unit = "1"); + output Real y(unit = "1");""" + + + +MF.max : SYSDYN.SysdynModelicaFunction + L0.HasDescription """max(x,y) +max(e(i, ..., j) for i in u, ..., j in v) + +Returns the largest element. + +The first form returns the largest element of the scalars x and y. + +The second form is a reduction expression and returns the largest value of the scalar expression e(i, ..., j) evaluated for all combinations of i in u, ..., j in v + +Example: +max(i^2 for i in {3,7,6}) // = 49""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.max.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.max.y : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.max.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MF.min : SYSDYN.SysdynModelicaFunction + L0.HasDescription """min(x,y) +min(e(i, ..., j) for i in u, ..., j in v) + +Returns the smallest element. + +The first form returns the smallest element of the scalars x and y. + +The second form is a reduction expression and returns the smallest value of the scalar expression e(i, ..., j) evaluated for all combinations of i in u, ..., j in v + +Example: +min(i^2 for i in {3,7,6}) // = 9""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.min.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.min.y : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.min.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MF.mod : SYSDYN.SysdynModelicaFunction + L0.HasDescription """mod(x, y) + +Integer modulus of a division of two Real numbers. + +Returns the integer modulus of x/y: mod(x,y) = x - floor(x/y) * y.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.mod.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.mod.y : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.mod.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MF.noEvent : SYSDYN.SysdynModelicaFunction + L0.HasDescription """noEvent(expr) + +Turn off event triggering. + +noEvent around an expression causes the expression to NOT generate event. +Important: +If you want a condition to be checked only on time steps, use noEvent. +(e.g. if noEvent(value >= 1) then ... else ...)""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.noEvent.expr : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.noEvent.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MF.pre : SYSDYN.SysdynModelicaFunction + L0.HasDescription """pre(y) + +Returns the preceding value of y from time event that has occured before current time. + +Returns the "left limit" y(tpre) of variable y(t) at a time instant t. At an event instant, y(tpre) is the value of y after the last event iteration at time instant t. The pre operator can be applied if the following three conditions are fulfilled simultaneously: + * variable y is a subtype of a simple type + * y is a discrete-time expression + * the operator is not applied in a function class +The first value of pre(y) is determined in the initialization phase. +A new event is triggered if at least for one variable v "pre(v) <> v" after the active model equations are evaluated at an event instant. In this case the model is at once reevaluated. This evaluation sequence is called "event iteration". The integration is restarted, if for all v used in pre-operators the following condition holds: "pre(v) == v".""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.pre.y : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.pre.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + +MF.rem : SYSDYN.SysdynModelicaFunction + L0.HasDescription """rem(x, y) + +Integer remainder of the division of two Real numbers. + +Returns the integer remainder of x/y: rem(x,y) = x - div(x,y) * y.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.rem.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.rem.y : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.rem.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MF.sample : SYSDYN.SysdynModelicaFunction + L0.HasDescription """sample(start, interval) + +Trigger time events. + +Returns true and triggers time events at times start + i * interval (i=0,1,...).""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.sample.start : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.sample.interval : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.sample.isSample : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Boolean" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ parameter input Real start(fixed = false); + parameter input Real interval(fixed = false); + output Boolean isSample;""" + + + +MF.semiLinear : SYSDYN.SysdynModelicaFunction + L0.HasDescription """semiLinear(x, positiveSlope, negativeSlope) + +Returns "if x >= 0 then positiveSlope*x else negativeSlope*x" and handle x=0 in a meaningful way. + +Returns "if x >= 0 then positiveSlope*x else negativeSlope*x". In some situations, equations with the semiLinear function become underdetermined if the first argument (x) becomes zero, i.e., there are an infinite number of solutions. It is recommended that the following rules are used to transform the equations during the translation phase in order to select one meaningful solution in such cases: + +Rule 1: The equations +y = semiLinear(x, sa, s1); +y = semiLinear(x, s1, s2); +y = semiLinear(x, s2, s3); + ... +y = semiLinear(x, sN, sb); +may be replaced by +s1 = if x >= 0 then sa else sb +s2 = s1; +s3 = s2; + ... +sN = sN-1; +y = semiLinear(x, sa, sb); + +Rule 2: The equations +x = 0; +y = 0; +y = semiLinear(x, sa, sb); +may be replaced by +x = 0 +y = 0; +sa = sb;""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.semiLinear.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.semiLinear.positiveSlope : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.semiLinear.negativeSlope : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.semiLinear.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real x; + input Real positiveSlope; + input Real negativeSlope; + output Real result;""" + + + +MF.sign : SYSDYN.SysdynModelicaFunction + L0.HasDescription """sign(v) + +Sign function of a Real or Integer number. + +Returns -1 if v is negative, 1 if v is positive. Expanded into "(if v > 0 then 1 else if v < 0 then -1 else 0)".""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.sign.v : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.sign.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Integer" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real v; + output Integer result;""" + + + +MF.sin : SYSDYN.SysdynModelicaFunction + L0.HasDescription """sin(u) + +Sine. + +Returns the sine of u, with -INF < u < INF. Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.sin.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.sin.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real x; + output Real y;""" + + + +MF.sinh : SYSDYN.SysdynModelicaFunction + L0.HasDescription """sinh(u) + +Hyperbolic sine. + +Returns the sinh of u, with -INF < u < INF. Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.sinh.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.sinh.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real x; + output Real y;""" + + + +MF.smooth : SYSDYN.SysdynModelicaFunction + L0.HasDescription """smooth(p, expr) + +Indicate smoothness of expression. + +If p>=0 smooth(p, expr) returns expr and states that expr is p times continuously differentiable, i.e.: expr is continuous in all real variables appearing in the expression and all partial derivatives with respect to all appearing real variables exist and are continuous up to order p. +The only allowed types for expr in smooth are: real expressions, arrays of allowed expressions, and records containing only components of allowed expressions.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.smooth.p : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + MF.smooth.expr : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.smooth.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + + + +MF.sqrt : SYSDYN.SysdynModelicaFunction + L0.HasDescription """sqrt(v) + +Square root. + +Square root of v. The value of v must be greater or equal to 0 or an assertion error occurs.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.sqrt.v : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.sqrt.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real v(unit = "'p"); + output Real y(unit = "'p(1/2)");""" + + + +MF.tan : SYSDYN.SysdynModelicaFunction + L0.HasDescription """tan(u) + +Tangent. + +Returns the tangent of u, with -INF < u < INF (if u is a multiple of (2n-1)*pi/2, y = tan(u) is +/- infinity). Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.tan.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.tan.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real u; + output Real y;""" + + + +MF.tanh : SYSDYN.SysdynModelicaFunction + L0.HasDescription """tanh(u) + +Hyperbolic tangent. + +Returns the tanh of u, with -INF < u < INF. Argument u needs to be an Integer or Real expression.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + MF.tanh.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.tanh.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ input Real x; + output Real y;""" + + + +MF.terminal : SYSDYN.SysdynModelicaFunction + L0.HasDescription """terminal() + +True after successful analysis + +Returns true at the end of a successful simulation.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + MF.terminal.isTerminal : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Boolean" + SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface """ output Boolean isTerminal;""" + \ No newline at end of file diff --git a/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph b/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph index 11bd59fe..12ada0e5 100644 --- a/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph +++ b/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph @@ -293,7 +293,10 @@ SYSDYN.Redeclaration -- SYSDYN.SysdynModelicaFunction.modelicaFunctionCode --> L0.String -- SYSDYN.SysdynModelicaFunction.modelicaFunctionInterface --> L0.String -- SYSDYN.SysdynModelicaFunction.inputs --> L0.List -- SYSDYN.SysdynModelicaFunction.outputs --> L0.List -- SYSDYN.ExternalFunctionFile.externalFile --> L0.ByteArray -- SYSDYN.SysdynModelicaFunction.definition --> L0.String -- SYSDYN.SysdynModelicaFunction.optional --> L0.Boolean -- SYSDYN.SysdynModelicaFunction.VariableLengthInput.shownLabels --> L0.List FL = : SYSDYN.SysdynModelicaFunctionLibrary + + FL.minmax : SYSDYN.SysdynModelicaFunction - L0.HasDescription "Limits the result of an equation to between the given minimum and maximum values." + L0.HasDescription """minmax(expression, minimum, maximum) + +Limits the result of an equation to between the given minimum and maximum values.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + FL.minmax.expression : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + FL.minmax.minimum : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + FL.minmax.maximum : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + FL.minmax.result : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real expression; input Real minimum; input Real maximum; @@ -13,29 +32,82 @@ algorithm result := min(maximum, max(minimum, expression));""" + FL.xidz : SYSDYN.SysdynModelicaFunction - L0.HasDescription "X if divided by zero" - SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real a; - input Real b; - input Real x; - output Real z; + L0.HasDescription """xidz(divident, divisor, x) + +x if divided by zero, divident/divisor otherwise""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + FL.xidz.divident : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + FL.xidz.divisor : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + FL.xidz.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.definition "Result if divisor = 0" + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + FL.xidz.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real divident; + input Real divisor; + input Real x; + output Real z; algorithm - if b > 0.0 or b < 0.0 then - z := a / b; - else - z := x; - end if;""" + if divisor > 0.0 or divisor < 0.0 then + z := divident / divisor; + else + z := x; + end if;""" + + FL.zidz : SYSDYN.SysdynModelicaFunction - L0.HasDescription "Zero if divided by zero" - SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real a; - input Real b; + L0.HasDescription "zidz(divident, divisor) + +Zero if divided by zero, divident/divisor otherwise" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + FL.zidz.divident : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + FL.zidz.divisor : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + FL.zidz.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real divident; + input Real divisor; output Real z; algorithm - z := xidz(a,b,0.0);""" + z := xidz(divident,divisor,0.0);""" + + FL.interpolate : SYSDYN.SysdynModelicaFunction - L0.HasDescription "Interpolate function for two-dimensional table" + L0.HasDescription """interpolate(u, table) + +Interpolate function for two-dimensional table""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + FL.interpolate.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.definition "input value (first column of table)" + FL.interpolate.table : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.definition "table to be interpolated" + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + FL.interpolate.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real u "input value (first column of table)"; input Real table[:, :] "table to be interpolated"; output Real y "interpolated input value (icol column of table)"; @@ -43,8 +115,29 @@ algorithm y := interpolateFull(u, table, 2);""" + FL.interpolateFull : SYSDYN.SysdynModelicaFunction - L0.HasDescription "The full interpolate function" + L0.HasDescription """interpolateFull(u, table, icol) + +The full interpolate function""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + FL.interpolateFull.u : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.definition "input value (first column of table)" + FL.interpolateFull.table : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.definition "table to be interpolated" + FL.interpolateFull.icol : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Integer" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.definition "column of table to be interpolated" + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + FL.interpolateFull.y : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real u "input value (first column of table)"; input Real table[:, :] "table to be interpolated"; input Integer icol "column of table to be interpolated"; diff --git a/org.simantics.sysdyn.ontology/graph/VensimFunctions.pgraph b/org.simantics.sysdyn.ontology/graph/VensimFunctions.pgraph index 3e097bc5..f40dfc05 100644 --- a/org.simantics.sysdyn.ontology/graph/VensimFunctions.pgraph +++ b/org.simantics.sysdyn.ontology/graph/VensimFunctions.pgraph @@ -20,9 +20,27 @@ algorithm z := if time < parameterDTime then init else delay(inputVar, parameterDTime);""" */ + + VF.IFTHENELSE : SYSDYN.SysdynModelicaFunction - L0.HasDescription """IF THEN ELSE( cond , ontrue , onfalse ) - -> if cond then ontrue else onfalse""" + L0.HasDescription """IFTHENELSE( cond , ontrue , onfalse ) + +Returns ontrue if cond, otherwise onfalse""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.IFTHENELSE.cond : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.IFTHENELSE.ontrue : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.IFTHENELSE.onfalse : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.IFTHENELSE.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Boolean cond; input Real ontrue; input Real onfalse; @@ -30,27 +48,75 @@ VF.IFTHENELSE : SYSDYN.SysdynModelicaFunction algorithm z := if cond then ontrue else onfalse;""" + + VF.MAX : SYSDYN.SysdynModelicaFunction L0.HasDescription """MAX(a, b) - Returns the larger of a and b.""" + +Returns the larger of a and b.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.MAX.a : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.MAX.b : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.MAX.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real a; input Real b; output Real z; algorithm z := if a > b then a else b;""" + + VF.MIN : SYSDYN.SysdynModelicaFunction L0.HasDescription """MIN(a, b) - Returns the smaller of a and b.""" + +Returns the smaller of a and b.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.MIN.a : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.MIN.b : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.MIN.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real a; input Real b; output Real z; algorithm z := if a < b then a else b;""" + + VF.XIDZ : SYSDYN.SysdynModelicaFunction L0.HasDescription """XIDZ(a, b, x) - x if divided by zero, a/b otherwise.""" + +x if divided by zero, a/b otherwise.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.XIDZ.a : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.XIDZ.b : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.XIDZ.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.XIDZ.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real a; input Real b; input Real x; @@ -58,43 +124,112 @@ VF.XIDZ : SYSDYN.SysdynModelicaFunction algorithm z := xidz(a, b, x);""" + + VF.ZIDZ : SYSDYN.SysdynModelicaFunction - L0.HasDescription """XIDZ(a, b) - Zero if divided by zero, a/b otherwise.""" + L0.HasDescription """ZIDZ(a, b) + +Zero if divided by zero, a/b otherwise.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.ZIDZ.a : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.ZIDZ.b : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.ZIDZ.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real a; input Real b; output Real z; algorithm z := zidz(a, b);""" + + VF.ABS : SYSDYN.SysdynModelicaFunction L0.HasDescription """ABS(x) - Returns the absolute value of x.""" + +Returns the absolute value of x.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.ABS.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.ABS.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real x; output Real z; algorithm z := abs(x);""" + + VF.SQRT : SYSDYN.SysdynModelicaFunction L0.HasDescription """SQRT(x) - Returns the square root of x.""" + +Returns the square root of x.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.SQRT.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.SQRT.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real x; output Real z; algorithm z := sqrt(x);""" + + VF.MODULO : SYSDYN.SysdynModelicaFunction L0.HasDescription """MODULO(a, b) - Returns the remainder when a is divided by b. """ + +Returns the remainder when a is divided by b. """ + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.MODULO.a : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.MODULO.b : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.MODULO.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real a; input Real b; output Real z; algorithm z := mod(a, b);""" + + VF.PULSE : SYSDYN.SysdynModelicaFunction L0.HasDescription """PULSE(start, width) - Returns 1.0 starting at time start and lasting for interval width. 0.0 is returned at other times.""" + +Returns 1.0 starting at time start and lasting for interval width. 0.0 is returned at other times.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.PULSE.start : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.PULSE.width : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.PULSE.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real start; input Real width; input Real t = time; @@ -102,9 +237,27 @@ VF.PULSE : SYSDYN.SysdynModelicaFunction algorithm z := if t >= start and (t - start) <= width then 1.0 else 0.0;""" + + VF.RAMP : SYSDYN.SysdynModelicaFunction L0.HasDescription """RAMP(slope, startTime, endTime) - Returns 0 until the start time and then slopes upward until end time and then holds constant.""" + +Returns 0 until the start time and then slopes upward until end time and then holds constant.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.RAMP.slope : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.RAMP.startTime : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.RAMP.endTime : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.RAMP.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real slope; input Real startTime; input Real endTime; @@ -120,9 +273,24 @@ algorithm else 0;""" + + VF.STEP : SYSDYN.SysdynModelicaFunction L0.HasDescription """STEP(height, stepTime) - Returns 0.0 until the step time and then returns height.""" + +Returns 0.0 until the step time and then returns height.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.STEP.height : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + VF.STEP.stepTime : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.STEP.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real height; input Real stepTime; input Real t = time; @@ -130,68 +298,165 @@ VF.STEP : SYSDYN.SysdynModelicaFunction algorithm z := if t >= stepTime then height else 0.0;""" + + /* Continuous built-in common mathematical functions */ VF.EXP : SYSDYN.SysdynModelicaFunction - L0.HasDescription """ - """ + L0.HasDescription """EXP(x) + +Exponential, base e.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.EXP.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.EXP.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real x; output Real z; algorithm z := exp(x);""" + + VF.SIN : SYSDYN.SysdynModelicaFunction L0.HasDescription """SIN(x) - Returns the sine of x.""" + +Returns the sine of x.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.SIN.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.SIN.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real x; output Real z; algorithm z := sin(x);""" + + VF.SINH : SYSDYN.SysdynModelicaFunction L0.HasDescription """SINH(x) - Returns the hyperbolic sine of x.""" + +Returns the hyperbolic sine of x.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.SINH.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.SINH.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real x; output Real z; algorithm z := sinh(x);""" + + VF.COS : SYSDYN.SysdynModelicaFunction L0.HasDescription """COS(x) - Returns the cosine of x.""" + +Returns the cosine of x.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.COS.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.COS.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real x; output Real z; algorithm z := cos(x);""" + + VF.COSH : SYSDYN.SysdynModelicaFunction L0.HasDescription """COSH(x) - Returns the hyperbolic cosine of x.""" + +Returns the hyperbolic cosine of x.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.COSH.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.COSH.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real x; output Real z; algorithm z := cosh(x);""" + + VF.TAN : SYSDYN.SysdynModelicaFunction L0.HasDescription """TAN(x) - Returns the tangent of x.""" + +Returns the tangent of x.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.TAN.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.TAN.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real x; output Real z; algorithm z := tan(x);""" + + VF.TANH : SYSDYN.SysdynModelicaFunction L0.HasDescription """TANH(x) - Returns the hyperbolic tangent of x.""" + +Returns the hyperbolic tangent of x.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.TANH.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.TANH.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real x; output Real z; algorithm z := tanh(x);""" + + VF.LN : SYSDYN.SysdynModelicaFunction L0.HasDescription """LN(x) - Returns the natural logarithm of x. - In modelica log(x) is the natural logarighm and log10(x) is base 10 logarighm.""" + +Returns the natural logarithm of x. + +In modelica log(x) is the natural logarighm and log10(x) is base 10 logarighm.""" + SYSDYN.SysdynModelicaFunction.inputs _ : L0.List + @L0.list + VF.LN.x : SYSDYN.SysdynModelicaFunction.Input + SYSDYN.Variable.type "Real" + SYSDYN.SysdynModelicaFunction.optional false + SYSDYN.SysdynModelicaFunction.outputs _ : L0.List + @L0.list + VF.LN.z : SYSDYN.SysdynModelicaFunction.Output + SYSDYN.Variable.type "Real" SYSDYN.SysdynModelicaFunction.modelicaFunctionCode """ input Real x; output Real z; algorithm diff --git a/org.simantics.sysdyn.ontology/src/org/simantics/sysdyn/SysdynResource.java b/org.simantics.sysdyn.ontology/src/org/simantics/sysdyn/SysdynResource.java index e4487707..3b6a342f 100644 --- a/org.simantics.sysdyn.ontology/src/org/simantics/sysdyn/SysdynResource.java +++ b/org.simantics.sysdyn.ontology/src/org/simantics/sysdyn/SysdynResource.java @@ -22,31 +22,290 @@ public class SysdynResource { public final Resource Bottom; public final Resource Browser; public final Resource Built$in_Functions; + public final Resource Built$in_Functions_Modelica_Array_Functions; + public final Resource Built$in_Functions_Modelica_Array_Functions_array; + public final Resource Built$in_Functions_Modelica_Array_Functions_array_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_array_A_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_array_A_B; + public final Resource Built$in_Functions_Modelica_Array_Functions_array_A_C; + public final Resource Built$in_Functions_Modelica_Array_Functions_array_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_cat; + public final Resource Built$in_Functions_Modelica_Array_Functions_cat_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_cat_A_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_cat_A_B; + public final Resource Built$in_Functions_Modelica_Array_Functions_cat_A_C; + public final Resource Built$in_Functions_Modelica_Array_Functions_cat_k; + public final Resource Built$in_Functions_Modelica_Array_Functions_cat_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_cross; + public final Resource Built$in_Functions_Modelica_Array_Functions_cross_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_cross_x; + public final Resource Built$in_Functions_Modelica_Array_Functions_cross_y; + public final Resource Built$in_Functions_Modelica_Array_Functions_diagonal; + public final Resource Built$in_Functions_Modelica_Array_Functions_diagonal_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_diagonal_v; + public final Resource Built$in_Functions_Modelica_Array_Functions_fill; + public final Resource Built$in_Functions_Modelica_Array_Functions_fill_n; + public final Resource Built$in_Functions_Modelica_Array_Functions_fill_n_n1; + public final Resource Built$in_Functions_Modelica_Array_Functions_fill_n_n2; + public final Resource Built$in_Functions_Modelica_Array_Functions_fill_n_n3; + public final Resource Built$in_Functions_Modelica_Array_Functions_fill_o; + public final Resource Built$in_Functions_Modelica_Array_Functions_fill_s; + public final Resource Built$in_Functions_Modelica_Array_Functions_identity; + public final Resource Built$in_Functions_Modelica_Array_Functions_identity_n; + public final Resource Built$in_Functions_Modelica_Array_Functions_identity_outArray; + public final Resource Built$in_Functions_Modelica_Array_Functions_linspace; + public final Resource Built$in_Functions_Modelica_Array_Functions_linspace_n; + public final Resource Built$in_Functions_Modelica_Array_Functions_linspace_v; + public final Resource Built$in_Functions_Modelica_Array_Functions_linspace_x1; + public final Resource Built$in_Functions_Modelica_Array_Functions_linspace_x2; + public final Resource Built$in_Functions_Modelica_Array_Functions_matrix; + public final Resource Built$in_Functions_Modelica_Array_Functions_matrix_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_matrix_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_max; + public final Resource Built$in_Functions_Modelica_Array_Functions_max_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_max_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_min; + public final Resource Built$in_Functions_Modelica_Array_Functions_min_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_min_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_ndims; + public final Resource Built$in_Functions_Modelica_Array_Functions_ndims_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_ndims_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_ones; + public final Resource Built$in_Functions_Modelica_Array_Functions_ones_n; + public final Resource Built$in_Functions_Modelica_Array_Functions_ones_n_n1; + public final Resource Built$in_Functions_Modelica_Array_Functions_ones_n_n2; + public final Resource Built$in_Functions_Modelica_Array_Functions_ones_n_n3; + public final Resource Built$in_Functions_Modelica_Array_Functions_ones_o; + public final Resource Built$in_Functions_Modelica_Array_Functions_product; + public final Resource Built$in_Functions_Modelica_Array_Functions_product_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_product_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_scalar; + public final Resource Built$in_Functions_Modelica_Array_Functions_scalar_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_scalar_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_size; + public final Resource Built$in_Functions_Modelica_Array_Functions_size_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_size_i; + public final Resource Built$in_Functions_Modelica_Array_Functions_size_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_skew; + public final Resource Built$in_Functions_Modelica_Array_Functions_skew_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_skew_x; + public final Resource Built$in_Functions_Modelica_Array_Functions_sum; + public final Resource Built$in_Functions_Modelica_Array_Functions_sum_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_sum_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_transpose; + public final Resource Built$in_Functions_Modelica_Array_Functions_transpose_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_transpose_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_vector; + public final Resource Built$in_Functions_Modelica_Array_Functions_vector_A; + public final Resource Built$in_Functions_Modelica_Array_Functions_vector_result; + public final Resource Built$in_Functions_Modelica_Array_Functions_zeros; + public final Resource Built$in_Functions_Modelica_Array_Functions_zeros_n; + public final Resource Built$in_Functions_Modelica_Array_Functions_zeros_n_n1; + public final Resource Built$in_Functions_Modelica_Array_Functions_zeros_n_n2; + public final Resource Built$in_Functions_Modelica_Array_Functions_zeros_n_n3; + public final Resource Built$in_Functions_Modelica_Array_Functions_zeros_o; + public final Resource Built$in_Functions_Modelica_Functions; + public final Resource Built$in_Functions_Modelica_Functions_abs; + public final Resource Built$in_Functions_Modelica_Functions_abs_result; + public final Resource Built$in_Functions_Modelica_Functions_abs_v; + public final Resource Built$in_Functions_Modelica_Functions_acos; + public final Resource Built$in_Functions_Modelica_Functions_acos_u; + public final Resource Built$in_Functions_Modelica_Functions_acos_y; + public final Resource Built$in_Functions_Modelica_Functions_asin; + public final Resource Built$in_Functions_Modelica_Functions_asin_u; + public final Resource Built$in_Functions_Modelica_Functions_asin_y; + public final Resource Built$in_Functions_Modelica_Functions_atan; + public final Resource Built$in_Functions_Modelica_Functions_atan2; + public final Resource Built$in_Functions_Modelica_Functions_atan2_u1; + public final Resource Built$in_Functions_Modelica_Functions_atan2_u2; + public final Resource Built$in_Functions_Modelica_Functions_atan2_y; + public final Resource Built$in_Functions_Modelica_Functions_atan_u; + public final Resource Built$in_Functions_Modelica_Functions_atan_y; + public final Resource Built$in_Functions_Modelica_Functions_ceil; + public final Resource Built$in_Functions_Modelica_Functions_ceil_u; + public final Resource Built$in_Functions_Modelica_Functions_ceil_x; + public final Resource Built$in_Functions_Modelica_Functions_ceil_y; + public final Resource Built$in_Functions_Modelica_Functions_cos; + public final Resource Built$in_Functions_Modelica_Functions_cosh; + public final Resource Built$in_Functions_Modelica_Functions_cosh_u; + public final Resource Built$in_Functions_Modelica_Functions_cosh_y; + public final Resource Built$in_Functions_Modelica_Functions_delay; + public final Resource Built$in_Functions_Modelica_Functions_delay_delayMax; + public final Resource Built$in_Functions_Modelica_Functions_delay_delayTime; + public final Resource Built$in_Functions_Modelica_Functions_delay_expr; + public final Resource Built$in_Functions_Modelica_Functions_delay_result; + public final Resource Built$in_Functions_Modelica_Functions_der; + public final Resource Built$in_Functions_Modelica_Functions_der_dexpr; + public final Resource Built$in_Functions_Modelica_Functions_der_expr; + public final Resource Built$in_Functions_Modelica_Functions_div; + public final Resource Built$in_Functions_Modelica_Functions_div_result; + public final Resource Built$in_Functions_Modelica_Functions_div_x; + public final Resource Built$in_Functions_Modelica_Functions_div_y; + public final Resource Built$in_Functions_Modelica_Functions_edge; + public final Resource Built$in_Functions_Modelica_Functions_edge_b; + public final Resource Built$in_Functions_Modelica_Functions_edge_edgeEvent; + public final Resource Built$in_Functions_Modelica_Functions_exp; + public final Resource Built$in_Functions_Modelica_Functions_exp_u; + public final Resource Built$in_Functions_Modelica_Functions_exp_y; + public final Resource Built$in_Functions_Modelica_Functions_floor; + public final Resource Built$in_Functions_Modelica_Functions_floor_x; + public final Resource Built$in_Functions_Modelica_Functions_floor_y; + public final Resource Built$in_Functions_Modelica_Functions_initial; + public final Resource Built$in_Functions_Modelica_Functions_initial_isInitial; + public final Resource Built$in_Functions_Modelica_Functions_log; + public final Resource Built$in_Functions_Modelica_Functions_log10; + public final Resource Built$in_Functions_Modelica_Functions_log10_u; + public final Resource Built$in_Functions_Modelica_Functions_log10_y; + public final Resource Built$in_Functions_Modelica_Functions_log_u; + public final Resource Built$in_Functions_Modelica_Functions_log_y; + public final Resource Built$in_Functions_Modelica_Functions_max; + public final Resource Built$in_Functions_Modelica_Functions_max_result; + public final Resource Built$in_Functions_Modelica_Functions_max_x; + public final Resource Built$in_Functions_Modelica_Functions_max_y; + public final Resource Built$in_Functions_Modelica_Functions_min; + public final Resource Built$in_Functions_Modelica_Functions_min_result; + public final Resource Built$in_Functions_Modelica_Functions_min_x; + public final Resource Built$in_Functions_Modelica_Functions_min_y; + public final Resource Built$in_Functions_Modelica_Functions_mod; + public final Resource Built$in_Functions_Modelica_Functions_mod_result; + public final Resource Built$in_Functions_Modelica_Functions_mod_x; + public final Resource Built$in_Functions_Modelica_Functions_mod_y; + public final Resource Built$in_Functions_Modelica_Functions_noEvent; + public final Resource Built$in_Functions_Modelica_Functions_noEvent_expr; + public final Resource Built$in_Functions_Modelica_Functions_noEvent_result; + public final Resource Built$in_Functions_Modelica_Functions_pre; + public final Resource Built$in_Functions_Modelica_Functions_pre_result; + public final Resource Built$in_Functions_Modelica_Functions_pre_y; + public final Resource Built$in_Functions_Modelica_Functions_rem; + public final Resource Built$in_Functions_Modelica_Functions_rem_result; + public final Resource Built$in_Functions_Modelica_Functions_rem_x; + public final Resource Built$in_Functions_Modelica_Functions_rem_y; + public final Resource Built$in_Functions_Modelica_Functions_sample; + public final Resource Built$in_Functions_Modelica_Functions_sample_interval; + public final Resource Built$in_Functions_Modelica_Functions_sample_isSample; + public final Resource Built$in_Functions_Modelica_Functions_sample_start; + public final Resource Built$in_Functions_Modelica_Functions_semiLinear; + public final Resource Built$in_Functions_Modelica_Functions_semiLinear_negativeSlope; + public final Resource Built$in_Functions_Modelica_Functions_semiLinear_positiveSlope; + public final Resource Built$in_Functions_Modelica_Functions_semiLinear_result; + public final Resource Built$in_Functions_Modelica_Functions_semiLinear_x; + public final Resource Built$in_Functions_Modelica_Functions_sign; + public final Resource Built$in_Functions_Modelica_Functions_sign_result; + public final Resource Built$in_Functions_Modelica_Functions_sign_v; + public final Resource Built$in_Functions_Modelica_Functions_sin; + public final Resource Built$in_Functions_Modelica_Functions_sin_u; + public final Resource Built$in_Functions_Modelica_Functions_sin_y; + public final Resource Built$in_Functions_Modelica_Functions_sinh; + public final Resource Built$in_Functions_Modelica_Functions_sinh_u; + public final Resource Built$in_Functions_Modelica_Functions_sinh_y; + public final Resource Built$in_Functions_Modelica_Functions_smooth; + public final Resource Built$in_Functions_Modelica_Functions_smooth_expr; + public final Resource Built$in_Functions_Modelica_Functions_smooth_p; + public final Resource Built$in_Functions_Modelica_Functions_smooth_result; + public final Resource Built$in_Functions_Modelica_Functions_sqrt; + public final Resource Built$in_Functions_Modelica_Functions_sqrt_v; + public final Resource Built$in_Functions_Modelica_Functions_sqrt_y; + public final Resource Built$in_Functions_Modelica_Functions_tan; + public final Resource Built$in_Functions_Modelica_Functions_tan_u; + public final Resource Built$in_Functions_Modelica_Functions_tan_y; + public final Resource Built$in_Functions_Modelica_Functions_tanh; + public final Resource Built$in_Functions_Modelica_Functions_tanh_u; + public final Resource Built$in_Functions_Modelica_Functions_tanh_y; + public final Resource Built$in_Functions_Modelica_Functions_terminal; + public final Resource Built$in_Functions_Modelica_Functions_terminal_isTerminal; public final Resource Built$in_Functions_Vensim_Functions; public final Resource Built$in_Functions_Vensim_Functions_ABS; + public final Resource Built$in_Functions_Vensim_Functions_ABS_x; + public final Resource Built$in_Functions_Vensim_Functions_ABS_z; public final Resource Built$in_Functions_Vensim_Functions_COS; public final Resource Built$in_Functions_Vensim_Functions_COSH; + public final Resource Built$in_Functions_Vensim_Functions_COSH_x; + public final Resource Built$in_Functions_Vensim_Functions_COSH_z; + public final Resource Built$in_Functions_Vensim_Functions_COS_x; + public final Resource Built$in_Functions_Vensim_Functions_COS_z; public final Resource Built$in_Functions_Vensim_Functions_EXP; + public final Resource Built$in_Functions_Vensim_Functions_EXP_x; + public final Resource Built$in_Functions_Vensim_Functions_EXP_z; public final Resource Built$in_Functions_Vensim_Functions_IFTHENELSE; + public final Resource Built$in_Functions_Vensim_Functions_IFTHENELSE_cond; + public final Resource Built$in_Functions_Vensim_Functions_IFTHENELSE_onfalse; + public final Resource Built$in_Functions_Vensim_Functions_IFTHENELSE_ontrue; + public final Resource Built$in_Functions_Vensim_Functions_IFTHENELSE_z; public final Resource Built$in_Functions_Vensim_Functions_LN; + public final Resource Built$in_Functions_Vensim_Functions_LN_x; + public final Resource Built$in_Functions_Vensim_Functions_LN_z; public final Resource Built$in_Functions_Vensim_Functions_MAX; + public final Resource Built$in_Functions_Vensim_Functions_MAX_a; + public final Resource Built$in_Functions_Vensim_Functions_MAX_b; + public final Resource Built$in_Functions_Vensim_Functions_MAX_z; public final Resource Built$in_Functions_Vensim_Functions_MIN; + public final Resource Built$in_Functions_Vensim_Functions_MIN_a; + public final Resource Built$in_Functions_Vensim_Functions_MIN_b; + public final Resource Built$in_Functions_Vensim_Functions_MIN_z; public final Resource Built$in_Functions_Vensim_Functions_MODULO; + public final Resource Built$in_Functions_Vensim_Functions_MODULO_a; + public final Resource Built$in_Functions_Vensim_Functions_MODULO_b; + public final Resource Built$in_Functions_Vensim_Functions_MODULO_z; public final Resource Built$in_Functions_Vensim_Functions_PULSE; + public final Resource Built$in_Functions_Vensim_Functions_PULSE_start; + public final Resource Built$in_Functions_Vensim_Functions_PULSE_width; + public final Resource Built$in_Functions_Vensim_Functions_PULSE_z; public final Resource Built$in_Functions_Vensim_Functions_RAMP; + public final Resource Built$in_Functions_Vensim_Functions_RAMP_endTime; + public final Resource Built$in_Functions_Vensim_Functions_RAMP_slope; + public final Resource Built$in_Functions_Vensim_Functions_RAMP_startTime; + public final Resource Built$in_Functions_Vensim_Functions_RAMP_z; public final Resource Built$in_Functions_Vensim_Functions_SIN; public final Resource Built$in_Functions_Vensim_Functions_SINH; + public final Resource Built$in_Functions_Vensim_Functions_SINH_x; + public final Resource Built$in_Functions_Vensim_Functions_SINH_z; + public final Resource Built$in_Functions_Vensim_Functions_SIN_x; + public final Resource Built$in_Functions_Vensim_Functions_SIN_z; public final Resource Built$in_Functions_Vensim_Functions_SQRT; + public final Resource Built$in_Functions_Vensim_Functions_SQRT_x; + public final Resource Built$in_Functions_Vensim_Functions_SQRT_z; public final Resource Built$in_Functions_Vensim_Functions_STEP; + public final Resource Built$in_Functions_Vensim_Functions_STEP_height; + public final Resource Built$in_Functions_Vensim_Functions_STEP_stepTime; + public final Resource Built$in_Functions_Vensim_Functions_STEP_z; public final Resource Built$in_Functions_Vensim_Functions_TAN; public final Resource Built$in_Functions_Vensim_Functions_TANH; + public final Resource Built$in_Functions_Vensim_Functions_TANH_x; + public final Resource Built$in_Functions_Vensim_Functions_TANH_z; + public final Resource Built$in_Functions_Vensim_Functions_TAN_x; + public final Resource Built$in_Functions_Vensim_Functions_TAN_z; public final Resource Built$in_Functions_Vensim_Functions_XIDZ; + public final Resource Built$in_Functions_Vensim_Functions_XIDZ_a; + public final Resource Built$in_Functions_Vensim_Functions_XIDZ_b; + public final Resource Built$in_Functions_Vensim_Functions_XIDZ_x; + public final Resource Built$in_Functions_Vensim_Functions_XIDZ_z; public final Resource Built$in_Functions_Vensim_Functions_ZIDZ; + public final Resource Built$in_Functions_Vensim_Functions_ZIDZ_a; + public final Resource Built$in_Functions_Vensim_Functions_ZIDZ_b; + public final Resource Built$in_Functions_Vensim_Functions_ZIDZ_z; public final Resource Built$in_Functions_interpolate; public final Resource Built$in_Functions_interpolateFull; + public final Resource Built$in_Functions_interpolateFull_icol; + public final Resource Built$in_Functions_interpolateFull_table; + public final Resource Built$in_Functions_interpolateFull_u; + public final Resource Built$in_Functions_interpolateFull_y; + public final Resource Built$in_Functions_interpolate_table; + public final Resource Built$in_Functions_interpolate_u; + public final Resource Built$in_Functions_interpolate_y; public final Resource Built$in_Functions_minmax; + public final Resource Built$in_Functions_minmax_expression; + public final Resource Built$in_Functions_minmax_maximum; + public final Resource Built$in_Functions_minmax_minimum; + public final Resource Built$in_Functions_minmax_result; public final Resource Built$in_Functions_xidz; + public final Resource Built$in_Functions_xidz_divident; + public final Resource Built$in_Functions_xidz_divisor; + public final Resource Built$in_Functions_xidz_x; + public final Resource Built$in_Functions_xidz_z; public final Resource Built$in_Functions_zidz; + public final Resource Built$in_Functions_zidz_divident; + public final Resource Built$in_Functions_zidz_divisor; + public final Resource Built$in_Functions_zidz_z; public final Resource Center; public final Resource Cloud; public final Resource CloudSymbol; @@ -281,8 +540,24 @@ public class SysdynResource { public final Resource SysdynModel_variableFilter_Inverse; public final Resource SysdynModelicaFunction; public final Resource SysdynModelicaFunctionLibrary; + public final Resource SysdynModelicaFunction_Input; + public final Resource SysdynModelicaFunction_InterfaceVariable; + public final Resource SysdynModelicaFunction_Output; + public final Resource SysdynModelicaFunction_VariableLengthInput; + public final Resource SysdynModelicaFunction_VariableLengthInput_shownLabels; + public final Resource SysdynModelicaFunction_VariableLengthInput_shownLabels_Inverse; + public final Resource SysdynModelicaFunction_definition; + public final Resource SysdynModelicaFunction_definition_Inverse; + public final Resource SysdynModelicaFunction_inputs; + public final Resource SysdynModelicaFunction_inputs_Inverse; public final Resource SysdynModelicaFunction_modelicaFunctionCode; public final Resource SysdynModelicaFunction_modelicaFunctionCode_Inverse; + public final Resource SysdynModelicaFunction_modelicaFunctionInterface; + public final Resource SysdynModelicaFunction_modelicaFunctionInterface_Inverse; + public final Resource SysdynModelicaFunction_optional; + public final Resource SysdynModelicaFunction_optional_Inverse; + public final Resource SysdynModelicaFunction_outputs; + public final Resource SysdynModelicaFunction_outputs_Inverse; public final Resource SysdynModuleLibrary; public final Resource SysdynOperationBrowser; public final Resource SysdynTerminal; @@ -394,31 +669,290 @@ public class SysdynResource { public static final String Bottom = "http://www.simantics.org/Sysdyn-1.1/Bottom"; public static final String Browser = "http://www.simantics.org/Sysdyn-1.1/Browser"; public static final String Built$in_Functions = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions"; + public static final String Built$in_Functions_Modelica_Array_Functions = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions"; + public static final String Built$in_Functions_Modelica_Array_Functions_array = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/array"; + public static final String Built$in_Functions_Modelica_Array_Functions_array_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/array/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_array_A_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/array/A/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_array_A_B = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/array/A/B"; + public static final String Built$in_Functions_Modelica_Array_Functions_array_A_C = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/array/A/C"; + public static final String Built$in_Functions_Modelica_Array_Functions_array_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/array/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_cat = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/cat"; + public static final String Built$in_Functions_Modelica_Array_Functions_cat_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/cat/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_cat_A_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/cat/A/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_cat_A_B = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/cat/A/B"; + public static final String Built$in_Functions_Modelica_Array_Functions_cat_A_C = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/cat/A/C"; + public static final String Built$in_Functions_Modelica_Array_Functions_cat_k = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/cat/k"; + public static final String Built$in_Functions_Modelica_Array_Functions_cat_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/cat/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_cross = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/cross"; + public static final String Built$in_Functions_Modelica_Array_Functions_cross_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/cross/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_cross_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/cross/x"; + public static final String Built$in_Functions_Modelica_Array_Functions_cross_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/cross/y"; + public static final String Built$in_Functions_Modelica_Array_Functions_diagonal = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/diagonal"; + public static final String Built$in_Functions_Modelica_Array_Functions_diagonal_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/diagonal/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_diagonal_v = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/diagonal/v"; + public static final String Built$in_Functions_Modelica_Array_Functions_fill = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/fill"; + public static final String Built$in_Functions_Modelica_Array_Functions_fill_n = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/fill/n"; + public static final String Built$in_Functions_Modelica_Array_Functions_fill_n_n1 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/fill/n/n1"; + public static final String Built$in_Functions_Modelica_Array_Functions_fill_n_n2 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/fill/n/n2"; + public static final String Built$in_Functions_Modelica_Array_Functions_fill_n_n3 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/fill/n/n3"; + public static final String Built$in_Functions_Modelica_Array_Functions_fill_o = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/fill/o"; + public static final String Built$in_Functions_Modelica_Array_Functions_fill_s = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/fill/s"; + public static final String Built$in_Functions_Modelica_Array_Functions_identity = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/identity"; + public static final String Built$in_Functions_Modelica_Array_Functions_identity_n = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/identity/n"; + public static final String Built$in_Functions_Modelica_Array_Functions_identity_outArray = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/identity/outArray"; + public static final String Built$in_Functions_Modelica_Array_Functions_linspace = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/linspace"; + public static final String Built$in_Functions_Modelica_Array_Functions_linspace_n = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/linspace/n"; + public static final String Built$in_Functions_Modelica_Array_Functions_linspace_v = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/linspace/v"; + public static final String Built$in_Functions_Modelica_Array_Functions_linspace_x1 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/linspace/x1"; + public static final String Built$in_Functions_Modelica_Array_Functions_linspace_x2 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/linspace/x2"; + public static final String Built$in_Functions_Modelica_Array_Functions_matrix = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/matrix"; + public static final String Built$in_Functions_Modelica_Array_Functions_matrix_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/matrix/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_matrix_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/matrix/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_max = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/max"; + public static final String Built$in_Functions_Modelica_Array_Functions_max_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/max/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_max_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/max/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_min = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/min"; + public static final String Built$in_Functions_Modelica_Array_Functions_min_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/min/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_min_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/min/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_ndims = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/ndims"; + public static final String Built$in_Functions_Modelica_Array_Functions_ndims_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/ndims/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_ndims_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/ndims/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_ones = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/ones"; + public static final String Built$in_Functions_Modelica_Array_Functions_ones_n = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/ones/n"; + public static final String Built$in_Functions_Modelica_Array_Functions_ones_n_n1 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/ones/n/n1"; + public static final String Built$in_Functions_Modelica_Array_Functions_ones_n_n2 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/ones/n/n2"; + public static final String Built$in_Functions_Modelica_Array_Functions_ones_n_n3 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/ones/n/n3"; + public static final String Built$in_Functions_Modelica_Array_Functions_ones_o = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/ones/o"; + public static final String Built$in_Functions_Modelica_Array_Functions_product = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/product"; + public static final String Built$in_Functions_Modelica_Array_Functions_product_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/product/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_product_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/product/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_scalar = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/scalar"; + public static final String Built$in_Functions_Modelica_Array_Functions_scalar_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/scalar/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_scalar_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/scalar/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_size = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/size"; + public static final String Built$in_Functions_Modelica_Array_Functions_size_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/size/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_size_i = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/size/i"; + public static final String Built$in_Functions_Modelica_Array_Functions_size_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/size/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_skew = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/skew"; + public static final String Built$in_Functions_Modelica_Array_Functions_skew_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/skew/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_skew_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/skew/x"; + public static final String Built$in_Functions_Modelica_Array_Functions_sum = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/sum"; + public static final String Built$in_Functions_Modelica_Array_Functions_sum_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/sum/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_sum_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/sum/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_transpose = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/transpose"; + public static final String Built$in_Functions_Modelica_Array_Functions_transpose_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/transpose/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_transpose_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/transpose/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_vector = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/vector"; + public static final String Built$in_Functions_Modelica_Array_Functions_vector_A = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/vector/A"; + public static final String Built$in_Functions_Modelica_Array_Functions_vector_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/vector/result"; + public static final String Built$in_Functions_Modelica_Array_Functions_zeros = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/zeros"; + public static final String Built$in_Functions_Modelica_Array_Functions_zeros_n = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/zeros/n"; + public static final String Built$in_Functions_Modelica_Array_Functions_zeros_n_n1 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/zeros/n/n1"; + public static final String Built$in_Functions_Modelica_Array_Functions_zeros_n_n2 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/zeros/n/n2"; + public static final String Built$in_Functions_Modelica_Array_Functions_zeros_n_n3 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/zeros/n/n3"; + public static final String Built$in_Functions_Modelica_Array_Functions_zeros_o = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Array%20Functions/zeros/o"; + public static final String Built$in_Functions_Modelica_Functions = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions"; + public static final String Built$in_Functions_Modelica_Functions_abs = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/abs"; + public static final String Built$in_Functions_Modelica_Functions_abs_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/abs/result"; + public static final String Built$in_Functions_Modelica_Functions_abs_v = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/abs/v"; + public static final String Built$in_Functions_Modelica_Functions_acos = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/acos"; + public static final String Built$in_Functions_Modelica_Functions_acos_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/acos/u"; + public static final String Built$in_Functions_Modelica_Functions_acos_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/acos/y"; + public static final String Built$in_Functions_Modelica_Functions_asin = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/asin"; + public static final String Built$in_Functions_Modelica_Functions_asin_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/asin/u"; + public static final String Built$in_Functions_Modelica_Functions_asin_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/asin/y"; + public static final String Built$in_Functions_Modelica_Functions_atan = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/atan"; + public static final String Built$in_Functions_Modelica_Functions_atan2 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/atan2"; + public static final String Built$in_Functions_Modelica_Functions_atan2_u1 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/atan2/u1"; + public static final String Built$in_Functions_Modelica_Functions_atan2_u2 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/atan2/u2"; + public static final String Built$in_Functions_Modelica_Functions_atan2_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/atan2/y"; + public static final String Built$in_Functions_Modelica_Functions_atan_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/atan/u"; + public static final String Built$in_Functions_Modelica_Functions_atan_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/atan/y"; + public static final String Built$in_Functions_Modelica_Functions_ceil = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/ceil"; + public static final String Built$in_Functions_Modelica_Functions_ceil_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/ceil/u"; + public static final String Built$in_Functions_Modelica_Functions_ceil_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/ceil/x"; + public static final String Built$in_Functions_Modelica_Functions_ceil_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/ceil/y"; + public static final String Built$in_Functions_Modelica_Functions_cos = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/cos"; + public static final String Built$in_Functions_Modelica_Functions_cosh = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/cosh"; + public static final String Built$in_Functions_Modelica_Functions_cosh_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/cosh/u"; + public static final String Built$in_Functions_Modelica_Functions_cosh_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/cosh/y"; + public static final String Built$in_Functions_Modelica_Functions_delay = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/delay"; + public static final String Built$in_Functions_Modelica_Functions_delay_delayMax = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/delay/delayMax"; + public static final String Built$in_Functions_Modelica_Functions_delay_delayTime = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/delay/delayTime"; + public static final String Built$in_Functions_Modelica_Functions_delay_expr = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/delay/expr"; + public static final String Built$in_Functions_Modelica_Functions_delay_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/delay/result"; + public static final String Built$in_Functions_Modelica_Functions_der = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/der"; + public static final String Built$in_Functions_Modelica_Functions_der_dexpr = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/der/dexpr"; + public static final String Built$in_Functions_Modelica_Functions_der_expr = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/der/expr"; + public static final String Built$in_Functions_Modelica_Functions_div = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/div"; + public static final String Built$in_Functions_Modelica_Functions_div_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/div/result"; + public static final String Built$in_Functions_Modelica_Functions_div_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/div/x"; + public static final String Built$in_Functions_Modelica_Functions_div_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/div/y"; + public static final String Built$in_Functions_Modelica_Functions_edge = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/edge"; + public static final String Built$in_Functions_Modelica_Functions_edge_b = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/edge/b"; + public static final String Built$in_Functions_Modelica_Functions_edge_edgeEvent = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/edge/edgeEvent"; + public static final String Built$in_Functions_Modelica_Functions_exp = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/exp"; + public static final String Built$in_Functions_Modelica_Functions_exp_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/exp/u"; + public static final String Built$in_Functions_Modelica_Functions_exp_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/exp/y"; + public static final String Built$in_Functions_Modelica_Functions_floor = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/floor"; + public static final String Built$in_Functions_Modelica_Functions_floor_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/floor/x"; + public static final String Built$in_Functions_Modelica_Functions_floor_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/floor/y"; + public static final String Built$in_Functions_Modelica_Functions_initial = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/initial"; + public static final String Built$in_Functions_Modelica_Functions_initial_isInitial = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/initial/isInitial"; + public static final String Built$in_Functions_Modelica_Functions_log = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/log"; + public static final String Built$in_Functions_Modelica_Functions_log10 = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/log10"; + public static final String Built$in_Functions_Modelica_Functions_log10_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/log10/u"; + public static final String Built$in_Functions_Modelica_Functions_log10_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/log10/y"; + public static final String Built$in_Functions_Modelica_Functions_log_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/log/u"; + public static final String Built$in_Functions_Modelica_Functions_log_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/log/y"; + public static final String Built$in_Functions_Modelica_Functions_max = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/max"; + public static final String Built$in_Functions_Modelica_Functions_max_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/max/result"; + public static final String Built$in_Functions_Modelica_Functions_max_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/max/x"; + public static final String Built$in_Functions_Modelica_Functions_max_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/max/y"; + public static final String Built$in_Functions_Modelica_Functions_min = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/min"; + public static final String Built$in_Functions_Modelica_Functions_min_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/min/result"; + public static final String Built$in_Functions_Modelica_Functions_min_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/min/x"; + public static final String Built$in_Functions_Modelica_Functions_min_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/min/y"; + public static final String Built$in_Functions_Modelica_Functions_mod = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/mod"; + public static final String Built$in_Functions_Modelica_Functions_mod_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/mod/result"; + public static final String Built$in_Functions_Modelica_Functions_mod_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/mod/x"; + public static final String Built$in_Functions_Modelica_Functions_mod_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/mod/y"; + public static final String Built$in_Functions_Modelica_Functions_noEvent = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/noEvent"; + public static final String Built$in_Functions_Modelica_Functions_noEvent_expr = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/noEvent/expr"; + public static final String Built$in_Functions_Modelica_Functions_noEvent_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/noEvent/result"; + public static final String Built$in_Functions_Modelica_Functions_pre = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/pre"; + public static final String Built$in_Functions_Modelica_Functions_pre_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/pre/result"; + public static final String Built$in_Functions_Modelica_Functions_pre_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/pre/y"; + public static final String Built$in_Functions_Modelica_Functions_rem = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/rem"; + public static final String Built$in_Functions_Modelica_Functions_rem_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/rem/result"; + public static final String Built$in_Functions_Modelica_Functions_rem_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/rem/x"; + public static final String Built$in_Functions_Modelica_Functions_rem_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/rem/y"; + public static final String Built$in_Functions_Modelica_Functions_sample = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sample"; + public static final String Built$in_Functions_Modelica_Functions_sample_interval = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sample/interval"; + public static final String Built$in_Functions_Modelica_Functions_sample_isSample = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sample/isSample"; + public static final String Built$in_Functions_Modelica_Functions_sample_start = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sample/start"; + public static final String Built$in_Functions_Modelica_Functions_semiLinear = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/semiLinear"; + public static final String Built$in_Functions_Modelica_Functions_semiLinear_negativeSlope = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/semiLinear/negativeSlope"; + public static final String Built$in_Functions_Modelica_Functions_semiLinear_positiveSlope = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/semiLinear/positiveSlope"; + public static final String Built$in_Functions_Modelica_Functions_semiLinear_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/semiLinear/result"; + public static final String Built$in_Functions_Modelica_Functions_semiLinear_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/semiLinear/x"; + public static final String Built$in_Functions_Modelica_Functions_sign = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sign"; + public static final String Built$in_Functions_Modelica_Functions_sign_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sign/result"; + public static final String Built$in_Functions_Modelica_Functions_sign_v = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sign/v"; + public static final String Built$in_Functions_Modelica_Functions_sin = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sin"; + public static final String Built$in_Functions_Modelica_Functions_sin_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sin/u"; + public static final String Built$in_Functions_Modelica_Functions_sin_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sin/y"; + public static final String Built$in_Functions_Modelica_Functions_sinh = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sinh"; + public static final String Built$in_Functions_Modelica_Functions_sinh_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sinh/u"; + public static final String Built$in_Functions_Modelica_Functions_sinh_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sinh/y"; + public static final String Built$in_Functions_Modelica_Functions_smooth = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/smooth"; + public static final String Built$in_Functions_Modelica_Functions_smooth_expr = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/smooth/expr"; + public static final String Built$in_Functions_Modelica_Functions_smooth_p = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/smooth/p"; + public static final String Built$in_Functions_Modelica_Functions_smooth_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/smooth/result"; + public static final String Built$in_Functions_Modelica_Functions_sqrt = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sqrt"; + public static final String Built$in_Functions_Modelica_Functions_sqrt_v = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sqrt/v"; + public static final String Built$in_Functions_Modelica_Functions_sqrt_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/sqrt/y"; + public static final String Built$in_Functions_Modelica_Functions_tan = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/tan"; + public static final String Built$in_Functions_Modelica_Functions_tan_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/tan/u"; + public static final String Built$in_Functions_Modelica_Functions_tan_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/tan/y"; + public static final String Built$in_Functions_Modelica_Functions_tanh = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/tanh"; + public static final String Built$in_Functions_Modelica_Functions_tanh_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/tanh/u"; + public static final String Built$in_Functions_Modelica_Functions_tanh_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/tanh/y"; + public static final String Built$in_Functions_Modelica_Functions_terminal = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/terminal"; + public static final String Built$in_Functions_Modelica_Functions_terminal_isTerminal = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Modelica%20Functions/terminal/isTerminal"; public static final String Built$in_Functions_Vensim_Functions = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions"; public static final String Built$in_Functions_Vensim_Functions_ABS = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/ABS"; + public static final String Built$in_Functions_Vensim_Functions_ABS_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/ABS/x"; + public static final String Built$in_Functions_Vensim_Functions_ABS_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/ABS/z"; public static final String Built$in_Functions_Vensim_Functions_COS = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/COS"; public static final String Built$in_Functions_Vensim_Functions_COSH = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/COSH"; + public static final String Built$in_Functions_Vensim_Functions_COSH_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/COSH/x"; + public static final String Built$in_Functions_Vensim_Functions_COSH_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/COSH/z"; + public static final String Built$in_Functions_Vensim_Functions_COS_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/COS/x"; + public static final String Built$in_Functions_Vensim_Functions_COS_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/COS/z"; public static final String Built$in_Functions_Vensim_Functions_EXP = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/EXP"; + public static final String Built$in_Functions_Vensim_Functions_EXP_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/EXP/x"; + public static final String Built$in_Functions_Vensim_Functions_EXP_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/EXP/z"; public static final String Built$in_Functions_Vensim_Functions_IFTHENELSE = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/IFTHENELSE"; + public static final String Built$in_Functions_Vensim_Functions_IFTHENELSE_cond = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/IFTHENELSE/cond"; + public static final String Built$in_Functions_Vensim_Functions_IFTHENELSE_onfalse = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/IFTHENELSE/onfalse"; + public static final String Built$in_Functions_Vensim_Functions_IFTHENELSE_ontrue = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/IFTHENELSE/ontrue"; + public static final String Built$in_Functions_Vensim_Functions_IFTHENELSE_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/IFTHENELSE/z"; public static final String Built$in_Functions_Vensim_Functions_LN = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/LN"; + public static final String Built$in_Functions_Vensim_Functions_LN_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/LN/x"; + public static final String Built$in_Functions_Vensim_Functions_LN_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/LN/z"; public static final String Built$in_Functions_Vensim_Functions_MAX = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MAX"; + public static final String Built$in_Functions_Vensim_Functions_MAX_a = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MAX/a"; + public static final String Built$in_Functions_Vensim_Functions_MAX_b = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MAX/b"; + public static final String Built$in_Functions_Vensim_Functions_MAX_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MAX/z"; public static final String Built$in_Functions_Vensim_Functions_MIN = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MIN"; + public static final String Built$in_Functions_Vensim_Functions_MIN_a = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MIN/a"; + public static final String Built$in_Functions_Vensim_Functions_MIN_b = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MIN/b"; + public static final String Built$in_Functions_Vensim_Functions_MIN_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MIN/z"; public static final String Built$in_Functions_Vensim_Functions_MODULO = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MODULO"; + public static final String Built$in_Functions_Vensim_Functions_MODULO_a = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MODULO/a"; + public static final String Built$in_Functions_Vensim_Functions_MODULO_b = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MODULO/b"; + public static final String Built$in_Functions_Vensim_Functions_MODULO_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/MODULO/z"; public static final String Built$in_Functions_Vensim_Functions_PULSE = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/PULSE"; + public static final String Built$in_Functions_Vensim_Functions_PULSE_start = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/PULSE/start"; + public static final String Built$in_Functions_Vensim_Functions_PULSE_width = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/PULSE/width"; + public static final String Built$in_Functions_Vensim_Functions_PULSE_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/PULSE/z"; public static final String Built$in_Functions_Vensim_Functions_RAMP = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/RAMP"; + public static final String Built$in_Functions_Vensim_Functions_RAMP_endTime = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/RAMP/endTime"; + public static final String Built$in_Functions_Vensim_Functions_RAMP_slope = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/RAMP/slope"; + public static final String Built$in_Functions_Vensim_Functions_RAMP_startTime = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/RAMP/startTime"; + public static final String Built$in_Functions_Vensim_Functions_RAMP_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/RAMP/z"; public static final String Built$in_Functions_Vensim_Functions_SIN = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/SIN"; public static final String Built$in_Functions_Vensim_Functions_SINH = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/SINH"; + public static final String Built$in_Functions_Vensim_Functions_SINH_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/SINH/x"; + public static final String Built$in_Functions_Vensim_Functions_SINH_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/SINH/z"; + public static final String Built$in_Functions_Vensim_Functions_SIN_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/SIN/x"; + public static final String Built$in_Functions_Vensim_Functions_SIN_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/SIN/z"; public static final String Built$in_Functions_Vensim_Functions_SQRT = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/SQRT"; + public static final String Built$in_Functions_Vensim_Functions_SQRT_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/SQRT/x"; + public static final String Built$in_Functions_Vensim_Functions_SQRT_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/SQRT/z"; public static final String Built$in_Functions_Vensim_Functions_STEP = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/STEP"; + public static final String Built$in_Functions_Vensim_Functions_STEP_height = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/STEP/height"; + public static final String Built$in_Functions_Vensim_Functions_STEP_stepTime = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/STEP/stepTime"; + public static final String Built$in_Functions_Vensim_Functions_STEP_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/STEP/z"; public static final String Built$in_Functions_Vensim_Functions_TAN = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/TAN"; public static final String Built$in_Functions_Vensim_Functions_TANH = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/TANH"; + public static final String Built$in_Functions_Vensim_Functions_TANH_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/TANH/x"; + public static final String Built$in_Functions_Vensim_Functions_TANH_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/TANH/z"; + public static final String Built$in_Functions_Vensim_Functions_TAN_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/TAN/x"; + public static final String Built$in_Functions_Vensim_Functions_TAN_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/TAN/z"; public static final String Built$in_Functions_Vensim_Functions_XIDZ = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/XIDZ"; + public static final String Built$in_Functions_Vensim_Functions_XIDZ_a = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/XIDZ/a"; + public static final String Built$in_Functions_Vensim_Functions_XIDZ_b = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/XIDZ/b"; + public static final String Built$in_Functions_Vensim_Functions_XIDZ_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/XIDZ/x"; + public static final String Built$in_Functions_Vensim_Functions_XIDZ_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/XIDZ/z"; public static final String Built$in_Functions_Vensim_Functions_ZIDZ = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/ZIDZ"; + public static final String Built$in_Functions_Vensim_Functions_ZIDZ_a = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/ZIDZ/a"; + public static final String Built$in_Functions_Vensim_Functions_ZIDZ_b = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/ZIDZ/b"; + public static final String Built$in_Functions_Vensim_Functions_ZIDZ_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/Vensim%20Functions/ZIDZ/z"; public static final String Built$in_Functions_interpolate = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/interpolate"; public static final String Built$in_Functions_interpolateFull = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/interpolateFull"; + public static final String Built$in_Functions_interpolateFull_icol = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/interpolateFull/icol"; + public static final String Built$in_Functions_interpolateFull_table = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/interpolateFull/table"; + public static final String Built$in_Functions_interpolateFull_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/interpolateFull/u"; + public static final String Built$in_Functions_interpolateFull_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/interpolateFull/y"; + public static final String Built$in_Functions_interpolate_table = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/interpolate/table"; + public static final String Built$in_Functions_interpolate_u = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/interpolate/u"; + public static final String Built$in_Functions_interpolate_y = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/interpolate/y"; public static final String Built$in_Functions_minmax = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/minmax"; + public static final String Built$in_Functions_minmax_expression = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/minmax/expression"; + public static final String Built$in_Functions_minmax_maximum = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/minmax/maximum"; + public static final String Built$in_Functions_minmax_minimum = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/minmax/minimum"; + public static final String Built$in_Functions_minmax_result = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/minmax/result"; public static final String Built$in_Functions_xidz = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/xidz"; + public static final String Built$in_Functions_xidz_divident = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/xidz/divident"; + public static final String Built$in_Functions_xidz_divisor = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/xidz/divisor"; + public static final String Built$in_Functions_xidz_x = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/xidz/x"; + public static final String Built$in_Functions_xidz_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/xidz/z"; public static final String Built$in_Functions_zidz = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/zidz"; + public static final String Built$in_Functions_zidz_divident = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/zidz/divident"; + public static final String Built$in_Functions_zidz_divisor = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/zidz/divisor"; + public static final String Built$in_Functions_zidz_z = "http://www.simantics.org/Sysdyn-1.1/Built-in%20Functions/zidz/z"; public static final String Center = "http://www.simantics.org/Sysdyn-1.1/Center"; public static final String Cloud = "http://www.simantics.org/Sysdyn-1.1/Cloud"; public static final String CloudSymbol = "http://www.simantics.org/Sysdyn-1.1/CloudSymbol"; @@ -653,8 +1187,24 @@ public class SysdynResource { public static final String SysdynModel_variableFilter_Inverse = "http://www.simantics.org/Sysdyn-1.1/SysdynModel/variableFilter/Inverse"; public static final String SysdynModelicaFunction = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction"; public static final String SysdynModelicaFunctionLibrary = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunctionLibrary"; + public static final String SysdynModelicaFunction_Input = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/Input"; + public static final String SysdynModelicaFunction_InterfaceVariable = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/InterfaceVariable"; + public static final String SysdynModelicaFunction_Output = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/Output"; + public static final String SysdynModelicaFunction_VariableLengthInput = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/VariableLengthInput"; + public static final String SysdynModelicaFunction_VariableLengthInput_shownLabels = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/VariableLengthInput/shownLabels"; + public static final String SysdynModelicaFunction_VariableLengthInput_shownLabels_Inverse = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/VariableLengthInput/shownLabels/Inverse"; + public static final String SysdynModelicaFunction_definition = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/definition"; + public static final String SysdynModelicaFunction_definition_Inverse = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/definition/Inverse"; + public static final String SysdynModelicaFunction_inputs = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/inputs"; + public static final String SysdynModelicaFunction_inputs_Inverse = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/inputs/Inverse"; public static final String SysdynModelicaFunction_modelicaFunctionCode = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/modelicaFunctionCode"; public static final String SysdynModelicaFunction_modelicaFunctionCode_Inverse = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/modelicaFunctionCode/Inverse"; + public static final String SysdynModelicaFunction_modelicaFunctionInterface = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/modelicaFunctionInterface"; + public static final String SysdynModelicaFunction_modelicaFunctionInterface_Inverse = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/modelicaFunctionInterface/Inverse"; + public static final String SysdynModelicaFunction_optional = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/optional"; + public static final String SysdynModelicaFunction_optional_Inverse = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/optional/Inverse"; + public static final String SysdynModelicaFunction_outputs = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/outputs"; + public static final String SysdynModelicaFunction_outputs_Inverse = "http://www.simantics.org/Sysdyn-1.1/SysdynModelicaFunction/outputs/Inverse"; public static final String SysdynModuleLibrary = "http://www.simantics.org/Sysdyn-1.1/SysdynModuleLibrary"; public static final String SysdynOperationBrowser = "http://www.simantics.org/Sysdyn-1.1/SysdynOperationBrowser"; public static final String SysdynTerminal = "http://www.simantics.org/Sysdyn-1.1/SysdynTerminal"; @@ -776,31 +1326,290 @@ public class SysdynResource { Bottom = getResourceOrNull(graph, URIs.Bottom); Browser = getResourceOrNull(graph, URIs.Browser); Built$in_Functions = getResourceOrNull(graph, URIs.Built$in_Functions); + Built$in_Functions_Modelica_Array_Functions = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions); + Built$in_Functions_Modelica_Array_Functions_array = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_array); + Built$in_Functions_Modelica_Array_Functions_array_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_array_A); + Built$in_Functions_Modelica_Array_Functions_array_A_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_array_A_A); + Built$in_Functions_Modelica_Array_Functions_array_A_B = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_array_A_B); + Built$in_Functions_Modelica_Array_Functions_array_A_C = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_array_A_C); + Built$in_Functions_Modelica_Array_Functions_array_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_array_result); + Built$in_Functions_Modelica_Array_Functions_cat = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_cat); + Built$in_Functions_Modelica_Array_Functions_cat_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_cat_A); + Built$in_Functions_Modelica_Array_Functions_cat_A_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_cat_A_A); + Built$in_Functions_Modelica_Array_Functions_cat_A_B = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_cat_A_B); + Built$in_Functions_Modelica_Array_Functions_cat_A_C = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_cat_A_C); + Built$in_Functions_Modelica_Array_Functions_cat_k = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_cat_k); + Built$in_Functions_Modelica_Array_Functions_cat_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_cat_result); + Built$in_Functions_Modelica_Array_Functions_cross = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_cross); + Built$in_Functions_Modelica_Array_Functions_cross_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_cross_result); + Built$in_Functions_Modelica_Array_Functions_cross_x = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_cross_x); + Built$in_Functions_Modelica_Array_Functions_cross_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_cross_y); + Built$in_Functions_Modelica_Array_Functions_diagonal = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_diagonal); + Built$in_Functions_Modelica_Array_Functions_diagonal_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_diagonal_result); + Built$in_Functions_Modelica_Array_Functions_diagonal_v = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_diagonal_v); + Built$in_Functions_Modelica_Array_Functions_fill = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_fill); + Built$in_Functions_Modelica_Array_Functions_fill_n = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_fill_n); + Built$in_Functions_Modelica_Array_Functions_fill_n_n1 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_fill_n_n1); + Built$in_Functions_Modelica_Array_Functions_fill_n_n2 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_fill_n_n2); + Built$in_Functions_Modelica_Array_Functions_fill_n_n3 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_fill_n_n3); + Built$in_Functions_Modelica_Array_Functions_fill_o = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_fill_o); + Built$in_Functions_Modelica_Array_Functions_fill_s = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_fill_s); + Built$in_Functions_Modelica_Array_Functions_identity = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_identity); + Built$in_Functions_Modelica_Array_Functions_identity_n = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_identity_n); + Built$in_Functions_Modelica_Array_Functions_identity_outArray = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_identity_outArray); + Built$in_Functions_Modelica_Array_Functions_linspace = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_linspace); + Built$in_Functions_Modelica_Array_Functions_linspace_n = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_linspace_n); + Built$in_Functions_Modelica_Array_Functions_linspace_v = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_linspace_v); + Built$in_Functions_Modelica_Array_Functions_linspace_x1 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_linspace_x1); + Built$in_Functions_Modelica_Array_Functions_linspace_x2 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_linspace_x2); + Built$in_Functions_Modelica_Array_Functions_matrix = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_matrix); + Built$in_Functions_Modelica_Array_Functions_matrix_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_matrix_A); + Built$in_Functions_Modelica_Array_Functions_matrix_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_matrix_result); + Built$in_Functions_Modelica_Array_Functions_max = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_max); + Built$in_Functions_Modelica_Array_Functions_max_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_max_A); + Built$in_Functions_Modelica_Array_Functions_max_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_max_result); + Built$in_Functions_Modelica_Array_Functions_min = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_min); + Built$in_Functions_Modelica_Array_Functions_min_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_min_A); + Built$in_Functions_Modelica_Array_Functions_min_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_min_result); + Built$in_Functions_Modelica_Array_Functions_ndims = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_ndims); + Built$in_Functions_Modelica_Array_Functions_ndims_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_ndims_A); + Built$in_Functions_Modelica_Array_Functions_ndims_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_ndims_result); + Built$in_Functions_Modelica_Array_Functions_ones = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_ones); + Built$in_Functions_Modelica_Array_Functions_ones_n = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_ones_n); + Built$in_Functions_Modelica_Array_Functions_ones_n_n1 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_ones_n_n1); + Built$in_Functions_Modelica_Array_Functions_ones_n_n2 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_ones_n_n2); + Built$in_Functions_Modelica_Array_Functions_ones_n_n3 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_ones_n_n3); + Built$in_Functions_Modelica_Array_Functions_ones_o = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_ones_o); + Built$in_Functions_Modelica_Array_Functions_product = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_product); + Built$in_Functions_Modelica_Array_Functions_product_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_product_A); + Built$in_Functions_Modelica_Array_Functions_product_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_product_result); + Built$in_Functions_Modelica_Array_Functions_scalar = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_scalar); + Built$in_Functions_Modelica_Array_Functions_scalar_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_scalar_A); + Built$in_Functions_Modelica_Array_Functions_scalar_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_scalar_result); + Built$in_Functions_Modelica_Array_Functions_size = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_size); + Built$in_Functions_Modelica_Array_Functions_size_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_size_A); + Built$in_Functions_Modelica_Array_Functions_size_i = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_size_i); + Built$in_Functions_Modelica_Array_Functions_size_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_size_result); + Built$in_Functions_Modelica_Array_Functions_skew = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_skew); + Built$in_Functions_Modelica_Array_Functions_skew_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_skew_result); + Built$in_Functions_Modelica_Array_Functions_skew_x = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_skew_x); + Built$in_Functions_Modelica_Array_Functions_sum = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_sum); + Built$in_Functions_Modelica_Array_Functions_sum_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_sum_A); + Built$in_Functions_Modelica_Array_Functions_sum_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_sum_result); + Built$in_Functions_Modelica_Array_Functions_transpose = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_transpose); + Built$in_Functions_Modelica_Array_Functions_transpose_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_transpose_A); + Built$in_Functions_Modelica_Array_Functions_transpose_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_transpose_result); + Built$in_Functions_Modelica_Array_Functions_vector = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_vector); + Built$in_Functions_Modelica_Array_Functions_vector_A = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_vector_A); + Built$in_Functions_Modelica_Array_Functions_vector_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_vector_result); + Built$in_Functions_Modelica_Array_Functions_zeros = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_zeros); + Built$in_Functions_Modelica_Array_Functions_zeros_n = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_zeros_n); + Built$in_Functions_Modelica_Array_Functions_zeros_n_n1 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_zeros_n_n1); + Built$in_Functions_Modelica_Array_Functions_zeros_n_n2 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_zeros_n_n2); + Built$in_Functions_Modelica_Array_Functions_zeros_n_n3 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_zeros_n_n3); + Built$in_Functions_Modelica_Array_Functions_zeros_o = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Array_Functions_zeros_o); + Built$in_Functions_Modelica_Functions = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions); + Built$in_Functions_Modelica_Functions_abs = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_abs); + Built$in_Functions_Modelica_Functions_abs_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_abs_result); + Built$in_Functions_Modelica_Functions_abs_v = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_abs_v); + Built$in_Functions_Modelica_Functions_acos = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_acos); + Built$in_Functions_Modelica_Functions_acos_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_acos_u); + Built$in_Functions_Modelica_Functions_acos_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_acos_y); + Built$in_Functions_Modelica_Functions_asin = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_asin); + Built$in_Functions_Modelica_Functions_asin_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_asin_u); + Built$in_Functions_Modelica_Functions_asin_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_asin_y); + Built$in_Functions_Modelica_Functions_atan = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_atan); + Built$in_Functions_Modelica_Functions_atan2 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_atan2); + Built$in_Functions_Modelica_Functions_atan2_u1 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_atan2_u1); + Built$in_Functions_Modelica_Functions_atan2_u2 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_atan2_u2); + Built$in_Functions_Modelica_Functions_atan2_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_atan2_y); + Built$in_Functions_Modelica_Functions_atan_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_atan_u); + Built$in_Functions_Modelica_Functions_atan_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_atan_y); + Built$in_Functions_Modelica_Functions_ceil = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_ceil); + Built$in_Functions_Modelica_Functions_ceil_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_ceil_u); + Built$in_Functions_Modelica_Functions_ceil_x = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_ceil_x); + Built$in_Functions_Modelica_Functions_ceil_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_ceil_y); + Built$in_Functions_Modelica_Functions_cos = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_cos); + Built$in_Functions_Modelica_Functions_cosh = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_cosh); + Built$in_Functions_Modelica_Functions_cosh_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_cosh_u); + Built$in_Functions_Modelica_Functions_cosh_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_cosh_y); + Built$in_Functions_Modelica_Functions_delay = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_delay); + Built$in_Functions_Modelica_Functions_delay_delayMax = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_delay_delayMax); + Built$in_Functions_Modelica_Functions_delay_delayTime = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_delay_delayTime); + Built$in_Functions_Modelica_Functions_delay_expr = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_delay_expr); + Built$in_Functions_Modelica_Functions_delay_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_delay_result); + Built$in_Functions_Modelica_Functions_der = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_der); + Built$in_Functions_Modelica_Functions_der_dexpr = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_der_dexpr); + Built$in_Functions_Modelica_Functions_der_expr = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_der_expr); + Built$in_Functions_Modelica_Functions_div = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_div); + Built$in_Functions_Modelica_Functions_div_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_div_result); + Built$in_Functions_Modelica_Functions_div_x = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_div_x); + Built$in_Functions_Modelica_Functions_div_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_div_y); + Built$in_Functions_Modelica_Functions_edge = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_edge); + Built$in_Functions_Modelica_Functions_edge_b = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_edge_b); + Built$in_Functions_Modelica_Functions_edge_edgeEvent = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_edge_edgeEvent); + Built$in_Functions_Modelica_Functions_exp = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_exp); + Built$in_Functions_Modelica_Functions_exp_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_exp_u); + Built$in_Functions_Modelica_Functions_exp_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_exp_y); + Built$in_Functions_Modelica_Functions_floor = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_floor); + Built$in_Functions_Modelica_Functions_floor_x = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_floor_x); + Built$in_Functions_Modelica_Functions_floor_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_floor_y); + Built$in_Functions_Modelica_Functions_initial = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_initial); + Built$in_Functions_Modelica_Functions_initial_isInitial = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_initial_isInitial); + Built$in_Functions_Modelica_Functions_log = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_log); + Built$in_Functions_Modelica_Functions_log10 = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_log10); + Built$in_Functions_Modelica_Functions_log10_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_log10_u); + Built$in_Functions_Modelica_Functions_log10_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_log10_y); + Built$in_Functions_Modelica_Functions_log_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_log_u); + Built$in_Functions_Modelica_Functions_log_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_log_y); + Built$in_Functions_Modelica_Functions_max = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_max); + Built$in_Functions_Modelica_Functions_max_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_max_result); + Built$in_Functions_Modelica_Functions_max_x = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_max_x); + Built$in_Functions_Modelica_Functions_max_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_max_y); + Built$in_Functions_Modelica_Functions_min = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_min); + Built$in_Functions_Modelica_Functions_min_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_min_result); + Built$in_Functions_Modelica_Functions_min_x = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_min_x); + Built$in_Functions_Modelica_Functions_min_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_min_y); + Built$in_Functions_Modelica_Functions_mod = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_mod); + Built$in_Functions_Modelica_Functions_mod_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_mod_result); + Built$in_Functions_Modelica_Functions_mod_x = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_mod_x); + Built$in_Functions_Modelica_Functions_mod_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_mod_y); + Built$in_Functions_Modelica_Functions_noEvent = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_noEvent); + Built$in_Functions_Modelica_Functions_noEvent_expr = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_noEvent_expr); + Built$in_Functions_Modelica_Functions_noEvent_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_noEvent_result); + Built$in_Functions_Modelica_Functions_pre = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_pre); + Built$in_Functions_Modelica_Functions_pre_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_pre_result); + Built$in_Functions_Modelica_Functions_pre_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_pre_y); + Built$in_Functions_Modelica_Functions_rem = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_rem); + Built$in_Functions_Modelica_Functions_rem_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_rem_result); + Built$in_Functions_Modelica_Functions_rem_x = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_rem_x); + Built$in_Functions_Modelica_Functions_rem_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_rem_y); + Built$in_Functions_Modelica_Functions_sample = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sample); + Built$in_Functions_Modelica_Functions_sample_interval = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sample_interval); + Built$in_Functions_Modelica_Functions_sample_isSample = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sample_isSample); + Built$in_Functions_Modelica_Functions_sample_start = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sample_start); + Built$in_Functions_Modelica_Functions_semiLinear = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_semiLinear); + Built$in_Functions_Modelica_Functions_semiLinear_negativeSlope = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_semiLinear_negativeSlope); + Built$in_Functions_Modelica_Functions_semiLinear_positiveSlope = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_semiLinear_positiveSlope); + Built$in_Functions_Modelica_Functions_semiLinear_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_semiLinear_result); + Built$in_Functions_Modelica_Functions_semiLinear_x = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_semiLinear_x); + Built$in_Functions_Modelica_Functions_sign = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sign); + Built$in_Functions_Modelica_Functions_sign_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sign_result); + Built$in_Functions_Modelica_Functions_sign_v = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sign_v); + Built$in_Functions_Modelica_Functions_sin = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sin); + Built$in_Functions_Modelica_Functions_sin_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sin_u); + Built$in_Functions_Modelica_Functions_sin_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sin_y); + Built$in_Functions_Modelica_Functions_sinh = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sinh); + Built$in_Functions_Modelica_Functions_sinh_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sinh_u); + Built$in_Functions_Modelica_Functions_sinh_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sinh_y); + Built$in_Functions_Modelica_Functions_smooth = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_smooth); + Built$in_Functions_Modelica_Functions_smooth_expr = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_smooth_expr); + Built$in_Functions_Modelica_Functions_smooth_p = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_smooth_p); + Built$in_Functions_Modelica_Functions_smooth_result = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_smooth_result); + Built$in_Functions_Modelica_Functions_sqrt = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sqrt); + Built$in_Functions_Modelica_Functions_sqrt_v = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sqrt_v); + Built$in_Functions_Modelica_Functions_sqrt_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_sqrt_y); + Built$in_Functions_Modelica_Functions_tan = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_tan); + Built$in_Functions_Modelica_Functions_tan_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_tan_u); + Built$in_Functions_Modelica_Functions_tan_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_tan_y); + Built$in_Functions_Modelica_Functions_tanh = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_tanh); + Built$in_Functions_Modelica_Functions_tanh_u = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_tanh_u); + Built$in_Functions_Modelica_Functions_tanh_y = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_tanh_y); + Built$in_Functions_Modelica_Functions_terminal = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_terminal); + Built$in_Functions_Modelica_Functions_terminal_isTerminal = getResourceOrNull(graph, URIs.Built$in_Functions_Modelica_Functions_terminal_isTerminal); Built$in_Functions_Vensim_Functions = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions); Built$in_Functions_Vensim_Functions_ABS = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_ABS); + Built$in_Functions_Vensim_Functions_ABS_x = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_ABS_x); + Built$in_Functions_Vensim_Functions_ABS_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_ABS_z); Built$in_Functions_Vensim_Functions_COS = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_COS); Built$in_Functions_Vensim_Functions_COSH = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_COSH); + Built$in_Functions_Vensim_Functions_COSH_x = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_COSH_x); + Built$in_Functions_Vensim_Functions_COSH_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_COSH_z); + Built$in_Functions_Vensim_Functions_COS_x = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_COS_x); + Built$in_Functions_Vensim_Functions_COS_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_COS_z); Built$in_Functions_Vensim_Functions_EXP = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_EXP); + Built$in_Functions_Vensim_Functions_EXP_x = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_EXP_x); + Built$in_Functions_Vensim_Functions_EXP_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_EXP_z); Built$in_Functions_Vensim_Functions_IFTHENELSE = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_IFTHENELSE); + Built$in_Functions_Vensim_Functions_IFTHENELSE_cond = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_IFTHENELSE_cond); + Built$in_Functions_Vensim_Functions_IFTHENELSE_onfalse = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_IFTHENELSE_onfalse); + Built$in_Functions_Vensim_Functions_IFTHENELSE_ontrue = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_IFTHENELSE_ontrue); + Built$in_Functions_Vensim_Functions_IFTHENELSE_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_IFTHENELSE_z); Built$in_Functions_Vensim_Functions_LN = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_LN); + Built$in_Functions_Vensim_Functions_LN_x = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_LN_x); + Built$in_Functions_Vensim_Functions_LN_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_LN_z); Built$in_Functions_Vensim_Functions_MAX = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MAX); + Built$in_Functions_Vensim_Functions_MAX_a = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MAX_a); + Built$in_Functions_Vensim_Functions_MAX_b = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MAX_b); + Built$in_Functions_Vensim_Functions_MAX_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MAX_z); Built$in_Functions_Vensim_Functions_MIN = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MIN); + Built$in_Functions_Vensim_Functions_MIN_a = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MIN_a); + Built$in_Functions_Vensim_Functions_MIN_b = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MIN_b); + Built$in_Functions_Vensim_Functions_MIN_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MIN_z); Built$in_Functions_Vensim_Functions_MODULO = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MODULO); + Built$in_Functions_Vensim_Functions_MODULO_a = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MODULO_a); + Built$in_Functions_Vensim_Functions_MODULO_b = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MODULO_b); + Built$in_Functions_Vensim_Functions_MODULO_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_MODULO_z); Built$in_Functions_Vensim_Functions_PULSE = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_PULSE); + Built$in_Functions_Vensim_Functions_PULSE_start = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_PULSE_start); + Built$in_Functions_Vensim_Functions_PULSE_width = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_PULSE_width); + Built$in_Functions_Vensim_Functions_PULSE_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_PULSE_z); Built$in_Functions_Vensim_Functions_RAMP = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_RAMP); + Built$in_Functions_Vensim_Functions_RAMP_endTime = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_RAMP_endTime); + Built$in_Functions_Vensim_Functions_RAMP_slope = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_RAMP_slope); + Built$in_Functions_Vensim_Functions_RAMP_startTime = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_RAMP_startTime); + Built$in_Functions_Vensim_Functions_RAMP_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_RAMP_z); Built$in_Functions_Vensim_Functions_SIN = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_SIN); Built$in_Functions_Vensim_Functions_SINH = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_SINH); + Built$in_Functions_Vensim_Functions_SINH_x = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_SINH_x); + Built$in_Functions_Vensim_Functions_SINH_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_SINH_z); + Built$in_Functions_Vensim_Functions_SIN_x = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_SIN_x); + Built$in_Functions_Vensim_Functions_SIN_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_SIN_z); Built$in_Functions_Vensim_Functions_SQRT = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_SQRT); + Built$in_Functions_Vensim_Functions_SQRT_x = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_SQRT_x); + Built$in_Functions_Vensim_Functions_SQRT_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_SQRT_z); Built$in_Functions_Vensim_Functions_STEP = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_STEP); + Built$in_Functions_Vensim_Functions_STEP_height = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_STEP_height); + Built$in_Functions_Vensim_Functions_STEP_stepTime = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_STEP_stepTime); + Built$in_Functions_Vensim_Functions_STEP_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_STEP_z); Built$in_Functions_Vensim_Functions_TAN = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_TAN); Built$in_Functions_Vensim_Functions_TANH = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_TANH); + Built$in_Functions_Vensim_Functions_TANH_x = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_TANH_x); + Built$in_Functions_Vensim_Functions_TANH_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_TANH_z); + Built$in_Functions_Vensim_Functions_TAN_x = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_TAN_x); + Built$in_Functions_Vensim_Functions_TAN_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_TAN_z); Built$in_Functions_Vensim_Functions_XIDZ = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_XIDZ); + Built$in_Functions_Vensim_Functions_XIDZ_a = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_XIDZ_a); + Built$in_Functions_Vensim_Functions_XIDZ_b = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_XIDZ_b); + Built$in_Functions_Vensim_Functions_XIDZ_x = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_XIDZ_x); + Built$in_Functions_Vensim_Functions_XIDZ_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_XIDZ_z); Built$in_Functions_Vensim_Functions_ZIDZ = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_ZIDZ); + Built$in_Functions_Vensim_Functions_ZIDZ_a = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_ZIDZ_a); + Built$in_Functions_Vensim_Functions_ZIDZ_b = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_ZIDZ_b); + Built$in_Functions_Vensim_Functions_ZIDZ_z = getResourceOrNull(graph, URIs.Built$in_Functions_Vensim_Functions_ZIDZ_z); Built$in_Functions_interpolate = getResourceOrNull(graph, URIs.Built$in_Functions_interpolate); Built$in_Functions_interpolateFull = getResourceOrNull(graph, URIs.Built$in_Functions_interpolateFull); + Built$in_Functions_interpolateFull_icol = getResourceOrNull(graph, URIs.Built$in_Functions_interpolateFull_icol); + Built$in_Functions_interpolateFull_table = getResourceOrNull(graph, URIs.Built$in_Functions_interpolateFull_table); + Built$in_Functions_interpolateFull_u = getResourceOrNull(graph, URIs.Built$in_Functions_interpolateFull_u); + Built$in_Functions_interpolateFull_y = getResourceOrNull(graph, URIs.Built$in_Functions_interpolateFull_y); + Built$in_Functions_interpolate_table = getResourceOrNull(graph, URIs.Built$in_Functions_interpolate_table); + Built$in_Functions_interpolate_u = getResourceOrNull(graph, URIs.Built$in_Functions_interpolate_u); + Built$in_Functions_interpolate_y = getResourceOrNull(graph, URIs.Built$in_Functions_interpolate_y); Built$in_Functions_minmax = getResourceOrNull(graph, URIs.Built$in_Functions_minmax); + Built$in_Functions_minmax_expression = getResourceOrNull(graph, URIs.Built$in_Functions_minmax_expression); + Built$in_Functions_minmax_maximum = getResourceOrNull(graph, URIs.Built$in_Functions_minmax_maximum); + Built$in_Functions_minmax_minimum = getResourceOrNull(graph, URIs.Built$in_Functions_minmax_minimum); + Built$in_Functions_minmax_result = getResourceOrNull(graph, URIs.Built$in_Functions_minmax_result); Built$in_Functions_xidz = getResourceOrNull(graph, URIs.Built$in_Functions_xidz); + Built$in_Functions_xidz_divident = getResourceOrNull(graph, URIs.Built$in_Functions_xidz_divident); + Built$in_Functions_xidz_divisor = getResourceOrNull(graph, URIs.Built$in_Functions_xidz_divisor); + Built$in_Functions_xidz_x = getResourceOrNull(graph, URIs.Built$in_Functions_xidz_x); + Built$in_Functions_xidz_z = getResourceOrNull(graph, URIs.Built$in_Functions_xidz_z); Built$in_Functions_zidz = getResourceOrNull(graph, URIs.Built$in_Functions_zidz); + Built$in_Functions_zidz_divident = getResourceOrNull(graph, URIs.Built$in_Functions_zidz_divident); + Built$in_Functions_zidz_divisor = getResourceOrNull(graph, URIs.Built$in_Functions_zidz_divisor); + Built$in_Functions_zidz_z = getResourceOrNull(graph, URIs.Built$in_Functions_zidz_z); Center = getResourceOrNull(graph, URIs.Center); Cloud = getResourceOrNull(graph, URIs.Cloud); CloudSymbol = getResourceOrNull(graph, URIs.CloudSymbol); @@ -1035,8 +1844,24 @@ public class SysdynResource { SysdynModel_variableFilter_Inverse = getResourceOrNull(graph, URIs.SysdynModel_variableFilter_Inverse); SysdynModelicaFunction = getResourceOrNull(graph, URIs.SysdynModelicaFunction); SysdynModelicaFunctionLibrary = getResourceOrNull(graph, URIs.SysdynModelicaFunctionLibrary); + SysdynModelicaFunction_Input = getResourceOrNull(graph, URIs.SysdynModelicaFunction_Input); + SysdynModelicaFunction_InterfaceVariable = getResourceOrNull(graph, URIs.SysdynModelicaFunction_InterfaceVariable); + SysdynModelicaFunction_Output = getResourceOrNull(graph, URIs.SysdynModelicaFunction_Output); + SysdynModelicaFunction_VariableLengthInput = getResourceOrNull(graph, URIs.SysdynModelicaFunction_VariableLengthInput); + SysdynModelicaFunction_VariableLengthInput_shownLabels = getResourceOrNull(graph, URIs.SysdynModelicaFunction_VariableLengthInput_shownLabels); + SysdynModelicaFunction_VariableLengthInput_shownLabels_Inverse = getResourceOrNull(graph, URIs.SysdynModelicaFunction_VariableLengthInput_shownLabels_Inverse); + SysdynModelicaFunction_definition = getResourceOrNull(graph, URIs.SysdynModelicaFunction_definition); + SysdynModelicaFunction_definition_Inverse = getResourceOrNull(graph, URIs.SysdynModelicaFunction_definition_Inverse); + SysdynModelicaFunction_inputs = getResourceOrNull(graph, URIs.SysdynModelicaFunction_inputs); + SysdynModelicaFunction_inputs_Inverse = getResourceOrNull(graph, URIs.SysdynModelicaFunction_inputs_Inverse); SysdynModelicaFunction_modelicaFunctionCode = getResourceOrNull(graph, URIs.SysdynModelicaFunction_modelicaFunctionCode); SysdynModelicaFunction_modelicaFunctionCode_Inverse = getResourceOrNull(graph, URIs.SysdynModelicaFunction_modelicaFunctionCode_Inverse); + SysdynModelicaFunction_modelicaFunctionInterface = getResourceOrNull(graph, URIs.SysdynModelicaFunction_modelicaFunctionInterface); + SysdynModelicaFunction_modelicaFunctionInterface_Inverse = getResourceOrNull(graph, URIs.SysdynModelicaFunction_modelicaFunctionInterface_Inverse); + SysdynModelicaFunction_optional = getResourceOrNull(graph, URIs.SysdynModelicaFunction_optional); + SysdynModelicaFunction_optional_Inverse = getResourceOrNull(graph, URIs.SysdynModelicaFunction_optional_Inverse); + SysdynModelicaFunction_outputs = getResourceOrNull(graph, URIs.SysdynModelicaFunction_outputs); + SysdynModelicaFunction_outputs_Inverse = getResourceOrNull(graph, URIs.SysdynModelicaFunction_outputs_Inverse); SysdynModuleLibrary = getResourceOrNull(graph, URIs.SysdynModuleLibrary); SysdynOperationBrowser = getResourceOrNull(graph, URIs.SysdynOperationBrowser); SysdynTerminal = getResourceOrNull(graph, URIs.SysdynTerminal); diff --git a/org.simantics.sysdyn.ui/icons/function.png b/org.simantics.sysdyn.ui/icons/function.png new file mode 100644 index 0000000000000000000000000000000000000000..d6778473016c290e427a74f44f0802b4c71a4c45 GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPggqCVn z<#TitX?uA5>H-1Q&bF|n;zDy6abM8Zan0tG>U3Ft?Ya{>B)K$_=gcuS zJpS=|>kI$2y|pVA%;4C@wDQq39sdj5rz#%GX}wT;%q_-Ka6tJBzn(-Y@7fJ6!q-h2 j&xPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*b> z1~N7OnF@yh00PfRL_t(I%Vm>INF!$$$A9m9#C((;WyjjVE_0A1$|?%+qL8)+O}#Fq z(nAo-o=Q*ar3bHG7Q~j~LcJ7si_i$V2%bt?gg_4>LTte<_0TwzWF@iLpd*!W=IvpP z)ZGW3!}IXx_dZ{*kW%ud6^lh$trpE@6M&hSnLLmN?nxNj69ePG zD^uebj2T0O;!K!Y~Z7*(@4BtyW`tditiS za=Faj-X6a11AG8{J3Ks$ZQD1R_4RcC#OCHE0O@p^{{DUdc6WCf8yo8e`hZ`7Jn$P( z_kBM&JUry+=!j;si57+-gM)*3o=2%vLRD2Nl?uQV@F5Td?f{FN12eTK7Ef zfmmBx!?G-r$t3Z3ocZ~AXJBC9{Y)lF(|ZpkA-Dyu9p>j*fl_{ACzML~9Rdc6OGf zrKM-4Y4!urzP`SXfpBGIMM)$Q0C=9qHT=oM!~~T}QL70(Y)*K0-AbW|YuPggqCO&Qx?i(-2W`)Yr;w6>=HKRH>wxL?lp*Mx}^CwfOm z-~N1kef+2J^>K4mH8gfSzrVlU?*IS)`_Htjsl2zRau1Nd|2)v7C7U-J|9W$CbG?Lw zL`6tw=-Ko0?f1Waety2wp+kpO1695M_3`oX`Atnt?EyLY`T6(nU%65ucFf$wWX;t} zmx@vn5)w|FKAkKoB(#fV^5;*VjKYG0jT?3+9BScwJ!8g$UZT-sw1nKAJZM}5u+P21(|35x%f3P-syPg3EoB`UO^6AOR|Kd6k3%G(GJbWm~ zp8WmWw@*8E?D$~}RFD%G)?K%7(MA!q<2#C;diAf5-=CMBp1!@iug~rbFgybS0u+A# z`kK9PsrU3a7yc&-fftun-LKzSFZw|Ib={{I@`qntT|IqG%+5_Bk%7gQL70(Y)*K0-AbW|YuPggqCO&RM1Cd>ke}Se<@pN$vu{fQa zAi*laoR-scd71Cy3)il#Gcq@iKYi|;-jO3mN~Sk9CYoAX|Mt<4<6h& zdiwP0qaEvZu3g*v^6l;I{t*!o-{#v?8hw9paWTK7q~y*mTesTQ|NW&}|Mk_?$fl;I z>VJQKKmYvy|NqlICuTiAJNx+WzrVl#mXVS1wz9Tfe14wo@Ak&VM)%OrtAGCd{JgvF z-ycmC9i2VDfU4HX+t>Zk)X=ElIQk6;{`&g*rYF`oJ0FhH)zx)pV`FREv&SY(QE{QS zfu+8_ezK{lDf13)HJ=$9`Z_y3@0~hzY6{TkgST!)Jv-daf9U$U*xTn195_($?Mshj9)+tIPUE#ea*xS1c!n4d#m}+`%{0giFK6$tDKx%p+Q-GzJ7mqceg!AfmrI+ z7vfq{-ibv$+TrWI{P^|tbr}%se(~bPVICl0Wo6y8K7PMg)UJ}3u3sGZghXRkeg8ZC zcQ|9+#&_!d{|wi}?X5a_YO1#PL{U?7^V5&I${#NfFjKUQ{Fpdp3S-FazVL{&>}kL# OWAJqKb6Mw<&;$TxJ@0z} literal 0 HcmV?d00001 diff --git a/org.simantics.sysdyn.ui/icons/sysdynFunction.png b/org.simantics.sysdyn.ui/icons/sysdynFunction.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc929d58d3fd05620a2772b29f957de97917996 GIT binary patch literal 488 zcmVP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*b= z3;`je16g?h00C%8L_t(I%iWQ`YgBO%#6K5fWzOS813^NRNF+Wascll^AF#7aCl)qo zwNgXIz5T4`U0*Mvsw&1Vj8V4RXLImm?NI=vl#mO_xtUF{yt{&#kc62re`le? zP5;S7E^gGv@dyG(?&L!`3K8LaDwew(bP7l)oV{O7T4f6h1Nv|et~bUpv%i-(_vU`& zLph&+t|50SPbkF2^9@GoqsYbL(mP&1cw6go0378FVLF~}$c3E~a>v{;Q+I^f7k4Ae z8VvN;kvl083Ma|%a7OB*tT#9Kvb%$%(>pK|!<}n_mz1qGAND_DCSKlqRhxM}9b3%; e$&riy5PtxQJl>{CtLahz0000 literal 0 HcmV?d00001 diff --git a/org.simantics.sysdyn.ui/icons/variable.png b/org.simantics.sysdyn.ui/icons/variable.png new file mode 100644 index 0000000000000000000000000000000000000000..0299de3d5f2df6af89ee7be5824de56161039239 GIT binary patch literal 758 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*b= z3mynAq}dJt00MSNL_t(I%WadpOCwPf#(&8q8Dr3KFknUlsU(e$%3_IPW1+P{48(RV z?EE`y#Af?+D!P@0gFFt+=TRsWz7l*^)HIFx`FXP0 zEFwasQlVC>VOiD}M-c$iG)EL)UthVuzsGSL0IJn0D=RBxGMN!a0Lt?6GK!)gB1}(D zBO*LMKjXSCFE1~&S}i6gC-FQF!!YoDpQooMEX(5V?v9A>`z$OhVB0p2kB=ydLZi_j z|1B@n2XbvVZ=8q5$H#FT2ivxpnwsMM{hhFgFgG_xI-N$-G$tk{0x&>&K#+udJTI|W zj83ORzu!mKbwnf}02mt^L)Uc_MPaC1AC0VDuM>?%iAJM{$S8q`;QK!Dc>KR$09923 z0l@P-M1+Xvd4$7ZL3~Hb7UJ@=Ai|p;~;rl)}H#fr_?C@Aui=-DP!km94EUHa9o1 zZJSgoHEit2UszgNBA3hY{osHfCnwZuHNxRAi9`Yb+qQ8W2VK`WJUpaSDg{;kJFe@} zXf*hBea*(k29ZdFR;xv|T18b=GMNlBGc&lZOSxR8*=&wF$Y!$`hCw2cV0LyERaJu! o+QBB1$sn3uuSc`l#I|kz0KVr(YUXx0Q2+n{07*qoM6N<$f)Hg#Q~&?~ literal 0 HcmV?d00001 diff --git a/org.simantics.sysdyn.ui/icons/variableGray.png b/org.simantics.sysdyn.ui/icons/variableGray.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ed59b5e29f8c187627397842d368eda571846f GIT binary patch literal 765 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*b= z3C; z?fh4^**={sy7d-rkwOBBScG7TLBYuoOo#)HB$8_wM7do4Oz^RzVHgyPMM|X- zB0{s-#I|ib&-m~wM90U+N3O5034#ECR;$Iv#s-B#VL}mrvcA5Kq9}+6^YinF z2>18*gki|T!vmd8hq<{qqA0?$EaEt((P-d#9#>aaq~bVcWn~55_qn^fLs1kQ$6+uS zNUzrez_x9cmzNXibebRt@O__5CPS~+BPk**EiIAH=P?X}+1XhJgMk2Kv)S=Z8jXfb zO-<47_Zf{wn5Kz{{38IEo}R`uO%z3;+wB63&v!gMJ)x>9s;VL)lLR6{9LLPe%>1_) zK+`l7MFAj+B1D8#6h$PHNkoJo2zYyY!}B~0!x$I7+gGdAuq=z`=V!9nEW_cDl!#ET z*C`f@q|<56&d$hWGKrU$mx+Ywx}MnI-$zwdT-W91=7wgoNupYD@`#wPsV45Z; zCnr>^)qhcbM;L}Uj>DhdzuDQ@A(cwe>2zqdT4qu00000NkvXXu0mjf)j4F) literal 0 HcmV?d00001 diff --git a/org.simantics.sysdyn.ui/icons/vensimFunction.png b/org.simantics.sysdyn.ui/icons/vensimFunction.png new file mode 100644 index 0000000000000000000000000000000000000000..f00709623dd34f585679c7334799e61553e35bfb GIT binary patch literal 872 zcmV-u1DE`XP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*b= z3p)c*h0tLD00QVqL_t(I%Vm>KNF!$$#($a2n5=UcKS?!ecC%PCl0(QATngf0!R@`W zwFDyt4~2Gb9;EjkdRQzAE5*`_Aia19NTFr-U<ExhOPq&g#y0sv#_wxbKl%Vnmg zr%5K0J&6E9g+c*P)D*XGKjq@$5+R~Ic@hU;aBz^t#XsnDd>rR1N~IDQ;{d-vX#rrGzcQtD2l;d}((INqbazHlU+e(!t3Ffa@QrBp9KDTS1h=g;R=r{nz= ziRdjU)$9jfY&>*bKci{vyn0nV3x~r11VMmO3Oxt{G)+S(h39!(US2XZWZG}vIvcJV zd|57E7@-h%V=;4Oa`H}acz8&&*(4T=;kqv2`T2QTtrn(f5{*VF6bjtGul$!UrSEz2 zvrfmKxOGb}yRQHB&d$U3`1m+N2&&a8rBVr9O3CTzDJLf&3s9mzU>PS62~2 z;5ZJ=rp5aDI`Me?|Hk%gA(P24Gc&{Ij~}z~>=~6x1x?d1O%s52yN&002q9QmSz&8y z>s^)qlkfYSot^RPix1vJUoo=`|R)UQ>)c_6QoipMn*<3 yO_R~lQ6iBD0O#lD0K{T309@ClR;$r&xA_;FM0&dARU{bz0000 funktio = new ArrayList(); - try { - funktio = SimanticsUI.getSession().syncRequest(new Read>() { - @Override - public ArrayList perform(ReadGraph graph) - throws DatabaseException { - SysdynResource sr = SysdynResource.getInstance(graph); - Layer0 l0 = Layer0.getInstance(graph); - ArrayList funktiot = new ArrayList(); - - Resource funktionlibrary = graph.getPossibleResource(SysdynResource.URIs.Built$in_Functions); - for(Resource r : graph.syncRequest(new ObjectsWithType(funktionlibrary, l0.ConsistsOf, sr.SysdynModelicaFunction))) { - String name = NameUtils.getSafeName(graph, r); - funktiot.add(name); - } - - Resource subfunktionlibrary = graph.getPossibleResource(SysdynResource.URIs.Built$in_Functions_Vensim_Functions); - for(Resource r : graph.syncRequest(new ObjectsWithType(subfunktionlibrary, l0.ConsistsOf, sr.SysdynModelicaFunction))) { - String name = NameUtils.getSafeName(graph, r); - funktiot.add(name); - } - - return funktiot; - } - }); - } - catch (DatabaseException e) { - e.printStackTrace(); - } + ArrayList functionList = Function.getAllFunctions(); - Collections.sort(funktio); + Collections.sort(functionList); - for(int a=0; a < funktio.size(); a++){ - item.setText(funktio.get(a)+"()"); - item.setData(funktio.get(a)+"({})"); + for(Function function : functionList){ + item.setText(function.getName() + "()"); + item.setData(function.getName() + "(" + function.getParameterList() + ")"); + item.setImage(Function.getImage(functionTable.getDisplay(), function)); item = new TableItem(functionTable, SWT.NONE); } -// TableItem item = new TableItem(functionTable, SWT.NONE); -// item.setText("min()"); -// item.setData("min({ })"); -// item = new TableItem(functionTable, SWT.NONE); -// item.setText("max()"); -// item.setData("max({ })"); -// item = new TableItem(functionTable, SWT.NONE); -// item.setText("abs()"); -// item.setData("abs({ })"); -// item = new TableItem(functionTable, SWT.NONE); -// item.setText("if then else"); -// item.setData("if then else"); -// item = new TableItem(functionTable, SWT.NONE); -// item.setText("xidz()"); -// item.setData("xidz( number, divisor , x)"); -// item = new TableItem(functionTable, SWT.NONE); -// item.setText("interpolate()"); -// item.setData("interpolate( x, table)"); -// item = new TableItem(functionTable, SWT.NONE); -// item.setText("delay()"); -// item.setData("delay( expression, delayTime)"); functions.setControl(functionTable); } diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/CompletionProcessor.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/CompletionProcessor.java index 34140ed8..a8276262 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/CompletionProcessor.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/CompletionProcessor.java @@ -14,23 +14,19 @@ package org.simantics.sysdyn.ui.properties.widgets.expressions; import java.util.ArrayList; import java.util.Collections; +import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.contentassist.CompletionProposal; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.text.contentassist.IContentAssistProcessor; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.jface.text.contentassist.IContextInformationValidator; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.common.request.ObjectsWithType; -import org.simantics.db.common.utils.NameUtils; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.request.Read; -import org.simantics.layer0.Layer0; -import org.simantics.sysdyn.SysdynResource; -import org.simantics.ui.SimanticsUI; +import org.simantics.sysdyn.ui.Activator; +import org.simantics.sysdyn.ui.utils.ExpressionUtils; /** @@ -42,10 +38,11 @@ import org.simantics.ui.SimanticsUI; */ public class CompletionProcessor implements IContentAssistProcessor { - private Table allowedVariables; - private ArrayList functions; - private ArrayList variables = null; - + private final Table allowedVariables; + private ArrayList functions; + private ArrayList variables = null; + private ArrayList timeAndSelfVariables = null; + private final char[] allowedCharacters = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','å','ä','ö', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','Å','Ä','Ö', @@ -56,75 +53,120 @@ public class CompletionProcessor implements IContentAssistProcessor { public CompletionProcessor(Table allowedVariables, boolean allowFunctions){ this.allowedVariables = allowedVariables; - //Finding functions - functions = new ArrayList(); - if (allowFunctions) { - try { - functions = SimanticsUI.getSession().syncRequest(new Read>() { - @Override - public ArrayList perform(ReadGraph graph) - throws DatabaseException { - SysdynResource sr = SysdynResource.getInstance(graph); - Layer0 l0 = Layer0.getInstance(graph); - ArrayList functions = new ArrayList(); - - Resource funktionlibrary = graph.getPossibleResource(SysdynResource.URIs.Built$in_Functions); - for(Resource r : graph.syncRequest(new ObjectsWithType(funktionlibrary, l0.ConsistsOf, sr.SysdynModelicaFunction))) { - String name = NameUtils.getSafeName(graph, r); - functions.add(name); - } - - Resource subfunktionlibrary = graph.getPossibleResource(SysdynResource.URIs.Built$in_Functions_Vensim_Functions); - for(Resource r : graph.syncRequest(new ObjectsWithType(subfunktionlibrary, l0.ConsistsOf, sr.SysdynModelicaFunction))) { - String name = NameUtils.getSafeName(graph, r); - functions.add(name); - } - - return functions; - } - }); - } - catch (DatabaseException e) { - e.printStackTrace(); - } - } - Collections.sort(functions); - for (int i = 0; i < functions.size(); ++i) { - functions.set(i, functions.get(i) + "()"); - } + if (allowFunctions) { + //Finding functions and sorting them. + functions = Function.getAllFunctions(); + Collections.sort(functions); + } } - private ICompletionProposal[] collectProposals(String token, int offset) { - //Finding variables - if (variables == null) { - variables = new ArrayList(); - if(allowedVariables != null && !allowedVariables.isDisposed()) { - TableItem[] connectedVariables = allowedVariables.getItems(); - for(TableItem ti : connectedVariables) { - this.variables.add(ti.getText()); - } - } - Collections.sort(variables); - } - - ArrayList resultArray = new ArrayList(); - for (String variable : variables) { - if (token.length() == 0 || variable.toUpperCase().startsWith(token.toUpperCase())) { - resultArray.add(new CompletionProposal(variable, - offset - token.length(), - token.length(), - variable.length())); - } - } - for (String function : functions) { - if (token.length() == 0 || function.toUpperCase().startsWith(token.toUpperCase())) { - resultArray.add(new CompletionProposal(function, - offset - token.length(), - token.length(), - function.length() - 1)); - } - } - ICompletionProposal[] result = new ICompletionProposal[resultArray.size()]; + /** + * Collect and sort all variables. + * @param display + */ + private void findVariables(Display display) { + if (variables == null) { + variables = new ArrayList(); + timeAndSelfVariables = new ArrayList(); + if(allowedVariables != null && !allowedVariables.isDisposed()) { + TableItem[] connectedVariables = allowedVariables.getItems(); + for(TableItem ti : connectedVariables) { + // The status of the variable is determined using the color of its table item :( + if (ExpressionUtils.variableTimeAndSelfColor(display).equals(ti.getForeground())) { + this.timeAndSelfVariables.add(ti.getText()); + } else { + this.variables.add(ti.getText()); + } + + } + } + Collections.sort(variables); + Collections.sort(timeAndSelfVariables); + } + } + + /** + * Create CompletionProposals of the variables and add them to array. + * @param array result array of CompletionProposals + * @param display display using this CompletionProcessor + * @param token current token + * @param offset an offset within the document for which completions should be computed + */ + private void addVariables(ArrayList array, Display display, String token, int offset) { + Image imageVariable = ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/variable.png")).createImage(display); + Image imageVariableGray = ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/variableGray.png")).createImage(display); + + for (String variable : variables) { + if (token.length() == 0 || variable.toUpperCase().startsWith(token.toUpperCase())) { + array.add(new CompletionProposal(variable, + offset - token.length(), + token.length(), + variable.length(), + imageVariable, + variable, + null/*new ContextInformation("ContextInformation1", "ContextInformation2")*/, + ""/*"additional Proposal Info"*/)); + } + } + for (String variable : timeAndSelfVariables) { + if (token.length() == 0 || variable.toUpperCase().startsWith(token.toUpperCase())) { + array.add(new CompletionProposal(variable, + offset - token.length(), + token.length(), + variable.length(), + imageVariableGray, + variable, + null/*new ContextInformation("ContextInformation1", "ContextInformation2")*/, + ""/*"additional Proposal Info"*/)); + } + } + } + + /** + * Create CompletionProposals of the functions and add them to array. + * @param array result array of CompletionProposals + * @param display display using this CompletionProcessor + * @param token current token + * @param offset an offset within the document for which completions should be computed + */ + private void addFunctions(ArrayList array, Display display, String token, int offset) { + // Parameters don't have functions + if (functions == null) + return; + + // Create CompletionProposals out of Functions + for (Function function : functions) { + if (token.length() == 0 || function.getName().toUpperCase().startsWith(token.toUpperCase())) { + Image image = Function.getImage(display, function); + array.add(new CompletionProposal( + function.getName() + "(" + function.getParameterList() + ")", + offset - token.length(), + token.length(), + function.getName().length() + 1, + image, + function.getName() + "(" + function.getParameterList() + ")", + null/*new ContextInformation("ContextInformation1", "ContextInformation2")*/, + ""/*"additional Proposal Info"*/)); + } + } + } + + /** + * Collect all matching proposals + * @param display display using this CompletionProcessor + * @param token current token + * @param offset an offset within the document for which completions should be computed + * @return Array of matching proposals + */ + private ICompletionProposal[] collectProposals(Display display, String token, int offset) { + ArrayList resultArray = new ArrayList(); + + // Find variables and functions and create CompletionProposals out of them. + findVariables(display); + addVariables(resultArray, display, token, offset); + addFunctions(resultArray, display, token, offset); + + ICompletionProposal[] result = new ICompletionProposal[resultArray.size()]; for (int i = 0; i < result.length; ++i) { result[i] = resultArray.get(i); } @@ -135,11 +177,12 @@ public class CompletionProcessor implements IContentAssistProcessor { public ICompletionProposal[] computeCompletionProposals( ITextViewer viewer, int offset) { String equation = viewer.getDocument().get(); + Display display = viewer.getTextWidget().getDisplay(); if (equation.length() == 0 || offset == 0 || Character.isWhitespace(equation.charAt(offset - 1))) { - return collectProposals("", offset); + return collectProposals(display, "", offset); } equation = equation.substring(0, offset); @@ -147,29 +190,35 @@ public class CompletionProcessor implements IContentAssistProcessor { // Split into tokens on whitespace characters String[] tokens = equation.split("[\\s]"); if (tokens.length == 0) { - return collectProposals("", offset); + return collectProposals(display, "", offset); } String token = tokens[tokens.length - 1]; // If a '+', '-', etc. character is in the end, return all. if (allowedConnectedCharactersRegExp.indexOf(token.charAt(token.length() - 1)) != -1) { - return collectProposals("", offset); + return collectProposals(display, "", offset); } // Split the last token on '+', '-', etc. characters String tokensOfLastToken[] = token.split(allowedConnectedCharactersRegExp); if (tokensOfLastToken.length == 0) { - return collectProposals("", offset); + return collectProposals(display, "", offset); } token = tokensOfLastToken[tokensOfLastToken.length - 1]; //System.out.println(token + "\noffset = " + offset); - return collectProposals(token, offset); + return collectProposals(display, token, offset); } @Override public IContextInformation[] computeContextInformation( ITextViewer viewer, int offset) { + + /*IContextInformation[] result = new IContextInformation[1]; + for (int i = 0; i < result.length; ++i) { + result[i] = new ContextInformation("String1", "String2"); + } + return result;*/ return null; } @@ -180,6 +229,7 @@ public class CompletionProcessor implements IContentAssistProcessor { @Override public char[] getContextInformationAutoActivationCharacters() { + //return allowedCharacters; return null; } diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/Function.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/Function.java new file mode 100644 index 00000000..902c24f7 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/Function.java @@ -0,0 +1,192 @@ +package org.simantics.sysdyn.ui.properties.widgets.expressions; + +import java.util.ArrayList; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.graphics.Device; +import org.eclipse.swt.graphics.Image; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.request.ObjectsWithType; +import org.simantics.db.common.utils.ListUtils; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.request.Read; +import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.Activator; +import org.simantics.ui.SimanticsUI; + + +/** + * Class to store function name, type, and parameters. + * + * @author Tuomas Miettinen + * + */ +public class Function implements Comparable{ + + private final String name; + private final Type type; + private final String parameterList; + + public enum Type { + USER_DEFINED, + SHARED, + VENSIM, + SYSDYN, + MODELICA, + MODELICA_ARRAY + } + + /** + * Get the icon image for each type of Modelica function. + * @param device Device for which the image is used. + * @param function Modelica function + * @return Image to be shown e.g. in assistive text feed and ShortcutTab + */ + public static Image getImage(Device device, Function function) { + switch (function.getType()) { + case USER_DEFINED: + return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/function.png")).createImage(device); + case SHARED: + return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/functionLink.png")).createImage(device); + case VENSIM: + return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/vensimFunction.png")).createImage(device); + case SYSDYN: + return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/sysdynFunction.png")).createImage(device); + case MODELICA: + return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/modelicaFunction.png")).createImage(device); + case MODELICA_ARRAY: + return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/modelicaArrayFunction.png")).createImage(device); + default: + return null; + } + } + + public Function(String name, String parameterList, Type type){ + this.name = new String(name); + this.type = type; + if (parameterList != null) + this.parameterList = new String(parameterList); + else + this.parameterList = new String(""); + } + + public String getParameterList() { + return parameterList; + } + + public String getName() { + return name; + } + + public Type getType() { + return type; + } + + @Override + public int compareTo(Function f) { + // Sorting is done first in the order of Types and then alphabetically. + int typeCompare = type.compareTo(f.getType()); + return typeCompare != 0 ? typeCompare : name.compareTo(f.getName()); + } + + /** + * Get Modelica function parameters + * @param graph + * @param sr + * @param r Resource of the Modelica function + * @return String in which the paramters are ", " delimited + * @throws DatabaseException + */ + private static String getFunctionInputs(ReadGraph graph, SysdynResource sr, Resource r) throws DatabaseException { + Resource inputs = graph.getPossibleObject(r, sr.SysdynModelicaFunction_inputs); + String inputStr = null; + if (inputs != null) { + for (Resource input : ListUtils.toList(graph, inputs)) { + String inputName = null; + if (graph.isInstanceOf(input, sr.SysdynModelicaFunction_VariableLengthInput)) { + inputName = ""; + Resource shownLabels = graph.getPossibleObject( + input, + sr.SysdynModelicaFunction_VariableLengthInput_shownLabels); + if (shownLabels != null) { + for (Resource label : ListUtils.toList(graph, shownLabels)) { + inputName += NameUtils.getSafeName(graph, label); + inputName += ", "; + } + } + inputName += "..."; + } else { + inputName = NameUtils.getSafeName(graph, input); + } + if (inputStr == null) + inputStr = new String(inputName); + else + inputStr += ", " + inputName; + } + } + return inputStr; + } + + /** + * Get all (atm. only built-in) Modelica functions. + * @return ArrayList containing all functions. + */ + public static ArrayList getAllFunctions() { + ArrayList result = null; + + //Finding functions + try { + result = SimanticsUI.getSession().syncRequest(new Read>() { + @Override + public ArrayList perform(ReadGraph graph) + throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + Layer0 l0 = Layer0.getInstance(graph); + ArrayList functions = new ArrayList(); + + // Add Sysdyn functions + Resource functionLibrary = graph.getPossibleResource(SysdynResource.URIs.Built$in_Functions); + for(Resource r : graph.syncRequest(new ObjectsWithType(functionLibrary, l0.ConsistsOf, sr.SysdynModelicaFunction))) { + String name = NameUtils.getSafeName(graph, r); + String inputStr = getFunctionInputs(graph, sr, r); + functions.add(new Function(name, inputStr, Type.SYSDYN)); + } + + // Add Vensim functions + Resource subFunctionLibrary = graph.getPossibleResource(SysdynResource.URIs.Built$in_Functions_Vensim_Functions); + for(Resource r : graph.syncRequest(new ObjectsWithType(subFunctionLibrary, l0.ConsistsOf, sr.SysdynModelicaFunction))) { + String name = NameUtils.getSafeName(graph, r); + String inputStr = getFunctionInputs(graph, sr, r); + functions.add(new Function(name, inputStr, Type.VENSIM)); + } + + // Add Modelica functions + subFunctionLibrary = graph.getPossibleResource(SysdynResource.URIs.Built$in_Functions_Modelica_Functions); + for(Resource r : graph.syncRequest(new ObjectsWithType(subFunctionLibrary, l0.ConsistsOf, sr.SysdynModelicaFunction))) { + String name = NameUtils.getSafeName(graph, r); + String inputStr = getFunctionInputs(graph, sr, r); + functions.add(new Function(name, inputStr, Type.MODELICA)); + } + + // Add Modelica array functions + subFunctionLibrary = graph.getPossibleResource(SysdynResource.URIs.Built$in_Functions_Modelica_Array_Functions); + for(Resource r : graph.syncRequest(new ObjectsWithType(subFunctionLibrary, l0.ConsistsOf, sr.SysdynModelicaFunction))) { + String name = NameUtils.getSafeName(graph, r); + String inputStr = getFunctionInputs(graph, sr, r); + functions.add(new Function(name, inputStr, Type.MODELICA_ARRAY)); + } + + return functions; + } + }); + } + catch (DatabaseException e) { + e.printStackTrace(); + } + + return result; + } +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/functions/FunctionCodeWidget.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/functions/FunctionCodeWidget.java index 2d0cb58d..b9fb5d8c 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/functions/FunctionCodeWidget.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/functions/FunctionCodeWidget.java @@ -130,6 +130,13 @@ public class FunctionCodeWidget implements Widget { public String perform(ReadGraph graph) throws DatabaseException { String code = graph.getPossibleRelatedValue( function, SysdynResource.getInstance(graph).SysdynModelicaFunction_modelicaFunctionCode); + if (code == null) { + code = graph.getPossibleRelatedValue( + function, SysdynResource.getInstance(graph).SysdynModelicaFunction_modelicaFunctionInterface); + if (code == null) { + code = new String(""); + } + } return code; } diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/utils/ExpressionUtils.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/utils/ExpressionUtils.java index e186e3f1..a7a28c17 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/utils/ExpressionUtils.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/utils/ExpressionUtils.java @@ -26,6 +26,7 @@ import java.util.regex.Pattern; import org.eclipse.jface.text.Position; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Device; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.simantics.db.ReadGraph; @@ -76,6 +77,36 @@ public class ExpressionUtils { return false; } } + + /** + * Color for a variable found in an expression field, used in shortcut tab. + * This is a bit silly means of communicating the state of a variable using its color. + * @param device Device in which the color is used. + * @return Color for such variable. + */ + static public Color variableFoundColor(Device device) { + return new Color(device, 0,0,0); + } + + /** + * Color for a variable not found in an expression field, used in shortcut tab. + * This is a bit silly means of communicating the state of a variable using its color. + * @param device Device in which the color is used. + * @return Color for such variable. + */ + static public Color variableNotFoundColor(Device device) { + return new Color(device, 255,125,0); + } + + /** + * Color for a variable itself and for the time variable, used in shortcut tab. + * This is a bit silly means of communicating the state of a variable using its color. + * @param device Device in which the color is used. + * @return Color for such variable. + */ + static public Color variableTimeAndSelfColor(Device device) { + return new Color(device, 127,127,127); + } /** * Validates the expressionfield of a given IExpression @@ -266,11 +297,11 @@ public class ExpressionUtils { TableItem[] connectedVariables = variableTable.getItems(); for(TableItem ti : connectedVariables) { if (ti.getText().equals("time") || ti.getText().equals(selfName)) { - ti.setForeground(new Color(ti.getDisplay(), 127,127,127)); + ti.setForeground(variableTimeAndSelfColor(ti.getDisplay())); } else if (parsingSucceeded && !variables.contains(ti.getText())) { - ti.setForeground(new Color(ti.getDisplay(), 255,125,0)); + ti.setForeground(variableNotFoundColor(ti.getDisplay())); } else if (parsingSucceeded) { - ti.setForeground(new Color(ti.getDisplay(), 0, 0, 0)); + ti.setForeground(variableFoundColor(ti.getDisplay())); variables.remove(ti.getText()); } } diff --git a/org.simantics.sysdyn/ModelicaParser.html b/org.simantics.sysdyn/ModelicaParser.html new file mode 100644 index 00000000..b33e433b --- /dev/null +++ b/org.simantics.sysdyn/ModelicaParser.html @@ -0,0 +1,737 @@ + + + +BNF for ModelicaParser.jj + + +

BNF for ModelicaParser.jj

+

TOKENS

+ + + + + + + + + + + + + +
+
+/*** Lexer *********************************************************/
+
+
+<DEFAULT> SKIP : {
+<WHITESPACE: " " | "\n" | "\r" | "\t">
+| <COMMENT1: "/*" (~["*"] | "*" ~["/"])* "*/">
+| <COMMENT2: "//" (~["\n"])*>
+}
+
+   
+
+
+<DEFAULT> TOKEN : {
+"algorithm"
+| "discrete"
+| "false"
+| "model"
+| "redeclare"
+| "and"
+| "each"
+| "final"
+| "not"
+| "replaceable"
+| "annotation"
+| "else"
+| "flow"
+| "operator"
+| "return"
+| "assert"
+| "elseif"
+| "for"
+| "or"
+| "stream"
+| "block"
+| "elsewhen"
+| "function"
+| "outer"
+| "then"
+| "break"
+| "encapsulated"
+| "if"
+| "output"
+| "true"
+| "class"
+| "end"
+| "import"
+| "package"
+| "type"
+| "connect"
+| "enumeration"
+| "in"
+| "parameter"
+| "when"
+| "connector"
+| "equation"
+| "initial"
+| "partial"
+| "while"
+| "constant"
+| "expandable"
+| "inner"
+| "protected"
+| "within"
+| "constrainedby"
+| "extends"
+| "input"
+| "public"
+| "der"
+| "external"
+| "loop"
+| "record"
+| "("
+| ")"
+| "{"
+| "}"
+| "["
+| "]"
+| "."
+| ":"
+| ";"
+| ","
+| "<"
+| "<="
+| ">"
+| ">="
+| "=="
+| "<>"
+| "+"
+| "-"
+| ".+"
+| ".-"
+| "*"
+| "/"
+| ".*"
+| "./"
+| "^"
+| ".^"
+| "="
+| ":="
+| <IDENT: ["a"-"z","A"-"Z","_"] (["a"-"z","A"-"Z","_","0"-"9"])*>
+| <STRING: "\"" (~["\"","\\","\n"] | "\\" ~["\n"])* "\""> : {
+| <UNSIGNED_INTEGER: (["0"-"9"])+>
+| <UNSIGNED_NUMBER: <UNSIGNED_INTEGER> "." (<UNSIGNED_INTEGER>)? (["e","E"] <UNSIGNED_INTEGER>)? | "." <UNSIGNED_INTEGER> (["e","E"] <UNSIGNED_INTEGER>)? | <UNSIGNED_INTEGER> ["e","E"] <UNSIGNED_INTEGER>>
+}
+
+   
+
+

NON-TERMINALS

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+/*** Parser ********************************************************/
+
+// https://javacc.dev.java.net/doc/javaccgrm.html
+// add_op -> add_op()
+// [ add_op ] -> ( add_op() )?
+// { add_op term } -> ( add_op() term() )*
+
+
parse::=stored_definition <EOF>
+
+/*** Stored Definition - Within ************************************/
+
stored_definition::=( "within" ( name )? ";" )? ( ( "final" )? class_definition ";" )*
+
+/*** Class Definition **********************************************/
+
class_definition::=( "encapsulated" )? ( "partial" )? ( "class" | "model" | "record" | "block" | ( "expandable" )? "connector" | "type" | "package" | "function" | "operator" | "operator function" | "operator record" ) class_specifier
class_specifier::=<IDENT> string_comment composition "end" <IDENT>
|<IDENT> "=" base_prefix name ( array_subscripts )? ( class_modification )? comment
|<IDENT> "=" "enumeration" "(" ( ( enum_list )? | ":" ) ")" comment
|<IDENT> "=" "der" "(" name "," <IDENT> ( "," <IDENT> )* ")" comment
|"extends" <IDENT> ( class_modification )? string_comment composition "end" <IDENT>
base_prefix::=type_prefix
enum_list::=enumeration_literal ( "," enumeration_literal )*
enumeration_literal::=<IDENT> comment
parse_composition::=composition <EOF>
composition::=element_list ( "public" element_list | "protected" element_list | equation_section | algorithm_section )* ( "external" ( language_specification )? ( external_function_call )? ( annotation )? ";" )? ( annotation ";" )?
language_specification::=<STRING>
external_function_call::=( component_reference "=" )? <IDENT> "(" ( expression_list )? ")"
element_list::=( element ";" )*
element::=import_clause
|extends_clause
|( "redeclare" )? ( "final" )? ( "inner" )? ( "outer" )? ( ( class_definition | component_clause ) | "replaceable" ( class_definition | component_clause ) ( constraining_clause comment )? )
import_clause::="import" ( <IDENT> "=" name | name ( "." "*" )? ) comment
+
+/*** Extends *******************************************************/
+
extends_clause::="extends" name ( class_modification )? ( annotation )?
constraining_clause::="constrainedby" name ( class_modification )?
+
+/*** Component Clause **********************************************/
+
component_clause::=( type_prefix ) type_specifier ( array_subscripts )? component_list
type_prefix::=( "flow" | "stream" )? ( "discrete" | "parameter" | "constant" )? ( "output" | "input" )?
type_specifier::=name
component_list::=component_declaration ( "," component_declaration )*
component_declaration::=declaration ( conditional_attribute )? comment
conditional_attribute::="if" expression
declaration::=<IDENT> ( array_subscripts )? ( modification )?
+
+/*** Modification **********************************************/
+
modification::=class_modification ( "=" expression )?
|"=" expression
|":=" expression
class_modification::="(" ( argument_list )? ")"
argument_list::=argument ( "," argument )*
argument::=element_modification_or_replaceable
|element_redeclaration
element_modification_or_replaceable::=( "each" )? ( "final" )? ( element_modification | element_replaceable )
element_modification::=name ( modification )? string_comment
element_redeclaration::="redeclare" ( "each" )? ( "final" )? ( ( class_definition | component_clause1 ) | element_replaceable )
element_replaceable::="replaceable" ( class_definition | component_clause1 ) ( constraining_clause )?
component_clause1::=type_prefix type_specifier component_declaration1
component_declaration1::=declaration comment
+
+/*** Equations *************************************************/
+
equation_section::=( "initial" )? "equation" ( equation ";" )*
algorithm_section::=( "initial" )? "algorithm" ( statement ";" )*
equation::=( simple_expression "=" expression | if_equation | for_equation | connect_clause | when_equation | <IDENT> function_call_args ) comment
statement::=( component_reference ( ":=" expression | function_call_args ) | "(" output_expression_list ")" ":=" component_reference function_call_args | "break" | "return" | if_statement | for_statement | while_statement | when_statement ) comment
if_equation::="if" expression "then" ( equation ";" )* ( "elseif" expression "then" ( equation ";" )* )* ( "else" ( equation ";" )* )? "end" "if"
if_statement::="if" expression "then" ( statement ";" )* ( "elseif" expression "then" ( statement ";" )* )* ( "else" ( statement ";" )* )? "end" "if"
for_equation::="for" for_indices "loop" ( equation ";" )* "end" "for"
for_statement::="for" for_indices "loop" ( statement ";" )* "end" "for"
for_indices::=for_index ( "," for_index )*
for_index::=<IDENT> ( "in" expression )?
while_statement::="while" expression "loop" ( statement ";" )* "end" "while"
when_equation::="when" expression "then" ( equation ";" )* ( "elsewhen" expression "then" ( equation ";" )* )* "end" "when"
when_statement::="when" expression "then" ( statement ";" )* ( "elsewhen" expression "then" ( statement ";" )* )* "end" "when"
connect_clause::="connect" "(" component_reference "," component_reference ")"
+
+/*** Expressions ***************************************************/
+
expr::=simple_expression <EOF>
|"if" expression "then" expression ( "elseif" expression "then" expression )* "else" expression <EOF>
expression::=simple_expression
|"if" expression "then" expression ( "elseif" expression "then" expression )* "else" expression
simple_expression::=logical_expression ( ":" logical_expression ( ":" logical_expression )? )?
logical_expression::=logical_term ( "or" logical_term )*
logical_term::=logical_factor ( "and" logical_factor )*
logical_factor::=( "not" )? relation
relation::=arithmetic_expression ( rel_op arithmetic_expression )?
rel_op::="<"
|"<="
|">"
|">="
|"=="
|"<>"
arithmetic_expression::=( add_op )? term ( add_op term )*
add_op::="+"
|"-"
|".+"
|".-"
term::=factor ( mul_op factor )*
mul_op::="*"
|"/"
|".*"
|"./"
factor::=primary ( "^" | ".^" primary )?
primary::=<UNSIGNED_NUMBER>
|<UNSIGNED_INTEGER>
|<STRING>
|"false"
|"true"
|( name | "der" | "initial" ) function_call_args
|component_reference
|"(" output_expression_list ")"
|"[" expression_list ( ";" expression_list )* "]"
|"{" function_arguments "}"
|"end"
name::=( "." )? <IDENT> ( "." <IDENT> )*
component_reference::=( "." )? <IDENT> ( array_subscripts )? ( "." <IDENT> ( array_subscripts )? )*
function_call_args::="(" ( function_arguments )? ")"
function_arguments::=expression ( "," function_arguments | "for" for_indices )?
|named_arguments
named_arguments::=named_argument ( "," named_arguments )?
named_argument::=<IDENT> "=" expression
output_expression_list::=( expression )? ( "," ( expression )? )*
expression_list::=expression ( "," expression )*
array_subscripts::="[" subscript ( "," subscript )* "]"
subscript::=":"
|expression
comment::=string_comment ( annotation )?
string_comment::=( <STRING> ( "+" <STRING> )* )?
annotation::="annotation" class_modification
+ + diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/FunctionUtils.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/FunctionUtils.java index 097b51ed..1d79f466 100644 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/FunctionUtils.java +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/FunctionUtils.java @@ -259,7 +259,11 @@ public class FunctionUtils { SysdynResource sr = SysdynResource.getInstance(graph); for(Resource function : graph.syncRequest(new ObjectsWithType(library, l0.ConsistsOf, sr.SysdynModelicaFunction))) { String name = NameUtils.getSafeName(graph, function); - String functionCode = graph.getRelatedValue(function, sr.SysdynModelicaFunction_modelicaFunctionCode); + // Built-in Modelica (array) functions have no function code and they don't need to be added explicitly. + String functionCode = graph.getPossibleRelatedValue(function, sr.SysdynModelicaFunction_modelicaFunctionCode); + if (functionCode == null) { + continue; + } stream.println("function " + name); stream.println(functionCode); stream.println("end " + name + ";\n"); diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/modelParser/ModelicaParser.jj b/org.simantics.sysdyn/src/org/simantics/sysdyn/modelParser/ModelicaParser.jj index cc155d08..a739dad9 100644 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/modelParser/ModelicaParser.jj +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/modelParser/ModelicaParser.jj @@ -196,34 +196,39 @@ void constraining_clause() : { } /*** Component Clause **********************************************/ -void component_clause() : { +void component_clause() : { boolean isInput = false; } { + // type_prefix type_specifier [ array_subscripts ] component_list - type_prefix() type_specifier() ( array_subscripts() )? component_list() + ( isInput = type_prefix() ) type_specifier() ( array_subscripts() )? component_list(isInput) } -void type_prefix() : { +boolean type_prefix() : { boolean isInput = false; } { // [ flow | stream ] // [ discrete | parameter | constant ] [ input | output ] ( "flow" | "stream" )? - ( "discrete" | "parameter" | "constant" )? ( "input" | "output" )? } + ( "discrete" | "parameter" | "constant" )? + ( "output" | "input" { isInput = true; } )? + { return isInput; + } +} void type_specifier() : { } { name() } -void component_list() : { +void component_list(boolean isInput) : { } { // component_declaration { "," component_declaration } - component_declaration() ( "," component_declaration() )* + component_declaration(isInput) ( "," component_declaration(isInput) )* } -void component_declaration() : { +void component_declaration(boolean isInput) : { } { // declaration [ conditional_attribute ] comment - declaration() ( conditional_attribute() )? comment() + declaration(isInput) ( conditional_attribute() )? comment() } void conditional_attribute() : { @@ -231,10 +236,16 @@ void conditional_attribute() : { "if" expression() } -void declaration() : { +void declaration(boolean isInput) : { String input_variable = null; } { // IDENT [ array_subscripts ] [ modification ] - ( array_subscripts() )? ( modification() )? + { if (isInput) input_variable = new String(token.image); } + ( array_subscripts() )? + ( modification() { input_variable = null; })? + { + if (input_variable != null) { + //System.out.println("collect: " + input_variable); } + } } /*** Modification **********************************************/ @@ -301,7 +312,7 @@ void component_clause1() : { void component_declaration1() : { } { - declaration() comment() + declaration(false) comment() } -- 2.47.1