This package contains functions that are used to define parameterized surfaces for use with the Surface model.
Extends from Modelica.Icons.Package (Icon for standard packages).
Name | Description |
---|---|
torus | Function defining the surface characteristic of a torus |
pipeWithScalarField | Function defining the surface characteristic of a pipe where a scalar field value is displayed with color along the pipe axis |
Function torus computes the X,Y,Z arrays to visualize a torus with model Torus. The left image below shows a torus with ri=0.5 m and ro = 0.2 m. The right images below shows the torus with the additional parameter settings:
opening = 45 degree startAngle = -135 degree stopAngle = 135 degree
Extends from Modelica.Mechanics.MultiBody.Interfaces.partialSurfaceCharacteristic.
Type | Name | Default | Description |
---|---|---|---|
Integer | nu | Number of points in u-Dimension | |
Integer | nv | Number of points in v-Dimension | |
Boolean | multiColoredSurface | false | = true: Color is defined for each surface point |
Radius | ri | 1 | Inner radius of torus [m] |
Radius | ro | 0.2 | Outer radius of torus (=width/2) [m] |
Angle | opening | 0 | Opening angle of torus [rad] |
Angle | startAngle | -Modelica.Constants.pi | Start angle of torus slice [rad] |
Angle | stopAngle | Modelica.Constants.pi | End angle of torus slice [rad] |
Type | Name | Description |
---|---|---|
Position | X[nu, nv] | [nu,nv] positions of points in x-Direction resolved in surface frame [m] |
Position | Y[nu, nv] | [nu,nv] positions of points in y-Direction resolved in surface frame [m] |
Position | Z[nu, nv] | [nu,nv] positions of points in z-Direction resolved in surface frame [m] |
Real | C[if multiColoredSurface then nu else 0, if multiColoredSurface then nv else 0, 3] | [nu,nv,3] Color array, defining the color for each surface point |
function torus "Function defining the surface characteristic of a torus" extends Modelica.Mechanics.MultiBody.Interfaces.partialSurfaceCharacteristic( final multiColoredSurface=false); input Modelica.SIunits.Radius ri=1 "Inner radius of torus"; input Modelica.SIunits.Radius ro=0.2 "Outer radius of torus (=width/2)"; input Modelica.SIunits.Angle opening=0 "Opening angle of torus"; input Modelica.SIunits.Angle startAngle= -Modelica.Constants.pi "Start angle of torus slice"; input Modelica.SIunits.Angle stopAngle= Modelica.Constants.pi "End angle of torus slice"; protected Modelica.SIunits.Angle alpha; Modelica.SIunits.Angle beta; Modelica.SIunits.Angle phi_start; Modelica.SIunits.Angle phi_stop; algorithm phi_start :=-Modelica.Constants.pi + opening; phi_stop :=Modelica.Constants.pi - opening; for i in 1:nu loop alpha := startAngle + (stopAngle-startAngle)*(i-1)/(nu-1); for j in 1:nv loop beta := phi_start + (phi_stop-phi_start)*(j-1)/(nv-1); X[i,j] := (ri + ro*cos(beta))*sin(alpha); Y[i,j] := ro*sin(beta); Z[i,j] := (ri + ro*cos(beta))*cos(alpha); end for; end for;end torus;
Function pipeWithScalarField computes the X,Y,Z,C arrays in order to visualize a pipe and a scalar field along the pipe axis with model PipeWithScalarField. The latter is shown by mapping scalar field to color values with a color map and utilizing this color at the perimeter associated with the corresponding axis location. Typically the scalar field value is a temperature, but might be also another quantity. Predefined color maps are available from MultiBody.Visualizers.Colors.ColorMaps and can be selected via input argument "colorMap". A color map with the corresponding scalar field values can be exported as vector-graphics in svg-format with function MultiBody.Visualizers.Colors.colorMapToSvg. An example is shown in the next figure:
The color coding is shown in the next figure. It was generated with Mechanics.MultiBody.Visualizers.Colors.colorMapToSvg using the following call:
colorMapToSvg(Modelica.Mechanics.MultiBody.Visualizer.Colors.ColorMap.jet(), height=50, nScalars=6, T_max=100, heading="Temperature in C");
Extends from Modelica.Mechanics.MultiBody.Interfaces.partialSurfaceCharacteristic.
Type | Name | Default | Description |
---|---|---|---|
Integer | nu | Number of points in u-Dimension | |
Integer | nv | Number of points in v-Dimension | |
Boolean | multiColoredSurface | true | = true: Color is defined for each surface point |
Radius | rOuter | Outer radius of cylinder [m] | |
Length | length | Length of cylinder [m] | |
Position | xsi[:] | Relative position along the pipe with x[1] = 0, x[end] = 1 [m] | |
Real | T[size(xsi, 1)] | Scalar field value at position xsi*length | |
Real | T_min | T <= T_min is mapped to colorMap[1,:] | |
Real | T_max | T >= T_max is mapped to colorMap[end,:] | |
Real | colorMap[:, 3] | Color map to map scalar T to a corresponding color |
Type | Name | Description |
---|---|---|
Position | X[nu, nv] | [nu,nv] positions of points in x-Direction resolved in surface frame [m] |
Position | Y[nu, nv] | [nu,nv] positions of points in y-Direction resolved in surface frame [m] |
Position | Z[nu, nv] | [nu,nv] positions of points in z-Direction resolved in surface frame [m] |
Real | C[if multiColoredSurface then nu else 0, if multiColoredSurface then nv else 0, 3] | [nu,nv,3] Color array, defining the color for each surface point |
function pipeWithScalarField "Function defining the surface characteristic of a pipe where a scalar field value is displayed with color along the pipe axis" import C = Modelica.Constants; extends Modelica.Mechanics.MultiBody.Interfaces.partialSurfaceCharacteristic( final multiColoredSurface=true); input Modelica.SIunits.Radius rOuter "Outer radius of cylinder"; input Modelica.SIunits.Length length "Length of cylinder"; input Modelica.SIunits.Position xsi[:] "Relative position along the pipe with x[1] = 0, x[end] = 1"; input Real T[size(xsi,1)] "Scalar field value at position xsi*length"; input Real T_min "T <= T_min is mapped to colorMap[1,:]"; input Real T_max "T >= T_max is mapped to colorMap[end,:]"; input Real colorMap[:,3] "Color map to map scalar T to a corresponding color"; protected Real beta; Real xsi_i; Real Ti; Real Ci[3]; Integer k; algorithm k:=1; for i in 1:nu loop // Compute actual xsi-position along cylinder axis xsi_i := (i-1)/(nu-1); // Interpolate in xsi and T to determine the corresponding value of Ti(xsi_i) (Ti,k) := Modelica.Math.Vectors.interpolate(xsi, T, xsi_i, k); // Map the scalar field value Ti to a color value Ci := Modelica.Mechanics.MultiBody.Visualizers.Colors.scalarToColor( Ti, T_min, T_max, colorMap); // Determine outputs for j in 1:nv loop beta := 2*Modelica.Constants.pi*(j-1)/(nv-1); X[i,j] := length*xsi_i; Y[i,j] := rOuter*sin(beta); Z[i,j] := rOuter*cos(beta); C[i,j,:] := Ci; end for; end for;end pipeWithScalarField;