pub struct ConstantForce<V> {
pub force: V,
pub r_0: V,
}Expand description
Apply the same force to every site, independent of the site’s properties.
The field force sets the force vector $\vec{F}$. The corresponding
potential energy $U$ is:
U = - \vec{F} \cdot ( \vec{r} - \vec{r}_0 )The vector $\vec{r}_0$ sets the reference plane where $U = 0$.
§Generics
V: The type used to represent the position and force vectors.
§Example
Basic usage:
use hoomd_interaction::external::ConstantForce;
use hoomd_vector::{Cartesian, Unit};
let constant_force = ConstantForce {
force: Cartesian::from([0.0, -2.0]),
r_0: Cartesian::from([0.0, -10.0]),
};Fields§
§force: VForce vector $[\mathrm{energy}] \cdot [\mathrm{length}]^{-1}$.
r_0: V$\vec{r}_0$ $[\mathrm{length}]$: A point on the plane where $U = 0$.
Implementations§
Source§impl<V> ConstantForce<V>where
V: InnerProduct,
impl<V> ConstantForce<V>where
V: InnerProduct,
Sourcepub fn energy(&self, r: &V) -> f64
pub fn energy(&self, r: &V) -> f64
Compute the energy of a point in a constant force field.
§Example
use hoomd_interaction::external::ConstantForce;
use hoomd_vector::Cartesian;
let constant_force = ConstantForce {
force: Cartesian::from([0.0, -2.0]),
r_0: Cartesian::from([0.0, -10.0]),
};
let energy = constant_force.energy(&[0.0, 0.0].into());
assert_eq!(energy, 20.0);Sourcepub fn force(&self) -> V
pub fn force(&self) -> V
The force vector that acts on all sites.
§Example
use hoomd_interaction::external::ConstantForce;
use hoomd_vector::Cartesian;
let constant_force = ConstantForce {
force: Cartesian::from([0.0, -2.0]),
r_0: Cartesian::from([0.0, -10.0]),
};
let force = constant_force.force();
assert_eq!(force, [0.0, -2.0].into());Trait Implementations§
Source§impl<V: Clone> Clone for ConstantForce<V>
impl<V: Clone> Clone for ConstantForce<V>
Source§fn clone(&self) -> ConstantForce<V>
fn clone(&self) -> ConstantForce<V>
Returns a duplicate 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<V: Debug> Debug for ConstantForce<V>
impl<V: Debug> Debug for ConstantForce<V>
Source§impl<'de, V> Deserialize<'de> for ConstantForce<V>where
V: Deserialize<'de>,
impl<'de, V> Deserialize<'de> for ConstantForce<V>where
V: Deserialize<'de>,
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<V: PartialEq> PartialEq for ConstantForce<V>
impl<V: PartialEq> PartialEq for ConstantForce<V>
Source§impl<V> Serialize for ConstantForce<V>where
V: Serialize,
impl<V> Serialize for ConstantForce<V>where
V: Serialize,
Source§impl<S, P> SiteEnergy<S> for ConstantForce<P>where
S: Position<Position = P>,
P: InnerProduct,
impl<S, P> SiteEnergy<S> for ConstantForce<P>where
S: Position<Position = P>,
P: InnerProduct,
Source§fn site_energy(&self, site_properties: &S) -> f64
fn site_energy(&self, site_properties: &S) -> f64
Evaluate the energy contribution of a single site.
§Example
use hoomd_interaction::{external::ConstantForce, SiteEnergy};
use hoomd_vector::Cartesian;
use hoomd_microstate::property::Point;
let constant_force = ConstantForce {
force: Cartesian::from([0.0, -2.0]),
r_0: Cartesian::from([0.0, -10.0]),
};
let a = Point { position: Cartesian::from([0.0, 0.0]) };
let b = Point { position: Cartesian::from([0.0, 3.0]) };
let energy_0 = constant_force.site_energy(&a);
assert_eq!(energy_0, 20.0);
let energy_1 = constant_force.site_energy(&b);
assert_eq!(energy_1, 26.0);Source§fn site_energy_initial(&self, site_properties: &S) -> f64
fn site_energy_initial(&self, site_properties: &S) -> f64
Evaluate the energy contribution of a single site in the initial state. Read more
Source§fn is_only_infinite_or_zero() -> bool
fn is_only_infinite_or_zero() -> bool
Does this potential only ever return infinity or zero? Read more
Source§impl<S, V> SiteForceAndVirial<S> for ConstantForce<V>
impl<S, V> SiteForceAndVirial<S> for ConstantForce<V>
Source§fn site_force_and_virial(
&self,
site_properties: &S,
) -> (Self::Force, <Self::Force as Outer>::Tensor)
fn site_force_and_virial( &self, site_properties: &S, ) -> (Self::Force, <Self::Force as Outer>::Tensor)
Evaluate the force and virial as a function of a single site’s properties.
§Example
use hoomd_interaction::{SiteForceAndVirial, external::ConstantForce};
use hoomd_linear_algebra::matrix::Matrix;
use hoomd_microstate::property::Point;
use hoomd_vector::Cartesian;
let constant_force = ConstantForce {
force: Cartesian::from([0.0, -2.0]),
r_0: Cartesian::from([0.0, -10.0]),
};
let a = Point {
position: Cartesian::from([0.0, 0.0]),
};
let b = Point {
position: Cartesian::from([0.0, 3.0]),
};
let (force_0, virial_0) = constant_force.site_force_and_virial(&a);
assert_eq!(force_0, [0.0, -2.0].into());
assert_eq!(
virial_0,
Matrix {
rows: [[0.0, 0.0], [0.0, 0.0]]
}
);
let (force_1, virial_1) = constant_force.site_force_and_virial(&b);
assert_eq!(force_1, [0.0, -2.0].into());
assert_eq!(
virial_1,
Matrix {
rows: [[0.0, 0.0], [0.0, -6.0]]
}
);Source§impl<S, V> SiteForceVirialAndTorque<S> for ConstantForce<V>
impl<S, V> SiteForceVirialAndTorque<S> for ConstantForce<V>
Source§fn site_force_virial_and_torque(
&self,
site_properties: &S,
) -> (V, <Self::Force as Outer>::Tensor, V::Bivector)
fn site_force_virial_and_torque( &self, site_properties: &S, ) -> (V, <Self::Force as Outer>::Tensor, V::Bivector)
Evaluate the force, virial, and torque as a function of a single site’s properties.
§Example
use hoomd_interaction::{
SiteForceVirialAndTorque, external::ConstantForce,
};
use hoomd_linear_algebra::matrix::Matrix;
use hoomd_microstate::property::Point;
use hoomd_vector::Cartesian;
let constant_force = ConstantForce {
force: Cartesian::from([0.0, -2.0]),
r_0: Cartesian::from([0.0, -10.0]),
};
let a = Point {
position: Cartesian::from([0.0, 0.0]),
};
let b = Point {
position: Cartesian::from([0.0, 3.0]),
};
let (force_0, virial_0, torque_0) =
constant_force.site_force_virial_and_torque(&a);
assert_eq!(force_0, [0.0, -2.0].into());
assert_eq!(torque_0, 0.0);
assert_eq!(
virial_0,
Matrix {
rows: [[0.0, 0.0], [0.0, 0.0]]
}
);
let (force_1, virial_1, torque_1) =
constant_force.site_force_virial_and_torque(&b);
assert_eq!(force_1, [0.0, -2.0].into());
assert_eq!(torque_1, 0.0);
assert_eq!(
virial_1,
Matrix {
rows: [[0.0, 0.0], [0.0, -6.0]]
}
);impl<V> StructuralPartialEq for ConstantForce<V>
Auto Trait Implementations§
impl<V> Freeze for ConstantForce<V>where
V: Freeze,
impl<V> RefUnwindSafe for ConstantForce<V>where
V: RefUnwindSafe,
impl<V> Send for ConstantForce<V>where
V: Send,
impl<V> Sync for ConstantForce<V>where
V: Sync,
impl<V> Unpin for ConstantForce<V>where
V: Unpin,
impl<V> UnsafeUnpin for ConstantForce<V>where
V: UnsafeUnpin,
impl<V> UnwindSafe for ConstantForce<V>where
V: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more