From 534f0597dc13f9b313e33b634dc4f8a0b3d08a90 Mon Sep 17 00:00:00 2001 From: Thomas Gibson <gibsonthomas1120@hotmail.com> Date: Sun, 30 May 2021 12:45:36 -0500 Subject: [PATCH] Use dt utility functions to estimate timestep in models --- grudge/models/__init__.py | 17 ++++++++--------- grudge/models/advection.py | 2 +- grudge/models/em.py | 2 +- grudge/models/wave.py | 4 ++-- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/grudge/models/__init__.py b/grudge/models/__init__.py index bc780365..c251d8f7 100644 --- a/grudge/models/__init__.py +++ b/grudge/models/__init__.py @@ -36,16 +36,15 @@ class Operator: class HyperbolicOperator(Operator): """A base class for hyperbolic Discontinuous Galerkin operators.""" - def max_eigenvalue(self, t, fields, discr): + def max_eigenvalue(self, t, fields, dcoll): raise NotImplementedError - def estimate_rk4_timestep(self, discr, t=None, fields=None): + def estimate_rk4_timestep(self, dcoll, t=None, fields=None): """Estimate the largest stable timestep for an RK4 method. """ - - from grudge.dt_finding import ( - dt_non_geometric_factor, - dt_geometric_factor) - return 1 / self.max_eigenvalue(t, fields, discr) \ - * (dt_non_geometric_factor(discr) - * dt_geometric_factor(discr)) + from grudge.dt_utils import (dt_non_geometric_factor, + dt_geometric_factor) + + return 1 / self.max_eigenvalue(t, fields, dcoll) \ + * (dt_non_geometric_factor(dcoll) + * dt_geometric_factor(dcoll)) diff --git a/grudge/models/advection.py b/grudge/models/advection.py index 37ed429b..fa4df664 100644 --- a/grudge/models/advection.py +++ b/grudge/models/advection.py @@ -84,7 +84,7 @@ class AdvectionOperatorBase(HyperbolicOperator): def weak_flux(self, u_tpair): return advection_weak_flux(self.dcoll, self.flux_type, u_tpair, self.v) - def max_eigenvalue(self, t=None, fields=None, discr=None): + def max_eigenvalue(self, t=None, fields=None, dcoll=None): return np.linalg.norm(self.v) diff --git a/grudge/models/em.py b/grudge/models/em.py index 44ec4a6e..c77d82db 100644 --- a/grudge/models/em.py +++ b/grudge/models/em.py @@ -344,7 +344,7 @@ class MaxwellOperator(HyperbolicOperator): return op.nodal_max(self.dcoll, "vol", 1 / actx.np.sqrt(self.epsilon * self.mu)) - def max_eigenvalue(self, t, fields=None, discr=None, context=None): + def max_eigenvalue(self, t, fields=None, dcoll=None, context=None): if context is None: context = {} if self.fixed_material: diff --git a/grudge/models/wave.py b/grudge/models/wave.py index ed0d4019..5001b0b2 100644 --- a/grudge/models/wave.py +++ b/grudge/models/wave.py @@ -175,7 +175,7 @@ class WeakWaveOperator(HyperbolicOperator): self.neumann_tag, self.radiation_tag]) - def max_eigenvalue(self, t, fields=None, discr=None): + def max_eigenvalue(self, t, fields=None, dcoll=None): return abs(self.c) @@ -331,7 +331,7 @@ class VariableCoefficientWeakWaveOperator(HyperbolicOperator): self.neumann_tag, self.radiation_tag]) - def max_eigenvalue(self, t, fields=None, discr=None): + def max_eigenvalue(self, t, fields=None, dcoll=None): actx = self.dcoll._setup_actx return op.nodal_max(self.dcoll, "vol", actx.np.fabs(self.c)) -- GitLab