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 |
|
---|