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