Source code for core.space_transfer
import logging
from pySDC.helpers.pysdc_helper import FrozenClass
# short helper class to add params as attributes
class _Pars(FrozenClass):
def __init__(self, pars):
self.periodic = False
self.equidist_nested = True
self.iorder = 2
self.rorder = 2
for k, v in pars.items():
setattr(self, k, v)
# freeze class, no further attributes allowed from this point
self._freeze()
[docs]
class SpaceTransfer(object):
"""
Abstract SpaceTransfer class
Attributes:
params (__Pars): parameters given by the user
logger: custom logger for transfer-related logging
fine_prob (pySDC.Problem.ptype): reference to the fine problem
coarse_prob (pySDC.Problem.ptype): reference to the coarse problem
"""
def __init__(self, fine_prob, coarse_prob, space_transfer_params):
"""
Initialization routine
Args:
fine_prob (pySDC.Problem.ptype): reference to the fine problem
coarse_prob (pySDC.Problem.ptype): reference to the coarse problem
space_transfer_params (dict): user-defined parameters
"""
self.params = _Pars(space_transfer_params)
# set up logger
self.logger = logging.getLogger('space-transfer')
# just copy by object
self.fine_prob = fine_prob
self.coarse_prob = coarse_prob
[docs]
def restrict(self, F):
"""
Abstract interface for restriction in space
Args:
F: the fine level data (easier to access than via the fine attribute)
"""
raise NotImplementedError('ERROR: space_transfer has to implement restrict(self, F)')
[docs]
def prolong(self, G):
"""
Abstract interface for prolongation in space
Args:
G: the coarse level data (easier to access than via the coarse attribute)
"""
raise NotImplementedError('ERROR: space_transfer has to implement prolong(self, G)')