NEDAS.assim_tools.assimilators.DART.core module
- class NEDAS.assim_tools.assimilators.DART.core.DARTAssimilator(c: Context)[source]
Bases:
AssimilatorDART’s own filter_main (libdartfilter.so), with its file I/O replaced by NEDAS memory.
NEDAS does the state/obs preparation, the transpose to ensemble-complete blocks and H(x); DART runs inflation, QC, QCEFF and the serial filter_assim on NEDAS’s communicator. See build_dart_filter.sh and nedas_hooks_mod.f90.
- assim_mode: str = 'batch'
- assign_obs(c: Context)
Assign the observation sequence to each partition par_id
- Parameters:
c (Context) – the runtime context object
- Returns:
Indices in the full obs_seq for the subset of obs that belongs to partition par_id
- Return type:
dict[ObsRecordID, dict[PartitionID, np.ndarray]]
- slots(c: Context) dict[source]
DART quantity/type slot (1-based) for each (variable name, component)
- transpose_to_ensemble_complete(c: Context) None[source]
Communicate among mpi ranks and transpose the locally-stored state/obs chunks to ensemble-complete
- assimilation_algorithm(c: Context) None[source]
The main assimilation algorithm will be implemented by subclasses
- collect_obs(c: Context, slots: dict) dict[source]
Obs metadata on every rank (DART’s serial loop needs it), sorted by time; the H(x) ensemble only for the obs this rank owns in DART (sorted position j, owner j % nproc)
- static to_owners(c: Context, ens: dict, obs: dict, buf: ndarray) ndarray[source]
Send NEDAS’s (member, record) obs ensembles to their DART owners, into buf (nens, nowned)
- posterior_obs(c: Context, par_id, data, state, obs, post) None[source]
Called from inside filter_main: H(x_post) with NEDAS’s own obs operators