use crate::PhysicsError;
use crate::kernels::fluids::governing::{
convective_acceleration_kernel, pressure_gradient_force_kernel,
};
use crate::kernels::fluids::quantities::{
AccelerationVector, Density, Velocity3, VelocityGradient,
};
use deep_causality_num::RealField;
pub fn euler_momentum_rhs_kernel<R>(
u: &Velocity3<R>,
grad_u: &VelocityGradient<R>,
grad_p: &[R; 3],
rho: &Density<R>,
body_force_per_mass: &AccelerationVector<R>,
) -> Result<AccelerationVector<R>, PhysicsError>
where
R: RealField,
{
let conv = convective_acceleration_kernel(u, grad_u).into_inner();
let press = pressure_gradient_force_kernel(rho, grad_p)?.into_inner();
let g = body_force_per_mass.value();
Ok(AccelerationVector::new_unchecked([
-conv[0] + press[0] + g[0],
-conv[1] + press[1] + g[1],
-conv[2] + press[2] + g[2],
]))
}