Source code for NEDAS.assim_tools.assimilators
from __future__ import annotations
import importlib
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from NEDAS.core import Context, Assimilator
registry = {
'ETKF': 'ETKFAssimilator',
'EAKF': 'EAKFAssimilator',
'TopazDEnKF': 'TopazDEnKFAssimilator',
'QCEF': 'QCEFAssimilator',
#'PDAF': 'PDAFAssimilator',
#'RHF'
}
[docs]
def get_assimilator(c: Context) -> Assimilator:
"""
Get the correct Assimilator subclass instance based on the configuration.
Args:
c (Context): the runtime context object.
Returns:
Assimilator: Corresponding Assimilator subclass instance.
"""
if c.config.assimilator_def is None:
raise ValueError("assimilator_def not found in Config")
if 'type' not in c.config.assimilator_def.keys():
raise KeyError("'type' needs to be specified in assimilator_def")
assimilator_type = c.config.assimilator_def['type']
if assimilator_type not in registry:
raise NotImplementedError(f"Assimilator type '{assimilator_type}' is not implemented")
module = importlib.import_module('NEDAS.assim_tools.assimilators.'+assimilator_type)
AssimilatorClass = getattr(module, registry[assimilator_type])
return AssimilatorClass(c)
__all__ = ['registry', 'get_assimilator']