qualia_core_db/specialized_libs/physics_simulation/
metrics.rs1use super::*;
2
3pub struct PhysicsPerformanceMonitor {
5 simulation_metrics: SimulationMetrics,
6 solver_metrics: SolverMetrics,
7 mesh_metrics: MeshMetrics,
8 data_metrics: DataMetrics,
9}
10
11#[derive(Debug, Clone)]
13pub struct SimulationMetrics {
14 pub total_simulations: u64,
15 pub average_simulation_time: f64,
16 pub time_step_count: u64,
17 pub convergence_rate: f64,
18 pub stability_metrics: StabilityMetrics,
19}
20
21#[derive(Debug, Clone)]
23pub struct StabilityMetrics {
24 pub cfl_number: f64,
25 pub numerical_dissipation: f64,
26 pub error_growth_rate: f64,
27 pub energy_conservation: f64,
28}
29
30#[derive(Debug, Clone)]
32pub struct SolverMetrics {
33 pub linear_solver_metrics: LinearSolverMetrics,
34 pub nonlinear_solver_metrics: NonlinearSolverMetrics,
35 pub eigenvalue_solver_metrics: EigenvalueSolverMetrics,
36 pub optimization_solver_metrics: OptimizationSolverMetrics,
37}
38
39#[derive(Debug, Clone)]
41pub struct LinearSolverMetrics {
42 pub average_iterations: f64,
43 pub convergence_rate: f64,
44 pub condition_number: f64,
45 pub residual_reduction: f64,
46}
47
48#[derive(Debug, Clone)]
50pub struct NonlinearSolverMetrics {
51 pub average_iterations: f64,
52 pub convergence_rate: f64,
53 pub line_search_steps: f64,
54 pub function_evaluations: f64,
55}
56
57#[derive(Debug, Clone)]
59pub struct EigenvalueSolverMetrics {
60 pub average_iterations: f64,
61 pub convergence_rate: f64,
62 pub eigenvalue_accuracy: f64,
63 pub eigenvector_orthogonality: f64,
64}
65
66#[derive(Debug, Clone)]
68pub struct OptimizationSolverMetrics {
69 pub average_iterations: f64,
70 pub convergence_rate: f64,
71 pub objective_value: f64,
72 pub constraint_violation: f64,
73}
74
75#[derive(Debug, Clone)]
77pub struct MeshMetrics {
78 pub total_nodes: u64,
79 pub total_elements: u64,
80 pub mesh_quality: MeshQualityMetrics,
81 pub partition_metrics: PartitionMetrics,
82}
83
84#[derive(Debug, Clone)]
86pub struct PartitionMetrics {
87 pub number_of_partitions: u32,
88 pub load_balance_factor: f64,
89 pub communication_volume: u64,
90 pub surface_to_volume_ratio: f64,
91}
92
93#[derive(Debug, Clone)]
95pub struct DataMetrics {
96 pub total_data_size: u64,
97 pub data_throughput: f64,
98 pub cache_hit_rate: f64,
99 pub compression_ratio: f64,
100 pub storage_utilization: f64,
101}
102
103impl PhysicsPerformanceMonitor {
104 pub fn new() -> Self {
105 Self {
106 simulation_metrics: SimulationMetrics::new(),
107 solver_metrics: SolverMetrics::new(),
108 mesh_metrics: MeshMetrics::new(),
109 data_metrics: DataMetrics::new(),
110 }
111 }
112
113 pub fn get_metrics(&self) -> PhysicsPerformanceMetrics {
114 PhysicsPerformanceMetrics {
115 simulation_metrics: self.simulation_metrics.clone(),
116 solver_metrics: self.solver_metrics.clone(),
117 mesh_metrics: self.mesh_metrics.clone(),
118 data_metrics: self.data_metrics.clone(),
119 average_execution_time: self.simulation_metrics.average_simulation_time,
120 operations_count: self.simulation_metrics.total_simulations,
121 }
122 }
123}
124
125impl SimulationMetrics {
126 pub fn new() -> Self {
127 Self {
128 total_simulations: 0,
129 average_simulation_time: 0.0,
130 time_step_count: 0,
131 convergence_rate: 0.0,
132 stability_metrics: StabilityMetrics::new(),
133 }
134 }
135}
136
137impl StabilityMetrics {
138 pub fn new() -> Self {
139 Self {
140 cfl_number: 0.0,
141 numerical_dissipation: 0.0,
142 error_growth_rate: 0.0,
143 energy_conservation: 0.0,
144 }
145 }
146}
147
148impl SolverMetrics {
149 pub fn new() -> Self {
150 Self {
151 linear_solver_metrics: LinearSolverMetrics::new(),
152 nonlinear_solver_metrics: NonlinearSolverMetrics::new(),
153 eigenvalue_solver_metrics: EigenvalueSolverMetrics::new(),
154 optimization_solver_metrics: OptimizationSolverMetrics::new(),
155 }
156 }
157}
158
159impl LinearSolverMetrics {
160 pub fn new() -> Self {
161 Self {
162 average_iterations: 0.0,
163 convergence_rate: 0.0,
164 condition_number: 0.0,
165 residual_reduction: 0.0,
166 }
167 }
168}
169
170impl NonlinearSolverMetrics {
171 pub fn new() -> Self {
172 Self {
173 average_iterations: 0.0,
174 convergence_rate: 0.0,
175 line_search_steps: 0.0,
176 function_evaluations: 0.0,
177 }
178 }
179}
180
181impl EigenvalueSolverMetrics {
182 pub fn new() -> Self {
183 Self {
184 average_iterations: 0.0,
185 convergence_rate: 0.0,
186 eigenvalue_accuracy: 0.0,
187 eigenvector_orthogonality: 0.0,
188 }
189 }
190}
191
192impl OptimizationSolverMetrics {
193 pub fn new() -> Self {
194 Self {
195 average_iterations: 0.0,
196 convergence_rate: 0.0,
197 objective_value: 0.0,
198 constraint_violation: 0.0,
199 }
200 }
201}
202
203impl MeshMetrics {
204 pub fn new() -> Self {
205 Self {
206 total_nodes: 0,
207 total_elements: 0,
208 mesh_quality: MeshQualityMetrics::new(),
209 partition_metrics: PartitionMetrics::new(),
210 }
211 }
212}
213
214impl PartitionMetrics {
215 pub fn new() -> Self {
216 Self {
217 number_of_partitions: 1,
218 load_balance_factor: 1.0,
219 communication_volume: 0,
220 surface_to_volume_ratio: 0.0,
221 }
222 }
223}
224
225impl DataMetrics {
226 pub fn new() -> Self {
227 Self {
228 total_data_size: 0,
229 data_throughput: 0.0,
230 cache_hit_rate: 0.0,
231 compression_ratio: 0.0,
232 storage_utilization: 0.0,
233 }
234 }
235}