@@ -43,6 +43,7 @@ end subroutine micro_pumas_ccpp_dimensions_pre_init
4343 ! > \section arg_table_micro_pumas_ccpp_dimensions_pre_run Argument Table
4444 ! ! \htmlinclude micro_pumas_ccpp_dimensions_pre_run.html
4545 subroutine micro_pumas_ccpp_dimensions_pre_run (ncol , nlev , nlevp1 , &
46+ trop_cloud_top_lev , &
4647 micro_ncol , micro_nlev , micro_nlevp1 , micro_dust_nbins ,&
4748 airT_in , pumas_airT , airq_in , pumas_airq , &
4849 cldliq_in , pumas_cldliq , &
@@ -81,6 +82,8 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1,
8182 integer , intent (in ) :: ncol
8283 integer , intent (in ) :: nlev
8384 integer , intent (in ) :: nlevp1
85+ integer , intent (in ) :: trop_cloud_top_lev ! Index of the top model level for which
86+ ! cloud physics is applied (1 to nlev)
8487
8588 ! PUMAS dimensions/parameters:
8689 integer , intent (in ) :: micro_ncol ! Number of horizontal microphysics columns (count)
@@ -194,43 +197,43 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1,
194197 pumas_timestep = dtime/ micro_mg_num_steps
195198
196199
197- ! + IH
198- ! For now we just use ncols = micro_ncol, but we need to constrain the vertical extent for the microphysical fields.
199- ! Therefore micro_xxx (:ncol,:) = xxx(:,::)
200- !- IH
201- pumas_airT(:ncol,:) = real (airT_in(:,:), pumas_r8 )
202- pumas_airq(:ncol,:) = real (airq_in(:,:), pumas_r8 )
203- pumas_cldliq(:ncol,:) = real (cldliq_in(:,:), pumas_r8 )
204- pumas_cldice(:ncol,:) = real (cldice_in(:,:), pumas_r8 )
205- pumas_numliq(:ncol,:) = real (numliq_in(:,:), pumas_r8 )
206- pumas_numice(:ncol,:) = real (numice_in(:,:), pumas_r8 )
207- pumas_rainliq(:ncol,:) = real (rainliq_in(:,:), pumas_r8 )
208- pumas_snowice(:ncol,:) = real (snowice_in(:,:), pumas_r8 )
209- pumas_numrain(:ncol,:) = real (numrain_in(:,:), pumas_r8 )
210- pumas_numsnow(:ncol,:) = real (numsnow_in(:,:), pumas_r8 )
211- pumas_graupice(:ncol,:) = real (graupice_in(:,:), pumas_r8 )
212- pumas_numgraup(:ncol,:) = real (numgraup_in(:,:), pumas_r8 )
213- pumas_relvar(:ncol,:) = real (relvar_in(:,:), pumas_r8 )
214- pumas_accre_enhan(:ncol,:) = real (accre_enhan_in(:,:), pumas_r8 )
215- pumas_pmid(:ncol,:) = real (pmid_in(:,:), pumas_r8 )
216- pumas_pdel(:ncol,:) = real (pdel_in(:,:), pumas_r8 )
217- pumas_pint(:ncol,:) = real (pint_in(:,:micro_nlevp1 ), pumas_r8 )
218- pumas_strat_cldfrc(:ncol,:) = real (strat_cldfrc_in(:,:), pumas_r8 )
200+ ! Microphysics runs only over levels trop_cloud_top_lev:nlev (the bottom micro_nlev
201+ ! layers of the top-down indexed column). Slice each host input onto that range, so
202+ ! pumas_xxx (:ncol,:) receives host levels trop_cloud_top_lev:nlev. Mirrors CAM
203+ ! micro_pumas_cam.F90, which passes every field as xxx(:ncol,top_lev:).
204+ pumas_airT(:ncol,:) = real (airT_in(:,trop_cloud_top_lev :), pumas_r8 )
205+ pumas_airq(:ncol,:) = real (airq_in(:,trop_cloud_top_lev :), pumas_r8 )
206+ pumas_cldliq(:ncol,:) = real (cldliq_in(:,trop_cloud_top_lev :), pumas_r8 )
207+ pumas_cldice(:ncol,:) = real (cldice_in(:,trop_cloud_top_lev :), pumas_r8 )
208+ pumas_numliq(:ncol,:) = real (numliq_in(:,trop_cloud_top_lev :), pumas_r8 )
209+ pumas_numice(:ncol,:) = real (numice_in(:,trop_cloud_top_lev :), pumas_r8 )
210+ pumas_rainliq(:ncol,:) = real (rainliq_in(:,trop_cloud_top_lev :), pumas_r8 )
211+ pumas_snowice(:ncol,:) = real (snowice_in(:,trop_cloud_top_lev :), pumas_r8 )
212+ pumas_numrain(:ncol,:) = real (numrain_in(:,trop_cloud_top_lev :), pumas_r8 )
213+ pumas_numsnow(:ncol,:) = real (numsnow_in(:,trop_cloud_top_lev :), pumas_r8 )
214+ pumas_graupice(:ncol,:) = real (graupice_in(:,trop_cloud_top_lev :), pumas_r8 )
215+ pumas_numgraup(:ncol,:) = real (numgraup_in(:,trop_cloud_top_lev :), pumas_r8 )
216+ pumas_relvar(:ncol,:) = real (relvar_in(:,trop_cloud_top_lev :), pumas_r8 )
217+ pumas_accre_enhan(:ncol,:) = real (accre_enhan_in(:,trop_cloud_top_lev :), pumas_r8 )
218+ pumas_pmid(:ncol,:) = real (pmid_in(:,trop_cloud_top_lev :), pumas_r8 )
219+ pumas_pdel(:ncol,:) = real (pdel_in(:,trop_cloud_top_lev :), pumas_r8 )
220+ pumas_pint(:ncol,:) = real (pint_in(:,trop_cloud_top_lev: ), pumas_r8 )
221+ pumas_strat_cldfrc(:ncol,:) = real (strat_cldfrc_in(:,trop_cloud_top_lev :), pumas_r8 )
219222 ! PUMAS uses total stratiform fraction for both liquid and ice stratus.
220223 ! Mirrors CAM micro_pumas_cam.F90: alst_mic => ast; aist_mic => ast.
221- pumas_strat_liq_cldfrc(:ncol,:) = real (strat_cldfrc_in(:,:), pumas_r8 )
222- pumas_strat_ice_cldfrc(:ncol,:) = real (strat_cldfrc_in(:,:), pumas_r8 )
223- pumas_qsatfac(:ncol,:) = real (qsatfac_in(:,:), pumas_r8 )
224- pumas_naai(:ncol,:) = real (naai_in(:,:), pumas_r8 )
225- pumas_npccn(:ncol,:) = real (npccn_in(:,:), pumas_r8 )
226- pumas_rndst(:ncol,:,:) = real (rndst_in(:,:micro_nlev ,:), pumas_r8 )
227- pumas_nacon(:ncol,:,:) = real (nacon_in(:,:micro_nlev ,:), pumas_r8 )
228- pumas_snowice_tend_external(:ncol,:) = real (snowice_tend_external_in(:,:), pumas_r8 )
229- pumas_numsnow_tend_external(:ncol,:) = real (numsnow_tend_external_in(:,:), pumas_r8 )
230- pumas_effi_external(:ncol,:) = real (effi_external_in(:,:), pumas_r8 )
231- pumas_frzcnt(:ncol,:) = real (frzcnt_in(:,:), pumas_r8 )
232- pumas_frzdep(:ncol,:) = real (frzdep_in(:,:), pumas_r8 )
233- pumas_frzimm(:ncol,:) = real (frzimm_in(:,:), pumas_r8 )
224+ pumas_strat_liq_cldfrc(:ncol,:) = real (strat_cldfrc_in(:,trop_cloud_top_lev :), pumas_r8 )
225+ pumas_strat_ice_cldfrc(:ncol,:) = real (strat_cldfrc_in(:,trop_cloud_top_lev :), pumas_r8 )
226+ pumas_qsatfac(:ncol,:) = real (qsatfac_in(:,trop_cloud_top_lev :), pumas_r8 )
227+ pumas_naai(:ncol,:) = real (naai_in(:,trop_cloud_top_lev :), pumas_r8 )
228+ pumas_npccn(:ncol,:) = real (npccn_in(:,trop_cloud_top_lev :), pumas_r8 )
229+ pumas_rndst(:ncol,:,:) = real (rndst_in(:,trop_cloud_top_lev: ,:), pumas_r8 )
230+ pumas_nacon(:ncol,:,:) = real (nacon_in(:,trop_cloud_top_lev: ,:), pumas_r8 )
231+ pumas_snowice_tend_external(:ncol,:) = real (snowice_tend_external_in(:,trop_cloud_top_lev :), pumas_r8 )
232+ pumas_numsnow_tend_external(:ncol,:) = real (numsnow_tend_external_in(:,trop_cloud_top_lev :), pumas_r8 )
233+ pumas_effi_external(:ncol,:) = real (effi_external_in(:,trop_cloud_top_lev :), pumas_r8 )
234+ pumas_frzcnt(:ncol,:) = real (frzcnt_in(:,trop_cloud_top_lev :), pumas_r8 )
235+ pumas_frzdep(:ncol,:) = real (frzdep_in(:,trop_cloud_top_lev :), pumas_r8 )
236+ pumas_frzimm(:ncol,:) = real (frzimm_in(:,trop_cloud_top_lev :), pumas_r8 )
234237
235238 end subroutine micro_pumas_ccpp_dimensions_pre_run
236239
0 commit comments