ensemble data assimilation and model error estimation algorithm developed by milija zupanski and...
DESCRIPTION
Ensemble Data Assimilation (EnsDA) Algorithm assimilation.sh script assimilation.sh iter < ioutmax forward.sh: Transformation from model space to observation space - Analysis error covariance calculation - Save current cycle output files Hessian preconditioning (only for iter=1) Gradient calculation (ensembles) Cost function calculation (diagnostic) Minimization (ensemble subspace) Step-length (line-search) Control variable update (transformation from ensemble subspace to model (physical) space) Dusanka Zupanski, CIRA/CSUTRANSCRIPT
![Page 1: Ensemble data assimilation and model error estimation algorithm Developed by Milija Zupanski and Dusanka Zupanski CIRA/CSU Dusanka Zupanski, CIRA/CSU](https://reader036.vdocuments.us/reader036/viewer/2022082601/5a4d1b6b7f8b9ab0599b3249/html5/thumbnails/1.jpg)
Ensemble data assimilation and model Ensemble data assimilation and model error estimation algorithmerror estimation algorithm
Developed byDeveloped by
Milija Zupanski and Dusanka ZupanskiMilija Zupanski and Dusanka ZupanskiCIRA/CSUCIRA/CSU
Dusanka Zupanski, CIRA/[email protected]
GEOS column model component of the algorithm developed in collaboration with:
Arthur Hou and Sara Zhang NASA/GMAOChristian Kummerow CSU/ATM Science Department
![Page 2: Ensemble data assimilation and model error estimation algorithm Developed by Milija Zupanski and Dusanka Zupanski CIRA/CSU Dusanka Zupanski, CIRA/CSU](https://reader036.vdocuments.us/reader036/viewer/2022082601/5a4d1b6b7f8b9ab0599b3249/html5/thumbnails/2.jpg)
Ensemble Data Assimilation (EnsDA) Algorithmprep_ensda.sh
cycle_ensda.sh
WARM start: Copy files from previously completed cycle
COLD start: Run randomly-perturbed ensemble forecasts to initialize fcst err cov
icycle < N_cycles_max
post.sh (post-processing)
fcsterr_cov.sh- Prepare first-guess (background) vector
- Prepare forecast error covariance (from ensembles)
prep_obs.shGiven ‘OBSTYPE’ and ‘delobs’, select and copy available obs files
assimilation.shIterative minimization of cost function, save current cycle output
Dusanka Zupanski, CIRA/[email protected]
![Page 3: Ensemble data assimilation and model error estimation algorithm Developed by Milija Zupanski and Dusanka Zupanski CIRA/CSU Dusanka Zupanski, CIRA/CSU](https://reader036.vdocuments.us/reader036/viewer/2022082601/5a4d1b6b7f8b9ab0599b3249/html5/thumbnails/3.jpg)
Ensemble Data Assimilation (EnsDA) Algorithmassimilation.sh script
assimilation.sh
iter < ioutmax
forward.sh: Transformation from model space to observation space
- Analysis error covariance calculation
- Save current cycle output files
Hessian preconditioning (only for iter=1)
Gradient calculation (ensembles)
Cost function calculation (diagnostic)
Minimization (ensemble subspace)
Step-length (line-search)
Control variable update
(transformation from ensemble subspace to model (physical) space)
Dusanka Zupanski, CIRA/[email protected]
![Page 4: Ensemble data assimilation and model error estimation algorithm Developed by Milija Zupanski and Dusanka Zupanski CIRA/CSU Dusanka Zupanski, CIRA/CSU](https://reader036.vdocuments.us/reader036/viewer/2022082601/5a4d1b6b7f8b9ab0599b3249/html5/thumbnails/4.jpg)
Ensemble Data Assimilation (EnsDA) AlgorithmOrganization chart
../ensda/include: Include files (control variable list, first-guess list)
../ensda/makefiles: Makefile_ensda, Makefile_’MODEL’
../ensda/runscripts: Run EnsDA program (runensda, envir.sh)
../ensda/scripts: Scripts used to run the EnsDA program
../ensda/src: Source programs
../’MODEL’/src: Model source programs (general)
../’MODEL’/src_ensda: Model source programs (changes due to EnsDA)
../exec/ensda: Executable directory
../’Obsdir’: Observations directory
../ensda/work: Working (temporary) directory
../hold.’print’/current: General EnsDA output
../hold.’print’/cycle1, cycle2, . . . : Cycle specific EnsDA output
Dusanka Zupanski, CIRA/[email protected]
![Page 5: Ensemble data assimilation and model error estimation algorithm Developed by Milija Zupanski and Dusanka Zupanski CIRA/CSU Dusanka Zupanski, CIRA/CSU](https://reader036.vdocuments.us/reader036/viewer/2022082601/5a4d1b6b7f8b9ab0599b3249/html5/thumbnails/5.jpg)
Ensemble Data Assimilation (EnsDA) AlgorithmOptions – envir.sh
MODEL: WRF,UW-NMS,PU-NTU
OBS: OBSTYPE, delobs,OBSFLAG
STAT: Mode (max likelihood), Mean (ensemble mean)
DA_TYPE: Filter, Smoother
COVAR: Localized, Non-localized forecast error covariance
N_CYCLES: Number of data assimilation cycles
CYCLE_INTERVAL: Time interval between cycles
ENS_SIZE: Number of ensemble members
START: Cold (from scratch), Warm (from previous cycle)
IOUTMAX: Number of minimization iterations
MINIM_ALG: Minimization algorithm (C-G, L-BFGS)
MPI_RUN: Parallel run (YES, NO)
nCPU_ensfcst: No. of CPUs for ensemble fcst
nCPU_da: No. of CPUs for data assimilation
Dusanka Zupanski, CIRA/[email protected]
![Page 6: Ensemble data assimilation and model error estimation algorithm Developed by Milija Zupanski and Dusanka Zupanski CIRA/CSU Dusanka Zupanski, CIRA/CSU](https://reader036.vdocuments.us/reader036/viewer/2022082601/5a4d1b6b7f8b9ab0599b3249/html5/thumbnails/6.jpg)
Ensemble Data Assimilation (EnsDA) AlgorithmControl variables
!--------------------------------------- max_num_of_cntrl_vrbls = 5 if(.not.allocated (cvar_list)) then allocate (cvar_list(1:max_num_of_cntrl_vrbls)) end if
!--------------------------------------- ncv= 1 cvar_list(ncv)%ndim = 3 cvar_list(ncv)%start_index(1) = 1 cvar_list(ncv)%start_index(2) = 1 cvar_list(ncv)%start_index(3) = 1 cvar_list(ncv)%start_index(4) = 1 cvar_list(ncv)%end_index(1) = NNXP(1) cvar_list(ncv)%end_index(2) = NNYP(1) cvar_list(ncv)%end_index(3) = NNZP(1) cvar_list(ncv)%end_index(4) = 1 cvar_list(ncv)%name = 'T ' cvar_list(ncv)%stddev = 1.5 cvar_list(ncv)%description = 'Temperature ‘!---------------------------------------
6 p T F F 0 t T F T 1q T F T 3u T F F 0v T F F 0param1 F T F 0param2 F T F 0
!-- first line number is the number of control variables defined --! !-- vrbl name, ic flag, param flag, bias flag, number of biases ----! !--- recall that vrbl name has 9 characters !!!!! !--- All inputs have to be separated by at least one blank space !!!
../include/Cntrl_vrbl_list.h
../namelists/Cntrl_vrbl_’MODEL’.h
Optional control variable components:
- initial conditions
- model bias
- empirical parameters
Dusanka Zupanski, CIRA/[email protected]
![Page 7: Ensemble data assimilation and model error estimation algorithm Developed by Milija Zupanski and Dusanka Zupanski CIRA/CSU Dusanka Zupanski, CIRA/CSU](https://reader036.vdocuments.us/reader036/viewer/2022082601/5a4d1b6b7f8b9ab0599b3249/html5/thumbnails/7.jpg)
Ensemble Data Assimilation (EnsDA) AlgorithmObservations
# Precip obs
export iobs=02
#---------- specified by user --------- export OBSTYPE=precip export OBSFLAG=NOT let "delobs=1*60" ; export delobs #----------- end user ------------------
-------------------------- OBSTYPE – algorithm recognizable obs type delobs – time interval between two successive observation filesOBSFLAG – Specifies if the OBSTYPE obs should be assimilated (YES, NOT)
interface_’MODEL’_’OBSTYPE’.sh
(model produced first-guess file => obs operators compatible first-guess file)
runobs_’OBSTYPE’.sh
(forward-only observation operator: first-guess => innovation vector R-1/2[y-K(x)] )
Dusanka Zupanski, CIRA/[email protected]
![Page 8: Ensemble data assimilation and model error estimation algorithm Developed by Milija Zupanski and Dusanka Zupanski CIRA/CSU Dusanka Zupanski, CIRA/CSU](https://reader036.vdocuments.us/reader036/viewer/2022082601/5a4d1b6b7f8b9ab0599b3249/html5/thumbnails/8.jpg)
Ensemble Data Assimilation (EnsDA) AlgorithmModel
convert_vrbls_from_1d.sh
run_’MODEL’.sh
convert_vrbls_to_1d.sh
- Data assimilation is defined using 1-d control variable
- Model is defined using its own 1-d, 2-d, or 3-d, or 4-d variable
- Need ‘convert’ as an interface between the 1-d and model specific variables
../’MODEL’/src: (‘MODEL’_fcst.F)
read namelists: ‘MODEL_DIMENSION’,’LENGTH’,’MODEL_CNSTS’
call: ‘read/write_model_ic’,’read/write_model_bias’ ,’read/write_model_param’
../’MODEL’/src_ensda:
‘MODEL’_get_init_fcst.F – cold start only, get model_dimension file
‘read/write_model_ic.F’,’read/write_model_bias.F’ ,’read/write_model_param.F’
Dusanka Zupanski, CIRA/[email protected]
![Page 9: Ensemble data assimilation and model error estimation algorithm Developed by Milija Zupanski and Dusanka Zupanski CIRA/CSU Dusanka Zupanski, CIRA/CSU](https://reader036.vdocuments.us/reader036/viewer/2022082601/5a4d1b6b7f8b9ab0599b3249/html5/thumbnails/9.jpg)
Ensemble Data Assimilation (EnsDA) AlgorithmIncluding model bias
DO n=1,N_time !! Main time-loop...if(num_bias.gt.0) then nerr=N_time/max(1,num_bias) nbias=0 if((n.ne.N_time).and.(mod(n,nerr).eq.0.or.n.eq.1)) then nbias=nbias+1 call read_model_bias( . . . ,u_bias,v_bias,t_bias, . . . ,nbias,num_bias) endif endif ...if(num_bias.gt.0) then u_phi(:,:,:)=aa*u_phi(:,:,:)+(1.-aa)*u_bias(:,:,:) v_phi(:,:,:)=aa*v_phi(:,:,:)+(1.-aa)*v_bias(:,:,:) t_phi(:,:,:)=aa*t_phi(:,:,:)+(1.-aa)*t_bias(:,:,:). u(:,:,:)=u(:,:,:)+u_phi(:,:,:) v(:,:,:)=v(:,:,:)+v_phi(:,:,:) t(:,:,:)=t(:,:,:)+t_phi(:,:,:) endif ...END DO !! End main time loop
Dusanka Zupanski, CIRA/[email protected]
![Page 10: Ensemble data assimilation and model error estimation algorithm Developed by Milija Zupanski and Dusanka Zupanski CIRA/CSU Dusanka Zupanski, CIRA/CSU](https://reader036.vdocuments.us/reader036/viewer/2022082601/5a4d1b6b7f8b9ab0599b3249/html5/thumbnails/10.jpg)
Ensemble Data Assimilation (EnsDA) AlgorithmMPI
!-------------------------------------------------------------------- #ifdef MPI_USE include "mpif.h" #endif. . . . . . . . . !==============start calculation=================== #ifdef MPI_USE CALL MPI_INIT(IERR) IF (IERR .NE. MPI_SUCCESS) STOP 'FAILED TO INIT MPI' CALL MPI_COMM_SIZE(MPI_COMM_WORLD, NPROC, IERR) CALL MPI_COMM_RANK(MPI_COMM_WORLD, MPIRANK, IERR) CALL MPI_BARRIER(MPI_COMM_WORLD,IERR) #else write(*,*) "This is a NO MPI run" MPIRANK=0 NPROC=1 #endif !================================================ !-- read ensemble size (NENS) ……
!== define local dimensions and indexes allocate(jdisp(0:NPROC-1)) allocate(jlen(0:NPROC-1)) do irank=0,NPROC-1 CALL para_range(1,NENS,NPROC,irank,jsta,jend) jlen(irank)=jend-jsta+1 jdisp(irank)=jsta-1 end do CALL para_range(1,NENS,NPROC,MPIRANK,jsta,jend) #ifdef MPI_USE CALL MPI_BARRIER(MPI_COMM_WORLD,IERR) #endif N_LOC=jlen(MPIRANK)
Dusanka Zupanski, CIRA/[email protected]
![Page 11: Ensemble data assimilation and model error estimation algorithm Developed by Milija Zupanski and Dusanka Zupanski CIRA/CSU Dusanka Zupanski, CIRA/CSU](https://reader036.vdocuments.us/reader036/viewer/2022082601/5a4d1b6b7f8b9ab0599b3249/html5/thumbnails/11.jpg)
Dusanka Zupanski, CIRA/[email protected]