use deep_causality_tensor::CausalTensor;
use deep_causality_topology::{LatticeComplex, Manifold};
use crate::solvers::dec::DecNsScalar;
use super::boundary_zone::BoundaryZone;
#[derive(Debug, Clone)]
pub struct BodyForceZone<R: DecNsScalar> {
force: CausalTensor<R>,
}
impl<R: DecNsScalar> BodyForceZone<R> {
pub fn new(force: CausalTensor<R>) -> Self {
Self { force }
}
pub fn force(&self) -> &CausalTensor<R> {
&self.force
}
}
impl<const D: usize, R: DecNsScalar> BoundaryZone<D, R> for BodyForceZone<R> {
fn collect_rate_source(&self, _manifold: &Manifold<LatticeComplex<D, R>, R>, acc: &mut [R]) {
for (a, f) in acc.iter_mut().zip(self.force.as_slice().iter()) {
*a += *f;
}
}
}