@@ -29,7 +29,8 @@ module GFS_typedefs
2929 integer , parameter :: dfi_radar_max_intervals = 4 ! < Number of radar-derived temperature tendency and/or convection suppression intervals. Do not change.
3030
3131 real (kind= kind_phys), parameter :: limit_unspecified = 1e12 ! < special constant for "namelist value was not provided" in radar-derived temperature tendency limit range
32-
32+
33+ integer , parameter :: no_tracer = - 99
3334
3435! > \section arg_table_GFS_typedefs
3536! ! \htmlinclude GFS_typedefs.html
@@ -3334,7 +3335,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
33343335!- -- modules
33353336 use physcons, only: con_rerth, con_pi, con_p0, rhowater
33363337 use mersenne_twister, only: random_setseed, random_number
3337- use parse_tracers, only: get_tracer_index
33383338 use GFS_ccpp_suite_sim_pre, only: load_ccpp_suite_sim
33393339!
33403340 implicit none
@@ -5307,48 +5307,48 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
53075307 Model% ntracp100 = Model% ntrac + 100
53085308 allocate (Model% tracer_names(Model% ntrac))
53095309 Model% tracer_names(:) = tracer_names(:)
5310- Model% ntqv = get_tracer_index(Model% tracer_names, ' sphum' , Model % me, Model % master, Model % debug )
5310+ Model% ntqv = get_tracer_index(Model% tracer_names, ' sphum' )
53115311#ifdef MULTI_GASES
5312- Model% nto = get_tracer_index(Model% tracer_names, ' spo' , Model % me, Model % master, Model % debug )
5313- Model% nto2 = get_tracer_index(Model% tracer_names, ' spo2' , Model % me, Model % master, Model % debug )
5314- Model% ntoz = get_tracer_index(Model% tracer_names, ' spo3' , Model % me, Model % master, Model % debug )
5312+ Model% nto = get_tracer_index(Model% tracer_names, ' spo' )
5313+ Model% nto2 = get_tracer_index(Model% tracer_names, ' spo2' )
5314+ Model% ntoz = get_tracer_index(Model% tracer_names, ' spo3' )
53155315#else
5316- Model% ntoz = get_tracer_index(Model% tracer_names, ' o3mr' , Model % me, Model % master, Model % debug )
5316+ Model% ntoz = get_tracer_index(Model% tracer_names, ' o3mr' )
53175317 if ( Model% ntoz <= 0 ) &
5318- Model% ntoz = get_tracer_index(Model% tracer_names, ' spo3' , Model % me, Model % master, Model % debug )
5318+ Model% ntoz = get_tracer_index(Model% tracer_names, ' spo3' )
53195319#endif
5320- Model% ntcw = get_tracer_index(Model% tracer_names, ' liq_wat' , Model % me, Model % master, Model % debug )
5321- Model% ntiw = get_tracer_index(Model% tracer_names, ' ice_wat' , Model % me, Model % master, Model % debug )
5322- Model% ntrw = get_tracer_index(Model% tracer_names, ' rainwat' , Model % me, Model % master, Model % debug )
5323- Model% ntsw = get_tracer_index(Model% tracer_names, ' snowwat' , Model % me, Model % master, Model % debug )
5324- Model% ntgl = get_tracer_index(Model% tracer_names, ' graupel' , Model % me, Model % master, Model % debug )
5325- Model% nthl = get_tracer_index(Model% tracer_names, ' hailwat' , Model % me, Model % master, Model % debug )
5326- Model% ntclamt = get_tracer_index(Model% tracer_names, ' cld_amt' , Model % me, Model % master, Model % debug )
5327- Model% ntlnc = get_tracer_index(Model% tracer_names, ' water_nc' , Model % me, Model % master, Model % debug )
5328- Model% ntinc = get_tracer_index(Model% tracer_names, ' ice_nc' , Model % me, Model % master, Model % debug )
5329- Model% ntrnc = get_tracer_index(Model% tracer_names, ' rain_nc' , Model % me, Model % master, Model % debug )
5330- Model% ntsnc = get_tracer_index(Model% tracer_names, ' snow_nc' , Model % me, Model % master, Model % debug )
5331- Model% ntgnc = get_tracer_index(Model% tracer_names, ' graupel_nc' , Model % me, Model % master, Model % debug )
5332- Model% nthnc = get_tracer_index(Model% tracer_names, ' hail_nc' , Model % me, Model % master, Model % debug )
5333- Model% ntccn = get_tracer_index(Model% tracer_names, ' ccn_nc' , Model % me, Model % master, Model % debug )
5334- Model% ntccna = get_tracer_index(Model% tracer_names, ' ccna_nc' , Model % me, Model % master, Model % debug )
5335- Model% ntgv = get_tracer_index(Model% tracer_names, ' graupel_vol' ,Model % me, Model % master, Model % debug )
5336- Model% nthv = get_tracer_index(Model% tracer_names, ' hail_vol' , Model % me, Model % master, Model % debug )
5337- Model% ntrz = get_tracer_index(Model% tracer_names, ' rain_ref' , Model % me, Model % master, Model % debug )
5338- Model% ntgz = get_tracer_index(Model% tracer_names, ' graupel_ref' ,Model % me, Model % master, Model % debug )
5339- Model% nthz = get_tracer_index(Model% tracer_names, ' hail_ref' , Model % me, Model % master, Model % debug )
5340- Model% ntke = get_tracer_index(Model% tracer_names, ' sgs_tke' , Model % me, Model % master, Model % debug )
5341- Model% ntsigma = get_tracer_index(Model% tracer_names, ' sigmab' , Model % me, Model % master, Model % debug )
5342- Model% nqrimef = get_tracer_index(Model% tracer_names, ' q_rimef' , Model % me, Model % master, Model % debug )
5343- Model% ntwa = get_tracer_index(Model% tracer_names, ' liq_aero' , Model % me, Model % master, Model % debug )
5344- Model% ntia = get_tracer_index(Model% tracer_names, ' ice_aero' , Model % me, Model % master, Model % debug )
5320+ Model% ntcw = get_tracer_index(Model% tracer_names, ' liq_wat' )
5321+ Model% ntiw = get_tracer_index(Model% tracer_names, ' ice_wat' )
5322+ Model% ntrw = get_tracer_index(Model% tracer_names, ' rainwat' )
5323+ Model% ntsw = get_tracer_index(Model% tracer_names, ' snowwat' )
5324+ Model% ntgl = get_tracer_index(Model% tracer_names, ' graupel' )
5325+ Model% nthl = get_tracer_index(Model% tracer_names, ' hailwat' )
5326+ Model% ntclamt = get_tracer_index(Model% tracer_names, ' cld_amt' )
5327+ Model% ntlnc = get_tracer_index(Model% tracer_names, ' water_nc' )
5328+ Model% ntinc = get_tracer_index(Model% tracer_names, ' ice_nc' )
5329+ Model% ntrnc = get_tracer_index(Model% tracer_names, ' rain_nc' )
5330+ Model% ntsnc = get_tracer_index(Model% tracer_names, ' snow_nc' )
5331+ Model% ntgnc = get_tracer_index(Model% tracer_names, ' graupel_nc' )
5332+ Model% nthnc = get_tracer_index(Model% tracer_names, ' hail_nc' )
5333+ Model% ntccn = get_tracer_index(Model% tracer_names, ' ccn_nc' )
5334+ Model% ntccna = get_tracer_index(Model% tracer_names, ' ccna_nc' )
5335+ Model% ntgv = get_tracer_index(Model% tracer_names, ' graupel_vol' )
5336+ Model% nthv = get_tracer_index(Model% tracer_names, ' hail_vol' )
5337+ Model% ntrz = get_tracer_index(Model% tracer_names, ' rain_ref' )
5338+ Model% ntgz = get_tracer_index(Model% tracer_names, ' graupel_ref' )
5339+ Model% nthz = get_tracer_index(Model% tracer_names, ' hail_ref' )
5340+ Model% ntke = get_tracer_index(Model% tracer_names, ' sgs_tke' )
5341+ Model% ntsigma = get_tracer_index(Model% tracer_names, ' sigmab' )
5342+ Model% nqrimef = get_tracer_index(Model% tracer_names, ' q_rimef' )
5343+ Model% ntwa = get_tracer_index(Model% tracer_names, ' liq_aero' )
5344+ Model% ntia = get_tracer_index(Model% tracer_names, ' ice_aero' )
53455345 if (Model% cpl_fire) then
5346- Model% ntfsmoke = get_tracer_index(Model% tracer_names, ' fsmoke' , Model % me, Model % master, Model % debug )
5346+ Model% ntfsmoke = get_tracer_index(Model% tracer_names, ' fsmoke' )
53475347 endif
53485348 if (Model% rrfs_sd) then
5349- Model% ntsmoke = get_tracer_index(Model% tracer_names, ' smoke' , Model % me, Model % master, Model % debug )
5350- Model% ntdust = get_tracer_index(Model% tracer_names, ' dust' , Model % me, Model % master, Model % debug )
5351- Model% ntcoarsepm = get_tracer_index(Model% tracer_names, ' coarsepm' , Model % me, Model % master, Model % debug )
5349+ Model% ntsmoke = get_tracer_index(Model% tracer_names, ' smoke' )
5350+ Model% ntdust = get_tracer_index(Model% tracer_names, ' dust' )
5351+ Model% ntcoarsepm = get_tracer_index(Model% tracer_names, ' coarsepm' )
53525352 endif
53535353!- -- initialize parameters for atmospheric chemistry tracers
53545354 call Model% init_chemistry(tracer_types)
@@ -5406,21 +5406,21 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
54065406 Model% dtidx = - 99
54075407
54085408 if (Model% ntchm> 0 ) then
5409- Model% ntdu1 = get_tracer_index(Model% tracer_names, ' dust1' , Model % me, Model % master, Model % debug )
5410- Model% ntdu2 = get_tracer_index(Model% tracer_names, ' dust2' , Model % me, Model % master, Model % debug )
5411- Model% ntdu3 = get_tracer_index(Model% tracer_names, ' dust3' , Model % me, Model % master, Model % debug )
5412- Model% ntdu4 = get_tracer_index(Model% tracer_names, ' dust4' , Model % me, Model % master, Model % debug )
5413- Model% ntdu5 = get_tracer_index(Model% tracer_names, ' dust5' , Model % me, Model % master, Model % debug )
5414- Model% ntss1 = get_tracer_index(Model% tracer_names, ' seas1' , Model % me, Model % master, Model % debug )
5415- Model% ntss2 = get_tracer_index(Model% tracer_names, ' seas2' , Model % me, Model % master, Model % debug )
5416- Model% ntss3 = get_tracer_index(Model% tracer_names, ' seas3' , Model % me, Model % master, Model % debug )
5417- Model% ntss4 = get_tracer_index(Model% tracer_names, ' seas4' , Model % me, Model % master, Model % debug )
5418- Model% ntss5 = get_tracer_index(Model% tracer_names, ' seas5' , Model % me, Model % master, Model % debug )
5419- Model% ntsu = get_tracer_index(Model% tracer_names, ' so4' , Model % me, Model % master, Model % debug )
5420- Model% ntbcb = get_tracer_index(Model% tracer_names, ' bc1' , Model % me, Model % master, Model % debug )
5421- Model% ntbcl = get_tracer_index(Model% tracer_names, ' bc2' , Model % me, Model % master, Model % debug )
5422- Model% ntocb = get_tracer_index(Model% tracer_names, ' oc1' , Model % me, Model % master, Model % debug )
5423- Model% ntocl = get_tracer_index(Model% tracer_names, ' oc2' , Model % me, Model % master, Model % debug )
5409+ Model% ntdu1 = get_tracer_index(Model% tracer_names, ' dust1' )
5410+ Model% ntdu2 = get_tracer_index(Model% tracer_names, ' dust2' )
5411+ Model% ntdu3 = get_tracer_index(Model% tracer_names, ' dust3' )
5412+ Model% ntdu4 = get_tracer_index(Model% tracer_names, ' dust4' )
5413+ Model% ntdu5 = get_tracer_index(Model% tracer_names, ' dust5' )
5414+ Model% ntss1 = get_tracer_index(Model% tracer_names, ' seas1' )
5415+ Model% ntss2 = get_tracer_index(Model% tracer_names, ' seas2' )
5416+ Model% ntss3 = get_tracer_index(Model% tracer_names, ' seas3' )
5417+ Model% ntss4 = get_tracer_index(Model% tracer_names, ' seas4' )
5418+ Model% ntss5 = get_tracer_index(Model% tracer_names, ' seas5' )
5419+ Model% ntsu = get_tracer_index(Model% tracer_names, ' so4' )
5420+ Model% ntbcb = get_tracer_index(Model% tracer_names, ' bc1' )
5421+ Model% ntbcl = get_tracer_index(Model% tracer_names, ' bc2' )
5422+ Model% ntocb = get_tracer_index(Model% tracer_names, ' oc1' )
5423+ Model% ntocl = get_tracer_index(Model% tracer_names, ' oc2' )
54245424 end if
54255425
54265426 ! Lake & fractional grid safety checks
@@ -5484,11 +5484,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
54845484 ! Need better descriptions of these.
54855485 call label_dtend_tracer(Model,100 + Model% ntchm+ Model% ntchs-1 ,' pp10' ,' pp10 concentration' ,' kg kg-1 s-1' )
54865486
5487- itrac= get_tracer_index(Model% tracer_names, ' DMS' , Model % me, Model % master, Model % debug )
5487+ itrac= get_tracer_index(Model% tracer_names, ' DMS' )
54885488 if (itrac> 0 ) then
54895489 call label_dtend_tracer(Model,100 + itrac,' DMS' ,' DMS concentration' ,' kg kg-1 s-1' )
54905490 endif
5491- itrac= get_tracer_index(Model% tracer_names, ' msa' , Model % me, Model % master, Model % debug )
5491+ itrac= get_tracer_index(Model% tracer_names, ' msa' )
54925492 if (itrac> 0 ) then
54935493 call label_dtend_tracer(Model,100 + itrac,' msa' ,' msa concentration' ,' kg kg-1 s-1' )
54945494 endif
@@ -6505,8 +6505,6 @@ subroutine control_chemistry_initialize(Model, tracer_types)
65056505 !- -- prognostic and diagnostic chemistry tracers.
65066506 !- -- Each tracer set is assumed to be contiguous.
65076507
6508- use parse_tracers, only: NO_TRACER
6509-
65106508 !- -- interface variables
65116509 class(GFS_control_type) :: Model
65126510 integer , intent (in ) :: tracer_types(:)
@@ -6555,8 +6553,6 @@ end subroutine control_chemistry_initialize
65556553!- ---------------------------
65566554 subroutine control_scavenging_initialize (Model , fscav )
65576555
6558- use parse_tracers, only: get_tracer_index
6559-
65606556 !- -- interface variables
65616557 class(GFS_control_type) :: Model
65626558 character (len=* ), intent (in ) :: fscav(:)
@@ -6590,7 +6586,7 @@ subroutine control_scavenging_initialize(Model, fscav)
65906586 if (j > 1 ) then
65916587 read (fscav(i)(j+1 :), * , iostat= ios) tem
65926588 if (ios /= 0 ) cycle
6593- n = get_tracer_index(Model% tracer_names, adjustl (fscav(i)(:j-1 )), Model % me, Model % master, Model % debug ) &
6589+ n = get_tracer_index(Model% tracer_names, adjustl (fscav(i)(:j-1 ))) &
65946590 - Model% ntchs + 1
65956591 if (n > 0 ) Model% fscav(n) = tem
65966592 endif
@@ -7811,7 +7807,6 @@ end subroutine label_dtend_cause
78117807! GFS_diag%create
78127808!- ---------------
78137809 subroutine diag_create (Diag , Model )
7814- use parse_tracers, only: get_tracer_index
78157810 class(GFS_diag_type) :: Diag
78167811 type (GFS_control_type), intent (in ) :: Model
78177812 integer :: IM
@@ -8412,5 +8407,32 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
84128407 endif
84138408
84148409 end subroutine diag_phys_zero
8410+
8411+ function get_tracer_index (tracer_names , name )
8412+
8413+ character (len= 32 ), intent (in ) :: tracer_names(:)
8414+ character (len=* ), intent (in ) :: name
8415+
8416+ !- -- local variables
8417+ integer :: get_tracer_index
8418+ integer :: i
8419+
8420+ get_tracer_index = no_tracer
8421+
8422+ do i= 1 , size (tracer_names)
8423+ if (trim (name) == trim (tracer_names(i))) then
8424+ get_tracer_index = i
8425+ exit
8426+ endif
8427+ enddo
8428+
8429+ if (get_tracer_index == no_tracer) then
8430+ print * ,' tracer with name ' // trim (name)// ' not found'
8431+ else
8432+ print * ,' tracer FOUND:' ,trim (name)
8433+ endif
8434+
8435+ return
8436+ end function get_tracer_index
84158437
84168438end module GFS_typedefs
0 commit comments