use scirs2_core::ndarray::{Array2, Array3};
#[derive(Debug, Clone)]
pub struct FluidState {
pub velocity: Vec<Array2<f64>>,
pub pressure: Array2<f64>,
pub temperature: Option<Array2<f64>>,
pub time: f64,
pub dx: f64,
pub dy: f64,
}
#[derive(Debug, Clone)]
pub struct FluidState3D {
pub velocity: Vec<Array3<f64>>,
pub pressure: Array3<f64>,
pub temperature: Option<Array3<f64>>,
pub time: f64,
pub dx: f64,
pub dy: f64,
pub dz: f64,
}
impl FluidState {
pub fn new(nx: usize, ny: usize, dx: f64, dy: f64) -> Self {
Self {
velocity: vec![
Array2::zeros((nx, ny)), Array2::zeros((nx, ny)), ],
pressure: Array2::zeros((nx, ny)),
temperature: None,
time: 0.0,
dx,
dy,
}
}
pub fn new_with_temperature(nx: usize, ny: usize, dx: f64, dy: f64) -> Self {
Self {
velocity: vec![
Array2::zeros((nx, ny)), Array2::zeros((nx, ny)), ],
pressure: Array2::zeros((nx, ny)),
temperature: Some(Array2::zeros((nx, ny))),
time: 0.0,
dx,
dy,
}
}
pub fn dimensions(&self) -> (usize, usize) {
let shape = self.pressure.raw_dim();
(shape[0], shape[1])
}
pub fn has_temperature(&self) -> bool {
self.temperature.is_some()
}
}
impl FluidState3D {
pub fn new(nx: usize, ny: usize, nz: usize, dx: f64, dy: f64, dz: f64) -> Self {
Self {
velocity: vec![
Array3::zeros((nx, ny, nz)), Array3::zeros((nx, ny, nz)), Array3::zeros((nx, ny, nz)), ],
pressure: Array3::zeros((nx, ny, nz)),
temperature: None,
time: 0.0,
dx,
dy,
dz,
}
}
pub fn new_with_temperature(
nx: usize,
ny: usize,
nz: usize,
dx: f64,
dy: f64,
dz: f64,
) -> Self {
Self {
velocity: vec![
Array3::zeros((nx, ny, nz)), Array3::zeros((nx, ny, nz)), Array3::zeros((nx, ny, nz)), ],
pressure: Array3::zeros((nx, ny, nz)),
temperature: Some(Array3::zeros((nx, ny, nz))),
time: 0.0,
dx,
dy,
dz,
}
}
pub fn dimensions(&self) -> (usize, usize, usize) {
let shape = self.pressure.raw_dim();
(shape[0], shape[1], shape[2])
}
pub fn has_temperature(&self) -> bool {
self.temperature.is_some()
}
}