diff --git a/src/simulation/m_data_output.fpp b/src/simulation/m_data_output.fpp index bd50f071d..112ea52a2 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,18 @@ contains end subroutine s_finalize_data_output_module + !> 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 + logical :: first + + 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 + end module m_data_output 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]: