from typing import Any
from g3d.defs import G3DSizes
from g3d.flow.placeholders import ConsField
from g3d.flow.solver.step import G3DStep
[docs]
class RungeKutta(G3DStep):
def __init__(self, *args: Any, **kwargs: Any) -> None:
self.__cons0 = ConsField()
super().__init__(*args, **kwargs)
def _allocate(self) -> None:
super()._allocate()
g3d_sizes = G3DSizes()
self.__cons0.setup(n_cells=g3d_sizes.n_cells)
[docs]
def fwd(self) -> None:
"""
"""
self._domain.auxvr()
self._ltsp()
self.__cons0.set_from_cons_field(self._cons)
# RK 1
self._dcons.evaluate()
self._cons.WAXPY(1.0, self._dcons, self.__cons0)
self.__cons0.AXPBY(0.5, 0.5, self._cons)
self._domain.auxvr()
# RK 2
self._dcons.evaluate()
self._cons.WAXPY(0.5, self._dcons, self.__cons0)
self._domain.auxvr()
# RK 3
self._dcons.evaluate()
self._cons.WAXPY(0.5, self._dcons, self.__cons0)