Skip to content

Commit dc8aabf

Browse files
Merge branch 'master' into ib-collisions
2 parents 98b3811 + 1023a4f commit dc8aabf

61 files changed

Lines changed: 3613 additions & 2922 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/rules/common-pitfalls.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@
1313

1414
## Field Variable Indexing
1515
- Conserved variables: `q_cons_vf(1:sys_size)`. Primitive: `q_prim_vf(1:sys_size)`.
16-
- Index ranges depend on `model_eqns` and enabled features (set in `m_global_parameters.fpp`):
17-
- `cont_idx` — continuity (partial densities, one per fluid)
18-
- `mom_idx` — momentum components
19-
- `E_idx` — total energy (scalar)
20-
- `adv_idx` — volume fractions (advection equations)
21-
- `bub_idx`, `stress_idx`, `xi_idx`, `species_idx`, `B_idx`, `c_idx` — optional
22-
- Shorthand scalars: `momxb`/`momxe`, `contxb`/`contxe`, `advxb`/`advxe`, etc.
16+
- All equation indices live in the unified `eqn_idx` struct (`eqn_idx_info` type in `m_derived_types.fpp`).
17+
Index ranges depend on `model_eqns` and enabled features (set in `m_global_parameters.fpp`):
18+
- `eqn_idx%cont` — continuity range (partial densities, one per fluid)
19+
- `eqn_idx%mom` — momentum range
20+
- `eqn_idx%E` — total energy (scalar)
21+
- `eqn_idx%adv` — volume fractions (advection equations)
22+
- `eqn_idx%bub`, `eqn_idx%stress`, `eqn_idx%xi`, `eqn_idx%species`, `eqn_idx%B` — optional
23+
- `eqn_idx%gamma`, `eqn_idx%pi_inf`, `eqn_idx%alf`, `eqn_idx%int_en` — additional scalars/ranges
24+
- Use `eqn_idx%cont%beg`/`eqn_idx%cont%end`, `eqn_idx%mom%beg`/`eqn_idx%mom%end`, etc. (old `contxb`/`contxe`, `momxb`/`momxe` shorthands are gone)
2325
- `sys_size` = total number of conserved variables (computed at startup)
2426
- Changing `model_eqns` or enabling features changes ALL index positions
2527

docs/documentation/architecture.md.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ The index layout within `q_cons_vf` depends on the flow model:
4949
```
5050
For model_eqns == 2 (5-equation, multi-fluid):
5151

52-
Index: 1 .. num_fluids | num_fluids+1 .. +num_vels | E_idx | adv_idx
53-
Meaning: alpha*rho_k | momentum components | energy | volume fractions
52+
Index: 1 .. num_fluids | num_fluids+1 .. +num_vels | eqn_idx%E | eqn_idx%adv
53+
Meaning: alpha*rho_k | momentum components | energy | volume fractions
5454
```
5555

5656
Additional variables are appended for bubbles, elastic stress, magnetic fields, or chemistry species when those models are enabled. The total count is `sys_size`.

docs/documentation/case.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ In the example above, the following code is generated:
235235

236236
```f90
237237
if (patch_id == 2) then
238-
q_prim_vf(contxb)%sf(i, 0, 0) = 1 + 0.1*sin(20*x_cc(i)*3.141592653589793)
238+
q_prim_vf(eqn_idx%cont%beg)%sf(i, 0, 0) = 1 + 0.1*sin(20*x_cc(i)*3.141592653589793)
239239
end if
240240
```
241241

docs/documentation/contributing.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ do l = 0, p
334334
do k = 0, n
335335
do j = 0, m
336336
rho = q_prim_vf(1)%sf(j, k, l)
337-
pres = q_prim_vf(E_idx)%sf(j, k, l)
337+
pres = q_prim_vf(eqn_idx%E)%sf(j, k, l)
338338
! ... use rho, pres as thread-local ...
339339
end do
340340
end do
@@ -369,7 +369,7 @@ do l = 0, p
369369
do j = 0, m
370370
$:GPU_LOOP(parallelism='[seq]')
371371
do i = 1, num_fluids
372-
alpha(i) = q_prim_vf(advxb + i - 1)%sf(j, k, l)
372+
alpha(i) = q_prim_vf(eqn_idx%adv%beg + i - 1)%sf(j, k, l)
373373
end do
374374
end do
375375
end do

docs/documentation/expectedPerformance.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ Note:
137137
| NVIDIA A10 | FP32-only GPU | GPU | 1 GPU | 4.3 | NVHPC 24.1 | TAMU Faster |
138138
| AMD EPYC 7713 | Milan, Zen3 | CPU | 64 cores | 5.0 | GNU 12.3.0 | GT Phoenix |
139139
| Intel Xeon 8480CL | Sapphire Rapids | CPU | 56 cores | 5.0 | NVHPC 24.5 | GT Phoenix |
140+
| Apple M5 Pro | | CPU | 18 cores | 5.4 | GNU 15.2.0 | N/A |
140141
| Intel Xeon 6454S | Sapphire Rapids | CPU | 32 cores | 5.6 | NVHPC 24.5 | GT Rogues Gallery |
141142
| Intel Xeon 8462Y+ | Sapphire Rapids | CPU | 32 cores | 6.2 | GNU 12.3.0 | GT ICE |
142143
| Intel Xeon 6548Y+ | Emerald Rapids | CPU | 32 cores | 6.6 | Intel 2021.9 | GT ICE |

