Source code for lettuce.force
__all__ = ["Guo", "ShanChen"]
from .util import append_axes
[docs]
class Guo:
def __init__(self, lattice, tau, acceleration):
self.lattice = lattice
self.tau = tau
self.acceleration = lattice.convert_to_tensor(acceleration)
[docs]
def source_term(self, u):
emu = append_axes(self.lattice.e, self.lattice.D) - u
eu = self.lattice.einsum("ib,b->i", [self.lattice.e, u])
eeu = self.lattice.einsum("ia,i->ia", [self.lattice.e, eu])
emu_eeu = emu / (self.lattice.cs ** 2) + eeu / (self.lattice.cs ** 4)
emu_eeuF = self.lattice.einsum("ia,a->i", [emu_eeu, self.acceleration])
weemu_eeuF = append_axes(self.lattice.w, self.lattice.D) * emu_eeuF
return (1 - 1 / (2 * self.tau)) * weemu_eeuF
[docs]
def u_eq(self, f):
return self.ueq_scaling_factor * append_axes(self.acceleration, self.lattice.D) / self.lattice.rho(f)
@property
def ueq_scaling_factor(self):
return 0.5
[docs]
class ShanChen:
def __init__(self, lattice, tau, acceleration):
self.lattice = lattice
self.tau = tau
self.acceleration = lattice.convert_to_tensor(acceleration)
[docs]
def source_term(self, u):
return 0
[docs]
def u_eq(self, f):
return self.ueq_scaling_factor * append_axes(self.acceleration, self.lattice.D) / self.lattice.rho(f)
@property
def ueq_scaling_factor(self):
return self.tau * 1