dvcompute_dist/simulation/
specs.rs1use crate::simulation::generator::GeneratorType;
8
9#[derive(Clone)]
11pub struct Specs {
12
13 pub start_time: f64,
15
16 pub stop_time: f64,
18
19 pub dt: f64,
21
22 pub generator_type: GeneratorType
24}
25
26impl Specs {
27
28 #[inline]
32 pub fn grid_time(&self, index: usize, size: usize) -> f64 {
33 let t0 = self.start_time;
34 let t2 = self.stop_time;
35 let n2 = if size <= 1 { 1 } else { size - 1 };
36 let dt2 = (t2 - t0) / (n2 as f64);
37
38 if index == 0 { t0 } else {
39 if index == n2 { t2 } else {
40 t0 + (index as f64) * dt2
41 }
42 }
43 }
44
45 #[inline]
47 pub fn grid_index(&self, t: f64, size: usize) -> usize {
48 let t0 = self.start_time;
49 let t2 = self.stop_time;
50 let n2 = if size <= 1 { 1 } else { size - 1 };
51
52 if t == t0 {
53 0
54 } else if t == t2 {
55 n2
56 } else {
57 let dt = (t2 - t0) / (n2 as f64);
58 ((t - t0) / dt).floor() as usize
59 }
60 }
61}
62
63#[repr(C)]
65#[derive(Clone)]
66pub struct SpecsRepr {
67
68 pub start_time: f64,
70
71 pub stop_time: f64,
73
74 pub dt: f64
76}
77
78impl From<Specs> for SpecsRepr {
79
80 fn from(specs: Specs) -> Self {
81 SpecsRepr {
82 start_time: specs.start_time,
83 stop_time: specs.stop_time,
84 dt: specs.dt
85 }
86 }
87}
88
89impl SpecsRepr {
90
91 #[inline]
95 pub fn grid_time(&self, index: usize, size: usize) -> f64 {
96 let t0 = self.start_time;
97 let t2 = self.stop_time;
98 let n2 = if size <= 1 { 1 } else { size - 1 };
99 let dt2 = (t2 - t0) / (n2 as f64);
100
101 if index == 0 { t0 } else {
102 if index == n2 { t2 } else {
103 t0 + (index as f64) * dt2
104 }
105 }
106 }
107
108 #[inline]
110 pub fn grid_index(&self, t: f64, size: usize) -> usize {
111 let t0 = self.start_time;
112 let t2 = self.stop_time;
113 let n2 = if size <= 1 { 1 } else { size - 1 };
114
115 if t == t0 {
116 0
117 } else if t == t2 {
118 n2
119 } else {
120 let dt = (t2 - t0) / (n2 as f64);
121 ((t - t0) / dt).floor() as usize
122 }
123 }
124}