@@ -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
0 commit comments