use crate::PhysicsError;
use crate::kernels::fluids::governing::{pressure_gradient_force_kernel, viscous_diffusion_kernel};
use crate::kernels::fluids::quantities::{AccelerationVector, Density, KinematicViscosity};
use deep_causality_num::RealField;
pub fn stokes_momentum_rhs_kernel<R>(
laplacian_u: &[R; 3],
grad_p: &[R; 3],
rho: &Density<R>,
nu: &KinematicViscosity<R>,
body_force_per_mass: &AccelerationVector<R>,
) -> Result<AccelerationVector<R>, PhysicsError>
where
R: RealField,
{
let press = pressure_gradient_force_kernel(rho, grad_p)?.into_inner();
let visc = viscous_diffusion_kernel(nu, laplacian_u).into_inner();
let g = body_force_per_mass.value();
Ok(AccelerationVector::new_unchecked([
press[0] + visc[0] + g[0],
press[1] + visc[1] + g[1],
press[2] + visc[2] + g[2],
]))
}