src/common/include/1dHardcodedIC.fpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
select case (patch_icpp(patch_id)%hcid)
88
case (150) ! 1D Smooth Alfven Case for MHD
99
! velocity
10-
q_prim_vf(momxb + 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
11-
q_prim_vf(momxb + 2)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
10+
q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
11+
q_prim_vf(eqn_idx%mom%beg + 2)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
1212

1313
! magnetic field
14-
q_prim_vf(B_idx%end - 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
15-
q_prim_vf(B_idx%end)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
14+
q_prim_vf(eqn_idx%B%end - 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
15+
q_prim_vf(eqn_idx%B%end)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
1616
case (170) ! 1D profile from external data (e.g. Cantera, SDtoolbox)
1717
! This hardcoded case can be used to start a simulation with initial conditions given from a known 1D profile (e.g. Cantera,
1818
! SDtoolbox)
@@ -21,36 +21,36 @@
2121
! This is patch is hard-coded for test suite optimization used in the 1D_shuoser cases: "patch_icpp(2)%alpha_rho(1)": "1 +
2222
! 0.2*sin(5*x)"
2323
if (patch_id == 2) then
24-
q_prim_vf(contxb + 0)%sf(i, 0, 0) = 1 + 0.2*sin(5*x_cc(i))
24+
q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, 0, 0) = 1 + 0.2*sin(5*x_cc(i))
2525
end if
2626
case (181) ! Titarev-Torro problem
2727
! This is patch is hard-coded for test suite optimization used in the 1D_titarevtorro cases: "patch_icpp(2)%alpha_rho(1)":
2828
! "1 + 0.1*sin(20*x*pi)"
29-
q_prim_vf(contxb + 0)%sf(i, 0, 0) = 1 + 0.1*sin(20*x_cc(i)*pi)
29+
q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, 0, 0) = 1 + 0.1*sin(20*x_cc(i)*pi)
3030
case (182) ! Multi-component diffusion
3131
! This patch is a hard-coded for test suite optimization (multiple component diffusion)
3232
x_mid_diffu = 0.05_wp/2.0_wp
3333
width_sq = (2.5_wp*10.0_wp**(-3.0_wp))**2
3434
profile_shape = 1.0_wp - 0.5_wp*exp(-(x_cc(i) - x_mid_diffu)**2/width_sq)
35-
q_prim_vf(momxb)%sf(i, 0, 0) = 0.0_wp
36-
q_prim_vf(E_idx)%sf(i, 0, 0) = 1.01325_wp*(10.0_wp)**5
37-
q_prim_vf(advxb)%sf(i, 0, 0) = 1.0_wp
35+
q_prim_vf(eqn_idx%mom%beg)%sf(i, 0, 0) = 0.0_wp
36+
q_prim_vf(eqn_idx%E)%sf(i, 0, 0) = 1.01325_wp*(10.0_wp)**5
37+
q_prim_vf(eqn_idx%adv%beg)%sf(i, 0, 0) = 1.0_wp
3838

3939
y1 = (0.195_wp - 0.142_wp)*profile_shape + 0.142_wp
4040
y2 = (0.0_wp - 0.1_wp)*profile_shape + 0.1_wp
4141
y3 = (0.214_wp - 0.0_wp)*profile_shape + 0.0_wp
4242
y4 = (0.591_wp - 0.758_wp)*profile_shape + 0.758_wp
4343

44-
q_prim_vf(chemxb)%sf(i, 0, 0) = y1
45-
q_prim_vf(chemxb + 1)%sf(i, 0, 0) = y2
46-
q_prim_vf(chemxb + 2)%sf(i, 0, 0) = y3
47-
q_prim_vf(chemxb + 3)%sf(i, 0, 0) = y4
44+
q_prim_vf(eqn_idx%species%beg)%sf(i, 0, 0) = y1
45+
q_prim_vf(eqn_idx%species%beg + 1)%sf(i, 0, 0) = y2
46+
q_prim_vf(eqn_idx%species%beg + 2)%sf(i, 0, 0) = y3
47+
q_prim_vf(eqn_idx%species%beg + 3)%sf(i, 0, 0) = y4
4848

4949
temp = (320.0_wp - 1350.0_wp)*profile_shape + 1350.0_wp
5050

5151
molar_mass_inv = y1/31.998_wp + y2/18.01508_wp + y3/16.04256_wp + y4/28.0134_wp
5252

53-
q_prim_vf(contxb)%sf(i, 0, 0) = 1.01325_wp*(10.0_wp)**5/(temp*8.3144626_wp*1000.0_wp*molar_mass_inv)
53+
q_prim_vf(eqn_idx%cont%beg)%sf(i, 0, 0) = 1.01325_wp*(10.0_wp)**5/(temp*8.3144626_wp*1000.0_wp*molar_mass_inv)
5454
case default
5555
call s_int_to_str(patch_id, iStr)
5656
call s_mpi_abort("Invalid hcid specified for patch " // trim(iStr))

0 commit comments

Comments
 (0)