5.8. psi.supports

Implementation of different types of theoritical pipe supports.

Supports are implemented using the penalty approach where the global system stiffness and force matrices are modified by the support stiffness value and displacement respectively.

Axis aligned supports directly scale the diagonal elements of the global stiffness matrix. Inclined or skewed supports are implemented using constraint equations and modify more than the diagonal terms as the displacements are coupled via the direction cosines.

For support displacements, the support displacement vector is multiplied by the support stiffness and added to the corresponding force vector. Refer to “Introduction to Finite Elements in Engineering” by Chandrupatla and Belegundu for additional details.

A stiffness value of 1000*K, where K is the largest stiffness in the global stiffness matrix has shown to produce good results based on textbook examples. Reasonable default values for translation and rotation stiffness are specified for each support. The user can change the default values via model settings.

X, Y and Z supports are inherited from Inclined supports and can take several different forms. They can be snubbers (only active in occasional load cases), single or bi-directional, translational or rotational and/or define friction and gaps.

5.8.1. Anchor

class psi.supports.Anchor(name, point)

Support with all 6 degrees of freedom at a node fixed.

Methods

__init__(name, point)

Create an anchor support instance at a node point.

Parameters
  • name (str) – Unique name for pipe object.

  • point (Point) – Point instance where support is located.

  • translation_stiffnesss (float) – Stiffness in the translational direction.

  • rotation_stiffness (float) – Stiffness in the rotational direction.

apply(element)

Apply the support to the element.

Parameters
  • element (Element) – An element object.

  • are applied to an element at a node on the element. (Supports) –

Example

Create a support at node 20 of run element 20.

>>> run20 = elements(10, 20)
>>> anc = Anchor("anc20", 20)
>>> anc.apply([run20])

5.8.2. X

class psi.supports.X(name, point, direction=None, gap=0.0, mu=0.0, is_rotational=False, is_snubber=False)

Support aligned with the global x direction.

Methods

__init__(name, point, direction=None, gap=0.0, mu=0.0, is_rotational=False, is_snubber=False)

Create a support instance at a node point.

Parameters
  • name (str) – Unique name for pipe object.

  • point (Point) – Point instance where support is located.

  • direction (str) – Support direction. Default is None. “+” and “-” is used to specify a directional support (non-linear).

  • mu (float) – Support friction (non-linear).

  • is_rotational (bool) – True if the support is a rotational restraint.

  • is_snubber (bool) – True if the support is snubber.

  • translation_stiffnesss (float) – Stiffness in the translational direction.

  • rotation_stiffness (float) – Stiffness in the rotational direction.

  • gap (float) – Support gap (non-linear).

apply(element)

Apply the support to the element.

Parameters
  • element (Element) – An element object.

  • are applied to an element at a node on the element. (Supports) –

Example

Create a support at node 20 of run element 20.

>>> run20 = elements(10, 20)
>>> anc = Anchor("anc20", 20)
>>> anc.apply([run20])

5.8.3. Y

class psi.supports.Y(name, point, direction=None, gap=0.0, mu=0.0, is_rotational=False, is_snubber=False)

Support aligned with the global y direction.

Methods

__init__(name, point, direction=None, gap=0.0, mu=0.0, is_rotational=False, is_snubber=False)

Create a support instance at a node point.

Parameters
  • name (str) – Unique name for pipe object.

  • point (Point) – Point instance where support is located.

  • direction (str) – Support direction. Default is None. “+” and “-” is used to specify a directional support (non-linear).

  • mu (float) – Support friction (non-linear).

  • is_rotational (bool) – True if the support is a rotational restraint.

  • is_snubber (bool) – True if the support is snubber.

  • translation_stiffnesss (float) – Stiffness in the translational direction.

  • rotation_stiffness (float) – Stiffness in the rotational direction.

  • gap (float) – Support gap (non-linear).

apply(element)

Apply the support to the element.

Parameters
  • element (Element) – An element object.

  • are applied to an element at a node on the element. (Supports) –

Example

Create a support at node 20 of run element 20.

>>> run20 = elements(10, 20)
>>> anc = Anchor("anc20", 20)
>>> anc.apply([run20])

5.8.4. Z

class psi.supports.Z(name, point, direction=None, gap=0.0, mu=0.0, is_rotational=False, is_snubber=False)

Support aligned with the global z direction.

Methods

__init__(name, point, direction=None, gap=0.0, mu=0.0, is_rotational=False, is_snubber=False)

Create a support instance at a node point.

Parameters
  • name (str) – Unique name for pipe object.

  • point (Point) – Point instance where support is located.

  • direction (str) – Support direction. Default is None. “+” and “-” is used to specify a directional support (non-linear).

  • mu (float) – Support friction (non-linear).

  • is_rotational (bool) – True if the support is a rotational restraint.

  • is_snubber (bool) – True if the support is snubber.

  • translation_stiffnesss (float) – Stiffness in the translational direction.

  • rotation_stiffness (float) – Stiffness in the rotational direction.

  • gap (float) – Support gap (non-linear).

apply(element)

Apply the support to the element.

Parameters
  • element (Element) – An element object.

  • are applied to an element at a node on the element. (Supports) –

