Dystlab uses its own math engine, MathSIV©, in its digital products. This high-tech tool allows you to perform mathematical calculations, solve systems of equations, convert expressions into symbolic (analytical) form, perform numerical and symbolic differentiation and integration, and more. MathSIV supports real numbers ("-2.5", "4.6e8", "Pi"), complex numbers ("2+3.2I"), one-, two-, and three-dimensional vectors and matrices ("M=[1 2 3]"), logical data types ("if{x<1}(a b)"), and physical quantities with arbitrary units (A=2.5 mm^2).

Preprocessor functions
Функції препроцесору

fembcond{i}(ux uy uz rx ry rz)

Sets the boundary conditions of the node "i". The arguments ux, uy, uz correspond to linear displacements of the node in the direction of the global coordinate system axes X, Y, Z; the arguments rx, ry, rz correspond to rotations around these axes. The arguments ux..rz can be: 0 - free node (no support); 1 - fixation; 2 - specified imposed displacement.

Examples:

fembcond{1}(1 1 1 1 1 1) // fixed node 1
fembcond{4}(1 1 1 1 0 1) // pinned node 4
fembcond{9}(0 1 1 1 0 1) // roller node 9

fembeam{i j}(E G A Ix Iy Iz)

Adds a new finite element of the "beam" type to the model that connects nodes "i" and "j". Arguments: E is the elastic modulus of the beam material (Pa); G is the shear modulus of the beam (Pa); A is the cross-sectional area of the beam (m²); Ix is the torsional moment of inertia of the cross-section relative to the local X axis (m⁴); Iy is the bending moment of inertia of the cross-section relative to the local Y axis (m⁴); Iz is the bending moment of inertia of the cross-section relative to the local Z axis (m⁴).

Examples:

E=40 GPa
G=12 GPa
b=100 mm
h=250 mm
A=b*h
Jx=b*h*(b^2+h^2)/12
Jy=b*h^3/12
Jz=h*b^3/12
fembeam{4 7}(E G A Jx Jy Jz)

fembeam2{i j}(E1 G1 A1 Ix1 Iy1 Iz1 E2 G2 A2 Ix2 Iy2 Iz2)

Adds a new finite element of the "beam" type to the model that connects nodes "i" and "j". Arguments: E1, E2 - elastic moduli of the beam (Pa); G1, G2 - shear moduli of the beam (Pa); A1, A2 - cross-sectional areas of the beam (m²); Ix1, Ix2 - torsional moments of inertia of the cross-section relative to the local axis X (m⁴); Iy1, Iy2 - bending moments of inertia of the section relative to the local Y axis (m⁴); Iz1, Iz2 - bending moments of inertia of the section relative to the local Z axis (m⁴). The index 1, 2 in the arguments indicates the initial (1) or final (2) nodes of the beam.

Examples:

E=40 GPa
G=12 GPa
b1=100 mm
h1=250 mm
b2=100 mm
h2=280 mm
A1=b1*h1
A2=b2*h2
Jx1=b1*h1*(b1^2+h1^2)/12
Jx2=b2*h2*(b2^2+h2^2)/12
Jy1=b1*h1^3/12
Jy2=b2*h2^3/12
Jz1=h1*b1^3/12
Jz2=h2*b2^3/12
fembeam2{4 7}(E G A1 Jx1 Jy1 Jz1 E G A2 Jx2 Jy2 Jz2)

femdelelem(i)

Deletes the element with number "i" from the model. Returns the updated number of elements.

femdelloadcases()

Deletes all load combination cases. Returns "0".

femdelloadcats()

Deletes all load categories and sets the default load category number to "-1".

femdelloads(COMB)

Deletes all loads from the model. Returns "0" if the deletion was successful. The COMB argument is a boolean type and if COMB=True, then load categories, load combinations, and combination factors are also deleted along with the loads.

femdelnode(i)

Deletes the node with the number "i". Returns the updated number of nodes.

femelemdiv{e}(n)

Divides the element with number "e" into "n" equal smaller elements. The source element "e" is removed. Returns array with 4 values: 1 - index of the first added node; 2 - index of the last added node; 3 - index of the first added element; 4 - index of the last added element.

femelements()

Returns the number of finite elements.

femelemlen(i)

Returns the length of the finite element "i" (in metres).

femimpdisp{i}(ux uy uz rx ry rz)

Sets the imposed displacements of the node "i". The arguments ux, uy, uz correspond to linear displacements of the node in the direction of the global coordinate system axes X, Y, Z (meters); the arguments rx, ry, rz correspond to rotations around these axes (radians). If the arguments are given as real numbers without units, then "meter" and "radian" are assumed.

femloadcase()

Creates new load case and returns its number.

femloadcat()

Creates new load category and returns its number.

femloadcatdef(cdef)

Sets the number of the default load category.

femloadfactor{case category}(f)

Associates new factor "f" (real number) with the load case and the load category.

femloads()

Returns the number of loads.

femnode(x y z)

Adds a new node to the model. Returns the number of this node. Arguments x, y, z must be physical values of dimension L (length) or real numbers (treated as meters).

femnodes()

Returns the number of nodes in the finite element mesh.

femnodload{i c}(Fx Fy Fz Mx My Mz)

Same as the function "femnodload{node}(Fx Fy Fz Mx My Mz)", but adds a load to the category with the number "c".

femnodload{i}(Fx Fy Fz Mx My Mz)

