qualia_core_db/specialized_libs/engineering_analysis/
library.rs1use super::*;
2
3pub struct EngineeringAnalysisLibrary {
5 pub(super) structural_analyzer: StructuralAnalyzer,
6 pub(super) mechanical_analyzer: MechanicalAnalyzer,
7 pub(super) thermal_analyzer: ThermalAnalyzer,
8 fluid_analyzer: FluidAnalyzer,
9 pub(super) reliability_analyzer: ReliabilityAnalyzer,
10 linear_algebra: Option<Arc<Mutex<LinearAlgebraLibrary>>>,
14 physics_simulation: Option<Arc<Mutex<PhysicsSimulationLibrary>>>,
16 statistical_computing: Option<Arc<Mutex<StatisticalComputingLibrary>>>,
18 zns_manager: Option<Arc<Mutex<ZnsZoneManager>>>,
20}
21
22impl EngineeringAnalysisLibrary {
23 pub fn new() -> Self {
25 Self {
26 structural_analyzer: StructuralAnalyzer::new(),
27 mechanical_analyzer: MechanicalAnalyzer::new(),
28 thermal_analyzer: ThermalAnalyzer::new(),
29 fluid_analyzer: FluidAnalyzer::new(),
30 reliability_analyzer: ReliabilityAnalyzer::new(),
31 linear_algebra: None,
32 physics_simulation: None,
33 statistical_computing: None,
34 zns_manager: None,
35 }
36 }
37
38 pub fn attach_dependencies(
45 &mut self,
46 linear_algebra: Arc<Mutex<LinearAlgebraLibrary>>,
47 physics_simulation: Arc<Mutex<PhysicsSimulationLibrary>>,
48 statistical_computing: Arc<Mutex<StatisticalComputingLibrary>>,
49 zns_manager: Arc<Mutex<ZnsZoneManager>>,
50 ) {
51 self.linear_algebra = Some(linear_algebra.clone());
52 self.physics_simulation = Some(physics_simulation.clone());
53 self.statistical_computing = Some(statistical_computing.clone());
54 self.zns_manager = Some(zns_manager.clone());
55
56 self.structural_analyzer
58 .attach_linear_algebra(self.linear_algebra.clone());
59 self.structural_analyzer
60 .finite_element_solver
61 .attach_zns_manager(self.zns_manager.clone());
62 self.mechanical_analyzer
63 .attach_physics_simulation(self.physics_simulation.clone());
64 self.thermal_analyzer
65 .attach_physics_simulation(self.physics_simulation.clone());
66 self.thermal_analyzer
67 .attach_statistical_computing(self.statistical_computing.clone());
68 self.reliability_analyzer
69 .attach_statistical_computing(self.statistical_computing.clone());
70 }
71
72 pub fn initialize(&mut self) -> Result<(), EngineeringError> {
74 self.structural_analyzer
78 .attach_linear_algebra(self.linear_algebra.clone());
79 self.structural_analyzer
80 .finite_element_solver
81 .attach_zns_manager(self.zns_manager.clone());
82 self.mechanical_analyzer
83 .attach_physics_simulation(self.physics_simulation.clone());
84 self.thermal_analyzer
85 .attach_physics_simulation(self.physics_simulation.clone());
86 self.thermal_analyzer
87 .attach_statistical_computing(self.statistical_computing.clone());
88 self.reliability_analyzer
89 .attach_statistical_computing(self.statistical_computing.clone());
90
91 self.structural_analyzer.initialize()?;
93
94 self.mechanical_analyzer.initialize()?;
96
97 self.thermal_analyzer.initialize()?;
99
100 self.fluid_analyzer.initialize()?;
102
103 self.reliability_analyzer.initialize()?;
105
106 Ok(())
107 }
108
109 pub fn perform_structural_analysis(
111 &mut self,
112 model: EngineeringModel,
113 analysis_type: AnalysisType,
114 ) -> Result<EngineeringOperationResult<AnalysisResults>, EngineeringError> {
115 let start_time = std::time::Instant::now();
116
117 self.structural_analyzer.validate_model(&model)?;
119
120 self.structural_analyzer.store_model(model.clone());
122
123 let results = self.structural_analyzer.analyze(&model, analysis_type)?;
125
126 let execution_time = start_time.elapsed().as_millis() as u64;
127
128 Ok(EngineeringOperationResult {
129 result: results,
130 execution_time,
131 computational_cost: 0.0,
132 accuracy: None,
133 convergence_info: ConvergenceInfo {
135 converged: true,
136 iterations: 1,
137 convergence_criterion: 0.0,
138 final_error: 0.0,
139 },
140 })
141 }
142
143 pub fn perform_mechanical_analysis(
145 &mut self,
146 model: EngineeringModel,
147 analysis_type: AnalysisType,
148 ) -> Result<EngineeringOperationResult<AnalysisResults>, EngineeringError> {
149 let start_time = std::time::Instant::now();
150
151 self.mechanical_analyzer.validate_model(&model)?;
153
154 let results = self.mechanical_analyzer.analyze(&model, analysis_type)?;
156
157 let execution_time = start_time.elapsed().as_millis() as u64;
158
159 Ok(EngineeringOperationResult {
160 result: results,
161 execution_time,
162 computational_cost: 0.0,
163 accuracy: None,
164 convergence_info: ConvergenceInfo {
165 converged: true,
166 iterations: 150,
167 convergence_criterion: 1e-6,
168 final_error: 1e-8,
169 },
170 })
171 }
172
173 pub fn perform_thermal_analysis(
175 &mut self,
176 model: EngineeringModel,
177 analysis_type: AnalysisType,
178 ) -> Result<EngineeringOperationResult<AnalysisResults>, EngineeringError> {
179 let start_time = std::time::Instant::now();
180
181 self.thermal_analyzer.validate_model(&model)?;
183
184 let results = self.thermal_analyzer.analyze(&model, analysis_type)?;
186
187 let execution_time = start_time.elapsed().as_millis() as u64;
188
189 Ok(EngineeringOperationResult {
190 result: results,
191 execution_time,
192 computational_cost: 0.0,
193 accuracy: None,
194 convergence_info: ConvergenceInfo {
199 converged: true,
200 iterations: 1,
201 convergence_criterion: 0.0,
202 final_error: 0.0,
203 },
204 })
205 }
206
207 pub fn perform_fluid_analysis(
209 &mut self,
210 model: EngineeringModel,
211 analysis_type: AnalysisType,
212 ) -> Result<EngineeringOperationResult<AnalysisResults>, EngineeringError> {
213 let start_time = std::time::Instant::now();
214
215 self.fluid_analyzer.validate_model(&model)?;
217
218 let results = self.fluid_analyzer.analyze(&model, analysis_type)?;
220
221 let execution_time = start_time.elapsed().as_millis() as u64;
222
223 Ok(EngineeringOperationResult {
224 result: results,
225 execution_time,
226 computational_cost: 0.0,
227 accuracy: None,
228 convergence_info: ConvergenceInfo {
229 converged: true,
230 iterations: 300,
231 convergence_criterion: 1e-6,
232 final_error: 1e-8,
233 },
234 })
235 }
236
237 pub fn perform_reliability_analysis(
239 &mut self,
240 model: EngineeringModel,
241 analysis_type: AnalysisType,
242 ) -> Result<EngineeringOperationResult<ReliabilityResults>, EngineeringError> {
243 let start_time = std::time::Instant::now();
244
245 self.reliability_analyzer.validate_model(&model)?;
247
248 let results = self.reliability_analyzer.analyze(&model, analysis_type)?;
250
251 let execution_time = start_time.elapsed().as_millis() as u64;
252
253 Ok(EngineeringOperationResult {
254 result: results,
255 execution_time,
256 computational_cost: 0.0,
257 accuracy: None,
258 convergence_info: ConvergenceInfo {
259 converged: true,
260 iterations: 500,
261 convergence_criterion: 1e-6,
262 final_error: 1e-8,
263 },
264 })
265 }
266
267 pub fn get_performance_stats(&self) -> EngineeringPerformanceMetrics {
269 self.structural_analyzer.get_performance_metrics()
270 }
271
272 pub fn list_analysis_types(&self) -> Vec<String> {
274 self.structural_analyzer.list_analysis_types()
275 }
276
277 pub fn get_model_info(&self, model_id: &str) -> Option<EngineeringModel> {
279 self.structural_analyzer.get_model(model_id)
280 }
281}