Time integrators

Hulbert-Chung generalized-alpha time integrator.

Function-style API kept independent of FEMOperators/ExplicitDynamics so the existing velocity-Verlet path stays bit-exact for current benchmarks.

Reference: Chung & Hulbert, J. Appl. Mech. 60 (1993) 371-375 (https://doi.org/10.1115/1.2900803); Borden 2012 §3.2.

phast.solvers.time_integrators.gen_alpha_params(rho_inf)[source]

Spectral-radius parameterisation (Borden 2012 eqs 95-97).

rho_inf=0.5 is the Borden 2012 default (high-frequency dissipation); rho_inf=1.0 gives alpha_m = alpha_f = 0.5, beta = 1/4, gamma = 1/2 (zero numerical dissipation, second-order accurate).

phast.solvers.time_integrators.gen_alpha_step(u, v, a, K, M, f_ext, dt, alpha_m, alpha_f, beta, gamma)[source]

One Hulbert-Chung generalized-alpha step for M*a + K*u = f_ext.

Solves the implicit residual:

(1 - alpha_m) M a_{n+1} + alpha_m M a_n
  + (1 - alpha_f) K u_{n+1} + alpha_f  K u_n
  = f_ext_{n+1-alpha_f}

together with the Newmark-beta predictor relations for u_{n+1}, v_{n+1}.

K, M may be dense matrices, vectors (lumped/diagonal), or scalars. Autograd-safe: no in-place ops, no .detach().

phast.solvers.time_integrators.newmark_step(u, v, a, K, M, f_ext, dt, beta=0.25, gamma=0.5)[source]

Implicit Newmark-beta reference (rho_inf=1 limit of gen-alpha).