@@ -1479,7 +1479,7 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf)
1479
1479
use micro_pumas_utils, only: mg_liq_props, mg_ice_props, avg_diameter
1480
1480
use micro_pumas_utils, only: rhoi, rhosn, rhow, rhows, rhog, qsmall, mincld
1481
1481
1482
- use micro_pumas_v1 , only: micro_pumas_t end
1482
+ use micro_pumas_ccpp , only: micro_pumas_ccpp_run
1483
1483
1484
1484
use physics_buffer, only: pbuf_col_type_index
1485
1485
use subcol, only: subcol_field_avg
@@ -1894,8 +1894,10 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf)
1894
1894
integer :: col_type ! Flag to store whether accessing grid or sub-columns in pbuf_get_field
1895
1895
integer :: ierr
1896
1896
integer :: nlev
1897
+ integer :: num_dust_bins
1897
1898
1898
- character (128 ) :: errstring ! return status (non-blank for error return)
1899
+ character (512 ) :: ccpp_errmsg ! CCPP return status (non-blank for error return)
1900
+ character (128 ) :: pumas_errstring ! PUMAS return status (non-blank for error return)
1899
1901
1900
1902
! For rrtmg optics. specified distribution.
1901
1903
real (r8 ), parameter :: dcon = 25.e-6_r8 ! Convective size distribution effective radius (meters)
@@ -1946,9 +1948,9 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf)
1946
1948
! all the other arrays in this routine are dimensioned pver. This is required because
1947
1949
! PUMAS only gets the top_lev:pver array subsection, and the proc_rates arrays
1948
1950
! need to be the same levels.
1949
- call proc_rates% allocate (ncol, nlev, ncd, micro_mg_warm_rain, errstring )
1951
+ call proc_rates% allocate (ncol, nlev, ncd, micro_mg_warm_rain, pumas_errstring )
1950
1952
1951
- call handle_errmsg(errstring , subname= " micro_pumas_cam_tend" )
1953
+ call handle_errmsg(pumas_errstring , subname= " micro_pumas_cam_tend" )
1952
1954
1953
1955
1954
1956
call phys_getopts(use_subcol_microp_out= use_subcol_microp)
@@ -2380,60 +2382,70 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf)
2380
2382
frzcnt(:ncol,:top_lev-1 )= 0._r8
2381
2383
frzdep(:ncol,:top_lev-1 )= 0._r8
2382
2384
2385
+ ! Determine number of dust size bins:
2386
+ num_dust_bins = size (rndst, dim= 3 )
2387
+
2383
2388
do it = 1 , num_steps
2384
2389
2385
- call micro_pumas_tend( &
2386
- ncol, nlev, dtime/ num_steps,&
2387
- state_loc% t(:ncol,top_lev:), state_loc% q(:ncol,top_lev:,ixq), &
2388
- state_loc% q(:ncol,top_lev:,ixcldliq), state_loc% q(:ncol,top_lev:,ixcldice), &
2389
- state_loc% q(:ncol,top_lev:,ixnumliq), state_loc% q(:ncol,top_lev:,ixnumice), &
2390
- state_loc% q(:ncol,top_lev:,ixrain), state_loc% q(:ncol,top_lev:,ixsnow), &
2391
- state_loc% q(:ncol,top_lev:,ixnumrain), state_loc% q(:ncol,top_lev:,ixnumsnow), &
2392
- state_loc_graup(:ncol,top_lev:), state_loc_numgraup(:ncol,top_lev:), &
2393
- relvar(:ncol,top_lev:), accre_enhan(:ncol,top_lev:), &
2394
- state_loc% pmid(:ncol,top_lev:), state_loc% pdel(:ncol,top_lev:), state_loc% pint(:ncol,top_lev:), &
2395
- ast(:ncol,top_lev:), alst_mic(:ncol,top_lev:), aist_mic(:ncol,top_lev:), qsatfac(:ncol,top_lev:), &
2396
- rate1cld(:ncol,top_lev:), &
2397
- naai(:ncol,top_lev:), npccn(:ncol,top_lev:), &
2398
- rndst(:ncol,top_lev:,:), nacon(:ncol,top_lev:,:), &
2399
- tlat(:ncol,top_lev:), qvlat(:ncol,top_lev:), &
2400
- qcten(:ncol,top_lev:), qiten(:ncol,top_lev:), &
2401
- ncten(:ncol,top_lev:), niten(:ncol,top_lev:), &
2402
- qrten(:ncol,top_lev:), qsten(:ncol,top_lev:), &
2403
- nrten(:ncol,top_lev:), nsten(:ncol,top_lev:), &
2404
- qgten(:ncol,top_lev:), ngten(:ncol,top_lev:), &
2405
- rel(:ncol,top_lev:), rel_fn_dum(:ncol,top_lev:), rei(:ncol,top_lev:), &
2406
- sadice(:ncol,top_lev:), sadsnow(:ncol,top_lev:), &
2407
- prect(:ncol), preci(:ncol), &
2408
- nevapr(:ncol,top_lev:), am_evp_st(:ncol,top_lev:), &
2409
- prain(:ncol,top_lev:), &
2410
- cmeice(:ncol,top_lev:), dei(:ncol,top_lev:), &
2411
- mu(:ncol,top_lev:), lambdac(:ncol,top_lev:), &
2412
- qsout(:ncol,top_lev:), des(:ncol,top_lev:), &
2413
- qgout(:ncol,top_lev:), ngout(:ncol,top_lev:), dgout(:ncol,top_lev:), &
2414
- cflx(:ncol,top_lev:), iflx(:ncol,top_lev:), &
2415
- gflx(:ncol,top_lev:), &
2416
- rflx(:ncol,top_lev:), sflx(:ncol,top_lev:), qrout(:ncol,top_lev:), &
2417
- reff_rain_dum(:ncol,top_lev:), reff_snow_dum(:ncol,top_lev:), reff_grau_dum(:ncol,top_lev:), &
2418
- nrout(:ncol,top_lev:), nsout(:ncol,top_lev:), &
2419
- refl(:ncol,top_lev:), arefl(:ncol,top_lev:), areflz(:ncol,top_lev:), &
2420
- frefl(:ncol,top_lev:), csrfl(:ncol,top_lev:), acsrfl(:ncol,top_lev:), &
2421
- fcsrfl(:ncol,top_lev:), &
2422
- refl10cm(:ncol,top_lev:), reflz10cm(:ncol,top_lev:), rercld(:ncol,top_lev:), &
2423
- ncai(:ncol,top_lev:), ncal(:ncol,top_lev:), &
2424
- qrout2(:ncol,top_lev:), qsout2(:ncol,top_lev:), &
2425
- nrout2(:ncol,top_lev:), nsout2(:ncol,top_lev:), &
2426
- drout_dum(:ncol,top_lev:), dsout2_dum(:ncol,top_lev:), &
2427
- qgout2(:ncol,top_lev:), ngout2(:ncol,top_lev:), dgout2(:ncol,top_lev:), freqg(:ncol,top_lev:), &
2428
- freqs(:ncol,top_lev:), freqr(:ncol,top_lev:), &
2429
- nfice(:ncol,top_lev:), qcrat(:ncol,top_lev:), &
2430
- proc_rates, &
2431
- errstring, &
2432
- tnd_qsnow(:ncol,top_lev:),tnd_nsnow(:ncol,top_lev:),re_ice(:ncol,top_lev:),&
2433
- prer_evap(:ncol,top_lev:), &
2434
- frzimm(:ncol,top_lev:), frzcnt(:ncol,top_lev:), frzdep(:ncol,top_lev:) )
2435
-
2436
- call handle_errmsg(errstring, subname= " micro_pumas_cam_tend" )
2390
+ call micro_pumas_ccpp_run( &
2391
+ ncol, nlev, nlev+1 , num_dust_bins, dtime/ num_steps, &
2392
+ state_loc% t(:ncol,top_lev:), state_loc% q(:ncol,top_lev:,ixq), &
2393
+ state_loc% q(:ncol,top_lev:,ixcldliq), state_loc% q(:ncol,top_lev:,ixcldice), &
2394
+ state_loc% q(:ncol,top_lev:,ixnumliq), state_loc% q(:ncol,top_lev:,ixnumice), &
2395
+ state_loc% q(:ncol,top_lev:,ixrain), state_loc% q(:ncol,top_lev:,ixsnow), &
2396
+ state_loc% q(:ncol,top_lev:,ixnumrain), state_loc% q(:ncol,top_lev:,ixnumsnow), &
2397
+ state_loc_graup(:ncol,top_lev:), state_loc_numgraup(:ncol,top_lev:), &
2398
+ relvar(:ncol,top_lev:), accre_enhan(:ncol,top_lev:), &
2399
+ state_loc% pmid(:ncol,top_lev:), state_loc% pdel(:ncol,top_lev:), &
2400
+ state_loc% pint(:ncol,top_lev:), &
2401
+ ast(:ncol,top_lev:), alst_mic(:ncol,top_lev:), &
2402
+ aist_mic(:ncol,top_lev:), qsatfac(:ncol,top_lev:), &
2403
+ naai(:ncol,top_lev:), npccn(:ncol,top_lev:), &
2404
+ rndst(:ncol,top_lev:,:), nacon(:ncol,top_lev:,:), &
2405
+ tnd_qsnow(:ncol,top_lev:), tnd_nsnow(:ncol,top_lev:), &
2406
+ re_ice(:ncol,top_lev:), &
2407
+ frzimm(:ncol,top_lev:), frzcnt(:ncol,top_lev:), &
2408
+ frzdep(:ncol,top_lev:), rate1cld(:ncol,top_lev:), &
2409
+ tlat(:ncol,top_lev:), qvlat(:ncol,top_lev:), &
2410
+ qcten(:ncol,top_lev:), qiten(:ncol,top_lev:), &
2411
+ ncten(:ncol,top_lev:), niten(:ncol,top_lev:), &
2412
+ qrten(:ncol,top_lev:), qsten(:ncol,top_lev:), &
2413
+ nrten(:ncol,top_lev:), nsten(:ncol,top_lev:), &
2414
+ qgten(:ncol,top_lev:), ngten(:ncol,top_lev:), &
2415
+ rel(:ncol,top_lev:), rel_fn_dum(:ncol,top_lev:), &
2416
+ rei(:ncol,top_lev:), &
2417
+ sadice(:ncol,top_lev:), sadsnow(:ncol,top_lev:), &
2418
+ prect(:ncol), preci(:ncol), &
2419
+ nevapr(:ncol,top_lev:), am_evp_st(:ncol,top_lev:), &
2420
+ prain(:ncol,top_lev:), &
2421
+ cmeice(:ncol,top_lev:), dei(:ncol,top_lev:), &
2422
+ mu(:ncol,top_lev:), lambdac(:ncol,top_lev:), &
2423
+ qsout(:ncol,top_lev:), des(:ncol,top_lev:), &
2424
+ qgout(:ncol,top_lev:), ngout(:ncol,top_lev:), &
2425
+ dgout(:ncol,top_lev:), &
2426
+ cflx(:ncol,top_lev:), iflx(:ncol,top_lev:), &
2427
+ gflx(:ncol,top_lev:), &
2428
+ rflx(:ncol,top_lev:), sflx(:ncol,top_lev:), &
2429
+ qrout(:ncol,top_lev:), reff_rain_dum(:ncol,top_lev:), &
2430
+ reff_snow_dum(:ncol,top_lev:), reff_grau_dum(:ncol,top_lev:), &
2431
+ nrout(:ncol,top_lev:), nsout(:ncol,top_lev:), &
2432
+ refl(:ncol,top_lev:), arefl(:ncol,top_lev:), &
2433
+ areflz(:ncol,top_lev:), frefl(:ncol,top_lev:), &
2434
+ csrfl(:ncol,top_lev:), acsrfl(:ncol,top_lev:), &
2435
+ fcsrfl(:ncol,top_lev:), refl10cm(:ncol,top_lev:), &
2436
+ reflz10cm(:ncol,top_lev:), rercld(:ncol,top_lev:), &
2437
+ ncai(:ncol,top_lev:), ncal(:ncol,top_lev:), &
2438
+ qrout2(:ncol,top_lev:), qsout2(:ncol,top_lev:), &
2439
+ nrout2(:ncol,top_lev:), nsout2(:ncol,top_lev:), &
2440
+ drout_dum(:ncol,top_lev:), dsout2_dum(:ncol,top_lev:), &
2441
+ qgout2(:ncol,top_lev:), ngout2(:ncol,top_lev:), &
2442
+ dgout2(:ncol,top_lev:), freqg(:ncol,top_lev:), &
2443
+ freqs(:ncol,top_lev:), freqr(:ncol,top_lev:), &
2444
+ nfice(:ncol,top_lev:), qcrat(:ncol,top_lev:), &
2445
+ prer_evap(:ncol,top_lev:), proc_rates, &
2446
+ ccpp_errmsg, ierr )
2447
+
2448
+ call handle_errmsg(ccpp_errmsg, subname= " micro_pumas_cam_tend" )
2437
2449
2438
2450
call physics_ptend_init(ptend_loc, psetcols, " micro_pumas" , &
2439
2451
ls= .true. , lq= lq)
0 commit comments