Skip to content

Fix 6 low-risk pre-process bugs (batch)#1241

Draft
sbryngelson wants to merge 23 commits intoMFlowCode:masterfrom
sbryngelson:fix/low-risk-bugfixes-batch
Draft

Fix 6 low-risk pre-process bugs (batch)#1241
sbryngelson wants to merge 23 commits intoMFlowCode:masterfrom
sbryngelson:fix/low-risk-bugfixes-batch

Conversation

@sbryngelson
Copy link
Member

@sbryngelson sbryngelson commented Feb 22, 2026

User description

Summary

Batches 6 low-risk bug fixes in pre-process code paths. These fix real numerical issues in IC generation but don't touch simulation GPU kernels or MPI hot paths.

Included fixes

Supersedes

Closes #1174, closes #1179, closes #1183, closes #1216, closes #1217, closes #1188, fixes #1197, fixes #1202, fixes #1206, fixes #1208, fixes #1221, fixes #1222

Test plan

  • All GitHub CI checks pass (ubuntu MPI debug, ubuntu no-mpi, macOS)
  • All changes are in pre-process or MPI setup — no simulation hot-path modifications
  • Verify with stretched grid, QBMM, MHD, and IB test cases if available

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes

    • Fixed grid coordinate calculation bounds in y and z directions
    • Removed redundant perturbation calculations
    • Corrected 3D initialization for hyper_cleaning simulations
    • Improved perturbation field scaling
  • Improvements

    • Optimized MPI broadcast operations for immersed boundary variables
  • Validation

    • Added check to prevent unsupported 2D simulation configurations
  • Chores

    • Adjusted an internal numeric constant representation

CodeAnt-AI Description

Fix pre-process bugs that caused incorrect initial conditions and MPI broadcasts

What Changed

  • Restores the THINC monotonicity cutoff (now a real) so interface limiting is applied as intended instead of being silently disabled
  • Corrects stretched-grid cell-center calculations for y and z so stretched grids produce correct coordinates when dimensions differ
  • Removes a duplicated accumulation so QBMM bubble perturbation amplitude matches the intended value (was doubled)
  • Ensures velocity perturbations use the original velocity order so y-perturbations are computed from the unmodified x-velocity
  • Moves and sizes immersed-boundary variable broadcasts correctly so IB velocities, angular velocities, and angles are propagated reliably across MPI ranks
  • Initializes the hyper-cleaning field across all 3D planes, guards 2D runs, and fixes numeric literals so psi values are correct and consistent

Impact

✅ Correct THINC interface limiting
✅ Accurate stretched-grid coordinates
✅ Correct QBMM bubble perturbation amplitudes

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 6 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

@codeant-ai
Copy link
Contributor

codeant-ai bot commented Feb 22, 2026

Nitpicks 🔍

🔒 No security issues identified
⚡ Recommended areas for review

  • IB broadcast placement
    The broadcast of IB patch arrays (vel, angular_vel, angles) has been moved into the IB broadcast block. Verify there are no remaining duplicated broadcasts, that the size/count (3) matches the array shapes everywhere, and that ordering of broadcasts matches the data layout expected on receivers.

  • Monotonicity cutoff type
    The parameter moncon_cutoff was changed from an integer to a real. Verify every usage site expects a real (comparisons, arithmetic, interfaces). Mixed-type assumptions elsewhere could silently convert or truncate values or change logic in monotonicity checks.

  • Y cell-center bounds
    The y cell-center calculation was corrected to use the y-dimension range. Validate index ranges of y_cb and y_cc (uses of -1:n-1) are consistent with alloc/usage elsewhere, and that the min cell size dy and subsequent MPI reduction use the updated values.

  • Z cell-center bounds
    The z cell-center calculation was corrected to use the z-dimension range. Confirm z_cb/z_cc indexing and dz computation are correct for both serial and parallel grid routines and consistent with any callers.

  • Perturbation assignment order
    The order of assignments for perturbed momenta was changed so mom_idx%end is set from the original mom_idx%beg before mom_idx%beg is scaled. Confirm no other code in the same loop reads mom_idx%beg after it is updated (should use original value) and consider making the use of the original value explicit to avoid future ordering bugs.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR batches 6 bug fixes in pre-process code paths that address real numerical issues in initial condition generation. The fixes correct type declarations, array bounds, duplicate operations, statement ordering, loop coverage, and MPI broadcast placement.

