pyPDAF.PDAF.omi_put_state_lenkf_nondiagR¶
- pyPDAF.PDAF.omi_put_state_lenkf_nondiagR()¶
Covariance localised stochastic EnKF for a single DA step using non-diagnoal observation error covariance matrix without post-processing, distributing analysis, and setting next observation step.
See
pyPDAF.PDAF.omi_put_state_lenkf()
for simpler user-supplied functions using diagnoal observation error covariance matrix.This function is implemented based on [1].
This is the only scheme for covariance localisation in PDAF.
Compared to
pyPDAF.PDAF.omi_assimilate_lenkf_nondiagR()
, this function has noget_state()
call. This means that the analysis is not post-processed, and distributed to the model forecast by user-supplied functions. The next DA step will not be assigned by user-supplied functions as well. This function is typically used when there are not enough CPUs to run the ensemble in parallel, and some ensemble members have to be run serially. ThepyPDAF.PDAF.get_state()
function follows this function call to ensure the sequential DA.This function should be called at each model time step.
- The user-supplied function is executed in the following sequence:
py__collect_state_pdaf
py__prepoststep_state_pdaf
py__init_dim_obs_pdaf
py__obs_op_pdaf (for each ensemble member)
py__localize_pdaf
py__add_obs_err_pdaf
py__init_obscovar_pdaf
py__obs_op_pdaf (repeated to reduce storage)
core DA algorithm
References
- Parameters:
py__collect_state_pdaf (Callable[dim_p:int, state_p : ndarray[tuple[dim_p], np.float64]]) –
Routine to collect a state vector
- Callback Parameters
- dim_pint
pe-local state dimension
- state_pndarray[tuple[dim_p], np.float64]
local state vector
- Callback Returns
- state_pndarray[tuple[dim_p], np.float64]
local state vector
py__init_dim_obs_pdaf (Callable[step:int, dim_obs_p:int]) –
Initialize dimension of observation vector
- Callback Parameters
- stepint
current time step
- dim_obs_pint
dimension of observation vector
- Callback Returns
- dim_obs_pint
dimension of observation vector
py__obs_op_pdaf (Callable[step:int, dim_p:int, dim_obs_p:int, state_p : ndarray[tuple[dim_p], np.float64], m_state_p : ndarray[tuple[dim_obs_p], np.float64]]) –
Observation operator
- Callback Parameters
- stepint
Current time step
- dim_pint
Size of state vector (local part in case of parallel decomposed state)
- dim_obs_pint
Size of observation vector
- state_pndarray[tuple[dim_p], np.float64]
Model state vector
- m_state_pndarray[tuple[dim_obs_p], np.float64]
Observed state vector (i.e. the result after applying the observation operator to state_p)
- Callback Returns
- m_state_pndarray[tuple[dim_obs_p], np.float64]
Observed state vector (i.e. the result after applying the observation operator to state_p)
py__prepoststep_pdaf (Callable[step:int, dim_p:int, dim_ens:int, dim_ens_p:int, dim_obs_p:int, state_p : ndarray[tuple[dim_p], np.float64], uinv : ndarray[tuple[dim_ens-1, dim_ens-1], np.float64], ens_p : ndarray[tuple[dim_p, dim_ens], np.float64], flag:int]) –
User supplied pre/poststep routine
- Callback Parameters
- stepint
current time step (negative for call after forecast)
- dim_pint
pe-local state dimension
- dim_ensint
size of state ensemble
- dim_ens_pint
pe-local size of ensemble
- dim_obs_pint
pe-local dimension of observation vector
- state_pndarray[tuple[dim_p], np.float64]
pe-local forecast/analysis state (the array ‘state_p’ is not generally not initialized in the case of seik. it can be used freely here.)
- uinvndarray[tuple[dim_ens-1, dim_ens-1], np.float64]
inverse of matrix u
- ens_pndarray[tuple[dim_p, dim_ens], np.float64]
pe-local state ensemble
- flagint
pdaf status flag
- Callback Returns
- state_pndarray[tuple[dim_p], np.float64]
pe-local forecast/analysis state (the array ‘state_p’ is not generally not initialized in the case of seik. it can be used freely here.)
- uinvndarray[tuple[dim_ens-1, dim_ens-1], np.float64]
inverse of matrix u
- ens_pndarray[tuple[dim_p, dim_ens], np.float64]
pe-local state ensemble
py__localize_covar_pdaf (Callable[dim_p:int, dim_obs:int, hp_p : ndarray[tuple[dim_obs, dim_p], np.float64], hph : ndarray[tuple[dim_obs, dim_obs], np.float64]]) –
Apply localization to HP and HPH^T
- Callback Parameters
- dim_pint
pe-local state dimension
- dim_obsint
number of observations
- hp_pndarray[tuple[dim_obs, dim_p], np.float64]
pe local part of matrix hp
- hphndarray[tuple[dim_obs, dim_obs], np.float64]
matrix hph
- Callback Returns
- hp_pndarray[tuple[dim_obs, dim_p], np.float64]
pe local part of matrix hp
- hphndarray[tuple[dim_obs, dim_obs], np.float64]
matrix hph
py__add_obs_err_pdaf (Callable[step:int, dim_obs_p:int, C_p : ndarray[tuple[dim_obs_p, dim_obs_p], np.float64]]) –
Add obs error covariance R to HPH in EnKF
- Callback Parameters
- stepint
Current time step
- dim_obs_pint
Dimension of observation vector
- C_pndarray[tuple[dim_obs_p, dim_obs_p], np.float64]
Matrix to that observation covariance R is added
- Callback Returns
- C_pndarray[tuple[dim_obs_p, dim_obs_p], np.float64]
Matrix to that observation covariance R is added
py__init_obs_covar_pdaf (Callable[step:int, dim_obs:int, dim_obs_p:int, covar:float, obs_p : ndarray[tuple[dim_obs_p], np.float64], isdiag:bool]) –
Initialize obs. error cov. matrix R in EnKF
- Callback Parameters
- stepint
Current time step
- dim_obsint
Global size of observation vector
- dim_obs_pint
Size of process-local observation vector
- covarfloat
Observation error covariance matrix
- obs_pndarray[tuple[dim_obs_p], np.float64]
Process-local vector of observations
- isdiagbool
- Callback Returns
- covarfloat
Observation error covariance matrix
- isdiagbool
- Returns:
outflag – Status flag
- Return type:
int