refactor: extract s_write_field helper in post_process s_save_data#1600
Conversation
Collapse the 38 repeated fill->name->write->clear stanzas in s_save_data into calls to a new private helper s_write_field. The helper optionally slices a scalar_field into out%q_sf, writes varname to the database, and clears varname on return. Also fixes the ib_markers block which was missing the varname clear, and moves the elasticity/hyperelasticity varname clear inside the prim_vars_wrt guard where it belongs. Part of MFlowCode#1523
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #1600 +/- ##
==========================================
- Coverage 60.48% 60.42% -0.07%
==========================================
Files 83 83
Lines 19888 19835 -53
Branches 2951 2952 +1
==========================================
- Hits 12030 11985 -45
+ Misses 5864 5856 -8
Partials 1994 1994 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
sbryngelson
left a comment
There was a problem hiding this comment.
Reviewed as a behavior-equivalence audit of the refactor. Traced all 38 converted stanzas against their originals:
- Every
src-passing call uses the same field, index expression, andx_beg:x_end,y_beg:y_end,z_beg:z_endslice as the original inline fill (checked the index-bearing ones:mom,vel,Y,alpha_rho_e,tau,xi,alpha,color_function, all qbmmrs/vs/ps/ms(i)). - Every no-
srccall still hasout%q_sfpopulated beforehand by a retained inline slice, ans_derive_*call, or a manual loop — none orphaned. s_write_fieldis a sibling module procedure;outresolves via use-association fromm_data_output(public module var), andname_len/scalar_field/wpfrom their respective modules. ✓- The
varname-clear relocation is inert: every DB write is preceded by a full internalwrite(varname,...), which blank-pads the whole fixed-length scalar, so the clears were always redundant.
Output-neutral, as claimed. One latent (non-blocking) note inline.
There was a problem hiding this comment.
Pull request overview
Note
Copilot couldn't run its full agentic review because no GitHub Actions runner was available. Make sure your repository has a runner available to run Copilot's review, or add a copilot-setup-steps.yml file specifying one with the runs-on attribute. See the docs for more details.
Refactors s_save_data in post-process startup to reduce duplicated “slice → write → clear” sequences by introducing a helper routine, while also fixing a missing varname clear in the ib_markers output path and tightening variable clearing for elasticity/hyperelasticity.
Changes:
- Extract repeated output logic into a new helper subroutine
s_write_field. - Replace many manual
out%q_sfslice + write +varnameclear stanzas with calls tos_write_field. - Fix
ib_markersto clearvarnameconsistently and adjust clearing placement for elasticity/hyperelasticity to be insideprim_vars_wrtguards.
| impure subroutine s_write_field(varname, t_step, src, x_beg, x_end, y_beg, y_end, z_beg, z_end) | ||
|
|
||
| character(LEN=name_len), intent(inout) :: varname | ||
| integer, intent(in) :: t_step | ||
| type(scalar_field), intent(in), optional :: src | ||
| integer, intent(in), optional :: x_beg, x_end, y_beg, y_end, z_beg, z_end | ||
|
|
||
| if (present(src)) then | ||
| @:ASSERT(present(x_beg) .and. present(x_end) .and. present(y_beg) .and. present(y_end) .and. present(z_beg) & | ||
| & .and. present(z_end), "s_write_field: src requires all six output bounds") | ||
| out%q_sf(:,:,:) = src%sf(x_beg:x_end,y_beg:y_end,z_beg:z_end) | ||
| end if |
| @:ASSERT(present(x_beg) .and. present(x_end) .and. present(y_beg) .and. present(y_end) .and. present(z_beg) & | ||
| & .and. present(z_end), "s_write_field: src requires all six output bounds") |
Claude Code ReviewHead SHA: 78508fe Files changed:
FindingsPrecision discipline:
- & -offset_z%beg:p + offset_z%end))
+ & -offset_z%beg:p + offset_z%end), wp)
Fix: |
…FlowCode#1600) Co-authored-by: Spencer Bryngelson <sbryngelson@gmail.com>
Description
Collapse the 38 repeated fill->name->write->clear stanzas in s_save_data into calls to a new private helper s_write_field. The helper optionally slices a scalar_field into out%q_sf, writes varname to the database, and clears varname on return.
Also fixes the ib_markers block which was missing the varname clear, and moves the elasticity/hyperelasticity varname clear inside the prim_vars_wrt guard where it belongs.
Part of #1523
Type of change (delete unused ones)
Testing
Ran ./mfc.sh test -j 4 locally on Ubuntu/WSL with GNU compiler and MPI. 578 tests passed, 0 failed. Output-neutral by construction — the helper performs the exact same slice, write, and clear in the same order, so database files are bit-identical.
Checklist
Check these like this
[x]to indicate which of the below applies.See the developer guide for full coding standards.
AI code reviews
Reviews are not retriggered automatically. To request a review, comment on the PR:
@claude full review— Claude full review (also triggers on PR open/reopen/ready)claude-full-review— Claude full review via label