Changes:

  • Fixed moncon_cutoff declared as integer instead of real(wp), which silently truncated 1e-8 to 0 and disabled MUSCL-THINC monotonicity limiting
  • Corrected grid stretching array bounds for y_cc and z_cc using wrong dimension (m instead of n and p)
  • Removed duplicate R3bar accumulation line that doubled bubble perturbation magnitude in QBMM initial conditions
  • Reordered perturbation statements so y-velocity uses original x-velocity before x-velocity is modified
  • Extended hyper-cleaning psi initialization to cover all z-planes in 3D (was only initializing k=0 plane)
  • Moved IB patch velocity/angular_vel/angles broadcasts from wrong loop to correct loop

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/common/m_constants.fpp Changed moncon_cutoff from integer to real(wp) to prevent truncation
src/pre_process/m_grid.f90 Fixed y_cc and z_cc array bounds to use correct dimensions (n and p instead of m)
src/pre_process/m_assign_variables.fpp Removed duplicate R3bar accumulation line in QBMM branch
src/pre_process/m_perturbation.fpp Swapped statement order so y-velocity perturbation uses unmodified x-velocity
src/pre_process/m_start_up.fpp Added outer z-loop for 3D psi initialization and replaced double-precision literal
src/pre_process/m_mpi_proxy.fpp Moved patch_ib vel/angular_vel/angles broadcasts to num_patches_max loop

@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 23, 2026
@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 23, 2026
@codeant-ai codeant-ai bot added size:S This PR changes 10-29 lines, ignoring generated files and removed size:S This PR changes 10-29 lines, ignoring generated files labels Feb 23, 2026
@codecov
Copy link

codecov bot commented Feb 23, 2026

Codecov Report

❌ Patch coverage is 25.00000% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 44.05%. Comparing base (df28255) to head (df91890).
⚠️ Report is 29 commits behind head on master.

Files with missing lines Patch % Lines
src/pre_process/m_start_up.fpp 25.00% 6 Missing ⚠️
src/pre_process/m_grid.f90 0.00% 2 Missing ⚠️
src/pre_process/m_perturbation.fpp 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1241      +/-   ##
==========================================
- Coverage   44.05%   44.05%   -0.01%     
==========================================
  Files          70       70              
  Lines       20496    20500       +4     
  Branches     1989     1992       +3     
==========================================
+ Hits         9030     9031       +1     
- Misses      10328    10331       +3     
  Partials     1138     1138              

☔ 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.

