Repository navigation
Conversation
…aries The residual of the periodic match is added as Q*R, and the solution of the match is Q*U, so the block added to the diagonal must be Q*J*Q^T. Only the rows were rotated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013UkNcoCEH8nFNrHWzhJCar
The coarse levels summed the momentum residuals, gradients and Jacobian blocks of a rotational periodic pair without rotating them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013UkNcoCEH8nFNrHWzhJCar
…stencil The limiters of the velocity components were rotated like a vector when taking the minimum over a periodic pair, and the min and max velocity vectors were rotated instead of the velocity of each neighbour. Now each side sends, in the frame of its match, the min/max of the rotated velocities and of the rotated reconstruction increments, and the limiter is computed once. Nothing changes without rotation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013UkNcoCEH8nFNrHWzhJCar
A point on the rotation axis is its own periodic match. It was handled like a pair of points: it received its own data rotated once in each direction, and in implicit runs its residual and Jacobian were then removed, so its solution never changed. Now it receives the data of every other copy of its control volume (the rotation applied 1 to N-1 times, N = 360 deg / angle), it keeps its equations, and after an implicit update its solution is averaged over the copies, which removes the velocity normal to the axis. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013UkNcoCEH8nFNrHWzhJCar
The mesh of the new test periodic3d_axis is in the TestCases branch fix_periodic_axis. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013UkNcoCEH8nFNrHWzhJCar
Test casesFiles (configurations, histories, meshes, statistics, scripts): periodicBoundaries/axis. 2 MPI ranks, "develop" = Laminar pipe flow on a 30 degree sector with one cell around the axis, against the full pipe (no periodic boundary).
One iteration from the same field, largest difference to the full pipe at the same points (30 degree sector with one cell and 90 degree sector with three cells):
The same holds for a 180 degree sector (two copies). With an upwind scheme or with JST the residual of periodic points differs from the full pipe also away from the axis (a few percent), because the flux over a face cut by the periodic boundary is computed in two parts. This is not changed here. Convergence on the sector that is one cell wide (CFL 10): first-order ROE converges as in the table. Second order without limiter reaches rms[Rho] = -5.4 in 3000 iterations and needs CFL 2 to converge; JST stalls at -3.2 at CFL 10. The 90 degree sector with three cells converges with both (1538 and 2147 iterations, full pipe 1237 and 1314). New test No existing reference value changes. Additional tests (Oct 7)Reproducers, configurations, numeric logs and scripts: geometry. Develop =
These checks extend the original axis evidence above. ALE/GCL and complete moving-geometry sensitivities remain open. Combined release checks: serial and OpenMP2 pass 10 cases / 3175 assertions; partitioned MPI2 and MPI2×OpenMP2 pass on both ranks (2334 / 2238 assertions). These are combined-source checks, not standalone builds of every branch. Complete branch CI and full regression/reference checks remain pending. |

Proposed Changes
Axis points kept an incomplete control volume, slip walls used a one-sided periodic normal, and mesh updates left donor volumes stale. This PR completes that periodic geometry.
Dependency: #2961. Its commits are included until that PR merges; the focused diff is rotation...axis.
Axis points now accumulate all rotated copies of the sector instead of keeping an incomplete control volume. Slip-wall normals merge raw face areas across periodic matches before normalization, including fine and coarse Euler walls. Mesh updates refresh donor volumes before later gradients and residuals use them.
The
periodic3d_axisregression and partitioned unit checks cover wall normals and repeated deformation/Green–Gauss gradients. Its tiny mesh is in TestCases PR #210 on the branchfix_periodic_axis. The pre-existing workflow commit temporarily selects that branch and must be reverted before merging.Moving-flow ALE/GCL and complete geometry sensitivities remain to be checked. Nonlinear dissipation on split faces can still differ from a full mesh. Complete regression-reference checks remain pending.
Validation of the combined periodic source passes serial, partitioned MPI2, OpenMP2 and MPI2×OpenMP2 (10 cases / 3175 serial assertions). Individual branch CI and complete regression/reference checks are pending. Test configurations, meshes, logs and before/after values are in the testcase comment. New regression references are local x86 values and need CI confirmation.
Related Work
PR Checklist