Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
af75f84
Integrate IBM with IGR
Dec 18, 2025
1340497
Add comments
Dec 19, 2025
b07045b
Minor fixes
Dec 19, 2025
489bc7c
Change from using jac_sf to jac
Dec 19, 2025
d914ba3
add igr forward facing step example
wilfonba Dec 29, 2025
3e92773
update IGR forward facing step example
wilfonba Jan 1, 2026
4be08cc
Minor fixes
Jan 2, 2026
27ea826
Added to skipped cases and README
Jan 2, 2026
845c9b5
Minor fixes and formatting
Jan 2, 2026
a8c9629
Fix inline issue on Frontier
Jan 3, 2026
01e6492
Fix inlining issue on frontier
Jan 3, 2026
e28a2c9
Remove q_cons_vf optional variable guard
Jan 3, 2026
a914653
Restore elasticity branch
Jan 3, 2026
a29bac8
Format
Jan 3, 2026
b31dd3a
Minor fixes and add guard for IGR + MIBM
Jan 3, 2026
5a6a5a8
Minor changes
Jan 4, 2026
bcce655
Merge branch 'master' into igribm
sbryngelson Jan 4, 2026
31fce2a
Minor changes regards to chemistry. Add guard inside case_validator f…
Cowsreal Jan 5, 2026
6c756a0
merge
wilfonba Jan 18, 2026
e111b08
Formatting
Jan 21, 2026
c89cb66
Merge branch 'master' into igribm
Cowsreal Jan 21, 2026
6cf419c
Merge branch 'master' into igribm
Cowsreal Jan 22, 2026
b68f694
Add 3D IGR bowshock case
Jan 24, 2026
755b013
Merge branch 'igribm' of github.com:Cowsreal/MFCMarkZhang into igribm
Jan 24, 2026
2a40bbf
Merge branch 'master' into igribm
Cowsreal Jan 24, 2026
849a030
Fix README format
Jan 24, 2026
0009ca6
Merge branch 'igribm' of github.com:Cowsreal/MFCMarkZhang into igribm
Jan 24, 2026
1b28f76
Merge branch 'master' into igribm
wilfonba Feb 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions examples/2D_IGR_forward_facing_step/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Forward Facing Step With IGR (2D)

Reference: See Section IV, b.
> Woodward, P. *(1984). The numerical simulation of two-dimensional fluid flow with strong shocks. Journal of Computational Physics, 54(1), 115–173. https://doi.org/10.1016/0021-9991(84)90140-2*

## Evolved State
<img src="figure.png" height="MAX_HEIGHT"/>
97 changes: 97 additions & 0 deletions examples/2D_IGR_forward_facing_step/case.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import json
import math

h = 0.2

# Radius as a percentage of height (h)
rc = 0.2

gam_a = 1.4
p0 = 1
rho0 = 1.4
c0 = math.sqrt(gam_a * p0 / rho0)
v0 = 3 * c0
mu = rho0 * v0 * h / 2e5

