Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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 = {}