The OrnsteinZernike Module

OrnsteinZernikeModule

A generic solver package for Ornstein-Zernike equations from liquid state theory

source

Module Index

Detailed API

OrnsteinZernike.OZSolutionType
OZSolution

Holds the solution of an Ornstein Zernike problem.

Fields:

  • r: vector of distances
  • k: vector of wave numbers
  • gr: radial distribution function
  • Sk: static structure factor
  • ck: direct correlation function in k space
  • cr: direct correlation function in real space

if the system was a single-component system, gr, Sk, ck and cr are vectors. If instead the system was a multicomponent one, they are three dimensional vectors, where the first dimension contains the values along r, and the second and third dimension contain the data for the species.

source
OrnsteinZernike.SimpleLiquidType
SimpleLiquid{dims, ...} <: System

Holds information about a homogeneous, isotropic system with radially symmetric pair interactions. dims is the dimensionality.

Construct using

SimpleLiquid(dims, ρ, kBT, potential)

Fields:

  • ρ: number density, must be either a Number in case of a single component system, or a Vector in case of a mixture. In the latter case, each element contains the number density of the respective component.
  • kBT: thermal energy
  • potential::Potential: the interaction potential.

Examples:

ρ = 0.5; kBT = 1.1; dims = 3
pot = SingleComponentHardSpheres()
system = SimpleLiquid(dims, ρ, kBT, pot)
ρ = [0.5, 0.1]; kBT = 5.2; dims = 3
pot = MultiComponentHardSpheres([1.0, 0.8])
system = SimpleLiquid(dims, ρ, kBT, pot)
source
OrnsteinZernike.compute_compressibilityMethod
compute_compressibility(sol::OZSolution, system::SimpleLiquid)

Computes the isothermal compressibility χ of the system

uses the formula 1/ρkBTχ = 1 - ρ ĉ(k=0) for single component systems and 1/ρkBTχ = 1 - ρ Σᵢⱼ ĉᵢⱼ(k=0) for mixtures. Eq. (3.6.16) in Hansen and McDonald

source
OrnsteinZernike.compute_excess_energyMethod
compute_excess_energy(sol::OZSolution, system::SimpleLiquid)

Computes the excess energy per particle Eₓ, such that E = (dims/2kBT + Eₓ)N.

uses the formula Eₓ = 1/2 ρ ∫dr g(r) u(r) for single component systems and Eₓ = 1/2 ρ Σᵢⱼ xᵢxⱼ ∫dr gᵢⱼ(r) uᵢⱼ(r) for mixtures. Here x is the concentration fraction xᵢ=ρᵢ/sum(ρ).

source
OrnsteinZernike.compute_virial_pressureMethod
compute_virial_pressure(sol::OZSolution, system::SimpleLiquid)

Computes the pressure via the virial route

uses the formula p = kBTρ - 1/(2d) ρ^2 ∫dr r g(r) u'(r) for single component systems and p = kBT Σᵢρᵢ - 1/(2d) Σᵢⱼ ρᵢρⱼ ∫dr r gᵢⱼ(r) u'ᵢⱼ(r) for mixtures.

It handles discontinuities in the interaction potential analytically if discontinuities(potential) is defined. For additional speed/accuracy define a method of evaluate_potential_derivative(potential, r::Number) that analytically computes du/dr. By default this is done using finite differences.

source
OrnsteinZernike.solveFunction
solve(system::SimpleLiquid, closure::Closure, method::Method)

Solves the system system using the closure closure with method method.

solve(system::SimpleLiquid, closure::Closure)

Solves the system system using the closure closure with the default method NgIteration().

source