Struct lattice_qcd_rs::simulation::monte_carlo::hybrid::HybridMethodCouple
source · pub struct HybridMethodCouple<MC1, Error1, MC2, Error2, State, const D: usize>where
MC1: MonteCarlo<State, D, Error = Error1>,
MC2: MonteCarlo<State, D, Error = Error2>,
State: LatticeState<D>,{ /* private fields */ }
Expand description
This method can combine any two methods. The down side is that it can be very verbose to write Couples for a large number of methods.
Example
use lattice_qcd_rs::simulation::{HeatBathSweep, LatticeState, LatticeStateDefault, OverrelaxationSweepReverse, HybridMethodCouple};
use rand::SeedableRng;
let rng = rand::rngs::StdRng::seed_from_u64(0); // change with your seed
let heat_bath = HeatBathSweep::new(rng);
let overrelax = OverrelaxationSweepReverse::default();
let mut couple = HybridMethodCouple::new(heat_bath,overrelax);
let mut state = LatticeStateDefault::<3>::new_cold(1_f64, 8_f64, 4)?; // 1_f64 : size, 8_f64: beta, 4 number of points.
for _ in 0..2 {
state = state.monte_carlo_step(&mut couple)?;
// operation to track the progress or the evolution
}
// operation at the end of the simulation
Implementations§
source§impl<MC1, Error1, MC2, Error2, State, const D: usize> HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where
MC1: MonteCarlo<State, D, Error = Error1>,
MC2: MonteCarlo<State, D, Error = Error2>,
State: LatticeState<D>,
impl<MC1, Error1, MC2, Error2, State, const D: usize> HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1>, MC2: MonteCarlo<State, D, Error = Error2>, State: LatticeState<D>,
sourcepub fn deconstruct(self) -> (MC1, MC2)
pub fn deconstruct(self) -> (MC1, MC2)
Deconstruct the structure ang gives back both methods
Trait Implementations§
source§impl<MC1, Error1: Clone, MC2, Error2: Clone, State, const D: usize> Clone for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where
MC1: MonteCarlo<State, D, Error = Error1> + Clone,
MC2: MonteCarlo<State, D, Error = Error2> + Clone,
State: LatticeState<D> + Clone,
impl<MC1, Error1: Clone, MC2, Error2: Clone, State, const D: usize> Clone for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1> + Clone, MC2: MonteCarlo<State, D, Error = Error2> + Clone, State: LatticeState<D> + Clone,
source§fn clone(&self) -> HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>
fn clone(&self) -> HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl<MC1, Error1: Debug, MC2, Error2: Debug, State, const D: usize> Debug for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where
MC1: MonteCarlo<State, D, Error = Error1> + Debug,
MC2: MonteCarlo<State, D, Error = Error2> + Debug,
State: LatticeState<D> + Debug,
impl<MC1, Error1: Debug, MC2, Error2: Debug, State, const D: usize> Debug for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1> + Debug, MC2: MonteCarlo<State, D, Error = Error2> + Debug, State: LatticeState<D> + Debug,
source§impl<'de, MC1, Error1, MC2, Error2, State, const D: usize> Deserialize<'de> for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where
MC1: MonteCarlo<State, D, Error = Error1> + Deserialize<'de>,
MC2: MonteCarlo<State, D, Error = Error2> + Deserialize<'de>,
State: LatticeState<D>,
impl<'de, MC1, Error1, MC2, Error2, State, const D: usize> Deserialize<'de> for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1> + Deserialize<'de>, MC2: MonteCarlo<State, D, Error = Error2> + Deserialize<'de>, State: LatticeState<D>,
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
source§impl<MC1, Error1: Hash, MC2, Error2: Hash, State, const D: usize> Hash for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where
MC1: MonteCarlo<State, D, Error = Error1> + Hash,
MC2: MonteCarlo<State, D, Error = Error2> + Hash,
State: LatticeState<D> + Hash,
impl<MC1, Error1: Hash, MC2, Error2: Hash, State, const D: usize> Hash for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1> + Hash, MC2: MonteCarlo<State, D, Error = Error2> + Hash, State: LatticeState<D> + Hash,
source§impl<MC1, Error1, MC2, Error2, State, const D: usize> MonteCarlo<State, D> for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where
MC1: MonteCarlo<State, D, Error = Error1>,
MC2: MonteCarlo<State, D, Error = Error2>,
State: LatticeState<D>,
impl<MC1, Error1, MC2, Error2, State, const D: usize> MonteCarlo<State, D> for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1>, MC2: MonteCarlo<State, D, Error = Error2>, State: LatticeState<D>,
§type Error = HybridMethodCoupleError<Error1, Error2>
type Error = HybridMethodCoupleError<Error1, Error2>
Error returned while getting the next element.
source§impl<MC1, Error1: PartialEq, MC2, Error2: PartialEq, State, const D: usize> PartialEq<HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>> for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where
MC1: MonteCarlo<State, D, Error = Error1> + PartialEq,
MC2: MonteCarlo<State, D, Error = Error2> + PartialEq,
State: LatticeState<D> + PartialEq,
impl<MC1, Error1: PartialEq, MC2, Error2: PartialEq, State, const D: usize> PartialEq<HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>> for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1> + PartialEq, MC2: MonteCarlo<State, D, Error = Error2> + PartialEq, State: LatticeState<D> + PartialEq,
source§fn eq(
&self,
other: &HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>
) -> bool
fn eq( &self, other: &HybridMethodCouple<MC1, Error1, MC2, Error2, State, D> ) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.source§impl<MC1, Error1, MC2, Error2, State, const D: usize> Serialize for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where
MC1: MonteCarlo<State, D, Error = Error1> + Serialize,
MC2: MonteCarlo<State, D, Error = Error2> + Serialize,
State: LatticeState<D>,
impl<MC1, Error1, MC2, Error2, State, const D: usize> Serialize for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1> + Serialize, MC2: MonteCarlo<State, D, Error = Error2> + Serialize, State: LatticeState<D>,
impl<MC1, Error1: Copy, MC2, Error2: Copy, State, const D: usize> Copy for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1> + Copy, MC2: MonteCarlo<State, D, Error = Error2> + Copy, State: LatticeState<D> + Copy,
impl<MC1, Error1: Eq, MC2, Error2: Eq, State, const D: usize> Eq for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1> + Eq, MC2: MonteCarlo<State, D, Error = Error2> + Eq, State: LatticeState<D> + Eq,
impl<MC1, Error1, MC2, Error2, State, const D: usize> StructuralEq for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1>, MC2: MonteCarlo<State, D, Error = Error2>, State: LatticeState<D>,
impl<MC1, Error1, MC2, Error2, State, const D: usize> StructuralPartialEq for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where MC1: MonteCarlo<State, D, Error = Error1>, MC2: MonteCarlo<State, D, Error = Error2>, State: LatticeState<D>,
Auto Trait Implementations§
impl<MC1, Error1, MC2, Error2, State, const D: usize> RefUnwindSafe for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where Error1: RefUnwindSafe, Error2: RefUnwindSafe, MC1: RefUnwindSafe, MC2: RefUnwindSafe, State: RefUnwindSafe,
impl<MC1, Error1, MC2, Error2, State, const D: usize> Send for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where Error1: Send, Error2: Send, MC1: Send, MC2: Send, State: Send,
impl<MC1, Error1, MC2, Error2, State, const D: usize> Sync for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where Error1: Sync, Error2: Sync, MC1: Sync, MC2: Sync, State: Sync,
impl<MC1, Error1, MC2, Error2, State, const D: usize> Unpin for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where Error1: Unpin, Error2: Unpin, MC1: Unpin, MC2: Unpin, State: Unpin,
impl<MC1, Error1, MC2, Error2, State, const D: usize> UnwindSafe for HybridMethodCouple<MC1, Error1, MC2, Error2, State, D>where Error1: UnwindSafe, Error2: UnwindSafe, MC1: UnwindSafe, MC2: UnwindSafe, State: UnwindSafe,
Blanket Implementations§
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self
from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self
is actually part of its subset T
(and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset
but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self
to the equivalent element of its superset.