+ All Categories
Home > Documents > Lattice Boltzmann implementation for ESPResSoicp/mediawiki/images/0/03/Espresso... · • Fourier...

Lattice Boltzmann implementation for ESPResSoicp/mediawiki/images/0/03/Espresso... · • Fourier...

Date post: 29-Oct-2019
Category:
Upload: others
View: 8 times
Download: 0 times
Share this document with a friend
22
Max Planck Institute for Polymer Research Lattice Boltzmann implementation for ESPResSo Ulf D. Schiller [email protected] July 14th, 2006
Transcript

Max Planck Institutefor Polymer Research

Lattice Boltzmann implementation forESPResSo

Ulf D. Schiller

[email protected]

July 14th, 2006

Overview

• Short introduction to Lattice Boltzmann

• Algorithm

• Integration in ESPResSo

• Data structures

• Parallelization

• Missing features and open issues

Lattice Boltzmann implementation for ESPResSo

Introduction

• Simulations of complex fluids have to account for hydrodynamic interactions

• Explicit solvent simulations are computationally demanding

→ Hybrid approach:

• Molecular Dynamics for the solute

• Lattice Boltzmann for the solvent

• Coupling via viscous momentum transfer

Lattice Boltzmann implementation for ESPResSo

Lattice Boltzmann in 3 + ε Minutes

• particle distributions evolving on a lattice

• streaming and collisions

• discrete set of velocities (D3Q18, D3Q19, etc.)

Lattice Boltzmann implementation for ESPResSo

Lattice Boltzmann in 3 + ε Minutes

• Boltzmann equation

∂tf(x,v, t) + v · ∇xf(x,v, t) = Cf(x,v, t) (1)

f(x,v, t): particle distribution function C: collision operator

• space and time discretized version → Lattice Boltzmann equation (LBE)

ni(x + viτ, t + τ) = ni(x, τ) +∑

j

Lij

(nj − neq

j (ρ,u))

(2)

ni(x, t): particle population vi: velocity τ : time step Lij: collision matrix

• mass & momentum conserved ⇒ Navier-Stokes hydrodynamics

Lattice Boltzmann implementation for ESPResSo

Lattice Boltzmann in 3 + ε Minutes

• Hydrodynamic fields from populations

ρ =∑

i

ni ρu =∑

i

nici Π =∑

i

nici ⊗ ci (3)

• Populations from hydrodynamic fields (pseudo-equilibrium distribution)

n∗i = Aiρ + Biρu · ci + CiΠ′

γγ + DiΠ′αβciαciβ (4)

Lattice Boltzmann implementation for ESPResSo

Lattice Boltzmann in 3 + ε Minutes

• Collisions → relaxation of Π (incompressible limit)

Π′αβ = Πeq

αβ + (1 + λ)(Παβ −Π

eq

αβ

)(5)

λ: eigenvalue of collision matrix Lij

• Streaming → propagation on the lattice

ni(x + ci, t + τ) = n∗i (x, t) (6)

Lattice Boltzmann implementation for ESPResSo

Coupling of particles and fluid

y∆a−

∆x ∆xa−

y∆������������������������������������������������������������������

������������������������������������������������������������������

��

(1,1)

(0,0) (1,0)

(0,1)

• Idea: treat monomers as point particles and apply Stokesian drag

F = −ζ [V − u(R, t)] (7)

• linear interpolation to determine u(R, t)

• ensure momentum conservation by transferring momentum to the fluid

• dissipative forces → add stochastic forces to fulfill fluctuation-dissipation relation

Lattice Boltzmann implementation for ESPResSo

Coupling of particles and fluid

y∆a−

∆x ∆xa−

y∆������������������������������������������������������������������

������������������������������������������������������������������

��

(1,1)

(0,0) (1,0)

(0,1)

• interpolation scheme for u(R, t)

u(R, t) =∑

x∈Cell

δxu(x, t) (8)

• momentum transfer

− 1a3

F =∆j∆t

a2τ∆t

∑x∈Cell

∑i

∆ni(x, t)ci (9)

Lattice Boltzmann implementation for ESPResSo

Algorithm

1. Lattice Boltzmann Dynamics (time step τ)

(a) collision step(b) streaming step

2. Coupling to Molecular Dynamics (time step ∆t)

(a) calculate particle force(b) transfer momentum to fluid

