Note for now much of the docs is LLM written. This was done to save time and focus on code development. The docs have been LOOSLEY reviewed. However, the code itself has been either fully written by hand or fully reviewed. Therefore, the docs should at the moment be seen as a loose resource rather than authoratiative (and this is on top of the general ability for docs to drift)
4.7 KiB
Operator migration: code-size estimate
Measured from the working trees on 2026-09-24, after the rotational-force port. These are source-line counts, not a claim that every old capability has migrated. The original repository is retained: total source across both repositories has grown. The replacement implementation is substantially smaller.
| Production scope | MeanField | SERiF | Reduction |
|---|---|---|---|
| Closure, hydrostatic balance, mixed gravity, gravitational force and rotational force, including their operator machinery | 15,995 | 2,145 | 13,850 lines (86.6%) |
| Same comparison, excluding blank and comment-only lines | 12,860 | 1,632 | 11,228 lines (87.3%) |
| More conservative baseline: only the old stateless kernels and rigid-rotation law, versus the entire new layer above | 4,319 | 2,145 | 2,174 lines (50.3%) |
SERiF's count charges all of src/include/serif/equations/, all of
src/include/serif/operators/, both MFEM binding/DOF-map headers in
src/include/serif/discretization/backend/, and discretization/forms/value.hpp
to these migrated equations. This includes the reusable infrastructure, not just
the short physics files. Both sides exclude mesh generation, general mapping,
EOS implementation, pre-existing term/form/quadrature infrastructure, build files,
documentation and tests. The old generic field/DOF infrastructure is also excluded;
charging the new bindings makes the estimate more conservative on the new side.
The old production manifest consists of interface and implementation files for:
| Old family | File stems under libmeanfield/{interface,impl}/operators/ |
Lines |
|---|---|---|
| Closure | kernels/barotropic_closure_kernels, contexts/barotropic_closure_linearization_context, prepared_barotropic_closure, prepared_barotropic_closure_operator |
2,401 |
| Hydrostatic | kernels/hydrostatic_equilibrium_kernels, contexts/hydrostatic_equilibrium_context, prepared_hydrostatic_equilibrium, prepared_hydrostatic_equilibrium_operator |
3,141 |
| Mixed gravity | gravity_field, gravity_field_jacobian, kernels/gravity_kernels, contexts/gravity_field_context, prepared_hdiv_mass, prepared_gravity_source |
5,560 |
| Gravity force | kernels/gravity_displacement_force_kernels, prepared_gravity_displacement_force |
2,203 |
| Rotation force | kernels/rotation_displacement_force_kernels, contexts/rotation_displacement_force_context, prepared_rotation_displacement_force, plus interface/physics/rigid_rotation.cppm |
2,518 |
| Shared force contractions | impl/operators/interior_displacement_contractions.hpp |
172 |
Each physical file is counted once. The 4,319-line conservative baseline includes only the eleven kernel interface/implementation and rotation-law files from that manifest. Physical lines include comments and blanks. The secondary code-line estimate removes C++ comments while preserving quoted strings, then counts nonblank lines; formatting differences still affect it.
This addition
Rotation needs 121 lines in two new production headers (87 excluding comments and blanks), plus a net 5 lines in hydrostatic equilibrium to share the law and preserve the old constructor. The operator backend is unchanged. Its old dedicated law/context/kernel/prepared implementation occupies 2,518 lines. The small marginal addition is the clearest evidence that the shared backend is now paying off.
Tests are separate. The new rotational tests and their reference helper occupy 682 physical lines (615 code lines). The current equation-test directory, its shared helpers, and operator compile-time checks total 4,240 lines (3,851 code lines). The selected related old closure/hydrostatic/gravity/rotation tests occupy 17,184 lines (12,872 code lines). These test inventories have different scope, including old solver and optimization checks, so their difference is not presented as a coverage-equivalent saving. Existing test cases are retained without tolerance edits.
The old implementation includes selective cache invalidation, optimized tensor paths, MPI/root-layout plumbing, and parts of the gravity solve that the present SERiF backend does not reproduce. Some reduction therefore comes from deferring capabilities, as well as removing repeated assembly and derivative code. Pressure, global constraints and the complete coupled solver are outside this estimate. Future migration will increase SERiF's count; this is a current footprint comparison, not a prediction of the final percentage.
The final count includes concurrent formatting edits in the equation headers. A
compile-time count extracted during those edits needed constexpr for its
static_assert; that one-keyword correction preserves the rewritten structure.