@@ -33,7 +33,7 @@ module micro_pumas_cam
3333
3434use cldfrc2m, only: rhmini= >rhmini_const
3535
36- use cam_history, only: addfld, add_default, outfld, horiz_only
36+ use cam_history, only: addfld, add_default, outfld, horiz_only, hist_fld_active
3737
3838use cam_logfile, only: iulog
3939use cam_abortutils, only: endrun
@@ -1152,6 +1152,11 @@ subroutine micro_pumas_cam_init(pbuf2d)
11521152 call addfld (' FCTL' , horiz_only, ' A' , ' fraction' , ' Fractional occurrence of cloud top liquid' , sampled_on_subcycle= .true. )
11531153 call addfld (' FCTI' , horiz_only, ' A' , ' fraction' , ' Fractional occurrence of cloud top ice' , sampled_on_subcycle= .true. )
11541154
1155+ ! Bennartz cloud top diagnostics for comparing to Bernartz CDNC concentrations
1156+ call addfld (' ACTNL_B' , horiz_only, ' A' , ' m-3' , ' Average Cloud Top droplet number (Bennartz)' , sampled_on_subcycle= .true. )
1157+ call addfld (' FCTL_B' , horiz_only, ' A' , ' fraction' ,' Fractional occurrence of cloud top liquid (Bennartz)' , sampled_on_subcycle= .true. )
1158+ call addfld (' CCN_B' , horiz_only, ' A' , ' m-3' , ' Average Cloud Top liquid CCN (Bennartz)' , sampled_on_subcycle= .true. )
1159+
11551160 ! New frequency arrays for mixed phase and supercooled liquid (only and mixed) for (a) Cloud Top and (b) everywhere..
11561161 call addfld (' FREQM' , (/ ' lev' / ), ' A' , ' fraction' , ' Fractional occurrence of mixed phase' , sampled_on_subcycle= .true. )
11571162 call addfld (' FREQSL' , (/ ' lev' / ), ' A' , ' fraction' , ' Fractional occurrence of only supercooled liquid' , sampled_on_subcycle= .true. )
@@ -1287,6 +1292,17 @@ subroutine micro_pumas_cam_init(pbuf2d)
12871292 call add_default (' FREQS ' , 1 , ' ' )
12881293 call add_default (' FREQL ' , 1 , ' ' )
12891294 call add_default (' FREQI ' , 1 , ' ' )
1295+ call add_default (' ACTNL ' , 1 , ' ' )
1296+ call add_default (' ACTREL ' , 1 , ' ' )
1297+ call add_default (' FCTL ' , 1 , ' ' )
1298+ call add_default (' ACTNI ' , 1 , ' ' )
1299+ call add_default (' ACTREI ' , 1 , ' ' )
1300+ call add_default (' FCTI ' , 1 , ' ' )
1301+ ! These are for comparing to Bennartz
1302+ call add_default (' FCTL_B ' , 1 , ' ' )
1303+ call add_default (' ACTNL_B ' , 1 , ' ' )
1304+ call add_default (' CCN_B ' , 1 , ' ' )
1305+
12901306 do m = 1 , ncnst
12911307 call cnst_get_ind(cnst_names(m), mm)
12921308 call add_default(cnst_name(mm), 1 , ' ' )
@@ -1813,6 +1829,10 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf)
18131829
18141830 real (r8 ) :: ftem_grid(pcols,pver)
18151831
1832+ real (r8 ) :: fctl_b(pcols) ! frequency of occurrence for Bennartz
1833+ real (r8 ) :: ctnl_b(pcols) ! cdnc [/m3] for Bennartz
1834+ real (r8 ) :: ccn_b(pcols) ! ccm [/m3] defined as for cdnc for Bennartz
1835+
18161836 ! Variables for precip efficiency calculation
18171837 real (r8 ) :: minlwp ! LWP threshold
18181838
@@ -1907,6 +1927,7 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf)
19071927 real (r8 ) :: umsout_grid(pcols,pver)
19081928 real (r8 ) :: qcsevapout_grid(pcols,pver)
19091929 real (r8 ) :: qisevapout_grid(pcols,pver)
1930+ real (r8 ) :: ncal_grid(pcols,pver)
19101931
19111932 real (r8 ) :: nc_grid(pcols,pver)
19121933 real (r8 ) :: ni_grid(pcols,pver)
@@ -3492,6 +3513,10 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf)
34923513 fctsl_grid = 0._r8
34933514 fctslm_grid= 0._r8
34943515
3516+ fctl_b = 0._r8
3517+ ctnl_b = 0._r8
3518+ ccn_b = 0._r8
3519+
34953520 do i = 1 , ngrdcol
34963521 do k = top_lev, pver
34973522 if ( liqcldf_grid(i,k) > 0.01_r8 .and. icwmrst_grid(i,k) > 1.e-7_r8 ) then
@@ -3538,6 +3563,34 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf)
35383563 if (qcsevap_idx > 0 ) qcsevapout_grid_ptr = qcsevapout_grid
35393564 if (qisevap_idx > 0 ) qisevapout_grid_ptr = qisevapout_grid
35403565
3566+ ! Calculate values for comparing with Bennartz 2017
3567+ if (hist_fld_active(' ACTNL_B' ) .or. hist_fld_active(' FCTL_B' ) .or. &
3568+ hist_fld_active(' CCN_B' )) then
3569+ if (use_subcol_microp) then
3570+ call subcol_field_avg(ncal, ngrdcol, lchnk, ncal_grid)
3571+ else
3572+ ncal_grid = ncal
3573+ end if
3574+
3575+ do i = 1 , ngrdcol
3576+ do k = top_lev, pver
3577+ ! Criterions for Bennartz (2017) to use values from a column
3578+ ! 1) 268 < T < 300 [K]
3579+ ! 2) liquid cloud fraction > 10 %
3580+ if ( liqcldf_grid(i,k) > 0.1_r8 &
3581+ .and. state_loc% t(i,k) > 268.0_r8 &
3582+ .and. state_loc% t(i,k) < 300.0_r8 ) then
3583+ ! Save cloud fraction and in-cloud number conc
3584+ ctnl_b(i) = icwnc_grid(i,k) * liqcldf_grid(i,k)
3585+ fctl_b(i) = liqcldf_grid(i,k)
3586+ ccn_b(i) = ncal_grid(i,k) * liqcldf_grid(i,k)
3587+ exit ! ==> Go out to i=1,ncol-loop
3588+ end if
3589+ !- -IH
3590+ end do
3591+ end do
3592+ end if
3593+
35413594 ! --------------------------------------------- !
35423595 ! General outfield calls for microphysics !
35433596 ! --------------------------------------------- !
@@ -3828,6 +3881,10 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf)
38283881 call outfld(' FCTSL' , fctsl_grid, pcols, lchnk)
38293882 call outfld(' FCTSLM' , fctslm_grid, pcols, lchnk)
38303883
3884+ call outfld( ' FCTL_B' , fctl_b, pcols, lchnk )
3885+ call outfld( ' ACTNL_B' , ctnl_b, pcols, lchnk )
3886+ call outfld( ' CCN_B' , ccn_b, pcols, lchnk )
3887+
38313888 if (micro_mg_version > 2 ) then
38323889 call outfld(' PRACGO' , pracgo_grid, pcols, lchnk)
38333890 call outfld(' PSACRO' , psacro_grid, pcols, lchnk)
0 commit comments