da_radiance1.f90
References to this file elsewhere.
1 module da_radiance1
2
3 !---------------------------------------------------------------------------
4 ! Purpose: module for radiance data assimilation.
5 !---------------------------------------------------------------------------
6
7 use module_radiance, only : satinfo,q2ppmv
8 #ifdef RTTOV
9 use module_radiance, only : coefs,inst_name
10 #endif
11 #ifdef CRTM
12 use module_radiance, only : rttov_inst_name
13 #endif
14
15 use da_control, only : trace_use,missing_r, rootproc, &
16 stdout,myproc,qc_good,num_fgat_time,qc_bad, &
17 use_error_factor_rad,biasprep_unit,obs_qc_pointer, filename_len, &
18 print_detail_rad, rtm_option, trace_use_dull, &
19 rtm_option_rttov,rtm_option_crtm, radiance, &
20 global, gas_constant, gravity, monitor_on,kts,kte
21 use da_define_structures, only : info_type,model_loc_type,maxmin_type, &
22 iv_type, y_type, jo_type,bad_data_type,bad_data_type,number_type
23 use da_par_util, only : da_proc_stats_combine
24 use da_par_util1, only : da_proc_sum_int,da_proc_sum_ints
25 use da_reporting, only : da_error, message
26 use da_statistics, only : da_stats_calculate
27 use da_tools, only : da_residual_new
28 use da_tools_serial, only : da_free_unit, da_get_unit
29 use da_tracing, only : da_trace_entry, da_trace_exit, da_trace_int_sort
30
31 #if defined(RTTOV) || defined(CRTM)
32 use da_control, only : rtminit_sensor
33 use da_reporting, only : da_warning
34 #endif
35 #ifdef RTTOV
36 use da_control, only : write_profile,num_procs,tovs_min_transfer
37 use da_tracing, only : da_trace
38 use da_reporting, only : da_message
39 #endif
40
41 implicit none
42
43 type datalink_type
44
45 type (info_type) :: info
46 type (model_loc_type) :: loc
47
48 integer :: ssmis_subinst
49 integer :: ifgat, landsea_mask
50 integer :: scanline, scanpos
51 real :: satzen, satazi, solzen, solazi ! satellite and solar angles
52 ! channels' bright temperature
53 real, pointer :: emiss(:)
54 ! logical, pointer :: calcemis(:)
55 integer, pointer :: cloud_flag(:)
56 real, pointer :: t(:), mr(:), zk(:)
57 real, pointer :: pm(:), tm(:), qm(:), qrn(:), qcw(:),qci(:),qsn(:),qgr(:)
58 real :: ps,ts,t2m,mr2m,u10,v10, clwp
59 real :: smois, tslb, snowh, elevation,soiltyp,vegtyp,vegfra
60 integer :: isflg
61 ! real, pointer :: tb_xb(:)
62 real, pointer :: tb_ob(:)
63 real, pointer :: tb_inv(:)
64 real, pointer :: tb_qc(:)
65 real, pointer :: tb_error(:)
66 integer :: sensor_index
67 type (datalink_type), pointer :: next ! pointer to next data
68 end type datalink_type
69
70 type con_vars_type
71 integer :: nlevels
72 real , pointer :: t(:)
73 real , pointer :: q(:)
74 real :: ps
75 end type con_vars_type
76
77 type con_cld_vars_type
78 integer :: nwp_levels
79 real , pointer :: p(:)
80 real , pointer :: ph(:)
81 real , pointer :: t(:)
82 real , pointer :: cc(:)
83 real , pointer :: clw(:) ! kg/kg
84 real , pointer :: ciw(:) ! kg/kg
85 real , pointer :: rain(:) ! kg/m2/s
86 real , pointer :: sp(:) ! kg/m2/s
87 end type con_cld_vars_type
88
89 type aux_vars_type
90 integer :: surftype
91 real :: surft, t2m, q2m, u10, v10
92 real :: satzen, satazi !!, fastem(5)
93 end type aux_vars_type
94
95 type maxmin_rad_stats_type
96 type (maxmin_type) :: maximum, minimum
97 real :: ave, rms
98 integer :: num
99 end type maxmin_rad_stats_type
100
101 type stats_rad_type
102 type (maxmin_rad_stats_type), pointer :: ichan(:)
103 end type stats_rad_type
104
105 type rad_header_type ! innovation file header
106 character (LEN = 19) :: date_char ! YYYY-MM-DD-HH (assimilation window date)
107 integer :: assim_win ! assimilation window hours, e.g., 6 hours
108 character(LEN=20) :: rttovid_string ! e.g., noaa-16-amsua
109 integer :: platform_id ! e.g., 1 for noaa (see RTTOV UG)
110 integer :: satellite_id ! e.g., 16 for noaa-16
111 integer :: sensor_id ! e.g., 3 for amsua
112 integer :: num_rad ! pixel number in file
113 integer :: nchan ! channel number of each pixel
114 integer , pointer :: ichan(:) ! index of nchan channels
115 integer :: nemis ! emissivity number of each pixel
116 ! may be different with nchan
117 ! due to polarisation in microwave
118 integer :: nlevel_fix ! fixed pressure level number for RTM
119 ! e.g., 43 for RTTOV8_5
120 real , pointer :: pres(:) ! pressure with nlevel_fix
121 integer :: nlevel_cld ! cloud profile level number for RTM
122 end type rad_header_type
123
124 type rad_data_type ! innovation file pixel data
125
126 ! part from Observation
127 integer :: landmask ! 1:land; 0:sea
128 integer :: scanline ! number of scan line
129 integer :: scanpos ! number of scan position
130 real :: lat ! Latitude in degree
131 real :: lon ! Longitude in degree
132 real :: elv ! Elevation in m
133 real :: satzen ! satellite zenith angle in degree
134 real :: satazi ! satellite azimuth angle in degree
135 real :: solzen ! solar zenith angle in degree
136 real :: solazi ! solar azimuth angle in degree
137 real, pointer :: tb(:) ! observed brightness temperatures in Kelvin
138 real, pointer :: inv(:) ! innovation (obs - background) in Kelvin
139 real, pointer :: bias(:) ! bias correction values in Kelvin
140 real, pointer :: err(:) ! std of observation error in Kelvin
141 real, pointer :: qc(:) ! quality control flag
142 ! 0:good; <0:rejected; other:suspected
143 real, pointer :: emiss(:) ! surface emissivity
144
145 ! part from background field
146 integer :: surftype ! surface type
147 ! 0:sea 1:sea-ice 2:land 3:snow
148 ! 4:mix-sea 5:mix-sea-ice 6:mix-land 7:mix-snow
149 integer :: terrain ! model terrain in m
150 integer :: soiltyp ! soil type (MM5/WRF USGS 24 catagories)
151 integer :: vegtyp ! vegetation type (MM5/WRF 16 catagories)
152 real :: vegfra ! vegetation fraction
153 real :: soilm ! soil moisture
154 real :: soilt ! soil temperature
155 real :: snowh ! snow depth
156 real :: ps ! surface pressure in hPa
157 real :: ts ! surface skin temperature in Kelvin
158 real :: t2m ! T in Kelvin at 2m
159 real :: mr2m ! volume mixture ratio in ppmv at 2m
160 real :: u10,v10 ! u/v wind in m/s at 10m
161 real, pointer :: t(:) ! temperatures at fixed pressure levels
162 real, pointer :: mr(:) ! volume mixture ratio in ppmv at fixed pressure levels
163 real, pointer :: zk(:) ! vertical interpolation weight from model level to fixed pressure levels
164 real, pointer :: pm(:) ! full-level pressure at model levels
165 real, pointer :: phm(:) ! half-level pressure at model levels
166 real, pointer :: tm(:) ! temperatures at model levels
167 real, pointer :: cc(:) ! cloud cover at model levels
168 real, pointer :: rain(:) ! rainfall rate in kg/m2/s
169 real, pointer :: solidp(:) ! solid precipitation rate in kg/m2/s
170 real, pointer :: clw(:) ! cloud liquid water (kg/kg)
171 real, pointer :: ciw(:) ! cloud ice water (kg/kg)
172
173 end type rad_data_type
174
175 type bias_type
176 integer :: nchan ! number of channels
177 integer :: npred ! number of predictors
178 integer :: platform_id,satellite_id,sensor_id
179 integer :: year, month, day, hour, min, sec
180 integer :: scanline,scanpos
181 integer :: landmask
182 integer, pointer :: qc_flag(:) ! 1/0:good/bad
183 integer, pointer :: cloud_flag(:) ! 1/0:no-cloud/cloud
184 integer :: surf_flag ! surface type
185 real :: elevation,lat,lon,ps, t2m, q2m, tsk, clwp
186 real, pointer :: tb(:), omb(:), bias(:)
187 real, pointer :: pred(:)
188 end type bias_type
189
190 integer, allocatable :: num_tovs_before(:,:)
191 integer, allocatable :: num_tovs_after(:,:)
192 integer, allocatable :: tovs_send_pe(:,:)
193 integer, allocatable :: tovs_send_start(:,:)
194 integer, allocatable :: tovs_send_count(:,:)
195 integer, allocatable :: tovs_recv_pe(:,:)
196 integer, allocatable :: tovs_recv_start(:,:)
197 integer, allocatable :: tovs_copy_count(:)
198
199 contains
200
201 #include "da_jo_and_grady_rad.inc"
202 #include "da_residual_rad.inc"
203 #include "da_biascorr.inc"
204 #include "da_read_biascoef.inc"
205 #include "da_biasprep.inc"
206 #include "da_write_biasprep.inc"
207 #include "da_predictor_rttov.inc"
208 #ifdef CRTM
209 #include "da_predictor_crtm.inc"
210 #include "da_qc_crtm.inc"
211 #endif
212 #include "da_qc_amsua.inc"
213 #include "da_qc_amsub.inc"
214 #include "da_qc_hirs.inc"
215 #include "da_qc_airs.inc"
216 #include "da_qc_ssmis.inc"
217 #include "da_qc_mhs.inc"
218 #include "da_write_iv_rad_ascii.inc"
219 #include "da_write_oa_rad_ascii.inc"
220 #include "da_detsurtyp.inc"
221 #include "da_ao_stats_rad.inc"
222 #include "da_oi_stats_rad.inc"
223 #include "da_print_stats_rad.inc"
224 #include "da_get_time_slots.inc"
225 #include "da_qc_rad.inc"
226 #include "da_get_julian_time.inc"
227
228 end module da_radiance1
229