# Configuring case dictionary
print(
json.dumps(
{
# Logistics
"run_time_info": "T",
"x_domain%beg": 0,
"x_domain%end": 15 * h,
"y_domain%beg": 0,
"y_domain%end": 5 * h,
"cyl_coord": "F",
"m": 1499,
"n": 499,
"p": 0,
"cfl_adap_dt": "T",
"cfl_target": 0.6,
"n_start": 0,
"t_save": 0.04,
"t_stop": 4,
# Simulation Algorithm Parameters
"num_patches": 1,
"model_eqns": 2,
"alt_soundspeed": "F",
"num_fluids": 1,
"mpp_lim": "F",
"mixture_err": "F",
"time_stepper": 3,
"igr": "T",
"igr_pres_lim": "T",
"igr_order": 3,
"igr_iter_solver": 1,
"num_igr_iters": 5,
"num_igr_warm_start_iters": 50,
"bc_x%beg": -3,
"bc_x%end": -3,
"bc_y%beg": -2,
"bc_y%end": -2,
"ib": "T",
"num_ibs": 3,
# Formatted Database Files Structure Parameters
"format": 1,
"precision": 2,
"prim_vars_wrt": "T",
"parallel_io": "T",
# Patch 1 Background
"patch_icpp(1)%geometry": 3,
"patch_icpp(1)%x_centroid": 7.5 * h,
"patch_icpp(1)%y_centroid": 2.5 * h,
"patch_icpp(1)%length_x": 15 * h,
"patch_icpp(1)%length_y": 5 * h,
"patch_icpp(1)%vel(1)": v0,
"patch_icpp(1)%vel(2)": 0.0,
"patch_icpp(1)%pres": p0,
"patch_icpp(1)%alpha_rho(1)": rho0,
"patch_icpp(1)%alpha(1)": 1.0,
# Patch: Slip rectangle with rounded corner
"patch_ib(1)%geometry": 3,
"patch_ib(1)%x_centroid": (9 + rc / 2) * h,
"patch_ib(1)%y_centroid": 0.5 * h,
"patch_ib(1)%length_x": (12 - rc) * h,
"patch_ib(1)%length_y": h,
"patch_ib(1)%slip": "T",
"patch_ib(2)%geometry": 3,
"patch_ib(2)%x_centroid": (3 + rc / 2) * h,
"patch_ib(2)%y_centroid": (0.5 - rc / 2) * h,
"patch_ib(2)%length_x": rc * h,
"patch_ib(2)%length_y": (1 - rc) * h,
"patch_ib(2)%slip": "T",
"patch_ib(3)%geometry": 2,
"patch_ib(3)%x_centroid": (3 + rc) * h,
"patch_ib(3)%y_centroid": (1 - rc) * h,
"patch_ib(3)%radius": rc * h,
"patch_ib(3)%slip": "T",
# Fluids Physical Parameters
"fluid_pp(1)%gamma": 1.0 / (gam_a - 1.0),
"fluid_pp(1)%pi_inf": 0.0,
"viscous": "T",
"fluid_pp(1)%Re(1)": 1 / mu,
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggestion: Incorrect Reynolds-number assignment: fluid_pp(1)%Re(1) is set to 1 / mu, but given mu = rho0 * v0 * h / 2e5 the correct Reynolds number should be rho0 * v0 * h / mu (which yields 2e5 as intended), not 1 / mu. Assign the physically-correct expression so Re is dimensionless and consistent. [logic error]

Severity Level: Critical 🚨
- ❌ Viscous-flow setup uses wrong Reynolds number.
- ⚠️ Example validation against IGR/WENO mismatches.
- ⚠️ Performance/timestep choices may be inconsistent.
Suggested change
"fluid_pp(1)%Re(1)": 1 / mu,
"fluid_pp(1)%Re(1)": rho0 * v0 * h / mu,
Steps of Reproduction ✅
1. Inspect examples/2D_IGR_forward_facing_step/case.py: mu is computed at line 14 (`mu =
rho0 * v0 * h / 2e5`) and the Reynolds entry is set at line 93 (`"fluid_pp(1)%Re(1)": 1 /
mu,`).

2. Run `python examples/2D_IGR_forward_facing_step/case.py` to emit the JSON (print at
line 17). The emitted JSON contains `"fluid_pp(1)%Re(1)"` equal to the numeric value of `1
/ mu`.

3. Calculate expected Re for this example: since mu was set as `rho0 * v0 * h / 2e5` (line
14), the intended nondimensional Re should be `rho0 * v0 * h / mu == 2e5`. The current
printed value `1 / mu` does not equal 2e5 and therefore demonstrates the incorrect formula
in-place.

4. Any solver or validation harness consuming this JSON will use the wrong Reynolds number
for this example, as demonstrated by inspecting the printed JSON.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** examples/2D_IGR_forward_facing_step/case.py
**Line:** 93:93
**Comment:**
	*Logic Error: Incorrect Reynolds-number assignment: `fluid_pp(1)%Re(1)` is set to `1 / mu`, but given `mu = rho0 * v0 * h / 2e5` the correct Reynolds number should be `rho0 * v0 * h / mu` (which yields 2e5 as intended), not `1 / mu`. Assign the physically-correct expression so `Re` is dimensionless and consistent.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.

},
indent=4,
)
)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions examples/3D_IGR_bowshock/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Mach 2 Flow Over Sphere (bowshock) With IGR (3D)

