diff --git a/grudge/models/advection.py b/grudge/models/advection.py index df29ecdcab2882d1602943e87db7219988fa45dd..adf9321095937dc5fe536ca0b9d47937bf5d0d79 100644 --- a/grudge/models/advection.py +++ b/grudge/models/advection.py @@ -121,7 +121,12 @@ class StrongAdvectionOperator(AdvectionOperatorBase): dcoll, op.face_mass( dcoll, - flux(op.interior_trace_pair(dcoll, u)) + inflow_flux + flux(op.interior_trace_pair(dcoll, u)) + # communication of interface fluxes between + # parallel boundaries + + sum(flux(tpair) + for tpair in op.cross_rank_trace_pairs(dcoll, u)) + + inflow_flux # FIXME: Add support for inflow/outflow tags # + flux(TracePair(self.inflow_tag, @@ -166,7 +171,12 @@ class WeakAdvectionOperator(AdvectionOperatorBase): np.dot(self.v, op.weak_local_grad(dcoll, u)) - op.face_mass( dcoll, - flux(op.interior_trace_pair(dcoll, u)) + inflow_flux + flux(op.interior_trace_pair(dcoll, u)) + # communication of interface fluxes between + # parallel boundaries + + sum(flux(tpair) + for tpair in op.cross_rank_trace_pairs(dcoll, u)) + + inflow_flux # FIXME: Add support for inflow/outflow tags # + flux(TracePair(self.inflow_tag, @@ -269,6 +279,11 @@ class VariableCoefficientAdvectionOperator(AdvectionOperatorBase): dcoll, face_dd, flux(to_quad_int_tpair(dcoll, u, self.quad_tag)) + # communication of interface fluxes between + # parallel boundaries + + sum(flux(tpair) + for tpair in op.cross_rank_trace_pairs(dcoll, u, + self.quad_tag)) + inflow_flux # FIXME: Add support for inflow/outflow tags @@ -371,6 +386,11 @@ class SurfaceAdvectionOperator(AdvectionOperatorBase): dcoll, face_dd, flux(to_quad_int_tpair(dcoll, u, self.quad_tag)) + # communication of interface fluxes between + # parallel boundaries + + sum(flux(tpair) + for tpair in op.cross_rank_trace_pairs(dcoll, u, + self.quad_tag)) ) ) ) diff --git a/grudge/models/em.py b/grudge/models/em.py index a3fc5b323cde4f46764758ea3f704eb30b2f908c..d23eb08082ec2075761bac53e681b15345bfab62 100644 --- a/grudge/models/em.py +++ b/grudge/models/em.py @@ -301,6 +301,10 @@ class MaxwellOperator(HyperbolicOperator): op.face_mass( dcoll, flux(op.interior_trace_pair(dcoll, w)) + # communication of interface fluxes between + # parallel boundaries + + sum(flux(tpair) + for tpair in op.cross_rank_trace_pairs(dcoll, w)) + sum(flux(bv_tpair(tag, w, bc)) for tag, bc in tags_and_bcs) )