Example

Create a support at node 20 of run element 20.

>>> run20 = elements(10, 20)
>>> anc = Anchor("anc20", 20)
>>> anc.apply([run20])

5.8.5. LineStop

class psi.supports.LineStop(name, point, direction=None, gap=0.0, mu=0.0, is_rotational=False, is_snubber=False)

Support aligned with the axial direction of the pipe.

LineStop supports are used to redirect thermal movement. They are commonly used for rack piping with expansion loops.

Warning

Implementation incomplete, do not use!

Methods

__init__(name, point, direction=None, gap=0.0, mu=0.0, is_rotational=False, is_snubber=False)

Create a support instance at a node point.

Parameters
  • name (str) – Unique name for pipe object.

  • point (Point) – Point instance where support is located.

  • direction (str) – Support direction. Default is None. “+” and “-” is used to specify a directional support (non-linear).

  • mu (float) – Support friction (non-linear).

  • is_rotational (bool) – True if the support is a rotational restraint.

  • is_snubber (bool) – True if the support is snubber.

  • translation_stiffnesss (float) – Stiffness in the translational direction.

  • rotation_stiffness (float) – Stiffness in the rotational direction.

  • gap (float) – Support gap (non-linear).

apply(element)

Apply the support to the element.

Parameters
  • element (Element) – An element object.

  • are applied to an element at a node on the element. (Supports) –

Example

Create a support at node 20 of run element 20.

>>> run20 = elements(10, 20)
>>> anc = Anchor("anc20", 20)
>>> anc.apply([run20])

5.8.6. Guide

class psi.supports.Guide(name, point, direction=None, gap=0.0, mu=0.0, is_rotational=False, is_snubber=False)

Support perpendicular to the pipe run direction.

An exceptional case is a guided riser support which restricts movement in the horizontal plane.

Warning

Implementation incomplete, do not use!

Methods

__init__(name, point, direction=None, gap=0.0, mu=0.0, is_rotational=False, is_snubber=False)

Create a support instance at a node point.

Parameters
  • name (str) – Unique name for pipe object.

  • point (Point) – Point instance where support is located.

  • direction (str) – Support direction. Default is None. “+” and “-” is used to specify a directional support (non-linear).

  • mu (float) – Support friction (non-linear).

  • is_rotational (bool) – True if the support is a rotational restraint.

  • is_snubber (bool) – True if the support is snubber.

  • translation_stiffnesss (float) – Stiffness in the translational direction.

  • rotation_stiffness (float) – Stiffness in the rotational direction.

  • gap (float) – Support gap (non-linear).

apply(element)

Apply the support to the element.

Parameters
  • element (Element) – An element object.

  • are applied to an element at a node on the element. (Supports) –

Example

Create a support at node 20 of run element 20.

>>> run20 = elements(10, 20)
>>> anc = Anchor("anc20", 20)
>>> anc.apply([run20])

5.8.7. Spring

class psi.supports.Spring(name, point, spring_rate, cold_load, variability=25, is_constant=False)

Warning

Implementation incomplete, do not use!

Methods

__init__(name, point, spring_rate, cold_load, variability=25, is_constant=False)

Create a support instance at a node point.

Parameters
  • name (str) – Unique name for pipe object.

  • point (Point) – Point instance where support is located.

  • translation_stiffnesss (float) –

    Stiffness in the translational directions.

    Note

    The default value is based on english units.

  • rotation_stiffness (float) –

    Stiffness in the rotational directions.

    Note

    The default value is based on english units.

apply(element)

Apply the support to the element.

Parameters
  • element (Element) – An element object.

  • are applied to an element at a node on the element. (Supports) –

Example

Create a support at node 20 of run element 20.

>>> run20 = elements(10, 20)
>>> anc = Anchor("anc20", 20)
>>> anc.apply([run20])

5.8.8. Displacement

class psi.supports.Displacement(name, opercase, point, dx=None, dy=None, dz=None, rx=None, ry=None, rz=None)

A displacement support.

Displacements are applied to a stiffness matrix similar to how supports are. Supports are in essence a special case with 0 movement in the direction of stiffness. Using the penalty approach, the stiffness and force terms in the global system matrix are modified.

Support displacements are associated to an operating case and typically used with a thermal case to model equipment nozzle movements.

Note

If a displacement is not explicitly defined for a particular direction, (i.e. None) the pipe is free to move in that direction.

Methods

__init__(name, opercase, point, dx=None, dy=None, dz=None, rx=None, ry=None, rz=None)

Create a displacement support instance.

apply(element)

Apply the support to the element.

Parameters
  • element (Element) – An element object.

  • are applied to an element at a node on the element. (Supports) –

Example

Create a support at node 20 of run element 20.

>>> run20 = elements(10, 20)
>>> anc = Anchor("anc20", 20)
>>> anc.apply([run20])

5.8.9. SupportContainer

class psi.supports.SupportContainer

Methods

apply(supports=[], elements=[])

Apply supports to elements.

A reference of the support is attached to each element, a one to one assignment.

Parameters
  • supports (list) – A list of supports

  • elements (list) – A list of elements. If elements is None, loads are applied to all elements.