quantrs2_sim/quantum_gravity_simulation/
quantumgravitysimulator_simulate_group.rs1use crate::error::{Result, SimulatorError};
8use scirs2_core::random::prelude::*;
9
10use super::types::{GravityApproach, GravitySimulationResult};
11
12use super::quantumgravitysimulator_type::QuantumGravitySimulator;
13
14impl QuantumGravitySimulator {
15 pub fn simulate(&mut self) -> Result<GravitySimulationResult> {
17 let start_time = std::time::Instant::now();
18 match self.config.gravity_approach {
19 GravityApproach::LoopQuantumGravity => {
20 self.initialize_spacetime()?;
21 self.initialize_lqg_spin_network()?;
22 self.simulate_lqg()?;
23 }
24 GravityApproach::CausalDynamicalTriangulation => {
25 self.initialize_spacetime()?;
26 self.initialize_cdt()?;
27 self.simulate_cdt()?;
28 }
29 GravityApproach::AsymptoticSafety => {
30 self.initialize_asymptotic_safety()?;
31 self.simulate_asymptotic_safety()?;
32 }
33 GravityApproach::HolographicGravity => {
34 self.initialize_ads_cft()?;
35 self.simulate_ads_cft()?;
36 }
37 _ => {
38 return Err(SimulatorError::InvalidConfiguration(format!(
39 "Gravity approach {:?} not yet implemented",
40 self.config.gravity_approach
41 )));
42 }
43 }
44 let computation_time = start_time.elapsed().as_secs_f64();
45 self.stats.total_time += computation_time;
46 self.stats.calculations_performed += 1;
47 self.stats.avg_time_per_step =
48 self.stats.total_time / self.stats.calculations_performed as f64;
49 self.simulation_history.last().cloned().ok_or_else(|| {
50 SimulatorError::InvalidConfiguration("No simulation results available".to_string())
51 })
52 }
53}