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