da_control.f90

References to this file elsewhere.
1 module da_control
2 
3    !--------------------------------------------------------------------------
4    ! Purpose: Common reference point for WRFVAR control.
5    !--------------------------------------------------------------------------
6 
7    use module_driver_constants, only : max_domains,max_eta, max_moves
8 
9    implicit none
10 
11 #include "namelist_defines.inc"
12 
13 
14    !---------------------------------------------------------------------------
15    ! [1.0] Physical parameter constants (all NIST standard values):
16    !---------------------------------------------------------------------------
17 
18    ! Fundamental constants:
19    real, parameter    :: pi = 3.1415926          ! Value used in WRF.
20    real, parameter    :: gas_constant = 287.     ! Value used in WRF.
21    real, parameter    :: gas_constant_v = 461.6  ! Value used in WRF.
22    real, parameter    :: cp = 7.*gas_constant/2. ! Value used in WRF.
23    real, parameter    :: t_kelvin = 273.15
24    real, parameter    :: t_triple = 273.16 ! triple point of water
25    ! The imported code for ssmi and radiance uses 273.0 in a way that suggests 
26    ! it may not be a lazy definition of the melting point of water, so keep the
27    ! value separate for the moment
28    real, parameter    :: t_roughem = 273.0
29    real, parameter    :: t_landem = 273.0
30    real, parameter    :: ps0_inv = 1.0 / 100000.0  ! Base pressure.
31 
32    real, parameter    :: kappa = gas_constant / cp
33    real, parameter    :: rd_over_rv = gas_constant / gas_constant_v
34    real, parameter    :: rd_over_rv1 = 1.0 - rd_over_rv
35    real, parameter    :: L_over_Rv = 5418.12
36 
37    real, parameter    :: gamma = 1.4
38 
39    ! Earth constants:
40    real, parameter    :: gravity = 9.81        ! m/s - value used in WRF.
41    ! real, parameter    :: earth_radius = 6378.15
42    real, parameter    :: earth_radius = 6370.0          ! Be consistant with WRF
43    ! real, parameter    :: earth_omega  = 2.0*pi/86400.0  ! Omega
44    real, parameter    :: earth_omega  = 0.000072921     ! Omega 7.2921*10**-5
45 
46    ! Saturation Vapour Pressure Constants(Rogers & Yau, 1989) 
47    real, parameter    :: es_alpha = 611.2
48    real, parameter    :: es_beta = 17.67
49    real, parameter    :: es_gamma = 243.5
50    real, parameter    :: es_gammabeta = es_gamma * es_beta
51    real, parameter    :: es_gammakelvin = es_gamma - t_kelvin
52 
53    ! Explicit moist constants:
54    real, parameter    :: SVP1=0.6112, SVP2=17.67, SVP3=29.65
55    real, parameter    :: SVPT0=t_kelvin, TO=t_kelvin
56    real, parameter    :: N0R=8.E6, N0S=2.E7, RHOS=0.1
57    real, parameter    :: AVT=841.99667, BVT=0.8, BVT2=2.5+.5*BVT, BVT3=3.+BVT
58    real, parameter    :: PPI=1./(pi*N0R), PPIS=1./(pi*N0S*RHOS)
59    real, parameter    :: XLV1=2370., XLF0=.3337E6, XLV0=3.15E6
60    real, parameter    :: XLS=XLV0-XLV1*t_triple+XLF0
61 
62    ! Planetary boundary physics constants
63    real, parameter         :: k_kar = 0.4    ! Von Karman constant
64 
65    ! GPS Refractivity constant  
66    real, parameter    :: coeff = 3.73e5 / 77.6
67 
68 #if RWORDSIZE==8
69    real, parameter :: da_zero = 0D0
70 #else
71    real, parameter :: da_zero = 0.0
72 #endif
73 
74 complex, parameter :: da_zero_complex = (da_zero,da_zero)
75    
76    !---------------------------------------------------------------------------
77    ! [2.0] WRF-Var parameter constants:
78    !---------------------------------------------------------------------------
79 
80    ! Missing values and the index number of the quality contro
81 
82    integer, parameter ::  missing       = -888888
83    real   , parameter ::  missing_r     = -888888.
84    real   , parameter ::  Max_StHeight_Diff = 100.
85 
86    logical :: anal_type_verify=.false.
87    logical :: anal_type_randomcv=.false.
88    logical :: anal_type_qcobs=.false.
89 
90    integer,parameter :: monitor_on  = 1
91    integer,parameter :: monitor_off = 0
92 
93    integer,parameter :: qc_good = 1
94    integer,parameter :: qc_bad  = -1
95 
96    integer, parameter :: bufr_satellite_id   = 1
97    integer, parameter :: bufr_ifov           = 2
98    integer, parameter :: bufr_year           = 3
99    integer, parameter :: bufr_month          = 4
100    integer, parameter :: bufr_day            = 5
101    integer, parameter :: bufr_hour           = 6
102    integer, parameter :: bufr_minute         = 7
103    integer, parameter :: bufr_second         = 8
104    integer, parameter :: bufr_lat            = 9
105    integer, parameter :: bufr_lon            = 10
106    integer, parameter :: bufr_satzen         = 11
107    integer, parameter :: bufr_solzen         = 12
108    integer, parameter :: bufr_station_height = 13
109    integer, parameter :: bufr_landsea_mask   = 14
110 
111    integer, parameter :: nchan_amsua = 15
112    integer, parameter :: nchan_amsub = 5
113    integer, parameter :: nchan_mhs = 5
114    integer, parameter :: nchan_msu = 4
115    integer, parameter :: nchan_hirs2 = 19
116    integer, parameter :: nchan_hirs3 = 19
117    integer, parameter :: nchan_hirs4 = 19
118 
119    ! WRFVAR Minimisation:
120 
121    integer            :: iter
122    integer, parameter :: MP = 6
123    integer, parameter :: LP = 6
124    integer, parameter :: MAXFEV = 10
125    real, parameter    :: FTOL = 1.0E-4
126    real, parameter    :: GTOL = 0.9
127    real, parameter    :: XTOL = 1.0E-17
128    real, parameter    :: STPMin = 1.0E-20
129    real, parameter    :: STPMAX = 1.0E+20
130 
131    ! Background errors:
132    real, parameter    :: pplow = 1.0e-8       ! Machine lowest number?
133    real, parameter    :: pp_umin = 1.0e-2     ! Minimum u back. error (m/s).
134    real, parameter    :: pp_vmin = 1.0e-2     ! Minimum v back. error (m/s).
135    real, parameter    :: pp_tmin = 1.0e-2     ! Minimum t back. error (K).
136    real, parameter    :: pp_qmin = 1.0e-6     ! Minimum q back. error (kg/kg)
137    real, parameter    :: pp_pmin= 1.0e+1      ! Minimum pp back. error (Pa).
138 
139    ! FFTs:
140    integer, parameter :: Forward_FFT     = -1 ! Grid to spectral
141    integer, parameter :: Inverse_FFT     =  1 ! Spectral to grid.
142    integer, parameter :: num_fft_factors = 10 ! Max number of factors.
143  
144    ! Balance:
145    integer, parameter :: balance_geo = 1      ! Geostrophic balance.
146    integer, parameter :: balance_cyc = 2      ! Cyclostrophic balance.
147    integer, parameter :: balance_geocyc = 3   ! Geo/cyclostrophic balance.
148 
149    ! Adjoint tests:
150    real, parameter    :: typical_u_rms = 2.0     ! m/s
151    real, parameter    :: typical_v_rms = 2.0     ! m/s
152    real, parameter    :: typical_speed_rms = 2.0 ! m/s
153    real, parameter    :: typical_tb19v_rms = 1.0 ! K
154    real, parameter    :: typical_tb19h_rms = 1.0 ! K
155    real, parameter    :: typical_tb22v_rms = 1.0 ! K
156    real, parameter    :: typical_tb37v_rms = 1.0 ! K
157    real, parameter    :: typical_tb37h_rms = 1.0 ! K
158    real, parameter    :: typical_tb85v_rms = 1.0 ! K
159    real, parameter    :: typical_tb85h_rms = 1.0 ! K
160    real, parameter    :: typical_t_rms = 1.0     ! K
161    real, parameter    :: typical_p_rms = 100.0   ! Pa
162    real, parameter    :: typical_q_rms = 0.00001 ! g/kg
163    real, parameter    :: typical_rho_rms = 0.01  ! kg/m^3
164    real, parameter    :: typical_tpw_rms = 0.2   ! cm
165    real, parameter    :: typical_ref_rms = 5.0   ! N unit
166    real, parameter    :: typical_rh_rms = 20.0   ! %
167    real, parameter    :: typical_thickness_rms = 50.0   ! m
168    real, parameter    :: typical_qrn_rms = 0.00001 ! g/kg
169    real, parameter    :: typical_qcw_rms = 0.00001 ! g/kg
170    real, parameter    :: typical_w_rms = 0.1     ! m/s
171    real, parameter    :: typical_rv_rms = 1.0    ! m/s
172    real, parameter    :: typical_rf_rms = 1.0    ! dBZ
173 
174    ! The following typical mean squared values depend on control variable. They   
175    ! are calculated in da_setup_background_errors and used in the VvToVp adjoint 
176    ! test:
177 
178    real, parameter    :: inv_typ_vp1_sumsq = 0.00001 ! 1/sum(psi**2)
179    real, parameter    :: inv_typ_vp2_sumsq = 0.00001 ! 1/sum(chi**2)
180    real, parameter    :: inv_typ_vp3_sumsq = 0.00001 ! 1/sum(phi_u**2)
181    real, parameter    :: inv_typ_vp4_sumsq = 10000.0 ! 1/sum(q**2)
182    real, parameter    :: inv_typ_vp5_sumsq = 0.00001 ! 1/sum(?**2)
183    real, parameter    :: inv_typ_vpalpha_sumsq = 1.0 ! 1/sum(?**2)
184 
185    character(len=*),parameter :: wrfvar_version = "WRFVAR V2.2"
186    character(len=*),parameter :: wrf_version    = "WRF V2.2"
187 
188    integer, parameter :: fg_format_wrf = 1
189    integer, parameter :: fg_format_kma_global = 3
190 
191    integer, parameter :: ob_format_bufr = 1
192    integer, parameter :: ob_format_ascii = 2
193 
194    integer, parameter :: convert_fd2uv = 1
195    integer, parameter :: convert_uv2fd = -1
196 
197    ! Fortran unit  parameters:
198 
199    ! stdout, stderr, trace_unit all controlled from namelist
200 
201    ! Units 9,10 are used for reading and writing namelist.input/output in WRF
202 
203    ! Do not use get_unit/free_unit because tracing is too low level
204    integer, parameter :: trace_csv_unit = 8
205 
206    integer :: y_unit, yp_unit, cost_unit, grad_unit, stats_unit, jo_unit
207    integer :: check_max_iv_unit, rand_unit, omb_unit, filtered_obs_unit
208    integer :: biasprep_unit
209 
210    integer,parameter :: filename_len = 200
211 
212    integer, parameter :: num_alpha_corr_types = 3
213 
214    integer :: alpha_corr_unit1(num_alpha_corr_types)
215    integer :: alpha_corr_unit2(num_alpha_corr_types)
216 
217    integer, parameter :: max_num_of_var = 200 ! Maximum # of stored fields.
218 
219    integer, parameter :: unit_start = 20
220    integer, parameter :: unit_end = 500
221    logical :: unit_used(unit_start:unit_end) = .false.
222 
223 
224    !---------------------------------------------------------------------------
225    ! [3.0] Variables used in MM5 part of code:
226    !---------------------------------------------------------------------------
227 
228    integer            :: map_projection       ! 1=LamConf/2=PolarSte/3=Mercator
229    real               :: ycntr
230    integer            :: coarse_ix            ! COARSE DOMAin DIM in I DIRECTION.
231    integer            :: coarse_jy            ! COARSE DOMAin DIM in Y DIRECTION.
232    real               :: coarse_ds            ! Coarse domain gridlength (km)
233    real               :: start_x              ! i posn. of (1,1) in coarse domain.
234    real               :: start_y              ! j posn. of (1,1) in coarse domain.
235    real               :: start_lat            ! Latitude coresponds to start_(x,y)
236    real               :: start_lon            ! Longitude coresponds to start_(x,y)
237    real               :: delt_lat             ! Latitude increments for global grids
238    real               :: delt_lon             ! Longitude increments for global grids
239 
240    real               :: phic                 ! COARSE DOMAin CENTRAL LAT(DEGREE)
241    real               :: xlonc                ! COARSE DOMAin CENTRAL LON(DEGREE)
242    real               :: cone_factor          ! Cone Factor
243    real               :: truelat1_3dv         ! True latitude 1 (degrees)
244    real               :: truelat2_3dv         ! True latitude 2 (degrees)
245    real               :: pole                 ! Pole latitude (degrees)
246    real               :: dsm                  ! Current domain gridlength (km)
247    real               :: psi1                 ! ?
248    real               :: c2                   ! earth_radius * COS(psi1)
249 
250    real               :: ptop
251    real               :: ps0
252    real               :: ts0 = 300.0          ! Base potential temperture
253                                               ! mm5 code may try to change value
254    real               :: tlp
255    real               :: tis0
256 
257    !------------------------------------------------------------------------------
258    ! 4.0 vertical interpolation options
259    !------------------------------------------------------------------------------
260 
261    integer, parameter :: v_interp_not_specified = missing, &
262                          v_interp_p             = 1, &
263                          v_interp_h             = 2
264 
265    !------------------------------------------------------------------------------
266    ! WRFVAR scalar constants:
267    !------------------------------------------------------------------------------
268 
269    integer                :: Anal_Space  ! Space of analysis
270                                          ! ( 1 = Full model,
271                                          !   2 = Transformed grid,
272                                          !   3 = Ob space (PSAS) )
273 
274    integer                :: mix         ! 1st dimension of analysis grid.
275    integer                :: mjy         ! 2nd dimension of analysis grid.
276    integer                :: mkz         ! 3rd dimension of analysis grid.
277 
278    ! Recursive filter:
279 
280    real, allocatable      :: rf_turnconds(:) ! RF turning conditions.
281 
282    integer, parameter     :: max_ob_levels = 1001 ! Maximum levels for single ob
283    integer, parameter     :: max_fgat_time = 100  ! Maximum levels for FGAT.
284 
285    integer                :: current_ob_time
286 
287    integer                :: num_gpspw_tot, num_synop_tot, num_metar_tot, &
288                              num_pilot_tot, num_ssmi_rv_tot, num_ssmi_tb_tot, &
289                              num_ssmi_tot,  num_ssmt1_tot, num_ssmt2_tot, &
290                              num_satem_tot, num_geoamv_tot,num_polaramv_tot, &
291                              num_ships_tot, &
292                              num_sound_tot, num_airep_tot, num_qscat_tot, &
293                              num_profiler_tot, num_buoy_tot, num_gpsref_tot, &
294                              num_Radar_tot, num_bogus_tot,num_airsr_tot, &
295                              num_radiance_tot
296 
297    logical       :: gaussian_lats  
298 
299 
300    integer       :: cv_size_domain_jb    ! Total jb cv size.
301    integer       :: cv_size_domain_je    ! Total je cv size.
302    integer       :: cv_size_domain       ! Total cv size.    
303 
304 
305 
306    ! Namelist variables in future?:
307    real, parameter :: maximum_rh = 100.0
308    real, parameter :: minimum_rh =  10.0
309 
310    ! other
311 
312    character*80  cheadl1
313    character*80  cheadl2
314    character*160 cheadl3
315 
316 
317    integer, parameter :: jperr = 6
318 
319    ! NCEP errors (U in m/s, V in m/s, T in K, H in %, P in Pa)
320    ! rh has been divided by 2
321 
322    real, parameter :: err_k(0:jperr+1) = &
323                       (/200000., 100100.,70000.,50000.,30000.,10000.,5000., 1./)
324    real, parameter :: err_u(0:jperr+1) = &
325                       (/ 1.4, 1.4,   2.4,   2.8,   3.4,   2.5,  2.7,  2.7/)
326    real, parameter :: err_v(0:jperr+1) = &
327                       (/ 1.4, 1.4,   2.4,   2.8,   3.4,   2.5,  2.7 , 2.7 /)
328    real, parameter :: err_t(0:jperr+1) = &
329                       (/ 1.8, 1.8,   1.3,   1.3,   2.0,   3.1,  4.0 , 4.0 /)
330    real, parameter :: err_rh(0:jperr+1) = &
331                       (/ 10.0, 10.0,  10.0,  10.0,  10.0,  10.0, 10.0,  10.0/)
332    real, parameter :: err_p(0:jperr+1) = &
333                       (/ 100.0,100.0, 100.0, 100.0, 100.0, 100.0,100.0,100.0 /)
334 
335    ! Maximum error check factors:  inV > (Obs_error*factor) --> fails_error_max
336 
337    real, parameter :: max_error_t              = 5, &
338                       max_error_uv             = 5, &
339                       max_error_pw             = 5, &
340                       max_error_ref            = 5, &
341                       max_error_rh             = 5, &
342                       max_error_q              = 5, &
343                       max_error_p              = 5, &
344                       max_error_tb             = 5, &
345                       max_error_thickness      = 5, &
346                       max_error_rv             = 5, &
347                       max_error_rf             = 5, &
348                       max_error_buv            = 500, &
349                       max_error_bt             = 500, &
350                       max_error_bq             = 500, &
351                       max_error_slp            = 500
352 
353    ! Define various ways for bad data to be flagged.  
354 
355    integer, parameter ::  &
356       missing_data            = -88, &     ! Data is missing with the value of 
357                                            ! missing_r
358       outside_of_domain       = -77, &     ! Data outside horizontal domain 
359                                            ! or time window, data set to missing_r
360       wrong_direction         = -15, &     ! Wind vector direction <0 or> 360 
361                                            ! => direction set to missing_r
362       negative_spd            = -14, &     ! Wind vector norm is negative 
363                                            ! => norm set to missing_r
364       zero_spd                = -13, &     ! Wind vector norm is zero 
365                                            ! => norm set to missing_r
366       wrong_wind_data         = -12, &     ! Spike in wind profile 
367                                            ! =>direction and norm set to missing_r 
368       zero_t_td               = -11, &     ! t or td = 0 => t or td, rh and qv 
369                                            ! are set to missing_r, 
370       t_fail_supa_inver       = -10, &     ! superadiabatic temperature
371                                            ! 
372       wrong_t_sign            = - 9, &     ! Spike in Temperature profile 
373                                            ! 
374       above_model_lid         = - 8, &     ! heigh above model lid
375                                            ! => no action
376       far_below_model_surface = - 7, &     ! heigh far below model surface
377                                            ! => no action
378       below_model_surface     = - 6, &     ! height below model surface
379                                            ! => no action
380       standard_atmosphere     = - 5, &     ! Missing h, p or t
381                                            ! =>Datum interpolated from standard atm
382       from_background         = - 4, &     ! Missing h, p or t
383                                            ! =>Datum interpolated from model
384       fails_error_max         = - 3, &     ! Datum Fails error max check
385                                            ! => no action
386       fails_buddy_check       = - 2, &     ! Datum Fails buddy check
387                                            ! => no action
388       no_buddies              = - 1, &     ! Datum has no buddies
389                                            ! => no action
390       good_quality            =   0, &     ! OBS datum has good quality
391                                            !
392       convective_adjustment   =   1, &     ! convective adjustement check
393                                            ! =>apply correction on t, td, rh and qv
394       surface_correction      =   2, &     ! Surface datum
395                                            ! => apply correction on datum
396       Hydrostatic_recover     =   3, &     ! Height from hydrostaic assumption with
397                                            ! the OBS data calibration
398       Reference_OBS_recover   =   4, &     ! Height from reference state with OBS
399                                            ! data calibration
400       Other_check             =  88        ! passed other quality check
401 
402    ! Observations:
403 
404    integer, parameter     :: max_Radar = 10000    ! Maximum Number of Radar obs.
405 
406    integer                :: num_procs            ! Number of total processors.
407    integer                :: myproc               ! My processor ID.
408    integer, parameter     :: root = 0             ! Number of root processor
409    logical                :: rootproc             ! Am I the root processor
410 
411    integer, parameter :: var4d_coupling_disk_linear = 1
412    integer, parameter :: var4d_coupling_disk_simul  = 2
413 
414    integer, parameter :: rtm_option_rttov = 1
415    integer, parameter :: rtm_option_crtm = 2
416 
417    ! RTM_inIT setup parameter
418 
419    integer, parameter            :: maxsensor = 30
420 
421    ! type( rttov_coef ), pointer :: coefs(:)         ! RTTOV coefficients
422 
423    ! Tracing
424 
425    integer :: trace_start_points=0   ! Number of routines to initiate trace
426 
427    integer, parameter :: num_ob_indexes = 23
428 
429    integer, parameter :: sound_index          = 1
430    integer, parameter :: synop_index          = 2
431    integer, parameter :: pilot_index          = 3
432    integer, parameter :: satem_index          = 4
433    integer, parameter :: geoamv_index         = 5
434    integer, parameter :: polaramv_index       = 6
435    integer, parameter :: airep_index          = 7
436    integer, parameter :: gpspw_index          = 8
437    integer, parameter :: gpsref_index         = 9
438    integer, parameter :: metar_index          = 10
439    integer, parameter :: ships_index          = 11
440    integer, parameter :: ssmi_retrieval_index = 12
441    integer, parameter :: ssmi_tb_index        = 13
442    integer, parameter :: ssmt1_index          = 14
443    integer, parameter :: ssmt2_index          = 15
444    integer, parameter :: qscat_index          = 16
445    integer, parameter :: profiler_index       = 17
446    integer, parameter :: buoy_index           = 18
447    integer, parameter :: bogus_index          = 19
448    integer, parameter :: pseudo_index         = 20
449    integer, parameter :: radar_index          = 21
450    integer, parameter :: radiance_index       = 22
451    integer, parameter :: airsr_index          = 23
452 
453    character(len=14), parameter :: obs_names(num_ob_indexes) = (/ &
454       "SOUND         ", &
455       "SYNOP         ", &
456       "PILOT         ", &
457       "SATEM         ", &
458       "Geo AMV       ", &
459       "Polar AMV     ", &
460       "AIREP         ", &
461       "GPSPW         ", &
462       "GPSRF         ", &
463       "METAR         ", &
464       "SHIP          ", &
465       "SSMI_RETRIEVAL", &
466       "SSMI_TB       ", &
467       "SSMT1         ", &
468       "SSMT2         ", &
469       "QSCAT         ", &
470       "Profiler      ", &
471       "Buoy          ", &
472       "Bogus         ", &
473       "Pseudo        ", &
474       "Radar         ", &
475       "Radiance      ", &
476       "AIRS retrieval"  &
477    /)
478 
479    integer, parameter :: max_no_fm = 290
480 
481    integer, parameter :: num_ob_vars=9
482 
483    logical, parameter :: in_report(num_ob_vars,2) = reshape((/&
484      .false.,.false.,.false.,.false.,.false.,.false.,.false.,.false.,.false., & ! sound
485      .true.,.true.,.true.,.true.,.true.,.true.,.false.,.false.,.false./), &
486      (/num_ob_vars,2/))
487 
488    integer, parameter :: report_h   = 1
489    integer, parameter :: report_u   = 2
490    integer, parameter :: report_v   = 3
491    integer, parameter :: report_t   = 4
492    integer, parameter :: report_q   = 5
493    integer, parameter :: report_p   = 6
494    integer, parameter :: report_rh  = 7
495    integer, parameter :: report_slp = 8
496    integer, parameter :: report_zk  = 9
497 
498    logical :: obs_use(num_ob_indexes) = .false.
499 
500 
501 
502    ! Special cases
503 
504    integer, parameter :: fm_satem = 86
505    integer, parameter :: fm_amv   = 88
506 
507    integer, parameter :: fm_index(max_no_fm) = (/ &
508       0,0,0,0,0,0,0,0,0,0,                                & ! 1-10
509       0,Synop_index,Ships_index,0,Metar_index,            & ! 11-15
510       Metar_index,Ships_index,buoy_index,buoy_index,0,    & ! 16-20
511       0,0,0,0,0,0,0,0,0,0,                                & ! 21-30
512       0,pilot_index,pilot_index,pilot_index,sound_index,  & ! 31-35
513       sound_index,sound_index,sound_index,0,0,            & ! 36-40
514       0,airep_index,0,0,0,0,0,0,0,0,                      & ! 41-50
515       0,0,0,0,0,0,0,0,0,0,                                & ! 51-60
516       0,0,0,0,0,0,0,0,0,0,                                & ! 61-70
517       0,0,0,0,0,0,0,0,0,0,                                & ! 71-80
518       0,0,0,0,0,satem_index,0,geoamv_index,0,0,           & ! 81-90
519       0,0,0,0,0,airep_index,airep_index,0,0,0,            & ! 91-100
520       0,0,0,0,0,0,0,0,0,0,                                & ! 101-110
521       gpspw_index,0,0,gpspw_index,0,gpsref_index,0,0,0,0, & ! 111-120
522       ssmt1_index,ssmt2_index,0,0,0,0,0,0,0,0,            & ! 121-130
523       0,profiler_index,airsr_index,0,bogus_index,0,0,0,0,0, & ! 131-140
524       0,0,0,0,0,0,0,0,0,0,                                & ! 141-150
525       0,0,0,0,0,0,0,0,0,0,                                & ! 151-160
526       0,0,0,0,0,0,0,0,0,0,                                & ! 161-170
527       0,0,0,0,0,0,0,0,0,0,                                & ! 171-180
528       0,0,0,0,0,0,0,0,0,0,                                & ! 181-190
529       0,0,0,0,0,0,0,0,0,0,                                & ! 191-200
530       0,0,0,0,0,0,0,0,0,0,                                & ! 201-210
531       0,0,0,0,0,0,0,0,0,0,                                & ! 211-220
532       0,0,0,0,0,0,0,0,0,0,                                & ! 231-230
533       0,0,0,0,0,0,0,0,0,0,                                & ! 231-240
534       0,0,0,0,0,0,0,0,0,0,                                & ! 241-250
535       0,0,0,0,0,0,0,0,0,0,                                & ! 251-260
536       0,0,0,0,0,0,0,0,0,0,                                & ! 261-270
537       0,0,0,0,0,0,0,0,0,0,                                & ! 271-280
538       qscat_index,0,0,0,0,0,0,0,0,0 /)                      ! 281-290
539 
540    character(len=120)  :: fmt_info ='(a12,1x,a19,1x,a40,1x,i6,3(f12.3,11x),6x,a5)'
541    character(len=120)  :: fmt_srfc = '(7(:,f12.3,i4,f7.2))'
542    character(len=120)  :: fmt_each = &
543       '(3(f12.3,i4,f7.2),11x,3(f12.3,i4,f7.2),11x,1(f12.3,i4,f7.2))'
544 
545    ! lat/long information calculated in da_setup_firstguess_wrf
546 
547    real, parameter :: deg_to_rad = pi/180.0
548   
549    real, allocatable :: cos_xls(:)
550    real, allocatable :: sin_xls(:)
551    real, allocatable :: cos_xle(:)
552    real, allocatable :: sin_xle(:)
553 
554    integer :: ierr ! General error code
555    integer :: comm ! MPI communicator
556 
557    integer :: ids,ide,jds,jde,kds,kde
558    integer :: ims,ime,jms,jme,kms,kme
559    integer :: its,ite,jts,jte,kts,kte
560    integer :: ips,ipe,jps,jpe,kps,kpe
561 
562 contains
563 
564 #include "da_advance_cymdh.inc"
565 #include "da_array_print.inc"
566 #include "da_change_date.inc"
567 #include "da_find_fft_factors.inc"
568 #include "da_find_fft_trig_funcs.inc"
569 
570 end module da_control