Self-consistent Generalized Langevin Equation Theory
The differential equation to solve is
$
\frac{\partial F}{\partial t} + \frac{k^2D0}{S(k)}F(k,t) + \lambda(k)\int0^t dt' \Delta\zeta(t-t')\frac{\partial F}{\partial t'} = 0$
In this case, $\alpha=0$, $\beta=1.0$, $\gamma=k^2D_0/S(k)$, $\delta=0.0$ and $K(k,t) = \lambda(k)\Delta\zeta(t)$. In the context of the SCGLE theory, $\Delta\zeta(t)$ is defined as
\[\Delta \zeta(t) = \frac{k_BT}{36\pi\varphi} \int dq q^2 M^2(q) F_s(q,t) F(q,t),\]
where $M(k) = k \frac{S(k)-1}{S(k)}$, and $\varphi$ is the volume fraction.
This means we need to solve a time integral of the form of the first equation for the collective part, coupled with a similar equation for the self component. To do this, we create a long array of the form
$
F(t) = [fs(t) , f(t)]=[fs[1], fs[2], ..., fs[Nk], f[1], f[2], ..., f[Nk]]$
and thus the coefficient $\gamma$ for $D_0=1.0$ becomes
\[\gamma = [k_i^2, k_i^2/S(k_i)].\]
Analogously, the $\lambda(k)$ array is
$
\lambda = [\lambdas(ki), \lambdac(ki)],$
where
\[\lambda_s = \lambda_c = \frac{1}{1+(k/k_c)^2}\]
with $k_c/2\pi=1.302$.
The following example shows how to solve these equations with ModeCouplingTheory.jl
:
using ModeCouplingTheory, Plots
# defining the structure factor
function find_analytical_C_k(k, η)
A = -(1 - η)^-4 *(1 + 2η)^2
B = (1 - η)^-4* 6η*(1 + η/2)^2
D = -(1 - η)^-4 * 1/2 * η*(1 + 2η)^2
Cₖ = @. 4π/k^6 *
(
24*D - 2*B * k^2 - (24*D - 2 * (B + 6*D) * k^2 + (A + B + D) * k^4) * cos(k)
+ k * (-24*D + (A + 2*B + 4*D) * k^2) * sin(k)
)
return Cₖ
end
function find_analytical_S_k(k, η)
Cₖ = find_analytical_C_k(k, η)
ρ = 6/π * η
Sₖ = @. 1 + ρ*Cₖ / (1 - ρ*Cₖ)
return Sₖ
end
# Appling the Verlet-Weiss correction
# [1] Loup Verlet and Jean-Jacques Weis. Phys. Rev. A 5, 939 – Published 1 February 1972
ϕ_VW(ϕ :: Float64) = ϕ*(1.0 - (ϕ / 16.0))
k_VW(ϕ :: Float64, k :: Float64) = k*((ϕ_VW(ϕ)/ϕ)^(1.0/3.0))
# initial setup
Nk = 100
kmax = 40.0; dk = kmax/Nk
k = dk*(collect(1:Nk) .- 0.5)
# volume factor
ϕ = 0.581
# Structure factor
s = ones(length(k))
S = find_analytical_S_k(k_VW.(ϕ, k), ϕ_VW(ϕ))
# update the long arrays
k = [k; k]
S = [s; S]
∂F0 = zeros(2*Nk); α = 0.0; β = 1.0; γ = @. k^2/S; δ = 0.0
kernel = SCGLEKernel(ϕ, k, S)
equation = MemoryEquation(α, β, γ, δ, S, ∂F0, kernel)
solver = TimeDoublingSolver(Δt=10^-5, t_max=10.0^10,
N = 8, tolerance=10^-8, verbose=true)
sol = @time solve(equation, solver)
using Plots
p = plot(xlabel="log10(t)", ylabel="Fs(k,t)", ylims=(0,1))
for ik = [7, 18, 25, 39]
Fk = get_F(sol, 1:10:800, ik)
t = get_t(sol)[1:10:800]
plot!(p, log10.(t), Fk/S[ik], label="k = $(k[ik])", lw=3)
end
p
Reference:
- Yeomans-Reyna, Laura, and Magdaleno Medina-Noyola. "Self-consistent generalized Langevin equation for colloid dynamics." Physical Review E 64.6 (2001): 066114.