-
Notifications
You must be signed in to change notification settings - Fork 161
/
Copy pathGFS_typedefs.F90
8330 lines (7654 loc) · 441 KB
/
GFS_typedefs.F90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
module GFS_typedefs
use mpi_f08
use machine, only: kind_phys, kind_dbl_prec, kind_sngl_prec
use physcons, only: con_cp, con_fvirt, con_g, rholakeice, &
con_hvap, con_hfus, con_pi, con_rd, con_rv, &
con_t0c, con_cvap, con_cliq, con_eps, con_epsq, &
con_epsm1, con_ttp, rlapse, con_jcal, con_rhw0, &
con_sbc, con_tice, cimin, con_p0, rhowater, &
con_csol, con_epsqs, con_rocp, con_rog, &
con_omega, con_rerth, con_psat, karman, rainmin,&
con_c, con_plnk, con_boltz, con_solr_2008, &
con_solr_2002, con_thgni, con_1ovg, con_rgas, &
con_avgd, con_amd, con_amw
use module_radsw_parameters, only: topfsw_type, sfcfsw_type
use module_radlw_parameters, only: topflw_type, sfcflw_type
use module_ozphys, only: ty_ozphys
use module_h2ophys, only: ty_h2ophys
use land_iau_mod, only: land_iau_external_data_type, land_iau_control_type, &
land_iau_state_type, land_iau_mod_set_control
implicit none
! To ensure that these values match what's in the physics, array
! sizes are compared in the auto-generated physics caps in debug mode
! from aerclm_def
integer, parameter, private :: ntrcaerm = 15
! This will be set later in GFS_Control%initialize, since
! it depends on the runtime config (Model%aero_in)
integer, private :: ntrcaer
! If these are changed to >99, need to adjust formatting string in GFS_diagnostics.F90 (and names in diag_tables)
integer, parameter :: naux2dmax = 20 !< maximum number of auxiliary 2d arrays in output (for debugging)
integer, parameter :: naux3dmax = 20 !< maximum number of auxiliary 3d arrays in output (for debugging)
integer, parameter :: dfi_radar_max_intervals = 4 !< Number of radar-derived temperature tendency and/or convection suppression intervals. Do not change.
real(kind=kind_phys), parameter :: limit_unspecified = 1e12 !< special constant for "namelist value was not provided" in radar-derived temperature tendency limit range
!> \section arg_table_GFS_typedefs
!! \htmlinclude GFS_typedefs.html
!!
!--- version of physics
character(len=64) :: phys_version = 'v2021 UFS PHYSICS'
!--- parameter constants used for default initializations
real(kind=kind_phys), parameter :: zero = 0.0_kind_phys
!real(kind=kind_phys), parameter :: huge = 9.9692099683868690E36 ! NetCDF float FillValue
real(kind=kind_phys), parameter :: clear_val = zero
!real(kind=kind_phys), parameter :: clear_val = -9.9999e80
real(kind=kind_phys), parameter :: rann_init = 0.6_kind_phys
real(kind=kind_phys), parameter :: cn_one = 1._kind_phys
real(kind=kind_phys), parameter :: cn_100 = 100._kind_phys
real(kind=kind_phys), parameter :: cn_th = 1000._kind_phys
real(kind=kind_phys), parameter :: cn_hr = 3600._kind_phys
! optional extra top layer on top of low ceiling models
! this parameter was originally defined in the radiation driver
! (and is still for standard non-CCPP builds), but is required
! here for CCPP to allocate arrays used for the interstitial
! calculations previously in GFS_{physics,radiation}_driver.F90
! LTP=0: no extra top layer
integer, parameter :: LTP = 0 ! no extra top layer
!integer, parameter :: LTP = 1 ! add an extra top layer
!----------------
! Data Containers
!----------------
! !--- GFS external initialization type
! GFS_init_type
! !--- GFS Derived Data Types (DDTs)
! GFS_statein_type !< prognostic state data in from dycore
! GFS_stateout_type !< prognostic state or tendencies return to dycore
! GFS_sfcprop_type !< surface fields
! GFS_coupling_type !< fields to/from coupling with other components (e.g. land/ice/ocean/etc.)
! !---GFS specific containers
! GFS_control_type !< model control parameters
! GFS_grid_type !< grid and interpolation related data
! GFS_tbd_type !< to be determined data that doesn't fit in any one container
! GFS_cldprop_type !< cloud fields needed by radiation from physics
! GFS_radtend_type !< radiation tendencies needed in physics
! GFS_diag_type !< fields targetted for diagnostic output
!--------------------------------------------------------------------------------
! GFS_init_type
!--------------------------------------------------------------------------------
! This container is the minimum set of data required from the dycore/atmosphere
! component to allow proper initialization of the GFS physics
!--------------------------------------------------------------------------------
!! \section arg_table_GFS_init_type
!! \htmlinclude GFS_init_type.html
!!
type GFS_init_type
integer :: me !< my MPI-rank
integer :: master !< master MPI-rank
type(MPI_Comm) :: fcst_mpi_comm !< forecast tasks mpi communicator
integer :: fcst_ntasks !< total number of forecast tasks
integer :: tile_num !< tile number for this MPI rank
integer :: isc !< starting i-index for this MPI-domain
integer :: jsc !< starting j-index for this MPI-domain
integer :: nx !< number of points in i-dir for this MPI rank
integer :: ny !< number of points in j-dir for this MPI rank
integer :: levs !< number of vertical levels
integer :: cnx !< number of points in i-dir for this cubed-sphere face
!< equal to gnx for lat-lon grids
integer :: cny !< number of points in j-dir for this cubed-sphere face
!< equal to gny for lat-lon grids
integer :: gnx !< number of global points in x-dir (i) along the equator
integer :: gny !< number of global points in y-dir (j) along any meridian
integer :: nlunit !< fortran unit number for file opens
integer :: logunit !< fortran unit number for writing logfile
integer :: bdat(8) !< model begin date in GFS format (same as idat)
integer :: cdat(8) !< model current date in GFS format (same as jdat)
integer :: iau_offset !< iau running window length
real(kind=kind_phys) :: dt_dycore !< dynamics time step in seconds
real(kind=kind_phys) :: dt_phys !< physics time step in seconds
!--- restart information
logical :: restart !< flag whether this is a coldstart (.false.) or a warmstart/restart (.true.)
!--- hydrostatic/non-hydrostatic flag
logical :: hydrostatic !< flag whether this is a hydrostatic or non-hydrostatic run
!--- blocking data
integer, pointer :: blksz(:) !< for explicit data blocking
!< default blksz(1)=[nx*ny]
!--- ak/bk for pressure level calculations
real(kind=kind_phys), pointer :: ak(:) !< from surface (k=1) to TOA (k=levs)
real(kind=kind_phys), pointer :: bk(:) !< from surface (k=1) to TOA (k=levs)
!--- grid metrics
real(kind=kind_phys), pointer :: xlon(:,:) !< column longitude for MPI rank
real(kind=kind_phys), pointer :: xlat(:,:) !< column latitude for MPI rank
real(kind=kind_phys), pointer :: area(:,:) !< column area for length scale calculations
integer :: nwat !< number of hydrometeors in dcyore (including water vapor)
character(len=32), pointer :: tracer_names(:) !< tracers names to dereference tracer id
integer, pointer :: tracer_types(:) !< tracers types: 0=generic, 1=chem,prog, 2=chem,diag
character(len=64) :: fn_nml !< namelist filename
character(len=:), pointer, dimension(:) :: input_nml_file => null() !< character string containing full namelist
!< for use with internal file reads
end type GFS_init_type
!----------------------------------------------------------------
! GFS_statein_type
! prognostic state variables with layer and level specific data
!----------------------------------------------------------------
!! \section arg_table_GFS_statein_type
!! \htmlinclude GFS_statein_type.html
!!
type GFS_statein_type
!--- level geopotential and pressures
real (kind=kind_phys), pointer :: phii (:,:) => null() !< interface geopotential height
real (kind=kind_phys), pointer :: prsi (:,:) => null() !< model level pressure in Pa
real (kind=kind_phys), pointer :: prsik (:,:) => null() !< Exner function at interface
!--- layer geopotential and pressures
real (kind=kind_phys), pointer :: phil (:,:) => null() !< layer geopotential height
real (kind=kind_phys), pointer :: prsl (:,:) => null() !< model layer mean pressure Pa
real (kind=kind_phys), pointer :: prslk (:,:) => null() !< exner function = (p/p0)**rocp
!--- prognostic variables
real (kind=kind_phys), pointer :: pgr (:) => null() !< surface pressure (Pa) real
real (kind=kind_phys), pointer :: ugrs (:,:) => null() !< u component of layer wind
real (kind=kind_phys), pointer :: vgrs (:,:) => null() !< v component of layer wind
real (kind=kind_phys), pointer :: wgrs (:,:) => null() !< w component of layer wind
real (kind=kind_phys), pointer :: vvl (:,:) => null() !< layer mean vertical velocity in pa/sec
real (kind=kind_phys), pointer :: tgrs (:,:) => null() !< model layer mean temperature in k
real (kind=kind_phys), pointer :: qgrs (:,:,:) => null() !< layer mean tracer concentration
! dissipation estimate
real (kind=kind_phys), pointer :: diss_est(:,:) => null() !< model layer mean temperature in k
! soil state variables - for soil SPPT - sfc-perts, mgehne
real (kind=kind_phys), pointer :: smc (:,:) => null() !< soil moisture content
real (kind=kind_phys), pointer :: stc (:,:) => null() !< soil temperature content
real (kind=kind_phys), pointer :: slc (:,:) => null() !< soil liquid water content
contains
procedure :: create => statein_create !< allocate array data
end type GFS_statein_type
!------------------------------------------------------------------
! GFS_stateout_type
! prognostic state or tendencies after physical parameterizations
!------------------------------------------------------------------
!! \section arg_table_GFS_stateout_type
!! \htmlinclude GFS_stateout_type.html
!!
type GFS_stateout_type
!-- Out (physics only)
real (kind=kind_phys), pointer :: gu0 (:,:) => null() !< updated zonal wind
real (kind=kind_phys), pointer :: gv0 (:,:) => null() !< updated meridional wind
real (kind=kind_phys), pointer :: gt0 (:,:) => null() !< updated temperature
real (kind=kind_phys), pointer :: gq0 (:,:,:) => null() !< updated tracers
contains
procedure :: create => stateout_create !< allocate array data
end type GFS_stateout_type
!---------------------------------------------------------------------------------------
! GFS_sfcprop_type
! surface properties that may be read in and/or updated by climatology or observations
!---------------------------------------------------------------------------------------
!! \section arg_table_GFS_sfcprop_type
!! \htmlinclude GFS_sfcprop_type.html
!!
type GFS_sfcprop_type
!--- In (radiation and physics)
real (kind=kind_phys), pointer :: slmsk (:) => null() !< sea/land mask array (sea:0,land:1,sea-ice:2)
real (kind=kind_phys), pointer :: oceanfrac(:) => null() !< ocean fraction [0:1]
real (kind=kind_phys), pointer :: landfrac(:) => null() !< land fraction [0:1]
!--- In (lakes)
real (kind=kind_phys), pointer :: lakefrac(:) => null() !< lake fraction [0:1]
real (kind=kind_phys), pointer :: lakedepth(:) => null() !< lake depth [ m ]
real (kind=kind_phys), pointer :: clm_lakedepth(:) => null() !< clm internal lake depth [ m ]
integer, pointer :: use_lake_model(:) => null()!1=run lake, 2=run lake&nsst, 0=no lake
real (kind=kind_phys), pointer :: lake_t2m (:) => null() !< 2 meter temperature from CLM Lake model
real (kind=kind_phys), pointer :: lake_q2m (:) => null() !< 2 meter humidity from CLM Lake model
real (kind=kind_phys), pointer :: h_ML(:) => null() !Mixed Layer depth of lakes [m]
real (kind=kind_phys), pointer :: t_ML(:) => null() !Mixing layer temperature in K
real (kind=kind_phys), pointer :: t_mnw(:) => null() !Mean temperature of the water column [K]
real (kind=kind_phys), pointer :: h_talb(:) => null() !the thermally active layer depth of the bottom sediments [m]
real (kind=kind_phys), pointer :: t_talb(:) => null() !Temperature at the bottom of the sediment upper layer [K]
real (kind=kind_phys), pointer :: t_bot1(:) => null() !Temperature at the water-bottom sediment interface [K]
real (kind=kind_phys), pointer :: t_bot2(:) => null() !Temperature for bottom layer of water [K]
real (kind=kind_phys), pointer :: c_t(:) => null() !Shape factor of water temperature vertical profile
real (kind=kind_phys), pointer :: T_snow(:) => null() !temperature of snow on a lake [K]
real (kind=kind_phys), pointer :: T_ice(:) => null() !temperature of ice on a lake [K]
real (kind=kind_phys), pointer :: tsfc (:) => null() !< surface air temperature in K
real (kind=kind_phys), pointer :: vegtype_frac (:,:) => null() !< fractions [0:1] of veg. categories
real (kind=kind_phys), pointer :: soiltype_frac(:,:) => null() !< fractions [0:1] of soil categories
!< [tsea in gbphys.f]
real (kind=kind_phys), pointer :: tsfco (:) => null() !< sst in K
real (kind=kind_phys), pointer :: usfco (:) => null() !< surface zonal current in m s-1
real (kind=kind_phys), pointer :: vsfco (:) => null() !< surface meridional current in m s-1
real (kind=kind_phys), pointer :: tsfcl (:) => null() !< surface land temperature in K
real (kind=kind_phys), pointer :: tisfc (:) => null() !< surface temperature over ice fraction
real (kind=kind_phys), pointer :: tiice(:,:) => null() !< internal ice temperature
real (kind=kind_phys), pointer :: snowd (:) => null() !< snow depth water equivalent in mm ; same as snwdph
real (kind=kind_phys), pointer :: zorl (:) => null() !< composite surface roughness in cm
real (kind=kind_phys), pointer :: zorlw (:) => null() !< water surface roughness in cm
real (kind=kind_phys), pointer :: zorll (:) => null() !< land surface roughness in cm
real (kind=kind_phys), pointer :: zorli (:) => null() !< ice surface roughness in cm
real (kind=kind_phys), pointer :: zorlwav(:) => null() !< wave surface roughness in cm derived from wave model
real (kind=kind_phys), pointer :: fice (:) => null() !< ice fraction over open water grid
real (kind=kind_phys), pointer :: snodl (:) => null() !< snow depth over land
real (kind=kind_phys), pointer :: weasdl (:) => null() !< weasd over land
real (kind=kind_phys), pointer :: snodi (:) => null() !< snow depth over ice
real (kind=kind_phys), pointer :: weasdi (:) => null() !< weasd over ice
real (kind=kind_phys), pointer :: hprime (:,:) => null() !< orographic metrics
real (kind=kind_phys), pointer :: dust12m_in (:,:,:) => null() !< fengsha dust input
real (kind=kind_phys), pointer :: emi_in (:,:) => null() !< anthropogenic background input
real (kind=kind_phys), pointer :: smoke_RRFS(:,:,:) => null() !< RRFS fire input hourly
real (kind=kind_phys), pointer :: smoke2d_RRFS(:,:) => null() !< RRFS fire input daily
real (kind=kind_phys), pointer :: z0base (:) => null() !< background or baseline surface roughness length in m
real (kind=kind_phys), pointer :: semisbase(:) => null() !< background surface emissivity
real (kind=kind_phys), pointer :: sfalb_lnd (:) => null() !< surface albedo over land for LSM
real (kind=kind_phys), pointer :: sfalb_ice (:) => null() !< surface albedo over ice for LSM
real (kind=kind_phys), pointer :: emis_lnd (:) => null() !< surface emissivity over land for LSM
real (kind=kind_phys), pointer :: emis_ice (:) => null() !< surface emissivity over ice for LSM
real (kind=kind_phys), pointer :: emis_wat (:) => null() !< surface emissivity over water
real (kind=kind_phys), pointer :: sfalb_lnd_bck (:) => null() !< snow-free albedo over land
!--- In (radiation only)
real (kind=kind_phys), pointer :: sncovr (:) => null() !< snow cover in fraction over land
real (kind=kind_phys), pointer :: sncovr_ice (:) => null() !< snow cover in fraction over ice (RUC LSM only)
real (kind=kind_phys), pointer :: snoalb (:) => null() !< maximum snow albedo in fraction
real (kind=kind_phys), pointer :: alvsf (:) => null() !< mean vis albedo with strong cosz dependency
real (kind=kind_phys), pointer :: alnsf (:) => null() !< mean nir albedo with strong cosz dependency
real (kind=kind_phys), pointer :: alvwf (:) => null() !< mean vis albedo with weak cosz dependency
real (kind=kind_phys), pointer :: alnwf (:) => null() !< mean nir albedo with weak cosz dependency
real (kind=kind_phys), pointer :: facsf (:) => null() !< fractional coverage with strong cosz dependency
real (kind=kind_phys), pointer :: facwf (:) => null() !< fractional coverage with weak cosz dependency
!--- In (physics only)
integer, pointer :: slope (:) => null() !< sfc slope type for lsm
integer, pointer :: slope_save (:) => null()!< sfc slope type save
real (kind=kind_phys), pointer :: shdmin (:) => null() !< min fractional coverage of green veg
real (kind=kind_phys), pointer :: shdmax (:) => null() !< max fractnl cover of green veg (not used)
real (kind=kind_phys), pointer :: tg3 (:) => null() !< deep soil temperature
real (kind=kind_phys), pointer :: vfrac (:) => null() !< vegetation fraction
integer, pointer :: vtype (:) => null() !< vegetation type
integer, pointer :: stype (:) => null() !< soil type
integer, pointer :: scolor (:) => null() !< soil color
integer, pointer :: vtype_save (:) => null()!< vegetation type save
integer, pointer :: stype_save (:) => null()!< soil type save
integer, pointer :: scolor_save (:) => null()!< soil color save
real (kind=kind_phys), pointer :: uustar (:) => null() !< boundary layer parameter
real (kind=kind_phys), pointer :: oro (:) => null() !< orography
real (kind=kind_phys), pointer :: oro_uf (:) => null() !< unfiltered orography
real (kind=kind_phys), pointer :: evap (:) => null() !<
real (kind=kind_phys), pointer :: hflx (:) => null() !<
real (kind=kind_phys), pointer :: qss (:) => null() !<
!--- fire_behavior
real (kind=kind_phys), pointer :: hflx_fire (:) => null() !< kinematic surface upward sensible heat flux of fire
real (kind=kind_phys), pointer :: evap_fire (:) => null() !< kinematic surface upward latent heat flux of fire
real (kind=kind_phys), pointer :: smoke_fire (:) => null() !< smoke emission of fire
!-- In/Out
real (kind=kind_phys), pointer :: maxupmf(:) => null() !< maximum up draft mass flux for Grell-Freitas
real (kind=kind_phys), pointer :: conv_act(:) => null() !< convective activity counter for Grell-Freitas
real (kind=kind_phys), pointer :: conv_act_m(:)=> null() !< midlevel convective activity counter for Grell-Freitas
real (kind=kind_phys), pointer :: hice (:) => null() !< sea ice thickness
real (kind=kind_phys), pointer :: weasd (:) => null() !< water equiv of accumulated snow depth (kg/m**2)
!< over land and sea ice
real (kind=kind_phys), pointer :: canopy (:) => null() !< canopy water
real (kind=kind_phys), pointer :: ffmm (:) => null() !< fm parameter from PBL scheme
real (kind=kind_phys), pointer :: ffhh (:) => null() !< fh parameter from PBL scheme
real (kind=kind_phys), pointer :: f10m (:) => null() !< fm at 10m - Ratio of sigma level 1 wind and 10m wind
real (kind=kind_phys), pointer :: rca (:) => null() !< canopy resistance
real (kind=kind_phys), pointer :: tprcp (:) => null() !< sfc_fld%tprcp - total precipitation
real (kind=kind_phys), pointer :: srflag (:) => null() !< sfc_fld%srflag - snow/rain flag for precipitation
real (kind=kind_phys), pointer :: slc (:,:) => null() !< liquid soil moisture
real (kind=kind_phys), pointer :: smc (:,:) => null() !< total soil moisture
real (kind=kind_phys), pointer :: stc (:,:) => null() !< soil temperature
!--- Out
real (kind=kind_phys), pointer :: t2m (:) => null() !< 2 meter temperature
real (kind=kind_phys), pointer :: th2m (:) => null() !< 2 meter potential temperature
real (kind=kind_phys), pointer :: q2m (:) => null() !< 2 meter humidity
! -- In/Out for Noah MP
real (kind=kind_phys), pointer :: snowxy (:) => null() !<
real (kind=kind_phys), pointer :: tvxy (:) => null() !< veg temp
real (kind=kind_phys), pointer :: tgxy (:) => null() !< ground temp
real (kind=kind_phys), pointer :: canicexy(:) => null() !<
real (kind=kind_phys), pointer :: canliqxy(:) => null() !<
real (kind=kind_phys), pointer :: eahxy (:) => null() !<
real (kind=kind_phys), pointer :: tahxy (:) => null() !<
real (kind=kind_phys), pointer :: cmxy (:) => null() !<
real (kind=kind_phys), pointer :: chxy (:) => null() !<
real (kind=kind_phys), pointer :: fwetxy (:) => null() !<
real (kind=kind_phys), pointer :: sneqvoxy(:) => null() !<
real (kind=kind_phys), pointer :: alboldxy(:) => null() !<
real (kind=kind_phys), pointer :: qsnowxy (:) => null() !<
real (kind=kind_phys), pointer :: wslakexy(:) => null() !<
real (kind=kind_phys), pointer :: zwtxy (:) => null() !<
real (kind=kind_phys), pointer :: waxy (:) => null() !<
real (kind=kind_phys), pointer :: wtxy (:) => null() !<
real (kind=kind_phys), pointer :: lfmassxy(:) => null() !<
real (kind=kind_phys), pointer :: rtmassxy(:) => null() !<
real (kind=kind_phys), pointer :: stmassxy(:) => null() !<
real (kind=kind_phys), pointer :: woodxy (:) => null() !<
real (kind=kind_phys), pointer :: stblcpxy(:) => null() !<
real (kind=kind_phys), pointer :: fastcpxy(:) => null() !<
real (kind=kind_phys), pointer :: xsaixy (:) => null() !<
real (kind=kind_phys), pointer :: xlaixy (:) => null() !<
real (kind=kind_phys), pointer :: taussxy (:) => null() !<
real (kind=kind_phys), pointer :: smcwtdxy(:) => null() !<
real (kind=kind_phys), pointer :: deeprechxy(:)=> null() !<
real (kind=kind_phys), pointer :: rechxy (:) => null() !<
real (kind=kind_phys), pointer :: albdirvis_lnd (:) => null() !<
real (kind=kind_phys), pointer :: albdirnir_lnd (:) => null() !<
real (kind=kind_phys), pointer :: albdifvis_lnd (:) => null() !<
real (kind=kind_phys), pointer :: albdifnir_lnd (:) => null() !<
real (kind=kind_phys), pointer :: albdirvis_ice (:) => null() !<
real (kind=kind_phys), pointer :: albdifvis_ice (:) => null() !<
real (kind=kind_phys), pointer :: albdirnir_ice (:) => null() !<
real (kind=kind_phys), pointer :: albdifnir_ice (:) => null() !<
! real (kind=kind_phys), pointer :: sfalb_ice (:) => null() !<
real (kind=kind_phys), pointer :: snicexy (:,:) => null() !<
real (kind=kind_phys), pointer :: snliqxy (:,:) => null() !<
real (kind=kind_phys), pointer :: tsnoxy (:,:) => null() !<
real (kind=kind_phys), pointer :: smoiseq (:,:) => null() !<
real (kind=kind_phys), pointer :: zsnsoxy (:,:) => null() !<
!--- NSSTM variables (only allocated when [Model%nstf_name(1) > 0])
real (kind=kind_phys), pointer :: tref (:) => null() !< nst_fld%Tref - Reference Temperature
real (kind=kind_phys), pointer :: z_c (:) => null() !< nst_fld%z_c - Sub layer cooling thickness
real (kind=kind_phys), pointer :: c_0 (:) => null() !< nst_fld%c_0 - coefficient1 to calculate d(Tz)/d(Ts)
real (kind=kind_phys), pointer :: c_d (:) => null() !< nst_fld%c_d - coefficient2 to calculate d(Tz)/d(Ts)
real (kind=kind_phys), pointer :: w_0 (:) => null() !< nst_fld%w_0 - coefficient3 to calculate d(Tz)/d(Ts)
real (kind=kind_phys), pointer :: w_d (:) => null() !< nst_fld%w_d - coefficient4 to calculate d(Tz)/d(Ts)
real (kind=kind_phys), pointer :: xt (:) => null() !< nst_fld%xt heat content in DTL
real (kind=kind_phys), pointer :: xs (:) => null() !< nst_fld%xs salinity content in DTL
real (kind=kind_phys), pointer :: xu (:) => null() !< nst_fld%xu u current content in DTL
real (kind=kind_phys), pointer :: xv (:) => null() !< nst_fld%xv v current content in DTL
real (kind=kind_phys), pointer :: xz (:) => null() !< nst_fld%xz DTL thickness
real (kind=kind_phys), pointer :: zm (:) => null() !< nst_fld%zm MXL thickness
real (kind=kind_phys), pointer :: xtts (:) => null() !< nst_fld%xtts d(xt)/d(ts)
real (kind=kind_phys), pointer :: xzts (:) => null() !< nst_fld%xzts d(xz)/d(ts)
real (kind=kind_phys), pointer :: d_conv (:) => null() !< nst_fld%d_conv thickness of Free Convection Layer (FCL)
real (kind=kind_phys), pointer :: ifd (:) => null() !< nst_fld%ifd index to start DTM run or not
real (kind=kind_phys), pointer :: dt_cool(:) => null() !< nst_fld%dt_cool Sub layer cooling amount
real (kind=kind_phys), pointer :: qrain (:) => null() !< nst_fld%qrain sensible heat flux due to rainfall (watts)
! Soil properties for RUC LSM (number of levels different from NOAH 4-layer model)
real (kind=kind_phys), pointer :: wetness(:) => null() !< normalized soil wetness for lsm
real (kind=kind_phys), pointer :: sh2o(:,:) => null() !< volume fraction of unfrozen soil moisture for lsm
real (kind=kind_phys), pointer :: keepsmfr(:,:) => null() !< RUC LSM: frozen moisture in soil
real (kind=kind_phys), pointer :: smois(:,:) => null() !< volumetric fraction of soil moisture for lsm
real (kind=kind_phys), pointer :: tslb(:,:) => null() !< soil temperature for land surface model
real (kind=kind_phys), pointer :: flag_frsoil(:,:) => null() !< RUC LSM: flag for frozen soil physics
!
real (kind=kind_phys), pointer :: clw_surf_land(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over land
real (kind=kind_phys), pointer :: clw_surf_ice(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over ice
real (kind=kind_phys), pointer :: qwv_surf_land(:) => null() !< RUC LSM: water vapor mixing ratio at surface over land
real (kind=kind_phys), pointer :: qwv_surf_ice(:) => null() !< RUC LSM: water vapor mixing ratio at surface over ice
real (kind=kind_phys), pointer :: rhofr(:) => null() !< RUC LSM: internal density of frozen precipitation
real (kind=kind_phys), pointer :: tsnow_land(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over land
real (kind=kind_phys), pointer :: tsnow_ice(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over ice
real (kind=kind_phys), pointer :: snowfallac_land(:) => null() !< ruc lsm diagnostics over land
real (kind=kind_phys), pointer :: snowfallac_ice(:) => null() !< ruc lsm diagnostics over ice
real (kind=kind_phys), pointer :: acsnow_land(:) => null() !< ruc lsm diagnostics over land
real (kind=kind_phys), pointer :: acsnow_ice(:) => null() !< ruc lsm diagnostics over ice
! MYNN surface layer
real (kind=kind_phys), pointer :: ustm (:) => null() !u* including drag
real (kind=kind_phys), pointer :: zol(:) => null() !surface stability parameter
real (kind=kind_phys), pointer :: mol(:) => null() !theta star
real (kind=kind_phys), pointer :: rmol(:) => null() !reciprocal of obukhov length
real (kind=kind_phys), pointer :: flhc(:) => null() !drag coeff for heat
real (kind=kind_phys), pointer :: flqc(:) => null() !drag coeff for moisture
real (kind=kind_phys), pointer :: chs2(:) => null() !exch coeff for heat at 2m
real (kind=kind_phys), pointer :: cqs2(:) => null() !exch coeff for moisture at 2m
real (kind=kind_phys), pointer :: lh(:) => null() !latent heating at the surface
!---- precipitation amounts from previous time step for RUC LSM/NoahMP LSM
real (kind=kind_phys), pointer :: raincprv (:) => null() !< explicit rainfall from previous timestep
real (kind=kind_phys), pointer :: rainncprv (:) => null() !< convective_precipitation_amount from previous timestep
real (kind=kind_phys), pointer :: iceprv (:) => null() !< ice amount from previous timestep
real (kind=kind_phys), pointer :: snowprv (:) => null() !< snow amount from previous timestep
real (kind=kind_phys), pointer :: graupelprv(:) => null() !< graupel amount from previous timestep
!---- precipitation rates from previous time step for NoahMP LSM
real (kind=kind_phys), pointer :: draincprv (:) => null() !< convective precipitation rate from previous timestep
real (kind=kind_phys), pointer :: drainncprv (:) => null() !< explicit rainfall rate from previous timestep
real (kind=kind_phys), pointer :: diceprv (:) => null() !< ice precipitation rate from previous timestep
real (kind=kind_phys), pointer :: dsnowprv (:) => null() !< snow precipitation rate from previous timestep
real (kind=kind_phys), pointer :: dgraupelprv(:) => null() !< graupel precipitation rate from previous timestep
! CLM Lake model internal variables:
real (kind=kind_phys), pointer :: lake_albedo(:) => null() !
real (kind=kind_phys), pointer :: input_lakedepth(:) => null() !
real (kind=kind_phys), pointer :: lake_h2osno2d(:) => null() !
real (kind=kind_phys), pointer :: lake_sndpth2d(:) => null() !
real (kind=kind_phys), pointer :: lake_snl2d(:) => null() !
real (kind=kind_phys), pointer :: lake_snow_z3d(:,:) => null() !
real (kind=kind_phys), pointer :: lake_snow_dz3d(:,:) => null() !
real (kind=kind_phys), pointer :: lake_snow_zi3d(:,:) => null() !
real (kind=kind_phys), pointer :: lake_h2osoi_vol3d(:,:) => null() !
real (kind=kind_phys), pointer :: lake_h2osoi_liq3d(:,:) => null() !
real (kind=kind_phys), pointer :: lake_h2osoi_ice3d(:,:) => null() !
real (kind=kind_phys), pointer :: lake_tsfc(:) => null() !
real (kind=kind_phys), pointer :: lake_t_soisno3d(:,:) => null() !
real (kind=kind_phys), pointer :: lake_t_lake3d(:,:) => null() !
real (kind=kind_phys), pointer :: lake_savedtke12d(:)=> null() !
real (kind=kind_phys), pointer :: lake_icefrac3d(:,:)=> null()
real (kind=kind_phys), pointer :: lake_rho0(:)=> null()
real (kind=kind_phys), pointer :: lake_ht(:)=> null()
integer, pointer :: lake_is_salty(:) => null()
integer, pointer :: lake_cannot_freeze(:) => null()
real (kind=kind_phys), pointer :: clm_lake_initialized(:) => null() !< lakeini was called
!--- aerosol surface emissions for Thompson microphysics & smoke dust
real (kind=kind_phys), pointer :: emdust (:) => null() !< instantaneous dust emission
real (kind=kind_phys), pointer :: emseas (:) => null() !< instantaneous sea salt emission
real (kind=kind_phys), pointer :: emanoc (:) => null() !< instantaneous anthro. oc emission
!--- Smoke. These 2 arrays are input smoke emission and frp
real (kind=kind_phys), pointer :: ebb_smoke_in(:) => null() !< input smoke emission
real (kind=kind_phys), pointer :: frp_output (:) => null() !< output FRP
!--- For fire diurnal cycle
real (kind=kind_phys), pointer :: fhist (:) => null() !< instantaneous fire coef_bb
real (kind=kind_phys), pointer :: coef_bb_dc (:) => null() !< instantaneous fire coef_bb
integer, pointer :: fire_type (:) => null() !< fire type
real (kind=kind_phys), pointer :: peak_hr (:) => null() !< peak hour of fire emissions
real (kind=kind_phys), pointer :: lu_nofire (:) => null() !<lu_nofire pixels
real (kind=kind_phys), pointer :: lu_qfire (:) => null() !<lu_qfire pixels
!--- wildfire heat flux
real (kind=kind_phys), pointer :: fire_heat_flux (:) => null() !< heat flux from wildfire
real (kind=kind_phys), pointer :: frac_grid_burned (:) => null() !< fraction of grid cell burning
!--- For smoke and dust auxiliary inputs
real (kind=kind_phys), pointer :: fire_in (:,:) => null() !< fire auxiliary inputs
!--- Land IAU DDTs
type(land_iau_external_data_type) :: land_iau_data
type(land_iau_control_type) :: land_iau_control
type(land_iau_state_type) :: land_iau_state
contains
procedure :: create => sfcprop_create !< allocate array data
end type GFS_sfcprop_type
!---------------------------------------------------------------------
! GFS_coupling_type
! fields to/from other coupled components (e.g. land/ice/ocean/etc.)
!---------------------------------------------------------------------
!! \section arg_table_GFS_coupling_type
!! \htmlinclude GFS_coupling_type.html
!!
type GFS_coupling_type
!--- Out (radiation only)
real (kind=kind_phys), pointer :: nirbmdi(:) => null() !< sfc nir beam sw downward flux (w/m2)
real (kind=kind_phys), pointer :: nirdfdi(:) => null() !< sfc nir diff sw downward flux (w/m2)
real (kind=kind_phys), pointer :: visbmdi(:) => null() !< sfc uv+vis beam sw downward flux (w/m2)
real (kind=kind_phys), pointer :: visdfdi(:) => null() !< sfc uv+vis diff sw downward flux (w/m2)
real (kind=kind_phys), pointer :: nirbmui(:) => null() !< sfc nir beam sw upward flux (w/m2)
real (kind=kind_phys), pointer :: nirdfui(:) => null() !< sfc nir diff sw upward flux (w/m2)
real (kind=kind_phys), pointer :: visbmui(:) => null() !< sfc uv+vis beam sw upward flux (w/m2)
real (kind=kind_phys), pointer :: visdfui(:) => null() !< sfc uv+vis diff sw upward flux (w/m2)
! RRTMGP
real (kind=kind_phys), pointer :: fluxlwUP_jac(:,:) => null() !< RRTMGP Jacobian of upward longwave all-sky flux
real (kind=kind_phys), pointer :: htrlw(:,:) => null() !< RRTMGP updated LW heating rate
real (kind=kind_phys), pointer :: tsfc_radtime(:) => null() !< RRTMGP surface temperature on radiation timestep
real (kind=kind_phys), pointer :: fluxlwUP_radtime(:,:) => null() !< RRTMGP upward longwave all-sky flux profile
real (kind=kind_phys), pointer :: fluxlwDOWN_radtime(:,:) => null() !< RRTMGP downward longwave all-sky flux profile
!--- In (physics only)
real (kind=kind_phys), pointer :: sfcdsw(:) => null() !< total sky sfc downward sw flux ( w/m**2 )
!< GFS_radtend_type%sfcfsw%dnfxc
real (kind=kind_phys), pointer :: sfcnsw(:) => null() !< total sky sfc netsw flx into ground(w/m**2)
!< difference of dnfxc & upfxc from GFS_radtend_type%sfcfsw
real (kind=kind_phys), pointer :: sfcdlw(:) => null() !< total sky sfc downward lw flux ( w/m**2 )
!< GFS_radtend_type%sfclsw%dnfxc
real (kind=kind_phys), pointer :: sfculw(:) => null() !< total sky sfc upward lw flux ( w/m**2 )
!--- incoming quantities
real (kind=kind_phys), pointer :: dusfcin_cpl(:) => null() !< aoi_fld%dusfcin(item,lan)
real (kind=kind_phys), pointer :: dvsfcin_cpl(:) => null() !< aoi_fld%dvsfcin(item,lan)
real (kind=kind_phys), pointer :: dtsfcin_cpl(:) => null() !< aoi_fld%dtsfcin(item,lan)
real (kind=kind_phys), pointer :: dqsfcin_cpl(:) => null() !< aoi_fld%dqsfcin(item,lan)
real (kind=kind_phys), pointer :: ulwsfcin_cpl(:) => null() !< aoi_fld%ulwsfcin(item,lan)
! real (kind=kind_phys), pointer :: tseain_cpl(:) => null() !< aoi_fld%tseain(item,lan)
! real (kind=kind_phys), pointer :: tisfcin_cpl(:) => null() !< aoi_fld%tisfcin(item,lan)
! real (kind=kind_phys), pointer :: ficein_cpl(:) => null() !< aoi_fld%ficein(item,lan)
! real (kind=kind_phys), pointer :: hicein_cpl(:) => null() !< aoi_fld%hicein(item,lan)
real (kind=kind_phys), pointer :: hsnoin_cpl(:) => null() !< aoi_fld%hsnoin(item,lan)
! real (kind=kind_phys), pointer :: sfc_alb_nir_dir_cpl(:) => null() !< sfc nir albedo for direct rad
! real (kind=kind_phys), pointer :: sfc_alb_nir_dif_cpl(:) => null() !< sfc nir albedo for diffuse rad
! real (kind=kind_phys), pointer :: sfc_alb_vis_dir_cpl(:) => null() !< sfc vis albedo for direct rad
! real (kind=kind_phys), pointer :: sfc_alb_vis_dif_cpl(:) => null() !< sfc vis albedo for diffuse rad
!--- only variable needed for cplwav2atm=.TRUE.
! real (kind=kind_phys), pointer :: zorlwav_cpl(:) => null() !< roughness length from wave model
!--- also needed for ice/ocn coupling
real (kind=kind_phys), pointer :: slimskin_cpl(:)=> null() !< aoi_fld%slimskin(item,lan)
!--- variables needed for use_med_flux =.TRUE.
real (kind=kind_phys), pointer :: dusfcin_med(:) => null() !< sfc u momentum flux over ocean
real (kind=kind_phys), pointer :: dvsfcin_med(:) => null() !< sfc v momentum flux over ocean
real (kind=kind_phys), pointer :: dtsfcin_med(:) => null() !< sfc latent heat flux over ocean
real (kind=kind_phys), pointer :: dqsfcin_med(:) => null() !< sfc sensible heat flux over ocean
real (kind=kind_phys), pointer :: ulwsfcin_med(:) => null() !< sfc upward lw flux over ocean
!--- variables needed for cpllnd = .TRUE. and cpllnd2atm=.TRUE.
real (kind=kind_phys), pointer :: sncovr1_lnd(:) => null() !< sfc snow area fraction over land
real (kind=kind_phys), pointer :: qsurf_lnd(:) => null() !< sfc specific humidity
real (kind=kind_phys), pointer :: evap_lnd(:) => null() !< sfc latent heat flux over land, converted to evaporative flux
real (kind=kind_phys), pointer :: hflx_lnd(:) => null() !< sfc sensible heat flux over land
real (kind=kind_phys), pointer :: ep_lnd(:) => null() !< sfc up pot latent heat flux over land
real (kind=kind_phys), pointer :: t2mmp_lnd(:) => null() !< 2 meter temperature over land
real (kind=kind_phys), pointer :: q2mp_lnd(:) => null() !< 2 meter spec humidity over land
real (kind=kind_phys), pointer :: gflux_lnd(:) => null() !< soil heat flux over land
real (kind=kind_phys), pointer :: runoff_lnd(:) => null() !< surface runoff over land
real (kind=kind_phys), pointer :: drain_lnd(:) => null() !< subsurface runoff over land
real (kind=kind_phys), pointer :: cmm_lnd(:) => null() !< surface drag wind speed for momentum
real (kind=kind_phys), pointer :: chh_lnd(:) => null() !< surface drag mass flux for heat and moisture
real (kind=kind_phys), pointer :: zvfun_lnd(:) => null() !< function of surface roughness length and green vegetation fraction
!--- outgoing accumulated quantities
real (kind=kind_phys), pointer :: rain_cpl (:) => null() !< total rain precipitation
real (kind=kind_phys), pointer :: rainc_cpl (:) => null() !< convective rain precipitation
real (kind=kind_phys), pointer :: snow_cpl (:) => null() !< total snow precipitation
real (kind=kind_phys), pointer :: dusfc_cpl (:) => null() !< sfc u momentum flux
real (kind=kind_phys), pointer :: dvsfc_cpl (:) => null() !< sfc v momentum flux
real (kind=kind_phys), pointer :: dtsfc_cpl (:) => null() !< sfc sensible heat flux
real (kind=kind_phys), pointer :: dqsfc_cpl (:) => null() !< sfc latent heat flux
real (kind=kind_phys), pointer :: dlwsfc_cpl(:) => null() !< sfc downward lw flux (w/m**2)
real (kind=kind_phys), pointer :: dswsfc_cpl(:) => null() !< sfc downward sw flux (w/m**2)
real (kind=kind_phys), pointer :: dnirbm_cpl(:) => null() !< sfc nir beam downward sw flux (w/m**2)
real (kind=kind_phys), pointer :: dnirdf_cpl(:) => null() !< sfc nir diff downward sw flux (w/m**2)
real (kind=kind_phys), pointer :: dvisbm_cpl(:) => null() !< sfc uv+vis beam dnwd sw flux (w/m**2)
real (kind=kind_phys), pointer :: dvisdf_cpl(:) => null() !< sfc uv+vis diff dnwd sw flux (w/m**2)
real (kind=kind_phys), pointer :: nlwsfc_cpl(:) => null() !< net downward lw flux (w/m**2)
real (kind=kind_phys), pointer :: nswsfc_cpl(:) => null() !< net downward sw flux (w/m**2)
real (kind=kind_phys), pointer :: nnirbm_cpl(:) => null() !< net nir beam downward sw flux (w/m**2)
real (kind=kind_phys), pointer :: nnirdf_cpl(:) => null() !< net nir diff downward sw flux (w/m**2)
real (kind=kind_phys), pointer :: nvisbm_cpl(:) => null() !< net uv+vis beam downward sw rad flux (w/m**2)
real (kind=kind_phys), pointer :: nvisdf_cpl(:) => null() !< net uv+vis diff downward sw rad flux (w/m**2)
!--- outgoing instantaneous quantities
real (kind=kind_phys), pointer :: dusfci_cpl (:) => null() !< instantaneous sfc u momentum flux
real (kind=kind_phys), pointer :: dvsfci_cpl (:) => null() !< instantaneous sfc v momentum flux
real (kind=kind_phys), pointer :: dtsfci_cpl (:) => null() !< instantaneous sfc sensible heat flux
real (kind=kind_phys), pointer :: dqsfci_cpl (:) => null() !< instantaneous sfc latent heat flux
real (kind=kind_phys), pointer :: dlwsfci_cpl(:) => null() !< instantaneous sfc downward lw flux
real (kind=kind_phys), pointer :: dswsfci_cpl(:) => null() !< instantaneous sfc downward sw flux
real (kind=kind_phys), pointer :: dnirbmi_cpl(:) => null() !< instantaneous sfc nir beam downward sw flux
real (kind=kind_phys), pointer :: dnirdfi_cpl(:) => null() !< instantaneous sfc nir diff downward sw flux
real (kind=kind_phys), pointer :: dvisbmi_cpl(:) => null() !< instantaneous sfc uv+vis beam downward sw flux
real (kind=kind_phys), pointer :: dvisdfi_cpl(:) => null() !< instantaneous sfc uv+vis diff downward sw flux
real (kind=kind_phys), pointer :: nlwsfci_cpl(:) => null() !< instantaneous net sfc downward lw flux
real (kind=kind_phys), pointer :: nswsfci_cpl(:) => null() !< instantaneous net sfc downward sw flux
real (kind=kind_phys), pointer :: nnirbmi_cpl(:) => null() !< instantaneous net nir beam sfc downward sw flux
real (kind=kind_phys), pointer :: nnirdfi_cpl(:) => null() !< instantaneous net nir diff sfc downward sw flux
real (kind=kind_phys), pointer :: nvisbmi_cpl(:) => null() !< instantaneous net uv+vis beam downward sw flux
real (kind=kind_phys), pointer :: nvisdfi_cpl(:) => null() !< instantaneous net uv+vis diff downward sw flux
real (kind=kind_phys), pointer :: t2mi_cpl (:) => null() !< instantaneous T2m
real (kind=kind_phys), pointer :: q2mi_cpl (:) => null() !< instantaneous Q2m
real (kind=kind_phys), pointer :: u10mi_cpl (:) => null() !< instantaneous U10m
real (kind=kind_phys), pointer :: v10mi_cpl (:) => null() !< instantaneous V10m
real (kind=kind_phys), pointer :: tsfci_cpl (:) => null() !< instantaneous sfc temperature
real (kind=kind_phys), pointer :: psurfi_cpl (:) => null() !< instantaneous sfc pressure
!--- topography-based information for the coupling system
real (kind=kind_phys), pointer :: oro_cpl (:) => null() !< orography ( oro from GFS_sfcprop_type)
real (kind=kind_phys), pointer :: slmsk_cpl (:) => null() !< Land/Sea/Ice mask (slmsk from GFS_sfcprop_type)
!--- cellular automata
real (kind=kind_phys), pointer :: ca1 (:) => null() !
real (kind=kind_phys), pointer :: ca2 (:) => null() !
real (kind=kind_phys), pointer :: ca3 (:) => null() !
real (kind=kind_phys), pointer :: ca_deep (:) => null() !
real (kind=kind_phys), pointer :: ca_turb (:) => null() !
real (kind=kind_phys), pointer :: ca_shal (:) => null() !
real (kind=kind_phys), pointer :: ca_rad (:) => null() !
real (kind=kind_phys), pointer :: ca_micro (:) => null() !
real (kind=kind_phys), pointer :: condition(:) => null() !
!--- stochastic physics
real (kind=kind_phys), pointer :: shum_wts (:,:) => null() !
real (kind=kind_phys), pointer :: sppt_wts (:,:) => null() !
real (kind=kind_phys), pointer :: skebu_wts (:,:) => null() !
real (kind=kind_phys), pointer :: skebv_wts (:,:) => null() !
real (kind=kind_phys), pointer :: sfc_wts (:,:) => null() ! mg, sfc-perts
real (kind=kind_phys), pointer :: spp_wts_pbl (:,:) => null() ! spp-pbl-perts
real (kind=kind_phys), pointer :: spp_wts_sfc (:,:) => null() ! spp-sfc-perts
real (kind=kind_phys), pointer :: spp_wts_mp (:,:) => null() ! spp-mp-perts
real (kind=kind_phys), pointer :: spp_wts_gwd (:,:) => null() ! spp-gwd-perts
real (kind=kind_phys), pointer :: spp_wts_rad (:,:) => null() ! spp-rad-perts
real (kind=kind_phys), pointer :: spp_wts_cu_deep (:,:) => null() ! spp-cu-deep-perts
!--- aerosol surface emissions for Thompson microphysics
real (kind=kind_phys), pointer :: nwfa2d (:) => null() !< instantaneous water-friendly sfc aerosol source
real (kind=kind_phys), pointer :: nifa2d (:) => null() !< instantaneous ice-friendly sfc aerosol source
!--- For fire diurnal cycle
real (kind=kind_phys), pointer :: ebu_smoke (:,:) => null() !< 3D ebu array
!--- For MYNN PBL transport of smoke and dust
real (kind=kind_phys), pointer :: chem3d (:,:,:) => null() !< 3D aod array
real (kind=kind_phys), pointer :: ddvel (:,: ) => null() !< 2D dry deposition velocity
!--- For convective wet removal of smoke and dust
real (kind=kind_phys), pointer :: wetdpc_flux (:,:) => null() !< 2D wet deposition array
!--- For large-scale wet removal of smoke and dust
real (kind=kind_phys), pointer :: wetdpr_flux (:,:) => null() !< 2D wet deposition array
!--- For dry deposition of smoke and dust
real (kind=kind_phys), pointer :: drydep_flux (:,:) => null() !< 2D dry deposition flux of smoke
!--- Fire plume rise diagnostics
real (kind=kind_phys), pointer :: min_fplume (:) => null() !< minimum plume rise level
real (kind=kind_phys), pointer :: max_fplume (:) => null() !< maximum plume rise level
real (kind=kind_phys), pointer :: uspdavg (:) => null() !< BL average wind speed
real (kind=kind_phys), pointer :: hpbl_thetav (:) => null() !< BL depth parcel method
real (kind=kind_phys), pointer :: rho_dry (:,:) => null() !< dry air density 3D array
!--- hourly fire potential index
real (kind=kind_phys), pointer :: rrfs_hwp (:) => null() !< hourly fire potential index
real (kind=kind_phys), pointer :: rrfs_hwp_ave (:) => null() !< *Average* hourly fire potential index
!--- instantaneous quantities for chemistry coupling
real (kind=kind_phys), pointer :: ushfsfci(:) => null() !< instantaneous upward sensible heat flux (w/m**2)
real (kind=kind_phys), pointer :: qci_conv(:,:) => null() !< convective cloud condesate after rainout
real (kind=kind_phys), pointer :: pfi_lsan(:,:) => null() !< instantaneous 3D flux of ice nonconvective precipitation (kg m-2 s-1)
real (kind=kind_phys), pointer :: pfl_lsan(:,:) => null() !< instantaneous 3D flux of liquid nonconvective precipitation (kg m-2 s-1)
!-- prognostic updraft area fraction coupling in convection
real (kind=kind_phys), pointer :: dqdt_qmicro(:,:) => null() !< instantanious microphysics tendency to be passed from MP to convection
contains
procedure :: create => coupling_create !< allocate array data
end type GFS_coupling_type
!----------------------------------------------------------------
! dtend_var_label
! Information about first dimension of dtidx
!----------------------------------------------------------------
type dtend_var_label
character(len=20) :: name
character(len=44) :: desc
character(len=32) :: unit
end type dtend_var_label
!----------------------------------------------------------------
! dtend_process_label
! Information about second dimension of dtidx
!----------------------------------------------------------------
type dtend_process_label
character(len=20) :: name
character(len=44) :: desc
logical :: time_avg
character(len=20) :: mod_name
end type dtend_process_label
!----------------------------------------------------------------------------------
! GFS_control_type
! model control parameters input from a namelist and/or derived from others
! list of those that can be modified during the run are at the bottom of the list
!----------------------------------------------------------------------------------
!! \section arg_table_GFS_control_type
!! \htmlinclude GFS_control_type.html
!!
type GFS_control_type
integer :: me !< MPI rank designator
integer :: master !< MPI rank of master atmosphere processor
type(MPI_Comm) :: communicator !< MPI communicator
integer :: ntasks !< MPI size in communicator
integer :: nthreads !< OpenMP threads available for physics
integer :: nlunit !< unit for namelist
character(len=64) :: fn_nml !< namelist filename for surface data cycling
character(len=:), pointer, dimension(:) :: input_nml_file => null() !< character string containing full namelist
!< for use with internal file reads
integer :: input_nml_file_length !< length (number of lines) in namelist for internal reads
integer :: logunit
real(kind=kind_phys) :: fhzero !< hours between clearing of diagnostic buckets (current bucket)
real(kind=kind_phys) :: fhzero_array(2) !< array to hold the the hours between clearing of diagnostic buckets
real(kind=kind_phys) :: fhzero_fhour(2) !< the maximum forecast length for the hours between clearing of diagnostic buckets
logical :: ldiag3d !< flag for 3d diagnostic fields
logical :: qdiag3d !< flag for 3d tracer diagnostic fields
logical :: flag_for_gwd_generic_tend !< true if GFS_GWD_generic should calculate tendencies
logical :: flag_for_pbl_generic_tend !< true if GFS_PBL_generic should calculate tendencies
logical :: flag_for_scnv_generic_tend !< true if GFS_DCNV_generic should calculate tendencies
logical :: flag_for_dcnv_generic_tend !< true if GFS_DCNV_generic should calculate tendencies
logical :: lssav !< logical flag for storing diagnostics
integer :: naux2d !< number of auxiliary 2d arrays to output (for debugging)
integer :: naux3d !< number of auxiliary 3d arrays to output (for debugging)
logical, pointer :: aux2d_time_avg(:) !< flags for time averaging of auxiliary 2d arrays
logical, pointer :: aux3d_time_avg(:) !< flags for time averaging of auxiliary 3d arrays
real(kind=kind_phys) :: fhcyc !< frequency for surface data cycling (hours)
integer :: thermodyn_id !< valid for GFS only for get_prs/phi
integer :: sfcpress_id !< valid for GFS only for get_prs/phi
logical :: gen_coord_hybrid!< for Henry's gen coord
!--- set some grid extent parameters
integer :: isc !< starting i-index for this MPI-domain
integer :: jsc !< starting j-index for this MPI-domain
integer :: nx !< number of points in the i-dir for this MPI-domain
integer :: ny !< number of points in the j-dir for this MPI-domain
integer :: levs !< number of vertical levels
!--- ak/bk for pressure level calculations
real(kind=kind_phys), pointer :: ak(:) !< from surface (k=1) to TOA (k=levs)
real(kind=kind_phys), pointer :: bk(:) !< from surface (k=1) to TOA (k=levs)
integer :: levsp1 !< number of vertical levels plus one
integer :: levsm1 !< number of vertical levels minus one
integer :: cnx !< number of points in the i-dir for this cubed-sphere face
integer :: cny !< number of points in the j-dir for this cubed-sphere face
integer :: lonr !< number of global points in x-dir (i) along the equator
integer :: latr !< number of global points in y-dir (j) along any meridian
integer :: tile_num
integer :: nblks !< for explicit data blocking: number of blocks
integer, pointer :: blksz(:) !< for explicit data blocking: block sizes of all blocks
integer :: ncols !< total number of columns for all blocks
!
integer :: nchunks !< number of chunks of an array that are used in the CCPP run phase
integer, pointer :: chunk_begin(:) !< first indices of chunks of an array for the CCPP run phase
integer, pointer :: chunk_end(:) !< last indices of chunks of an array for the CCPP run phase
!
integer :: fire_aux_data_levels !< vertical levels of fire auxiliary data
!--- coupling parameters
logical :: cplflx !< default no cplflx collection
logical :: cplice !< default no cplice collection (used together with cplflx)
logical :: cplocn2atm !< default yes ocn->atm coupling
logical :: cplwav !< default no cplwav collection
logical :: cplwav2atm !< default no wav->atm coupling
logical :: cplaqm !< default no cplaqm collection
logical :: cplchm !< default no cplchm collection
logical :: cpllnd !< default no cpllnd collection
logical :: cpllnd2atm !< default no lnd->atm coupling
logical :: rrfs_sd !< default no rrfs_sd collection
logical :: cpl_fire !< default no fire_behavior collection
logical :: use_cice_alb !< default .false. - i.e. don't use albedo imported from the ice model
logical :: cpl_imp_mrg !< default no merge import with internal forcings
logical :: cpl_imp_dbg !< default no write import data to file post merge
logical :: use_med_flux !< default .false. - i.e. don't use atmosphere-ocean fluxes imported from mediator
!--- integrated dynamics through earth's atmosphere
logical :: lsidea
!vay 2018 GW physics switches
logical :: ldiag_ugwp
logical :: ugwp_seq_update ! flag to update winds between UGWP steps
logical :: do_ugwp ! do mesoscale UGWP + TOFD + RF
logical :: do_tofd ! tofd flag in gwdps.f
logical :: do_gwd ! logical for gravity wave drag (gwd)
logical :: do_cnvgwd ! logical for convective gwd
!--- calendars and time parameters and activation triggers
real(kind=kind_phys) :: dtp !< physics timestep in seconds
real(kind=kind_phys) :: dtf !< dynamics timestep in seconds
integer :: nscyc !< trigger for surface data cycling
integer :: nszero !< trigger for zeroing diagnostic buckets
integer :: idat(1:8) !< initialization date and time
!< (yr, mon, day, t-zone, hr, min, sec, mil-sec)
integer :: idate(4) !< initial date with different size and ordering
!< (hr, mon, day, yr)
logical :: gfs_phys_time_vary_is_init=.false. !< GFS_phys_time_vary interstitial initialization flag
!--- radiation control parameters
real(kind=kind_phys) :: fhswr !< frequency for shortwave radiation (secs)
real(kind=kind_phys) :: fhlwr !< frequency for longwave radiation (secs)
integer :: nsswr !< integer trigger for shortwave radiation
integer :: nslwr !< integer trigger for longwave radiation
integer :: nhfrad !< number of timesteps for which to call radiation on physics timestep (coldstarts)
integer :: levr !< number of vertical levels for radiation calculations
integer :: levrp1 !< number of vertical levels for radiation calculations plus one
integer :: nfxr !< second dimension for fluxr diagnostic variable (radiation)
logical :: iaerclm !< flag for initializing aerosol data
integer :: ntrcaer !< number of aerosol tracers for Morrison-Gettelman microphysics
logical :: lmfshal !< parameter for radiation
logical :: lmfdeep2 !< parameter for radiation
integer :: nrcm !< second dimension of random number stream for RAS
integer :: iflip !< iflip - is not the same as flipv
integer :: isol !< use prescribed solar constant
!< 0 => fixed value=1366.0\f$W/m^2\f$(old standard)
!< 10 => fixed value=1360.8\f$W/m^2\f$(new standard)
!< 1 => NOAA ABS-scale TSI table (yearly) w 11-yr cycle approx
!< 2 => NOAA TIM-scale TSI table (yearly) w 11-yr cycle approx
!< 3 => CMIP5 TIM-scale TSI table (yearly) w 11-yr cycle approx
!< 4 => CMIP5 TIM-scale TSI table (monthly) w 11-yr cycle approx
integer :: ico2 !< prescribed global mean value (old opernl)
integer :: ialb !< use climatology alb, based on sfc type
!< 1 => use modis based alb
!< 2 => use LSM alb
integer :: iems !< 1 => use fixed value of 1.0
!< 2 => use LSM emiss
integer :: iaer !< default aerosol effect in sw only
integer :: iaermdl !< tropospheric aerosol model scheme flag
integer :: iaerflg !< aerosol effect control flag
character(len=26) :: aeros_file !< external file: aerosol data file
character(len=26) :: solar_file !< external file: solar constant data table
character(len=26) :: semis_file !< external file: surface emissivity data for radiation
character(len=26) :: co2dat_file !< external file: co2 monthly observation data table
character(len=26) :: co2gbl_file !< external file: co2 global annual mean data table
character(len=26) :: co2usr_file !< external file: co2 user defined data table
character(len=26) :: co2cyc_file !< external file: co2 climotological monthly cycle data
logical :: lalw1bd !< selects 1 band or multi bands for LW aerosol properties
integer :: icliq_sw !< sw optical property for liquid clouds
integer :: icice_sw !< sw optical property for ice clouds
integer :: icliq_lw !< lw optical property for liquid clouds
integer :: icice_lw !< lw optical property for ice clouds
integer :: iovr !< cloud-overlap used in cloud-sampling by radiation scheme(s)
integer :: ictm !< ictm=0 => use data at initial cond time, if not
!< available; use latest; no extrapolation.
!< ictm=1 => use data at the forecast time, if not
!< available; use latest; do extrapolation.
!< ictm=yyyy0 => use yyyy data for the forecast time;
!< no extrapolation.
!< ictm=yyyy1 = > use yyyy data for the fcst. If needed,
!< do extrapolation to match the fcst time.
!< ictm=-1 => use user provided external data for
!< the fcst time; no extrapolation.
!< ictm=-2 => same as ictm=0, but add seasonal cycle
!< from climatology; no extrapolation.
integer :: isubc_sw !< sw clouds without sub-grid approximation
integer :: isubc_lw !< lw clouds without sub-grid approximation
!< =1 => sub-grid cloud with prescribed seeds
!< =2 => sub-grid cloud with randomly generated
!< seeds
integer :: iswmode !< SW control flag for scattering process approximation
!< =1 => two-stream delta-eddington (Joseph et al. 1976)
!< =2 => two-stream PIFM (Zdunkowski et al. 1980)
!< =3 => discrete ordinates (Liou, 1973)
integer :: idcor !< Decorrelation length type for overlap assumption
!< =0 => Use constant decorrelation length, decorr_con
!< =1 => Use spatially varying decorrelation length (Hogan et al. 2010)
!< =2 => Use spatially and temporally varyint decorrelation length (Oreopoulos et al. 2012)
real(kind_phys) :: dcorr_con !< Decorrelation length constant (km) (if idcor = 0)
logical :: lcrick !< CRICK-Proof cloud water
logical :: lcnorm !< Cloud condensate normalized by cloud cover
logical :: lnoprec !< radiation precip flag for Ferrier/Moorthi
logical :: lwhtr !< flag to output lw heating rate (Radtend%lwhc)
logical :: swhtr !< flag to output sw heating rate (Radtend%swhc)
integer :: rad_hr_units !< flag to control units of lw/sw heating rate
!< 1: K day-1 - 2: K s-1
logical :: inc_minor_gas !< Include minor trace gases in RRTMG radiation calculation?
integer :: ipsd0 !< initial permutaion seed for mcica radiation
integer :: ipsdlim !< limit initial permutaion seed for mcica radiation
logical :: lrseeds !< flag to use host-provided random seeds
integer :: nrstreams !< number of random number streams in host-provided random seed array
logical :: lextop !< flag for using an extra top layer for radiation
! RRTMGP
logical :: do_RRTMGP !< Use RRTMGP
character(len=128) :: active_gases !< Character list of active gases used in RRTMGP
integer :: nGases !< Number of active gases
character(len=128) :: rrtmgp_root !< Directory of rte+rrtmgp source code
character(len=128) :: lw_file_gas !< RRTMGP K-distribution file, coefficients to compute optics for gaseous atmosphere
character(len=128) :: lw_file_clouds !< RRTMGP file containing coefficients used to compute clouds optical properties
integer :: rrtmgp_nBandsLW !< Number of RRTMGP LW bands.
integer :: rrtmgp_nGptsLW !< Number of RRTMGP LW spectral points.
character(len=128) :: sw_file_gas !< RRTMGP K-distribution file, coefficients to compute optics for gaseous atmosphere
character(len=128) :: sw_file_clouds !< RRTMGP file containing coefficients used to compute clouds optical properties
integer :: rrtmgp_nBandsSW !< Number of RRTMGP SW bands.
integer :: rrtmgp_nGptsSW !< Number of RRTMGP SW spectral points.
logical :: doG_cldoptics !< Use legacy RRTMG cloud-optics?
logical :: doGP_cldoptics_PADE !< Use RRTMGP cloud-optics: PADE approximation?
logical :: doGP_cldoptics_LUT !< Use RRTMGP cloud-optics: LUTs?
integer :: iovr_convcld !< Cloud-overlap assumption for convective-cloud
integer :: rrtmgp_nrghice !< Number of ice-roughness categories
integer :: rrtmgp_nGauss_ang !< Number of angles used in Gaussian quadrature
logical :: do_GPsw_Glw !< If set to true use rrtmgp for SW calculation, rrtmg for LW.
character(len=128), pointer :: active_gases_array(:) => null() !< character array for each trace gas name
logical :: use_LW_jacobian !< If true, use Jacobian of LW to update radiation tendency.
logical :: damp_LW_fluxadj !< If true, damp the LW flux adjustment using the Jacobian w/ height with logistic function
real(kind_phys) :: lfnc_k !< Logistic function transition depth (Pa)
real(kind_phys) :: lfnc_p0 !< Logistic function transition level (Pa)
logical :: doGP_lwscat !< If true, include scattering in longwave cloud-optics, only compatible w/ GP cloud-optics
logical :: doGP_sgs_cnv !< If true, include SubGridScale convective cloud in RRTMGP
logical :: doGP_sgs_mynn !< If true, include SubGridScale MYNN-EDMF cloud in RRTMGP
integer :: rrtmgp_lw_phys_blksz !< Number of columns to pass to RRTMGP LW per block.
integer :: rrtmgp_sw_phys_blksz !< Number of columns to pass to RRTMGP SW per block.
logical :: doGP_smearclds !< If true, include implicit SubGridScale clouds in RRTMGP
real(kind_phys) :: minGPpres !< Minimum pressure allowed in RRTMGP.
real(kind_phys) :: maxGPpres !< Maximum pressure allowed in RRTMGP.
real(kind_phys) :: minGPtemp !< Minimum temperature allowed in RRTMGP.
real(kind_phys) :: maxGPtemp !< Maximum temperature allowed in RRTMGP.
logical :: top_at_1 !< Vertical ordering flag.
integer :: iSFC !< Vertical index for surface
integer :: iTOA !< Vertical index for TOA
!--- microphysical switch
logical :: convert_dry_rho = .true. !< flag for converting mass/number concentrations from moist to dry
!< for physics options that expect dry mass/number concentrations;
!< this flag will no longer be needed once the CCPP standard
!< names and the CCPP framework logic have been augmented to
!< automatically determine whether such conversions are necessary
!< and if yes, perform them; hardcoded to .true. for now
!--- new microphysical switch
integer :: imp_physics !< choice of microphysics scheme
integer :: imp_physics_gfdl = 11 !< choice of GFDL microphysics scheme
integer :: imp_physics_thompson = 8 !< choice of Thompson microphysics scheme
integer :: imp_physics_wsm6 = 6 !< choice of WSMG microphysics scheme
integer :: imp_physics_zhao_carr = 99 !< choice of Zhao-Carr microphysics scheme
integer :: imp_physics_zhao_carr_pdf = 98 !< choice of Zhao-Carr microphysics scheme with PDF clouds
integer :: imp_physics_mg = 10 !< choice of Morrison-Gettelman microphysics scheme
integer :: imp_physics_fer_hires = 15 !< choice of Ferrier-Aligo microphysics scheme
integer :: imp_physics_nssl = 17 !< choice of NSSL microphysics scheme with background CCN
integer :: imp_physics_nssl2mccn = 18 !< choice of NSSL microphysics scheme with predicted CCN (compatibility)
integer :: iovr_rand = 0 !< choice of cloud-overlap: random
integer :: iovr_maxrand = 1 !< choice of cloud-overlap: maximum random
integer :: iovr_max = 2 !< choice of cloud-overlap: maximum
integer :: iovr_dcorr = 3 !< choice of cloud-overlap: decorrelation length
integer :: iovr_exp = 4 !< choice of cloud-overlap: exponential
integer :: iovr_exprand = 5 !< choice of cloud-overlap: exponential random
integer :: idcor_con = 0 !< choice for decorrelation-length: Use constant value
integer :: idcor_hogan = 1 !< choice for decorrelation-length: (https://rmets.onlinelibrary.wiley.com/doi/full/10.1002/qj.647)
integer :: idcor_oreopoulos = 2 !< choice for decorrelation-length: (10.5194/acp-12-9097-2012)
!--- Z-C microphysical parameters
real(kind=kind_phys) :: psautco(2) !< [in] auto conversion coeff from ice to snow
real(kind=kind_phys) :: prautco(2) !< [in] auto conversion coeff from cloud to rain
real(kind=kind_phys) :: evpco !< [in] coeff for evaporation of largescale rain
real(kind=kind_phys) :: wminco(2) !< [in] water and ice minimum threshold for Zhao
real(kind=kind_phys) :: avg_max_length !< reset time in seconds for max hourly fields
!--- M-G microphysical parameters
integer :: fprcp !< no prognostic rain and snow (MG)
integer :: pdfflag !< pdf flag for MG macrophysics
real(kind=kind_phys) :: mg_dcs !< Morrison-Gettelman microphysics parameters
real(kind=kind_phys) :: mg_qcvar
real(kind=kind_phys) :: mg_ts_auto_ice(2) !< ice auto conversion time scale
real(kind=kind_phys) :: mg_rhmini !< relative humidity threshold parameter for nucleating ice
real(kind=kind_phys) :: mg_ncnst !< constant droplet num concentration (m-3)
real(kind=kind_phys) :: mg_ninst !< constant ice num concentration (m-3)
real(kind=kind_phys) :: mg_ngnst !< constant graupel/hail num concentration (m-3)
real(kind=kind_phys) :: mg_berg_eff_factor !< berg efficiency factor
real(kind=kind_phys) :: mg_alf !< tuning factor for alphs in MG macrophysics
real(kind=kind_phys) :: mg_qcmin(2) !< min liquid and ice mixing ratio in Mg macro clouds
character(len=16) :: mg_precip_frac_method ! type of precipitation fraction method
real(kind=kind_phys) :: tf
real(kind=kind_phys) :: tcr
real(kind=kind_phys) :: tcrf
!
integer :: num_dfi_radar !< number of timespans with radar-prescribed temperature tendencies
real (kind=kind_phys) :: fh_dfi_radar(1+dfi_radar_max_intervals) !< begin+end of timespans to receive radar-prescribed temperature tendencies
logical :: do_cap_suppress !< enable convection suppression in GF scheme if fh_dfi_radar is specified
real (kind=kind_phys) :: radar_tten_limits(2) !< radar_tten values outside this range (min,max) are discarded
integer :: ix_dfi_radar(dfi_radar_max_intervals) = -1 !< Index within dfi_radar_tten of each timespan (-1 means "none")
integer :: dfi_radar_max_intervals
integer :: dfi_radar_max_intervals_plus_one
!
logical :: effr_in !< eg to turn on ffective radii for MG
logical :: microp_uniform
logical :: do_cldliq
logical :: do_cldice
logical :: hetfrz_classnuc