From dc81facac34259904cbef8d69f6356b3f6c0f3e1 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Tue, 6 Oct 2026 13:32:36 -0400 Subject: [PATCH 1/2] Probes: own a probe on a rank face by one rank only s_write_probe_files tested ownership with lo <= v <= hi, so a probe exactly on a face shared by two MPI sub-domains was sampled by both ranks and the per-probe allreduce returned twice the value (e.g. rho = 2 in a rho = 1 flow). Use a half-open test, lo <= v < hi, with the last rank in each direction also owning its upper face (f_probe_owned), matching the convention of f_local_rank_owns_location. Co-Authored-By: Claude --- src/simulation/m_data_output.fpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/simulation/m_data_output.fpp b/src/simulation/m_data_output.fpp index bd50f071d..8054783da 100644 --- a/src/simulation/m_data_output.fpp +++ b/src/simulation/m_data_output.fpp @@ -1547,7 +1547,7 @@ contains G_damaged = 0._wp if (n == 0) then - if ((probe(i)%x >= x_cb(-1)) .and. (probe(i)%x <= x_cb(m))) then + if (f_probe_owned(probe(i)%x, x_cb(-1), x_cb(m), 1)) then do s = -1, m distx(s) = x_cb(s) - probe(i)%x if (distx(s) < 0._wp) distx(s) = 1000._wp @@ -1665,8 +1665,8 @@ contains end do end if - if ((probe(i)%x >= x_cb(-1)) .and. (probe(i)%x <= x_cb(m))) then - if ((probe(i)%y >= y_cb(-1)) .and. (probe(i)%y <= y_cb(n))) then + if (f_probe_owned(probe(i)%x, x_cb(-1), x_cb(m), 1)) then + if (f_probe_owned(probe(i)%y, y_cb(-1), y_cb(n), 2)) then do s = -1, m distx(s) = x_cb(s) - probe(i)%x if (distx(s) < 0._wp) distx(s) = 1000._wp @@ -1750,9 +1750,9 @@ contains end if end if else - if ((probe(i)%x >= x_cb(-1)) .and. (probe(i)%x <= x_cb(m))) then - if ((probe(i)%y >= y_cb(-1)) .and. (probe(i)%y <= y_cb(n))) then - if ((probe(i)%z >= z_cb(-1)) .and. (probe(i)%z <= z_cb(p))) then + if (f_probe_owned(probe(i)%x, x_cb(-1), x_cb(m), 1)) then + if (f_probe_owned(probe(i)%y, y_cb(-1), y_cb(n), 2)) then + if (f_probe_owned(probe(i)%z, z_cb(-1), z_cb(p), 3)) then do s = -1, m distx(s) = x_cb(s) - probe(i)%x if (distx(s) < 0._wp) distx(s) = 1000._wp @@ -2007,4 +2007,20 @@ contains end subroutine s_finalize_data_output_module + !> Half-open ownership test, so a probe on a rank face is sampled by one rank and not summed twice; the last rank in a direction + !! also owns its upper face. Matches the convention of f_local_rank_owns_location. + logical function f_probe_owned(v, lo, hi, dir) + + real(wp), intent(in) :: v, lo, hi + integer, intent(in) :: dir + integer :: nprocs_dir(3) + logical :: last + + nprocs_dir = [num_procs_x, num_procs_y, num_procs_z] + last = num_procs == 1 + if (.not. last) last = proc_coords(dir) == nprocs_dir(dir) - 1 + f_probe_owned = v >= lo .and. (v < hi .or. (last .and. v <= hi)) + + end function f_probe_owned + end module m_data_output From c5bfb0e94fda08bed5a284e7c44d69ba2fe77603 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Tue, 6 Oct 2026 15:13:29 -0400 Subject: [PATCH 2/2] Probes: give a face probe to the lower rank; add a 2-rank regression test Own a probe coordinate with lo < v <= hi (the first rank in a direction also owns its lower face) instead of lo <= v < hi. The probe sampler reads the cell left of the first face at or beyond the probe, so the lower rank holds exactly the cell serial samples, and the multi-rank probe output now equals the serial output. Add "1D -> 2 MPI Ranks -> Probe on rank face" (B227B20E): 32 cells split 16/16 put the rank face exactly at x = 0.5, where the probe sits. Golden generated with GNU 12.3, MPI, Release. On master the probe reads rho = 1.0 against a golden of 0.5 (summed by both ranks). Co-Authored-By: Claude --- src/simulation/m_data_output.fpp | 14 ++- tests/B227B20E/golden-metadata.txt | 162 +++++++++++++++++++++++++++++ tests/B227B20E/golden.txt | 33 ++++++ toolchain/mfc/test/cases.py | 3 + 4 files changed, 204 insertions(+), 8 deletions(-) create mode 100644 tests/B227B20E/golden-metadata.txt create mode 100644 tests/B227B20E/golden.txt diff --git a/src/simulation/m_data_output.fpp b/src/simulation/m_data_output.fpp index 8054783da..112ea52a2 100644 --- a/src/simulation/m_data_output.fpp +++ b/src/simulation/m_data_output.fpp @@ -2007,19 +2007,17 @@ contains end subroutine s_finalize_data_output_module - !> Half-open ownership test, so a probe on a rank face is sampled by one rank and not summed twice; the last rank in a direction - !! also owns its upper face. Matches the convention of f_local_rank_owns_location. + !> Half-open ownership lo < v <= hi, so a probe on a rank face is sampled once, by the rank holding the cell the serial code + !! samples (left of the face); the first rank in a direction also owns its lower face. logical function f_probe_owned(v, lo, hi, dir) real(wp), intent(in) :: v, lo, hi integer, intent(in) :: dir - integer :: nprocs_dir(3) - logical :: last + logical :: first - nprocs_dir = [num_procs_x, num_procs_y, num_procs_z] - last = num_procs == 1 - if (.not. last) last = proc_coords(dir) == nprocs_dir(dir) - 1 - f_probe_owned = v >= lo .and. (v < hi .or. (last .and. v <= hi)) + first = num_procs == 1 + if (.not. first) first = proc_coords(dir) == 0 + f_probe_owned = v <= hi .and. (v > lo .or. (first .and. v >= lo)) end function f_probe_owned diff --git a/tests/B227B20E/golden-metadata.txt b/tests/B227B20E/golden-metadata.txt new file mode 100644 index 000000000..2f1ccee70 --- /dev/null +++ b/tests/B227B20E/golden-metadata.txt @@ -0,0 +1,162 @@ +This file was created on 2026-10-06 15:08:10.112281. + +mfc.sh: + + Invocation: test --generate --only B227B20E --mpi --no-gpu --no-debug --no-build -j 4 + Lock: mpi=Yes & gpu=No & debug=No & reldebug=No & gcov=No & unified=No & single=No & mixed=No & fastmath=No + Git: dc81facac34259904cbef8d69f6356b3f6c0f3e1 on fix-probe-rank-boundary-double-count (dirty) + +pre_process: + + CMake Configuration: + + CMake v3.31.11 on login10 + + C : GNU v12.3.0 (/opt/cray/pe/gcc-native/12/bin/gcc) + Fortran : GNU v12.3.0 (/opt/cray/pe/gcc-native/12/bin/gfortran) + + PRE_PROCESS : ON + SIMULATION : OFF + POST_PROCESS : OFF + SYSCHECK : OFF + DOCUMENTATION : OFF + ALL : OFF + + MPI : ON + OpenACC : OFF + OpenMP : OFF + + Fypp : /lustre/orion/cfd154/scratch/sbryngelson/mfc-upstream-prs/wt-probe/build/venv/bin/fypp + Doxygen : + + Build Type : Release + + Configuration Environment: + + CC : /opt/cray/pe/gcc-native/12/bin/gcc + CXX : /opt/cray/pe/gcc-native/12/bin/g++ + FC : /opt/cray/pe/gcc-native/12/bin/gfortran + OMPI_CC : + OMPI_CXX : + OMPI_FC : + +simulation: + + CMake Configuration: + + CMake v3.31.11 on login10 + + C : GNU v12.3.0 (/opt/cray/pe/gcc-native/12/bin/gcc) + Fortran : GNU v12.3.0 (/opt/cray/pe/gcc-native/12/bin/gfortran) + + PRE_PROCESS : OFF + SIMULATION : ON + POST_PROCESS : OFF + SYSCHECK : OFF + DOCUMENTATION : OFF + ALL : OFF + + MPI : ON + OpenACC : OFF + OpenMP : OFF + + Fypp : /lustre/orion/cfd154/scratch/sbryngelson/mfc-upstream-prs/wt-probe/build/venv/bin/fypp + Doxygen : + + Build Type : Release + + Configuration Environment: + + CC : /opt/cray/pe/gcc-native/12/bin/gcc + CXX : /opt/cray/pe/gcc-native/12/bin/g++ + FC : /opt/cray/pe/gcc-native/12/bin/gfortran + OMPI_CC : + OMPI_CXX : + OMPI_FC : + +syscheck: + + CMake Configuration: + + CMake v3.31.11 on login10 + + C : GNU v12.3.0 (/opt/cray/pe/gcc-native/12/bin/gcc) + Fortran : GNU v12.3.0 (/opt/cray/pe/gcc-native/12/bin/gfortran) + + PRE_PROCESS : OFF + SIMULATION : OFF + POST_PROCESS : OFF + SYSCHECK : ON + DOCUMENTATION : OFF + ALL : OFF + + MPI : ON + OpenACC : OFF + OpenMP : OFF + + Fypp : /lustre/orion/cfd154/scratch/sbryngelson/mfc-upstream-prs/wt-probe/build/venv/bin/fypp + Doxygen : + + Build Type : Release + + Configuration Environment: + + CC : /opt/cray/pe/gcc-native/12/bin/gcc + CXX : /opt/cray/pe/gcc-native/12/bin/g++ + FC : /opt/cray/pe/gcc-native/12/bin/gfortran + OMPI_CC : + OMPI_CXX : + OMPI_FC : + +CPU: + + CPU Info: + From lscpu + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Address sizes: 48 bits physical, 48 bits virtual + Byte Order: Little Endian + CPU(s): 128 + On-line CPU(s) list: 0-127 + Vendor ID: AuthenticAMD + Model name: AMD EPYC 7A53 64-Core Processor + CPU family: 25 + Model: 48 + Thread(s) per core: 2 + Core(s) per socket: 64 + Socket(s): 1 + Stepping: 1 + Frequency boost: enabled + CPU(s) scaling MHz: 56% + CPU max MHz: 3541.0149 + CPU min MHz: 1500.0000 + BogoMIPS: 3992.40 + Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf rapl pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local user_shstk clzero irperf xsaveerptr rdpru wbnoinvd amd_ppin arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif v_spec_ctrl umip pku ospke vaes vpclmulqdq rdpid overflow_recov succor smca fsrm ibpb_exit_to_user + Virtualization: AMD-V + L1d cache: 2 MiB (64 instances) + L1i cache: 2 MiB (64 instances) + L2 cache: 32 MiB (64 instances) + L3 cache: 256 MiB (8 instances) + NUMA node(s): 4 + NUMA node0 CPU(s): 0-15,64-79 + NUMA node1 CPU(s): 16-31,80-95 + NUMA node2 CPU(s): 32-47,96-111 + NUMA node3 CPU(s): 48-63,112-127 + Vulnerability Gather data sampling: Not affected + Vulnerability Indirect target selection: Not affected + Vulnerability Itlb multihit: Not affected + Vulnerability L1tf: Not affected + Vulnerability Mds: Not affected + Vulnerability Meltdown: Not affected + Vulnerability Mmio stale data: Not affected + Vulnerability Reg file data sampling: Not affected + Vulnerability Retbleed: Not affected + Vulnerability Spec rstack overflow: Vulnerable + Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl + Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization + Vulnerability Spectre v2: Mitigation; Retpolines; IBPB conditional; IBRS_FW; STIBP always-on; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected + Vulnerability Srbds: Not affected + Vulnerability Tsa: Vulnerable: No microcode + Vulnerability Tsx async abort: Not affected + Vulnerability Vmscape: Mitigation; IBPB before exit to userspace + diff --git a/tests/B227B20E/golden.txt b/tests/B227B20E/golden.txt new file mode 100644 index 000000000..3ab5c7dbe --- /dev/null +++ b/tests/B227B20E/golden.txt @@ -0,0 +1,33 @@ +D/cons.1.00.000000.dat 1.0 1.0 1.0 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 +D/cons.1.00.000050.dat 0.99707156697769 0.96873463978295 0.87621949651045 0.60965659023136 0.54289366314262 0.50565037022123 0.50047544463054 0.50003203666674 0.50000178023743 0.50000008389123 0.50000000342819 0.50000000009642 0.4999999999626 0.50000000000849 0.5000000000014 0.49999999999217 +D/cons.1.01.000000.dat 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.125 0.125 0.125 0.125 0.125 0.125 +D/cons.1.01.000050.dat 0.50000000001614 0.50000000000644 0.49999999871121 0.49999996773109 0.49999930668654 0.49998734055357 0.49981002379834 0.49776304642982 0.47994674037582 0.39224058992569 0.21597595224366 0.15953830390339 0.12939040238862 0.12532795678976 0.12501940389454 0.12500086267244 +D/cons.2.00.000000.dat 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +D/cons.2.00.000050.dat 0.00345888155359 0.03632304385629 0.15532317562679 0.14332172535041 0.05326643289864 0.00683459881565 0.00056371424901 3.791296036e-05 2.10640179e-06 9.927341e-08 4.13101e-09 1.083e-10 -4.516e-11 9.12e-12 2.85e-12 8.17e-12 +D/cons.2.01.000000.dat 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +D/cons.2.01.000050.dat -1.788e-11 -2.239e-11 1.62969e-09 3.816581e-08 8.2031964e-07 1.497847001e-05 0.00022470252637 0.00263660878389 0.02302019273521 0.11472013694454 0.12899444733392 0.04503669334983 0.00498038214235 0.00034942934985 2.054531498e-05 9.1311615e-07 +D/cons.3.00.000000.dat 2.5 2.5 2.5 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 +D/cons.3.00.000050.dat 2.48978400209092 2.39305824945073 2.10855075958615 1.58256856241031 1.40676861956678 1.27005839841127 1.25166585629922 1.25011213793521 1.25000623086533 1.2500002936194 1.25000001199867 1.25000000033747 1.2499999998691 1.2500000000297 1.25000000000492 1.24999999997258 +D/cons.3.01.000000.dat 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 0.25 0.25 0.25 0.25 0.25 0.25 +D/cons.3.01.000050.dat 1.25000000005649 1.25000000002255 1.24999999548924 1.24999988705882 1.24999757340817 1.24995569345288 1.24933537036036 1.24220315743057 1.18198758823711 0.92739735253256 0.52258021006907 0.36267824822511 0.26288640098745 0.25092147284712 0.25005434346782 0.25000241551542 +D/cons.4.00.000000.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/cons.4.00.000050.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/cons.4.01.000000.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/cons.4.01.000050.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/prim.1.00.000000.dat 1.0 1.0 1.0 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 +D/prim.1.00.000050.dat 0.99707156697769 0.96873463978295 0.87621949651045 0.60965659023136 0.54289366314262 0.50565037022123 0.50047544463054 0.50003203666674 0.50000178023743 0.50000008389123 0.50000000342819 0.50000000009642 0.4999999999626 0.50000000000849 0.5000000000014 0.49999999999217 +D/prim.1.01.000000.dat 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.125 0.125 0.125 0.125 0.125 0.125 +D/prim.1.01.000050.dat 0.50000000001614 0.50000000000644 0.49999999871121 0.49999996773109 0.49999930668654 0.49998734055357 0.49981002379834 0.49776304642982 0.47994674037582 0.39224058992569 0.21597595224366 0.15953830390339 0.12939040238862 0.12532795678976 0.12501940389454 0.12500086267244 +D/prim.2.00.000000.dat 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +D/prim.2.00.000050.dat 0.00346904040607 0.03749534946374 0.17726514445908 0.235085993733 0.09811577573092 0.01351645171873 0.00112635745682 7.582106262e-05 4.21278858e-06 1.9854678e-07 8.26202e-09 2.166e-10 -9.032e-11 1.823e-11 5.71e-12 1.634e-11 +D/prim.2.01.000000.dat 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +D/prim.2.01.000050.dat -3.576e-11 -4.477e-11 3.25938e-09 7.633163e-08 1.64064156e-06 2.995769852e-05 0.00044957587017 0.00529691547575 0.04796405683928 0.29247390476921 0.59726301004285 0.28229392094517 0.0384911249243 0.00278811973644 0.00016433700961 7.30487881e-06 +D/prim.3.00.000000.dat 1.0 1.0 1.0 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 +D/prim.3.00.000050.dat 0.9959112010364 0.95695091073569 0.83791362680139 0.62628883891862 0.56166219234986 0.50800488345953 0.50066621553094 0.50004485459916 0.50000249234436 0.50000011744776 0.50000000479947 0.50000000013499 0.49999999994764 0.50000000001188 0.50000000000197 0.49999999998903 +D/prim.3.01.000000.dat 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.1 0.1 0.1 0.1 0.1 0.1 +D/prim.3.01.000050.dat 0.50000000002259 0.50000000000902 0.49999999819569 0.49999995482353 0.499999029363 0.49998227729141 0.49973412793998 0.49687846979346 0.47257420692828 0.36424841173146 0.19362336164893 0.14252858233962 0.10511622029274 0.10036839428868 0.10002173671186 0.10000096620483 +D/prim.4.00.000000.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/prim.4.00.000050.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/prim.4.01.000000.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/prim.4.01.000050.dat 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +D/probe1_prim.dat 0.0 0.5 0.0 0.5 0.0005 0.5 0.0 0.5 0.001 0.5 -0.0 0.5 0.0015 0.5 0.0 0.5 0.002 0.5 0.0 0.5 0.0025 0.5 0.0 0.5 0.003 0.5 0.0 0.5 0.0035 0.5 0.0 0.5 0.004 0.5 0.0 0.5 0.0045 0.5 0.0 0.5 0.005 0.5 0.0 0.5 0.0055 0.5 0.0 0.5 0.006 0.5 0.0 0.5 0.0065 0.5 -0.0 0.5 0.007 0.5 -0.0 0.5 0.0075 0.5 -0.0 0.5 0.008 0.5 -0.0 0.5 0.0085 0.5 -0.0 0.5 0.009 0.5 -0.0 0.5 0.0095 0.5 -0.0 0.5 0.01 0.5 -0.0 0.5 0.0105 0.5 -0.0 0.5 0.011 0.5 -0.0 0.5 0.0115 0.5 -0.0 0.5 0.012 0.5 -0.0 0.5 0.0125 0.5 -0.0 0.5 0.013 0.5 -0.0 0.5 0.0135 0.5 -0.0 0.5 0.014 0.5 -0.0 0.5 0.0145 0.5 -0.0 0.5 0.015 0.5 -0.0 0.5 0.0155 0.5 0.0 0.5 0.016 0.5 0.0 0.5 0.0165 0.5 0.0 0.5 0.017 0.5 0.0 0.5 0.0175 0.5 0.0 0.5 0.018 0.5 0.0 0.5 0.0185 0.5 0.0 0.5 0.019 0.5 0.0 0.5 0.0195 0.5 0.0 0.5 0.02 0.5 0.0 0.5 0.0205 0.5 0.0 0.5 0.021 0.5 0.0 0.5 0.0215 0.5 0.0 0.5 0.022 0.5 0.0 0.5 0.0225 0.5 0.0 0.5 0.023 0.5 0.0 0.5 0.0235 0.5 0.0 0.5 0.024 0.5 0.0 0.5 0.0245 0.5 0.0 0.5 \ No newline at end of file diff --git a/toolchain/mfc/test/cases.py b/toolchain/mfc/test/cases.py index f0e7bf77f..cb64ed96d 100644 --- a/toolchain/mfc/test/cases.py +++ b/toolchain/mfc/test/cases.py @@ -1193,6 +1193,9 @@ def alter_ppn(dimInfo): cases.append(define_case_d(stack, "2 MPI Ranks", {}, ppn=2)) if ARG("rdma_mpi"): cases.append(define_case_d(stack, "2 MPI Ranks -> RDMA MPI", {"rdma_mpi": "T"}, ppn=2)) + if len(dimInfo[0]) == 1: + # 32 cells split 16/16, so the rank face is exactly x = 0.5: a probe there must be sampled by one rank, not summed + cases.append(define_case_d(stack, "2 MPI Ranks -> Probe on rank face", {"m": 31, "probe_wrt": "T", "fd_order": 1, "num_probes": 1, "probe(1)%x": 0.5}, ppn=2)) def alter_ib(dimInfo, six_eqn_model=False, viscous=False, num_fluids=1): for slip in [True, False]: