Skip to main content

quantrs2_sim/quantum_gravity_simulation/
quantumgravitysimulator_simulate_group.rs

1//! # QuantumGravitySimulator - simulate_group Methods
2//!
3//! This module contains method implementations for `QuantumGravitySimulator`.
4//!
5//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
6
7use 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    /// Run quantum gravity simulation
16    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}