Skip to content

Commit 8aa7e54

Browse files
author
Haipeng Lin
committed
Dimension and various bfb fixes
1 parent 9b6e450 commit 8aa7e54

4 files changed

Lines changed: 193 additions & 124 deletions

schemes/pumas/micro_pumas_ccpp_dimensions_post.F90

Lines changed: 144 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module micro_pumas_ccpp_dimensions_post
1111
!> \section arg_table_micro_pumas_ccpp_dimensions_post_run Argument Table
1212
!! \htmlinclude micro_pumas_ccpp_dimensions_post_run.html
1313
subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nlev, &
14-
nlevp1, micro_nlevp1, pint, pumas_pint, qcsinksum_rate1ord, pumas_qcsinksum_rate1ord, airT_tend, &
14+
nlevp1, micro_nlevp1, trop_cloud_top_lev, qcsinksum_rate1ord, pumas_qcsinksum_rate1ord, airT_tend, &
1515
pumas_airT_tend, airq_tend, pumas_airq_tend, &
1616
cldliq_tend, pumas_cldliq_tend, cldice_tend, pumas_cldice_tend, numliq_tend, &
1717
pumas_numliq_tend, numice_tend, pumas_numice_tend, rainliq_tend, pumas_rainliq_tend, &
@@ -51,8 +51,9 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl
5151
integer, intent(in) :: nlevp1
5252
! microphysics vertical interface dimension
5353
integer, intent(in) :: micro_nlevp1
54+
! index of the top model level for which cloud physics is applied (1 to nlev)
55+
integer, intent(in) :: trop_cloud_top_lev
5456

55-
real(pumas_r8), intent(in) :: pumas_pint(:,:)
5657
!microphysics direct conversion rate of stratiform cloud water to precipitation (s-1)
5758
real(pumas_r8), intent(in) :: pumas_qcsinksum_rate1ord(:, :)
5859
!microphysics tendency of dry air enthalpy at constant pressure (J kg-1 s-1)
@@ -194,7 +195,6 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl
194195
!microphysics rain evaporation rate wrt moist air and condensed water (kg kg-1 s-1)
195196
real(pumas_r8), intent(in) :: pumas_rain_evap(:, :)
196197

197-
real(kind_phys), intent(out ) :: pint(:,:)
198198
!direct conversion rate of stratiform cloud water to precipitation (s-1)
199199
real(kind_phys), intent(out) :: qcsinksum_rate1ord(:, :)
200200
!tendency of dry air enthalpy at constant pressure (J kg-1 s-1)
@@ -343,79 +343,149 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl
343343
errcode = 0
344344
errmsg = ''
345345

