embedded3 R6-3 default ON: the device Poisson setup (RTX_E3_POISSON_DEVICE=0 restores the host) and the p-only field transfer (RTX_E3_FIELD_P_ONLY=0 restores the full one)

Both held their two-period 3D ny 62 gate on da2945f (default span, CSV
identical to round 3's two-period CSV; with the check: 1176 poisson and 118
hierarchy checks identical, 0 differ).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Omar Sobh
2026-09-25 05:15:13 -05:00
co-authored by Claude Opus 5.5
parent da2945fcf5
commit 73e4c7513e
3 changed files with 9 additions and 9 deletions
@@ -1,5 +1,5 @@
//! R6-3: the moving path's Poisson setup on the device (`e3_pset.cu`), //! R6-3: the moving path's Poisson setup on the device (`e3_pset.cu`),
//! behind `RTX_E3_POISSON_DEVICE=1` (default off). From the projection //! default ON (`RTX_E3_POISSON_DEVICE=0` restores the host setup). From the projection
//! tables `DeviceCut` holds (step apertures, open flags, activity, owners, //! tables `DeviceCut` holds (step apertures, open flags, activity, owners,
//! the merged cells' CSR) the operator (`Solver::poisson_operator` with //! the merged cells' CSR) the operator (`Solver::poisson_operator` with
//! `merge_small_cells`), the fine level (`Level::new`: activity, masked //! `merge_small_cells`), the fine level (`Level::new`: activity, masked
@@ -81,10 +81,10 @@ fn kernels() -> &'static PsKernels {
}) })
} }
/// `RTX_E3_POISSON_DEVICE=1` (default off). /// Default ON (`RTX_E3_POISSON_DEVICE=0` restores the host setup).
#[must_use] #[must_use]
pub fn enabled() -> bool { pub fn enabled() -> bool {
std::env::var("RTX_E3_POISSON_DEVICE").is_ok_and(|v| v == "1") !std::env::var("RTX_E3_POISSON_DEVICE").is_ok_and(|v| v == "0")
} }
/// `struct PsGrid` in e3_pset.cu. /// `struct PsGrid` in e3_pset.cu.
@@ -909,7 +909,7 @@ impl DeviceStep {
// w, p (fresh cells take their neighbours' pressure) and the // w, p (fresh cells take their neighbours' pressure) and the
// previous velocities (the imposition's source). // previous velocities (the imposition's source).
let mut field = self.host_field.take().unwrap_or_else(|| Field::new(g)); let mut field = self.host_field.take().unwrap_or_else(|| Field::new(g));
// R6-3 (`RTX_E3_FIELD_P_ONLY=1`, default off; not under the band // R6-3 (default ON, `RTX_E3_FIELD_P_ONLY=0` off; not under the band
// check, whose references read the whole mirror): the download // check, whose references read the whole mirror): the download
// waits until the step's rebuild route is known — with the device // waits until the step's rebuild route is known — with the device
// classification and imposition the host rebuild reads and writes // classification and imposition the host rebuild reads and writes
@@ -1101,7 +1101,7 @@ impl DeviceStep {
self.cut.as_ref(), self.cut.as_ref(),
super::poisson_setup::device_grid(&self.solver, g, dt), super::poisson_setup::device_grid(&self.solver, g, dt),
) { ) {
// R6-3 (`RTX_E3_POISSON_DEVICE=1`): the operator, level, lists, // R6-3 (default ON, `RTX_E3_POISSON_DEVICE=0` off): the operator, level, lists,
// links, components and export on the device from the step's // links, components and export on the device from the step's
// projection tables; `RTX_E3_BAND_CHECK=1` hands the host // projection tables; `RTX_E3_BAND_CHECK=1` hands the host
// operator as the reference. // operator as the reference.
@@ -1144,7 +1144,7 @@ impl DeviceStep {
smoother: self.solver.params.poisson_smoother, smoother: self.solver.params.poisson_smoother,
..MultigridParameters::default() ..MultigridParameters::default()
}; };
// R6-3 (`RTX_E3_POISSON_DEVICE=1`): a moving body's hierarchy with // R6-3 (default ON, `RTX_E3_POISSON_DEVICE=0` off): a moving body's hierarchy with
// level 0 built on the device; the host build otherwise (or when // level 0 built on the device; the host build otherwise (or when
// the hierarchy would stop at level 0). // the hierarchy would stop at level 0).
let device = match (self.solver.is_moving(), self.cut.as_ref()) { let device = match (self.solver.is_moving(), self.cut.as_ref()) {
@@ -1,5 +1,5 @@
//! R6-3: when the moving path's Poisson setup runs on the device //! R6-3: when the moving path's Poisson setup runs on the device
//! (`RTX_E3_POISSON_DEVICE=1`, default off) and its grid description. //! (default ON; `RTX_E3_POISSON_DEVICE=0` restores the host) and its grid description.
use crate::solvers::incompressible::embedded3::Grid; use crate::solvers::incompressible::embedded3::Grid;
use crate::solvers::incompressible::embedded3::poisson::device_cg::{ use crate::solvers::incompressible::embedded3::poisson::device_cg::{
@@ -53,9 +53,9 @@ pub(super) fn device_grid(solver: &Solver, g: Grid, dt: f64) -> Option<OperatorG
}) })
} }
/// `RTX_E3_FIELD_P_ONLY=1` (default off): the rebuild's field transfer /// Default ON (`RTX_E3_FIELD_P_ONLY=0` restores the full transfer): the rebuild's field transfer
/// limited to the pressure when the classification and the imposition ran on /// limited to the pressure when the classification and the imposition ran on
/// the device. /// the device.
pub(super) fn field_p_only() -> bool { pub(super) fn field_p_only() -> bool {
std::env::var("RTX_E3_FIELD_P_ONLY").is_ok_and(|v| v == "1") !std::env::var("RTX_E3_FIELD_P_ONLY").is_ok_and(|v| v == "0")
} }