Lattice Boltzmann implementation for ESPResSo

Integration in ESPResSo

• Lattice Boltzmann Dynamics → Integration loop

void integrate_vv(int n_steps){

...

#ifdef LBif (lattice_switch & LATTICE_LB) lb_propagate();if (check_runtime_errors()) break;

#endif

...

}

Lattice Boltzmann implementation for ESPResSo

Integration in ESPResSo

• Coupling → Force calculation

void force_calc(){

...

#ifdef LBif (lattice_switch & LATTICE_LB) calc_particle_lattice_ia() ;

#endif

...

}

Lattice Boltzmann implementation for ESPResSo

Data Structures

• most operations are local → store data for lattice nodes contiguously

ρ u1 u2 u3 Π11 Π12 Π22 Π13 Π23 Π33n1 n2 n3 ...

• data access via struct holding pointers (e.g. node[i].n[k])

typedef struct {

double *n;double *rho;double *j;double *pi;

} LB_FluidNode;

• leads to an additional indirection → inefficient? (discussion)

Lattice Boltzmann implementation for ESPResSo

Data Structures

• General data structure for lattice algorithms

typedef struct _Lattice {

int grid[3] ; // dimensions of the latticeint halo_grid[3] ;

int grid_volume ; // volume of the latticeint halo_grid_volume ;int halo_grid_surface ;int halo_offset ;

double agrid ; // lattice spacingdouble tau ; // lattice time step

void *fields; // pointer to the structs holding pointersvoid *data; // pointer to the actual data

} Lattice;

Lattice Boltzmann implementation for ESPResSo

Data Structures

New lattice algorithms can be easily implemented:

• specify a struct for the data on the lattice nodes

• write routines for memory allocation and data initialization (init-routines)

• convenient data access in the algorithm (lattice.fields.<whatever>)

• direct (low-level) data access is also possible ((<type cast>*)lattice.data[index])

Lattice Boltzmann implementation for ESPResSo

Parallelization

• domain decomposition scheme

• communication of halo regions between processors

Lattice Boltzmann implementation for ESPResSo

Parallelization

• abstract halo communication scheme (independent of lattice data)

typedef struct {

int type; /**< type of halo communication */

int source_node; /**< index of processor which sends halo data */int dest_node; /**< index of processor receiving halo data */

void *send_buffer; /**< pointer to data being sent */void *recv_buffer; /**< pointer to data being received */

Fieldtype fieldtype; /**< type layout of the data beeing exchanged */MPI_Datatype datatype; /**< MPI datatype of data beeing communicated */

} HaloInfo ;

Lattice Boltzmann implementation for ESPResSo

Parallelization

Usage of halo communication scheme:

• specify data layout of the lattice nodes (fieldtype, datatype)

• initialize communicator:

prepare halo communication(&halo comm,&lattice,fieldtype,datatype);

• use it:

halo communication(&halo comm);

(this works, if domain decomposition scheme is feasible for the algorithm)

Lattice Boltzmann implementation for ESPResSo

TCL Commands

• setting up the Lattice Boltzmann fluid

lbfluid ( agrid | tau | density | viscosity | friction | ext_force <value> )*

• analysis routines for the fluid

analyze fluid mass

analyze fluid momentum

analyze fluid temperature (work in progress → definition of fluid temperature?)

analyze fluid velprof

Lattice Boltzmann implementation for ESPResSo

File Structure of LB Implementation

Core Part of LB

lattice.h

halo.h

lb.h

lb.chalo.clattice.c

lb−boundaries.h

lb−boundaries.c

statistics_fluid.h

statistics_fluid.c

Lattice Boltzmann implementation for ESPResSo

Missing Features

• Checkpoints

• Analysis routines: Output of flow field, etc.

• Fourier transformation into k-space (FFTW → Torsten Stuehn, discussion)

• Flexible interactions: couple specific particle types (→ virtual particle ID for fluid?)

• Boundary conditions (partly implemented)

• Simulation of flows (partly implemented)

Lattice Boltzmann implementation for ESPResSo

Open Issues

• Performance benchmarks

• Reproducible trajectories (→ random numbers)

• Momentum drift on Regatta (→ float=maf)

• Correct fluctuations?

• Accuracy of integrator?

• ...

Lattice Boltzmann implementation for ESPResSo


Recommended