Skip to content
Snippets Groups Projects
Commit 67ae36c3 authored by Markus Holzer's avatar Markus Holzer
Browse files

Implented as real WetNode BC

parent ed868e32
1 merge request!149Draft: Wet Node Boundaries
...@@ -604,6 +604,8 @@ class FixedDensity(LbBoundary): ...@@ -604,6 +604,8 @@ class FixedDensity(LbBoundary):
# end class FixedDensity # end class FixedDensity
class NoslipEquilibriumReconstruction(LbBoundary): class NoslipEquilibriumReconstruction(LbBoundary):
single_link = True
inner_or_boundary = False
def __init__(self, normal_direction, velocity=None, name=None): def __init__(self, normal_direction, velocity=None, name=None):
if isinstance(normal_direction, str): if isinstance(normal_direction, str):
...@@ -636,25 +638,18 @@ class NoslipEquilibriumReconstruction(LbBoundary): ...@@ -636,25 +638,18 @@ class NoslipEquilibriumReconstruction(LbBoundary):
return [NeighbourOffsetArrays(lb_method.stencil)] return [NeighbourOffsetArrays(lb_method.stencil)]
def __call__(self, f_out, f_in, dir_symbol, inv_dir, lb_method, index_field): def __call__(self, f_out, f_in, dir_symbol, inv_dir, lb_method, index_field):
neighbor_offset = NeighbourOffsetArrays.neighbour_offset(dir_symbol, lb_method.stencil)
tangential_offset = tuple(offset + normal for offset, normal in zip(neighbor_offset, self.normal_direction))
cqc = lb_method.conserved_quantity_computation cqc = lb_method.conserved_quantity_computation
density_symbol = sp.Symbol("rho") density_symbol = sp.Symbol("rho")
pdf_field_accesses = [f_out[tangential_offset](i) for i in range(len(lb_method.stencil))] pdf_field_accesses = [f_out[self.normal_direction](i) for i in range(len(lb_method.stencil))]
density_equations = cqc.output_equations_from_pdfs(pdf_field_accesses, {'density': density_symbol}) density_equations = cqc.output_equations_from_pdfs(pdf_field_accesses, {'density': density_symbol})
substitutions = {u_symbolic: u for u_symbolic, u in zip(cqc.velocity_symbols, self.velocity)} substitutions = {u_symbolic: u for u_symbolic, u in zip(cqc.velocity_symbols, self.velocity)}
conditions = list()
equilibrium_terms = lb_method.get_equilibrium_terms().subs(substitutions) equilibrium_terms = lb_method.get_equilibrium_terms().subs(substitutions)
for i, term in enumerate(equilibrium_terms[1:]):
conditions.append((term, sp.Eq(dir_symbol, sp.Integer(i + 1))))
expr = sp.Piecewise(*conditions, (equilibrium_terms[0], True))
subexpressions = density_equations.all_assignments subexpressions = density_equations.all_assignments
main_assignments = [Assignment(f_in(inv_dir[dir_symbol]), expr)] main_assignments = list()
for i in range(len(lb_method.stencil)):
main_assignments.append(Assignment(f_out(i), equilibrium_terms[i]))
ac = AssignmentCollection(main_assignments, subexpressions=subexpressions) ac = AssignmentCollection(main_assignments, subexpressions=subexpressions)
ac = ac.new_without_unused_subexpressions() ac = ac.new_without_unused_subexpressions()
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment