The OrnsteinZernike Module

OrnsteinZernike — Module

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

source

Module Index

Detailed API

OrnsteinZernike.OZSolution — Type
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.SimpleLiquid — Type
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_compressibility — Method
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_energy — Method
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_pressure — Method
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.solve — Function
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