pub struct PatchField<T: Clone> {
pub bc: BoundaryCondition<T>,
pub values: Field<T>,
}Expand description
Boundary field for one patch: the BC type plus the current face values.
The values field always holds the latest face values (updated by
update_coeffs in Layer 3 operators). For FixedValue/FixedField the
values are set at construction and never change. For ZeroGradient and
Calculated they are written by the operator code.
Fields§
§bc: BoundaryCondition<T>The boundary condition applied on this patch.
values: Field<T>Current face values for this patch (length == patch.size).
Implementations§
Source§impl PatchField<f64>
impl PatchField<f64>
Sourcepub fn fixed_value(size: usize, v: f64) -> Self
pub fn fixed_value(size: usize, v: f64) -> Self
Dirichlet patch holding a uniform scalar v on all size faces.
Sourcepub fn zero_gradient(size: usize) -> Self
pub fn zero_gradient(size: usize) -> Self
Zero-gradient (Neumann) scalar patch of size faces; values default to
0.0 and are overwritten by the operator that owns them.
Sourcepub fn update_total_pressure(&mut self, rho: &[f64], u_mag: &[f64])
pub fn update_total_pressure(&mut self, rho: &[f64], u_mag: &[f64])
Solver hook for a TotalPressure
patch: recompute the per-face static pressures p = p0 − 0.5·ρ·|U|²
[Pa] from the current patch density and velocity magnitude, storing them
in values.
The solver must call this each outer iteration, because the boundary
pressure depends on the patch velocity/density (a cross-field dependency
the BC cannot read on its own). No-op if the patch is not a
TotalPressure BC.
rho— density per face[kg·m⁻³], length == patch size.u_mag— velocity magnitude|U|per face[m·s⁻¹], length == patch size.
Source§impl PatchField<Vector3>
impl PatchField<Vector3>
Sourcepub fn fixed_value_vec(size: usize, v: Vector3) -> Self
pub fn fixed_value_vec(size: usize, v: Vector3) -> Self
Dirichlet patch holding a uniform Vector3 value v on all size faces.
Sourcepub fn zero_gradient_vec(size: usize) -> Self
pub fn zero_gradient_vec(size: usize) -> Self
Zero-gradient (Neumann) vector patch of size faces; values default to
Vector3::ZERO and are overwritten by the operator that owns them.
Sourcepub fn update_flow_rate_inlet_velocity(&mut self, area_vectors: &[Vector3])
pub fn update_flow_rate_inlet_velocity(&mut self, area_vectors: &[Vector3])
Solver hook for a
FlowRateInletVelocity patch:
fill the per-face uniform inlet velocities U = −(Q / A_patch)·n̂
[m·s⁻¹] from the patch face-area vectors, where A_patch = Σ_f |S_f|.
The rate Q is read from the BC variant; the velocity magnitude depends
on the patch area, which comes from the mesh, so the solver (or setup
code) calls this once the patch geometry is known. No-op if the patch is
not a FlowRateInletVelocity BC.
area_vectors— this patch’s face area vectorsS_f[m²], length == patch size.
Sourcepub fn update_pressure_inlet_outlet_velocity(
&mut self,
phi: &[f64],
area_vectors: &[Vector3],
)
pub fn update_pressure_inlet_outlet_velocity( &mut self, phi: &[f64], area_vectors: &[Vector3], )
Solver hook for a
PressureInletOutletVelocity
patch: fill the per-face flux-implied wall-normal velocities
U = (φ_f / |S_f|)·n̂ [m·s⁻¹] (OpenFOAM’s refValue).
The solver must call this each iteration with the current face flux,
because the imposed velocity is reconstructed from the flux and face
geometry. The convection operator additionally flux-switches the patch per
face (fixedValue on inflow, zeroGradient on outflow). No-op if the
patch is not a PressureInletOutletVelocity BC.
phi— outward face fluxφ_f = U·S_f[m³·s⁻¹]per face, length == patch size.area_vectors— this patch’s face area vectorsS_f[m²], length == patch size.
Source§impl PatchField<Tensor>
impl PatchField<Tensor>
Sourcepub fn fixed_value_tensor(size: usize, v: Tensor) -> Self
pub fn fixed_value_tensor(size: usize, v: Tensor) -> Self
Dirichlet patch holding a uniform Tensor value.
Sourcepub fn zero_gradient_tensor(size: usize) -> Self
pub fn zero_gradient_tensor(size: usize) -> Self
Zero-gradient (Neumann) patch for a Tensor field; values default to
Tensor::ZERO and are overwritten by the operator that owns them.
Source§impl PatchField<SymmTensor>
impl PatchField<SymmTensor>
Sourcepub fn fixed_value_symm_tensor(size: usize, v: SymmTensor) -> Self
pub fn fixed_value_symm_tensor(size: usize, v: SymmTensor) -> Self
Dirichlet patch holding a uniform SymmTensor value.
Sourcepub fn zero_gradient_symm_tensor(size: usize) -> Self
pub fn zero_gradient_symm_tensor(size: usize) -> Self
Zero-gradient (Neumann) patch for a SymmTensor field; values default to
SymmTensor::ZERO and are overwritten by the operator that owns them.