Reference: See Section 5.4
> Uddin, H. *(2014). A Cartesian-based embedded geometry technique with adaptive high-order finite differences for compressible flow around complex geometries. Journal of Computational Physics, 262, 379–407. https://doi.org/10.1016/j.jcp.2014.01.004*

## Figure
<img src="figure.png" height="MAX_HEIGHT"/>
Comment on lines 3 to 7
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix markdown lint: heading level, bare DOI URL, and missing alt text.

These are minor but will keep the docs consistent with the lint rules.

✏️ Suggested patch
-Reference: See Section 5.4
-> Uddin, H. *(2014). A Cartesian-based embedded geometry technique with adaptive high-order finite differences for compressible flow around complex geometries. Journal of Computational Physics, 262, 379–407. https://doi.org/10.1016/j.jcp.2014.01.004*
+Reference: See Section 5.4
+> Uddin, H. *(2014). A Cartesian-based embedded geometry technique with adaptive high-order finite differences for compressible flow around complex geometries. Journal of Computational Physics, 262, 379–407. doi:10.1016/j.jcp.2014.01.004*
 
-### Figure
-<img src="figure.png" height="MAX_HEIGHT"/>
+## Figure
+<img src="figure.png" alt="Mach 2 bowshock over a sphere (IGR)" height="MAX_HEIGHT"/>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Reference: See Section 5.4
> Uddin, H. *(2014). A Cartesian-based embedded geometry technique with adaptive high-order finite differences for compressible flow around complex geometries. Journal of Computational Physics, 262, 379–407. https://doi.org/10.1016/j.jcp.2014.01.004*
### Figure
<img src="figure.png" height="MAX_HEIGHT"/>
Reference: See Section 5.4
> Uddin, H. *(2014). A Cartesian-based embedded geometry technique with adaptive high-order finite differences for compressible flow around complex geometries. Journal of Computational Physics, 262, 379–407. doi:10.1016/j.jcp.2014.01.004*
## Figure
<img src="figure.png" alt="Mach 2 bowshock over a sphere (IGR)" height="MAX_HEIGHT"/>
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

4-4: Bare URL used

(MD034, no-bare-urls)


6-6: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


7-7: Images should have alternate text (alt text)

(MD045, no-alt-text)

