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