use stormath::type_aliases::Float;
use serde::{Serialize, Deserialize};
#[derive(Debug, Clone)]
pub struct WakeIndices {
pub nr_points_along_span: usize,
pub nr_panels_along_span: usize,
pub nr_panels_per_line_element: usize,
pub nr_points_per_line_element: usize,
}
impl WakeIndices {
#[inline(always)]
pub fn panel_index(&self, stream_index: usize, span_index: usize) -> usize {
stream_index * self.nr_panels_along_span + span_index
}
#[inline(always)]
pub fn reverse_panel_index(&self, flat_index: usize) -> (usize, usize) {
let stream_index = flat_index / self.nr_panels_along_span;
let span_index = flat_index % self.nr_panels_along_span;
(stream_index, span_index)
}
#[inline(always)]
pub fn point_index(&self, stream_index: usize, span_index: usize) -> usize {
stream_index * self.nr_points_along_span + span_index
}
#[inline(always)]
pub fn nr_panels(&self) -> usize {
self.nr_panels_along_span * self.nr_panels_per_line_element
}
#[inline(always)]
pub fn nr_points(&self) -> usize {
self.nr_points_along_span * self.nr_points_per_line_element
}
}
#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)]
pub enum FirstWakePointsDirection {
#[default]
Chord,
Freestream,
ActualVelocity
}
#[derive(Debug, Clone)]
pub struct WakeSettings {
pub first_panel_relative_length: Float,
pub last_panel_relative_length: Float,
pub first_wake_points_direction: FirstWakePointsDirection,
pub end_index_induced_velocities_on_wake: usize,
pub shape_damping_factor: Float,
pub neglect_self_induced_velocities: bool,
pub write_wake_data_to_file: bool,
pub wake_files_folder_path: String,
}