3DVAR Tutorial

d. 3DVAR – Run Pseudo Single Observation Test (PSOT)

(05/18/2004)

In this section, you will learn how to run 3DVAR using only a single “pseudo” (or “bogus”) observation.

By this stage you have successfully created the three input files (first guess fg, observation ob and background error statistics be in directory $DAT_DIR) required to run 3DVAR. Also, you have successfully downloaded and compiled the 3DVAR code. If this is correct, we are ready to learn how to run 3DVAR. If not, then you’ll need to return to the 3DVAR Tutorial Page to complete stages a. to c.

To view the MM5 format analysis output of 3DVAR, we make use of the MM5 GRAPH plotting package. You will need to download this and compile. To learn how to do this, visit the MM5 tutorial’s GRAPH tutorial and proceed up to the point at which you have compiled GRAPH in directory $DAT_DIR (i.e. the command make >& make.out & in the GRAPH tutorial). Tidy up $DAT_DIR with the command

rm GRAPH.TAR

1. What is a PSOT anyhow?

A pseudo single observation test (PSOT) involves the assimilation of a pseudo (or bogus) observation of one of the model variables (u, v, T, p, q) at a single point in the domain. In this case, the 3DVAR analysis is achieved in only 1 or 2 iterations. The purpose of these tests is a) To quickly check 3DVAR can run ok on your machine, and b) to illustrate the impact of the background error covariance (B) matrix. Especially when a global B is used for your own 3DVAR experiments with a local domain and the different resolution (The global B we provided has the domain size of 101x181x21 with 210-km grid distance), the variance and scale-length tuning empirically through the namelist variables in 'record7' may need to be done. The single-obs test is a very usefull tool for this task.

The matrix B (info stored in derived data type be) performs two roles for a single observation. Firstly, the closeness of the fit to the analysis A to the observation O and background B is dictated by the background  and observation error variances according to

,         (1)

(Technical point: Equation (1) assumes a quadratic cost-function, as is the case in the current 3DVAR). Note the observation will be fitted exactly (i.e. O – A = 0) only when its observation error variance  is zero or the background error variance is infinite (this is never the case so do not judge the quality of an analysis by how closely it fits the observations – this is a very commonly made error!).

In addition to setting the relative weight of observation and background in the analysis via (1), the background error covariance also defines the response of the analysis away from the observation location in all variables (not just the observed one). In this experiment, we will illustrate this by running a PSOT, and making plots of the analysis increments (A - B) that are produced.

2. Required 3DVAR namelist changes

The number of parameters required to switch on the PSOT capability in 3DVAR is fairly small: basically 3DVAR needs to know where [location – grid x, y, and z values], what [variable – “u”, “v”, “T”, “p” or “q”], observation minus first-guess value (O-B, in units of variable) and how good [observation error standard deviation  in units of variable]. (See namelist.3dvar). Also, you’ll need to switch all the “real” observations off.

The PSOT used in this tutorial is set up in DA_Run_3DVAR_PSOT.csh as an pressure innovation vector (O-B) of 1mb at grid point 40, 30, 31. An observation error standard deviation of 1mb is assigned.

You can see the namelist changes required by differencing the default script (DA_Run_3DVAR.csh) and PSOT script (DA_Run_3DVAR_PSOT.csh), i.e.

cd 3dvar/run

diff DA_Run_3DVAR.csh DA_Run_3DVAR_PSOT.csh > diff.out

To see the differences, type

cat diff.out

and you’ll see

52c52
< setenv RUN_ID 3DVAR.test                                     # Experiment identifier.
---
> setenv RUN_ID 3DVAR.PSOT.test                                # Experiment identifier.
153,161c153,161
< if ( ! $?DA_USE_SYNOPOBS )  set DA_USE_SYNOPOBS = .TRUE.   # True if SYNOP assimilated.
< if ( ! $?DA_USE_SHIPSOBS )  set DA_USE_SHIPSOBS = .TRUE.   # True if SHIPS assimilated.
< if ( ! $?DA_USE_METAROBS )  set DA_USE_METAROBS = .TRUE.   # True if METAR assimilated.
< if ( ! $?DA_USE_PILOTOBS )  set DA_USE_PILOTOBS = .TRUE.   # etc
< if ( ! $?DA_USE_SOUNDOBS )  set DA_USE_SOUNDOBS = .TRUE.
< if ( ! $?DA_USE_SATEMOBS )  set DA_USE_SATEMOBS = .TRUE.
< if ( ! $?DA_USE_SATOBOBS )  set DA_USE_SATOBOBS = .TRUE.
< if ( ! $?DA_USE_AIREPOBS )  set DA_USE_AIREPOBS = .TRUE.
< if ( ! $?DA_USE_GPSPWOBS )  set DA_USE_GPSPWOBS = .TRUE.
---
> if ( ! $?DA_USE_SYNOPOBS )  set DA_USE_SYNOPOBS = .FALSE.  # True if SYNOP assimilated.
> if ( ! $?DA_USE_SHIPSOBS )  set DA_USE_SHIPSOBS = .FALSE.  # True if SHIPS assimilated.
> if ( ! $?DA_USE_METAROBS )  set DA_USE_METAROBS = .FALSE.  # True if METAR assimilated.
> if ( ! $?DA_USE_PILOTOBS )  set DA_USE_PILOTOBS = .FALSE.  # etc
> if ( ! $?DA_USE_SOUNDOBS )  set DA_USE_SOUNDOBS = .FALSE.
> if ( ! $?DA_USE_SATEMOBS )  set DA_USE_SATEMOBS = .FALSE.
> if ( ! $?DA_USE_SATOBOBS )  set DA_USE_SATOBOBS = .FALSE.
> if ( ! $?DA_USE_AIREPOBS )  set DA_USE_AIREPOBS = .FALSE.
> if ( ! $?DA_USE_GPSPWOBS )  set DA_USE_GPSPWOBS = .FALSE.
164,166c164,166
< if ( ! $?DA_USE_SSMT1OBS ) set DA_USE_SSMT1OBS = .TRUE.
< if ( ! $?DA_USE_SSMT2OBS ) set DA_USE_SSMT2OBS = .TRUE.
< if ( ! $?DA_USE_QSCATOBS ) set DA_USE_QSCATOBS = .TRUE.
---
> if ( ! $?DA_USE_SSMT1OBS ) set DA_USE_SSMT1OBS = .FALSE.
> if ( ! $?DA_USE_SSMT2OBS ) set DA_USE_SSMT2OBS = .FALSE.
> if ( ! $?DA_USE_QSCATOBS ) set DA_USE_QSCATOBS = .FALSE.
165c165
< if ( ! $?DA_Check_Max_IV ) set DA_Check_Max_IV = .TRUE.
---
> if ( ! $?DA_Check_Max_IV ) set DA_Check_Max_IV = .FALSE.
207c207
< if ( ! $?DA_CHECK_RH ) set DA_CHECK_RH = 2
---
> if ( ! $?DA_CHECK_RH ) set DA_CHECK_RH = 0
222c222
< if ( ! $?DA_NUM_PSEUDO ) set DA_NUM_PSEUDO = 0              # Set to 1 for PSOT test.
---
> if ( ! $?DA_NUM_PSEUDO ) set DA_NUM_PSEUDO = 1              # Set to 1 for PSOT test.

