template<typename ScalarT, int VelocityVecDim = 3>
class terra::fe::wedge::operators::shell::Q1CenteredAdvDiffRateOperator< ScalarT, VelocityVecDim >
Matrix-free Galerkin rate operator for the unsteady advection-diffusion equation.
Computes
\[
\mathrm{dst} = -\bigl( K_\text{adv} + K_\text{diff} \bigr)\,\mathrm{src}
= -\!\!\int_\Omega \phi_i \,(\mathbf{u}\!\cdot\!\nabla\phi_j)\,\mathrm{d}x \,T_j
-\!\!\int_\Omega \kappa\,\nabla\phi_i\!\cdot\!\nabla\phi_j\,\mathrm{d}x \,T_j .
\]
In the lumped-mass time-stepping picture this is the (assembled, additively reduced) right-hand side of \( M_\text{lumped}\,\dot{T} = -K T + F \) from which the actual nodal rate \(\dot{T}_i\) is recovered by pointwise division by the lumped mass diagonal.
This is the central building block of the explicit centred Runge-Kutta-2 energy integrator that mirrors TERRA's advect/advance pair (TERRA-group/src/code/energy.f:6-181 and convct.F:207-244). Unlike UnsteadyAdvectionDiffusionSUPG, there is no SUPG stabilisation, no mass term in the bilinear form, no time-step or Dirichlet row treatment in the kernel, and no lumping flag — the operator is purely the stiffness contribution \(K\) with the leading minus sign baked in. Boundary conditions are handled outside, by overwriting Dirichlet nodes after each RK substage, matching TERRA's strategy of zeroing dhdt at top/bottom rows.
The advection term uses the centred Galerkin form \(\int \phi_i (\mathbf{u}\cdot\nabla\phi_j)\) — no upwinding, no limiter. This is the Q1 analogue of TERRA's face-centred update \(\tfrac{1}{2}(T_i + T_j)\cdot\mathbf{u}\!\cdot\!\mathbf{n}\) at energy.f:73.