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