Skip to content

Commit 69af0d2

Browse files
committed
move and rename zm_conv_readnl
1 parent e87651b commit 69af0d2

File tree

3 files changed

+124
-123
lines changed

3 files changed

+124
-123
lines changed

components/eam/src/control/runtime_opts.F90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ subroutine read_namelist(single_column_in, scmlon_in, scmlat_in, scm_multcols_in
241241
use cloud_fraction, only: cldfrc_readnl
242242
use cldfrc2m, only: cldfrc2m_readnl
243243
use cldwat, only: cldwat_readnl
244-
use zm_conv, only: zmconv_readnl
244+
use zm_conv_intr, only: zm_conv_readnl
245245
use hk_conv, only: hkconv_readnl
246246
use uwshcu, only: uwshcu_readnl
247247
use pkg_cld_sediment, only: cld_sediment_readnl
@@ -511,7 +511,7 @@ subroutine read_namelist(single_column_in, scmlon_in, scmlat_in, scm_multcols_in
511511
call subcol_readnl(nlfilename)
512512
call cldfrc_readnl(nlfilename)
513513
call cldfrc2m_readnl(nlfilename)
514-
call zmconv_readnl(nlfilename)
514+
call zm_conv_readnl(nlfilename)
515515
call cldwat_readnl(nlfilename)
516516
call hkconv_readnl(nlfilename)
517517
call uwshcu_readnl(nlfilename)

components/eam/src/physics/cam/zm_conv.F90

Lines changed: 1 addition & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ module zm_conv
2323
private ! Make default type private
2424
!----------------------------------------------------------------------------
2525
! public methods
26-
public zmconv_readnl ! read zmconv_nl namelist
2726
public zm_convi ! ZM schemea
2827
public zm_convr ! ZM schemea
2928
public zm_conv_evap ! evaporation of precip from ZM schemea
@@ -32,133 +31,14 @@ module zm_conv
3231
type(zm_const_t), public :: zm_const ! derived type to hold ZM constants
3332
type(zm_param_t), public :: zm_param ! derived type to hold ZM tunable parameters
3433
!----------------------------------------------------------------------------
35-
! private data
36-
real(r8), parameter :: unset_r8 = huge(1.0_r8)
37-
integer , parameter :: unset_int = huge(1)
38-
34+
! private variables
3935
real(r8), parameter :: capelmt = 70._r8 ! threshold value for cape for deep convection
4036
real(r8), parameter :: trigdcapelmt = 0._r8 ! threshold value of dcape for deep convection
4137

4238
!===================================================================================================
4339
contains
4440
!===================================================================================================
4541

46-
subroutine zmconv_readnl(nlfile)
47-
!----------------------------------------------------------------------------
48-
! Purpose: read namelist parameters for ZM deep convection
49-
!----------------------------------------------------------------------------
50-
use namelist_utils, only: find_group_name
51-
use units, only: getunit, freeunit
52-
use zm_conv_types, only: zm_param_mpi_broadcast
53-
use mpishorthand
54-
!----------------------------------------------------------------------------
55-
! Arguments
56-
character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input
57-
!----------------------------------------------------------------------------
58-
! Local variables
59-
integer :: unitn, ierr
60-
character(len=*), parameter :: subname = 'zmconv_readnl'
61-
62-
real(r8) :: zmconv_tau = unset_r8
63-
real(r8) :: zmconv_alfa = unset_r8
64-
real(r8) :: zmconv_ke = unset_r8
65-
real(r8) :: zmconv_dmpdz = unset_r8
66-
logical :: zmconv_tpert_fix = .false.
67-
real(r8) :: zmconv_tp_fac = unset_r8
68-
real(r8) :: zmconv_tiedke_add = unset_r8
69-
real(r8) :: zmconv_c0_lnd = unset_r8
70-
real(r8) :: zmconv_c0_ocn = unset_r8
71-
integer :: zmconv_cape_cin = unset_int
72-
integer :: zmconv_mx_bot_lyr_adj = unset_int
73-
logical :: zmconv_trig_dcape = .false.
74-
logical :: zmconv_trig_ull = .false.
75-
logical :: zmconv_clos_dyn_adj = .false.
76-
logical :: zmconv_microp = .false.
77-
real(r8) :: zmconv_auto_fac = unset_r8
78-
real(r8) :: zmconv_accr_fac = unset_r8
79-
real(r8) :: zmconv_micro_dcs = unset_r8
80-
real(r8) :: zmconv_MCSP_heat_coeff = 0._r8
81-
real(r8) :: zmconv_MCSP_moisture_coeff = 0._r8
82-
real(r8) :: zmconv_MCSP_uwind_coeff = 0._r8
83-
real(r8) :: zmconv_MCSP_vwind_coeff = 0._r8
84-
!----------------------------------------------------------------------------
85-
namelist /zmconv_nl/ zmconv_tau, zmconv_alfa, zmconv_ke, zmconv_dmpdz, &
86-
zmconv_tpert_fix, zmconv_tp_fac, zmconv_tiedke_add, &
87-
zmconv_c0_lnd, zmconv_c0_ocn, &
88-
zmconv_cape_cin, zmconv_mx_bot_lyr_adj, &
89-
zmconv_trig_dcape, zmconv_trig_ull, zmconv_clos_dyn_adj, &
90-
zmconv_microp, zmconv_auto_fac, zmconv_accr_fac, zmconv_micro_dcs, &
91-
zmconv_MCSP_heat_coeff, zmconv_MCSP_moisture_coeff, &
92-
zmconv_MCSP_uwind_coeff, zmconv_MCSP_vwind_coeff
93-
!----------------------------------------------------------------------------
94-
95-
if (masterproc) then
96-
unitn = getunit()
97-
open( unitn, file=trim(nlfile), status='old' )
98-
call find_group_name(unitn, 'zmconv_nl', status=ierr)
99-
if (ierr == 0) then
100-
read(unitn, zmconv_nl, iostat=ierr)
101-
if (ierr /= 0) then
102-
call endrun(subname // ':: ERROR reading namelist')
103-
end if
104-
end if
105-
close(unitn)
106-
call freeunit(unitn)
107-
108-
! set zm_param values
109-
zm_param%tau = zmconv_tau
110-
zm_param%ke = zmconv_ke
111-
zm_param%dmpdz = zmconv_dmpdz
112-
zm_param%tpert_fix = zmconv_tpert_fix
113-
zm_param%tpert_fac = zmconv_tp_fac
114-
zm_param%tiedke_add = zmconv_tiedke_add
115-
zm_param%c0_lnd = zmconv_c0_lnd
116-
zm_param%c0_ocn = zmconv_c0_ocn
117-
zm_param%num_cin = zmconv_cape_cin
118-
zm_param%mx_bot_lyr_adj = zmconv_mx_bot_lyr_adj
119-
zm_param%trig_dcape = zmconv_trig_dcape
120-
zm_param%trig_ull = zmconv_trig_ull
121-
zm_param%clos_dyn_adj = zmconv_clos_dyn_adj
122-
123-
! ZM microphysics parameters
124-
zm_param%zm_microp = zmconv_microp
125-
zm_param%auto_fac = zmconv_auto_fac
126-
zm_param%accr_fac = zmconv_accr_fac
127-
zm_param%micro_dcs = zmconv_micro_dcs
128-
129-
! mesoscale coherent structure parameterization (MCSP) parameters
130-
zm_param%mcsp_t_coeff = zmconv_MCSP_heat_coeff
131-
zm_param%mcsp_q_coeff = zmconv_MCSP_moisture_coeff
132-
zm_param%mcsp_u_coeff = zmconv_MCSP_uwind_coeff
133-
zm_param%mcsp_v_coeff = zmconv_MCSP_vwind_coeff
134-
if ( abs(zm_param%mcsp_t_coeff)>0._r8 .or. abs(zm_param%mcsp_q_coeff)>0._r8 .or. &
135-
abs(zm_param%mcsp_u_coeff)>0._r8 .or. abs(zm_param%mcsp_v_coeff)>0._r8 ) then
136-
zm_param%mcsp_enabled = .true.
137-
else
138-
zm_param%mcsp_enabled = .false.
139-
end if
140-
141-
if ( zmconv_alfa /= unset_r8 ) then
142-
zm_param%alfa = zmconv_alfa
143-
else
144-
zm_param%alfa = 0.1_r8
145-
end if
146-
147-
end if ! masterproc
148-
149-
!----------------------------------------------------------------------------
150-
! Broadcast namelist variables
151-
#ifdef SPMD
152-
call zm_param_mpi_broadcast(zm_param)
153-
#endif
154-
155-
!----------------------------------------------------------------------------
156-
return
157-
158-
end subroutine zmconv_readnl
159-
160-
!===================================================================================================
161-
16242
subroutine zm_convi(limcnv_in, no_deep_pbl_in)
16343
!----------------------------------------------------------------------------
16444
! Purpose: initialize quantities for ZM convection scheme

components/eam/src/physics/cam/zm_conv_intr.F90

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ module zm_conv_intr
2828
save
2929

3030
! public methods
31+
public :: zm_conv_readnl ! read zmconv_nl namelist
3132
public :: zm_conv_register ! register fields in physics buffer
3233
public :: zm_conv_init ! initialize donner_deep module
3334
public :: zm_conv_tend ! return tendencies
@@ -70,6 +71,126 @@ module zm_conv_intr
7071
contains
7172
!===================================================================================================
7273

74+
subroutine zm_conv_readnl(nlfile)
75+
!----------------------------------------------------------------------------
76+
! Purpose: read namelist parameters for ZM deep convection
77+
!----------------------------------------------------------------------------
78+
use namelist_utils, only: find_group_name
79+
use units, only: getunit, freeunit
80+
use zm_conv, only: zm_const, zm_param
81+
use zm_conv_types, only: zm_param_mpi_broadcast
82+
use mpishorthand
83+
!----------------------------------------------------------------------------
84+
! Arguments
85+
character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input
86+
!----------------------------------------------------------------------------
87+
! Local variables
88+
integer :: unitn, ierr
89+
character(len=*), parameter :: subname = 'zm_conv_readnl'
90+
91+
real(r8), parameter :: unset_r8 = huge(1.0_r8)
92+
integer , parameter :: unset_int = huge(1)
93+
94+
real(r8) :: zmconv_tau = unset_r8
95+
real(r8) :: zmconv_alfa = unset_r8
96+
real(r8) :: zmconv_ke = unset_r8
97+
real(r8) :: zmconv_dmpdz = unset_r8
98+
logical :: zmconv_tpert_fix = .false.
99+
real(r8) :: zmconv_tp_fac = unset_r8
100+
real(r8) :: zmconv_tiedke_add = unset_r8
101+
real(r8) :: zmconv_c0_lnd = unset_r8
102+
real(r8) :: zmconv_c0_ocn = unset_r8
103+
integer :: zmconv_cape_cin = unset_int
104+
integer :: zmconv_mx_bot_lyr_adj = unset_int
105+
logical :: zmconv_trig_dcape = .false.
106+
logical :: zmconv_trig_ull = .false.
107+
logical :: zmconv_clos_dyn_adj = .false.
108+
logical :: zmconv_microp = .false.
109+
real(r8) :: zmconv_auto_fac = unset_r8
110+
real(r8) :: zmconv_accr_fac = unset_r8
111+
real(r8) :: zmconv_micro_dcs = unset_r8
112+
real(r8) :: zmconv_MCSP_heat_coeff = 0._r8
113+
real(r8) :: zmconv_MCSP_moisture_coeff = 0._r8
114+
real(r8) :: zmconv_MCSP_uwind_coeff = 0._r8
115+
real(r8) :: zmconv_MCSP_vwind_coeff = 0._r8
116+
!----------------------------------------------------------------------------
117+
namelist /zmconv_nl/ zmconv_tau, zmconv_alfa, zmconv_ke, zmconv_dmpdz, &
118+
zmconv_tpert_fix, zmconv_tp_fac, zmconv_tiedke_add, &
119+
zmconv_c0_lnd, zmconv_c0_ocn, &
120+
zmconv_cape_cin, zmconv_mx_bot_lyr_adj, &
121+
zmconv_trig_dcape, zmconv_trig_ull, zmconv_clos_dyn_adj, &
122+
zmconv_microp, zmconv_auto_fac, zmconv_accr_fac, zmconv_micro_dcs, &
123+
zmconv_MCSP_heat_coeff, zmconv_MCSP_moisture_coeff, &
124+
zmconv_MCSP_uwind_coeff, zmconv_MCSP_vwind_coeff
125+
!----------------------------------------------------------------------------
126+
127+
if (masterproc) then
128+
unitn = getunit()
129+
open( unitn, file=trim(nlfile), status='old' )
130+
call find_group_name(unitn, 'zmconv_nl', status=ierr)
131+
if (ierr == 0) then
132+
read(unitn, zmconv_nl, iostat=ierr)
133+
if (ierr /= 0) then
134+
call endrun(subname // ':: ERROR reading namelist')
135+
end if
136+
end if
137+
close(unitn)
138+
call freeunit(unitn)
139+
140+
! set zm_param values
141+
zm_param%tau = zmconv_tau
142+
zm_param%ke = zmconv_ke
143+
zm_param%dmpdz = zmconv_dmpdz
144+
zm_param%tpert_fix = zmconv_tpert_fix
145+
zm_param%tpert_fac = zmconv_tp_fac
146+
zm_param%tiedke_add = zmconv_tiedke_add
147+
zm_param%c0_lnd = zmconv_c0_lnd
148+
zm_param%c0_ocn = zmconv_c0_ocn
149+
zm_param%num_cin = zmconv_cape_cin
150+
zm_param%mx_bot_lyr_adj = zmconv_mx_bot_lyr_adj
151+
zm_param%trig_dcape = zmconv_trig_dcape
152+
zm_param%trig_ull = zmconv_trig_ull
153+
zm_param%clos_dyn_adj = zmconv_clos_dyn_adj
154+
155+
! ZM microphysics parameters
156+
zm_param%zm_microp = zmconv_microp
157+
zm_param%auto_fac = zmconv_auto_fac
158+
zm_param%accr_fac = zmconv_accr_fac
159+
zm_param%micro_dcs = zmconv_micro_dcs
160+
161+
! mesoscale coherent structure parameterization (MCSP) parameters
162+
zm_param%mcsp_t_coeff = zmconv_MCSP_heat_coeff
163+
zm_param%mcsp_q_coeff = zmconv_MCSP_moisture_coeff
164+
zm_param%mcsp_u_coeff = zmconv_MCSP_uwind_coeff
165+
zm_param%mcsp_v_coeff = zmconv_MCSP_vwind_coeff
166+
if ( abs(zm_param%mcsp_t_coeff)>0._r8 .or. abs(zm_param%mcsp_q_coeff)>0._r8 .or. &
167+
abs(zm_param%mcsp_u_coeff)>0._r8 .or. abs(zm_param%mcsp_v_coeff)>0._r8 ) then
168+
zm_param%mcsp_enabled = .true.
169+
else
170+
zm_param%mcsp_enabled = .false.
171+
end if
172+
173+
if ( zmconv_alfa /= unset_r8 ) then
174+
zm_param%alfa = zmconv_alfa
175+
else
176+
zm_param%alfa = 0.1_r8
177+
end if
178+
179+
end if ! masterproc
180+
181+
!----------------------------------------------------------------------------
182+
! Broadcast namelist variables
183+
#ifdef SPMD
184+
call zm_param_mpi_broadcast(zm_param)
185+
#endif
186+
187+
!----------------------------------------------------------------------------
188+
return
189+
190+
end subroutine zm_conv_readnl
191+
192+
!===================================================================================================
193+
73194
subroutine zm_conv_register
74195
!----------------------------------------------------------------------------
75196
! Purpose: register fields with the physics buffer

0 commit comments

Comments
 (0)