5.9. psi.loads

Applying loads to model nodes and elements.

Example

Suppose you have a list of elements ‘element_list’ that you want to apply a single or multiple loads to.

To create a Thermal load for operating case 1, type:

>>> t1 = Thermal('T1', 1, 500)
>>> t1.apply(element_list)

Similarly, to add a deadweight load to all active elements corresponding to operating case 1, type:

>>> w1 = Weight('W1', 1)
>>> w1.apply()

For multiple loads use the LoadContainer apply method:

>>> loads.apply([L1, L2, ..., LN], element_list)

Warning

An element can have multiple loads of the same type however each load should be of a different operating case. This is not currently enforced by the program so an element can have two Weight loads defined for the same operating case in which case the weights will be added together.

5.9.1. Weight

class psi.loads.Weight(name, opercase, gfac=1.0)

The element deadweight load.

Includes pipe, insulation, cladding and refractory weight. The weight load is applied as an uniform load across the length of the entire element. The direction of the load vector is always down with respect to the vertical.

Methods

__init__(name, opercase, gfac=1.0)

The weight load for each element.

Parameters
  • name (str) – Unique name for load.

  • opercase (int) – Operating case the load belongs to.

  • gfac (float) – The gfac is set to 1 by default for earth gravity.

apply(elements=None)

Apply the load to the elements.

Parameters

elements (list) – A list of elements. If elements is None, load is applied to the active elements.

Properties

property parent

Returns the LoadContainer instance.

5.9.2. Pressure

class psi.loads.Pressure(name, opercase, pres=0)

The element pressure load.

The calculated sustained stress in most piping codes uses the internal pressure to calculate a primary longitudinal stress typically equal to P*D/4*t which is added to the primary bending stress.

The pressure on capped ends due to the system being closed also has the effect of pulling on the pipe axially and imparting a tensile thrust load.

Note

If the pressure stress per applicable piping code is accounted for, the pressure due to capped ends need not be considered as doing so will in effect double the pressure stress.

The pressure can have a stiffening effect on the piping system called the Bourdon effect. For large D/t ratio pipe bends with large system pressures, the effects of ovalization can be made worse due to this effect. When a straight pipe is pressurized it wants to shrink axially due to the radial growth whereas a pipe bend wants to open up.

A pressure dependent hoop stress can also be calculated and typically used for pipe wall sizing based on code requirements. The hoop stress is based on the highest pressure the system is expected to have. The final wall thickness is determined by adding the corrosion allowable, mill tolerance and also accounting for reductions due to threads. The calculated value is then added to the minimum thickess calculation and rounded up.

Methods

__init__(name, opercase, pres=0)

The pressure load for each element.

Parameters
  • name (str) – Unique name for load.

  • opercase (int) – Operating case the load belongs to.

  • pres (float) – The pressure is set to 0 by default.

apply(elements=None)

Apply the load to the elements.

Parameters

elements (list) – A list of elements. If elements is None, load is applied to the active elements.

Properties

property parent

Returns the LoadContainer instance.

5.9.3. Thermal

class psi.loads.Thermal(name, opercase, temp, tref)

Thermal expansion load.

Methods

__init__(name, opercase, temp, tref)

The thermal load for each element.

Parameters
  • name (str) – Unique name for load.

  • opercase (int) – Operating case the load belongs to.

  • temp (float) – The temperature of the element(s).

  • tref (float) – The reference temperature used to calculate delta T.

apply(elements=None)

Apply the load to the elements.

Parameters

elements (list) – A list of elements. If elements is None, load is applied to the active elements.

Properties

property parent

Returns the LoadContainer instance.

5.9.4. Hydro

class psi.loads.Hydro(name, opercase, pres=0)

Hydro test pressure.

Test pressure is typically 1.5 times the design pressure. Hydro testing is typically performed in the cold installed configuration to ensure there are no leaks.

During testing, spring cans are locked using travel stops so that they behave as full Y supports. Spring can bodies are designed to support additional deadweight loads imposed during testing. Extra precaution should be taken to ensure these loads are acceptable for very large piping.

Pneumatic testing can also be used along with RT (x-ray) to avoid overloading a system. The individual spool pieces can also be tested on the factory floor by capping both ends with a blind flange and then pumping it with water.

Warning

The hydro load only accounts for the sustained pressure stress due to test pressure. A fluid weight load should also be added in conjunction to account for the mechanical loading. See code below:

