pyPDAF.PDAF.omi_put_state_generate_obs¶
- pyPDAF.PDAF.omi_put_state_generate_obs()¶
Generation of synthetic observations based on given error statistics and observation operator for diagonal observation error covariance matrix without post-processing, distributing analysis, and setting next observation step.
If non-diagonal observation error covariance matrix has to be used, the generic
pyPDAF.PDAF.put_generate_obs()
can be used.The generated synthetic observations are based on each member of model forecast. Therefore, an ensemble of observations can be obtained. In a typical experiment, one may only need one ensemble member.
Compared to
pyPDAF.PDAF.omi_generate_obs()
, this function has noget_state()
call. This means that the next DA step will not be assigned by user-supplied functions. 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 implementation strategy is similar to an assimilation step. This means that, one can reuse many user-supplied functions for assimilation and observation generation.
- This function executes the user-supplied function in the following sequence:
py__collect_state_pdaf
py__prepoststep_state_pdaf
py__init_dim_obs_pdaf
py__obs_op_pda
py__get_obs_f_pdaf
- 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__get_obs_f_pdaf (Callable[step:int, dim_obs_f:int, observation_f : ndarray[tuple[dim_obs_f], np.float64]]) –
Provide observation vector to user
- Callback Parameters
- stepint
Current time step
- dim_obs_fint
Size of the full observation vector
- observation_fndarray[tuple[dim_obs_f], np.float64]
Full vector of synthetic observations (process-local)
- Callback Returns
- observation_fndarray[tuple[dim_obs_f], np.float64]
Full vector of synthetic observations (process-local)
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
- Returns:
flag – Status flag
- Return type:
int