diff --git a/src/lbmpy/creationfunctions.py b/src/lbmpy/creationfunctions.py index b997b3898e6454ac3a6a9241eaa83bc1ab7a23b1..ebac5b2fa8ebd4ea8cbc36b52ef3254d94dae8d5 100644 --- a/src/lbmpy/creationfunctions.py +++ b/src/lbmpy/creationfunctions.py @@ -469,7 +469,7 @@ class LBMConfig: } if self.psm_config is not None and self.psm_config.fraction_field is not None: - self.force = [(1.0 - self.psm_config.fraction_field.center) * f for f in self.force] + self.force = [(1.0 - self.psm_config.fraction_field_symbol) * f for f in self.force] if isinstance(self.force_model, str): new_force_model = ForceModel[self.force_model.upper()] @@ -784,7 +784,7 @@ def create_lb_method(lbm_config=None, **params): if lbm_config.psm_config is None: fraction_field = None else: - fraction_field = lbm_config.psm_config.fraction_field + fraction_field = lbm_config.psm_config.fraction_field_symbol common_params = { 'compressible': lbm_config.compressible, diff --git a/src/lbmpy/methods/creationfunctions.py b/src/lbmpy/methods/creationfunctions.py index 01cd85c61fdb0d1b71efaaf280d57d0df420c02b..eece583fb2e19c569882abfa4b3d6938667d6a65 100644 --- a/src/lbmpy/methods/creationfunctions.py +++ b/src/lbmpy/methods/creationfunctions.py @@ -372,7 +372,7 @@ def create_central_moment(stencil, relaxation_rates, nested_moments=None, rr_dict = _get_relaxation_info_dict(relaxation_rates, nested_moments, stencil.D, conserved_moments) if fraction_field is not None: - relaxation_rates_modifier = (1.0 - fraction_field.center) + relaxation_rates_modifier = (1.0 - fraction_field) rr_dict = _get_relaxation_info_dict(relaxation_rates, nested_moments, stencil.D, relaxation_rates_modifier=relaxation_rates_modifier) @@ -548,7 +548,7 @@ def create_cumulant(stencil, relaxation_rates, cumulant_groups, conserved_moment cumulant_to_rr_dict = _get_relaxation_info_dict(relaxation_rates, cumulant_groups, stencil.D, conserved_moments) if fraction_field is not None: - relaxation_rates_modifier = (1.0 - fraction_field.center) + relaxation_rates_modifier = (1.0 - fraction_field) cumulant_to_rr_dict = _get_relaxation_info_dict(relaxation_rates, cumulant_groups, stencil.D, relaxation_rates_modifier=relaxation_rates_modifier) diff --git a/src/lbmpy/methods/momentbased/momentbasedmethod.py b/src/lbmpy/methods/momentbased/momentbasedmethod.py index 740834072a0210772d407a7e441b9e1ef46d0f7a..1168889e89d27e8cac54ea3d4fb624f5c82e51c9 100644 --- a/src/lbmpy/methods/momentbased/momentbasedmethod.py +++ b/src/lbmpy/methods/momentbased/momentbasedmethod.py @@ -177,7 +177,7 @@ class MomentBasedLbMethod(AbstractLbMethod): pre_simplification: bool = True) -> LbmCollisionRule: if self.fraction_field is not None: - relaxation_rates_modifier = (1.0 - self.fraction_field.center) + relaxation_rates_modifier = (1.0 - self.fraction_field) rr_sub_expressions, d = self._generate_symbolic_relaxation_matrix( relaxation_rates_modifier=relaxation_rates_modifier) else: diff --git a/src/lbmpy/partially_saturated_cells.py b/src/lbmpy/partially_saturated_cells.py index 963d55a2c6416d1226eb48f14989d8a196a7126c..1a66f4456203825faa5e198346d90c8eaf5fa41d 100644 --- a/src/lbmpy/partially_saturated_cells.py +++ b/src/lbmpy/partially_saturated_cells.py @@ -13,6 +13,11 @@ class PSMConfig: Fraction field for PSM """ + fraction_field_symbol = sp.Symbol('B') + """ + Fraction field symbol used for simplification + """ + object_velocity_field: Field = None """ Object velocity field for PSM @@ -98,6 +103,10 @@ def get_psm_force_from_solid_collision(solid_collisions, stencil, object_force_f return AssignmentCollection(force_assignments) +def replace_fraction_symbol_with_field(psm_config, assignment): + return assignment.subs(psm_config.fraction_field_symbol, psm_config.fraction_field.center(0)) + + def add_psm_solid_collision_to_collision_rule(collision_rule, psm_config, particle_per_cell_counter): method = collision_rule.method @@ -131,7 +140,8 @@ def replace_by_psm_collision_rule(collision_rule, psm_config): psm_config.object_force_field, p) for i, main in enumerate(collision_rule.main_assignments): - rhs = main.rhs + rhs = replace_fraction_symbol_with_field(psm_config, main.rhs) + for p in range(psm_config.max_particles_per_cell): rhs += solid_collisions[p][i] collision_assignments.append(Assignment(main.lhs, rhs))