Skip to main content

hoomd_interaction/
zero.rs

1// Copyright (c) 2024-2026 The Regents of the University of Michigan.
2// Part of hoomd-rs, released under the BSD 3-Clause License.
3
4//! Implement `Zero`
5
6use serde::{Deserialize, Serialize};
7
8use hoomd_microstate::{Body, Microstate};
9
10use super::{DeltaEnergyInsert, DeltaEnergyOne, DeltaEnergyRemove, TotalEnergy};
11
12/// Set the energy of any system to 0.
13///
14/// *hoomd-rs* uses [`Zero`] in minimal examples that demonstrate MC simulations.
15/// It returns 0 for all energies and delta energies.
16#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
17pub struct Zero;
18
19impl<M> TotalEnergy<M> for Zero {
20    #[inline]
21    fn total_energy(&self, _microstate: &M) -> f64 {
22        0.0
23    }
24}
25
26impl<B, S, X, C> DeltaEnergyOne<B, S, X, C> for Zero {
27    #[inline]
28    fn delta_energy_one(
29        &self,
30        _initial_microstate: &Microstate<B, S, X, C>,
31        _body_index: usize,
32        _final_body: &Body<B, S>,
33    ) -> f64 {
34        0.0
35    }
36}
37
38impl<B, S, X, C> DeltaEnergyInsert<B, S, X, C> for Zero {
39    #[inline]
40    fn delta_energy_insert(
41        &self,
42        _initial_microstate: &Microstate<B, S, X, C>,
43        _new_body: &Body<B, S>,
44    ) -> f64 {
45        0.0
46    }
47}
48
49impl<B, S, X, C> DeltaEnergyRemove<B, S, X, C> for Zero {
50    #[inline]
51    fn delta_energy_remove(
52        &self,
53        _initial_microstate: &Microstate<B, S, X, C>,
54        _body_index: usize,
55    ) -> f64 {
56        0.0
57    }
58}