# [−]Struct lumol::sys::compute::MolecularVirial

pub struct MolecularVirial;

Compute the virial tensor of the system using the molecular definition

This differs from the AtomicVirial when using rigid molecules, as it will contains the right contributions of the forces maintaining the molecules rigid without needing to compute them.

$$\underline{W} = \sum_i \vec r_i \otimes \vec f_i - \underline H \frac{\partial U}{\partial \underline H}$$

where $\underline{H}$ is the unit cell matrix, $\vec f_i$ the force acting on the atom $i$ (comprising the force needed to keep the molecules rigid) and $\vec r_i$ the position of the atom $i$

If all the interactions are pair interaction, this definition reduces to

$$\underline{W} = \sum_i \sum_{j > i} \sum_{a \in i} \sum_{b \in i} \frac{\vec r_{ab} \otimes \vec f_{ab}}{r_{ab}^2} \vec r_{ab} \cdot \vec r_{ij}$$

where $i$ and $j$ run over all the molecules in the system, while $a$ and $b$ run over all the particles in these molecules

## Trait Implementations

### impl Compute for MolecularVirial

#### type Output = Matrix3

The data type of the property

## Blanket Implementations

### impl<T> Pointable for T

#### type Init = T

The type for initializers.

### impl<T, U> TryFrom<U> for T where    U: Into<T>, [src]

#### type Error = Infallible

The type returned in the event of a conversion error.

### impl<T, U> TryInto<U> for T where    U: TryFrom<T>, [src]

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.