pycba.load.LoadIC#

class LoadIC(i_span, kappa, EI=None)[source]#

Bases: Load

Imposed-curvature (initial-strain) member load.

Applies a free (stress-free) curvature field \(\kappa_\text{imp}(x)\) along the member. Unlike a transverse load, an imposed curvature induces no internal forces on a statically-determinate (simply-supported) span – it produces only a free deflected shape. On a restrained or continuous structure, however, the restraint of this free curvature generates real bending moments and reactions, exactly as for differential settlement or a temperature gradient.

This is the mechanism by which PyBridge (and other downstream time-dependent prestressed-concrete tools) apply creep, shrinkage and thermal curvatures to a continuous beam: the time-dependent sectional analysis yields a free curvature distribution which is imposed here, and PyCBA returns the resulting restraint moments and reactions.

The curvature field is described by a polynomial in the local member coordinate x (measured from the i-end):

\[\kappa_\text{imp}(x) = \kappa_0 + \kappa_1 x + \kappa_2 x^2 + \dots\]

Constant (\(\kappa_0\) only) and linear (\(\kappa_0, \kappa_1\)) fields are the common cases; arbitrary polynomial order is supported.

The fixed-end forces are derived by the same force-method (flexibility) integration used for the non-prismatic element. See the Imposed-curvature (initial-strain) loads section of the Theoretical Basis in the documentation for the derivation.

Note

The fixed-end moments scale with the flexural rigidity (e.g. \(M = EI\kappa\) for a uniform curvature on a fixed-fixed prismatic member). The rigidity is supplied to the load by the Beam when the loads are parsed; it therefore need not be specified by the user.

Creates an imposed-curvature load for the member.

Parameters:
  • i_span (int) – The member index to which the load is applied.

  • kappa (float or array_like of float) – The imposed-curvature polynomial coefficients in increasing powers of x: [k0, k1, k2, ...] => kappa(x) = k0 + k1*x + k2*x^2 + .... A scalar is interpreted as a uniform curvature kappa(x) = k0.

  • EI (float or pycba.section.SectionEI, optional) – The flexural rigidity of the member. Normally left None and populated by the owning Beam; only required to evaluate the fixed-end forces (get_cnl()).

Methods

H

Heaviside step function: values less than zero are clipped to zero; values greater than zero are clipped to unity; zeros are retained.

MB

Macaulay bracket: clipping values less than zero to zero.

get_cnl

Consistent Nodal Loads (fixed-fixed) for the imposed curvature.

get_mbr_results

Simply-supported member results from the free (imposed) curvature.

get_ref

Returns the Released End Forces for a span of length L of element eType: converts the Consistent Nodal Loads of the applied loading to the correct nodal loading depending on the element type.

kappa_imp

Evaluate the imposed-curvature field \(\kappa_\text{imp}(x)\).

kappa_imp(x)[source]#

Evaluate the imposed-curvature field \(\kappa_\text{imp}(x)\).

Parameters:

x (ndarray) – Position(s) along the member (local coordinate from the i-end).

Returns:

The imposed curvature at x.

Return type:

ndarray

get_cnl(L, eType)[source]#

Consistent Nodal Loads (fixed-fixed) for the imposed curvature.

Parameters:
  • L (float) – The length of the member

  • eType (int) – The member element type

Returns:

Consistent Nodal Loads for this load type

Return type:

LoadCNL

get_mbr_results(x, L)[source]#

Simply-supported member results from the free (imposed) curvature.

The imposed curvature produces no internal moment or shear on a simple span (M = V = 0); it generates only a deflected shape found by integrating the curvature twice subject to D(0) = D(L) = 0:

\[\theta(x) = \theta_0 + \int_0^x \kappa_\text{imp}(s)\,ds, \qquad D(x) = \int_0^x \theta(s)\,ds\]

with the constant \(\theta_0\) chosen so that D(L) = 0.

Parameters:
  • x (ndarray) – Vector of points along the length of the member

  • L (float) – The length of the member

Returns:

res – A populated pycba.types.MemberResults object

Return type:

MemberResults

H(v, value=0.0)#

Heaviside step function: values less than zero are clipped to zero; values greater than zero are clipped to unity; zeros are retained.

Parameters:
  • v (ndarray) – The vector to which the Heaviside function will be applied

  • value (float) – The value of the Heaviside function at zero, usually 0, but sometimes 0.5 (average of adjacent values) or 1.0.

Return type:

ndarray

MB(v)#

Macaulay bracket: clipping values less than zero to zero.

Parameters:

v (ndarray) – The vector to which the Macaulay Bracket will be applied

Return type:

ndarray

get_ref(L, eType)#

Returns the Released End Forces for a span of length L of element eType: converts the Consistent Nodal Loads of the applied loading to the correct nodal loading depending on the element type.

Parameters:
  • L (float) – The length of the member

  • eType (int) – The member element type

Returns:

Released End Forces for this load type: the nodal loads to be applied in the analysis, consistent with the element type.

Return type:

LoadCNL