Skip to content

refactor: consolidate grid, stretch, and body force params into derived types#1432

Open
sbryngelson wants to merge 14 commits into
masterfrom
refactor/derived-types
Open

refactor: consolidate grid, stretch, and body force params into derived types#1432
sbryngelson wants to merge 14 commits into
masterfrom
refactor/derived-types

Conversation

@sbryngelson
Copy link
Copy Markdown
Member

@sbryngelson sbryngelson commented May 12, 2026

Summary

Consolidates several families of flat scalar parameters into Fortran derived types, reducing the number of global variables and making the grid/stretch/body-force structure explicit. Implements items 1, 5, and 7 from issue #1427.

Changes

Grid coordinate arrays → type(grid_axis)

  • x_cc, x_cb, x_cb_s (and y/z equivalents) consolidated into type(grid_axis) :: x, y, z
  • dx, dy, dz min spacing moved into grid_axis%min_spacing
  • Analytical IC codegen in toolchain/mfc/case.py updated to emit x%cc(i) instead of x_cc(i)

Grid stretching → type(bounds_info)

  • x_a/x_b, y_a/y_b, z_a/z_b reference points consolidated into x_stretch, y_stretch, z_stretch

Body force parameters → type(body_force_axis)

  • bf_x/k_x/w_x/p_x/g_x (and y/z) consolidated into type(body_force_axis) :: bf_x, bf_y, bf_z

Boundary condition struct → type(bc_dir_t)

  • Introduced bc_dir_t to hold BC type and payload separately; strips BC payload fields out of int_bounds_info
  • Renamed all bc_x%beg/end, bc_y%beg/end, bc_z%beg/end parameter keys to bc%x%beg/end, bc%y%beg/end, bc%z%beg/end (new compound naming)
  • Updated all ~100 example and benchmark case.py files and golden test files to use new names
  • Fixed remove_higher_dimensional_keys in toolchain/mfc/case_utils.py to handle the new %dir% key format (the old regex only matched bc_y%beg style; bc%y%beg would not be stripped for lower-dimensional cases)

IB dynamics → type(ib_dynamics_t)

  • Consolidated immersed boundary dynamics arrays into a single struct

Other

Test plan

  • ./mfc.sh precheck passes (all 6 checks)
  • Body force tests pass
  • Grid stretching tests pass
  • remove_higher_dimensional_keys fix verified: bc%y%beg and bc%z%beg correctly stripped for 1D/2D cases
  • CI green

@qodo-code-review
Copy link
Copy Markdown
Contributor

ⓘ You've reached your Qodo monthly free-tier limit. Reviews pause until next month — upgrade your plan to continue now, or link your paid account if you already have one.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 12, 2026

Codecov Report

❌ Patch coverage is 66.62791% with 287 lines in your changes missing coverage. Please review.
✅ Project coverage is 64.94%. Comparing base (28863b1) to head (506c745).
⚠️ Report is 1 commits behind head on master.

Files with missing lines Patch % Lines
src/common/m_boundary_common.fpp 71.87% 19 Missing and 17 partials ⚠️
src/post_process/m_data_output.fpp 41.81% 32 Missing ⚠️
src/pre_process/m_icpp_patches.fpp 31.91% 31 Missing and 1 partial ⚠️
src/pre_process/m_start_up.fpp 40.00% 19 Missing and 5 partials ⚠️
src/common/m_mpi_common.fpp 29.03% 14 Missing and 8 partials ⚠️
src/simulation/m_bubbles_EL.fpp 30.00% 20 Missing and 1 partial ⚠️
src/pre_process/m_boundary_conditions.fpp 0.00% 16 Missing ⚠️
src/simulation/m_data_output.fpp 46.42% 15 Missing ⚠️
src/simulation/m_ibm.fpp 67.64% 11 Missing ⚠️
src/common/m_chemistry.fpp 52.38% 10 Missing ⚠️
... and 20 more
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1432      +/-   ##
==========================================
- Coverage   64.95%   64.94%   -0.02%     
==========================================
  Files          72       72              
  Lines       18879    18893      +14     
  Branches     1571     1584      +13     
==========================================
+ Hits        12263    12270       +7     
- Misses       5640     5646       +6     
- Partials      976      977       +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Replace flat allocatable arrays x_cb/y_cb/z_cb, x_cc/y_cc/z_cc,
and dx/dy/dz with a derived type having .cb, .cc, and .spacing
components. All three executables (pre_process, simulation,
post_process) updated across 47 files.

Key design decisions:
- pre_process keeps scalar dx/dy/dz as minimum cell-width scalars;
  only x_cb and x_cc are folded into x%cb and x%cc
- OpenMP GPU target uses whole-struct declare target (x, y, z) since
  component-level declare target is invalid; OpenACC uses component-level
- 2dHardcodedIC.fpp wraps dx*dy in #ifdef MFC_PRE_PROCESS for the
  scalar vs per-cell context difference

Special variable collisions fixed:
- m_chemistry.fpp: local integer x/y/z -> cx/cy/cz
- m_weno.fpp: local real y(1:4) scratch -> ys
- m_viscous.fpp: local real dx(1:3) scratch -> ds
- m_ibm.fpp: local scalar dx/dy/dz -> dx_loc/dy_loc/dz_loc
- m_cbc.fpp: Fypp template d${XYZ}$ -> ${XYZ}$%spacing
Implements items 7 and 5 from issue #1427:
- x_a/x_b/y_a/y_b/z_a/z_b -> type(bounds_info) :: x_stretch, y_stretch, z_stretch
- bf_x/bf_y/bf_z + k_x/w_x/p_x/g_x (and y/z) -> type(body_force_axis) :: bf_x, bf_y, bf_z
@sbryngelson sbryngelson force-pushed the refactor/derived-types branch from 882206f to 3f9f382 Compare May 12, 2026 20:38
@sbryngelson sbryngelson force-pushed the refactor/derived-types branch from 15f3a64 to eb90ba8 Compare May 12, 2026 23:24
Remove module-level dx, dy, dz scalars from pre_process m_global_parameters.
Add min_spacing field to the grid_axis derived type so each axis carries its
own minimum cell width. Update all call sites in m_grid, m_start_up,
m_icpp_patches, m_mpi_common, and 2dHardcodedIC.
After reading grid data from files, compute and store min_spacing on each
axis in both serial and parallel paths. Matches the pre_process pattern
so min_spacing is consistent across all three executables.
Group the three directional boundary condition variables (bc_x, bc_y,
bc_z of type bc_dir_t) into a single bc_xyz_info struct accessed as
bc%x, bc%y, bc%z. Updates all Fortran source, Fypp macros, Python
toolchain, example cases, and documentation.
PR #1432 renamed bc_x%beg -> bc%x%beg. The remove_higher_dimensional_keys
helper only matched the old _y/_z separator style (.+_y, y_.+), so
bc%y%beg and bc%z%beg were not removed for lower-dimensional cases.
Add %{dim}% substring check to cover the new compound key format.
- m_thinc.fpp: take master's extended Fypp for-loop tuple (STENCIL_VAR,
  COORDS, X_BND/Y_BND/Z_BND), update CC_PRI x_cc/y_cc/z_cc -> x%cc/y%cc/z%cc
- m_rhs.fpp: take master's drop of 'dummy' workaround condition, keep bc%y%beg naming
- m_riemann_solvers.fpp: take master's unified Re_avg_rsx_vf indexing (j,k,l)
  for all cylindrical faces, update y_cb/y_cc -> y%cb/y%cc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant