Skip to content

Commit ddc6db5

Browse files
committed
bug fix for run-time issue in EAM
1 parent 33f3720 commit ddc6db5

File tree

2 files changed

+43
-42
lines changed

2 files changed

+43
-42
lines changed

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

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,9 @@ subroutine zm_convr( pcols, ncol, pver, pverp, is_first_step, delt, &
263263
!----------------------------------------------------------------------------
264264
! Allocate and/or Initialize microphysics state/tend derived types
265265
if (zm_param%zm_microp) then
266-
call zm_microp_st_alloc(loc_microp_st, ncol, pver)
267-
call zm_microp_st_ini(loc_microp_st, ncol, pver)
268-
call zm_microp_st_ini(microp_st, ncol, pver)
266+
call zm_microp_st_alloc(loc_microp_st, pcols, pver)
267+
call zm_microp_st_ini(loc_microp_st, pcols, pver)
268+
call zm_microp_st_ini(microp_st, pcols, pver)
269269
loc_microp_st%lambdadpcu = (mucon + 1._r8)/dcon
270270
loc_microp_st%mudpcu = mucon
271271
end if
@@ -378,7 +378,11 @@ subroutine zm_convr( pcols, ncol, pver, pverp, is_first_step, delt, &
378378
end if
379379
end do
380380

381-
if (lengath.eq.0) return
381+
if (lengath.eq.0) then
382+
! Deallocate local microphysics arrays before returning
383+
if (zm_param%zm_microp) call zm_microp_st_dealloc(loc_microp_st)
384+
return
385+
end if
382386

383387
do ii=1,lengath
384388
ideep(ii)=gather_index(ii)
@@ -475,7 +479,7 @@ subroutine zm_convr( pcols, ncol, pver, pverp, is_first_step, delt, &
475479
!----------------------------------------------------------------------------
476480
! obtain cloud properties.
477481

478-
call cldprp(zm_const, pcols, ncol, pver, pverp, &
482+
call cldprp(pcols, ncol, pver, pverp, &
479483
qg ,tg ,ug ,vg ,pg , &
480484
zg ,sg ,mu ,eu ,du , &
481485
md ,ed ,sd ,qd ,mc , &
@@ -487,7 +491,6 @@ subroutine zm_convr( pcols, ncol, pver, pverp, is_first_step, delt, &
487491
landfracg, tpertg, &
488492
aero ,loc_microp_st ) ! < added for ZM micro
489493

490-
491494
!----------------------------------------------------------------------------
492495
! convert detrainment from units of "1/m" to "1/mb".
493496

@@ -508,7 +511,7 @@ subroutine zm_convr( pcols, ncol, pver, pverp, is_first_step, delt, &
508511

509512
!----------------------------------------------------------------------------
510513

511-
call closure(zm_const, pcols, ncol, pver, pverp, &
514+
call closure(pcols, ncol, pver, pverp, &
512515
qg ,tg ,pg ,zg ,sg , &
513516
tpg ,qs ,qu ,su ,mc , &
514517
du ,mu ,md ,qd ,sd , &
@@ -576,7 +579,7 @@ subroutine zm_convr( pcols, ncol, pver, pverp, is_first_step, delt, &
576579
!----------------------------------------------------------------------------
577580
! compute temperature and moisture changes due to convection.
578581

579-
call q1q2_pjr(zm_const, pcols, ncol, pver, pverp, &
582+
call q1q2_pjr(pcols, ncol, pver, pverp, &
580583
dqdt ,dsdt ,qg ,qs ,qu , &
581584
su ,du ,qhat ,shat ,dp , &
582585
mu ,md ,sd ,qd ,qlg , &
@@ -912,7 +915,7 @@ end subroutine zm_conv_evap
912915

913916
!===================================================================================================
914917

915-
subroutine cldprp(zm_const, pcols, ncol, pver, pverp, &
918+
subroutine cldprp(pcols, ncol, pver, pverp, &
916919
q ,t ,u ,v ,p , &
917920
z ,s ,mu ,eu ,du , &
918921
md ,ed ,sd ,qd ,mc , &
@@ -951,7 +954,6 @@ subroutine cldprp(zm_const, pcols, ncol, pver, pverp, &
951954
!
952955
! Input arguments
953956
!
954-
type(zm_const_t), intent(in) :: zm_const ! derived type to hold ZM constants
955957
integer, intent(in) :: pcols ! maximum number of columns
956958
integer, intent(in) :: ncol ! actual number of columns
957959
integer, intent(in) :: pver ! number of mid-point vertical levels
@@ -1580,9 +1582,11 @@ subroutine cldprp(zm_const, pcols, ncol, pver, pverp, &
15801582
end do
15811583

15821584
#ifndef SCREAM_CONFIG_IS_CMAKE
1583-
call zm_mphy( su, qu, mu, du, eu, loc_microp_st%cmel, loc_microp_st%cmei, &
1584-
zf, p, t, q, eps0, jb, jt, jlcl, msg, il2g, &
1585-
zm_const%grav, zm_const%cpair, zm_const%rdair, aero, gamhat, &
1585+
call zm_mphy( pcols, il2g, msg, &
1586+
zm_const%grav, zm_const%cpair, zm_const%rdair, &
1587+
zm_param%auto_fac, zm_param%accr_fac, zm_param%micro_dcs, &
1588+
jb, jt, jlcl, su, qu, mu, du, eu, zf, p, t, q, gamhat, eps0, &
1589+
loc_microp_st%cmel, loc_microp_st%cmei, aero, &
15861590
loc_microp_st%qliq, loc_microp_st%qice, loc_microp_st%qnl, loc_microp_st%qni, &
15871591
loc_microp_st%qcde, loc_microp_st%qide, loc_microp_st%ncde, loc_microp_st%nide, &
15881592
rprd, loc_microp_st%sprd, tmp_frz, loc_microp_st%wu, &
@@ -1604,8 +1608,7 @@ subroutine cldprp(zm_const, pcols, ncol, pver, pverp, &
16041608
loc_microp_st%accsirn, loc_microp_st%accgln, loc_microp_st%accgrn, loc_microp_st%accilm, &
16051609
loc_microp_st%acciln, loc_microp_st%fallrm, loc_microp_st%fallsm, loc_microp_st%fallgm, &
16061610
loc_microp_st%fallrn, loc_microp_st%fallsn, loc_microp_st%fallgn, loc_microp_st%fhmrm, &
1607-
loc_microp_st%dsfm, loc_microp_st%dsfn, &
1608-
zm_param%auto_fac, zm_param%accr_fac, zm_param%micro_dcs)
1611+
loc_microp_st%dsfm, loc_microp_st%dsfn )
16091612
#endif
16101613

16111614
do k = pver,msg + 2,-1
@@ -1863,7 +1866,7 @@ end subroutine cldprp
18631866

18641867
!===================================================================================================
18651868

1866-
subroutine closure(zm_const, pcols, ncol, pver, pverp, &
1869+
subroutine closure(pcols, ncol, pver, pverp, &
18671870
q ,t ,p ,z ,s , &
18681871
tp ,qs ,qu ,su ,mc , &
18691872
du ,mu ,md ,qd ,sd , &
@@ -1895,7 +1898,6 @@ subroutine closure(zm_const, pcols, ncol, pver, pverp, &
18951898
!
18961899
!-----------------------------Arguments---------------------------------
18971900
!
1898-
type(zm_const_t), intent(in) :: zm_const ! derived type to hold ZM constants
18991901
integer, intent(in) :: pcols ! maximum number of columns
19001902
integer, intent(in) :: ncol ! actual number of columns
19011903
integer, intent(in) :: pver ! number of mid-point vertical levels
@@ -2078,7 +2080,7 @@ end subroutine closure
20782080

20792081
!===================================================================================================
20802082

2081-
subroutine q1q2_pjr(zm_const, pcols, ncol, pver, pverp, &
2083+
subroutine q1q2_pjr(pcols, ncol, pver, pverp, &
20822084
dqdt ,dsdt ,q ,qs ,qu , &
20832085
su ,du ,qhat ,shat ,dp , &
20842086
mu ,md ,sd ,qd ,ql , &
@@ -2091,7 +2093,6 @@ subroutine q1q2_pjr(zm_const, pcols, ncol, pver, pverp, &
20912093
implicit none
20922094
!----------------------------------------------------------------------------
20932095
! Arguments
2094-
type(zm_const_t), intent(in) :: zm_const ! derived type to hold ZM constants
20952096
integer, intent(in) :: pcols ! maximum number of columns
20962097
integer, intent(in) :: ncol ! actual number of columns
20972098
integer, intent(in) :: pver ! number of mid-point vertical levels

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

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module zm_microphysics
77
!----------------------------------------------------------------------------
88
use shr_kind_mod, only: r8=>shr_kind_r8
99
use spmd_utils, only: masterproc
10-
use ppgrid, only: pcols, pver, pverp
10+
use ppgrid, only: pver, pverp
1111
use physconst, only: gravit, rair, tmelt, cpair, rh2o, r_universal, mwh2o, rhoh2o
1212
use physconst, only: latvap, latice
1313
use activate_drop_mam, only: actdrop_mam_calc
@@ -112,6 +112,7 @@ subroutine zm_microphysics_register()
112112
! Purpose: register pbuf variables for convective microphysics
113113
!----------------------------------------------------------------------------
114114
use physics_buffer, only : pbuf_add_field, dtype_r8
115+
use ppgrid, only: pcols
115116
!----------------------------------------------------------------------------
116117

117118
! detrained convective cloud water num concen.
@@ -197,8 +198,8 @@ end subroutine zm_mphyi
197198

198199
!===================================================================================================
199200

200-
subroutine zm_mphy(su, qu, mu, du, eu, cmel, cmei, zf, pm, te, qe, &
201-
eps0, jb, jt, jlcl, msg, il2g, grav, cp, rd, aero, gamhat, &
201+
subroutine zm_mphy(pcols, il2g, msg, grav, cp, rd, auto_fac, accr_fac, dcs, jb, jt, jlcl, &
202+
su, qu, mu, du, eu, zf, pm, te, qe, gamhat, eps0, cmel, cmei, aero, &
202203
qc, qi, nc, ni, qcde, qide, ncde, nide, rprd, sprd, frz, &
203204
wu, qr, qni, nr, ns, qg, ng, qnide,nsde, &
204205
autolm, accrlm, bergnm, fhtimm, fhtctm, &
@@ -208,7 +209,7 @@ subroutine zm_mphy(su, qu, mu, du, eu, cmel, cmei, zf, pm, te,
208209
accgrm, accglm, accgslm,accgsrm,accgirm,accgrim,accgrsm,accgsln,accgsrn, &
209210
accgirn,accsrim,acciglm,accigrm,accsirm,accigln,accigrn,accsirn,accgln, &
210211
accgrn ,accilm, acciln ,fallrm ,fallsm ,fallgm ,fallrn ,fallsn ,fallgn, &
211-
fhmrm ,dsfm, dsfn, auto_fac, accr_fac, dcs)
212+
fhmrm ,dsfm, dsfn)
212213

213214

214215
! Purpose:
@@ -224,35 +225,33 @@ subroutine zm_mphy(su, qu, mu, du, eu, cmel, cmei, zf, pm, te,
224225
implicit none
225226

226227
! input variables
228+
integer, intent(in) :: pcols ! declared column dimension size
229+
integer, intent(in) :: il2g ! number of columns in gathered arrays
230+
integer, intent(in) :: msg ! missing moisture vals
231+
real(r8), intent(in) :: grav ! gravity
232+
real(r8), intent(in) :: cp ! heat capacity of dry air
233+
real(r8), intent(in) :: rd ! gas constant for dry air
234+
integer, intent(in) :: jb(pcols) ! updraft base level
235+
real(r8), intent(in) :: auto_fac ! droplet-rain autoconversion enhancement factor
236+
real(r8), intent(in) :: accr_fac ! droplet-rain accretion enhancement factor
237+
real(r8), intent(in) :: dcs ! autoconversion size threshold for cloud ice to snow (m)
238+
integer, intent(in) :: jt(pcols) ! updraft plume top
239+
integer, intent(in) :: jlcl(pcols) ! updraft lifting cond level
227240
real(r8), intent(in) :: su(pcols,pver) ! normalized dry stat energy of updraft
228241
real(r8), intent(in) :: qu(pcols,pver) ! spec hum of updraft
229242
real(r8), intent(in) :: mu(pcols,pver) ! updraft mass flux
230243
real(r8), intent(in) :: du(pcols,pver) ! detrainement rate of updraft
231244
real(r8), intent(in) :: eu(pcols,pver) ! entrainment rate of updraft
232-
real(r8), intent(in) :: cmel(pcols,pver) ! condensation rate of updraft
233-
real(r8), intent(in) :: cmei(pcols,pver) ! condensation rate of updraft
234245
real(r8), intent(in) :: zf(pcols,pverp) ! height of interfaces
235246
real(r8), intent(in) :: pm(pcols,pver) ! pressure of env
236247
real(r8), intent(in) :: te(pcols,pver) ! temp of env
237248
real(r8), intent(in) :: qe(pcols,pver) ! spec. humidity of env
238-
real(r8), intent(in) :: eps0(pcols)
239249
real(r8), intent(in) :: gamhat(pcols,pver) ! gamma=L/cp(dq*/dT) at interface
240-
241-
integer, intent(in) :: jb(pcols) ! updraft base level
242-
integer, intent(in) :: jt(pcols) ! updraft plume top
243-
integer, intent(in) :: jlcl(pcols) ! updraft lifting cond level
244-
integer, intent(in) :: msg ! missing moisture vals
245-
integer, intent(in) :: il2g ! number of columns in gathered arrays
246-
250+
real(r8), intent(in) :: eps0(pcols) ! ???
251+
real(r8), intent(in) :: cmel(pcols,pver) ! condensation rate of updraft
252+
real(r8), intent(in) :: cmei(pcols,pver) ! condensation rate of updraft
247253
type(zm_aero_t), intent(in) :: aero ! aerosol object
248254

249-
real(r8) grav ! gravity
250-
real(r8) cp ! heat capacity of dry air
251-
real(r8) rd ! gas constant for dry air
252-
real(r8) auto_fac ! droplet-rain autoconversion enhancement factor
253-
real(r8) accr_fac ! droplet-rain accretion enhancement factor
254-
real(r8) dcs ! autoconversion size threshold for cloud ice to snow (m)
255-
256255
! output variables
257256
real(r8), intent(out) :: qc(pcols,pver) ! cloud water mixing ratio (kg/kg)
258257
real(r8), intent(out) :: qi(pcols,pver) ! cloud ice mixing ratio (kg/kg)
@@ -650,11 +649,12 @@ subroutine zm_mphy(su, qu, mu, du, eu, cmel, cmei, zf, pm, te,
650649
cwifrac = 0.5_r8
651650
retv = 0.608_r8
652651
bergtsf = 1800._r8
652+
653653

654654
! initialize multi-level fields
655655
do i=1,il2g
656656
do k=1,pver
657-
q(i,k) = qu(i,k)
657+
q(i,k) = qu(i,k)
658658
tu(i,k)= su(i,k) - grav/cp*zf(i,k)
659659
t(i,k) = su(i,k) - grav/cp*zf(i,k)
660660
p(i,k) = 100._r8*pm(i,k)
@@ -678,7 +678,7 @@ subroutine zm_mphy(su, qu, mu, du, eu, cmel, cmei, zf, pm, te,
678678
qcic(i,k) = 0._r8
679679
qiic(i,k) = 0._r8
680680
ncic(i,k) = 0._r8
681-
niic(i,k) = 0._r8
681+
niic(i,k) = 0._r8
682682
qr(i,k) = 0._r8
683683
qni(i,k) = 0._r8
684684
qg(i,k) = 0._r8

0 commit comments

Comments
 (0)