From 345da99b0447457424210839198003dd1bd591bd Mon Sep 17 00:00:00 2001 From: Thomas Gibson <gibsonthomas1120@hotmail.com> Date: Mon, 6 Dec 2021 22:38:35 -0600 Subject: [PATCH] Patch: numpify 1-d metric computations and check for 0-dim discretizations --- grudge/geometry/metrics.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/grudge/geometry/metrics.py b/grudge/geometry/metrics.py index af04e09f..34e84e51 100644 --- a/grudge/geometry/metrics.py +++ b/grudge/geometry/metrics.py @@ -488,14 +488,19 @@ def _signed_face_ones( signed_face_ones = dcoll.discr_from_dd(dd).zeros( actx, dtype=dcoll.real_dtype ) + 1 + + from arraycontext import to_numpy, from_numpy, thaw + + _signed_face_ones_numpy = to_numpy(signed_face_ones, actx) + for igrp, grp in enumerate(all_faces_conn.groups): for batch in grp.batches: - i = actx.thaw(batch.to_element_indices) - grp_field = signed_face_ones[igrp].reshape(-1) + i = to_numpy(thaw(batch.to_element_indices, actx), actx) + grp_field = _signed_face_ones_numpy[igrp].reshape(-1) grp_field[i] = \ (2.0 * (batch.to_element_face % 2) - 1.0) * grp_field[i] - return signed_face_ones + return from_numpy(_signed_face_ones_numpy, actx) def parametrization_derivative( @@ -573,8 +578,12 @@ def area_element( result = actx.np.sqrt( pseudoscalar(actx, dcoll, dd=dd).norm_squared()) - if _use_geoderiv_connection: - result = dcoll._base_to_geoderiv_connection(dd)(result) + # NOTE: Don't interpolate 0-dim geometric factors to the + # "geometry discretization" + # (the metrics are just single scalars for facets in 1-D) + if dcoll.discr_from_dd(dd).dim != 0: + if _use_geoderiv_connection: + result = dcoll._base_to_geoderiv_connection(dd)(result) return freeze(result, actx) @@ -672,8 +681,11 @@ def mv_normal( result = mv / actx.np.sqrt(mv.norm_squared()) - if _use_geoderiv_connection: - result = dcoll._base_to_geoderiv_connection(dd)(result) + # NOTE: Don't interpolate normals to the "geometry discretization" + # in 1-D (just a single value for every facet: +1 or -1) + if dim != 0: + if _use_geoderiv_connection: + result = dcoll._base_to_geoderiv_connection(dd)(result) return freeze(result, actx) -- GitLab