346-
pint(:,:micro_nlevp1) = pumas_pint(:ncol,:)
347-
qcsinksum_rate1ord(:,:micro_nlev) = pumas_qcsinksum_rate1ord(:ncol,:)
348-
airT_tend(:,:micro_nlev) = pumas_airT_tend(:ncol,:)
349-
airq_tend(:,:micro_nlev) = pumas_airq_tend(:ncol,:)
350-
cldliq_tend(:,:micro_nlev) = pumas_cldliq_tend(:ncol,:)
351-
cldice_tend(:,:micro_nlev) = pumas_cldice_tend(:ncol,:)
352-
numliq_tend(:,:micro_nlev) = pumas_numliq_tend(:ncol,:)
353-
numice_tend(:,:micro_nlev) = pumas_numice_tend(:ncol,:)
354-
rainliq_tend(:,:micro_nlev) = pumas_rainliq_tend(:ncol,:)
355-
snowice_tend(:,:micro_nlev) = pumas_snowice_tend(:ncol,:)
356-
numliq_tend(:,:micro_nlev) = pumas_numliq_tend(:ncol,:)
357-
numice_tend(:,:micro_nlev) = pumas_numice_tend(:ncol,:)
358-
numrain_tend(:,:micro_nlev) = pumas_numrain_tend(:ncol,:)
359-
numsnow_tend(:,:micro_nlev) = pumas_numsnow_tend(:ncol,:)
360-
graupice_tend(:,:micro_nlev) = pumas_graupice_tend(:ncol,:)
361-
numgraup_tend(:,:micro_nlev) = pumas_numgraup_tend(:ncol,:)
362-
effc(:,:micro_nlev) = pumas_effc(:ncol,:)
363-
effc_fn(:,:micro_nlev) = pumas_effc_fn(:ncol,:)
364-
effi(:,:micro_nlev) = pumas_effi(:ncol,:)
365-
sadice(:,:micro_nlev) = pumas_sadice(:ncol,:)
366-
sadsnow(:,:micro_nlev) = pumas_sadsnow(:ncol,:)
346+
! Copy PUMAS outputs (levels 1:micro_nlev) back onto host levels trop_cloud_top_lev:nlev.
347+
qcsinksum_rate1ord(:,trop_cloud_top_lev:) = pumas_qcsinksum_rate1ord(:ncol,:)
348+
airT_tend(:,trop_cloud_top_lev:) = pumas_airT_tend(:ncol,:)
349+
airq_tend(:,trop_cloud_top_lev:) = pumas_airq_tend(:ncol,:)
350+
cldliq_tend(:,trop_cloud_top_lev:) = pumas_cldliq_tend(:ncol,:)
351+
cldice_tend(:,trop_cloud_top_lev:) = pumas_cldice_tend(:ncol,:)
352+
numliq_tend(:,trop_cloud_top_lev:) = pumas_numliq_tend(:ncol,:)
353+
numice_tend(:,trop_cloud_top_lev:) = pumas_numice_tend(:ncol,:)
354+
rainliq_tend(:,trop_cloud_top_lev:) = pumas_rainliq_tend(:ncol,:)
355+
snowice_tend(:,trop_cloud_top_lev:) = pumas_snowice_tend(:ncol,:)
356+
numrain_tend(:,trop_cloud_top_lev:) = pumas_numrain_tend(:ncol,:)
357+
numsnow_tend(:,trop_cloud_top_lev:) = pumas_numsnow_tend(:ncol,:)
358+
graupice_tend(:,trop_cloud_top_lev:) = pumas_graupice_tend(:ncol,:)
359+
numgraup_tend(:,trop_cloud_top_lev:) = pumas_numgraup_tend(:ncol,:)
360+
effc(:,trop_cloud_top_lev:) = pumas_effc(:ncol,:)
361+
effc_fn(:,trop_cloud_top_lev:) = pumas_effc_fn(:ncol,:)
362+
effi(:,trop_cloud_top_lev:) = pumas_effi(:ncol,:)
363+
sadice(:,trop_cloud_top_lev:) = pumas_sadice(:ncol,:)
364+
sadsnow(:,trop_cloud_top_lev:) = pumas_sadsnow(:ncol,:)
367365
prect(:) = pumas_prect(:ncol)
368366
preci(:) = pumas_preci(:ncol)
369-
prec_evap(:,:micro_nlev) = pumas_prec_evap(:ncol,:)
370-
am_evap_st(:,:micro_nlev) = pumas_am_evap_st(:ncol,:)
371-
prec_prod(:,:micro_nlev) = pumas_prec_prod(:ncol,:)
372-
cmeice(:,:micro_nlev) = pumas_cmeice(:ncol,:)
373-
deffi(:,:micro_nlev) = pumas_deffi(:ncol,:)
374-
pgamrad(:,:micro_nlev) = pumas_pgamrad(:ncol,:)
375-
lamcrad(:,:micro_nlev) = pumas_lamcrad(:ncol,:)
376-
snowice_in_prec(:,:micro_nlev) = pumas_snowice_in_prec(:ncol,:)
377-
scaled_diam_snow(:,:micro_nlev) = pumas_scaled_diam_snow(:ncol,:)
378-
graupice_in_prec(:,:micro_nlev) = pumas_graupice_in_prec(:ncol,:)
379-
numgraup_vol_in_prec(:,:micro_nlev) = pumas_numgraup_vol_in_prec(:ncol,:)
380-
scaled_diam_graup(:,:micro_nlev) = pumas_scaled_diam_graup(:ncol,:)
381-
lflx(:,:micro_nlevp1) = pumas_lflx(:ncol,:)
382-
iflx(:,:micro_nlevp1) = pumas_iflx(:ncol,:)
383-
gflx(:,:micro_nlevp1) = pumas_gflx(:ncol,:)
384-
rflx(:,:micro_nlevp1) = pumas_rflx(:ncol,:)
385-
sflx(:,:micro_nlevp1) = pumas_sflx(:ncol,:)
386-
rainliq_in_prec(:,:micro_nlev) = pumas_rainliq_in_prec(:ncol,:)
387-
reff_rain(:,:micro_nlev) = pumas_reff_rain(:ncol,:)
388-
reff_snow(:,:micro_nlev) = pumas_reff_snow(:ncol,:)
389-
reff_grau(:,:micro_nlev) = pumas_reff_grau(:ncol,:)
390-
numrain_vol_in_prec(:,:micro_nlev) = pumas_numrain_vol_in_prec(:ncol,:)
391-
numsnow_vol_in_prec(:,:micro_nlev) = pumas_numsnow_vol_in_prec(:ncol,:)
392-
refl(:,:micro_nlev) = pumas_refl(:ncol,:)
393-
arefl(:,:micro_nlev) = pumas_arefl(:ncol,:)
394-
areflz(:,:micro_nlev) = pumas_areflz(:ncol,:)
395-
frefl(:,:micro_nlev) = pumas_frefl(:ncol,:)
396-
csrfl(:,:micro_nlev) = pumas_csrfl(:ncol,:)
397-
acsrfl(:,:micro_nlev) = pumas_acsrfl(:ncol,:)
398-
fcsrfl(:,:micro_nlev) = pumas_fcsrfl(:ncol,:)
399-
refl10cm(:,:micro_nlev) = pumas_refl10cm(:ncol,:)
400-
reflz10cm(:,:micro_nlev) = pumas_reflz10cm(:ncol,:)
401-
rercld(:,:micro_nlev) = pumas_rercld(:ncol,:)
402-
ncai(:,:micro_nlev) = pumas_ncai(:ncol,:)
403-
ncal(:,:micro_nlev) = pumas_ncal(:ncol,:)
404-
rainliq(:,:micro_nlev) = pumas_rainliq(:ncol,:)
405-
snowice(:,:micro_nlev) = pumas_snowice(:ncol,:)
406-
numrain_vol(:,:micro_nlev) = pumas_numrain_vol(:ncol,:)
407-
numsnow_vol(:,:micro_nlev) = pumas_numsnow_vol(:ncol,:)
408-
diam_rain(:,:micro_nlev) = pumas_diam_rain(:ncol,:)
409-
diam_snow(:,:micro_nlev) = pumas_diam_snow(:ncol,:)
410-
graupice(:,:micro_nlev) = pumas_graupice(:ncol,:)
411-
numgraup_vol(:,:micro_nlev) = pumas_numgraup_vol(:ncol,:)
412-
diam_graup(:,:micro_nlev) = pumas_diam_graup(:ncol,:)
413-
freq_graup(:,:micro_nlev) = pumas_freq_graup(:ncol,:)
414-
freq_snow(:,:micro_nlev) = pumas_freq_graup(:ncol,:)
415-
freq_rain(:,:micro_nlev) = pumas_freq_rain(:ncol,:)
416-
frac_ice(:,:micro_nlev) = pumas_frac_ice(:ncol,:)
417-
frac_cldliq_tend(:,:micro_nlev) = pumas_frac_cldliq_tend(:ncol,:)
418-
rain_evap(:,:micro_nlev) = pumas_rain_evap(:ncol,:)
367+
prec_evap(:,trop_cloud_top_lev:) = pumas_prec_evap(:ncol,:)
368+
am_evap_st(:,trop_cloud_top_lev:) = pumas_am_evap_st(:ncol,:)
369+
prec_prod(:,trop_cloud_top_lev:) = pumas_prec_prod(:ncol,:)
370+
cmeice(:,trop_cloud_top_lev:) = pumas_cmeice(:ncol,:)
371+
deffi(:,trop_cloud_top_lev:) = pumas_deffi(:ncol,:)
372+
pgamrad(:,trop_cloud_top_lev:) = pumas_pgamrad(:ncol,:)
373+
lamcrad(:,trop_cloud_top_lev:) = pumas_lamcrad(:ncol,:)
374+
snowice_in_prec(:,trop_cloud_top_lev:) = pumas_snowice_in_prec(:ncol,:)
375+
scaled_diam_snow(:,trop_cloud_top_lev:) = pumas_scaled_diam_snow(:ncol,:)
376+
graupice_in_prec(:,trop_cloud_top_lev:) = pumas_graupice_in_prec(:ncol,:)
377+
numgraup_vol_in_prec(:,trop_cloud_top_lev:) = pumas_numgraup_vol_in_prec(:ncol,:)
378+
scaled_diam_graup(:,trop_cloud_top_lev:) = pumas_scaled_diam_graup(:ncol,:)
379+
lflx(:,trop_cloud_top_lev:) = pumas_lflx(:ncol,:)
380+
iflx(:,trop_cloud_top_lev:) = pumas_iflx(:ncol,:)
381+
gflx(:,trop_cloud_top_lev:) = pumas_gflx(:ncol,:)
382+
rflx(:,trop_cloud_top_lev:) = pumas_rflx(:ncol,:)
383+
sflx(:,trop_cloud_top_lev:) = pumas_sflx(:ncol,:)
384+
rainliq_in_prec(:,trop_cloud_top_lev:) = pumas_rainliq_in_prec(:ncol,:)
385+
reff_rain(:,trop_cloud_top_lev:) = pumas_reff_rain(:ncol,:)
386+
reff_snow(:,trop_cloud_top_lev:) = pumas_reff_snow(:ncol,:)
387+
reff_grau(:,trop_cloud_top_lev:) = pumas_reff_grau(:ncol,:)
388+
numrain_vol_in_prec(:,trop_cloud_top_lev:) = pumas_numrain_vol_in_prec(:ncol,:)
389+
numsnow_vol_in_prec(:,trop_cloud_top_lev:) = pumas_numsnow_vol_in_prec(:ncol,:)
390+
refl(:,trop_cloud_top_lev:) = pumas_refl(:ncol,:)
391+
arefl(:,trop_cloud_top_lev:) = pumas_arefl(:ncol,:)
392+
areflz(:,trop_cloud_top_lev:) = pumas_areflz(:ncol,:)
393+
frefl(:,trop_cloud_top_lev:) = pumas_frefl(:ncol,:)
394+
csrfl(:,trop_cloud_top_lev:) = pumas_csrfl(:ncol,:)
395+
acsrfl(:,trop_cloud_top_lev:) = pumas_acsrfl(:ncol,:)
396+
fcsrfl(:,trop_cloud_top_lev:) = pumas_fcsrfl(:ncol,:)
397+
refl10cm(:,trop_cloud_top_lev:) = pumas_refl10cm(:ncol,:)
398+
reflz10cm(:,trop_cloud_top_lev:) = pumas_reflz10cm(:ncol,:)
399+
rercld(:,trop_cloud_top_lev:) = pumas_rercld(:ncol,:)
400+
ncai(:,trop_cloud_top_lev:) = pumas_ncai(:ncol,:)
401+
ncal(:,trop_cloud_top_lev:) = pumas_ncal(:ncol,:)
402+
rainliq(:,trop_cloud_top_lev:) = pumas_rainliq(:ncol,:)
403+
snowice(:,trop_cloud_top_lev:) = pumas_snowice(:ncol,:)
404+
numrain_vol(:,trop_cloud_top_lev:) = pumas_numrain_vol(:ncol,:)
405+
numsnow_vol(:,trop_cloud_top_lev:) = pumas_numsnow_vol(:ncol,:)
406+
diam_rain(:,trop_cloud_top_lev:) = pumas_diam_rain(:ncol,:)
407+
diam_snow(:,trop_cloud_top_lev:) = pumas_diam_snow(:ncol,:)
408+
graupice(:,trop_cloud_top_lev:) = pumas_graupice(:ncol,:)
409+
numgraup_vol(:,trop_cloud_top_lev:) = pumas_numgraup_vol(:ncol,:)
410+
diam_graup(:,trop_cloud_top_lev:) = pumas_diam_graup(:ncol,:)
411+
freq_graup(:,trop_cloud_top_lev:) = pumas_freq_graup(:ncol,:)
412+
freq_snow(:,trop_cloud_top_lev:) = pumas_freq_snow(:ncol,:)
413+
freq_rain(:,trop_cloud_top_lev:) = pumas_freq_rain(:ncol,:)
414+
frac_ice(:,trop_cloud_top_lev:) = pumas_frac_ice(:ncol,:)
415+
frac_cldliq_tend(:,trop_cloud_top_lev:) = pumas_frac_cldliq_tend(:ncol,:)
416+
rain_evap(:,trop_cloud_top_lev:) = pumas_rain_evap(:ncol,:)
417+
418+
! Zero the levels above the microphysics range (1:trop_cloud_top_lev-1), which PUMAS
419+
! never writes. Mirrors CAM micro_pumas_cam.F90. When trop_cloud_top_lev == 1 these
420+
! are empty-slice assignments (no-ops).
421+
qcsinksum_rate1ord(:,:trop_cloud_top_lev-1) = 0._kind_phys
422+
airT_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
423+
airq_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
424+
cldliq_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
425+
cldice_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
426+
numliq_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
427+
numice_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
428+
rainliq_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
429+
snowice_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
430+
numrain_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
431+
numsnow_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
432+
graupice_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
433+
numgraup_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
434+
effc(:,:trop_cloud_top_lev-1) = 0._kind_phys
435+
effc_fn(:,:trop_cloud_top_lev-1) = 0._kind_phys
436+
effi(:,:trop_cloud_top_lev-1) = 0._kind_phys
437+
sadice(:,:trop_cloud_top_lev-1) = 0._kind_phys
438+
sadsnow(:,:trop_cloud_top_lev-1) = 0._kind_phys
439+
prec_evap(:,:trop_cloud_top_lev-1) = 0._kind_phys
440+
am_evap_st(:,:trop_cloud_top_lev-1) = 0._kind_phys
441+
prec_prod(:,:trop_cloud_top_lev-1) = 0._kind_phys
442+
cmeice(:,:trop_cloud_top_lev-1) = 0._kind_phys
443+
deffi(:,:trop_cloud_top_lev-1) = 0._kind_phys
444+
pgamrad(:,:trop_cloud_top_lev-1) = 0._kind_phys
445+
lamcrad(:,:trop_cloud_top_lev-1) = 0._kind_phys
446+
snowice_in_prec(:,:trop_cloud_top_lev-1) = 0._kind_phys
447+
scaled_diam_snow(:,:trop_cloud_top_lev-1) = 0._kind_phys
448+
graupice_in_prec(:,:trop_cloud_top_lev-1) = 0._kind_phys
449+
numgraup_vol_in_prec(:,:trop_cloud_top_lev-1) = 0._kind_phys
450+
scaled_diam_graup(:,:trop_cloud_top_lev-1) = 0._kind_phys
451+
lflx(:,:trop_cloud_top_lev-1) = 0._kind_phys
452+
iflx(:,:trop_cloud_top_lev-1) = 0._kind_phys
453+
gflx(:,:trop_cloud_top_lev-1) = 0._kind_phys
454+
rflx(:,:trop_cloud_top_lev-1) = 0._kind_phys
455+
sflx(:,:trop_cloud_top_lev-1) = 0._kind_phys
456+
rainliq_in_prec(:,:trop_cloud_top_lev-1) = 0._kind_phys
457+
reff_rain(:,:trop_cloud_top_lev-1) = 0._kind_phys
458+
reff_snow(:,:trop_cloud_top_lev-1) = 0._kind_phys
459+
reff_grau(:,:trop_cloud_top_lev-1) = 0._kind_phys
460+
numrain_vol_in_prec(:,:trop_cloud_top_lev-1) = 0._kind_phys
461+
numsnow_vol_in_prec(:,:trop_cloud_top_lev-1) = 0._kind_phys
462+
refl(:,:trop_cloud_top_lev-1) = 0._kind_phys
463+
arefl(:,:trop_cloud_top_lev-1) = 0._kind_phys
464+
areflz(:,:trop_cloud_top_lev-1) = 0._kind_phys
465+
frefl(:,:trop_cloud_top_lev-1) = 0._kind_phys
466+
csrfl(:,:trop_cloud_top_lev-1) = 0._kind_phys
467+
acsrfl(:,:trop_cloud_top_lev-1) = 0._kind_phys
468+
fcsrfl(:,:trop_cloud_top_lev-1) = 0._kind_phys
469+
refl10cm(:,:trop_cloud_top_lev-1) = 0._kind_phys
470+
reflz10cm(:,:trop_cloud_top_lev-1) = 0._kind_phys
471+
rercld(:,:trop_cloud_top_lev-1) = 0._kind_phys
472+
ncai(:,:trop_cloud_top_lev-1) = 0._kind_phys
473+
ncal(:,:trop_cloud_top_lev-1) = 0._kind_phys
474+
rainliq(:,:trop_cloud_top_lev-1) = 0._kind_phys
475+
snowice(:,:trop_cloud_top_lev-1) = 0._kind_phys
476+
numrain_vol(:,:trop_cloud_top_lev-1) = 0._kind_phys
477+
numsnow_vol(:,:trop_cloud_top_lev-1) = 0._kind_phys
478+
diam_rain(:,:trop_cloud_top_lev-1) = 0._kind_phys
479+
diam_snow(:,:trop_cloud_top_lev-1) = 0._kind_phys
480+
graupice(:,:trop_cloud_top_lev-1) = 0._kind_phys
481+
numgraup_vol(:,:trop_cloud_top_lev-1) = 0._kind_phys
482+
diam_graup(:,:trop_cloud_top_lev-1) = 0._kind_phys
483+
freq_graup(:,:trop_cloud_top_lev-1) = 0._kind_phys
484+
freq_snow(:,:trop_cloud_top_lev-1) = 0._kind_phys
485+
freq_rain(:,:trop_cloud_top_lev-1) = 0._kind_phys
486+
frac_ice(:,:trop_cloud_top_lev-1) = 0._kind_phys
487+
frac_cldliq_tend(:,:trop_cloud_top_lev-1) = 0._kind_phys
488+
rain_evap(:,:trop_cloud_top_lev-1) = 0._kind_phys
419489

420490
end subroutine micro_pumas_ccpp_dimensions_post_run
421491

schemes/pumas/micro_pumas_ccpp_dimensions_post.meta

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,11 @@
5252
dimensions = ()
5353
type = integer
5454
intent = in
55-
[pint]
56-
standard_name = air_pressure_at_interface
57-
long_name = air pressure at interface
58-
units = Pa
59-
dimensions = (horizontal_loop_extent, vertical_interface_dimension)
60-
type = real
61-
kind = kind_phys
62-
intent = out
63-
[pumas_pint]
64-
standard_name = pumas_air_pressure_at_interface
65-
long_name = pumas air pressure at interface
66-
units = Pa
67-
dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension)
68-
type = real
69-
kind = pumas_r8
55+
[trop_cloud_top_lev]
56+
standard_name = vertical_layer_index_of_troposphere_cloud_physics_top
57+
units = index
58+
type = integer
59+
dimensions = ()
7060
intent = in
7161
[qcsinksum_rate1ord]
7262
standard_name = direct_conversion_rate_of_stratiform_cloud_water_to_precipitation_for_scavenging

0 commit comments

Comments
 (0)