Skip to main content

qualia_core_db/specialized_libs/physics_simulation/
metrics.rs

1use super::*;
2
3/// Physics performance monitor
4pub struct PhysicsPerformanceMonitor {
5    simulation_metrics: SimulationMetrics,
6    solver_metrics: SolverMetrics,
7    mesh_metrics: MeshMetrics,
8    data_metrics: DataMetrics,
9}
10
11/// Simulation metrics
12#[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/// Stability metrics
22#[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/// Solver metrics
31#[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/// Linear solver metrics
40#[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/// Nonlinear solver metrics
49#[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/// Eigenvalue solver metrics
58#[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/// Optimization solver metrics
67#[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/// Mesh metrics
76#[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/// Partition metrics
85#[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/// Data metrics
94#[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}