5.2. SDOF-to-MDOF Calibration

calibration.calibrate_model()[source]

Run the full SDOF-to-MDOF calibration pipeline.

The method performs the following steps:

  1. Build mass and stiffness matrices.

  2. Scale the stiffness matrix so that the first analytical period matches T_target.

  3. Extract the first mode shape and compute modal participation factors.

  4. Compute storey shear and drift distribution ratios.

  5. Rebuild the stiffness matrix from shear ratios for mutual consistency with the storey forces.

  6. Transform the SDOF capacity curve to MDOF storey force-drift backbones.

  7. Scale storey forces so that spring stiffnesses match T_target.

  8. (Optional) If storey_heights were provided, build an OpenSees model, verify the period, and run a static pushover for validation.

Returns:

  • floor_masses (list of float) – Diagonal floor masses from the mass matrix.

  • storey_drifts (numpy.ndarray) – Inter-storey drift capacities in metres, shape (nst, n_points).

  • storey_forces (numpy.ndarray) – Storey shear-force capacities in g x mass units, shape (nst, n_points).

  • phi (numpy.ndarray) – First mode shape (roof-normalised).

  • metadata (dict) – Dictionary of calibration metadata including T_target, Gamma, M_eff, shear_ratios, drift_ratios, mass and stiffness matrices, and (when storey_heights is provided) SPO verification results.

Theoretical Background

The SDOF-to-MDOF calibration maps a single-degree-of-freedom (SDOF) spectral capacity curve to storey-level force-deformation relationships for a stick-and-mass MDOF model (Xu et al., 2016; Lu et al., 2020).

First-mode participation

The SDOF spectral displacement \(S_d\) is related to the roof displacement \(u_{\text{roof}}\) through the first-mode participation factor \(\Gamma_1\) and the normalised first-mode shape \(\phi_1\):

\[u_{\text{roof}} = \Gamma_1 \cdot \phi_1^{(n)} \cdot S_d\]

where the participation factor is:

\[\Gamma_1 = \frac{\boldsymbol{\phi}_1^T \mathbf{M} \mathbf{1}} {\boldsymbol{\phi}_1^T \mathbf{M} \boldsymbol{\phi}_1}\]

Storey force distribution

The storey shear forces are distributed proportionally to the first-mode shape. For storey \(i\), the lateral force is:

\[F_i = \frac{m_i \phi_1^{(i)}}{\sum_{j=1}^{n} m_j \phi_1^{(j)}} \cdot V_{\text{base}}\]

where \(V_{\text{base}} = S_a \cdot M_{\text{eff}}\) is the base shear and \(M_{\text{eff}} = \Gamma_1 \sum_i m_i \phi_1^{(i)}\) is the effective modal mass.

Mass matrix

A lumped-mass idealisation assigns one translational degree of freedom per storey. The consistent mass matrix is diagonal:

\[\mathbf{M} = \text{diag}(m_1, m_2, \ldots, m_n)\]

with \(m_i = m_{\text{floor}}\) for intermediate storeys and \(m_n = r_{\text{roof}} \cdot m_{\text{floor}}\) at the roof (default \(r_{\text{roof}} = 0.75\)).

Stiffness grouping and decay

Adjacent storeys are paired into groups of size 2. Within each group the spring stiffness decays with normalised height \(h \in [0, 1]\):

\[k_i = k_0 \cdot \max(1.0 - 0.30\,h_i,\; 0.50)\]

For soft-storey systems a further reduction factor is applied to the ground-floor spring to reproduce the characteristic weak-storey behaviour.

Period matching

The assembled stiffness and mass matrices are used in an eigenvalue problem \((\mathbf{K} - \omega^2 \mathbf{M})\boldsymbol{\phi} = \mathbf{0}\) to obtain the computed fundamental period \(T_{\text{computed}}\). The stiffness matrix is then scaled so that \(T_{\text{computed}} = T_{\text{target}}\), where \(T_{\text{target}}\) is inferred from the first point of the SDOF capacity curve.