diff --git a/examples/wave/wave-op-mpi.py b/examples/wave/wave-op-mpi.py index e7d216c6d62cf8efbf7595490a5ac7a55208fd0f..f88474a06e3dbf345893b891b34b147e119c0350 100644 --- a/examples/wave/wave-op-mpi.py +++ b/examples/wave/wave-op-mpi.py @@ -72,22 +72,26 @@ def wave_operator(dcoll, c, w): dir_bc = flat_obj_array(-dir_u, dir_v) return ( - op.inverse_mass(dcoll, - flat_obj_array( - -c*op.weak_local_div(dcoll, v), - -c*op.weak_local_grad(dcoll, u) - ) - + # noqa: W504 - op.face_mass(dcoll, - wave_flux(dcoll, c=c, w_tpair=op.interior_trace_pair(dcoll, w)) - + wave_flux(dcoll, c=c, w_tpair=TracePair( - BTAG_ALL, interior=dir_bval, exterior=dir_bc)) - + sum( - wave_flux(dcoll, c=c, w_tpair=tpair) - for tpair in op.cross_rank_trace_pairs(dcoll, w)) - ) - ) + op.inverse_mass( + dcoll, + flat_obj_array( + -c*op.weak_local_div(dcoll, v), + -c*op.weak_local_grad(dcoll, u) + ) + + op.face_mass( + dcoll, + wave_flux( + dcoll, c=c, + w_tpair=TracePair(BTAG_ALL, + interior=dir_bval, + exterior=dir_bc) + ) + sum( + wave_flux(dcoll, c=c, w_tpair=tpair) + for tpair in op.interior_trace_pairs(dcoll, w) ) + ) + ) + ) # }}} @@ -118,7 +122,7 @@ def bump(actx, dcoll, t=0): / source_width**2)) -def main(): +def main(write_output=False): cl_ctx = cl.create_some_context() queue = cl.CommandQueue(cl_ctx) actx = PyOpenCLArrayContext(queue) @@ -187,13 +191,15 @@ def main(): f"Linf: {op.norm(dcoll, fields[0], np.inf)} " f"sol max: {op.nodal_maximum(fields[0])} " f"sol min: {op.nodal_minimum(fields[0])}") - vis.write_parallel_vtk_file( + if write_output: + vis.write_parallel_vtk_file( comm, f"fld-wave-eager-mpi-{{rank:03d}}-{istep:04d}.vtu", [ ("u", fields[0]), ("v", fields[1:]), - ]) + ] + ) t += dt istep += 1 diff --git a/examples/wave/wave-op-var-velocity.py b/examples/wave/wave-op-var-velocity.py index 758c7d38ac6269e4c7ba5672542c07500b5832d4..3774ff1256a80e20a4b1e7bc19d5fa1cb025f5f1 100644 --- a/examples/wave/wave-op-var-velocity.py +++ b/examples/wave/wave-op-var-velocity.py @@ -87,20 +87,26 @@ def wave_operator(dcoll, c, w): dd_allfaces_quad = DOFDesc("all_faces", DISCR_TAG_QUAD) return ( - op.inverse_mass(dcoll, - flat_obj_array( - -op.weak_local_div(dcoll, dd_quad, c_quad*v_quad), - -op.weak_local_grad(dcoll, dd_quad, c_quad*u_quad) \ - # pylint: disable=E1130 - ) - + # noqa: W504 - op.face_mass(dcoll, - dd_allfaces_quad, - wave_flux(dcoll, c=c, w_tpair=op.interior_trace_pair(dcoll, w)) - + wave_flux(dcoll, c=c, w_tpair=TracePair( - BTAG_ALL, interior=dir_bval, exterior=dir_bc)) - )) + op.inverse_mass( + dcoll, + flat_obj_array( + -op.weak_local_div(dcoll, dd_quad, c_quad*v_quad), + -op.weak_local_grad(dcoll, dd_quad, c_quad*u_quad) + ) + op.face_mass( + dcoll, + dd_allfaces_quad, + wave_flux( + dcoll, c=c, + w_tpair=TracePair(BTAG_ALL, + interior=dir_bval, + exterior=dir_bc) + ) + sum( + wave_flux(dcoll, c=c, w_tpair=tpair) + for tpair in op.interior_trace_pairs(dcoll, w) ) + ) + ) + ) # }}} @@ -133,7 +139,7 @@ def bump(actx, dcoll, t=0, width=0.05, center=None): / width**2)) -def main(): +def main(write_output=False): cl_ctx = cl.create_some_context() queue = cl.CommandQueue(cl_ctx) actx = PyOpenCLArrayContext(queue) @@ -195,12 +201,15 @@ def main(): f"Linf: {op.norm(dcoll, fields[0], np.inf)} " f"sol max: {op.nodal_maximum(fields[0])} " f"sol min: {op.nodal_minimum(fields[0])}") - vis.write_vtk_file("fld-wave-eager-var-velocity-%04d.vtu" % istep, + if write_output: + vis.write_vtk_file( + "fld-wave-eager-var-velocity-%04d.vtu" % istep, [ ("c", c), ("u", fields[0]), ("v", fields[1:]), - ]) + ] + ) t += dt istep += 1 diff --git a/examples/wave/wave-op.py b/examples/wave/wave-op.py index ea305dd173f945e9d3bab87cbdd1dcfe8b2311e8..1a9855ddf49217e58a6a483a9c5d8a921a1d0e69 100644 --- a/examples/wave/wave-op.py +++ b/examples/wave/wave-op.py @@ -70,18 +70,27 @@ def wave_operator(dcoll, c, w): dir_bc = flat_obj_array(-dir_u, dir_v) return ( - op.inverse_mass(dcoll, - flat_obj_array( - -c*op.weak_local_div(dcoll, v), - -c*op.weak_local_grad(dcoll, u) - ) - + # noqa: W504 - op.face_mass(dcoll, - wave_flux(dcoll, c=c, w_tpair=op.interior_trace_pair(dcoll, w)) - + wave_flux(dcoll, c=c, w_tpair=TracePair( - BTAG_ALL, interior=dir_bval, exterior=dir_bc)) - )) + op.inverse_mass( + dcoll, + flat_obj_array( + -c*op.weak_local_div(dcoll, v), + -c*op.weak_local_grad(dcoll, u) + ) + + op.face_mass( + dcoll, + sum( + wave_flux(dcoll, c=c, w_tpair=tpair) + for tpair in op.interior_trace_pairs(dcoll, w) + ) + + wave_flux( + dcoll, c=c, + w_tpair=TracePair(BTAG_ALL, + interior=dir_bval, + exterior=dir_bc) ) + ) + ) + ) # }}} @@ -112,7 +121,7 @@ def bump(actx, dcoll, t=0): / source_width**2)) -def main(): +def main(write_output=False): cl_ctx = cl.create_some_context() queue = cl.CommandQueue(cl_ctx) actx = PyOpenCLArrayContext(queue) @@ -162,11 +171,14 @@ def main(): f"Linf: {op.norm(dcoll, fields[0], np.inf)} " f"sol max: {op.nodal_maximum(fields[0])} " f"sol min: {op.nodal_minimum(fields[0])}") - vis.write_vtk_file("fld-wave-eager-%04d.vtu" % istep, + if write_output: + vis.write_vtk_file( + "fld-wave-eager-%04d.vtu" % istep, [ ("u", fields[0]), ("v", fields[1:]), - ]) + ] + ) t += dt istep += 1 diff --git a/grudge/models/wave.py b/grudge/models/wave.py index 92bc875f86d345893b79f4f45cb413c79b6e5c95..e7cc6ee89ef09a2cfb6d73073c661d7d5e13ec10 100644 --- a/grudge/models/wave.py +++ b/grudge/models/wave.py @@ -159,11 +159,8 @@ class WeakWaveOperator(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)) + for tpair in op.interior_trace_pairs(dcoll, w)) + flux(bv_tpair(self.dirichlet_tag, w, dir_bc)) + flux(bv_tpair(self.neumann_tag, w, neu_bc)) + flux(bv_tpair(self.radiation_tag, w, rad_bc)) @@ -319,11 +316,8 @@ class VariableCoefficientWeakWaveOperator(HyperbolicOperator): ) - op.face_mass( dcoll, - flux(op.interior_trace_pair(dcoll, flux_w)) - # communication of interface fluxes between - # parallel boundaries + sum(flux(tpair) - for tpair in op.cross_rank_trace_pairs(dcoll, w)) + for tpair in op.interior_trace_pairs(dcoll, flux_w)) + flux(bv_tpair(self.dirichlet_tag, flux_w, dir_bc)) + flux(bv_tpair(self.neumann_tag, flux_w, neu_bc)) + flux(bv_tpair(self.radiation_tag, flux_w, rad_bc))