| 1 | code_original - Sean's code and sample output - 23/03/07
|
|---|
| 2 |
|
|---|
| 3 | ancil - N96 HadGEM1 orography field - retrieved from NEC - 23/03/07
|
|---|
| 4 |
|
|---|
| 5 | Missing data - REAL, PARAMETER :: RMDI = -9999.0 - 23/03/07
|
|---|
| 6 |
|
|---|
| 7 | ------------------------------------------------------------------------
|
|---|
| 8 |
|
|---|
| 9 | Running the code - email from Sean, 23/03/07
|
|---|
| 10 | ------------------------------------------------------------------------
|
|---|
| 11 |
|
|---|
| 12 | Ok, 3 files
|
|---|
| 13 |
|
|---|
| 14 | refrac_info.f90
|
|---|
| 15 |
|
|---|
| 16 | is just a module containing various definitions.
|
|---|
| 17 |
|
|---|
| 18 | gpsro_driver.f90
|
|---|
| 19 |
|
|---|
| 20 | is an example of a call to the 1d operator. I have
|
|---|
| 21 | set the atmospheric parameters up in a simple way, so that it
|
|---|
| 22 | should be pretty obvious what you have to extract from the UM
|
|---|
| 23 | model output. Basically, you need the P, T, Q on the (full) model
|
|---|
| 24 | levels, and the full model level heights.
|
|---|
| 25 |
|
|---|
| 26 | gpsro_op.f90
|
|---|
| 27 |
|
|---|
| 28 | is the 1d bending angle operator. It is self contained,
|
|---|
| 29 | so hopefully you should not have to go into it, assuming everything
|
|---|
| 30 | works!
|
|---|
| 31 |
|
|---|
| 32 |
|
|---|
| 33 | To compile and run
|
|---|
| 34 |
|
|---|
| 35 | f90 -c refrac_info.f90
|
|---|
| 36 |
|
|---|
| 37 | this should create refrac_info.mod. Then type
|
|---|
| 38 |
|
|---|
| 39 | f90 gpsro_driver.f90 gpsro_op.f90 -o gpsro_op
|
|---|
| 40 |
|
|---|
| 41 | Then
|
|---|
| 42 |
|
|---|
| 43 | gpsro_op
|
|---|
| 44 |
|
|---|
| 45 | This will write a profile of bending angles to screen. My results are
|
|---|
| 46 | given in alpha.out, so you can check its running ok.
|
|---|
| 47 | -----------------------------------------------------------------------
|
|---|
| 48 |
|
|---|
| 49 | UM height levels - from http://www-nwp.metoffice.com/~frcw/UM_Info/ND_levels/ND_levels.html - 16/04/07
|
|---|
| 50 | -----------------------------------------------------------------------------------------------------------
|
|---|
| 51 | Blev (=pphead(52) ) contains Zsea , the height of the level over the sea,
|
|---|
| 52 | bhlev (=pphead(54)) contains C(k) = [ 1 - eta_value(k) / eta_value(first constant rho level) ] ^2,
|
|---|
| 53 |
|
|---|
| 54 | so that the height for the level is Z(i,j)= Zsea+ C(k) * orography(i,j) at each point (i,j) in the grid.
|
|---|
| 55 |
|
|---|
| 56 | ------------------------------------------------------------------------------------------------------------
|
|---|
| 57 |
|
|---|
| 58 | Tangent linear code - 03/07/07
|
|---|
| 59 | --------------------------------------------------------------------------
|
|---|
| 60 |
|
|---|
| 61 |
|
|---|
| 62 | I have attached the tangent linear code with a driver routine.
|
|---|
| 63 | To compile and run the driver
|
|---|
| 64 |
|
|---|
| 65 | f90 gpsro_drivertl.f90 gpsro_opTL.f90 gpsro_op.f90 -o gpsro_optl
|
|---|
| 66 |
|
|---|
| 67 | You always need to compile gpsro_opTL.f90 with gpsro_op.f90 because they
|
|---|
| 68 | share routines. The interface to the new code is
|
|---|
| 69 |
|
|---|
| 70 | SUBROUTINE alpha_optl(nlev, & ! no. of model levs (=38)
|
|---|
| 71 | nobs, & ! no. of bending angles in profile
|
|---|
| 72 | roc, & ! radius of curv.
|
|---|
| 73 | undul, & ! undulation (set to 0.0)
|
|---|
| 74 | lat, & ! latitude of ob. location (degrees)
|
|---|
| 75 | pres, & ! pressure on mod levels (hPa)
|
|---|
| 76 | pres_prime, &
|
|---|
| 77 | temp, & ! temp on model levels
|
|---|
| 78 | temp_prime, &
|
|---|
| 79 | q, & ! specific humidity (g/kg)
|
|---|
| 80 | q_prime, &
|
|---|
| 81 | zg, & ! geopotential height of model levels(m)
|
|---|
| 82 | a, & ! impact parameters
|
|---|
| 83 | alpha, &
|
|---|
| 84 | alpha_prime) ! bending angles
|
|---|
| 85 |
|
|---|
| 86 | Basically, when you see a "_prime" that means a perturbation. The code
|
|---|
| 87 | calculates the bending angles (alpha) as before with P,T and Q, but now
|
|---|
| 88 | also calculates the bending angle perturbations, alpha_prime, caused by
|
|---|
| 89 | the P, T and Q perturbations, p_prime, t_prime and q_prime, respectively.
|
|---|
| 90 |
|
|---|
| 91 | The driver code calculates alpha_prime along with the differences
|
|---|
| 92 | between 2 calls to the normal operator for a simple profile. The results
|
|---|
| 93 | are very close.
|
|---|
| 94 |
|
|---|
| 95 | The tangent linear code will enable you to look at the relative
|
|---|
| 96 | contributions of the p_prime, t_prime and q_prime to the alpha_prime.
|
|---|
| 97 |
|
|---|
| 98 |
|
|---|
| 99 | ------------------------------------------------------------------------------------------------------------
|
|---|
| 100 |
|
|---|
| 101 | Further calculations - 15/02/08
|
|---|
| 102 | --------------------------------------------------------------------------
|
|---|
| 103 |
|
|---|
| 104 | 1) set q to 0.0 just before refrac_levs is called and
|
|---|
| 105 | look at the bending angle trends.
|
|---|
| 106 |
|
|---|
| 107 | 2) set q to 2000 value just before refrac_levs and
|
|---|
| 108 | look at trends etc.
|
|---|
| 109 |
|
|---|
| 110 | 3) Look at refractivity trend on model levels. One
|
|---|
| 111 | of the outputs from refrac_levs is refrac. This is
|
|---|
| 112 | the refractivity on the model levels. (you could
|
|---|
| 113 | also look at the q = 0 for refrac if you get time.)
|
|---|
| 114 |
|
|---|
| 115 | 4) Compare the Tdry and T trends on model levels.
|
|---|
| 116 | You can calculate Tdry after calling refrac_levs
|
|---|
| 117 |
|
|---|
| 118 | Tdry(:) =aval*pres(:)/refrac(:)
|
|---|
| 119 |
|
|---|
| 120 | where aval is the refractivity constant defined in
|
|---|
| 121 | refrac_info.
|
|---|
| 122 |
|
|---|
| 123 | Look at error (Tdry(:)-temp(:)) and trend differences.
|
|---|
| 124 |
|
|---|
| 125 |
|
|---|
| 126 |
|
|---|
| 127 |
|
|---|
| 128 |
|
|---|
| 129 |
|
|---|
| 130 |
|
|---|
| 131 |
|
|---|
| 132 |
|
|---|
| 133 |
|
|---|
| 134 |
|
|---|
| 135 |
|
|---|
| 136 |
|
|---|