🤖 Prompt for AI Agents
In `@examples/3D_IGR_bowshock/README.md` around lines 3 - 7, Adjust the README.md
to fix markdown lint: change the "### Figure" heading to the appropriate level
used by the document (e.g., "#### Figure" to match surrounding headings),
convert the bare DOI text into an inline link using the full DOI URL
(https://doi.org/10.1016/j.jcp.2014.01.004) in the reference line, and add
descriptive alt text to the image tag (e.g., <img src="figure.png" alt="Bow
shock visualization" height="MAX_HEIGHT"/>).

101 changes: 101 additions & 0 deletions examples/3D_IGR_bowshock/case.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import json
import math

gam = 1.4

D = 0.1
N = 400

tf = 0.01
saveFreq = tf / 200

# Configuring case dictionary
print(
json.dumps(
{
# Logistics
"run_time_info": "T",
# Computational Domain Parameters
# x direction
"x_domain%beg": -5.0 * D,
"x_domain%end": 5.0 * D,
# y direction
"y_domain%beg": -2.5 * D,
"y_domain%end": 2.5 * D,
# z direction
"z_domain%beg": -2.5 * D,
"z_domain%end": 2.5 * D,
"cyl_coord": "F",
"m": 2 * N,
"n": N,
"p": N,
"cfl_adap_dt": "T",
"cfl_target": 0.4,
"n_start": 0,
"t_save": saveFreq,
"t_stop": tf,
# Simulation Algorithm Parameters
"num_patches": 1,
# Use the 5 equation model
"model_eqns": 2,
"alt_soundspeed": "F",
"num_fluids": 1,
"mpp_lim": "F",
"mixture_err": "T",
"time_stepper": 3,
# Use IGR5
"igr": "T",
"igr_pres_lim": "T",
"igr_order": 5,
"alf_factor": 10,
"igr_iter_solver": 2,
"num_igr_iters": 15,
"num_igr_warm_start_iters": 50,
# We use ghost-cell extrapolation
"bc_x%beg": -3,
"bc_x%end": -3,
"bc_y%beg": -3,
"bc_y%end": -3,
"bc_z%beg": -3,
"bc_z%end": -3,
# Set IB to True
"ib": "T",
"num_ibs": 1,
"viscous": "T",
# Formatted Database Files Structure Parameters
"format": 1,
"precision": 2,
"prim_vars_wrt": "T",
"E_wrt": "T",
"parallel_io": "T",
# Main Patch: 10D:5D:5D rectangular prism centered at the (0, 0, 0)
# HCID 390 smooths the x-velocity profile in a small region around
# the sphere using a tanh profile.
"patch_icpp(1)%geometry": 9,
"patch_icpp(1)%hcid": 390,
"patch_icpp(1)%x_centroid": 0.0,
"patch_icpp(1)%y_centroid": 0.0,
"patch_icpp(1)%z_centroid": 0.0,
"patch_icpp(1)%length_x": 10 * D,
"patch_icpp(1)%length_y": 5 * D,
"patch_icpp(1)%length_z": 5 * D,
"patch_icpp(1)%vel(1)": 527.2e00,
"patch_icpp(1)%vel(2)": 0.0e00,
"patch_icpp(1)%vel(3)": 0.0e00,
"patch_icpp(1)%pres": 10918.2549,
"patch_icpp(1)%alpha_rho(1)": 0.2199,
"patch_icpp(1)%alpha(1)": 1.0e00,
# Patch: Sphere Immersed Boundary
"patch_ib(1)%geometry": 8,
"patch_ib(1)%x_centroid": -3.0 * D,
"patch_ib(1)%y_centroid": 0.0,
"patch_ib(1)%z_centroid": 0.0,
"patch_ib(1)%radius": D / 2,
"patch_ib(1)%slip": "T",
# Fluids Physical Parameters
"fluid_pp(1)%gamma": 1.0e00 / (gam - 1.0e00),
"fluid_pp(1)%pi_inf": 0,
"fluid_pp(1)%Re(1)": 650000,
}
)
)
Binary file added examples/3D_IGR_bowshock/figure.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 21 additions & 0 deletions src/common/include/3dHardcodedIC.fpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,27 @@
q_prim_vf(momxb + 1)%sf(i, j, k) = -Mach*376.636429464809*cos(x_cc(i)/1)*sin(y_cc(j)/1)*sin(z_cc(k)/1)
end if

case (390)
! This is for smoothing the x-velocity in a small neighborhood around the sphere for the bowshock case
r = (x_cc(i) + 0.3_wp)*(x_cc(i) + 0.3_wp) + y_cc(j)*y_cc(j) + z_cc(k)*z_cc(k)
r = sqrt(r)
! Size of smoothing region
rcut = 0.025_wp

if (r < 0.05 + rcut + 0.01) then
if (r < 0.05_wp - 0.005) then
! If inside sphere, set velocity to 0
q_prim_vf(momxb)%sf(i, j, k) = 0.0_wp
else if (r > 0.05_wp + rcut + 0.005) then
! If outside the smoothing region, do nothing
else
! If inside the smoothing region, then interpolate values via tanh function
r = (r - 0.05_wp)/rcut
q_prim_vf(momxb)%sf(i, j, k) = 0.0_wp + (527.2_wp - 0.0_wp)* &
(0.5_wp*(1.0_wp + tanh(5.0_wp*(r - 0.5_wp))))
end if
end if

case default
call s_int_to_str(patch_id, iStr)
call s_mpi_abort("Invalid hcid specified for patch "//trim(iStr))
Expand Down
3 changes: 3 additions & 0 deletions src/pre_process/m_check_ib_patches.fpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ contains

integer :: i

@:PROHIBIT(igr .and. any(patch_ib(:)%moving_ibm > 0), "Cannot use &
moving immersed boundary with IGR. All patch_ib(:)%moving_ibm must be 0.")

do i = 1, num_patches_max
if (i <= num_ibs) then
! call s_check_patch_geometry(i)
Expand Down
Loading
Loading