Note that for the PSOT, we do not need to do the maximum innovation (O-B) check for the observations, so set DA_Check_Max_IV to be .FALSE. while for the real case run, the (O-B) check must be turned on by setting .TRUE., to avoid the bad data assimilated. Also, the removing supersaturation is not necessary for PSOT (DA_CHECK_RH = 0), but it is needed for the real case run (DA_CHECK_RH = 2).

 

3. Run 3DVAR

The only changes you need to make to the DA_Run_3DVAR_PSOT.csh script are to specify the DAT_DIR and RUN_DIR environment variables. All output is directed to the directory $RUN_DIR.

Once you have set the necessary environment variables, run 3DVAR by typing

DA_Run_3DVAR_PSOT.csh

in the 3dvar/run subdirectory.

Successful completion of the job results in a number of output diagnostics files in the ${RUN_DIR} directory.

4. View 3DVAR Analysis Increments

If you have not already done so, download and compile GRAPH.

As mentioned above, PSOTs are useful for illustrating the impact of background error covariances in 3DVAR. A g_plots.tbl for plotting the increments fields could be found from MM5V3 GRAPH by clicking "MM5V3 GRAPH Code". As an example, a g_plots.tbl resides in your GRAPH directory. Then, go to directory, and run GRAPH, type

graph.csh 1 1 ${RUN_DIR}/DAProg_3DVAR.analincs

where ${RUN_DIR} is the directory containing your output. On successful completion, a file “gmeta” will be produced containing plots of the 3DVAR analysis increments. This can be viewed by typing

idt gmeta

The file contains plots of temperature and pressure increments due to the single O-B=1mb pressure differences used in this PSOT. A vertical cross-section resulting from the pressure PSOT is shown below:

Note the three-dimensional, multivariate response. In future versions of 3DVAR, this response will be flow-dependent (i.e. vary from day to day depending on the current weather).

To save the gmeta file for this PSOT, type

cp gmeta ${DAT_DIR}/gmeta.psot

PSOTs are very instructive in helping you understand how a data assimilation system uses observations. It is suggested that you now take some time to run other PSOTs to help you get familiar with the 3DVAR script (don’t forget to change RUN_DIR if you want to save each PSOT), namelist and to probe how 3DVAR uses various types of conventional observation variables.

 

Example 1 – Move the location of the PSOT to x = 20, y = 20, k=15.

Example 2 – Create a wind (e.g. u) PSOT instead of a pressure PSOT.

Example 3 – Halve the observation error standard deviation and note how the observation is fitted more closely (the analysis increment is larger). Can you confirm equation (1) holds for your tests?

Example 4 - Modify the background error length scales (len_scaling1-5) and note how the area of influence of the observation changes.

Example 5 - More advanced work is to tuning the background error statistics with the available Global be file: be_global we provided. Usually developing your own be file with NMC-method is not a easy job. You, however, can use the available global be_global with the appropriate settings to the namelist variables: VAR_SCALING1,... and LEN_SCALING1,... to get the realistic analysis responses from a observation. There is a shell script: 3dvar/run/DA_Run_3DVAR_PSOT_be_global.csh, which used be_global with the tuned namelist variables mentioned above. Please try to run it, and look at the increments fields. The analysis increments similar to those with be could be obtained.

5. What next?

Having played with 3DVAR and a single observation, let’s try a case with thousands of observations:

e) 3DVAR – Run Case Study

 


Miscellanies: 


Trouble Shooting: If you have questions, ask mesouser.


 

Return to 3DVAR Tutorial Page