Adds a concentrated load to the node "i". The arguments Fx, Fy, Fz are forces acting in the direction of the X, Y, Z axes of the global coordinate system (units "N"). Arguments Mx, My, Mz are moments acting around the X, Y, Z axes (units "N m"). The load is added to the default category, the number of which can be changed with the "femloadcatdef" function (-1 by default).

femreset()

Restarts the FEM engine. Deletes all nodes, elements, loads, etc. Returns "0".

femrod{node1 node2}(E A)

Creates a new finite element of the "rod" type and returns its number. This element works only in axial tension or compression. Arguments: node1, node2 — numbers of the start and the end nodes; E — modulus of elasticity; A — cross-sectional area.

femrodc{node1 node2}(E A)

Creates a new finite element of the "rod" type and returns its number. This element works only in axial compression. Arguments: node1, node2 — numbers of the start and the end nodes; E — modulus of elasticity; A — cross-sectional area.

femrodt{node1 node2}(E A)

Creates a new finite element of the "rod" type and returns its number. This element works only in axial tension. Arguments: node1, node2 — numbers of the start and the end nodes; E — modulus of elasticity; A — cross-sectional area.

femudload{i c}(fx fy fz mx my mz)

Same as the function "femudload{i}(fx fy fz mx my mz)", but adds a load to the category with the number "c".

femudload{i}(fx fy fz mx my mz)

Adds an uniformly distributed load to the element "i". The arguments fx, fy, fz are distributed forces acting in the direction of the X, Y, Z axes of the global coordinate system (units "N/m"). Arguments mx, my, mz are distributed moments acting around the X, Y, Z axes (units "N m/m"). The load is oriented according to the axes of the global coordinate system. The load is added to the default category, the number of which can be changed with the "femloadcatdef" function (-1 by default).

femudloadloc{i c}(fx fy fz mx my mz)

Same as the function "femudloadloc{i}(fx fy fz mx my mz)", but adds a load to the category with the number "c".

femudloadloc{i}(fx fy fz mx my mz)

The same as the "femudload" function, but the load is applied to the element in its local coordinate system. The load is added to the default category, the number of which can be changed with the "femloadcatdef" function (-1 by default).

femzerostiff(condition)

Enables (Condition=True) or disables (Condition=False) the "femzerostiff(ux uy uz rx ry rz)" options.

femzerostiff(ux uy uz rx ry rz)

Sets the zero stiffness threshold. If a diagonal element of the stiffness matrix for the corresponding DOF ux..rz is less or equal than this value, a rigid kinematic fixation is set in that direction. Arguments are real numbers. By default, the stiffness matrix is compared to zero stiffness values, but this function allows you to increase this threshold. Ignored, if "femzerostiff(False)" function is used.

Processor functions
Функції процесору

femcalc()

Calculates the model using the Finite Element Method (linear static analysis). Returns "0" if the analysis is successful.

Postprocessor functions
Функції постпроцесору

femintfm{n dof}(i)

Returns the internal force or moment in the element "i". The argument n must be 1 (beginning of the beam) or 2 (end of the beam). Argument dof=1..3 for forces (units "N") and dof=4..6 for moments (units "N m").

femintfm{n}(i)

Returns the internal forces in the element "i". The argument n must be 1 (beginning of the beam) or 2 (end of the beam). The result is a vector of 6 components, where the first 3 numbers are forces (units "N"), and the next three are moments (units "N m").

femintfmext{dof}()

Returns array with two values: minimum and maximum internal force (if dof=1..3) or moment (if dof=4..6) for all elements in the model. Units for forces are "N", units for moments are "N m".

femintfmext{dof}(element1 element2)

Same as "femintfmext{dof}()", but for range [element1..element2].

femintfmext{n dof}()

Returns array with two values: minimum and maximum internal force (if dof=1..3) or moment (if dof=4..6) for all elements in the model. Units for forces are "N", units for moments are "N m". Argument n must be 1 (beginning of the beam) or 2 (end of the beam).

femintfmext{n dof}(element1 element2)

Same as "femintfmext{n dof}()", but for range [element1..element2].

femnoddisp(i)

Returns the displacement of the node "i". The result is a vector of 6 components, where the first 3 numbers are the linear displacements of the node (in meters), and the next three are the rotations (in radians).

femnoddisp{dof}(i)

Returns the displacement of the node "i". The result is a linear displacement (if dof=1..3) or rotation angle (if dof=4..6).

femnoddispext{dof}()

Returns the array with two values: minimum and maximum displacements for all nodes in the model. The result is a linear displacement in metres (if dof=1..3) or rotation angle in radians (if dof=4..6).

femnoddispext{dof}(node1 node2)

Same as "femnoddispext(dof)", but for range [node1..node2].

femnodreact(i)

Returns reactions of the node "i". The result is a vector of 6 components, where the first 3 numbers are the nodal forces (units "N"), and the next three are the nodal moments (units "N m").

femnodreact{dof}(i)

Returns reactions of the node "i". The result is a nodal force (if dof=1..3) or nodal moment (if dof=4..6).

femnodreactext{dof}()

Returns the array with two values: minimum and maximum reactions for all nodes in the model. The result is a force in [N] (if dof=1..3) or moment in [N*m] (if dof=4..6).

femnodreactext{dof}(node1 node2)

Same as "femnodreactext{dof}(i)", but for range [node1..node2].