@codeant-ai codeant-ai bot added size:S This PR changes 10-29 lines, ignoring generated files and removed size:S This PR changes 10-29 lines, ignoring generated files labels Feb 23, 2026
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/pre_process/m_start_up.fpp`:
- Around line 790-797: Add a validator in the CaseValidator
(toolchain/mfc/case_validator.py) to forbid enabling hyper_cleaning in 2D: call
self.prohibit(hyper_cleaning and p is not None and p == 0, "Hyperbolic cleaning
is not supported for 2D simulations") in the validation routine that checks
dimensionality (the same place that already forbids 1D via n==0); this prevents
m_start_up.fpp from accessing unallocated z_cc when p==0 by rejecting
hyper_cleaning for 2D cases.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e8d2790 and 553161d.

📒 Files selected for processing (6)
  • src/common/m_constants.fpp
  • src/pre_process/m_assign_variables.fpp
  • src/pre_process/m_grid.f90
  • src/pre_process/m_mpi_proxy.fpp
  • src/pre_process/m_perturbation.fpp
  • src/pre_process/m_start_up.fpp
💤 Files with no reviewable changes (1)
  • src/pre_process/m_assign_variables.fpp
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/common/m_constants.fpp
  • src/pre_process/m_mpi_proxy.fpp

@sbryngelson sbryngelson force-pushed the fix/low-risk-bugfixes-batch branch from 285998d to 068c79c Compare February 23, 2026 14:48
@codeant-ai codeant-ai bot added size:S This PR changes 10-29 lines, ignoring generated files and removed size:S This PR changes 10-29 lines, ignoring generated files labels Feb 23, 2026
@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 23, 2026
@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 23, 2026
@sbryngelson sbryngelson force-pushed the fix/low-risk-bugfixes-batch branch 2 times, most recently from 9276e0b to 96f562c Compare February 24, 2026 16:03
@codeant-ai codeant-ai bot added size:S This PR changes 10-29 lines, ignoring generated files and removed size:S This PR changes 10-29 lines, ignoring generated files labels Feb 24, 2026
moncon_cutoff is assigned 1e-8_wp but declared as integer, so Fortran
silently truncates it to 0. This makes all THINC monotonicity constraint
comparisons always true, completely disabling the constraint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from coderabbitai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from Copilot AI Feb 26, 2026
sbryngelson and others added 3 commits February 25, 2026 23:25
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The @:ASSERT call added in d614938 requires the macros.fpp include,
which was missing, causing Fypp preprocessing to fail in the
documentation build.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from codeant-ai bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from coderabbitai bot Feb 26, 2026
Hyper_cleaning is valid in 2D; the 1D prohibition exists because
Bx=0 identically in 1D, not because of dimensionality in general.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions
Copy link

Claude Code Review

Head SHA: df91890

Files changed: 6

  • src/common/m_constants.fpp
  • src/pre_process/m_assign_variables.fpp
  • src/pre_process/m_grid.f90
  • src/pre_process/m_mpi_proxy.fpp
  • src/pre_process/m_perturbation.fpp
  • src/pre_process/m_start_up.fpp

Summary

  • Six isolated pre-process bug fixes, all clearly correct on inspection.
  • No simulation GPU kernels or MPI hot paths touched; blast radius is pre-process only.
  • Precision discipline improved in m_start_up.fpp (eliminates forbidden 1d-2 literal and bare 2.0/0.05).
  • MPI broadcast fix correctly moves patch_ib broadcasts to the num_patches_max loop, matching the index space of that array.
  • The @:ASSERT(psi_idx > 0) guard added for hyper-cleaning is a good defensive check.

Findings

src/common/m_constants.fpp — moncon_cutoff type (line 47)
Fix is correct. Declaring a real(wp) literal (1e-8_wp) as integer silently truncated to 0, disabling the THINC monotonicity limiter entirely.

src/pre_process/m_grid.f90 — grid coordinate bounds (lines 134, 171)
y_cc(0:m)y_cc(0:n) and z_cc(0:m)z_cc(0:p) are straightforward, unambiguously correct. When m > n (or m > p) the old code wrote out-of-bounds into y_cc/z_cc in the 3-loop index sense, corrupting neighboring data.

src/pre_process/m_assign_variables.fpp — duplicate R3bar (line 233)
Duplicate accumulation line removed; was doubling the QBMM bubble perturbation magnitude. Fix is correct.

src/pre_process/m_perturbation.fpp — velocity perturbation order (line 86)
Swap is correct. The y-velocity perturbation (mom_idx%end) is now computed from the unmodified x-velocity before x-vel is scaled, matching the intent. Note: if the base x-velocity is zero the y-perturbation will also be zero — this appears intentional (y-perturbation is proportional to x-vel magnitude) but worth confirming with physics intent.

src/pre_process/m_mpi_proxy.fpp — IB patch broadcast loop (lines 79–126)
Moving the patch_ib broadcasts out of the num_bc_patches_max loop and into the num_patches_max loop is correct. Switching from the hard-coded count 3 to size(patch_ib(i)%${VAR}$) is more robust. One observation: the loop now broadcasts patch_ib(i) for every i up to num_patches_max even when i exceeds the number of actual IB patches, but broadcasting default/zero values for unused slots is harmless.

src/pre_process/m_start_up.fpp — hyper-cleaning 3D init (lines 790–802)

  • Adding #:include 'macros.fpp' is necessary to expose @:ASSERT; if this include was previously absent, the file could not previously have used any Fypp macros. Verify there is no duplicate-definition risk (e.g. if macros.fpp is already transitively included via another header in this file's use chain), but this is low-risk given Fypp include guards.
  • Loop order (l outer → k middle → j inner) matches MFC's standard convention. Good.
  • 1d-21.0e-2_wp and 2.0/0.052.0_wp/0.05_wp fixes the forbidden d-exponent literal and bare precision literals per project conventions.
  • The conditional r2 accumulation correctly handles 1D/2D/3D cases.

Verdict

All fixes are correct and well-scoped. No blocking issues. The PR is safe to merge pending CI green.

@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 26, 2026
@MFlowCode MFlowCode deleted a comment from github-actions bot Feb 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S This PR changes 10-29 lines, ignoring generated files

5 participants