pyPDAF.PDAF.put_state_lknetf¶
- pyPDAF.PDAF.put_state_lknetf()¶
It is recommended to use
pyPDAF.PDAF.localomi_put_state()
orpyPDAF.PDAF.localomi_put_state_lknetf_nondiagR()
.PDAF-OMI modules require fewer user-supplied functions and improved efficiency.
A hybridised LETKF and LNETF [1] for a single DA step.
Compared to
pyPDAF.PDAF.assimilate_lknetf()
, 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.The LNETF computes the distribution up to the second moment similar to Kalman filters but using a nonlinear weighting similar to particle filters. This leads to an equal weights assumption for the prior ensemble. The hybridisation with LETKF is expected to lead to improved performance for quasi-Gaussian problems. The function should be called at each model step.
- This function executes the user-supplied function in the following sequence:
py__collect_state_pdaf
py__prepoststep_state_pdaf
py__init_n_domains_p_pdaf
py__init_dim_obs_pdaf
py__obs_op_pdaf (for each ensemble member)
py__init_obs_pdaf (if global adaptive forgetting factor type_forget=1 is used in
pyPDAF.PDAF.init()
)py__init_obsvar_pdaf (if global adaptive forgetting factor is used)
- loop over each local domain:
py__init_dim_l_pdaf
py__init_dim_obs_l_pdaf
py__g2l_state_pdaf
py__g2l_obs_pdaf (localise each ensemble member in observation space)
py__init_obs_l_pdaf
py__init_obsvar_l_pdaf (only called if local adaptive forgetting factor type_forget=2 is used)
py__prodRinvA_pdaf
py__likelihood_l_pdaf
core DA algorithm
py__l2g_state_pdaf
py__obs_op_pdaf (only called with HKN and HNK options called for each ensemble member)
py__likelihood_hyb_l_pda
py__init_obsvar_l_pdaf (only called if local adaptive forgetting factor type_forget=2 is used)
py__prodRinvA_hyb_l_pdaf
Deprecated since version 1.0.0: This function is replaced by
pyPDAF.PDAF.localomi_put_state()
andpyPDAF.PDAF.localomi_put_state_lknetf_nondiagR()
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__init_obs_pdaf (Callable[step:int, dim_obs_p:int, observation_p : ndarray[tuple[dim_obs_p], np.float64]]) –
Initialize PE-local observation vector
- Callback Parameters
- stepint
Current time step
- dim_obs_pint
Size of the observation vector
- observation_pndarray[tuple[dim_obs_p], np.float64]
Vector of observations
- Callback Returns
- observation_pndarray[tuple[dim_obs_p], np.float64]
Vector of observations
py__init_obs_l_pdaf (Callable[domain_p:int, step:int, dim_obs_l:int, observation_l : ndarray[tuple[dim_obs_l], np.float64]]) –
Init. observation vector on local analysis domain
- Callback Parameters
- domain_pint
Index of current local analysis domain
- stepint
Current time step
- dim_obs_lint
Local size of the observation vector
- observation_lndarray[tuple[dim_obs_l], np.float64]
Local vector of observations
- Callback Returns
- observation_lndarray[tuple[dim_obs_l], np.float64]
Local vector of observations
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__prodRinvA_l_pdaf (Callable[domain_p:int, step:int, dim_obs_l:int, rank:int, obs_l : ndarray[tuple[dim_obs_l], np.float64], A_l : ndarray[tuple[dim_obs_l, rank], np.float64], C_l : ndarray[tuple[dim_obs_l, rank], np.float64]]) –
Provide product R^-1 A on local analysis domain
- Callback Parameters
- domain_pint
Index of current local analysis domain
- stepint
Current time step
- dim_obs_lint
Number of local observations at current time step (i.e. the size of the local observation vector)
- rankint
Number of the columns in the matrix processes here. This is usually the ensemble size minus one (or the rank of the initial covariance matrix)
- obs_lndarray[tuple[dim_obs_l], np.float64]
Local vector of observations
- A_lndarray[tuple[dim_obs_l, rank], np.float64]
Input matrix provided by PDAF
- C_lndarray[tuple[dim_obs_l, rank], np.float64]
Output matrix
- Callback Returns
- C_lndarray[tuple[dim_obs_l, rank], np.float64]
Output matrix
py__prodRinvA_hyb_l_pdaf (Callable[domain_p:int, step:int, dim_obs_l:int, dim_ens:int, obs_l : ndarray[tuple[dim_obs_l], np.float64], gamma:float, A_l : ndarray[tuple[dim_obs_l, dim_ens], np.float64], C_l : ndarray[tuple[dim_obs_l, dim_ens], np.float64]]) –
Provide product R^-1 A on local analysis domain with hybrid weight
- Callback Parameters
- domain_pint
Index of current local analysis domain
- stepint
Current time step
- dim_obs_lint
Number of local observations at current time step (i.e. the size of the local observation vector)
- dim_ensint
Number of the columns in the matrix processes here. This is usually the ensemble size minus one (or the rank of the initial covariance matrix)
- obs_lndarray[tuple[dim_obs_l], np.float64]
Local vector of observations
- gammafloat
Hybrid weight provided by PDAF
- A_lndarray[tuple[dim_obs_l, dim_ens], np.float64]
Input matrix provided by PDAF
- C_lndarray[tuple[dim_obs_l, dim_ens], np.float64]
Output matrix
- Callback Returns
- C_lndarray[tuple[dim_obs_l, dim_ens], np.float64]
Output matrix
py__init_n_domains_p_pdaf (Callable[step:int, n_domains_p:int]) –
Provide number of local analysis domains
- Callback Parameters
- stepint
current time step
- n_domains_pint
pe-local number of analysis domains
- Callback Returns
- n_domains_pint
pe-local number of analysis domains
py__init_dim_l_pdaf (Callable[step:int, domain_p:int, dim_l:int]) –
Init state dimension for local ana. domain
- Callback Parameters
- stepint
current time step
- domain_pint
current local analysis domain
- dim_lint
local state dimension
- Callback Returns
- dim_lint
local state dimension
py__init_dim_obs_l_pdaf (Callable[domain_p:int, step:int, dim_obs_f:int, dim_obs_l:int]) –
Initialize dim. of obs. vector for local ana. domain
- Callback Parameters
- domain_pint
index of current local analysis domain
- stepint
current time step
- dim_obs_fint
full dimension of observation vector
- dim_obs_lint
local dimension of observation vector
- Callback Returns
- dim_obs_lint
local dimension of observation vector
py__g2l_state_pdaf (Callable[step:int, domain_p:int, dim_p:int, state_p : ndarray[tuple[dim_p], np.float64], dim_l:int, state_l : ndarray[tuple[dim_l], np.float64]]) –
Get state on local ana. domain from full state
- Callback Parameters
- stepint
current time step
- domain_pint
current local analysis domain
- dim_pint
pe-local full state dimension
- state_pndarray[tuple[dim_p], np.float64]
pe-local full state vector
- dim_lint
local state dimension
- state_lndarray[tuple[dim_l], np.float64]
state vector on local analysis domain
- Callback Returns
- state_lndarray[tuple[dim_l], np.float64]
state vector on local analysis domain
py__l2g_state_pdaf (Callable[step:int, domain_p:int, dim_l:int, state_l : ndarray[tuple[dim_l], np.float64], dim_p:int, state_p : ndarray[tuple[dim_p], np.float64]]) –
Init full state from state on local analysis domain
- Callback Parameters
- stepint
current time step
- domain_pint
current local analysis domain
- dim_lint
local state dimension
- state_lndarray[tuple[dim_l], np.float64]
state vector on local analysis domain
- dim_pint
pe-local full state dimension
- state_pndarray[tuple[dim_p], np.float64]
pe-local full state vector
- Callback Returns
- state_pndarray[tuple[dim_p], np.float64]
pe-local full state vector
py__g2l_obs_pdaf (Callable[domain_p:int, step:int, dim_obs_f:int, dim_obs_l:int, mstate_f : ndarray[tuple[dim_p], np.intc], dim_p:int, mstate_l : ndarray[tuple[dim_l], np.intc], dim_l:int]) –
Restrict full obs. vector to local analysis domain
- Callback Parameters
- domain_pint
Index of current local analysis domain
- stepint
Current time step
- dim_obs_fint
Size of full observation vector for model sub-domain
- dim_obs_lint
Size of observation vector for local analysis domain
- mstate_fndarray[tuple[dim_p], np.intc]
Full observation vector for model sub-domain
- dim_pint
Size of full observation vector for model sub-domain
- mstate_lndarray[tuple[dim_l], np.intc]
Observation vector for local analysis domain
- dim_lint
Size of observation vector for local analysis domain
- Callback Returns
- mstate_lndarray[tuple[dim_l], np.intc]
Observation vector for local analysis domain
py__init_obsvar_pdaf (Callable[step:int, dim_obs_p:int, obs_p : ndarray[tuple[dim_obs_p], np.float64], meanvar:float]) –
Initialize mean observation error variance
- Callback Parameters
- stepint
Current time step
- dim_obs_pint
Size of observation vector
- obs_pndarray[tuple[dim_obs_p], np.float64]
Vector of observations
- meanvarfloat
Mean observation error variance
- Callback Returns
- meanvarfloat
Mean observation error variance
py__init_obsvar_l_pdaf (Callable[domain_p:int, step:int, dim_obs_l:int, obs_l : ndarray[tuple[dim_obs_p], np.float64], dim_obs_p:int, meanvar_l:float]) –
Initialize local mean observation error variance
- Callback Parameters
- domain_pint
Index of current local analysis domain
- stepint
Current time step
- dim_obs_lint
Local dimension of observation vector
- obs_lndarray[tuple[dim_obs_p], np.float64]
Local observation vector
- dim_obs_pint
Dimension of local observation vector
- meanvar_lfloat
Mean local observation error variance
- Callback Returns
- meanvar_lfloat
Mean local observation error variance
py__likelihood_l_pdaf (Callable[domain_p:int, step:int, dim_obs_l:int, obs_l : ndarray[tuple[dim_obs_l], np.float64], resid_l : ndarray[tuple[dim_obs_l], np.float64], likely_l:float]) –
Compute likelihood
- Callback Parameters
- domain_pint
Index of current local analysis domain
- stepint
Current time step
- dim_obs_lint
Number of local observations at current time step (i.e. the size of the local observation vector)
- obs_lndarray[tuple[dim_obs_l], np.float64]
Local vector of observations
- resid_lndarray[tuple[dim_obs_l], np.float64]
nput vector holding the local residual
- likely_lfloat
Output value of the local likelihood
- Callback Returns
- likely_lfloat
Output value of the local likelihood
py__likelihood_hyb_l_pdaf (Callable[domain_p:int, step:int, dim_obs_l:int, obs_l : ndarray[tuple[dim_obs_l], np.float64], resid_l : ndarray[tuple[dim_obs_l], np.float64], gamma:float, likely_l:float]) –
Compute likelihood with hybrid weight
- Callback Parameters
- domain_pint
Index of current local analysis domain
- stepint
Current time step
- dim_obs_lint
Number of local observations at current time step (i.e. the size of the local observation vector)
- obs_lndarray[tuple[dim_obs_l], np.float64]
Local vector of observations
- resid_lndarray[tuple[dim_obs_l], np.float64]
Input vector holding the local residual
- gammafloat
Hybrid weight provided by PDAF
- likely_lfloat
Output value of the local likelihood
- Callback Returns
- likely_lfloat
Output value of the local likelihood
- Returns:
outflag – Status flag
- Return type:
int