>>> hp = Hydro('HP', 1, 200)
>>> fl = Fluid.from_file('F1', 1, "water")
>>> loads.apply([hp, fl])   # active elements
...
>>> lc1 = LoadCase('L1', 'sus', [Hydro, Fluid], [1, 1])

Methods

__init__(name, opercase, pres=0)

The pressure load for each element.

Parameters
  • name (str) – Unique name for load.

  • opercase (int) – Operating case the load belongs to.

  • pres (float) – The pressure is set to 0 by default.

apply(elements=None)

Apply the load to the elements.

Parameters

elements (list) – A list of elements. If elements is None, load is applied to the active elements.

Properties

property parent

Returns the LoadContainer instance.

5.9.5. Fluid

class psi.loads.Fluid(name, opercase, rho, gfac=1.0)

Contents load

Methods

__init__(name, opercase, rho, gfac=1.0)

Initialize self. See help(type(self)) for accurate signature.

apply(elements=None)

Apply the load to the elements.

Parameters

elements (list) – A list of elements. If elements is None, load is applied to the active elements.

Properties

property parent

Returns the LoadContainer instance.

5.9.6. Wind

class psi.loads.Wind(name, opercase, profile=[], dirvec=(1, 0, 0), shape=0.7, gelev=0, is_projected=True)

Wind force applied as uniform loading.

The pressure due to wind is applied as a uniform force. It is a function of the pipe elevation. A pressure profile versus elevation table is used to determine the pressure at node i and j of a piping element. Then the computed average of the two pressures is applied over the entire element projected length as an uniform load.

Note

For more accurate results make sure to create a node anywhere the piping system crosses the ground elevation.

If the pipe elevation at a node is less than the ground elevation the pressure contribution from that node is 0. If both from and to point elevations are less than ground, both pressures are 0 and thus the average pressure is also 0.

Parameters
  • name (str) – Unique name for load.

  • opercase (int) – Operating case the load belongs to.

  • profile (list of tuples) –

    Wind pressure profile.

    List of elevation versus pressure tuples given in the format [(elev1, pres1), (elev2, pres2), … (elevn, presn)] with respect to the ground elevation.

    Note

    The first elevation (elev1) corresponds to the ground elevation and must be set to zero. In other words, the 0 reference of the profile is located at ground elevation. Use the Wind.gelev attribute to set the global vertical position of ground.

  • shape (float) – The element wind shape factor. Set to a typical default value of 0.7.

  • dirvec (tuple) – The wind vector direction given in global coordinates (x, y, z).

  • gelev (float) – The ground elevation with respect to global coordinates. Elevation below which the wind pressure is zero. Default is set to 0.

  • is_projected (bool) – If true, the load is applied over the projected length of the element in the respective global direction. Default is set to True.

Methods

__init__(name, opercase, profile=[], dirvec=(1, 0, 0), shape=0.7, gelev=0, is_projected=True)

Initialize self. See help(type(self)) for accurate signature.

apply(elements=None)

Apply the load to the elements.

Parameters

elements (list) – A list of elements. If elements is None, load is applied to the active elements.

Properties

property parent

Returns the LoadContainer instance.

5.9.7. Seismic

class psi.loads.Seismic(name, opercase, gx=0.0, gy=0.0, gz=0.0, gfac=1.0)

Three directional seismic loading applied as a gravity (g) factor in global coordinates.

Parameters
  • name (str) – Unique name for load.

  • opercase (int) – Operating case the load belongs to.

  • gx (float) – Seismic g load factor in the global x direction. Defaults to 0.

  • gy (float) – Seismic g load factor in the global y direction. Defaults to 0.

  • gz (float) – Seismic g load factor in the global z direction. Defaults to 0.

  • gfac (float) – Gravity factor with 1 being earth gravity. Defaults to 1.

Methods

__init__(name, opercase, gx=0.0, gy=0.0, gz=0.0, gfac=1.0)

The weight load for each element.

Parameters
  • name (str) – Unique name for load.

  • opercase (int) – Operating case the load belongs to.

  • gfac (float) – The gfac is set to 1 by default for earth gravity.

apply(elements=None)

Apply the load to the elements.

Parameters

elements (list) – A list of elements. If elements is None, load is applied to the active elements.

Properties

property parent

Returns the LoadContainer instance.

5.9.8. LoadContainer

class psi.loads.LoadContainer

Methods

apply(loads=[], elements=None)

Apply loads to elements.

A reference for each load is assigned to each element.

Note

One pipe element can be assigned multiple loads of the same type. Each load must be associated with a different operating case.

Parameters
  • loads (list) – A list of loads

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