Skip to content

kups.observables.pressure

Pressure calculations from stress tensors and ideal gas law.

IsIdealGasSystems

Bases: HasTemperature, HasUnitCell, Protocol

Systems with temperature and unit cell for ideal gas pressure.

Source code in src/kups/observables/pressure.py
@runtime_checkable
class IsIdealGasSystems(HasTemperature, HasUnitCell, Protocol):
    """Systems with temperature and unit cell for ideal gas pressure."""

ideal_gas_pressure(counts, systems)

Compute ideal gas pressure P = N·k_B·T / V.

Parameters:

Name Type Description Default
counts Table[SystemId, Array]

Number of independent bodies per system (e.g. molecules for rigid-body MCMC, atoms for MD).

required
systems Table[SystemId, IsIdealGasSystems]

Per-system temperature and unit cell.

required

Returns:

Type Description
Table[SystemId, Array]

Ideal gas pressure per system, shape (n_systems,).

Source code in src/kups/observables/pressure.py
def ideal_gas_pressure(
    counts: Table[SystemId, Array],
    systems: Table[SystemId, IsIdealGasSystems],
) -> Table[SystemId, Array]:
    """Compute ideal gas pressure P = N·k_B·T / V.

    Args:
        counts: Number of independent bodies per system (e.g. molecules
            for rigid-body MCMC, atoms for MD).
        systems: Per-system temperature and unit cell.

    Returns:
        Ideal gas pressure per system, shape ``(n_systems,)``.
    """
    return Table.transform(_ideal_gas_pressure)(
        counts,
        systems.map_data(lambda s: s.temperature),
        systems.map_data(lambda s: s.unitcell.volume),
    )