def __init__(self, dtype=numpy.float64, rcon=None, vector_primitive_factory=None): if vector_primitive_factory is None: from hedge.vector_primitives import VectorPrimitiveFactory self.vector_primitive_factory = VectorPrimitiveFactory() else: self.vector_primitive_factory = vector_primitive_factory from pytools.log import IntervalTimer, EventCounter timer_factory = IntervalTimer if rcon is not None: timer_factory = rcon.make_timer self.timer = timer_factory("t_rk4", "Time spent doing algebra in RK4") self.flop_counter = EventCounter( "n_flops_rk4", "Floating point operations performed in RK4") from pytools import match_precision self.dtype = numpy.dtype(dtype) self.scalar_dtype = match_precision(numpy.dtype(numpy.float64), self.dtype) self.coeffs = numpy.array([self._RK4A, self._RK4B, self._RK4C], dtype=self.scalar_dtype).T
def __init__(self, use_high_order=True, dtype=numpy.float64, rcon=None, vector_primitive_factory=None, atol=0, rtol=0, max_dt_growth=5, min_dt_shrinkage=0.1, limiter=None): if vector_primitive_factory is None: from hedge.vector_primitives import VectorPrimitiveFactory self.vector_primitive_factory = VectorPrimitiveFactory() else: self.vector_primitive_factory = vector_primitive_factory from pytools.log import IntervalTimer, EventCounter timer_factory = IntervalTimer if rcon is not None: timer_factory = rcon.make_timer if limiter is None: self.limiter = lambda x: x else: self.limiter = limiter self.timer = timer_factory("t_rk", "Time spent doing algebra in Runge-Kutta") self.flop_counter = EventCounter( "n_flops_rk", "Floating point operations performed in Runge-Kutta") self.use_high_order = use_high_order self.dtype = numpy.dtype(dtype) self.adaptive = bool(atol or rtol) self.atol = atol self.rtol = rtol from pytools import match_precision self.scalar_dtype = match_precision(numpy.dtype(numpy.float64), self.dtype) self.max_dt_growth = max_dt_growth self.min_dt_shrinkage = min_dt_shrinkage self.linear_combiner_cache = {}