pyyeti.cla.DR_Event.apply_uf

DR_Event.apply_uf(sol, m, b, k, nrb, rfmodes)[source]

Applies the uncertainty factors to the modal ODE solution

Parameters:
  • sol (SimpleNamespace) –

    Solution, input only; expected to have:

    .a = modal acceleration time-history matrix
    .v = modal velocity time-history matrix
    .d = modal displacement time-history matrix
    .pg = g-set forces; optional
    
  • m (1d or 2d ndarray or None) – Modal mass; can be vector or matrix or None (for identity)

  • b (1d or 2d ndarray) – Modal damping; vector or matrix

  • k (1d or 2d ndarray) – Modal stiffness; vector or matrix

  • nrb (scalar) – Number of rigid-body modes

  • rfmodes (1d array or None) – Index or bool partition vector specifying where the residual-flexibility modes are; if None, there are no res-flex vectors.

Returns:

solout (dict) – Dictionary of solution namespaces with scaled versions of .a, .v, .d and .pg. The keys are all the “uf_reds” values. Additionally, the displacement member is separated into static and dynamic parts: .d_static, .d_dynamic. On output, .d = .d_static + .d_dynamic. For example, if one of the “uf_reds” tuples is: (1, 1, 1.25, 1), then these variables will exist:

solout[(1, 1, 1.25, 1)].a
solout[(1, 1, 1.25, 1)].v
solout[(1, 1, 1.25, 1)].d
solout[(1, 1, 1.25, 1)].d_static
solout[(1, 1, 1.25, 1)].d_dynamic
solout[(1, 1, 1.25, 1)].pg (optional)

Notes

Uncertainty factors are applied as follows (rb=rigid-body, el=elastic, rf=residual-flexibility):

ruf = rb uncertainty factor
euf = el uncertainty factor
duf = dynamic uncertainty factor
suf = static uncertainty factor

.a_rb and .v_rb - scaled by ruf*suf
.a_el and .v_el - scaled by euf*duf
.a_rf and .v_rf - zeroed out

.d_rb - zeroed out
.d_el - static part:  scaled by euf*suf
      - dynamic part: scaled by euf*duf
.d_rf - scaled by euf*suf

.pg   - scaled by suf

Note that d_el is written out as:

d_el = euf*inv(k_el)*(suf*F_el - duf*(a_el+b_el*v_el))

where:

F = m*a + b*v + k*d