Source code for andes.routines.base
"""
Base class for ANDES calculation routines.
"""
from andes.linsolvers.solverbase import Solver
from andes.core import Config
from collections import OrderedDict
[docs]class BaseRoutine:
"""
Base routine class.
Provides references to system, config, and solver.
"""
[docs] def __init__(self, system=None, config=None):
self.system = system
self.config = Config(self.class_name)
if config is not None:
self.config.load(config)
self.config.add(OrderedDict((('sparselib', 'klu'),
('linsolve', 0),
)))
self.config.add_extra("_help",
sparselib="linear sparse solver name",
linsolve="solve symbolic factorization each step (enable when KLU segfaults)",
)
self.config.add_extra("_alt",
sparselib=("klu", "umfpack", "spsolve", "cupy"),
linsolve=(0, 1),
)
self.solver = Solver(sparselib=self.config.sparselib)
self.exec_time = 0.0 # recorded time to execute the routine in seconds
@property
def class_name(self):
return self.__class__.__name__
[docs] def doc(self, max_width=78, export='plain'):
"""
Routine documentation interface.
"""
return self.config.doc(max_width, export)
[docs] def init(self):
"""
Routine initialization interface.
"""
pass
[docs] def run(self, **kwargs):
"""
Routine main entry point.
"""
raise NotImplementedError
[docs] def summary(self, **kwargs):
"""
Summary interface
"""
raise NotImplementedError
[docs] def report(self, **kwargs):
"""
Report interface.
"""
raise NotImplementedError