LCOV - code coverage report
Current view: | top level - physics/clubb/src/CLUBB_core - clubb_api_module.F90 (source / functions) |  |  | Hit | Total | Coverage
Test: | coverage.info |  | Lines: | 66 | 693 | 9.5 %
Date: | 2024-12-17 22:39:59 |  | Functions: | 9 | 39 | 23.1 %

              Line data    Source code
           1             : !--------------------------------------------------------------------------------------------------
           2             : ! $Id$
           3             : !==================================================================================================
           4             : !
           5             : !       ########  ###       ###    ### #########  #########           ###     ######### ###########
           6             : !     ###    ### ###       ###    ### ###    ### ###    ###        ### ###   ###    ###    ###
           7             : !    ###        ###       ###    ### ###    ### ###    ###       ###   ###  ###    ###    ###
           8             : !   ###        ###       ###    ### #########  #########       ########### #########     ###
           9             : !  ###        ###       ###    ### ###    ### ###    ###      ###     ### ###           ###
          10             : ! ###    ### ###       ###    ### ###    ### ###    ###      ###     ### ###           ###
          11             : ! ########  ########## ########  #########  #########       ###     ### ###       ###########
          12             : !
          13             : ! The CLUBB API serves as the doorway through which external models can interact with CLUBB.
          14             : !
          15             : !               PLEASE REMEMBER, IF ANY CODE IS CHANGED IN THIS DOCUMENT,
          16             : !                   THE CHANGES MUST BE PROPOGATED TO ALL HOST MODELS.
          17             : !
          18             :
          19             : module clubb_api_module
          20             :
          21             :
          22             :   use mt95, only : &
          23             :     assignment( = ), &
          24             :     genrand_state, & ! Internal representation of the RNG state.
          25             :     genrand_srepr, & ! Public representation of the RNG state. Should be used to save the RNG state
          26             :     genrand_intg, &
          27             :     genrand_init_api => genrand_init
          28             :
          29             :   use clubb_precision, only : &
          30             :     time_precision, &
          31             :     core_rknd, &
          32             :     stat_nknd, &
          33             :     stat_rknd, &
          34             :     dp  ! Double Precision
          35             :
          36             :   use constants_clubb, only : &
          37             :     cloud_frac_min, & ! Threshold for cloud fractions
          38             :     cm3_per_m3, & ! Cubic centimeters per cubic meter
          39             :     Cp, & ! Dry air specific heat at constant p [J/kg/K]
          40             :     em_min, & ! Minimum value for em (turbulence kinetic energy)
          41             :     ep, & ! ep  = 0.622  [-]
          42             :     fstderr, & ! Fortran file unit I/O constant
          43             :     fstdout, & ! Fortran file unit I/O constant
          44             :     grav, & ! Gravitational acceleration     [m/s^2]
          45             :     Ls, & ! Latent heat of sublimation          [J/kg]
          46             :     Lv, & ! Latent heat of vaporization         [J/kg]
          47             :     Lf, & ! Latent heat of fusion               [J/kg]
          48             :     pi, & ! The ratio of radii to their circumference
          49             :     pi_dp, & ! pi in double precision
          50             :     radians_per_deg_dp, &
          51             :     Rd, & ! Dry air gas constant                [J/kg/K]
          52             :     Rv, & ! Water vapor gas constant            [J/kg/K]
          53             :     sec_per_day, & ! Seconds in a day.
          54             :     sec_per_hr, &  ! Seconds in an hour.
          55             :     sec_per_min, & ! Seconds in a minute.
          56             :     T_freeze_K, & ! Freezing point of water [K]
          57             :     var_length, & ! Maximum variable name length in CLUBB GrADS or netCDF output
          58             :     zero, & ! 0.0_core_rknd
          59             :     zero_threshold, & ! Defining a threshold on a physical quantity to be 0.
          60             :     ! Tolerances
          61             :     Nc_tol, & ! Tolerance value for N_c  [#/kg]
          62             :     Ng_tol, & ! Tolerance value for N_s [#/kg]
          63             :     Ni_tol, & ! Tolerance value for N_i [#/kg]
          64             :     Nr_tol, & ! Tolerance value for N_r [#/kg]
          65             :     Ns_tol, & ! Tolerance value for N_s [#/kg]
          66             :     rg_tol, & ! Tolerance value for r_g [kg/kg]
          67             :     rho_lw, &
          68             :     ri_tol, & ! Tolerance value for r_i [kg/kg]
          69             :     rr_tol, & ! Tolerance value for r_r [kg/kg]
          70             :     rs_tol, & ! Tolerance value for r_s [kg/kg]
          71             :     rt_tol, & ! [kg/kg]
          72             :     thl_tol, & ! [K]
          73             :     w_tol_sqd, & ! [m^2/s^2]
          74             :     num_hf_draw_points ! Neighboring points to use in hole filling algorithm
          75             :
          76             :   use corr_varnce_module, only : &
          77             :       hmp2_ip_on_hmm2_ip_slope_type,      & ! Types
          78             :       hmp2_ip_on_hmm2_ip_intrcpt_type, &
          79             :       hm_metadata_type
          80             :
          81             :   use array_index, only: &
          82             :       sclr_idx_type
          83             :
          84             :   use error_code, only: &
          85             :       clubb_at_least_debug_level,  & ! Procedure
          86             :       err_code,                    & ! Error Indicator
          87             :       clubb_no_error,              & ! Constants
          88             :       clubb_fatal_error
          89             :
          90             :   use hydromet_pdf_parameter_module, only : &
          91             :     hydromet_pdf_parameter, &
          92             :     precipitation_fractions
          93             :
          94             :   use model_flags, only : &
          95             :       clubb_config_flags_type, & ! Type
          96             :       iiPDF_ADG1, &
          97             :       iiPDF_new_hybrid, &
          98             :       ipdf_pre_advance_fields, &
          99             :       ipdf_post_advance_fields, &
         100             :       l_use_boussinesq    ! Use Boussinesq form of predictive equations (default is Anelastic).
         101             :
         102             :   use parameters_tunable, only : &
         103             :     params_list,         & ! Variable(s)
         104             :     nu_vertical_res_dep    ! Type(s)
         105             :
         106             :   use parameter_indices, only:  &
         107             :     nparams, & ! Variable(s)
         108             :     iC1, iC1b, iC1c, &
         109             :     iC2rt, iC2thl, iC2rtthl, iC4, iC_uu_shr, iC_uu_buoy, &
         110             :     iC6rt, iC6rtb, iC6rtc, iC6thl, iC6thlb, iC6thlc, &
         111             :     iC7, iC7b, iC7c, iC8, iC8b, iC10, iC11, iC11b, iC11c, &
         112             :     iC12, iC13, iC14, iC_wp3_pr_turb, iC_wp3_pr_dfsn, iC_wp2_splat, &
         113             :     iC6rt_Lscale0, iC6thl_Lscale0, &
         114             :     iC7_Lscale0, iwpxp_L_thresh, ic_K, ic_K1, inu1, &
         115             :     ic_K2, inu2, ic_K6, inu6, ic_K8, inu8, ic_K9, inu9, &
         116             :     inu10, ic_K_hm, ic_K_hmb, iK_hm_min_coef, inu_hm, &
         117             :     islope_coef_spread_DG_means_w, ipdf_component_stdev_factor_w, &
         118             :     icoef_spread_DG_means_rt, icoef_spread_DG_means_thl, &
         119             :     ibeta, igamma_coef, igamma_coefb, igamma_coefc, ilmin_coef, &
         120             :     iomicron, izeta_vrnce_rat, iupsilon_precip_frac_rat, &
         121             :     ilambda0_stability_coef, imult_coef, itaumin, itaumax, imu, &
         122             :     iLscale_mu_coef, iLscale_pert_coef, ialpha_corr, iSkw_denom_coef, &
         123             :     ic_K10, ic_K10h, ithlp2_rad_coef, ithlp2_rad_cloud_frac_thresh, &
         124             :     iup2_sfc_coef, iSkw_max_mag, iC_invrs_tau_bkgnd, &
         125             :     iC_invrs_tau_sfc, iC_invrs_tau_shear, iC_invrs_tau_N2, &
         126             :     iC_invrs_tau_N2_wp2, iC_invrs_tau_N2_xp2, iC_invrs_tau_N2_wpxp, &
         127             :     iC_invrs_tau_N2_clear_wp3, ialtitude_threshold, irtp2_clip_coef, &
         128             :     iRichardson_num_min, iRichardson_num_max, iwpxp_Ri_exp, &
         129             :     ia3_coef_min, ia_const, iCx_min, iCx_max, ibv_efold, iz_displace
         130             :
         131             :
         132             :   use pdf_parameter_module, only : &
         133             : ! The CLUBB_CAM preprocessor directives are being commented out because this
         134             : ! code is now also used for WRF-CLUBB.
         135             : !#ifdef CLUBB_CAM /* Code for storing pdf_parameter structs in pbuf as array */
         136             :     num_pdf_params, &
         137             : !#endif
         138             :     pdf_parameter, &
         139             :     implicit_coefs_terms
         140             :
         141             :   use sponge_layer_damping, only : &
         142             :     thlm_sponge_damp_settings,    & ! Variable(s)
         143             :     rtm_sponge_damp_settings,     &
         144             :     uv_sponge_damp_settings,      &
         145             :     wp2_sponge_damp_settings,     &
         146             :     wp3_sponge_damp_settings,     &
         147             :     up2_vp2_sponge_damp_settings, &
         148             :     thlm_sponge_damp_profile,     &
         149             :     rtm_sponge_damp_profile,      &
         150             :     uv_sponge_damp_profile,       &
         151             :     wp2_sponge_damp_profile,      &
         152             :     wp3_sponge_damp_profile,      &
         153             :     up2_vp2_sponge_damp_profile
         154             :
         155             :   use stat_file_module, only : &
         156             :     clubb_i, &    ! Used to output multiple columns
         157             :     clubb_j       ! The indices must not exceed nlon (for i) or nlat (for j).
         158             :
         159             :   use stats_rad_zm_module, only : &
         160             :     nvarmax_rad_zm ! Maximum variables allowed
         161             :
         162             :   use stats_rad_zt_module, only : &
         163             :     nvarmax_rad_zt  ! Maximum variables allowed
         164             :
         165             :   use stats_zm_module, only : &
         166             :     nvarmax_zm ! Maximum variables allowed
         167             :
         168             :   use stats_zt_module, only : &
         169             :     nvarmax_zt ! Maximum variables allowed
         170             :
         171             :   use stats_sfc_module, only : &
         172             :     nvarmax_sfc
         173             :
         174             :   use stats_variables, only: &
         175             :     stats_metadata_type
         176             :
         177             :   use grid_class, only: grid ! Type
         178             :
         179             :   use grid_class, only: &
         180             :     ! Interpolate momentum level variables to thermodynamic levels
         181             :     zm2zt_api => zm2zt, &
         182             :
         183             :     ! Interpolate thermodynamic level variables to momentum levels
         184             :     zt2zm_api => zt2zm
         185             :
         186             :   use saturation, only: &
         187             :     ! Used to compute the saturation mixing ratio of liquid water.
         188             :     sat_mixrat_liq_api => sat_mixrat_liq
         189             :
         190             :   use T_in_K_module, only : &
         191             :     ! Calculates absolute temperature from liquid water potential
         192             :     ! temperature.  (Does not include ice.)
         193             :     thlm2T_in_K_api => thlm2T_in_K, &
         194             :
         195             :     ! Calculates liquid water potential temperature from absolute temperature
         196             :     T_in_K2thlm_api => T_in_K2thlm
         197             :
         198             :   use advance_clubb_core_module, only: &
         199             :     check_clubb_settings_api => check_clubb_settings
         200             :
         201             :   use parameters_model, only: &
         202             :     setup_parameters_model_api =>  setup_parameters_model
         203             :
         204             :   use fill_holes, only : &
         205             :     fill_holes_driver_api => fill_holes_driver, &
         206             :     fill_holes_hydromet_api => fill_holes_hydromet, &
         207             :     fill_holes_vertical_api => fill_holes_vertical
         208             :
         209             :   use stats_rad_zm_module, only : &
         210             :     stats_init_rad_zm_api => stats_init_rad_zm
         211             :
         212             :   use stats_rad_zt_module, only : &
         213             :    stats_init_rad_zt_api => stats_init_rad_zt
         214             :
         215             :   use stats_zm_module, only : &
         216             :    stats_init_zm_api => stats_init_zm
         217             :
         218             :   use stats_zt_module, only : &
         219             :    stats_init_zt_api => stats_init_zt
         220             :
         221             :   use stats_sfc_module, only : &
         222             :    stats_init_sfc_api => stats_init_sfc
         223             :
         224             :   use stats_clubb_utilities, only : &
         225             :     stats_begin_timestep_api => stats_begin_timestep
         226             :
         227             :   use model_flags, only: &
         228             :     initialize_clubb_config_flags_type_api => initialize_clubb_config_flags_type, &
         229             :     set_default_clubb_config_flags_api     => set_default_clubb_config_flags, &
         230             :     saturation_bolton, & ! Constant for Bolton approximations of saturation
         231             :     saturation_gfdl,   & ! Constant for the GFDL approximation of saturation
         232             :     saturation_flatau, & ! Constant for Flatau approximations of saturation
         233             :     saturation_lookup    ! Use a lookup table for mixing length
         234             :
         235             :   use corr_varnce_module, only : &
         236             :     setup_corr_varnce_array_api => setup_corr_varnce_array, &
         237             :     init_pdf_hydromet_arrays_api => init_pdf_hydromet_arrays
         238             :
         239             :   use stats_clubb_utilities, only : &
         240             :     stats_accumulate_hydromet_api => stats_accumulate_hydromet, &
         241             :     stats_init_api => stats_init
         242             :
         243             :   use stats_type, only: stats ! Type
         244             :
         245             :   implicit none
         246             :
         247             :   private
         248             :
         249             :   public &
         250             :     ! To Implement CLUBB:
         251             :     set_default_parameters_api, & ! Procedure(s)
         252             :     read_parameters_api, &
         253             :     check_clubb_settings_api, &
         254             :     setup_parameters_model_api, &
         255             :         ! CLUBB can be set more specifically using these flags:
         256             :         iiPDF_ADG1, &
         257             :         iiPDF_new_hybrid, &
         258             :         ipdf_pre_advance_fields, &
         259             :         ipdf_post_advance_fields, &
         260             :         l_use_boussinesq, &
         261             :         saturation_bolton, &
         262             :         saturation_gfdl, &
         263             :         saturation_flatau, &
         264             :         saturation_lookup, &
         265             :         ! The parameters of CLUBB can be retrieved and tuned using these indices:
         266             :         iC1, iC1b, iC1c, &
         267             :         iC2rt, iC2thl, iC2rtthl, iC4, iC_uu_shr, iC_uu_buoy, &
         268             :         iC6rt, iC6rtb, iC6rtc, iC6thl, iC6thlb, iC6thlc, &
         269             :         iC7, iC7b, iC7c, iC8, iC8b, iC10, iC11, iC11b, iC11c, &
         270             :         iC12, iC13, iC14, iC_wp3_pr_turb, iC_wp3_pr_dfsn, iC_wp2_splat, &
         271             :         iC6rt_Lscale0, iC6thl_Lscale0, &
         272             :         iC7_Lscale0, iwpxp_L_thresh, ic_K, ic_K1, inu1, &
         273             :         ic_K2, inu2, ic_K6, inu6, ic_K8, inu8, ic_K9, inu9, &
         274             :         inu10, ic_K_hm, ic_K_hmb, iK_hm_min_coef, inu_hm, &
         275             :         islope_coef_spread_DG_means_w, ipdf_component_stdev_factor_w, &
         276             :         icoef_spread_DG_means_rt, icoef_spread_DG_means_thl, &
         277             :         ibeta, igamma_coef, igamma_coefb, igamma_coefc, ilmin_coef, &
         278             :         iomicron, izeta_vrnce_rat, iupsilon_precip_frac_rat, &
         279             :         ilambda0_stability_coef, imult_coef, itaumin, itaumax, imu, &
         280             :         iLscale_mu_coef, iLscale_pert_coef, ialpha_corr, iSkw_denom_coef, &
         281             :         ic_K10, ic_K10h, ithlp2_rad_coef, ithlp2_rad_cloud_frac_thresh, &
         282             :         iup2_sfc_coef, iSkw_max_mag, iC_invrs_tau_bkgnd, &
         283             :         iC_invrs_tau_sfc, iC_invrs_tau_shear, iC_invrs_tau_N2, &
         284             :         iC_invrs_tau_N2_wp2, iC_invrs_tau_N2_xp2, iC_invrs_tau_N2_wpxp, &
         285             :         iC_invrs_tau_N2_clear_wp3, ialtitude_threshold, irtp2_clip_coef, &
         286             :         iRichardson_num_min, iRichardson_num_max, iwpxp_Ri_exp, &
         287             :         ia3_coef_min, ia_const, iCx_min, iCx_max, ibv_efold, iz_displace
         288             :
         289             :
         290             :
         291             :   public &
         292             :         advance_clubb_core_api, &
         293             :         advance_clubb_core_api_single_col, &
         294             :         advance_clubb_core_api_multi_col, &
         295             :         pdf_parameter, &
         296             :         implicit_coefs_terms, &
         297             :     cleanup_clubb_core_api
         298             :
         299             :   public &
         300             :     ! To Implement SILHS:
         301             :     setup_corr_varnce_array_api, &
         302             :     setup_pdf_parameters_api, &
         303             :     hydromet_pdf_parameter, &
         304             :     init_pdf_hydromet_arrays_api, &
         305             :     ! generate_silhs_sample - SILHS API
         306             :     genrand_init_api, & ! if you are doing restarts)
         307             :     genrand_state, &
         308             :     genrand_srepr, &
         309             :     genrand_intg, &
         310             :     ! To use the results, you will need these variables:
         311             :     hmp2_ip_on_hmm2_ip_slope_type,      & ! Types
         312             :     hmp2_ip_on_hmm2_ip_intrcpt_type, &
         313             :     hm_metadata_type, &
         314             :     sclr_idx_type, &
         315             :     grid, &
         316             :     stats
         317             :
         318             :   public &
         319             :     ! To Interact With CLUBB's Grid:
         320             :     ! For Varying Grids
         321             :     setup_grid_heights_api, &    ! if heights vary with time
         322             :     setup_grid_api
         323             :
         324             :   public &
         325             :     ! To Obtain More Output from CLUBB for Diagnostics:
         326             :     stats_begin_timestep_api, &
         327             :     stats_end_timestep_api, &
         328             :     stats_finalize_api, &
         329             :     stats_init_api
         330             :
         331             :   public :: &
         332             :     calculate_thlp2_rad_api, params_list, &
         333             :     update_xp2_mc_api, sat_mixrat_liq_api
         334             :
         335             :   public :: &
         336             :     ! To Convert Between Common CLUBB-related quantities:
         337             :     lin_interpolate_two_points_api, & ! OR
         338             :     lin_interpolate_on_grid_api, &
         339             :     T_in_K2thlm_api, &
         340             :     thlm2T_in_K_api, &
         341             :     zm2zt_api, &
         342             :     zt2zm_api
         343             :
         344             :   public &
         345             :     ! To Check For and Handle CLUBB's Errors:
         346             :     calculate_spurious_source_api, &
         347             :     clubb_at_least_debug_level_api, &
         348             :     clubb_fatal_error, &
         349             :     clubb_no_error, &
         350             :     fill_holes_driver_api, & ! OR
         351             :     fill_holes_vertical_api, &
         352             :     fill_holes_hydromet_api, &
         353             :     set_clubb_debug_level_api, &
         354             :     vertical_integral_api, &
         355             :     num_hf_draw_points
         356             :
         357             :   public &
         358             :     ! Constants That May be Helpful:
         359             :     cloud_frac_min, &
         360             :     cm3_per_m3, &
         361             :     core_rknd, &
         362             :     Cp, &
         363             :     dp, &
         364             :     em_min, &
         365             :     ep, &
         366             :     fstderr, &
         367             :     fstdout, &
         368             :     grav, &
         369             :     Lf, &
         370             :     Ls, &
         371             :     Lv, &
         372             :     pi_dp, &
         373             :     pi, &
         374             :     radians_per_deg_dp, &
         375             :     Rd, &
         376             :     Rv, &
         377             :     sec_per_day, &
         378             :     sec_per_hr, &
         379             :     sec_per_min, &
         380             :     T_freeze_K, &
         381             :     time_precision, &
         382             :     var_length, &
         383             :     zero_threshold, &
         384             :     zero, &
         385             :     ! Tolerances
         386             :     Nc_tol, &
         387             :     Ng_tol, &
         388             :     Ni_tol, &
         389             :     Nr_tol, &
         390             :     Ns_tol, &
         391             :     rg_tol, &
         392             :     rho_lw, &
         393             :     ri_tol, &
         394             :     rr_tol, &
         395             :     rs_tol, &
         396             :     rt_tol, &
         397             :     thl_tol, &
         398             :     w_tol_sqd
         399             :
         400             :   public &
         401             :     ! Attempt to Not Use the Following:
         402             : ! The CLUBB_CAM preprocessor directives are being commented out because this
         403             : ! code is now also used for WRF-CLUBB.
         404             : !#ifdef CLUBB_CAM /* Code for storing pdf_parameter structs in pbuf as array */
         405             :     pack_pdf_params_api, &
         406             :     unpack_pdf_params_api, &
         407             :     num_pdf_params, &
         408             : !#endif
         409             :     init_pdf_params_api, &
         410             :     init_precip_fracs_api, &
         411             :     precipitation_fractions, &
         412             :     init_pdf_implicit_coefs_terms_api, &
         413             :     adj_low_res_nu_api, &
         414             :     assignment( = ), &
         415             :     clubb_i, &
         416             :     clubb_j, &
         417             :     compute_current_date_api, &
         418             :     gregorian2julian_day_api, &
         419             :     leap_year_api, &
         420             :     nvarmax_rad_zm, &
         421             :     nvarmax_rad_zt, &
         422             :     nvarmax_sfc, &
         423             :     nvarmax_zm, &
         424             :     nvarmax_zt
         425             :
         426             :   public &
         427             :     nparams, &
         428             :     nu_vertical_res_dep, &
         429             :     setup_parameters_api, &
         430             :     stat_nknd, &
         431             :     stat_rknd, &
         432             :     stats_accumulate_hydromet_api, &
         433             :     stats_init_rad_zm_api, &
         434             :     stats_init_rad_zt_api, &
         435             :     stats_init_sfc_api, &
         436             :     stats_init_zm_api, &
         437             :     stats_init_zt_api, &
         438             :     stats_metadata_type
         439             :
         440             :   public &
         441             :     ! Needed to use the configurable CLUBB flags
         442             :     clubb_config_flags_type, &
         443             :     set_default_clubb_config_flags_api, &
         444             :     initialize_clubb_config_flags_type_api, &
         445             :     print_clubb_config_flags_api
         446             :
         447             :   public &
         448             :     thlm_sponge_damp_settings,      & ! Variable(s)
         449             :     rtm_sponge_damp_settings,       &
         450             :     uv_sponge_damp_settings,        &
         451             :     wp2_sponge_damp_settings,       &
         452             :     wp3_sponge_damp_settings,       &
         453             :     up2_vp2_sponge_damp_settings,   &
         454             :     thlm_sponge_damp_profile,       &
         455             :     rtm_sponge_damp_profile,        &
         456             :     uv_sponge_damp_profile,         &
         457             :     wp2_sponge_damp_profile,        &
         458             :     wp3_sponge_damp_profile,        &
         459             :     up2_vp2_sponge_damp_profile,    &
         460             :     initialize_tau_sponge_damp_api, & ! Procedure(s)
         461             :     finalize_tau_sponge_damp_api
         462             :
         463             :   public &
         464             :    copy_single_pdf_params_to_multi, &
         465             :    copy_multi_pdf_params_to_single
         466             :
         467             :   interface setup_pdf_parameters_api
         468             :     module procedure setup_pdf_parameters_api_single_col
         469             :     module procedure setup_pdf_parameters_api_multi_col
         470             :   end interface
         471             :
         472             :   interface advance_clubb_core_api
         473             :     module procedure advance_clubb_core_api_single_col
         474             :     module procedure advance_clubb_core_api_multi_col
         475             :   end interface
         476             :
         477             :   interface setup_grid_api
         478             :     module procedure setup_grid_api_single_col
         479             :     module procedure setup_grid_api_multi_col
         480             :   end interface
         481             :
         482             :   interface setup_parameters_api
         483             :     module procedure setup_parameters_api_single_col
         484             :     module procedure setup_parameters_api_multi_col
         485             :   end interface
         486             :
         487             :   interface adj_low_res_nu_api
         488             :     module procedure adj_low_res_nu_api_single_col
         489             :     module procedure adj_low_res_nu_api_multi_col
         490             :   end interface
         491             :
         492             :   interface setup_grid_heights_api
         493             :     module procedure setup_grid_heights_api_single_col
         494             :     module procedure setup_grid_heights_api_multi_col
         495             :   end interface
         496             :
         497             :   interface update_xp2_mc_api
         498             :     module procedure update_xp2_mc_api_single_col
         499             :     module procedure update_xp2_mc_api_multi_col
         500             :   end interface
         501             :
         502             : contains
         503             :
         504             :   !================================================================================================
         505             :   ! advance_clubb_core - Advances the model one timestep.
         506             :   !================================================================================================
         507             :
         508           0 :   subroutine advance_clubb_core_api_single_col( gr, &       ! intent(in)
         509             :     l_implemented, dt, fcor, sfc_elevation, &               ! intent(in)
         510             :     hydromet_dim, &                                         ! intent(in)
         511           0 :     sclr_dim, sclr_tol, edsclr_dim, sclr_idx, &         ! intent(in)
         512           0 :     thlm_forcing, rtm_forcing, um_forcing, vm_forcing, &    ! intent(in)
         513           0 :     sclrm_forcing, edsclrm_forcing, wprtp_forcing, &        ! intent(in)
         514           0 :     wpthlp_forcing, rtp2_forcing, thlp2_forcing, &          ! intent(in)
         515           0 :     rtpthlp_forcing, wm_zm, wm_zt, &                        ! intent(in)
         516             :     wpthlp_sfc, wprtp_sfc, upwp_sfc, vpwp_sfc, &            ! intent(in)
         517           0 :     wpsclrp_sfc, wpedsclrp_sfc, &                           ! intent(in)
         518             :     upwp_sfc_pert, vpwp_sfc_pert, &                         ! intent(in)
         519           0 :     rtm_ref, thlm_ref, um_ref, vm_ref, ug, vg, &            ! Intent(in)
         520           0 :     p_in_Pa, rho_zm, rho, exner, &                          ! intent(in)
         521           0 :     rho_ds_zm, rho_ds_zt, invrs_rho_ds_zm, &                ! intent(in)
         522           0 :     invrs_rho_ds_zt, thv_ds_zm, thv_ds_zt, &                ! intent(in)
         523           0 :     hydromet, l_mix_rat_hm, &                               ! intent(in)
         524           0 :     rfrzm, radf, &                                          ! intent(in)
         525             : #ifdef CLUBBND_CAM
         526             :     varmu, &                                                ! intent(in)
         527             : #endif
         528           0 :     wphydrometp, wp2hmp, rtphmp_zt, thlphmp_zt, &           ! intent(in)
         529             :     host_dx, host_dy, &                                     ! intent(in)
         530             :     clubb_params, nu_vert_res_dep, lmin, &                  ! intent(in)
         531             :     clubb_config_flags, &                                   ! intent(in)
         532             :     stats_metadata, &                                       ! intent(in)
         533             :     stats_zt, stats_zm, stats_sfc, &                        ! intent(inout)
         534           0 :     um, vm, upwp, vpwp, up2, vp2, up3, vp3, &               ! intent(inout)
         535           0 :     thlm, rtm, wprtp, wpthlp, &                             ! intent(inout)
         536           0 :     wp2, wp3, rtp2, rtp3, thlp2, thlp3, rtpthlp, &          ! intent(inout)
         537           0 :     sclrm,   &
         538             : #ifdef GFDL
         539             :                sclrm_trsport_only,  &  ! h1g, 2010-06-16    ! intent(inout)
         540             : #endif
         541           0 :     sclrp2, sclrp3, sclrprtp, sclrpthlp, &                  ! intent(inout)
         542           0 :     wpsclrp, edsclrm, err_code_api, &                       ! intent(inout)
         543           0 :     rcm, cloud_frac, &                                      ! intent(inout)
         544           0 :     wpthvp, wp2thvp, rtpthvp, thlpthvp, &                   ! intent(inout)
         545           0 :     sclrpthvp, &                                            ! intent(inout)
         546           0 :     wp2rtp, wp2thlp, uprcp, vprcp, rc_coef_zm, wp4, &       ! intent(inout)
         547           0 :     wpup2, wpvp2, wp2up2, wp2vp2, ice_supersat_frac, &      ! intent(inout)
         548           0 :     um_pert, vm_pert, upwp_pert, vpwp_pert, &               ! intent(inout)
         549             :     pdf_params, pdf_params_zm, &                            ! intent(inout)
         550             :     pdf_implicit_coefs_terms, &                             ! intent(inout)
         551             : #ifdef GFDL
         552             :                RH_crit, & !h1g, 2010-06-16                  ! intent(inout)
         553             :                do_liquid_only_in_clubb, &                   ! intent(in)
         554             : #endif
         555           0 :     Kh_zm, Kh_zt, &                                         ! intent(out)
         556             : #ifdef CLUBB_CAM
         557           0 :     qclvar, &                                               ! intent(out)
         558             : #endif
         559           0 :     thlprcp, wprcp, w_up_in_cloud, w_down_in_cloud, &       ! intent(out)
         560           0 :     cloudy_updraft_frac, cloudy_downdraft_frac, &           ! intent(out)
         561           0 :     rcm_in_layer, cloud_cover, invrs_tau_zm )               ! intent(out)
         562             :
         563             :     use advance_clubb_core_module, only : advance_clubb_core
         564             :
         565             :     use pdf_parameter_module, only: &
         566             :         implicit_coefs_terms    ! Variable Type(s)
         567             :
         568             :     use model_flags, only: &
         569             :         clubb_config_flags_type
         570             :
         571             :     use stats_zm_module, only: &
         572             :         stats_init_zm ! Procedure(s)
         573             :
         574             :     use stats_zt_module, only: &
         575             :         stats_init_zt
         576             :
         577             :     use stats_sfc_module, only: &
         578             :         stats_init_sfc ! Procedure(s)
         579             :
         580             :     use array_index, only: &
         581             :       sclr_idx_type
         582             :
         583             :     implicit none
         584             :
         585             :     !------------------------- Input Variables -------------------------
         586             :     type(grid), target, intent(in) :: gr
         587             :
         588             :     logical, intent(in) ::  &
         589             :       l_implemented ! Is this part of a larger host model (T/F) ?
         590             :
         591             :     real( kind = core_rknd ), intent(in) ::  &
         592             :       dt  ! Current timestep duration    [s]
         593             :
         594             :     real( kind = core_rknd ), intent(in) ::  &
         595             :       fcor,  &          ! Coriolis forcing             [s^-1]
         596             :       sfc_elevation     ! Elevation of ground level    [m AMSL]
         597             :
         598             :     integer, intent(in) :: &
         599             :       hydromet_dim,   & ! Total number of hydrometeor species       [#]
         600             :       sclr_dim,       & ! Number of passive scalars                 [#]
         601             :       edsclr_dim        ! Number of eddy-diff. passive scalars      [#]
         602             :
         603             :     real( kind = core_rknd ), intent(in), dimension(sclr_dim) :: &
         604             :       sclr_tol          ! Threshold(s) on the passive scalars  [units vary]
         605             :
         606             :     type (sclr_idx_type), intent(in) :: &
         607             :       sclr_idx
         608             :
         609             :     ! Input Variables
         610             :     real( kind = core_rknd ), intent(in), dimension(gr%nz) ::  &
         611             :       thlm_forcing,    & ! theta_l forcing (thermodynamic levels)    [K/s]
         612             :       rtm_forcing,     & ! r_t forcing (thermodynamic levels)        [(kg/kg)/s]
         613             :       um_forcing,      & ! u wind forcing (thermodynamic levels)     [m/s/s]
         614             :       vm_forcing,      & ! v wind forcing (thermodynamic levels)     [m/s/s]
         615             :       wprtp_forcing,   & ! <w'r_t'> forcing (momentum levels)    [m*K/s^2]
         616             :       wpthlp_forcing,  & ! <w'th_l'> forcing (momentum levels)   [m*(kg/kg)/s^2]
         617             :       rtp2_forcing,    & ! <r_t'^2> forcing (momentum levels)    [(kg/kg)^2/s]
         618             :       thlp2_forcing,   & ! <th_l'^2> forcing (momentum levels)   [K^2/s]
         619             :       rtpthlp_forcing, & ! <r_t'th_l'> forcing (momentum levels) [K*(kg/kg)/s]
         620             :       wm_zm,           & ! w mean wind component on momentum levels  [m/s]
         621             :       wm_zt,           & ! w mean wind component on thermo. levels   [m/s]
         622             :       rho_zm,          & ! Air density on momentum levels            [kg/m^3]
         623             :       rho,             & ! Air density on thermodynamic levels       [kg/m^3]
         624             :       rho_ds_zm,       & ! Dry, static density on momentum levels    [kg/m^3]
         625             :       rho_ds_zt,       & ! Dry, static density on thermo. levels     [kg/m^3]
         626             :       invrs_rho_ds_zm, & ! Inv. dry, static density @ momentum levs. [m^3/kg]
         627             :       invrs_rho_ds_zt, & ! Inv. dry, static density @ thermo. levs.  [m^3/kg]
         628             :       thv_ds_zm,       & ! Dry, base-state theta_v on momentum levs. [K]
         629             :       thv_ds_zt,       & ! Dry, base-state theta_v on thermo. levs.  [K]
         630             :       rfrzm              ! Total ice-phase water mixing ratio        [kg/kg]
         631             :
         632             :     real( kind = core_rknd ), dimension(gr%nz,hydromet_dim), intent(in) :: &
         633             :       hydromet           ! Collection of hydrometeors                [units vary]
         634             :
         635             :     logical, dimension(hydromet_dim), intent(in) :: &
         636             :       l_mix_rat_hm   ! if true, then the quantity is a hydrometeor mixing ratio
         637             :
         638             :     real( kind = core_rknd ), dimension(gr%nz), intent(in) :: &
         639             :       radf          ! Buoyancy production at the CL top due to LW radiative cooling [m^2/s^3]
         640             :
         641             : #ifdef CLUBBND_CAM
         642             :     real( kind = core_rknd ), intent(in) :: &
         643             :       varmu
         644             : #endif
         645             :
         646             :     real( kind = core_rknd ), dimension(gr%nz, hydromet_dim), intent(in) :: &
         647             :       wphydrometp, & ! Covariance of w and a hydrometeor   [(m/s) <hm units>]
         648             :       wp2hmp,      & ! Third moment: <w'^2> * <hydro.'>    [(m/s)^2 <hm units>]
         649             :       rtphmp_zt,   & ! Covariance of rt and a hydrometeor  [(kg/kg) <hm units>]
         650             :       thlphmp_zt     ! Covariance of thl and a hydrometeor [K <hm units>]
         651             :
         652             :     real( kind = core_rknd ), intent(in) ::  &
         653             :       wpthlp_sfc,   & ! w' theta_l' at surface   [(m K)/s]
         654             :       wprtp_sfc,    & ! w' r_t' at surface       [(kg m)/( kg s)]
         655             :       upwp_sfc,     & ! u'w' at surface          [m^2/s^2]
         656             :       vpwp_sfc        ! v'w' at surface          [m^2/s^2]
         657             :
         658             :     ! Passive scalar variables
         659             :     real( kind = core_rknd ), intent(in), dimension(gr%nz,sclr_dim) :: &
         660             :       sclrm_forcing    ! Passive scalar forcing         [{units vary}/s]
         661             :
         662             :     real( kind = core_rknd ), intent(in), dimension(sclr_dim) ::  &
         663             :       wpsclrp_sfc      ! Scalar flux at surface         [{units vary} m/s]
         664             :
         665             :     real( kind = core_rknd ), intent(in) :: &
         666             :       upwp_sfc_pert, & ! pertubed u'w' at surface    [m^2/s^2]
         667             :       vpwp_sfc_pert    ! pertubed v'w' at surface    [m^2/s^2]
         668             :
         669             :     ! Eddy passive scalar variables
         670             :     real( kind = core_rknd ), intent(in), dimension(gr%nz,edsclr_dim) :: &
         671             :       edsclrm_forcing  ! Eddy passive scalar forcing    [{units vary}/s]
         672             :
         673             :     real( kind = core_rknd ), intent(in), dimension(edsclr_dim) ::  &
         674             :       wpedsclrp_sfc    ! Eddy-Scalar flux at surface    [{units vary} m/s]
         675             :
         676             :     ! Reference profiles (used for nudging, sponge damping, and Coriolis effect)
         677             :     real( kind = core_rknd ), dimension(gr%nz), intent(in) ::  &
         678             :       rtm_ref,  & ! Initial total water mixing ratio             [kg/kg]
         679             :       thlm_ref, & ! Initial liquid water potential temperature   [K]
         680             :       um_ref,   & ! Initial u wind; Michael Falk                 [m/s]
         681             :       vm_ref,   & ! Initial v wind; Michael Falk                 [m/s]
         682             :       ug,       & ! u geostrophic wind                           [m/s]
         683             :       vg          ! v geostrophic wind                           [m/s]
         684             :
         685             :     ! Host model horizontal grid spacing, if part of host model.
         686             :     real( kind = core_rknd ), intent(in) :: &
         687             :       host_dx,  & ! East-West horizontal grid spacing     [m]
         688             :       host_dy     ! North-South horizontal grid spacing   [m]
         689             :
         690             :     real( kind = core_rknd ), dimension(nparams), intent(in) :: &
         691             :       clubb_params    ! Array of CLUBB's tunable parameters    [units vary]
         692             :
         693             :     type(nu_vertical_res_dep), intent(in) :: &
         694             :       nu_vert_res_dep    ! Vertical resolution dependent nu values
         695             :
         696             :     real( kind = core_rknd ), intent(in) :: &
         697             :       lmin    ! Min. value for the length scale    [m]
         698             :
         699             :     type( clubb_config_flags_type ), intent(in) :: &
         700             :       clubb_config_flags ! Derived type holding all configurable CLUBB flags
         701             :
         702             :     type (stats_metadata_type), intent(in) :: &
         703             :       stats_metadata
         704             :
         705             :     !------------------------- Input/Output Variables -------------------------
         706             :     type(stats), target, intent(inout) :: &
         707             :       stats_zt, &
         708             :       stats_zm, &
         709             :       stats_sfc
         710             :
         711             :     ! These are prognostic or are planned to be in the future
         712             :     real( kind = core_rknd ), intent(inout), dimension(gr%nz) ::  &
         713             :       um,      & ! u mean wind component (thermodynamic levels)   [m/s]
         714             :       upwp,    & ! u'w' (momentum levels)                         [m^2/s^2]
         715             :       vm,      & ! v mean wind component (thermodynamic levels)   [m/s]
         716             :       vpwp,    & ! v'w' (momentum levels)                         [m^2/s^2]
         717             :       up2,     & ! u'^2 (momentum levels)                         [m^2/s^2]
         718             :       vp2,     & ! v'^2 (momentum levels)                         [m^2/s^2]
         719             :       up3,     & ! u'^3 (thermodynamic levels)                    [m^3/s^3]
         720             :       vp3,     & ! v'^3 (thermodynamic levels)                    [m^3/s^3]
         721             :       rtm,     & ! total water mixing ratio, r_t (thermo. levels) [kg/kg]
         722             :       wprtp,   & ! w' r_t' (momentum levels)                      [(kg/kg) m/s]
         723             :       thlm,    & ! liq. water pot. temp., th_l (thermo. levels)   [K]
         724             :       wpthlp,  & ! w' th_l' (momentum levels)                     [(m/s) K]
         725             :       rtp2,    & ! r_t'^2 (momentum levels)                       [(kg/kg)^2]
         726             :       rtp3,    & ! r_t'^3 (thermodynamic levels)                  [(kg/kg)^3]
         727             :       thlp2,   & ! th_l'^2 (momentum levels)                      [K^2]
         728             :       thlp3,   & ! th_l'^3 (thermodynamic levels)                 [K^3]
         729             :       rtpthlp, & ! r_t' th_l' (momentum levels)                   [(kg/kg) K]
         730             :       wp2,     & ! w'^2 (momentum levels)                         [m^2/s^2]
         731             :       wp3        ! w'^3 (thermodynamic levels)                    [m^3/s^3]
         732             :
         733             :     ! Passive scalar variables
         734             :     real( kind = core_rknd ), intent(inout), dimension(gr%nz,sclr_dim) :: &
         735             :       sclrm,     & ! Passive scalar mean (thermo. levels) [units vary]
         736             :       wpsclrp,   & ! w'sclr' (momentum levels)            [{units vary} m/s]
         737             :       sclrp2,    & ! sclr'^2 (momentum levels)            [{units vary}^2]
         738             :       sclrp3,    & ! sclr'^3 (thermodynamic levels)       [{units vary}^3]
         739             :       sclrprtp,  & ! sclr'rt' (momentum levels)           [{units vary} (kg/kg)]
         740             :       sclrpthlp    ! sclr'thl' (momentum levels)          [{units vary} K]
         741             :
         742             :     real( kind = core_rknd ), intent(inout), dimension(gr%nz) ::  &
         743             :       p_in_Pa, & ! Air pressure (thermodynamic levels)       [Pa]
         744             :       exner      ! Exner function (thermodynamic levels)     [-]
         745             :
         746             :     real( kind = core_rknd ), intent(inout), dimension(gr%nz) ::  &
         747             :       rcm,        & ! cloud water mixing ratio, r_c (thermo. levels) [kg/kg]
         748             :       cloud_frac, & ! cloud fraction (thermodynamic levels)          [-]
         749             :       wpthvp,     & ! < w' th_v' > (momentum levels)                 [kg/kg K]
         750             :       wp2thvp,    & ! < w'^2 th_v' > (thermodynamic levels)          [m^2/s^2 K]
         751             :       rtpthvp,    & ! < r_t' th_v' > (momentum levels)               [kg/kg K]
         752             :       thlpthvp      ! < th_l' th_v' > (momentum levels)              [K^2]
         753             :
         754             :     real( kind = core_rknd ), intent(inout), dimension(gr%nz,sclr_dim) :: &
         755             :       sclrpthvp     ! < sclr' th_v' > (momentum levels)   [units vary]
         756             :
         757             :     real( kind = core_rknd ), intent(inout), dimension(gr%nz) ::  &
         758             :       wp2rtp,            & ! w'^2 rt' (thermodynamic levels)      [m^2/s^2 kg/kg]
         759             :       wp2thlp,           & ! w'^2 thl' (thermodynamic levels)     [m^2/s^2 K]
         760             :       uprcp,             & ! < u' r_c' > (momentum levels)        [(m/s)(kg/kg)]
         761             :       vprcp,             & ! < v' r_c' > (momentum levels)        [(m/s)(kg/kg)]
         762             :       rc_coef_zm,        & ! Coef of X'r_c' in Eq. (34) (m-levs.) [K/(kg/kg)]
         763             :       wp4,               & ! w'^4 (momentum levels)               [m^4/s^4]
         764             :       wpup2,             & ! w'u'^2 (thermodynamic levels)        [m^3/s^3]
         765             :       wpvp2,             & ! w'v'^2 (thermodynamic levels)        [m^3/s^3]
         766             :       wp2up2,            & ! w'^2 u'^2 (momentum levels)          [m^4/s^4]
         767             :       wp2vp2,            & ! w'^2 v'^2 (momentum levels)          [m^4/s^4]
         768             :       ice_supersat_frac    ! ice cloud fraction (thermo. levels)  [-]
         769             :
         770             :     ! Variables used to track perturbed version of winds.
         771             :     real( kind = core_rknd ), intent(inout), dimension(gr%nz) :: &
         772             :       um_pert,   & ! perturbed <u>       [m/s]
         773             :       vm_pert,   & ! perturbed <v>       [m/s]
         774             :       upwp_pert, & ! perturbed <u'w'>    [m^2/s^2]
         775             :       vpwp_pert    ! perturbed <v'w'>    [m^2/s^2]
         776             :
         777             :     type(pdf_parameter), intent(inout) :: &
         778             :       pdf_params,    & ! PDF parameters (thermodynamic levels)    [units vary]
         779             :       pdf_params_zm    ! PDF parameters on momentum levels        [units vary]
         780             :
         781             :     type(implicit_coefs_terms), intent(inout) :: &
         782             :       pdf_implicit_coefs_terms    ! Implicit coefs / explicit terms [units vary]
         783             :
         784             : #ifdef GFDL
         785             :     real( kind = core_rknd ), intent(inout), dimension(gr%nz,sclr_dim) :: &  ! h1g, 2010-06-16
         786             :       sclrm_trsport_only  ! Passive scalar concentration due to pure transport [{units vary}/s]
         787             : #endif
         788             :
         789             :       real( kind = core_rknd ), intent(inout), dimension(gr%nz,edsclr_dim) :: &
         790             :       edsclrm   ! Eddy passive scalar mean (thermo. levels)   [units vary]
         791             :
         792             :     !------------------------- Output Variables -------------------------
         793             :     real( kind = core_rknd ), intent(out), dimension(gr%nz) ::  &
         794             :       rcm_in_layer, & ! rcm in cloud layer                              [kg/kg]
         795             :       cloud_cover     ! cloud cover                                     [-]
         796             :
         797             :     ! Variables that need to be output for use in host models
         798             :     real( kind = core_rknd ), intent(out), dimension(gr%nz) ::  &
         799             :       wprcp,                 & ! w'r_c' (momentum levels)              [(kg/kg) m/s]
         800             :       w_up_in_cloud,         & ! Average cloudy updraft velocity       [m/s]
         801             :       w_down_in_cloud,       & ! Average cloudy downdraft velocity     [m/s]
         802             :       cloudy_updraft_frac,   & ! cloudy updraft fraction               [-]
         803             :       cloudy_downdraft_frac, & ! cloudy downdraft fraction             [-]
         804             :       invrs_tau_zm             ! One divided by tau on zm levels       [1/s]
         805             :
         806             :     real( kind = core_rknd ), dimension(gr%nz), intent(out) :: &
         807             :       Kh_zt, & ! Eddy diffusivity coefficient on thermodynamic levels   [m^2/s]
         808             :       Kh_zm    ! Eddy diffusivity coefficient on momentum levels        [m^2/s]
         809             :
         810             : #ifdef CLUBB_CAM
         811             :     real( kind = core_rknd), intent(out), dimension(gr%nz) :: &
         812             :       qclvar        ! cloud water variance
         813             : #endif
         814             :
         815             :     real( kind = core_rknd ), dimension(gr%nz), intent(out) :: &
         816             :       thlprcp    ! thl'rc'              [K kg/kg]
         817             :
         818             :     !!! Output Variable
         819             :     integer, intent(inout) :: err_code_api ! Diagnostic, for if some calculation goes amiss.
         820             :
         821             : #ifdef GFDL
         822             :     ! hlg, 2010-06-16
         823             :     real( kind = core_rknd ), intent(inOUT), dimension(gr%nz, min(1,sclr_dim) , 2) :: &
         824             :       RH_crit  ! critical relative humidity for droplet and ice nucleation
         825             :     logical, intent(in)                 ::  do_liquid_only_in_clubb
         826             : #endif
         827             :
         828             :
         829             :     !------------------------- Local Variables -------------------------
         830             :     type(stats), dimension(1) :: &
         831           0 :       stats_zt_col, &
         832           0 :       stats_zm_col, &
         833           0 :       stats_sfc_col
         834             :
         835             :     real( kind = core_rknd ), dimension(1) ::  &
         836             :       fcor_col,  &          ! Coriolis forcing             [s^-1]
         837             :       sfc_elevation_col     ! Elevation of ground level    [m AMSL]
         838             :
         839             :     ! Input Variables
         840             :     real( kind = core_rknd ), dimension(1,gr%nz) ::  &
         841           0 :       thlm_forcing_col,    & ! theta_l forcing (thermodynamic levels)    [K/s]
         842           0 :       rtm_forcing_col,     & ! r_t forcing (thermodynamic levels)        [(kg/kg)/s]
         843           0 :       um_forcing_col,      & ! u wind forcing (thermodynamic levels)     [m/s/s]
         844           0 :       vm_forcing_col,      & ! v wind forcing (thermodynamic levels)     [m/s/s]
         845           0 :       wprtp_forcing_col,   & ! <w'r_t'> forcing (momentum levels)    [m*K/s^2]
         846           0 :       wpthlp_forcing_col,  & ! <w'th_l'> forcing (momentum levels)   [m*(kg/kg)/s^2]
         847           0 :       rtp2_forcing_col,    & ! <r_t'^2> forcing (momentum levels)    [(kg/kg)^2/s]
         848           0 :       thlp2_forcing_col,   & ! <th_l'^2> forcing (momentum levels)   [K^2/s]
         849           0 :       rtpthlp_forcing_col, & ! <r_t'th_l'> forcing (momentum levels) [K*(kg/kg)/s]
         850           0 :       wm_zm_col,           & ! w mean wind component on momentum levels  [m/s]
         851           0 :       wm_zt_col,           & ! w mean wind component on thermo. levels   [m/s]
         852           0 :       rho_zm_col,          & ! Air density on momentum levels            [kg/m^3]
         853           0 :       rho_col,             & ! Air density on thermodynamic levels       [kg/m^3]
         854           0 :       rho_ds_zm_col,       & ! Dry, static density on momentum levels    [kg/m^3]
         855           0 :       rho_ds_zt_col,       & ! Dry, static density on thermo. levels     [kg/m^3]
         856           0 :       invrs_rho_ds_zm_col, & ! Inv. dry, static density @ momentum levs. [m^3/kg]
         857           0 :       invrs_rho_ds_zt_col, & ! Inv. dry, static density @ thermo. levs.  [m^3/kg]
         858           0 :       thv_ds_zm_col,       & ! Dry, base-state theta_v on momentum levs. [K]
         859           0 :       thv_ds_zt_col,       & ! Dry, base-state theta_v on thermo. levs.  [K]
         860           0 :       rfrzm_col              ! Total ice-phase water mixing ratio        [kg/kg]
         861             :
         862             :     real( kind = core_rknd ), dimension(1,gr%nz,hydromet_dim) :: &
         863           0 :       hydromet_col           ! Collection of hydrometeors                [units vary]
         864             :
         865             :     real( kind = core_rknd ), dimension(1,gr%nz) :: &
         866           0 :       radf_col          ! Buoyancy production at the CL top due to LW radiative cooling [m^2/s^3]
         867             :
         868             : #ifdef CLUBBND_CAM
         869             :     real( kind = core_rknd ), dimension(1) :: &
         870             :       varmu_col
         871             : #endif
         872             :
         873             :     real( kind = core_rknd ), dimension(1,gr%nz, hydromet_dim) :: &
         874           0 :       wphydrometp_col, & ! Covariance of w and a hydrometeor   [(m/s) <hm units>]
         875           0 :       wp2hmp_col,      & ! Third moment: <w'^2> * <hydro.'>    [(m/s)^2 <hm units>]
         876           0 :       rtphmp_zt_col,   & ! Covariance of rt and a hydrometeor  [(kg/kg) <hm units>]
         877           0 :       thlphmp_zt_col     ! Covariance of thl and a hydrometeor [K <hm units>]
         878             :
         879             :     real( kind = core_rknd ), dimension(1) ::  &
         880             :       wpthlp_sfc_col,   & ! w' theta_l' at surface   [(m K)/s]
         881             :       wprtp_sfc_col,    & ! w' r_t' at surface       [(kg m)/( kg s)]
         882             :       upwp_sfc_col,     & ! u'w' at surface          [m^2/s^2]
         883             :       vpwp_sfc_col        ! v'w' at surface          [m^2/s^2]
         884             :
         885             :     ! Passive scalar variables
         886             :     real( kind = core_rknd ), dimension(1,gr%nz,sclr_dim) :: &
         887           0 :       sclrm_forcing_col    ! Passive scalar forcing         [{units vary}/s]
         888             :
         889             :     real( kind = core_rknd ), dimension(1,sclr_dim) ::  &
         890           0 :       wpsclrp_sfc_col      ! Scalar flux at surface         [{units vary} m/s]
         891             :
         892             :     ! Eddy passive scalar variables
         893             :     real( kind = core_rknd ), dimension(1,gr%nz,edsclr_dim) :: &
         894           0 :       edsclrm_forcing_col  ! Eddy passive scalar forcing    [{units vary}/s]
         895             :
         896             :     real( kind = core_rknd ), dimension(1) :: &
         897             :       upwp_sfc_pert_col, & ! pertubed u'w' at surface    [m^2/s^2]
         898             :       vpwp_sfc_pert_col    ! pertubed v'w' at surface    [m^2/s^2]
         899             :
         900             :     real( kind = core_rknd ), dimension(1,edsclr_dim) ::  &
         901           0 :       wpedsclrp_sfc_col    ! Eddy-Scalar flux at surface    [{units vary} m/s]
         902             :
         903             :     ! Reference profiles (used for nudging, sponge damping, and Coriolis effect)
         904             :     real( kind = core_rknd ), dimension(1,gr%nz) ::  &
         905           0 :       rtm_ref_col,  & ! Initial total water mixing ratio             [kg/kg]
         906           0 :       thlm_ref_col, & ! Initial liquid water potential temperature   [K]
         907           0 :       um_ref_col,   & ! Initial u wind; Michael Falk                 [m/s]
         908           0 :       vm_ref_col,   & ! Initial v wind; Michael Falk                 [m/s]
         909           0 :       ug_col,       & ! u geostrophic wind                           [m/s]
         910           0 :       vg_col          ! v geostrophic wind                           [m/s]
         911             :
         912             :     ! Host model horizontal grid spacing, if part of host model.
         913             :     real( kind = core_rknd ), dimension(1) :: &
         914             :       host_dx_col,  & ! East-West horizontal grid spacing     [m]
         915             :       host_dy_col     ! North-South horizontal grid spacing   [m]
         916             :
         917             :     real( kind = core_rknd ), dimension(1,nparams) :: &
         918             :       clubb_params_col    ! Array of CLUBB's tunable parameters    [units vary]
         919             :
         920             :     ! These are prognostic or are planned to be in the future
         921             :     real( kind = core_rknd ), dimension(1,gr%nz) ::  &
         922           0 :       um_col,      & ! u mean wind component (thermodynamic levels)   [m/s]
         923           0 :       upwp_col,    & ! u'w' (momentum levels)                         [m^2/s^2]
         924           0 :       vm_col,      & ! v mean wind component (thermodynamic levels)   [m/s]
         925           0 :       vpwp_col,    & ! v'w' (momentum levels)                         [m^2/s^2]
         926           0 :       up2_col,     & ! u'^2 (momentum levels)                         [m^2/s^2]
         927           0 :       vp2_col,     & ! v'^2 (momentum levels)                         [m^2/s^2]
         928           0 :       up3_col,     & ! u'^3 (thermodynamic levels)                    [m^3/s^3]
         929           0 :       vp3_col,     & ! v'^3 (thermodynamic levels)                    [m^3/s^3]
         930           0 :       rtm_col,     & ! total water mixing ratio, r_t (thermo. levels) [kg/kg]
         931           0 :       wprtp_col,   & ! w' r_t' (momentum levels)                      [(kg/kg) m/s]
         932           0 :       thlm_col,    & ! liq. water pot. temp., th_l (thermo. levels)   [K]
         933           0 :       wpthlp_col,  & ! w' th_l' (momentum levels)                     [(m/s) K]
         934           0 :       rtp2_col,    & ! r_t'^2 (momentum levels)                       [(kg/kg)^2]
         935           0 :       rtp3_col,    & ! r_t'^3 (thermodynamic levels)                  [(kg/kg)^3]
         936           0 :       thlp2_col,   & ! th_l'^2 (momentum levels)                      [K^2]
         937           0 :       thlp3_col,   & ! th_l'^3 (thermodynamic levels)                 [K^3]
         938           0 :       rtpthlp_col, & ! r_t' th_l' (momentum levels)                   [(kg/kg) K]
         939           0 :       wp2_col,     & ! w'^2 (momentum levels)                         [m^2/s^2]
         940           0 :       wp3_col        ! w'^3 (thermodynamic levels)                    [m^3/s^3]
         941             :
         942             :     ! Passive scalar variables
         943             :     real( kind = core_rknd ), dimension(1,gr%nz,sclr_dim) :: &
         944           0 :       sclrm_col,     & ! Passive scalar mean (thermo. levels) [units vary]
         945           0 :       wpsclrp_col,   & ! w'sclr' (momentum levels)            [{units vary} m/s]
         946           0 :       sclrp2_col,    & ! sclr'^2 (momentum levels)            [{units vary}^2]
         947           0 :       sclrp3_col,    & ! sclr'^3 (thermodynamic levels)       [{units vary}^3]
         948           0 :       sclrprtp_col,  & ! sclr'rt' (momentum levels)           [{units vary} (kg/kg)]
         949           0 :       sclrpthlp_col    ! sclr'thl' (momentum levels)          [{units vary} K]
         950             :
         951             :     real( kind = core_rknd ), dimension(1,gr%nz) ::  &
         952           0 :       p_in_Pa_col, & ! Air pressure (thermodynamic levels)       [Pa]
         953           0 :       exner_col      ! Exner function (thermodynamic levels)     [-]
         954             :
         955             :     real( kind = core_rknd ), dimension(1,gr%nz) ::  &
         956           0 :       rcm_col,        & ! cloud water mixing ratio, r_c (thermo. levels) [kg/kg]
         957           0 :       cloud_frac_col, & ! cloud fraction (thermodynamic levels)          [-]
         958           0 :       wpthvp_col,     & ! < w' th_v' > (momentum levels)                 [kg/kg K]
         959           0 :       wp2thvp_col,    & ! < w'^2 th_v' > (thermodynamic levels)          [m^2/s^2 K]
         960           0 :       rtpthvp_col,    & ! < r_t' th_v' > (momentum levels)               [kg/kg K]
         961           0 :       thlpthvp_col      ! < th_l' th_v' > (momentum levels)              [K^2]
         962             :
         963             :     real( kind = core_rknd ), dimension(1,gr%nz,sclr_dim) :: &
         964           0 :       sclrpthvp_col     ! < sclr' th_v' > (momentum levels)   [units vary]
         965             :
         966             :     real( kind = core_rknd ), dimension(1,gr%nz) ::  &
         967           0 :       wp2rtp_col,            & ! w'^2 rt' (thermodynamic levels)      [m^2/s^2 kg/kg]
         968           0 :       wp2thlp_col,           & ! w'^2 thl' (thermodynamic levels)     [m^2/s^2 K]
         969           0 :       uprcp_col,             & ! < u' r_c' > (momentum levels)        [(m/s)(kg/kg)]
         970           0 :       vprcp_col,             & ! < v' r_c' > (momentum levels)        [(m/s)(kg/kg)]
         971           0 :       rc_coef_zm_col,        & ! Coef of X'r_c' in Eq. (34) (m-levs.) [K/(kg/kg)]
         972           0 :       wp4_col,               & ! w'^4 (momentum levels)               [m^4/s^4]
         973           0 :       wpup2_col,             & ! w'u'^2 (thermodynamic levels)        [m^3/s^3]
         974           0 :       wpvp2_col,             & ! w'v'^2 (thermodynamic levels)        [m^3/s^3]
         975           0 :       wp2up2_col,            & ! w'^2 u'^2 (momentum levels)          [m^4/s^4]
         976           0 :       wp2vp2_col,            & ! w'^2 v'^2 (momentum levels)          [m^4/s^4]
         977           0 :       ice_supersat_frac_col    ! ice cloud fraction (thermo. levels)  [-]
         978             :
         979             :     ! Variables used to track perturbed version of winds.
         980             :     real( kind = core_rknd ), dimension(1,gr%nz) :: &
         981           0 :       um_pert_col,   & ! perturbed <u>       [m/s]
         982           0 :       vm_pert_col,   & ! perturbed <v>       [m/s]
         983           0 :       upwp_pert_col, & ! perturbed <u'w'>    [m^2/s^2]
         984           0 :       vpwp_pert_col    ! perturbed <v'w'>    [m^2/s^2]
         985             :
         986             : #ifdef GFDL
         987             :     real( kind = core_rknd ), dimension(1,gr%nz,sclr_dim) :: &  ! h1g, 2010-06-16
         988             :       sclrm_trsport_only_col  ! Passive scalar concentration due to pure transport [{units vary}/s]
         989             : #endif
         990             :
         991             :       real( kind = core_rknd ), dimension(1,gr%nz,edsclr_dim) :: &
         992           0 :       edsclrm_col   ! Eddy passive scalar mean (thermo. levels)   [units vary]
         993             :
         994             :     real( kind = core_rknd ), dimension(1,gr%nz) ::  &
         995           0 :       rcm_in_layer_col, & ! rcm in cloud layer                              [kg/kg]
         996           0 :       cloud_cover_col     ! cloud cover                                     [-]
         997             :
         998             :     ! Variables that need to be output for use in host models
         999             :     real( kind = core_rknd ), dimension(1,gr%nz) ::  &
        1000           0 :       wprcp_col,                 & ! w'r_c' (momentum levels)              [(kg/kg) m/s]
        1001           0 :       w_up_in_cloud_col,         & ! Average cloudy updraft velocity       [m/s]
        1002           0 :       w_down_in_cloud_col,       & ! Average cloudy downdraft velocity     [m/s]
        1003           0 :       cloudy_updraft_frac_col,   & ! cloudy updraft fraction               [-]
        1004           0 :       cloudy_downdraft_frac_col, & ! cloudy downdraft fraction             [-]
        1005           0 :       invrs_tau_zm_col             ! One divided by tau on zm levels       [1/s]
        1006             :
        1007             :     real( kind = core_rknd ), dimension(1,gr%nz) :: &
        1008           0 :       Kh_zt_col, & ! Eddy diffusivity coefficient on thermodynamic levels   [m^2/s]
        1009           0 :       Kh_zm_col    ! Eddy diffusivity coefficient on momentum levels        [m^2/s]
        1010             :
        1011             : #ifdef CLUBB_CAM
        1012             :     real( kind = core_rknd), dimension(1,gr%nz) :: &
        1013           0 :       qclvar_col        ! cloud water variance
        1014             : #endif
        1015             :
        1016             :     real( kind = core_rknd ), dimension(1,gr%nz) :: &
        1017           0 :       thlprcp_col    ! thl'rc'              [K kg/kg]
        1018             :
        1019             : #ifdef GFDL
        1020             :     ! hlg, 2010-06-16
        1021             :     real( kind = core_rknd ), dimension(1,gr%nz, min(1,sclr_dim) , 2) :: &
        1022             :       RH_crit_col  ! critical relative humidity for droplet and ice nucleation
        1023             :     logical, intent(in)                 ::  do_liquid_only_in_clubb
        1024             : #endif
        1025             :
        1026             :     integer :: i
        1027             :
        1028             :     !------------------------- Begin Code -------------------------
        1029             :
        1030           0 :     fcor_col(1) = fcor
        1031           0 :     sfc_elevation_col(1) = sfc_elevation
        1032             :
        1033           0 :     thlm_forcing_col(1,:) = thlm_forcing
        1034           0 :     rtm_forcing_col(1,:) = rtm_forcing
        1035           0 :     um_forcing_col(1,:) = um_forcing
        1036           0 :     vm_forcing_col(1,:) = vm_forcing
        1037           0 :     sclrm_forcing_col(1,:,:) = sclrm_forcing
        1038           0 :     edsclrm_forcing_col(1,:,:) = edsclrm_forcing
        1039           0 :     wprtp_forcing_col(1,:) = wprtp_forcing
        1040           0 :     wpthlp_forcing_col(1,:) = wpthlp_forcing
        1041           0 :     rtp2_forcing_col(1,:) = rtp2_forcing
        1042           0 :     thlp2_forcing_col(1,:) = thlp2_forcing
        1043           0 :     rtpthlp_forcing_col(1,:) = rtpthlp_forcing
        1044           0 :     wm_zm_col(1,:) = wm_zm
        1045           0 :     wm_zt_col(1,:) = wm_zt
        1046             :
        1047           0 :     wpthlp_sfc_col(1) = wpthlp_sfc
        1048           0 :     wprtp_sfc_col(1) = wprtp_sfc
        1049           0 :     upwp_sfc_col(1) = upwp_sfc
        1050           0 :     vpwp_sfc_col(1) = vpwp_sfc
        1051             :
        1052           0 :     wpsclrp_sfc_col(1,:) = wpsclrp_sfc
        1053           0 :     wpedsclrp_sfc_col(1,:) = wpedsclrp_sfc
        1054             :
        1055           0 :     upwp_sfc_pert_col(1) = upwp_sfc_pert
        1056           0 :     vpwp_sfc_pert_col(1) = vpwp_sfc_pert
        1057             :
        1058           0 :     rtm_ref_col(1,:) = rtm_ref
        1059           0 :     thlm_ref_col(1,:) = thlm_ref
        1060           0 :     um_ref_col(1,:) = um_ref
        1061           0 :     vm_ref_col(1,:) = vm_ref
        1062           0 :     ug_col(1,:) = ug
        1063           0 :     vg_col(1,:) = vg
        1064             :
        1065           0 :     p_in_Pa_col(1,:) = p_in_Pa
        1066           0 :     rho_zm_col(1,:) = rho_zm
        1067           0 :     rho_col(1,:) = rho
        1068           0 :     exner_col(1,:) = exner
        1069           0 :     rho_ds_zm_col(1,:) = rho_ds_zm
        1070           0 :     rho_ds_zt_col(1,:) = rho_ds_zt
        1071           0 :     invrs_rho_ds_zm_col(1,:) = invrs_rho_ds_zm
        1072           0 :     invrs_rho_ds_zt_col(1,:) = invrs_rho_ds_zt
        1073           0 :     thv_ds_zm_col(1,:) = thv_ds_zm
        1074           0 :     thv_ds_zt_col(1,:) = thv_ds_zt
        1075           0 :     rfrzm_col(1,:) = rfrzm
        1076             :
        1077           0 :     hydromet_col(1,:,:) = hydromet
        1078             :
        1079           0 :     radf_col(1,:) = radf
        1080             : #ifdef CLUBBND_CAM
        1081             :     varmu_col(1) = varmu
        1082             : #endif
        1083           0 :     wphydrometp_col(1,:,:) = wphydrometp
        1084           0 :     wp2hmp_col(1,:,:) = wp2hmp
        1085           0 :     rtphmp_zt_col(1,:,:) = rtphmp_zt
        1086           0 :     thlphmp_zt_col(1,:,:) = thlphmp_zt
        1087             :
        1088           0 :     host_dx_col(1) = host_dx
        1089           0 :     host_dy_col(1) = host_dy
        1090             :
        1091           0 :     clubb_params_col(1,:) = clubb_params
        1092             :
        1093           0 :     stats_zt_col(1) = stats_zt
        1094           0 :     stats_zm_col(1) = stats_zm
        1095           0 :     stats_sfc_col(1) = stats_sfc
        1096             :
        1097           0 :     um_col(1,:) = um
        1098           0 :     vm_col(1,:) = vm
        1099           0 :     upwp_col(1,:) = upwp
        1100           0 :     vpwp_col(1,:) = vpwp
        1101           0 :     up2_col(1,:) = up2
        1102           0 :     vp2_col(1,:) = vp2
        1103           0 :     up3_col(1,:) = up3
        1104           0 :     vp3_col(1,:) = vp3
        1105           0 :     thlm_col(1,:) = thlm
        1106           0 :     rtm_col(1,:) = rtm
        1107           0 :     wprtp_col(1,:) = wprtp
        1108           0 :     wpthlp_col(1,:) = wpthlp
        1109           0 :     wp2_col(1,:) = wp2
        1110           0 :     wp3_col(1,:) = wp3
        1111           0 :     rtp2_col(1,:) = rtp2
        1112           0 :     rtp3_col(1,:) = rtp3
        1113           0 :     thlp2_col(1,:) = thlp2
        1114           0 :     thlp3_col(1,:) = thlp3
        1115           0 :     rtpthlp_col(1,:) = rtpthlp
        1116             :
        1117           0 :     sclrm_col(1,:,:) = sclrm
        1118             : #ifdef GFDL
        1119             :     sclrm_trsport_only_col(1,:,:) = sclrm_trsport_only
        1120             : #endif
        1121           0 :     sclrp2_col(1,:,:) = sclrp2
        1122           0 :     sclrp3_col(1,:,:) = sclrp3
        1123           0 :     sclrprtp_col(1,:,:) = sclrprtp
        1124           0 :     sclrpthlp_col(1,:,:) = sclrpthlp
        1125           0 :     wpsclrp_col(1,:,:) = wpsclrp
        1126           0 :     edsclrm_col(1,:,:) = edsclrm
        1127             :
        1128           0 :     rcm_col(1,:) = rcm
        1129           0 :     cloud_frac_col(1,:) = cloud_frac
        1130           0 :     wpthvp_col(1,:) = wpthvp
        1131           0 :     wp2thvp_col(1,:) = wp2thvp
        1132           0 :     rtpthvp_col(1,:) = rtpthvp
        1133           0 :     thlpthvp_col(1,:) = thlpthvp
        1134           0 :     sclrpthvp_col(1,:,:) = sclrpthvp
        1135           0 :     wp2rtp_col(1,:) = wp2rtp
        1136           0 :     wp2thlp_col(1,:) = wp2thlp
        1137           0 :     uprcp_col(1,:) = uprcp
        1138           0 :     vprcp_col(1,:) = vprcp
        1139           0 :     rc_coef_zm_col(1,:) = rc_coef_zm
        1140           0 :     wp4_col(1,:) = wp4
        1141           0 :     wpup2_col(1,:) = wpup2
        1142           0 :     wpvp2_col(1,:) = wpvp2
        1143           0 :     wp2up2_col(1,:) = wp2up2
        1144           0 :     wp2vp2_col(1,:) = wp2vp2
        1145           0 :     ice_supersat_frac_col(1,:) = ice_supersat_frac
        1146           0 :     um_pert_col(1,:) = um_pert
        1147           0 :     vm_pert_col(1,:) = vm_pert
        1148           0 :     upwp_pert_col(1,:) = upwp_pert
        1149           0 :     vpwp_pert_col(1,:) = vpwp_pert
        1150             : #ifdef GFDL
        1151             :     RH_crit_col(1,:,:,:) = RH_crit
        1152             : #endif
        1153           0 :     Kh_zm_col(1,:) = Kh_zm
        1154           0 :     Kh_zt_col(1,:) = Kh_zt
        1155             : #ifdef CLUBB_CAM
        1156           0 :     qclvar_col(1,:) = qclvar
        1157             : #endif
        1158           0 :     thlprcp_col(1,:) = thlprcp
        1159           0 :     wprcp_col(1,:) = wprcp
        1160           0 :     w_up_in_cloud_col(1,:) = w_up_in_cloud
        1161           0 :     w_down_in_cloud_col(1,:) = w_down_in_cloud
        1162           0 :     cloudy_updraft_frac_col(1,:) = cloudy_updraft_frac
        1163           0 :     cloudy_downdraft_frac_col(1,:) = cloudy_downdraft_frac
        1164           0 :     rcm_in_layer_col(1,:) = rcm_in_layer
        1165           0 :     cloud_cover_col(1,:) = cloud_cover
        1166           0 :     invrs_tau_zm_col(1,:) = invrs_tau_zm
        1167             :
        1168             :     !$acc data copyin( gr, gr%zm, gr%zt, gr%dzm, gr%dzt, gr%invrs_dzt, gr%invrs_dzm, &
        1169             :     !$acc              gr%weights_zt2zm, gr%weights_zm2zt, &
        1170             :     !$acc              nu_vert_res_dep, nu_vert_res_dep%nu2, nu_vert_res_dep%nu9, &
        1171             :     !$acc              nu_vert_res_dep%nu1, nu_vert_res_dep%nu8, nu_vert_res_dep%nu10, &
        1172             :     !$acc              nu_vert_res_dep%nu6, &
        1173             :     !$acc              sclr_idx, clubb_params_col, &
        1174             :     !$acc              fcor_col, sfc_elevation_col, thlm_forcing_col, rtm_forcing_col, um_forcing_col, &
        1175             :     !$acc              vm_forcing_col, wprtp_forcing_col, wpthlp_forcing_col, rtp2_forcing_col, thlp2_forcing_col, &
        1176             :     !$acc              rtpthlp_forcing_col, wm_zm_col, wm_zt_col, rho_zm_col, rho_col, rho_ds_zm_col, rho_ds_zt_col, &
        1177             :     !$acc              invrs_rho_ds_zm_col, invrs_rho_ds_zt_col, thv_ds_zm_col, thv_ds_zt_col, rfrzm_col, &
        1178             :     !$acc              radf_col, wpthlp_sfc_col, &
        1179             :     !$acc              wprtp_sfc_col, upwp_sfc_col, vpwp_sfc_col, &
        1180             :     !$acc              upwp_sfc_pert_col, vpwp_sfc_pert_col, rtm_ref_col, thlm_ref_col, um_ref_col, &
        1181             :     !$acc              vm_ref_col, ug_col, vg_col, host_dx_col, host_dy_col, &
        1182             :     !$acc              pdf_params, pdf_params_zm ) &
        1183             :     !$acc        copy( um_col, upwp_col, vm_col, vpwp_col, up2_col, vp2_col, up3_col, vp3_col, rtm_col, wprtp_col, thlm_col, wpthlp_col, rtp2_col, &
        1184             :     !$acc              rtp3_col, thlp2_col, thlp3_col, rtpthlp_col, wp2_col, wp3_col, &
        1185             :     !$acc              p_in_Pa_col, exner_col, rcm_col, cloud_frac_col, wpthvp_col, wp2thvp_col, &
        1186             :     !$acc              rtpthvp_col, thlpthvp_col, wp2rtp_col, wp2thlp_col, uprcp_col, vprcp_col, rc_coef_zm_col, &
        1187             :     !$acc              wp4_col, wpup2_col, wpvp2_col, wp2up2_col, wp2vp2_col, ice_supersat_frac_col, um_pert_col, &
        1188             :     !$acc              vm_pert_col, upwp_pert_col, vpwp_pert_col, &
        1189             :     !$acc              pdf_params%w_1, pdf_params%w_2, &
        1190             :     !$acc              pdf_params%varnce_w_1, pdf_params%varnce_w_2, &
        1191             :     !$acc              pdf_params%rt_1, pdf_params%rt_2, &
        1192             :     !$acc              pdf_params%varnce_rt_1, pdf_params%varnce_rt_2,  &
        1193             :     !$acc              pdf_params%thl_1, pdf_params%thl_2, &
        1194             :     !$acc              pdf_params%varnce_thl_1, pdf_params%varnce_thl_2, &
        1195             :     !$acc              pdf_params%corr_w_rt_1, pdf_params%corr_w_rt_2,  &
        1196             :     !$acc              pdf_params%corr_w_thl_1, pdf_params%corr_w_thl_2, &
        1197             :     !$acc              pdf_params%corr_rt_thl_1, pdf_params%corr_rt_thl_2,&
        1198             :     !$acc              pdf_params%alpha_thl, pdf_params%alpha_rt, &
        1199             :     !$acc              pdf_params%crt_1, pdf_params%crt_2, pdf_params%cthl_1, &
        1200             :     !$acc              pdf_params%cthl_2, pdf_params%chi_1, &
        1201             :     !$acc              pdf_params%chi_2, pdf_params%stdev_chi_1, &
        1202             :     !$acc              pdf_params%stdev_chi_2, pdf_params%stdev_eta_1, &
        1203             :     !$acc              pdf_params%stdev_eta_2, pdf_params%covar_chi_eta_1, &
        1204             :     !$acc              pdf_params%covar_chi_eta_2, pdf_params%corr_w_chi_1, &
        1205             :     !$acc              pdf_params%corr_w_chi_2, pdf_params%corr_w_eta_1, &
        1206             :     !$acc              pdf_params%corr_w_eta_2, pdf_params%corr_chi_eta_1, &
        1207             :     !$acc              pdf_params%corr_chi_eta_2, pdf_params%rsatl_1, &
        1208             :     !$acc              pdf_params%rsatl_2, pdf_params%rc_1, pdf_params%rc_2, &
        1209             :     !$acc              pdf_params%cloud_frac_1, pdf_params%cloud_frac_2,  &
        1210             :     !$acc              pdf_params%mixt_frac, pdf_params%ice_supersat_frac_1, &
        1211             :     !$acc              pdf_params%ice_supersat_frac_2, &
        1212             :     !$acc              pdf_params_zm%w_1, pdf_params_zm%w_2, &
        1213             :     !$acc              pdf_params_zm%varnce_w_1, pdf_params_zm%varnce_w_2, &
        1214             :     !$acc              pdf_params_zm%rt_1, pdf_params_zm%rt_2, &
        1215             :     !$acc              pdf_params_zm%varnce_rt_1, pdf_params_zm%varnce_rt_2,  &
        1216             :     !$acc              pdf_params_zm%thl_1, pdf_params_zm%thl_2, &
        1217             :     !$acc              pdf_params_zm%varnce_thl_1, pdf_params_zm%varnce_thl_2, &
        1218             :     !$acc              pdf_params_zm%corr_w_rt_1, pdf_params_zm%corr_w_rt_2,  &
        1219             :     !$acc              pdf_params_zm%corr_w_thl_1, pdf_params_zm%corr_w_thl_2, &
        1220             :     !$acc              pdf_params_zm%corr_rt_thl_1, pdf_params_zm%corr_rt_thl_2,&
        1221             :     !$acc              pdf_params_zm%alpha_thl, pdf_params_zm%alpha_rt, &
        1222             :     !$acc              pdf_params_zm%crt_1, pdf_params_zm%crt_2, pdf_params_zm%cthl_1, &
        1223             :     !$acc              pdf_params_zm%cthl_2, pdf_params_zm%chi_1, &
        1224             :     !$acc              pdf_params_zm%chi_2, pdf_params_zm%stdev_chi_1, &
        1225             :     !$acc              pdf_params_zm%stdev_chi_2, pdf_params_zm%stdev_eta_1, &
        1226             :     !$acc              pdf_params_zm%stdev_eta_2, pdf_params_zm%covar_chi_eta_1, &
        1227             :     !$acc              pdf_params_zm%covar_chi_eta_2, pdf_params_zm%corr_w_chi_1, &
        1228             :     !$acc              pdf_params_zm%corr_w_chi_2, pdf_params_zm%corr_w_eta_1, &
        1229             :     !$acc              pdf_params_zm%corr_w_eta_2, pdf_params_zm%corr_chi_eta_1, &
        1230             :     !$acc              pdf_params_zm%corr_chi_eta_2, pdf_params_zm%rsatl_1, &
        1231             :     !$acc              pdf_params_zm%rsatl_2, pdf_params_zm%rc_1, pdf_params_zm%rc_2, &
        1232             :     !$acc              pdf_params_zm%cloud_frac_1, pdf_params_zm%cloud_frac_2,  &
        1233             :     !$acc              pdf_params_zm%mixt_frac, pdf_params_zm%ice_supersat_frac_1, &
        1234             :     !$acc              pdf_params_zm%ice_supersat_frac_2 ) &
        1235             :     !$acc     copyout( rcm_in_layer_col, cloud_cover_col, wprcp_col, w_up_in_cloud_col, w_down_in_cloud_col, &
        1236             :     !$acc              cloudy_updraft_frac_col, cloudy_downdraft_frac_col, invrs_tau_zm_col, Kh_zt_col, &
        1237             :     !$acc              Kh_zm_col, &
        1238             :     !$acc              thlprcp_col )
        1239             :
        1240             :     !$acc data if( sclr_dim > 0 ) &
        1241             :     !$acc      copyin( sclr_tol, sclrm_forcing_col, wpsclrp_sfc_col ) &
        1242             :     !$acc        copy( sclrm_col, wpsclrp_col, sclrp2_col, sclrp3_col, sclrprtp_col, sclrpthlp_col, sclrpthvp_col )
        1243             :
        1244             :     !$acc data if( edsclr_dim > 0 ) &
        1245             :     !$acc      copyin( wpedsclrp_sfc_col, edsclrm_forcing_col ) &
        1246             :     !$acc        copy( edsclrm_col )
        1247             :
        1248             :     !$acc data if( hydromet_dim > 0 ) &
        1249             :     !$acc      copyin( hydromet_col, wphydrometp_col, wp2hmp_col, rtphmp_zt_col, thlphmp_zt_col, &
        1250             :     !$acc              l_mix_rat_hm )
        1251             :
        1252             : #ifdef CLUBB_CAM
        1253             :     !$acc data copyout( qclvar_col )
        1254             : #endif
        1255             :
        1256             : #ifdef CLUBBND_CAM
        1257             :     !$acc data copyin( varmu_col )
        1258             : #endif
        1259             :
        1260             : #ifdef GFDL
        1261             :     !$acc data if( sclr_dim > 0 ) copy( sclrm_trsport_only )
        1262             : #endif
        1263             :
        1264             :     call advance_clubb_core( gr, gr%nz, 1,              &
        1265             :       l_implemented, dt, fcor_col, sfc_elevation_col,            &            ! intent(in)
        1266             :       hydromet_dim, &                                                         ! intent(in)
        1267             :       sclr_dim, sclr_tol, edsclr_dim, sclr_idx, &                         ! intent(in)
        1268             :       thlm_forcing_col, rtm_forcing_col, um_forcing_col, vm_forcing_col, &    ! intent(in)
        1269             :       sclrm_forcing_col, edsclrm_forcing_col, wprtp_forcing_col, &            ! intent(in)
        1270             :       wpthlp_forcing_col, rtp2_forcing_col, thlp2_forcing_col, &              ! intent(in)
        1271             :       rtpthlp_forcing_col, wm_zm_col, wm_zt_col, &                            ! intent(in)
        1272             :       wpthlp_sfc_col, wprtp_sfc_col, upwp_sfc_col, vpwp_sfc_col, &            ! intent(in)
        1273             :       wpsclrp_sfc_col, wpedsclrp_sfc_col, &                                   ! intent(in)
        1274             :       upwp_sfc_pert_col, vpwp_sfc_pert_col, &                                 ! intent(in)
        1275             :       rtm_ref_col, thlm_ref_col, um_ref_col, vm_ref_col, ug_col, vg_col, &    ! Intent(in)
        1276             :       p_in_Pa_col, rho_zm_col, rho_col, exner_col, &                          ! intent(in)
        1277             :       rho_ds_zm_col, rho_ds_zt_col, invrs_rho_ds_zm_col, &                    ! intent(in)
        1278             :       invrs_rho_ds_zt_col, thv_ds_zm_col, thv_ds_zt_col, &                    ! intent(in)
        1279             :       hydromet_col, l_mix_rat_hm, &                                           ! intent(in)
        1280             :       rfrzm_col, radf_col, &                                                  ! intent(in)
        1281             : #ifdef CLUBBND_CAM
        1282             :       varmu_col, &
        1283             : #endif
        1284             :       wphydrometp_col, wp2hmp_col, rtphmp_zt_col, thlphmp_zt_col, &                 ! intent(in)
        1285             :       host_dx_col, host_dy_col, &                                             ! intent(in)
        1286             :       clubb_params_col, nu_vert_res_dep, lmin, &                                  ! intent(in)
        1287             :       clubb_config_flags, &                                                   ! intent(in)
        1288             :       stats_metadata, &           ! intent(in)
        1289             :       stats_zt_col, stats_zm_col, stats_sfc_col, &                                ! intent(inout)
        1290             :       um_col, vm_col, upwp_col, vpwp_col, up2_col, vp2_col, up3_col, vp3_col, &   ! intent(inout)
        1291             :       thlm_col, rtm_col, wprtp_col, wpthlp_col, &                                 ! intent(inout)
        1292             :       wp2_col, wp3_col, rtp2_col, rtp3_col, thlp2_col, thlp3_col, rtpthlp_col, &  ! intent(inout)
        1293             :       sclrm_col,   &
        1294             : #ifdef GFDL
        1295             :       sclrm_trsport_only_col,  &  ! h1g, 2010-06-16                               ! intent(inout)
        1296             : #endif
        1297             :       sclrp2_col, sclrp3_col, sclrprtp_col, sclrpthlp_col, &                      ! intent(inout)
        1298             :       wpsclrp_col, edsclrm_col, &                                                 ! intent(inout)
        1299             :       rcm_col, cloud_frac_col, &                                                  ! intent(inout)
        1300             :       wpthvp_col, wp2thvp_col, rtpthvp_col, thlpthvp_col, &                       ! intent(inout)
        1301             :       sclrpthvp_col, &                                                            ! intent(inout)
        1302             :       wp2rtp_col, wp2thlp_col, uprcp_col, vprcp_col, rc_coef_zm_col, wp4_col, &   ! intent(inout)
        1303             :       wpup2_col, wpvp2_col, wp2up2_col, wp2vp2_col, ice_supersat_frac_col, &      ! intent(inout)
        1304             :       um_pert_col, vm_pert_col, upwp_pert_col, vpwp_pert_col, &                   ! intent(inout)
        1305             :       pdf_params, pdf_params_zm, &                                                ! intent(inout)
        1306             :       pdf_implicit_coefs_terms, &                                                 ! intent(inout)
        1307             : #ifdef GFDL
        1308             :                RH_crit_col, & !h1g, 2010-06-16                                    ! intent(inout)
        1309             :                do_liquid_only_in_clubb, &                                         ! intent(in)
        1310             : #endif
        1311             :       Kh_zm_col, Kh_zt_col, &                                                     ! intent(out)
        1312             : #ifdef CLUBB_CAM
        1313             :                qclvar_col, &                                                      ! intent(out)
        1314             : #endif
        1315             :       thlprcp_col, wprcp_col, w_up_in_cloud_col, w_down_in_cloud_col, & ! intent(out)
        1316             :       cloudy_updraft_frac_col, cloudy_downdraft_frac_col, &                       ! intent(out)
        1317             :       rcm_in_layer_col, cloud_cover_col, invrs_tau_zm_col, &                      ! intent(out)
        1318           0 :       err_code_api )                                                              ! intent(out)
        1319             :
        1320             :     !$acc end data
        1321             :     !$acc end data
        1322             :     !$acc end data
        1323             :     !$acc end data
        1324             :
        1325             : #ifdef CLUBB_CAM
        1326             :     !$acc end data
        1327             : #endif
        1328             :
        1329             : #ifdef CLUBBND_CAM
        1330             :     !$acc end data
        1331             : #endif
        1332             :
        1333             : #ifdef GFDL
        1334             :     !$acc end data
        1335             : #endif
        1336             :
        1337             :     ! The following does not work for stats
        1338             :     !     stats_zt = stats_zt_col(1)
        1339             :     !     stats_zm = stats_zm_col(1)
        1340             :     !     stats_sfc = stats_sfc_col(1)
        1341             :     ! because of some mysterious pointer issue. However, the only thing that
        1342             :     ! updates in stats is the field values, so we can copy only those instead.
        1343           0 :     if ( stats_metadata%l_stats ) then
        1344           0 :       stats_zm%accum_field_values = stats_zm_col(1)%accum_field_values
        1345           0 :       stats_zm%accum_num_samples = stats_zm_col(1)%accum_num_samples
        1346             :
        1347           0 :       stats_zt%accum_field_values = stats_zt_col(1)%accum_field_values
        1348           0 :       stats_zt%accum_num_samples = stats_zt_col(1)%accum_num_samples
        1349             :
        1350           0 :       stats_sfc%accum_field_values = stats_sfc_col(1)%accum_field_values
        1351           0 :       stats_sfc%accum_num_samples = stats_sfc_col(1)%accum_num_samples
        1352             :     end if
        1353             :
        1354             :
        1355           0 :     um = um_col(1,:)
        1356           0 :     upwp = upwp_col(1,:)
        1357           0 :     vm = vm_col(1,:)
        1358           0 :     vpwp = vpwp_col(1,:)
        1359           0 :     up2 = up2_col(1,:)
        1360           0 :     vp2 = vp2_col(1,:)
        1361           0 :     up3 = up3_col(1,:)
        1362           0 :     vp3 = vp3_col(1,:)
        1363           0 :     rtm = rtm_col(1,:)
        1364           0 :     wprtp = wprtp_col(1,:)
        1365           0 :     thlm = thlm_col(1,:)
        1366           0 :     wpthlp = wpthlp_col(1,:)
        1367           0 :     rtp2 = rtp2_col(1,:)
        1368           0 :     rtp3 = rtp3_col(1,:)
        1369           0 :     thlp2 = thlp2_col(1,:)
        1370           0 :     thlp3 = thlp3_col(1,:)
        1371           0 :     rtpthlp = rtpthlp_col(1,:)
        1372           0 :     wp2 = wp2_col(1,:)
        1373           0 :     wp3 = wp3_col(1,:)
        1374           0 :     sclrm = sclrm_col(1,:,:)
        1375           0 :     wpsclrp = wpsclrp_col(1,:,:)
        1376           0 :     sclrp2 = sclrp2_col(1,:,:)
        1377           0 :     sclrp3 = sclrp3_col(1,:,:)
        1378           0 :     sclrprtp = sclrprtp_col(1,:,:)
        1379           0 :     sclrpthlp = sclrpthlp_col(1,:,:)
        1380           0 :     p_in_Pa = p_in_Pa_col(1,:)
        1381           0 :     exner = exner_col(1,:)
        1382           0 :     rcm = rcm_col(1,:)
        1383           0 :     cloud_frac = cloud_frac_col(1,:)
        1384           0 :     wpthvp = wpthvp_col(1,:)
        1385           0 :     wp2thvp = wp2thvp_col(1,:)
        1386           0 :     rtpthvp = rtpthvp_col(1,:)
        1387           0 :     thlpthvp = thlpthvp_col(1,:)
        1388           0 :     sclrpthvp = sclrpthvp_col(1,:,:)
        1389           0 :     wp2rtp = wp2rtp_col(1,:)
        1390           0 :     wp2thlp = wp2thlp_col(1,:)
        1391           0 :     uprcp = uprcp_col(1,:)
        1392           0 :     vprcp = vprcp_col(1,:)
        1393           0 :     rc_coef_zm = rc_coef_zm_col(1,:)
        1394           0 :     wp4 = wp4_col(1,:)
        1395           0 :     wpup2 = wpup2_col(1,:)
        1396           0 :     wpvp2 = wpvp2_col(1,:)
        1397           0 :     wp2vp2 = wp2vp2_col(1,:)
        1398           0 :     wp2up2 = wp2up2_col(1,:)
        1399           0 :     ice_supersat_frac = ice_supersat_frac_col(1,:)
        1400             : #ifdef GFDL
        1401             :     sclrm_trsport_only = sclrm_trsport_only_col(1,:,:)
        1402             : #endif
        1403           0 :     edsclrm = edsclrm_col(1,:,:)
        1404           0 :     rcm_in_layer = rcm_in_layer_col(1,:)
        1405           0 :     cloud_cover  = cloud_cover_col(1,:)
        1406           0 :     wprcp = wprcp_col(1,:)
        1407           0 :     w_up_in_cloud = w_up_in_cloud_col(1,:)
        1408           0 :     w_down_in_cloud = w_down_in_cloud_col(1,:)
        1409           0 :     cloudy_updraft_frac = cloudy_updraft_frac_col(1,:)
        1410           0 :     cloudy_downdraft_frac = cloudy_downdraft_frac_col(1,:)
        1411           0 :     invrs_tau_zm = invrs_tau_zm_col(1,:)
        1412           0 :     Kh_zt = Kh_zt_col(1,:)
        1413           0 :     Kh_zm = Kh_zm_col(1,:)
        1414             : #ifdef CLUBB_CAM
        1415           0 :     qclvar = qclvar_col(1,:)
        1416             : #endif
        1417           0 :     thlprcp = thlprcp_col(1,:)
        1418             : #ifdef GFDL
        1419             :     RH_crit = RH_crit_col(1,:,:,:)
        1420             : #endif
        1421             :
        1422           0 :   end subroutine advance_clubb_core_api_single_col
        1423             :
        1424     8935056 :   subroutine advance_clubb_core_api_multi_col( gr, nz, ngrdcol, &
        1425     8935056 :     l_implemented, dt, fcor, sfc_elevation,            &    ! intent(in)
        1426             :     hydromet_dim, &                                         ! intent(in)
        1427     8935056 :     sclr_dim, sclr_tol, edsclr_dim, sclr_idx, &         ! intent(in)
        1428     8935056 :     thlm_forcing, rtm_forcing, um_forcing, vm_forcing, &    ! intent(in)
        1429     8935056 :     sclrm_forcing, edsclrm_forcing, wprtp_forcing, &        ! intent(in)
        1430     8935056 :     wpthlp_forcing, rtp2_forcing, thlp2_forcing, &          ! intent(in)
        1431     8935056 :     rtpthlp_forcing, wm_zm, wm_zt, &                        ! intent(in)
        1432     8935056 :     wpthlp_sfc, wprtp_sfc, upwp_sfc, vpwp_sfc, &            ! intent(in)
        1433     8935056 :     wpsclrp_sfc, wpedsclrp_sfc, &                           ! intent(in)
        1434     8935056 :     upwp_sfc_pert, vpwp_sfc_pert, &                         ! intent(in)
        1435     8935056 :     rtm_ref, thlm_ref, um_ref, vm_ref, ug, vg, &            ! Intent(in)
        1436     8935056 :     p_in_Pa, rho_zm, rho, exner, &                          ! intent(in)
        1437     8935056 :     rho_ds_zm, rho_ds_zt, invrs_rho_ds_zm, &                ! intent(in)
        1438     8935056 :     invrs_rho_ds_zt, thv_ds_zm, thv_ds_zt, &                ! intent(in)
        1439     8935056 :     hydromet, l_mix_rat_hm, &                               ! intent(in)
        1440     8935056 :     rfrzm, radf, &                                          ! intent(in)
        1441             : #ifdef CLUBBND_CAM
        1442             :     varmu, &                                                ! intent(in)
        1443             : #endif
        1444     8935056 :     wphydrometp, wp2hmp, rtphmp_zt, thlphmp_zt, &           ! intent(in)
        1445     8935056 :     host_dx, host_dy, &                                     ! intent(in)
        1446     8935056 :     clubb_params, nu_vert_res_dep, lmin, &                  ! intent(in)
        1447             :     clubb_config_flags, &                                   ! intent(in)
        1448             :     stats_metadata, &                                       ! intent(in)
        1449     8935056 :     stats_zt, stats_zm, stats_sfc, &                        ! intent(inout)
        1450     8935056 :     um, vm, upwp, vpwp, up2, vp2, up3, vp3, &               ! intent(inout)
        1451     8935056 :     thlm, rtm, wprtp, wpthlp, &                             ! intent(inout)
        1452     8935056 :     wp2, wp3, rtp2, rtp3, thlp2, thlp3, rtpthlp, &          ! intent(inout)
        1453     8935056 :     sclrm,   &
        1454             : #ifdef GFDL
        1455             :                sclrm_trsport_only,  &  ! h1g, 2010-06-16    ! intent(inout)
        1456             : #endif
        1457     8935056 :     sclrp2, sclrp3, sclrprtp, sclrpthlp, &                  ! intent(inout)
        1458     8935056 :     wpsclrp, edsclrm, err_code_api, &                       ! intent(inout)
        1459     8935056 :     rcm, cloud_frac, &                                      ! intent(inout)
        1460     8935056 :     wpthvp, wp2thvp, rtpthvp, thlpthvp, &                   ! intent(inout)
        1461     8935056 :     sclrpthvp, &                                            ! intent(inout)
        1462     8935056 :     wp2rtp, wp2thlp, uprcp, vprcp, rc_coef_zm, wp4, &       ! intent(inout)
        1463     8935056 :     wpup2, wpvp2, wp2up2, wp2vp2, ice_supersat_frac, &      ! intent(inout)
        1464     8935056 :     um_pert, vm_pert, upwp_pert, vpwp_pert, &               ! intent(inout)
        1465             :     pdf_params, pdf_params_zm, &                            ! intent(inout)
        1466             :     pdf_implicit_coefs_terms, &                             ! intent(inout)
        1467             : #ifdef GFDL
        1468             :                RH_crit, & !h1g, 2010-06-16                  ! intent(inout)
        1469             :                do_liquid_only_in_clubb, &                   ! intent(in)
        1470             : #endif
        1471     8935056 :     Kh_zm, Kh_zt, &                                         ! intent(out)
        1472             : #ifdef CLUBB_CAM
        1473     8935056 :     qclvar, &                                               ! intent(out)
        1474             : #endif
        1475     8935056 :     thlprcp, wprcp, w_up_in_cloud, w_down_in_cloud, &       ! intent(out)
        1476     8935056 :     cloudy_updraft_frac, cloudy_downdraft_frac, &           ! intent(out)
        1477     8935056 :     rcm_in_layer, cloud_cover, invrs_tau_zm )               ! intent(out)
        1478             :
        1479             :     use advance_clubb_core_module, only : advance_clubb_core
        1480             :
        1481             :     use pdf_parameter_module, only: &
        1482             :         implicit_coefs_terms    ! Variable Type(s)
        1483             :
        1484             :     use model_flags, only: &
        1485             :         clubb_config_flags_type
        1486             :
        1487             :     use array_index, only: &
        1488             :       sclr_idx_type
        1489             :
        1490             :     implicit none
        1491             :
        1492             :     !------------------------ Input Variables ------------------------
        1493             :     integer, intent(in) :: &
        1494             :       nz, &
        1495             :       ngrdcol   ! Number of grid columns
        1496             :
        1497             :     type(grid), target, intent(in) :: &
        1498             :       gr
        1499             :
        1500             :     logical, intent(in) ::  &
        1501             :       l_implemented ! Is this part of a larger host model (T/F) ?
        1502             :
        1503             :     real( kind = core_rknd ), intent(in) ::  &
        1504             :       dt  ! Current timestep duration    [s]
        1505             :
        1506             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol) ::  &
        1507             :       fcor, &           ! Coriolis forcing             [s^-1]
        1508             :       sfc_elevation     ! Elevation of ground level    [m AMSL]
        1509             :
        1510             :     integer, intent(in) :: &
        1511             :       hydromet_dim,   & ! Total number of hydrometeor species       [#]
        1512             :       sclr_dim,       & ! Number of passive scalars                 [#]
        1513             :       edsclr_dim        ! Number of eddy-diff. passive scalars      [#]
        1514             :
        1515             :     real( kind = core_rknd ), intent(in), dimension(sclr_dim) :: &
        1516             :       sclr_tol          ! Threshold(s) on the passive scalars  [units vary]
        1517             :
        1518             :     type (sclr_idx_type), intent(in) :: &
        1519             :       sclr_idx
        1520             :
        1521             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol,nz) ::  &
        1522             :       thlm_forcing,    & ! theta_l forcing (thermodynamic levels)    [K/s]
        1523             :       rtm_forcing,     & ! r_t forcing (thermodynamic levels)        [(kg/kg)/s]
        1524             :       um_forcing,      & ! u wind forcing (thermodynamic levels)     [m/s/s]
        1525             :       vm_forcing,      & ! v wind forcing (thermodynamic levels)     [m/s/s]
        1526             :       wprtp_forcing,   & ! <w'r_t'> forcing (momentum levels)    [m*K/s^2]
        1527             :       wpthlp_forcing,  & ! <w'th_l'> forcing (momentum levels)   [m*(kg/kg)/s^2]
        1528             :       rtp2_forcing,    & ! <r_t'^2> forcing (momentum levels)    [(kg/kg)^2/s]
        1529             :       thlp2_forcing,   & ! <th_l'^2> forcing (momentum levels)   [K^2/s]
        1530             :       rtpthlp_forcing, & ! <r_t'th_l'> forcing (momentum levels) [K*(kg/kg)/s]
        1531             :       wm_zm,           & ! w mean wind component on momentum levels  [m/s]
        1532             :       wm_zt,           & ! w mean wind component on thermo. levels   [m/s]
        1533             :       rho_zm,          & ! Air density on momentum levels            [kg/m^3]
        1534             :       rho,             & ! Air density on thermodynamic levels       [kg/m^3]
        1535             :       rho_ds_zm,       & ! Dry, static density on momentum levels    [kg/m^3]
        1536             :       rho_ds_zt,       & ! Dry, static density on thermo. levels     [kg/m^3]
        1537             :       invrs_rho_ds_zm, & ! Inv. dry, static density @ momentum levs. [m^3/kg]
        1538             :       invrs_rho_ds_zt, & ! Inv. dry, static density @ thermo. levs.  [m^3/kg]
        1539             :       thv_ds_zm,       & ! Dry, base-state theta_v on momentum levs. [K]
        1540             :       thv_ds_zt,       & ! Dry, base-state theta_v on thermo. levs.  [K]
        1541             :       rfrzm              ! Total ice-phase water mixing ratio        [kg/kg]
        1542             :
        1543             :     real( kind = core_rknd ), dimension(ngrdcol,nz,hydromet_dim), intent(in) :: &
        1544             :       hydromet           ! Collection of hydrometeors                [units vary]
        1545             :
        1546             :     logical, dimension(hydromet_dim), intent(in) :: &
        1547             :       l_mix_rat_hm   ! if true, then the quantity is a hydrometeor mixing ratio
        1548             :
        1549             :     real( kind = core_rknd ), dimension(ngrdcol,nz), intent(in) :: &
        1550             :       radf          ! Buoyancy production at the CL top due to LW radiative cooling [m^2/s^3]
        1551             :
        1552             : #ifdef CLUBBND_CAM
        1553             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol) :: &
        1554             :       varmu
        1555             : #endif
        1556             :
        1557             :     real( kind = core_rknd ), dimension(ngrdcol,nz, hydromet_dim), intent(in) :: &
        1558             :       wphydrometp, & ! Covariance of w and a hydrometeor   [(m/s) <hm units>]
        1559             :       wp2hmp,      & ! Third moment: <w'^2> * <hydro.'>    [(m/s)^2 <hm units>]
        1560             :       rtphmp_zt,   & ! Covariance of rt and a hydrometeor  [(kg/kg) <hm units>]
        1561             :       thlphmp_zt     ! Covariance of thl and a hydrometeor [K <hm units>]
        1562             :
        1563             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol) ::  &
        1564             :       wpthlp_sfc,   & ! w' theta_l' at surface   [(m K)/s]
        1565             :       wprtp_sfc,    & ! w' r_t' at surface       [(kg m)/( kg s)]
        1566             :       upwp_sfc,     & ! u'w' at surface          [m^2/s^2]
        1567             :       vpwp_sfc        ! v'w' at surface          [m^2/s^2]
        1568             :
        1569             :     ! Passive scalar variables
        1570             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol,nz,sclr_dim) :: &
        1571             :       sclrm_forcing    ! Passive scalar forcing         [{units vary}/s]
        1572             :
        1573             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol,sclr_dim) ::  &
        1574             :       wpsclrp_sfc      ! Scalar flux at surface         [{units vary} m/s]
        1575             :
        1576             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol) :: &
        1577             :       upwp_sfc_pert, & ! pertubed u'w' at surface    [m^2/s^2]
        1578             :       vpwp_sfc_pert    ! pertubed v'w' at surface    [m^2/s^2]
        1579             :
        1580             :     ! Eddy passive scalar variables
        1581             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol,nz,edsclr_dim) :: &
        1582             :       edsclrm_forcing  ! Eddy passive scalar forcing    [{units vary}/s]
        1583             :
        1584             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol,edsclr_dim) ::  &
        1585             :       wpedsclrp_sfc    ! Eddy-Scalar flux at surface    [{units vary} m/s]
        1586             :
        1587             :     ! Reference profiles (used for nudging, sponge damping, and Coriolis effect)
        1588             :     real( kind = core_rknd ), dimension(ngrdcol,nz), intent(in) ::  &
        1589             :       rtm_ref,  & ! Initial total water mixing ratio             [kg/kg]
        1590             :       thlm_ref, & ! Initial liquid water potential temperature   [K]
        1591             :       um_ref,   & ! Initial u wind; Michael Falk                 [m/s]
        1592             :       vm_ref,   & ! Initial v wind; Michael Falk                 [m/s]
        1593             :       ug,       & ! u geostrophic wind                           [m/s]
        1594             :       vg          ! v geostrophic wind                           [m/s]
        1595             :
        1596             :     ! Host model horizontal grid spacing, if part of host model.
        1597             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol) :: &
        1598             :       host_dx,  & ! East-West horizontal grid spacing     [m]
        1599             :       host_dy     ! North-South horizontal grid spacing   [m]
        1600             :
        1601             :     real( kind = core_rknd ), dimension(ngrdcol,nparams), intent(in) :: &
        1602             :       clubb_params    ! Array of CLUBB's tunable parameters    [units vary]
        1603             :
        1604             :     type(nu_vertical_res_dep), intent(in) :: &
        1605             :       nu_vert_res_dep    ! Vertical resolution dependent nu values
        1606             :
        1607             :     real( kind = core_rknd ), intent(in) :: &
        1608             :       lmin    ! Min. value for the length scale    [m]
        1609             :
        1610             :     type( clubb_config_flags_type ), intent(in) :: &
        1611             :       clubb_config_flags ! Derived type holding all configurable CLUBB flags
        1612             :
        1613             :     type (stats_metadata_type), intent(in) :: &
        1614             :       stats_metadata
        1615             :
        1616             :     !------------------------ Input/Output Variables ------------------------
        1617             :     type(stats), target, intent(inout), dimension(ngrdcol) :: &
        1618             :       stats_zt, &
        1619             :       stats_zm, &
        1620             :       stats_sfc
        1621             :
        1622             :     ! These are prognostic or are planned to be in the future
        1623             :     real( kind = core_rknd ), intent(inout), dimension(ngrdcol,nz) ::  &
        1624             :       um,      & ! u mean wind component (thermodynamic levels)   [m/s]
        1625             :       upwp,    & ! u'w' (momentum levels)                         [m^2/s^2]
        1626             :       vm,      & ! v mean wind component (thermodynamic levels)   [m/s]
        1627             :       vpwp,    & ! v'w' (momentum levels)                         [m^2/s^2]
        1628             :       up2,     & ! u'^2 (momentum levels)                         [m^2/s^2]
        1629             :       vp2,     & ! v'^2 (momentum levels)                         [m^2/s^2]
        1630             :       up3,     & ! u'^3 (thermodynamic levels)                    [m^3/s^3]
        1631             :       vp3,     & ! v'^3 (thermodynamic levels)                    [m^3/s^3]
        1632             :       rtm,     & ! total water mixing ratio, r_t (thermo. levels) [kg/kg]
        1633             :       wprtp,   & ! w' r_t' (momentum levels)                      [(kg/kg) m/s]
        1634             :       thlm,    & ! liq. water pot. temp., th_l (thermo. levels)   [K]
        1635             :       wpthlp,  & ! w' th_l' (momentum levels)                     [(m/s) K]
        1636             :       rtp2,    & ! r_t'^2 (momentum levels)                       [(kg/kg)^2]
        1637             :       rtp3,    & ! r_t'^3 (thermodynamic levels)                  [(kg/kg)^3]
        1638             :       thlp2,   & ! th_l'^2 (momentum levels)                      [K^2]
        1639             :       thlp3,   & ! th_l'^3 (thermodynamic levels)                 [K^3]
        1640             :       rtpthlp, & ! r_t' th_l' (momentum levels)                   [(kg/kg) K]
        1641             :       wp2,     & ! w'^2 (momentum levels)                         [m^2/s^2]
        1642             :       wp3        ! w'^3 (thermodynamic levels)                    [m^3/s^3]
        1643             :
        1644             :     ! Passive scalar variables
        1645             :     real( kind = core_rknd ), intent(inout), dimension(ngrdcol,nz,sclr_dim) :: &
        1646             :       sclrm,     & ! Passive scalar mean (thermo. levels) [units vary]
        1647             :       wpsclrp,   & ! w'sclr' (momentum levels)            [{units vary} m/s]
        1648             :       sclrp2,    & ! sclr'^2 (momentum levels)            [{units vary}^2]
        1649             :       sclrp3,    & ! sclr'^3 (thermodynamic levels)       [{units vary}^3]
        1650             :       sclrprtp,  & ! sclr'rt' (momentum levels)           [{units vary} (kg/kg)]
        1651             :       sclrpthlp    ! sclr'thl' (momentum levels)          [{units vary} K]
        1652             :
        1653             :     real( kind = core_rknd ), intent(inout), dimension(ngrdcol,nz) ::  &
        1654             :       p_in_Pa, & ! Air pressure (thermodynamic levels)       [Pa]
        1655             :       exner      ! Exner function (thermodynamic levels)     [-]
        1656             :
        1657             :     real( kind = core_rknd ), intent(inout), dimension(ngrdcol,nz) ::  &
        1658             :       rcm,        & ! cloud water mixing ratio, r_c (thermo. levels) [kg/kg]
        1659             :       cloud_frac, & ! cloud fraction (thermodynamic levels)          [-]
        1660             :       wpthvp,     & ! < w' th_v' > (momentum levels)                 [kg/kg K]
        1661             :       wp2thvp,    & ! < w'^2 th_v' > (thermodynamic levels)          [m^2/s^2 K]
        1662             :       rtpthvp,    & ! < r_t' th_v' > (momentum levels)               [kg/kg K]
        1663             :       thlpthvp      ! < th_l' th_v' > (momentum levels)              [K^2]
        1664             :
        1665             :     real( kind = core_rknd ), intent(inout), dimension(ngrdcol,nz,sclr_dim) :: &
        1666             :       sclrpthvp     ! < sclr' th_v' > (momentum levels)   [units vary]
        1667             :
        1668             :     real( kind = core_rknd ), intent(inout), dimension(ngrdcol,nz) ::  &
        1669             :       wp2rtp,            & ! w'^2 rt' (thermodynamic levels)      [m^2/s^2 kg/kg]
        1670             :       wp2thlp,           & ! w'^2 thl' (thermodynamic levels)     [m^2/s^2 K]
        1671             :       uprcp,             & ! < u' r_c' > (momentum levels)        [(m/s)(kg/kg)]
        1672             :       vprcp,             & ! < v' r_c' > (momentum levels)        [(m/s)(kg/kg)]
        1673             :       rc_coef_zm,        & ! Coef of X'r_c' in Eq. (34) (m-levs.) [K/(kg/kg)]
        1674             :       wp4,               & ! w'^4 (momentum levels)               [m^4/s^4]
        1675             :       wpup2,             & ! w'u'^2 (thermodynamic levels)        [m^3/s^3]
        1676             :       wpvp2,             & ! w'v'^2 (thermodynamic levels)        [m^3/s^3]
        1677             :       wp2up2,            & ! w'^2 u'^2 (momentum levels)          [m^4/s^4]
        1678             :       wp2vp2,            & ! w'^2 v'^2 (momentum levels)          [m^4/s^4]
        1679             :       ice_supersat_frac    ! ice cloud fraction (thermo. levels)  [-]
        1680             :
        1681             :     ! Variables used to track perturbed version of winds.
        1682             :     real( kind = core_rknd ), intent(inout), dimension(ngrdcol,nz) :: &
        1683             :       um_pert,   & ! perturbed <u>       [m/s]
        1684             :       vm_pert,   & ! perturbed <v>       [m/s]
        1685             :       upwp_pert, & ! perturbed <u'w'>    [m^2/s^2]
        1686             :       vpwp_pert    ! perturbed <v'w'>    [m^2/s^2]
        1687             :
        1688             :     type(pdf_parameter), intent(inout) :: &
        1689             :       pdf_params,    & ! PDF parameters (thermodynamic levels)    [units vary]
        1690             :       pdf_params_zm    ! PDF parameters on momentum levels        [units vary]
        1691             :
        1692             :     type(implicit_coefs_terms), intent(inout) :: &
        1693             :       pdf_implicit_coefs_terms    ! Implicit coefs / explicit terms [units vary]
        1694             :
        1695             : #ifdef GFDL
        1696             :     real( kind = core_rknd ), intent(inout), dimension(ngrdcol,nz,sclr_dim) :: &  ! h1g, 2010-06-16
        1697             :       sclrm_trsport_only  ! Passive scalar concentration due to pure transport [{units vary}/s]
        1698             : #endif
        1699             :
        1700             :     real( kind = core_rknd ), intent(inout), dimension(ngrdcol,nz,edsclr_dim) :: &
        1701             :     edsclrm   ! Eddy passive scalar mean (thermo. levels)   [units vary]
        1702             :
        1703             :
        1704             :     !------------------------ Output Variables ------------------------
        1705             :     real( kind = core_rknd ), intent(out), dimension(ngrdcol,nz) ::  &
        1706             :       rcm_in_layer, & ! rcm in cloud layer                              [kg/kg]
        1707             :       cloud_cover     ! cloud cover                                     [-]
        1708             :
        1709             :     ! Variables that need to be output for use in host models
        1710             :     real( kind = core_rknd ), intent(out), dimension(ngrdcol,nz) ::  &
        1711             :       wprcp,                 & ! w'r_c' (momentum levels)              [(kg/kg) m/s]
        1712             :       w_up_in_cloud,         & ! Average cloudy updraft velocity       [m/s]
        1713             :       w_down_in_cloud,       & ! Average cloudy downdraft velocity     [m/s]
        1714             :       cloudy_updraft_frac,   & ! cloudy updraft fraction               [-]
        1715             :       cloudy_downdraft_frac, & ! cloudy downdraft fraction             [-]
        1716             :       invrs_tau_zm             ! One divided by tau on zm levels       [1/s]
        1717             :
        1718             :     real( kind = core_rknd ), dimension(ngrdcol,nz), intent(out) :: &
        1719             :       Kh_zt, & ! Eddy diffusivity coefficient on thermodynamic levels   [m^2/s]
        1720             :       Kh_zm    ! Eddy diffusivity coefficient on momentum levels        [m^2/s]
        1721             :
        1722             : #ifdef CLUBB_CAM
        1723             :     real( kind = core_rknd), intent(out), dimension(ngrdcol,nz) :: &
        1724             :       qclvar        ! cloud water variance
        1725             : #endif
        1726             :
        1727             :     real( kind = core_rknd ), dimension(ngrdcol,nz), intent(out) :: &
        1728             :       thlprcp    ! thl'rc'              [K kg/kg]
        1729             :
        1730             :     integer, intent(inout) :: err_code_api ! Diagnostic, for if some calculation goes amiss.
        1731             :
        1732             : #ifdef GFDL
        1733             :     ! hlg, 2010-06-16
        1734             :     real( kind = core_rknd ), intent(inOUT), dimension(ngrdcol,nz, min(1,sclr_dim) , 2) :: &
        1735             :       RH_crit  ! critical relative humidity for droplet and ice nucleation
        1736             :     logical, intent(in)                 ::  do_liquid_only_in_clubb
        1737             : #endif
        1738             :
        1739             :     !$acc data copyin( gr, gr%zm, gr%zt, gr%dzm, gr%dzt, gr%invrs_dzt, gr%invrs_dzm, &
        1740             :     !$acc              gr%weights_zt2zm, gr%weights_zm2zt, &
        1741             :     !$acc              nu_vert_res_dep, nu_vert_res_dep%nu2, nu_vert_res_dep%nu9, &
        1742             :     !$acc              nu_vert_res_dep%nu1, nu_vert_res_dep%nu8, nu_vert_res_dep%nu10, &
        1743             :     !$acc              nu_vert_res_dep%nu6, &
        1744             :     !$acc              sclr_idx, clubb_params, &
        1745             :     !$acc              fcor, sfc_elevation, thlm_forcing, rtm_forcing, um_forcing, &
        1746             :     !$acc              vm_forcing, wprtp_forcing, wpthlp_forcing, rtp2_forcing, thlp2_forcing, &
        1747             :     !$acc              rtpthlp_forcing, wm_zm, wm_zt, rho_zm, rho, rho_ds_zm, rho_ds_zt, &
        1748             :     !$acc              invrs_rho_ds_zm, invrs_rho_ds_zt, thv_ds_zm, thv_ds_zt, rfrzm, &
        1749             :     !$acc              radf, wpthlp_sfc, &
        1750             :     !$acc              wprtp_sfc, upwp_sfc, vpwp_sfc, &
        1751             :     !$acc              upwp_sfc_pert, vpwp_sfc_pert, rtm_ref, thlm_ref, um_ref, &
        1752             :     !$acc              vm_ref, ug, vg, host_dx, host_dy, &
        1753             :     !$acc              pdf_params, pdf_params_zm ) &
        1754             :     !$acc        copy( um, upwp, vm, vpwp, up2, vp2, up3, vp3, rtm, wprtp, thlm, wpthlp, rtp2, &
        1755             :     !$acc              rtp3, thlp2, thlp3, rtpthlp, wp2, wp3, &
        1756             :     !$acc              p_in_Pa, exner, rcm, cloud_frac, wpthvp, wp2thvp, &
        1757             :     !$acc              rtpthvp, thlpthvp, wp2rtp, wp2thlp, uprcp, vprcp, rc_coef_zm, &
        1758             :     !$acc              wp4, wpup2, wpvp2, wp2up2, wp2vp2, ice_supersat_frac, um_pert, &
        1759             :     !$acc              vm_pert, upwp_pert, vpwp_pert, &
        1760             :     !$acc              pdf_params%w_1, pdf_params%w_2, &
        1761             :     !$acc              pdf_params%varnce_w_1, pdf_params%varnce_w_2, &
        1762             :     !$acc              pdf_params%rt_1, pdf_params%rt_2, &
        1763             :     !$acc              pdf_params%varnce_rt_1, pdf_params%varnce_rt_2,  &
        1764             :     !$acc              pdf_params%thl_1, pdf_params%thl_2, &
        1765             :     !$acc              pdf_params%varnce_thl_1, pdf_params%varnce_thl_2, &
        1766             :     !$acc              pdf_params%corr_w_rt_1, pdf_params%corr_w_rt_2,  &
        1767             :     !$acc              pdf_params%corr_w_thl_1, pdf_params%corr_w_thl_2, &
        1768             :     !$acc              pdf_params%corr_rt_thl_1, pdf_params%corr_rt_thl_2,&
        1769             :     !$acc              pdf_params%alpha_thl, pdf_params%alpha_rt, &
        1770             :     !$acc              pdf_params%crt_1, pdf_params%crt_2, pdf_params%cthl_1, &
        1771             :     !$acc              pdf_params%cthl_2, pdf_params%chi_1, &
        1772             :     !$acc              pdf_params%chi_2, pdf_params%stdev_chi_1, &
        1773             :     !$acc              pdf_params%stdev_chi_2, pdf_params%stdev_eta_1, &
        1774             :     !$acc              pdf_params%stdev_eta_2, pdf_params%covar_chi_eta_1, &
        1775             :     !$acc              pdf_params%covar_chi_eta_2, pdf_params%corr_w_chi_1, &
        1776             :     !$acc              pdf_params%corr_w_chi_2, pdf_params%corr_w_eta_1, &
        1777             :     !$acc              pdf_params%corr_w_eta_2, pdf_params%corr_chi_eta_1, &
        1778             :     !$acc              pdf_params%corr_chi_eta_2, pdf_params%rsatl_1, &
        1779             :     !$acc              pdf_params%rsatl_2, pdf_params%rc_1, pdf_params%rc_2, &
        1780             :     !$acc              pdf_params%cloud_frac_1, pdf_params%cloud_frac_2,  &
        1781             :     !$acc              pdf_params%mixt_frac, pdf_params%ice_supersat_frac_1, &
        1782             :     !$acc              pdf_params%ice_supersat_frac_2, &
        1783             :     !$acc              pdf_params_zm%w_1, pdf_params_zm%w_2, &
        1784             :     !$acc              pdf_params_zm%varnce_w_1, pdf_params_zm%varnce_w_2, &
        1785             :     !$acc              pdf_params_zm%rt_1, pdf_params_zm%rt_2, &
        1786             :     !$acc              pdf_params_zm%varnce_rt_1, pdf_params_zm%varnce_rt_2,  &
        1787             :     !$acc              pdf_params_zm%thl_1, pdf_params_zm%thl_2, &
        1788             :     !$acc              pdf_params_zm%varnce_thl_1, pdf_params_zm%varnce_thl_2, &
        1789             :     !$acc              pdf_params_zm%corr_w_rt_1, pdf_params_zm%corr_w_rt_2,  &
        1790             :     !$acc              pdf_params_zm%corr_w_thl_1, pdf_params_zm%corr_w_thl_2, &
        1791             :     !$acc              pdf_params_zm%corr_rt_thl_1, pdf_params_zm%corr_rt_thl_2,&
        1792             :     !$acc              pdf_params_zm%alpha_thl, pdf_params_zm%alpha_rt, &
        1793             :     !$acc              pdf_params_zm%crt_1, pdf_params_zm%crt_2, pdf_params_zm%cthl_1, &
        1794             :     !$acc              pdf_params_zm%cthl_2, pdf_params_zm%chi_1, &
        1795             :     !$acc              pdf_params_zm%chi_2, pdf_params_zm%stdev_chi_1, &
        1796             :     !$acc              pdf_params_zm%stdev_chi_2, pdf_params_zm%stdev_eta_1, &
        1797             :     !$acc              pdf_params_zm%stdev_eta_2, pdf_params_zm%covar_chi_eta_1, &
        1798             :     !$acc              pdf_params_zm%covar_chi_eta_2, pdf_params_zm%corr_w_chi_1, &
        1799             :     !$acc              pdf_params_zm%corr_w_chi_2, pdf_params_zm%corr_w_eta_1, &
        1800             :     !$acc              pdf_params_zm%corr_w_eta_2, pdf_params_zm%corr_chi_eta_1, &
        1801             :     !$acc              pdf_params_zm%corr_chi_eta_2, pdf_params_zm%rsatl_1, &
        1802             :     !$acc              pdf_params_zm%rsatl_2, pdf_params_zm%rc_1, pdf_params_zm%rc_2, &
        1803             :     !$acc              pdf_params_zm%cloud_frac_1, pdf_params_zm%cloud_frac_2,  &
        1804             :     !$acc              pdf_params_zm%mixt_frac, pdf_params_zm%ice_supersat_frac_1, &
        1805             :     !$acc              pdf_params_zm%ice_supersat_frac_2 ) &
        1806             :     !$acc     copyout( rcm_in_layer, cloud_cover, wprcp, w_up_in_cloud, w_down_in_cloud, &
        1807             :     !$acc              cloudy_updraft_frac, cloudy_downdraft_frac, invrs_tau_zm, Kh_zt, &
        1808             :     !$acc              Kh_zm, &
        1809             :     !$acc              thlprcp )
        1810             :
        1811             :     !$acc data if( sclr_dim > 0 ) &
        1812             :     !$acc      copyin( sclr_tol, sclrm_forcing, wpsclrp_sfc ) &
        1813             :     !$acc        copy( sclrm, wpsclrp, sclrp2, sclrp3, sclrprtp, sclrpthlp, sclrpthvp )
        1814             :
        1815             :     !$acc data if( edsclr_dim > 0 ) &
        1816             :     !$acc      copyin( wpedsclrp_sfc, edsclrm_forcing ) &
        1817             :     !$acc        copy( edsclrm )
        1818             :
        1819             :     !$acc data if( hydromet_dim > 0 ) &
        1820             :     !$acc      copyin( hydromet, wphydrometp, wp2hmp, rtphmp_zt, thlphmp_zt, &
        1821             :     !$acc              l_mix_rat_hm )
        1822             :
        1823             : #ifdef CLUBB_CAM
        1824             :     !$acc data copyout( qclvar )
        1825             : #endif
        1826             :
        1827             : #ifdef CLUBBND_CAM
        1828             :     !$acc data copyin( varmu )
        1829             : #endif
        1830             :
        1831             : #ifdef GFDL
        1832             :     !$acc data if( sclr_dim > 0 ) copy( sclrm_trsport_only )
        1833             : #endif
        1834             :
        1835             :     call advance_clubb_core( gr, nz, ngrdcol, &
        1836             :       l_implemented, dt, fcor, sfc_elevation,            &    ! intent(in)
        1837             :       hydromet_dim, &                                         ! intent(in)
        1838             :       sclr_dim, sclr_tol, edsclr_dim, sclr_idx, &             ! intent(in)
        1839             :       thlm_forcing, rtm_forcing, um_forcing, vm_forcing, &    ! intent(in)
        1840             :       sclrm_forcing, edsclrm_forcing, wprtp_forcing, &        ! intent(in)
        1841             :       wpthlp_forcing, rtp2_forcing, thlp2_forcing, &          ! intent(in)
        1842             :       rtpthlp_forcing, wm_zm, wm_zt, &                        ! intent(in)
        1843             :       wpthlp_sfc, wprtp_sfc, upwp_sfc, vpwp_sfc, &            ! intent(in)
        1844             :       wpsclrp_sfc, wpedsclrp_sfc, &                           ! intent(in)
        1845             :       upwp_sfc_pert, vpwp_sfc_pert, &                         ! intent(in)
        1846             :       rtm_ref, thlm_ref, um_ref, vm_ref, ug, vg, &            ! Intent(in)
        1847             :       p_in_Pa, rho_zm, rho, exner, &                          ! intent(in)
        1848             :       rho_ds_zm, rho_ds_zt, invrs_rho_ds_zm, &                ! intent(in)
        1849             :       invrs_rho_ds_zt, thv_ds_zm, thv_ds_zt, &                ! intent(in)
        1850             :       hydromet, l_mix_rat_hm,&                                ! intent(in)
        1851             :       rfrzm, radf, &                                          ! intent(in)
        1852             : #ifdef CLUBBND_CAM
        1853             :       varmu, &
        1854             : #endif
        1855             :       wphydrometp, wp2hmp, rtphmp_zt, thlphmp_zt, &           ! intent(in)
        1856             :       host_dx, host_dy, &                                     ! intent(in)
        1857             :       clubb_params, nu_vert_res_dep, lmin, &                  ! intent(in)
        1858             :       clubb_config_flags, &                                   ! intent(in)
        1859             :       stats_metadata, &                                       ! intent(in)
        1860             :       stats_zt, stats_zm, stats_sfc, &                        ! intent(inout)
        1861             :       um, vm, upwp, vpwp, up2, vp2, up3, vp3, &               ! intent(inout)
        1862             :       thlm, rtm, wprtp, wpthlp, &                             ! intent(inout)
        1863             :       wp2, wp3, rtp2, rtp3, thlp2, thlp3, rtpthlp, &          ! intent(inout)
        1864             :       sclrm,   &
        1865             : #ifdef GFDL
        1866             :                sclrm_trsport_only,  &  ! h1g, 2010-06-16      ! intent(inout)
        1867             : #endif
        1868             :       sclrp2, sclrp3, sclrprtp, sclrpthlp, &                  ! intent(inout)
        1869             :       wpsclrp, edsclrm, &                                     ! intent(inout)
        1870             :       rcm, cloud_frac, &                                      ! intent(inout)
        1871             :       wpthvp, wp2thvp, rtpthvp, thlpthvp, &                   ! intent(inout)
        1872             :       sclrpthvp, &                                            ! intent(inout)
        1873             :       wp2rtp, wp2thlp, uprcp, vprcp, rc_coef_zm, wp4, &       ! intent(inout)
        1874             :       wpup2, wpvp2, wp2up2, wp2vp2, ice_supersat_frac, &      ! intent(inout)
        1875             :       um_pert, vm_pert, upwp_pert, vpwp_pert, &               ! intent(inout)
        1876             :       pdf_params, pdf_params_zm, &                            ! intent(inout)
        1877             :       pdf_implicit_coefs_terms, &                             ! intent(inout)
        1878             : #ifdef GFDL
        1879             :                RH_crit, & !h1g, 2010-06-16                    ! intent(inout)
        1880             :                do_liquid_only_in_clubb, &                     ! intent(in)
        1881             : #endif
        1882             :       Kh_zm, Kh_zt, &                                         ! intent(out)
        1883             : #ifdef CLUBB_CAM
        1884             :                qclvar, &                                      ! intent(out)
        1885             : #endif
        1886             :       thlprcp, wprcp, w_up_in_cloud, w_down_in_cloud, &       ! intent(out)
        1887             :       cloudy_updraft_frac, cloudy_downdraft_frac, &           ! intent(out)
        1888             :       rcm_in_layer, cloud_cover, invrs_tau_zm, &              ! intent(out)
        1889     8935056 :       err_code_api )                                          ! intent(out)
        1890             :
        1891             :     !$acc end data
        1892             :     !$acc end data
        1893             :     !$acc end data
        1894             :     !$acc end data
        1895             :
        1896             : #ifdef CLUBB_CAM
        1897             :     !$acc end data
        1898             : #endif
        1899             :
        1900             : #ifdef CLUBBND_CAM
        1901             :     !$acc end data
        1902             : #endif
        1903             :
        1904             : #ifdef GFDL
        1905             :     !$acc end data
        1906             : #endif
        1907             :
        1908             :
        1909     8935056 :   end subroutine advance_clubb_core_api_multi_col
        1910             :
        1911             :   !================================================================================================
        1912             :   ! cleanup_clubb_core_api - Frees memory used by the model.
        1913             :   !================================================================================================
        1914             :
        1915           0 :   subroutine cleanup_clubb_core_api( gr )
        1916             :
        1917             :     use advance_clubb_core_module, only : cleanup_clubb_core
        1918             :
        1919             :
        1920             :
        1921             :     implicit none
        1922             :
        1923             :     type(grid), target, intent(inout) :: gr
        1924           0 :     call cleanup_clubb_core( gr ) ! intent(inout)
        1925             :
        1926           0 :   end subroutine cleanup_clubb_core_api
        1927             :
        1928             :   !================================================================================================
        1929             :   ! gregorian2julian_day - Computes the number of days since 1 January 4713 BC.
        1930             :   !================================================================================================
        1931             :
        1932           0 :   integer function gregorian2julian_day_api( &
        1933             :     day, month, year )
        1934             :
        1935             :     use calendar, only : gregorian2julian_day
        1936             :
        1937             :     implicit none
        1938             :
        1939             :     ! Input Variables
        1940             :     integer, intent(in) ::  &
        1941             :       day,        & ! Gregorian Calendar Day for given Month        [dd]
        1942             :       month,      & ! Gregorian Calendar Month for given Year       [mm]
        1943             :       year          ! Gregorian Calendar Year                       [yyyy]
        1944             :
        1945             :     gregorian2julian_day_api = gregorian2julian_day( &
        1946           0 :       day, month, year )
        1947           0 :   end function gregorian2julian_day_api
        1948             :
        1949             :   !================================================================================================
        1950             :   ! compute_current_date - Computes the current date and the seconds since that date.
        1951             :   !================================================================================================
        1952             :
        1953           0 :   subroutine compute_current_date_api( &
        1954             :     previous_day, previous_month, &
        1955             :     previous_year,  &
        1956             :     seconds_since_previous_date, &
        1957             :     current_day, current_month, &
        1958             :     current_year, &
        1959             :     seconds_since_current_date )
        1960             :
        1961             :     use calendar, only : compute_current_date
        1962             :
        1963             :     implicit none
        1964             :
        1965             :     ! Previous date
        1966             :     integer, intent(in) :: &
        1967             :       previous_day,    & ! Day of the month      [dd]
        1968             :       previous_month,  & ! Month of the year     [mm]
        1969             :       previous_year      ! Year                  [yyyy]
        1970             :
        1971             :     real(kind=time_precision), intent(in) :: &
        1972             :       seconds_since_previous_date ! [s]
        1973             :
        1974             :     ! Output Variable(s)
        1975             :
        1976             :     ! Current date
        1977             :     integer, intent(out) :: &
        1978             :       current_day,     & ! Day of the month      [dd]
        1979             :       current_month,   & ! Month of the year     [mm]
        1980             :       current_year       ! Year                  [yyyy]
        1981             :
        1982             :     real(kind=time_precision), intent(out) :: &
        1983             :       seconds_since_current_date
        1984             :
        1985             :     call compute_current_date( &
        1986             :       previous_day, previous_month, & ! intent(in)
        1987             :       previous_year,  & ! intent(in)
        1988             :       seconds_since_previous_date, & ! intent(in)
        1989             :       current_day, current_month, & ! intent(out)
        1990             :       current_year, & ! intent(out)
        1991           0 :       seconds_since_current_date ) ! intent(out)
        1992           0 :   end subroutine compute_current_date_api
        1993             :
        1994             :   !================================================================================================
        1995             :   ! leap_year - Determines if the given year is a leap year.
        1996             :   !================================================================================================
        1997             :
        1998           0 :   logical function leap_year_api( &
        1999             :     year )
        2000             :
        2001             :     use calendar, only : leap_year
        2002             :
        2003             :     implicit none
        2004             :
        2005             :     ! External
        2006             :     intrinsic :: mod
        2007             :
        2008             :     ! Input Variable(s)
        2009             :     integer, intent(in) :: year ! Gregorian Calendar Year [yyyy]
        2010             :
        2011             :     leap_year_api = leap_year( &
        2012           0 :       year )
        2013           0 :   end function leap_year_api
        2014             :
        2015             :   !================================================================================================
        2016             :   ! set_clubb_debug_level - Controls the importance of error messages sent to the console.
        2017             :   !================================================================================================
        2018             :
        2019        1536 :   subroutine set_clubb_debug_level_api( &
        2020             :     level )
        2021             :
        2022             :     use error_code, only: &
        2023             :         set_clubb_debug_level ! Procedure
        2024             :
        2025             :     implicit none
        2026             :
        2027             :     ! Input variable
        2028             :     integer, intent(in) :: level ! The debug level being checked against the current setting
        2029             :
        2030             :     call set_clubb_debug_level( &
        2031        1536 :       level ) ! intent(in)
        2032        1536 :   end subroutine set_clubb_debug_level_api
        2033             :
        2034             :   !================================================================================================
        2035             :   ! clubb_at_least_debug_level - Checks to see if clubb has been set to a specified debug level.
        2036             :   !================================================================================================
        2037             :
        2038           0 :   logical function clubb_at_least_debug_level_api( &
        2039             :     level )
        2040             :
        2041             :     use error_code, only: &
        2042             :         clubb_at_least_debug_level ! Procedure
        2043             :
        2044             :     implicit none
        2045             :
        2046             :     ! Input variable
        2047             :     integer, intent(in) :: level   ! The debug level being checked against the current setting
        2048             :
        2049             :     clubb_at_least_debug_level_api = clubb_at_least_debug_level( &
        2050           0 :       level )
        2051           0 :   end function clubb_at_least_debug_level_api
        2052             :
        2053             :   !================================================================================================
        2054             :   ! vertical_integral - Computes the vertical integral.
        2055             :   !================================================================================================
        2056             :
        2057           0 :   function vertical_integral_api( &
        2058           0 :     total_idx, rho_ds, &
        2059           0 :     field, dz )
        2060             :
        2061             :     use advance_helper_module, only : vertical_integral
        2062             :
        2063             :     implicit none
        2064             :
        2065             :     ! Input variables
        2066             :     integer, intent(in) :: &
        2067             :       total_idx  ! The total numer of indices within the range of averaging
        2068             :
        2069             :     real( kind = core_rknd ), dimension(total_idx), intent(in) ::  &
        2070             :       rho_ds,  & ! Dry, static density                   [kg/m^3]
        2071             :       field,   & ! The field to be vertically averaged   [Units vary]
        2072             :       dz         ! Level thickness                       [1/m]
        2073             :     ! Note:  The rho_ds and field points need to be arranged from
        2074             :     !        lowest to highest in altitude, with rho_ds(1) and
        2075             :     !        field(1) actually their respective values at level k = begin_idx.
        2076             :
        2077             :     real( kind = core_rknd ) :: &
        2078             :       vertical_integral_api ! Integral in the numerator (see description)
        2079             :
        2080             :     vertical_integral_api = vertical_integral( &
        2081             :       total_idx, rho_ds, &
        2082           0 :       field, dz )
        2083           0 :   end function vertical_integral_api
        2084             :
        2085             :   !================================================================================================
        2086             :   ! setup_grid_heights - Sets the heights and interpolation weights of the column.
        2087             :   !================================================================================================
        2088             :
        2089           0 :   subroutine setup_grid_heights_api_single_col( &
        2090             :     l_implemented, grid_type,  &
        2091           0 :     deltaz, zm_init, momentum_heights,  &
        2092           0 :     gr, thermodynamic_heights )
        2093             :
        2094             :     use grid_class, only: &
        2095             :         grid, & ! Type
        2096             :         setup_grid_heights
        2097             :
        2098             :     use error_code, only : &
        2099             :         clubb_fatal_error       ! Constant
        2100             :
        2101             :     implicit none
        2102             :
        2103             :     ! Input Variables
        2104             :
        2105             :     type(grid), target, intent(inout) :: gr
        2106             :
        2107             :     ! Flag to see if CLUBB is running on it's own,
        2108             :     ! or if it's implemented as part of a host model.
        2109             :     logical, intent(in) :: l_implemented
        2110             :
        2111             :     ! If CLUBB is running on it's own, this option determines if it is using:
        2112             :     ! 1) an evenly-spaced grid;
        2113             :     ! 2) a stretched (unevenly-spaced) grid entered on the thermodynamic grid
        2114             :     !    levels (with momentum levels set halfway between thermodynamic levels);
        2115             :     !    or
        2116             :     ! 3) a stretched (unevenly-spaced) grid entered on the momentum grid levels
        2117             :     !    (with thermodynamic levels set halfway between momentum levels).
        2118             :     integer, intent(in) :: grid_type
        2119             :
        2120             :     ! If the CLUBB model is running by itself, and is using an evenly-spaced
        2121             :     ! grid (grid_type = 1), it needs the vertical grid spacing and
        2122             :     ! momentum-level starting altitude as input.
        2123             :     real( kind = core_rknd ), intent(in) ::  &
        2124             :       deltaz,   & ! Vertical grid spacing                  [m]
        2125             :       zm_init     ! Initial grid altitude (momentum level) [m]
        2126             :
        2127             :
        2128             :     ! If the CLUBB parameterization is implemented in a host model, it needs to
        2129             :     ! use the host model's momentum level altitudes and thermodynamic level
        2130             :     ! altitudes.
        2131             :     ! If the CLUBB model is running by itself, but is using a stretched grid
        2132             :     ! entered on thermodynamic levels (grid_type = 2), it needs to use the
        2133             :     ! thermodynamic level altitudes as input.
        2134             :     ! If the CLUBB model is running by itself, but is using a stretched grid
        2135             :     ! entered on momentum levels (grid_type = 3), it needs to use the momentum
        2136             :     ! level altitudes as input.
        2137             :     real( kind = core_rknd ), intent(in), dimension(gr%nz) ::  &
        2138             :       momentum_heights,   & ! Momentum level altitudes (input)      [m]
        2139             :       thermodynamic_heights ! Thermodynamic level altitudes (input) [m]
        2140             :
        2141             :     ! ------------------- Local Variables -------------------
        2142             :
        2143             :     real( kind = core_rknd ), dimension(1) ::  &
        2144             :       deltaz_col,   & ! Vertical grid spacing                  [m]
        2145             :       zm_init_col     ! Initial grid altitude (momentum level) [m]
        2146             :
        2147             :     real( kind = core_rknd ), dimension(1,gr%nz) ::  &
        2148           0 :       momentum_heights_col,   & ! Momentum level altitudes (input)      [m]
        2149           0 :       thermodynamic_heights_col ! Thermodynamic level altitudes (input) [m]
        2150             :
        2151           0 :     deltaz_col(1) = deltaz
        2152           0 :     zm_init_col(1) = zm_init
        2153           0 :     momentum_heights_col(1,:) = momentum_heights
        2154           0 :     thermodynamic_heights_col(1,:) = thermodynamic_heights
        2155             :
        2156             :     call setup_grid_heights( &
        2157             :       gr%nz, 1, & ! intent(in)
        2158             :       l_implemented, grid_type,  & ! intent(in)
        2159             :       deltaz_col, zm_init_col, momentum_heights_col,  & ! intent(in)
        2160             :       thermodynamic_heights_col, & ! intent(in)
        2161           0 :       gr ) ! intent(inout)
        2162             :
        2163           0 :     if ( err_code == clubb_fatal_error ) error stop
        2164             :
        2165           0 :   end subroutine setup_grid_heights_api_single_col
        2166             :
        2167             :   !================================================================================================
        2168             :   ! setup_grid_heights - Sets the heights and interpolation weights of the column.
        2169             :   !================================================================================================
        2170             :
        2171           0 :   subroutine setup_grid_heights_api_multi_col( &
        2172             :       nz, ngrdcol, &
        2173             :       l_implemented, grid_type,  &
        2174           0 :       deltaz, zm_init, momentum_heights,  &
        2175           0 :       gr, thermodynamic_heights )
        2176             :
        2177             :     use grid_class, only: &
        2178             :         grid, & ! Type
        2179             :         setup_grid_heights
        2180             :
        2181             :     use error_code, only : &
        2182             :         clubb_fatal_error       ! Constant
        2183             :
        2184             :     implicit none
        2185             :
        2186             :     ! Input Variables
        2187             :     integer, intent(in) :: &
        2188             :       nz, &
        2189             :       ngrdcol
        2190             :
        2191             :     type (grid), target, intent(inout) :: gr
        2192             :
        2193             :     ! Flag to see if CLUBB is running on it's own,
        2194             :     ! or if it's implemented as part of a host model.
        2195             :     logical, intent(in) :: l_implemented
        2196             :
        2197             :     ! If CLUBB is running on it's own, this option determines if it is using:
        2198             :     ! 1) an evenly-spaced grid;
        2199             :     ! 2) a stretched (unevenly-spaced) grid entered on the thermodynamic grid
        2200             :     !    levels (with momentum levels set halfway between thermodynamic levels);
        2201             :     !    or
        2202             :     ! 3) a stretched (unevenly-spaced) grid entered on the momentum grid levels
        2203             :     !    (with thermodynamic levels set halfway between momentum levels).
        2204             :     integer, intent(in) :: grid_type
        2205             :
        2206             :     ! If the CLUBB model is running by itself, and is using an evenly-spaced
        2207             :     ! grid (grid_type = 1), it needs the vertical grid spacing and
        2208             :     ! momentum-level starting altitude as input.
        2209             :     real( kind = core_rknd ), dimension(ngrdcol), intent(in) ::  &
        2210             :       deltaz,   & ! Vertical grid spacing                  [m]
        2211             :       zm_init     ! Initial grid altitude (momentum level) [m]
        2212             :
        2213             :
        2214             :     ! If the CLUBB parameterization is implemented in a host model, it needs to
        2215             :     ! use the host model's momentum level altitudes and thermodynamic level
        2216             :     ! altitudes.
        2217             :     ! If the CLUBB model is running by itself, but is using a stretched grid
        2218             :     ! entered on thermodynamic levels (grid_type = 2), it needs to use the
        2219             :     ! thermodynamic level altitudes as input.
        2220             :     ! If the CLUBB model is running by itself, but is using a stretched grid
        2221             :     ! entered on momentum levels (grid_type = 3), it needs to use the momentum
        2222             :     ! level altitudes as input.
        2223             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol,nz) ::  &
        2224             :       momentum_heights,   & ! Momentum level altitudes (input)      [m]
        2225             :       thermodynamic_heights ! Thermodynamic level altitudes (input) [m]
        2226             :
        2227             :     call setup_grid_heights( &
        2228             :       nz, ngrdcol, & ! intent(in)
        2229             :       l_implemented, grid_type,  & ! intent(in)
        2230             :       deltaz, zm_init, momentum_heights,  & ! intent(in)
        2231             :       thermodynamic_heights, & ! intent(in)
        2232           0 :       gr ) ! intent(inout)
        2233             :
        2234           0 :     if ( err_code == clubb_fatal_error ) error stop
        2235             :
        2236           0 :   end subroutine setup_grid_heights_api_multi_col
        2237             :
        2238             :   !================================================================================================
        2239             :   ! setup_grid - This subroutine sets up the CLUBB vertical grid for a single column
        2240             :   !================================================================================================
        2241           0 :   subroutine setup_grid_api_single_col( nzmax, sfc_elevation, l_implemented, &
        2242             :                                         grid_type, deltaz, zm_init, zm_top, &
        2243           0 :                                         momentum_heights, thermodynamic_heights, &
        2244             :                                         gr )
        2245             :
        2246             :     use grid_class, only: &
        2247             :         grid, & ! Type
        2248             :         setup_grid
        2249             :
        2250             :     implicit none
        2251             :
        2252             :     ! Input Variables
        2253             :     integer, intent(in) ::  &
        2254             :       nzmax  ! Number of vertical levels in grid      [#]
        2255             :
        2256             :     type(grid), target, intent(inout) :: gr
        2257             :
        2258             :     real( kind = core_rknd ), intent(in) ::  &
        2259             :       sfc_elevation  ! Elevation of ground level    [m AMSL]
        2260             :
        2261             :     logical, intent(in) :: l_implemented
        2262             :
        2263             :     integer, intent(in) :: grid_type
        2264             :
        2265             :     real( kind = core_rknd ), intent(in) ::  &
        2266             :       deltaz,   & ! Vertical grid spacing                  [m]
        2267             :       zm_init,  & ! Initial grid altitude (momentum level) [m]
        2268             :       zm_top      ! Maximum grid altitude (momentum level) [m]
        2269             :
        2270             :     real( kind = core_rknd ), intent(in), dimension(nzmax) ::  &
        2271             :       momentum_heights,   & ! Momentum level altitudes (input)      [m]
        2272             :       thermodynamic_heights ! Thermodynamic level altitudes (input) [m]
        2273             :
        2274             :     real( kind = core_rknd ), dimension(1) ::  &
        2275             :       sfc_elevation_col  ! Elevation of ground level    [m AMSL]
        2276             :
        2277             :     real( kind = core_rknd ), dimension(1) ::  &
        2278             :       deltaz_col,   & ! Vertical grid spacing                  [m]
        2279             :       zm_init_col,  & ! Initial grid altitude (momentum level) [m]
        2280             :       zm_top_col      ! Maximum grid altitude (momentum level) [m]
        2281             :
        2282             :     real( kind = core_rknd ), dimension(1,nzmax) ::  &
        2283           0 :       momentum_heights_col,   & ! Momentum level altitudes (input)      [m]
        2284           0 :       thermodynamic_heights_col ! Thermodynamic level altitudes (input) [m]
        2285             :
        2286           0 :     sfc_elevation_col(1)            = sfc_elevation
        2287           0 :     deltaz_col(1)                   = deltaz
        2288           0 :     zm_init_col(1)                  = zm_init
        2289           0 :     zm_top_col(1)                   = zm_top
        2290           0 :     momentum_heights_col(1,:)       = momentum_heights
        2291           0 :     thermodynamic_heights_col(1,:)  = thermodynamic_heights
        2292             :
        2293             :     call setup_grid( nzmax, 1, sfc_elevation_col, l_implemented,      & ! intent(in)
        2294             :                      grid_type, deltaz_col, zm_init_col, zm_top_col,  & ! intent(in)
        2295             :                      momentum_heights_col, thermodynamic_heights_col, & ! intent(in)
        2296           0 :                      gr )                                               ! intent(out)
        2297             :
        2298           0 :   end subroutine setup_grid_api_single_col
        2299             :
        2300             :   !================================================================================================
        2301             :   ! setup_grid - This subroutine sets up the CLUBB vertical grid.
        2302             :   !================================================================================================
        2303     4467528 :   subroutine setup_grid_api_multi_col( nzmax, ngrdcol, sfc_elevation, l_implemented, &
        2304     4467528 :                                        grid_type, deltaz, zm_init, zm_top, &
        2305     4467528 :                                        momentum_heights, thermodynamic_heights, &
        2306             :                                        gr )
        2307             :
        2308             :     use grid_class, only: &
        2309             :         grid, & ! Type
        2310             :         setup_grid
        2311             :
        2312             :     implicit none
        2313             :
        2314             :     ! Input Variables
        2315             :     integer, intent(in) ::  &
        2316             :       nzmax,  & ! Number of vertical levels in grid      [#]
        2317             :       ngrdcol   ! Number of grid columns                 [#]
        2318             :
        2319             :     type (grid), target, intent(inout) :: gr
        2320             :
        2321             :     real( kind = core_rknd ), dimension(ngrdcol), intent(in) ::  &
        2322             :       sfc_elevation  ! Elevation of ground level    [m AMSL]
        2323             :
        2324             :     logical, intent(in) :: l_implemented
        2325             :
        2326             :     integer, intent(in) :: grid_type
        2327             :
        2328             :     real( kind = core_rknd ), dimension(ngrdcol), intent(in) ::  &
        2329             :       deltaz,   & ! Vertical grid spacing                  [m]
        2330             :       zm_init,  & ! Initial grid altitude (momentum level) [m]
        2331             :       zm_top      ! Maximum grid altitude (momentum level) [m]
        2332             :
        2333             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol,nzmax) ::  &
        2334             :       momentum_heights,   & ! Momentum level altitudes (input)      [m]
        2335             :       thermodynamic_heights ! Thermodynamic level altitudes (input) [m]
        2336             :
        2337             :
        2338             :     call setup_grid( nzmax, ngrdcol, sfc_elevation, l_implemented, & ! intent(in)
        2339             :                      grid_type, deltaz, zm_init, zm_top,           & ! intent(in)
        2340             :                      momentum_heights, thermodynamic_heights,      & ! intent(in)
        2341     4467528 :                      gr )                                            ! intent(out)
        2342             :
        2343     4467528 :   end subroutine setup_grid_api_multi_col
        2344             :
        2345             :   !================================================================================================
        2346             :   ! lin_interpolate_two_points - Computes a linear interpolation of the value of a variable.
        2347             :   !================================================================================================
        2348             :
        2349           0 :   function lin_interpolate_two_points_api( &
        2350             :     height_int, height_high, height_low, &
        2351             :     var_high, var_low )
        2352             :
        2353             :     use interpolation, only : lin_interpolate_two_points
        2354             :
        2355             :     implicit none
        2356             :
        2357             :     real( kind = core_rknd ), intent(in) :: &
        2358             :       height_int,  & ! Height to be interpolated to     [m]
        2359             :       height_high, & ! Height above the interpolation   [m]
        2360             :       height_low,  & ! Height below the interpolation   [m]
        2361             :       var_high,    & ! Variable above the interpolation [units vary]
        2362             :       var_low        ! Variable below the interpolation [units vary]
        2363             :
        2364             :     ! Output Variables
        2365             :     real( kind = core_rknd ) :: lin_interpolate_two_points_api
        2366             :
        2367             :     lin_interpolate_two_points_api = lin_interpolate_two_points( &
        2368             :       height_int, height_high, height_low, &
        2369           0 :       var_high, var_low )
        2370             :
        2371           0 :   end function lin_interpolate_two_points_api
        2372             :
        2373             :   !================================================================================================
        2374             :   ! lin_interpolate_on_grid - Linear interpolation for 25 June 1996 altocumulus case.
        2375             :   !================================================================================================
        2376             :
        2377           0 :   subroutine lin_interpolate_on_grid_api( &
        2378           0 :     nparam, xlist, tlist, xvalue, tvalue )
        2379             :
        2380             :     use interpolation, only : lin_interpolate_on_grid
        2381             :
        2382             :     implicit none
        2383             :
        2384             :     ! Input Variables
        2385             :     integer, intent(in) :: nparam ! Number of parameters in xlist and tlist
        2386             :
        2387             :     ! Input/Output Variables
        2388             :     real( kind = core_rknd ), intent(inout), dimension(nparam) ::  &
        2389             :       xlist,  & ! List of x-values (independent variable)
        2390             :       tlist     ! List of t-values (dependent variable)
        2391             :
        2392             :     real( kind = core_rknd ), intent(in) ::  &
        2393             :       xvalue  ! x-value at which to interpolate
        2394             :
        2395             :     real( kind = core_rknd ), intent(inout) ::  &
        2396             :       tvalue  ! t-value solved by interpolation
        2397             :
        2398             :     call lin_interpolate_on_grid( &
        2399             :       nparam, xlist, tlist, xvalue, & ! intent(in)
        2400           0 :       tvalue ) ! intent(inout)
        2401             :
        2402           0 :   end subroutine lin_interpolate_on_grid_api
        2403             :
        2404             :   !================================================================================================
        2405             :   ! read_parameters - Read a namelist containing the model parameters.
        2406             :   !================================================================================================
        2407             :
        2408        1536 :   subroutine read_parameters_api( ngrdcol, iunit, filename, &
        2409             :                                   C1, C1b, C1c, C2rt, C2thl, C2rtthl, &
        2410             :                                   C4, C_uu_shr, C_uu_buoy, C6rt, C6rtb, C6rtc, &
        2411             :                                   C6thl, C6thlb, C6thlc, C7, C7b, C7c, C8, C8b, C10, &
        2412             :                                   C11, C11b, C11c, C12, C13, C14, C_wp2_pr_dfsn, C_wp3_pr_tp, &
        2413             :                                   C_wp3_pr_turb, C_wp3_pr_dfsn, C_wp2_splat, &
        2414             :                                   C6rt_Lscale0, C6thl_Lscale0, C7_Lscale0, wpxp_L_thresh, &
        2415             :                                   c_K, c_K1, nu1, c_K2, nu2, c_K6, nu6, c_K8, nu8, &
        2416             :                                   c_K9, nu9, nu10, c_K_hm, c_K_hmb, K_hm_min_coef, nu_hm, &
        2417             :                                   slope_coef_spread_DG_means_w, pdf_component_stdev_factor_w, &
        2418             :                                   coef_spread_DG_means_rt, coef_spread_DG_means_thl, &
        2419             :                                   gamma_coef, gamma_coefb, gamma_coefc, mu, beta, lmin_coef, &
        2420             :                                   omicron, zeta_vrnce_rat, upsilon_precip_frac_rat, &
        2421             :                                   lambda0_stability_coef, mult_coef, taumin, taumax, &
        2422             :                                   Lscale_mu_coef, Lscale_pert_coef, alpha_corr, &
        2423             :                                   Skw_denom_coef, c_K10, c_K10h, thlp2_rad_coef, &
        2424             :                                   thlp2_rad_cloud_frac_thresh, up2_sfc_coef, &
        2425             :                                   Skw_max_mag, xp3_coef_base, xp3_coef_slope, &
        2426             :                                   altitude_threshold, rtp2_clip_coef, C_invrs_tau_bkgnd, &
        2427             :                                   C_invrs_tau_sfc, C_invrs_tau_shear, C_invrs_tau_N2, &
        2428             :                                   C_invrs_tau_N2_wp2, C_invrs_tau_N2_xp2, &
        2429             :                                   C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
        2430             :                                   C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
        2431             :                                   Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
        2432             :                                   wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace, &
        2433             :                                   clubb_params )
        2434             :
        2435             :     use parameters_tunable, only : read_parameters
        2436             :
        2437             :     use parameter_indices, only:  &
        2438             :         nparams ! Variable(s)
        2439             :
        2440             :     implicit none
        2441             :
        2442             :     ! Input variables
        2443             :     integer, intent(in) :: &
        2444             :       ngrdcol
        2445             :
        2446             :     integer, intent(in) :: iunit
        2447             :
        2448             :     character(len=*), intent(in) :: filename
        2449             :
        2450             :     ! Input/Output variables
        2451             :     real( kind = core_rknd ), intent(inout) :: &
        2452             :       C1, C1b, C1c, C2rt, C2thl, C2rtthl, &
        2453             :       C4, C_uu_shr, C_uu_buoy, C6rt, C6rtb, C6rtc, C6thl, C6thlb, C6thlc, &
        2454             :       C7, C7b, C7c, C8, C8b, C10, &
        2455             :       C11, C11b, C11c, C12, C13, C14, C_wp2_pr_dfsn, C_wp3_pr_tp, &
        2456             :       C_wp3_pr_turb, C_wp3_pr_dfsn, C_wp2_splat, &
        2457             :       C6rt_Lscale0, C6thl_Lscale0, C7_Lscale0, wpxp_L_thresh, &
        2458             :       c_K, c_K1, nu1, c_K2, nu2, c_K6, nu6, c_K8, nu8,  &
        2459             :       c_K9, nu9, nu10, c_K_hm, c_K_hmb, K_hm_min_coef, nu_hm, &
        2460             :       slope_coef_spread_DG_means_w, pdf_component_stdev_factor_w, &
        2461             :       coef_spread_DG_means_rt, coef_spread_DG_means_thl, &
        2462             :       gamma_coef, gamma_coefb, gamma_coefc, mu, beta, lmin_coef, &
        2463             :       omicron, zeta_vrnce_rat, upsilon_precip_frac_rat, &
        2464             :       lambda0_stability_coef, mult_coef, taumin, taumax, Lscale_mu_coef, &
        2465             :       Lscale_pert_coef, alpha_corr, Skw_denom_coef, c_K10, c_K10h, &
        2466             :       thlp2_rad_coef, thlp2_rad_cloud_frac_thresh, up2_sfc_coef, &
        2467             :       Skw_max_mag, xp3_coef_base, xp3_coef_slope, altitude_threshold, &
        2468             :       rtp2_clip_coef, C_invrs_tau_bkgnd, C_invrs_tau_sfc, &
        2469             :       C_invrs_tau_shear, C_invrs_tau_N2, C_invrs_tau_N2_wp2, &
        2470             :       C_invrs_tau_N2_xp2, C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
        2471             :       C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
        2472             :       Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
        2473             :       wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace
        2474             :
        2475             :     ! Output variables
        2476             :     real( kind = core_rknd ), intent(out), dimension(nparams) :: clubb_params
        2477             :
        2478             :     call read_parameters( ngrdcol, iunit, filename, & ! intent(in)
        2479             :                           C1, C1b, C1c, C2rt, C2thl, C2rtthl, &
        2480             :                           C4, C_uu_shr, C_uu_buoy, C6rt, C6rtb, C6rtc, &
        2481             :                           C6thl, C6thlb, C6thlc, C7, C7b, C7c, C8, C8b, C10, &
        2482             :                           C11, C11b, C11c, C12, C13, C14, C_wp2_pr_dfsn, C_wp3_pr_tp, &
        2483             :                           C_wp3_pr_turb, C_wp3_pr_dfsn, C_wp2_splat, &
        2484             :                           C6rt_Lscale0, C6thl_Lscale0, C7_Lscale0, wpxp_L_thresh, &
        2485             :                           c_K, c_K1, nu1, c_K2, nu2, c_K6, nu6, c_K8, nu8, &
        2486             :                           c_K9, nu9, nu10, c_K_hm, c_K_hmb, K_hm_min_coef, nu_hm, &
        2487             :                           slope_coef_spread_DG_means_w, pdf_component_stdev_factor_w, &
        2488             :                           coef_spread_DG_means_rt, coef_spread_DG_means_thl, &
        2489             :                           gamma_coef, gamma_coefb, gamma_coefc, mu, beta, lmin_coef, &
        2490             :                           omicron, zeta_vrnce_rat, upsilon_precip_frac_rat, &
        2491             :                           lambda0_stability_coef, mult_coef, taumin, taumax, &
        2492             :                           Lscale_mu_coef, Lscale_pert_coef, alpha_corr, &
        2493             :                           Skw_denom_coef, c_K10, c_K10h, thlp2_rad_coef, &
        2494             :                           thlp2_rad_cloud_frac_thresh, up2_sfc_coef, &
        2495             :                           Skw_max_mag, xp3_coef_base, xp3_coef_slope, &
        2496             :                           altitude_threshold, rtp2_clip_coef, C_invrs_tau_bkgnd, &
        2497             :                           C_invrs_tau_sfc, C_invrs_tau_shear, C_invrs_tau_N2, &
        2498             :                           C_invrs_tau_N2_wp2, C_invrs_tau_N2_xp2, &
        2499             :                           C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
        2500             :                           C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
        2501             :                           Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
        2502             :                           wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace, &
        2503        1536 :                           clubb_params ) ! intent(out)
        2504             :
        2505        1536 :   end subroutine read_parameters_api
        2506             :
        2507             :   !================================================================================================
        2508             :   ! setup_parameters - Sets up model parameters for a single column
        2509             :   !================================================================================================
        2510           0 :   subroutine setup_parameters_api_single_col( &
        2511             :              deltaz, clubb_params, gr, grid_type, &
        2512             :              l_prescribed_avg_deltaz, &
        2513             :              lmin, nu_vert_res_dep, err_code_api )
        2514             :
        2515             :     use grid_class, only: &
        2516             :         grid    ! Type(s)
        2517             :
        2518             :     use parameters_tunable, only: &
        2519             :         setup_parameters
        2520             :
        2521             :     use parameter_indices, only:  &
        2522             :         nparams ! Variable(s)
        2523             :
        2524             :     implicit none
        2525             :
        2526             :     ! Input Variables
        2527             :     real( kind = core_rknd ), intent(in) ::  &
        2528             :       deltaz  ! Change per height level        [m]
        2529             :
        2530             :     real( kind = core_rknd ), intent(in), dimension(nparams) :: &
        2531             :       clubb_params  ! Tuneable model parameters      [-]
        2532             :
        2533             :     ! Grid definition
        2534             :     type(grid), target, intent(in) :: &
        2535             :       gr
        2536             :
        2537             :     ! If CLUBB is running on its own, this option determines
        2538             :     ! if it is using:
        2539             :     ! 1) an evenly-spaced grid,
        2540             :     ! 2) a stretched (unevenly-spaced) grid entered on the
        2541             :     !    thermodynamic grid levels (with momentum levels set
        2542             :     !    halfway between thermodynamic levels), or
        2543             :     ! 3) a stretched (unevenly-spaced) grid entered on the
        2544             :     !    momentum grid levels (with thermodynamic levels set
        2545             :     !    halfway between momentum levels).
        2546             :     integer, intent(in) :: grid_type
        2547             :
        2548             :     logical, intent(in) :: &
        2549             :       l_prescribed_avg_deltaz ! used in adj_low_res_nu. If .true., avg_deltaz = deltaz
        2550             :
        2551             :     ! Output Variables
        2552             :     real( kind = core_rknd ), intent(out) :: &
        2553             :       lmin    ! Min. value for the length scale    [m]
        2554             :
        2555             :     type(nu_vertical_res_dep), intent(out) :: &
        2556             :       nu_vert_res_dep    ! Vertical resolution dependent nu values
        2557             :
        2558             :     integer, intent(out) ::  &
        2559             :       err_code_api ! Error condition
        2560             :
        2561             :
        2562             :     real( kind = core_rknd ), dimension(1) ::  &
        2563             :       deltaz_col  ! Change per height level        [m]
        2564             :
        2565           0 :     deltaz_col(1) = deltaz
        2566             :
        2567             :     call setup_parameters( &
        2568             :               deltaz_col, clubb_params, gr, 1, grid_type, &
        2569             :               l_prescribed_avg_deltaz, &
        2570           0 :               lmin, nu_vert_res_dep, err_code_api )
        2571             :
        2572           0 :   end subroutine setup_parameters_api_single_col
        2573             :
        2574             :   !================================================================================================
        2575             :   ! setup_parameters - Sets up model parameters.
        2576             :   !================================================================================================
        2577             :
        2578     4467528 :   subroutine setup_parameters_api_multi_col( &
        2579     4467528 :              deltaz, clubb_params, gr, ngrdcol, grid_type, &
        2580             :              l_prescribed_avg_deltaz, &
        2581             :              lmin, nu_vert_res_dep, err_code_api )
        2582             :
        2583             :     use grid_class, only: &
        2584             :         grid
        2585             :
        2586             :     use parameters_tunable, only: &
        2587             :         setup_parameters
        2588             :
        2589             :     use parameter_indices, only:  &
        2590             :         nparams ! Variable(s)
        2591             :
        2592             :     implicit none
        2593             :
        2594             :     ! Input Variables
        2595             :
        2596             :     ! Grid definition
        2597             :     type(grid), target, intent(in) :: &
        2598             :       gr
        2599             :
        2600             :     integer, intent(in) :: &
        2601             :       ngrdcol   ! Number of grid columns          [#]
        2602             :
        2603             :     real( kind = core_rknd ), dimension(ngrdcol), intent(in) ::  &
        2604             :       deltaz  ! Change per height level        [m]
        2605             :
        2606             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol,nparams) :: &
        2607             :       clubb_params  ! Tuneable model parameters      [-]
        2608             :
        2609             :     ! If CLUBB is running on its own, this option determines
        2610             :     ! if it is using:
        2611             :     ! 1) an evenly-spaced grid,
        2612             :     ! 2) a stretched (unevenly-spaced) grid entered on the
        2613             :     !    thermodynamic grid levels (with momentum levels set
        2614             :     !    halfway between thermodynamic levels), or
        2615             :     ! 3) a stretched (unevenly-spaced) grid entered on the
        2616             :     !    momentum grid levels (with thermodynamic levels set
        2617             :     !    halfway between momentum levels).
        2618             :     integer, intent(in) :: grid_type
        2619             :
        2620             :     logical, intent(in) :: &
        2621             :       l_prescribed_avg_deltaz ! used in adj_low_res_nu. If .true., avg_deltaz = deltaz
        2622             :
        2623             :     ! Output Variables
        2624             :     real( kind = core_rknd ), intent(out) :: &
        2625             :       lmin    ! Min. value for the length scale    [m]
        2626             :
        2627             :     type(nu_vertical_res_dep), intent(out) :: &
        2628             :       nu_vert_res_dep    ! Vertical resolution dependent nu values
        2629             :
        2630             :     integer, intent(out) ::  &
        2631             :       err_code_api ! Error condition
        2632             :
        2633             :     call setup_parameters( &
        2634             :               deltaz, clubb_params, gr, ngrdcol, grid_type, &
        2635             :               l_prescribed_avg_deltaz, &
        2636     4467528 :               lmin, nu_vert_res_dep, err_code_api )
        2637             :
        2638     4467528 :   end subroutine setup_parameters_api_multi_col
        2639             :
        2640             :   !================================================================================================
        2641             :   ! adj_low_res_nu - Adjusts values of background eddy diffusivity based on vertical grid spacing.
        2642             :   !================================================================================================
        2643             :
        2644           0 :   subroutine adj_low_res_nu_api_single_col( gr, grid_type, deltaz,    & ! Intent(in)
        2645             :                                             clubb_params,             & ! Intent(in)
        2646             :                                             l_prescribed_avg_deltaz,  & ! Intent(in)
        2647             :                                             nu_vert_res_dep )           ! Intent(out)
        2648             :
        2649             :     use parameters_tunable, only : adj_low_res_nu
        2650             :
        2651             :     implicit none
        2652             :
        2653             :     ! Input Variables
        2654             :
        2655             :     ! Grid definition
        2656             :     type(grid), target, intent(in) :: &
        2657             :       gr
        2658             :
        2659             :     ! If CLUBB is running on it's own, this option determines
        2660             :     ! if it is using:
        2661             :     ! 1) an evenly-spaced grid,
        2662             :     ! 2) a stretched (unevenly-spaced) grid entered on the
        2663             :     !    thermodynamic grid levels (with momentum levels set
        2664             :     !    halfway between thermodynamic levels), or
        2665             :     ! 3) a stretched (unevenly-spaced) grid entered on the
        2666             :     !    momentum grid levels (with thermodynamic levels set
        2667             :     !    halfway between momentum levels).
        2668             :     integer, intent(in) :: grid_type
        2669             :
        2670             :     real( kind = core_rknd ), intent(in) ::  &
        2671             :       deltaz  ! Change per height level        [m]
        2672             :
        2673             :     real( kind = core_rknd ), intent(in), dimension(nparams) :: &
        2674             :       clubb_params  ! Tuneable model parameters      [-]
        2675             :
        2676             :     logical, intent(in) :: &
        2677             :       l_prescribed_avg_deltaz ! used in adj_low_res_nu. If .true., avg_deltaz = deltaz
        2678             :
        2679             :     ! Output Variables
        2680             :     type(nu_vertical_res_dep), intent(out) :: &
        2681             :       nu_vert_res_dep    ! Vertical resolution dependent nu values
        2682             :
        2683             :     ! Local variables
        2684             :     real( kind = core_rknd ), dimension(1) ::  &
        2685             :       deltaz_col  ! Change per height level        [m]
        2686             :
        2687             :     real( kind = core_rknd ), dimension(1,nparams) :: &
        2688             :       clubb_params_col  ! Tuneable model parameters      [-]
        2689             :
        2690           0 :     deltaz_col(1) = deltaz
        2691           0 :     clubb_params_col(1,:) = clubb_params
        2692             :
        2693             :     call adj_low_res_nu( gr, 1, grid_type, deltaz_col,  & ! Intent(in)
        2694             :                          clubb_params,                  & ! Intent(in)
        2695             :                          l_prescribed_avg_deltaz,       & ! Intent(in)
        2696           0 :                          nu_vert_res_dep )                ! Intent(out)
        2697             :
        2698           0 :   end subroutine adj_low_res_nu_api_single_col
        2699             :
        2700             :   !================================================================================================
        2701             :   ! adj_low_res_nu - Adjusts values of background eddy diffusivity based on vertical grid spacing.
        2702             :   !================================================================================================
        2703             :
        2704           0 :   subroutine adj_low_res_nu_api_multi_col( gr, ngrdcol, grid_type, deltaz,  & ! Intent(in)
        2705           0 :                                            clubb_params,                    & ! Intent(in)
        2706             :                                            l_prescribed_avg_deltaz,         & ! Intent(in)
        2707             :                                            nu_vert_res_dep )                  ! Intent(out)
        2708             :
        2709             :     use parameters_tunable, only : adj_low_res_nu
        2710             :
        2711             :     implicit none
        2712             :
        2713             :     ! Input Variables
        2714             :
        2715             :     ! Grid definition
        2716             :     type(grid), target, intent(in) :: &
        2717             :       gr
        2718             :
        2719             :     integer, intent(in) :: &
        2720             :       ngrdcol
        2721             :
        2722             :     ! If CLUBB is running on it's own, this option determines
        2723             :     ! if it is using:
        2724             :     ! 1) an evenly-spaced grid,
        2725             :     ! 2) a stretched (unevenly-spaced) grid entered on the
        2726             :     !    thermodynamic grid levels (with momentum levels set
        2727             :     !    halfway between thermodynamic levels), or
        2728             :     ! 3) a stretched (unevenly-spaced) grid entered on the
        2729             :     !    momentum grid levels (with thermodynamic levels set
        2730             :     !    halfway between momentum levels).
        2731             :     integer, intent(in) :: grid_type
        2732             :
        2733             :     real( kind = core_rknd ), dimension(ngrdcol), intent(in) ::  &
        2734             :       deltaz  ! Change per height level        [m]
        2735             :
        2736             :     real( kind = core_rknd ), intent(in), dimension(ngrdcol,nparams) :: &
        2737             :       clubb_params  ! Tuneable model parameters      [-]
        2738             :
        2739             :     logical, intent(in) :: &
        2740             :       l_prescribed_avg_deltaz ! used in adj_low_res_nu. If .true., avg_deltaz = deltaz
        2741             :
        2742             :     ! Output Variables
        2743             :     type(nu_vertical_res_dep), intent(out) :: &
        2744             :       nu_vert_res_dep    ! Vertical resolution dependent nu values
        2745             :
        2746             :     call adj_low_res_nu( gr, ngrdcol, grid_type, deltaz, & ! Intent(in)
        2747             :                          clubb_params,                   & ! Intent(in)
        2748             :                          l_prescribed_avg_deltaz,        & ! Intent(in)
        2749           0 :                          nu_vert_res_dep )                 ! Intent(out)
        2750             :
        2751           0 :   end subroutine adj_low_res_nu_api_multi_col
        2752             :
        2753             : ! The CLUBB_CAM preprocessor directives are being commented out because this
        2754             : ! code is now also used for WRF-CLUBB.
        2755             : !#ifdef CLUBB_CAM /* Code for storing pdf_parameter structs in pbuf as array */
        2756             :   !================================================================================================
        2757             :   ! pack_pdf_params - Returns a two dimensional real array with all values.
        2758             :   !================================================================================================
        2759             :
        2760           0 :   subroutine pack_pdf_params_api( pdf_params, nz, r_param_array, &
        2761             :                                   k_start, k_end )
        2762             :
        2763             :     use pdf_parameter_module, only : pack_pdf_params
        2764             :
        2765             :     !use statements
        2766             :
        2767             :     implicit none
        2768             :
        2769             :     integer, intent(in) :: nz ! Num Vert Model Levs
        2770             :
        2771             :     ! Input a pdf_parameter array with nz instances of pdf_parameter
        2772             :     type (pdf_parameter), intent(inout) :: pdf_params
        2773             :
        2774             :     ! Output a two dimensional real array with all values
        2775             :     real (kind = core_rknd), dimension(nz,num_pdf_params), intent(inout) :: &
        2776             :       r_param_array
        2777             :
        2778             :     integer, optional, intent(in) :: k_start, k_end
        2779             :
        2780           0 :     if( present( k_start ) .and. present( k_end ) ) then
        2781             :         call pack_pdf_params( pdf_params, nz, & ! intent(in)
        2782             :                               r_param_array, & ! intent(out)
        2783           0 :                               k_start, k_end ) ! intent(in/optional)
        2784             :     else
        2785             :         call pack_pdf_params( pdf_params, nz, & ! intent(in)
        2786           0 :                               r_param_array ) ! intent(out)
        2787             :     end if
        2788             :
        2789           0 :   end subroutine pack_pdf_params_api
        2790             :
        2791             :   !================================================================================================
        2792             :   ! unpack_pdf_params - Returns a pdf_parameter array with nz instances of pdf_parameter.
        2793             :   !================================================================================================
        2794             :
        2795           0 :   subroutine unpack_pdf_params_api( r_param_array, nz, pdf_params, &
        2796             :                                     k_start, k_end )
        2797             :
        2798             :     use pdf_parameter_module, only : unpack_pdf_params
        2799             :
        2800             :     implicit none
        2801             :
        2802             :     integer, intent(in) :: nz ! Num Vert Model Levs
        2803             :
        2804             :     ! Input a two dimensional real array with pdf values
        2805             :     real (kind = core_rknd), dimension(nz,num_pdf_params), intent(in) :: &
        2806             :       r_param_array
        2807             :
        2808             :     ! Output a pdf_parameter array with nz instances of pdf_parameter
        2809             :     type (pdf_parameter), intent(inout) :: pdf_params
        2810             :
        2811             :     integer, optional, intent(in) :: k_start, k_end
        2812             :
        2813           0 :     if( present( k_start ) .and. present( k_end ) ) then
        2814             :         call unpack_pdf_params( r_param_array, nz, & ! intent(in)
        2815             :                                 pdf_params, & ! intent(inout)
        2816           0 :                                 k_start, k_end ) ! intent(in/optional)
        2817             :     else
        2818             :         call unpack_pdf_params( r_param_array, nz, & ! intent(in)
        2819           0 :                                 pdf_params ) ! intent(inout)
        2820             :     end if
        2821             :
        2822             :
        2823           0 :   end subroutine unpack_pdf_params_api
        2824             :
        2825             : !#endif
        2826             :   !================================================================================================
        2827             :   ! init_pdf_params - allocates arrays for pdf_params
        2828             :   !================================================================================================
        2829       12384 :   subroutine init_pdf_params_api( nz, ngrdcol, pdf_params )
        2830             :
        2831             :     use pdf_parameter_module, only : init_pdf_params
        2832             :
        2833             :     implicit none
        2834             :
        2835             :     ! Input Variable(s)
        2836             :     integer, intent(in) :: &
        2837             :       nz, &   ! Number of vertical grid levels    [-]
        2838             :       ngrdcol ! Number of grid columns            [-]
        2839             :
        2840             :     ! Output Variable(s)
        2841             :     type(pdf_parameter), intent(out) :: &
        2842             :       pdf_params    ! PDF parameters            [units vary]
        2843             :
        2844             :     call init_pdf_params( nz, ngrdcol, & ! intent(in)
        2845       12384 :                           pdf_params ) ! intent(out)
        2846             :
        2847       12384 :   end subroutine init_pdf_params_api
        2848             :
        2849             :   !================================================================================================
        2850             :   ! copy_single_pdf_params_to_multi - copies values of a single column version of pdf_params
        2851             :   !   to a multiple column version for a specified column.
        2852             :   !
        2853             :   ! NOTE: THIS SUBROUTINE IS INTENDED TO BE TEMPORARY AND SHOULD BECOME UNNECESSARY ONCE
        2854             :   !       CLUBB IS ABLE TO OPERATE OVER MULTIPLE COLUMNS.
        2855             :   !       See https://github.com/larson-group/cam/issues/129#issuecomment-827944454
        2856             :   !================================================================================================
        2857           0 :   subroutine copy_single_pdf_params_to_multi( pdf_params_single, icol, &
        2858             :                                               pdf_params_multi )
        2859             :
        2860             :     implicit none
        2861             :
        2862             :     ! Input Variable(s)
        2863             :     integer, intent(in) :: &
        2864             :       icol   ! Column number to copy to
        2865             :
        2866             :     type(pdf_parameter), intent(in) :: &
        2867             :       pdf_params_single  ! PDF parameters            [units vary]
        2868             :
        2869             :     ! Output Variable(s)
        2870             :     type(pdf_parameter), intent(inout) :: &
        2871             :       pdf_params_multi  ! PDF parameters            [units vary]
        2872             :
        2873           0 :     pdf_params_multi%w_1(icol,:)                  = pdf_params_single%w_1(1,:)
        2874           0 :     pdf_params_multi%w_2(icol,:)                  = pdf_params_single%w_2(1,:)
        2875           0 :     pdf_params_multi%varnce_w_1(icol,:)           = pdf_params_single%varnce_w_1(1,:)
        2876           0 :     pdf_params_multi%varnce_w_2(icol,:)           = pdf_params_single%varnce_w_2(1,:)
        2877           0 :     pdf_params_multi%rt_1(icol,:)                 = pdf_params_single%rt_1(1,:)
        2878           0 :     pdf_params_multi%rt_2(icol,:)                 = pdf_params_single%rt_2(1,:)
        2879           0 :     pdf_params_multi%varnce_rt_1(icol,:)          = pdf_params_single%varnce_rt_1(1,:)
        2880           0 :     pdf_params_multi%varnce_rt_2(icol,:)          = pdf_params_single%varnce_rt_2(1,:)
        2881           0 :     pdf_params_multi%thl_1(icol,:)                = pdf_params_single%thl_1(1,:)
        2882           0 :     pdf_params_multi%thl_2(icol,:)                = pdf_params_single%thl_2(1,:)
        2883           0 :     pdf_params_multi%varnce_thl_1(icol,:)         = pdf_params_single%varnce_thl_1(1,:)
        2884           0 :     pdf_params_multi%varnce_thl_2(icol,:)         = pdf_params_single%varnce_thl_2(1,:)
        2885           0 :     pdf_params_multi%corr_w_rt_1(icol,:)          = pdf_params_single%corr_w_rt_1(1,:)
        2886           0 :     pdf_params_multi%corr_w_rt_2(icol,:)          = pdf_params_single%corr_w_rt_2(1,:)
        2887           0 :     pdf_params_multi%corr_w_thl_1(icol,:)         = pdf_params_single%corr_w_thl_1(1,:)
        2888           0 :     pdf_params_multi%corr_w_thl_2(icol,:)         = pdf_params_single%corr_w_thl_2(1,:)
        2889           0 :     pdf_params_multi%corr_rt_thl_1(icol,:)        = pdf_params_single%corr_rt_thl_1(1,:)
        2890           0 :     pdf_params_multi%corr_rt_thl_2(icol,:)        = pdf_params_single%corr_rt_thl_2(1,:)
        2891           0 :     pdf_params_multi%alpha_thl(icol,:)            = pdf_params_single%alpha_thl(1,:)
        2892           0 :     pdf_params_multi%alpha_rt(icol,:)             = pdf_params_single%alpha_rt(1,:)
        2893           0 :     pdf_params_multi%crt_1(icol,:)                = pdf_params_single%crt_1(1,:)
        2894           0 :     pdf_params_multi%crt_2(icol,:)                = pdf_params_single%crt_2(1,:)
        2895           0 :     pdf_params_multi%cthl_1(icol,:)               = pdf_params_single%cthl_1(1,:)
        2896           0 :     pdf_params_multi%cthl_2(icol,:)               = pdf_params_single%cthl_2(1,:)
        2897           0 :     pdf_params_multi%chi_1(icol,:)                = pdf_params_single%chi_1(1,:)
        2898           0 :     pdf_params_multi%chi_2(icol,:)                = pdf_params_single%chi_2(1,:)
        2899           0 :     pdf_params_multi%stdev_chi_1(icol,:)          = pdf_params_single%stdev_chi_1(1,:)
        2900           0 :     pdf_params_multi%stdev_chi_2(icol,:)          = pdf_params_single%stdev_chi_2(1,:)
        2901           0 :     pdf_params_multi%stdev_eta_1(icol,:)          = pdf_params_single%stdev_eta_1(1,:)
        2902           0 :     pdf_params_multi%stdev_eta_2(icol,:)          = pdf_params_single%stdev_eta_2(1,:)
        2903           0 :     pdf_params_multi%covar_chi_eta_1(icol,:)      = pdf_params_single%covar_chi_eta_1(1,:)
        2904           0 :     pdf_params_multi%covar_chi_eta_2(icol,:)      = pdf_params_single%covar_chi_eta_2(1,:)
        2905           0 :     pdf_params_multi%corr_w_chi_1(icol,:)         = pdf_params_single%corr_w_chi_1(1,:)
        2906           0 :     pdf_params_multi%corr_w_chi_2(icol,:)         = pdf_params_single%corr_w_chi_2(1,:)
        2907           0 :     pdf_params_multi%corr_w_eta_1(icol,:)         = pdf_params_single%corr_w_eta_1(1,:)
        2908           0 :     pdf_params_multi%corr_w_eta_2(icol,:)         = pdf_params_single%corr_w_eta_2(1,:)
        2909           0 :     pdf_params_multi%corr_chi_eta_1(icol,:)       = pdf_params_single%corr_chi_eta_1(1,:)
        2910           0 :     pdf_params_multi%corr_chi_eta_2(icol,:)       = pdf_params_single%corr_chi_eta_2(1,:)
        2911           0 :     pdf_params_multi%rsatl_1(icol,:)              = pdf_params_single%rsatl_1(1,:)
        2912           0 :     pdf_params_multi%rsatl_2(icol,:)              = pdf_params_single%rsatl_2(1,:)
        2913           0 :     pdf_params_multi%rc_1(icol,:)                 = pdf_params_single%rc_1(1,:)
        2914           0 :     pdf_params_multi%rc_2(icol,:)                 = pdf_params_single%rc_2(1,:)
        2915           0 :     pdf_params_multi%cloud_frac_1(icol,:)         = pdf_params_single%cloud_frac_1(1,:)
        2916           0 :     pdf_params_multi%cloud_frac_2(icol,:)         = pdf_params_single%cloud_frac_2(1,:)
        2917           0 :     pdf_params_multi%mixt_frac(icol,:)            = pdf_params_single%mixt_frac(1,:)
        2918           0 :     pdf_params_multi%ice_supersat_frac_1(icol,:)  = pdf_params_single%ice_supersat_frac_1(1,:)
        2919           0 :     pdf_params_multi%ice_supersat_frac_2(icol,:)  = pdf_params_single%ice_supersat_frac_2(1,:)
        2920             :
        2921           0 :   end subroutine copy_single_pdf_params_to_multi
        2922             :
        2923             :   !================================================================================================
        2924             :   ! copy_multi_pdf_params_to_single - copies values of a multiple column version of pdf_params
        2925             :   !   at a specified column to a single column version.
        2926             :   !
        2927             :   ! NOTE: THIS SUBROUTINE IS INTENDED TO BE TEMPORARY AND SHOULD BECOME UNNECESSARY ONCE
        2928             :   !       CLUBB IS ABLE TO OPERATE OVER MULTIPLE COLUMNS.
        2929             :   !       See https://github.com/larson-group/cam/issues/129#issuecomment-827944454
        2930             :   !================================================================================================
        2931           0 :   subroutine copy_multi_pdf_params_to_single( pdf_params_multi, icol, &
        2932             :                                               pdf_params_single )
        2933             :
        2934             :     implicit none
        2935             :
        2936             :     ! Input Variable(s)
        2937             :     integer, intent(in) :: &
        2938             :       icol   ! Column number to copy to
        2939             :
        2940             :     type(pdf_parameter), intent(in) :: &
        2941             :       pdf_params_multi  ! PDF parameters            [units vary]
        2942             :
        2943             :     ! Output Variable(s)
        2944             :     type(pdf_parameter), intent(inout) :: &
        2945             :       pdf_params_single   ! PDF parameters            [units vary]
        2946             :
        2947           0 :     pdf_params_single%w_1(1,:)                  = pdf_params_multi%w_1(icol,:)
        2948           0 :     pdf_params_single%w_2(1,:)                  = pdf_params_multi%w_2(icol,:)
        2949           0 :     pdf_params_single%varnce_w_1(1,:)           = pdf_params_multi%varnce_w_1(icol,:)
        2950           0 :     pdf_params_single%varnce_w_2(1,:)           = pdf_params_multi%varnce_w_2(icol,:)
        2951           0 :     pdf_params_single%rt_1(1,:)                 = pdf_params_multi%rt_1(icol,:)
        2952           0 :     pdf_params_single%rt_2(1,:)                 = pdf_params_multi%rt_2(icol,:)
        2953           0 :     pdf_params_single%varnce_rt_1(1,:)          = pdf_params_multi%varnce_rt_1(icol,:)
        2954           0 :     pdf_params_single%varnce_rt_2(1,:)          = pdf_params_multi%varnce_rt_2(icol,:)
        2955           0 :     pdf_params_single%thl_1(1,:)                = pdf_params_multi%thl_1(icol,:)
        2956           0 :     pdf_params_single%thl_2(1,:)                = pdf_params_multi%thl_2(icol,:)
        2957           0 :     pdf_params_single%varnce_thl_1(1,:)         = pdf_params_multi%varnce_thl_1(icol,:)
        2958           0 :     pdf_params_single%varnce_thl_2(1,:)         = pdf_params_multi%varnce_thl_2(icol,:)
        2959           0 :     pdf_params_single%corr_w_rt_1(1,:)          = pdf_params_multi%corr_w_rt_1(icol,:)
        2960           0 :     pdf_params_single%corr_w_rt_2(1,:)          = pdf_params_multi%corr_w_rt_2(icol,:)
        2961           0 :     pdf_params_single%corr_w_thl_1(1,:)         = pdf_params_multi%corr_w_thl_1(icol,:)
        2962           0 :     pdf_params_single%corr_w_thl_2(1,:)         = pdf_params_multi%corr_w_thl_2(icol,:)
        2963           0 :     pdf_params_single%corr_rt_thl_1(1,:)        = pdf_params_multi%corr_rt_thl_1(icol,:)
        2964           0 :     pdf_params_single%corr_rt_thl_2(1,:)        = pdf_params_multi%corr_rt_thl_2(icol,:)
        2965           0 :     pdf_params_single%alpha_thl(1,:)            = pdf_params_multi%alpha_thl(icol,:)
        2966           0 :     pdf_params_single%alpha_rt(1,:)             = pdf_params_multi%alpha_rt(icol,:)
        2967           0 :     pdf_params_single%crt_1(1,:)                = pdf_params_multi%crt_1(icol,:)
        2968           0 :     pdf_params_single%crt_2(1,:)                = pdf_params_multi%crt_2(icol,:)
        2969           0 :     pdf_params_single%cthl_1(1,:)               = pdf_params_multi%cthl_1(icol,:)
        2970           0 :     pdf_params_single%cthl_2(1,:)               = pdf_params_multi%cthl_2(icol,:)
        2971           0 :     pdf_params_single%chi_1(1,:)                = pdf_params_multi%chi_1(icol,:)
        2972           0 :     pdf_params_single%chi_2(1,:)                = pdf_params_multi%chi_2(icol,:)
        2973           0 :     pdf_params_single%stdev_chi_1(1,:)          = pdf_params_multi%stdev_chi_1(icol,:)
        2974           0 :     pdf_params_single%stdev_chi_2(1,:)          = pdf_params_multi%stdev_chi_2(icol,:)
        2975           0 :     pdf_params_single%stdev_eta_1(1,:)          = pdf_params_multi%stdev_eta_1(icol,:)
        2976           0 :     pdf_params_single%stdev_eta_2(1,:)          = pdf_params_multi%stdev_eta_2(icol,:)
        2977           0 :     pdf_params_single%covar_chi_eta_1(1,:)      = pdf_params_multi%covar_chi_eta_1(icol,:)
        2978           0 :     pdf_params_single%covar_chi_eta_2(1,:)      = pdf_params_multi%covar_chi_eta_2(icol,:)
        2979           0 :     pdf_params_single%corr_w_chi_1(1,:)         = pdf_params_multi%corr_w_chi_1(icol,:)
        2980           0 :     pdf_params_single%corr_w_chi_2(1,:)         = pdf_params_multi%corr_w_chi_2(icol,:)
        2981           0 :     pdf_params_single%corr_w_eta_1(1,:)         = pdf_params_multi%corr_w_eta_1(icol,:)
        2982           0 :     pdf_params_single%corr_w_eta_2(1,:)         = pdf_params_multi%corr_w_eta_2(icol,:)
        2983           0 :     pdf_params_single%corr_chi_eta_1(1,:)       = pdf_params_multi%corr_chi_eta_1(icol,:)
        2984           0 :     pdf_params_single%corr_chi_eta_2(1,:)       = pdf_params_multi%corr_chi_eta_2(icol,:)
        2985           0 :     pdf_params_single%rsatl_1(1,:)              = pdf_params_multi%rsatl_1(icol,:)
        2986           0 :     pdf_params_single%rsatl_2(1,:)              = pdf_params_multi%rsatl_2(icol,:)
        2987           0 :     pdf_params_single%rc_1(1,:)                 = pdf_params_multi%rc_1(icol,:)
        2988           0 :     pdf_params_single%rc_2(1,:)                 = pdf_params_multi%rc_2(icol,:)
        2989           0 :     pdf_params_single%cloud_frac_1(1,:)         = pdf_params_multi%cloud_frac_1(icol,:)
        2990           0 :     pdf_params_single%cloud_frac_2(1,:)         = pdf_params_multi%cloud_frac_2(icol,:)
        2991           0 :     pdf_params_single%mixt_frac(1,:)            = pdf_params_multi%mixt_frac(icol,:)
        2992           0 :     pdf_params_single%ice_supersat_frac_1(1,:)  = pdf_params_multi%ice_supersat_frac_1(icol,:)
        2993           0 :     pdf_params_single%ice_supersat_frac_2(1,:)  = pdf_params_multi%ice_supersat_frac_2(icol,:)
        2994             :
        2995           0 :   end subroutine copy_multi_pdf_params_to_single
        2996             :
        2997             :
        2998             :   !================================================================================================
        2999             :   ! init_precip_fracs - allocates arrays for precip_fracs
        3000             :   !================================================================================================
        3001           0 :   subroutine init_precip_fracs_api( nz, ngrdcol, &
        3002             :                                     precip_fracs )
        3003             :
        3004             :     use hydromet_pdf_parameter_module, only : init_precip_fracs
        3005             :
        3006             :     implicit none
        3007             :
        3008             :     ! Input Variable(s)
        3009             :     integer, intent(in) :: &
        3010             :       nz,     & ! Number of vertical grid levels    [-]
        3011             :       ngrdcol   ! Number of grid columns            [-]
        3012             :
        3013             :     ! Output Variable
        3014             :     type(precipitation_fractions), intent(out) :: &
        3015             :       precip_fracs    ! Hydrometeor PDF parameters      [units vary]
        3016             :
        3017             :     call init_precip_fracs( nz, ngrdcol, & ! intent(in)
        3018           0 :                             precip_fracs ) ! intent(out)
        3019             :
        3020           0 :     return
        3021             :
        3022             :   end subroutine init_precip_fracs_api
        3023             :
        3024             :   !================================================================================================
        3025             :   ! init_pdf_implicit_coefs_terms - allocates arrays for the PDF implicit
        3026             :   ! coefficient and explicit terms.
        3027             :   !================================================================================================
        3028        6192 :   subroutine init_pdf_implicit_coefs_terms_api( nz, ngrdcol, sclr_dim, &
        3029             :                                                 pdf_implicit_coefs_terms )
        3030             :
        3031             :     use pdf_parameter_module, only: &
        3032             :         init_pdf_implicit_coefs_terms    ! Procedure(s)
        3033             :
        3034             :     implicit none
        3035             :
        3036             :     ! Input Variables
        3037             :     integer, intent(in) :: &
        3038             :       nz,       & ! Number of vertical grid levels    [-]
        3039             :       ngrdcol,  & ! Number of grid columns            [-]
        3040             :       sclr_dim    ! Number of scalar variables        [-]
        3041             :
        3042             :     ! Output Variable
        3043             :     type(implicit_coefs_terms), intent(out) :: &
        3044             :       pdf_implicit_coefs_terms    ! Implicit coefs / explicit terms [units vary]
        3045             :
        3046             :     call init_pdf_implicit_coefs_terms( nz, ngrdcol, sclr_dim, & ! intent(in)
        3047        6192 :                                         pdf_implicit_coefs_terms ) ! intent(out)
        3048             :
        3049        6192 :   end subroutine init_pdf_implicit_coefs_terms_api
        3050             :
        3051             :   !================================================================================================
        3052             :   ! setup_pdf_parameters
        3053             :   !================================================================================================
        3054             :
        3055           0 :   subroutine setup_pdf_parameters_api_single_col( gr, & ! intent(in)
        3056             :     nz, pdf_dim, hydromet_dim, dt, &            ! Intent(in)
        3057           0 :     Nc_in_cloud, cloud_frac, Kh_zm, &           ! Intent(in)
        3058           0 :     ice_supersat_frac, hydromet, wphydrometp, & ! Intent(in)
        3059           0 :     corr_array_n_cloud, corr_array_n_below, &   ! Intent(in)
        3060             :     hm_metadata, &                           ! Intent(in)
        3061             :     pdf_params, &                               ! Intent(in)
        3062             :     clubb_params, &                             ! Intent(in)
        3063             :     iiPDF_type, &                               ! Intent(in)
        3064             :     l_use_precip_frac, &                        ! Intent(in)
        3065             :     l_predict_upwp_vpwp, &                      ! Intent(in)
        3066             :     l_diagnose_correlations, &                  ! Intent(in)
        3067             :     l_calc_w_corr, &                            ! Intent(in)
        3068             :     l_const_Nc_in_cloud, &                      ! Intent(in)
        3069             :     l_fix_w_chi_eta_correlations, &             ! Intent(in)
        3070             :     stats_metadata, &                           ! Intent(in)
        3071             :     stats_zt, stats_zm, stats_sfc, &            ! intent(inout)
        3072           0 :     hydrometp2, &                               ! Intent(inout)
        3073           0 :     mu_x_1_n, mu_x_2_n, &                       ! Intent(out)
        3074           0 :     sigma_x_1_n, sigma_x_2_n, &                 ! Intent(out)
        3075           0 :     corr_array_1_n, corr_array_2_n, &           ! Intent(out)
        3076           0 :     corr_cholesky_mtx_1, corr_cholesky_mtx_2, & ! Intent(out)
        3077             :     precip_fracs,  &                            ! Intent(out)
        3078           0 :     hydromet_pdf_params )                       ! Intent(out)
        3079             :
        3080             :     use setup_clubb_pdf_params, only : &
        3081             :         setup_pdf_parameters
        3082             :
        3083             :     use parameter_indices, only: &
        3084             :         nparams    ! Variable(s)
        3085             :
        3086             :     use error_code, only : &
        3087             :         err_code, &         ! Error Indicator
        3088             :         clubb_fatal_error   ! Constant
        3089             :
        3090             :     implicit none
        3091             :
        3092             :     !----------------------- Input Variables -----------------------
        3093             :     type(grid), target, intent(in) :: gr
        3094             :
        3095             :     integer, intent(in) :: &
        3096             :       nz,           & ! Number of model vertical grid levels
        3097             :       pdf_dim,      & ! Number of variables in the correlation array
        3098             :       hydromet_dim    ! Number of hydrometeor species
        3099             :
        3100             :     real( kind = core_rknd ), intent(in) ::  &
        3101             :       dt    ! Model timestep                                           [s]
        3102             :
        3103             :     real( kind = core_rknd ), dimension(nz), intent(in) :: &
        3104             :       Nc_in_cloud,       & ! Mean (in-cloud) cloud droplet conc.       [num/kg]
        3105             :       cloud_frac,        & ! Cloud fraction                            [-]
        3106             :       Kh_zm,             & ! Eddy diffusivity coef. on momentum levels [m^2/s]
        3107             :       ice_supersat_frac    ! Ice supersaturation fraction              [-]
        3108             :
        3109             :     real( kind = core_rknd ), dimension(nz,hydromet_dim), intent(in) :: &
        3110             :       hydromet,    & ! Mean of hydrometeor, hm (overall) (t-levs.) [units]
        3111             :       wphydrometp    ! Covariance < w'h_m' > (momentum levels)     [(m/s)units]
        3112             :
        3113             :     real( kind = core_rknd ), dimension(pdf_dim,pdf_dim), &
        3114             :       intent(in) :: &
        3115             :       corr_array_n_cloud, & ! Prescribed norm. space corr. array in cloud    [-]
        3116             :       corr_array_n_below    ! Prescribed norm. space corr. array below cloud [-]
        3117             :
        3118             :     type (hm_metadata_type), intent(in) :: &
        3119             :       hm_metadata
        3120             :
        3121             :     type(pdf_parameter), intent(in) :: &
        3122             :       pdf_params    ! PDF parameters                               [units vary]
        3123             :
        3124             :     real( kind = core_rknd ), dimension(nparams), intent(in) :: &
        3125             :       clubb_params    ! Array of CLUBB's tunable parameters    [units vary]
        3126             :
        3127             :     integer, intent(in) :: &
        3128             :       iiPDF_type    ! Selected option for the two-component normal (double
        3129             :                     ! Gaussian) PDF type to use for the w, rt, and theta-l (or
        3130             :                     ! w, chi, and eta) portion of CLUBB's multivariate,
        3131             :                     ! two-component PDF.
        3132             :
        3133             :     logical, intent(in) :: &
        3134             :       l_use_precip_frac,            & ! Flag to use precipitation fraction in KK microphysics. The
        3135             :                                       ! precipitation fraction is automatically set to 1 when this
        3136             :                                       ! flag is turned off.
        3137             :       l_predict_upwp_vpwp,          & ! Flag to predict <u'w'> and <v'w'> along with <u> and <v>
        3138             :                                       ! alongside the advancement of <rt>, <w'rt'>, <thl>,
        3139             :                                       ! <wpthlp>, <sclr>, and <w'sclr'> in subroutine
        3140             :                                       ! advance_xm_wpxp.  Otherwise, <u'w'> and <v'w'> are still
        3141             :                                       ! approximated by eddy diffusivity when <u> and <v> are
        3142             :                                       ! advanced in subroutine advance_windm_edsclrm.
        3143             :       l_diagnose_correlations,      & ! Diagnose correlations instead of using fixed ones
        3144             :       l_calc_w_corr,                & ! Calculate the correlations between w and the hydrometeors
        3145             :       l_const_Nc_in_cloud,          & ! Use a constant cloud droplet conc. within cloud (K&K)
        3146             :       l_fix_w_chi_eta_correlations    ! Use a fixed correlation for s and t Mellor(chi/eta)
        3147             :
        3148             :     type (stats_metadata_type), intent(in) :: &
        3149             :       stats_metadata
        3150             :
        3151             :     !----------------------- Input/Output Variables -----------------------
        3152             :     type(stats), target, intent(inout) :: &
        3153             :       stats_zt, &
        3154             :       stats_zm, &
        3155             :       stats_sfc
        3156             :
        3157             :     real( kind = core_rknd ), dimension(nz,hydromet_dim), intent(inout) :: &
        3158             :       hydrometp2    ! Variance of a hydrometeor (overall) (m-levs.)   [units^2]
        3159             :
        3160             :     !----------------------- Output Variables -----------------------
        3161             :     real( kind = core_rknd ), dimension(nz,pdf_dim), intent(out) :: &
        3162             :       mu_x_1_n,    & ! Mean array (normal space): PDF vars. (comp. 1) [un. vary]
        3163             :       mu_x_2_n,    & ! Mean array (normal space): PDF vars. (comp. 2) [un. vary]
        3164             :       sigma_x_1_n, & ! Std. dev. array (normal space): PDF vars (comp. 1) [u.v.]
        3165             :       sigma_x_2_n    ! Std. dev. array (normal space): PDF vars (comp. 2) [u.v.]
        3166             :
        3167             :     real( kind = core_rknd ), dimension(nz,pdf_dim,pdf_dim), &
        3168             :       intent(out) :: &
        3169             :       corr_array_1_n, & ! Corr. array (normal space):  PDF vars. (comp. 1)   [-]
        3170             :       corr_array_2_n    ! Corr. array (normal space):  PDF vars. (comp. 2)   [-]
        3171             :
        3172             :     real( kind = core_rknd ), dimension(nz,pdf_dim,pdf_dim), &
        3173             :       intent(out) :: &
        3174             :       corr_cholesky_mtx_1, & ! Transposed corr. cholesky matrix, 1st comp. [-]
        3175             :       corr_cholesky_mtx_2    ! Transposed corr. cholesky matrix, 2nd comp. [-]
        3176             :
        3177             :     ! This is only an output, but it contains allocated arrays, so we need to treat it as inout
        3178             :     type(precipitation_fractions), intent(inout) :: &
        3179             :       precip_fracs           ! Precipitation fractions      [-]
        3180             :
        3181             :     type(hydromet_pdf_parameter), dimension(nz), optional, intent(out) :: &
        3182             :       hydromet_pdf_params    ! Hydrometeor PDF parameters        [units vary]
        3183             :
        3184             :     !----------------------- Local Variables -----------------------
        3185             :     real( kind = core_rknd ), dimension(1,nz) :: &
        3186           0 :       Nc_in_cloud_col,       & ! Mean (in-cloud) cloud droplet conc.       [num/kg]
        3187           0 :       cloud_frac_col,        & ! Cloud fraction                            [-]
        3188           0 :       Kh_zm_col,             & ! Eddy diffusivity coef. on momentum levels [m^2/s]
        3189           0 :       ice_supersat_frac_col    ! Ice supersaturation fraction              [-]
        3190             :
        3191             :     real( kind = core_rknd ), dimension(1,nz,hydromet_dim) :: &
        3192           0 :       hydromet_col,    & ! Mean of hydrometeor, hm (overall) (t-levs.) [units]
        3193           0 :       wphydrometp_col    ! Covariance < w'h_m' > (momentum levels)     [(m/s)units]
        3194             :
        3195             :     ! Input/Output Variables
        3196             :     real( kind = core_rknd ), dimension(1,nz,hydromet_dim) :: &
        3197           0 :       hydrometp2_col    ! Variance of a hydrometeor (overall) (m-levs.)   [units^2]
        3198             :
        3199             :     ! Output Variables
        3200             :     real( kind = core_rknd ), dimension(1,nz,pdf_dim) :: &
        3201           0 :       mu_x_1_n_col,    & ! Mean array (normal space): PDF vars. (comp. 1) [un. vary]
        3202           0 :       mu_x_2_n_col,    & ! Mean array (normal space): PDF vars. (comp. 2) [un. vary]
        3203           0 :       sigma_x_1_n_col, & ! Std. dev. array (normal space): PDF vars (comp. 1) [u.v.]
        3204           0 :       sigma_x_2_n_col    ! Std. dev. array (normal space): PDF vars (comp. 2) [u.v.]
        3205             :
        3206             :     real( kind = core_rknd ), dimension(1,nz,pdf_dim,pdf_dim) :: &
        3207           0 :       corr_array_1_n_col, & ! Corr. array (normal space):  PDF vars. (comp. 1)   [-]
        3208           0 :       corr_array_2_n_col    ! Corr. array (normal space):  PDF vars. (comp. 2)   [-]
        3209             :
        3210             :     real( kind = core_rknd ), dimension(1,nz,pdf_dim,pdf_dim) :: &
        3211           0 :       corr_cholesky_mtx_1_col, & ! Transposed corr. cholesky matrix, 1st comp. [-]
        3212           0 :       corr_cholesky_mtx_2_col    ! Transposed corr. cholesky matrix, 2nd comp. [-]
        3213             :
        3214             :     type(hydromet_pdf_parameter), dimension(1,nz) :: &
        3215           0 :       hydromet_pdf_params_col    ! Hydrometeor PDF parameters        [units vary]
        3216             :
        3217             :     type(stats), dimension(1) :: &
        3218           0 :       stats_zt_col, &
        3219           0 :       stats_zm_col, &
        3220           0 :       stats_sfc_col
        3221             :
        3222             :     !----------------------- Begin Code -----------------------
        3223             :
        3224           0 :     Nc_in_cloud_col(1,:) = Nc_in_cloud
        3225           0 :     cloud_frac_col(1,:) = cloud_frac
        3226           0 :     Kh_zm_col(1,:) = Kh_zm
        3227           0 :     ice_supersat_frac_col(1,:) = ice_supersat_frac
        3228             :
        3229           0 :     hydromet_col(1,:,:) = hydromet
        3230           0 :     wphydrometp_col(1,:,:) = wphydrometp
        3231             :
        3232           0 :     stats_zt_col(1) = stats_zt
        3233           0 :     stats_zm_col(1) = stats_zm
        3234           0 :     stats_sfc_col(1) = stats_sfc
        3235             :
        3236             :     call setup_pdf_parameters( gr, &                          ! intent(in)
        3237             :       nz, 1, pdf_dim, hydromet_dim, dt, &                     ! Intent(in)
        3238             :       Nc_in_cloud_col, cloud_frac_col, Kh_zm_col, &           ! Intent(in)
        3239             :       ice_supersat_frac_col, hydromet_col, wphydrometp_col, & ! Intent(in)
        3240             :       corr_array_n_cloud, corr_array_n_below, &               ! Intent(in)
        3241             :       hm_metadata, &                                       ! Intent(in)
        3242             :       pdf_params, &                                           ! Intent(in)
        3243             :       clubb_params, &                                         ! Intent(in)
        3244             :       iiPDF_type, &                                           ! Intent(in)
        3245             :       l_use_precip_frac, &                                    ! Intent(in)
        3246             :       l_predict_upwp_vpwp, &                                  ! Intent(in)
        3247             :       l_diagnose_correlations, &                              ! Intent(in)
        3248             :       l_calc_w_corr, &                                        ! Intent(in)
        3249             :       l_const_Nc_in_cloud, &                                  ! Intent(in)
        3250             :       l_fix_w_chi_eta_correlations, &                         ! Intent(in)
        3251             :       stats_metadata, &                                       ! Intent(in)
        3252             :       stats_zt_col, stats_zm_col, stats_sfc_col, &            ! Intent(inout)
        3253             :       hydrometp2_col, &                                       ! Intent(inout)
        3254             :       mu_x_1_n_col, mu_x_2_n_col, &                           ! Intent(out)
        3255             :       sigma_x_1_n_col, sigma_x_2_n_col, &                     ! Intent(out)
        3256             :       corr_array_1_n_col, corr_array_2_n_col, &               ! Intent(out)
        3257             :       corr_cholesky_mtx_1_col, corr_cholesky_mtx_2_col, &     ! Intent(out)
        3258             :       precip_fracs, &                                         ! Intent(inout)
        3259           0 :       hydromet_pdf_params_col )                               ! Optional(out)
        3260             :
        3261           0 :     if ( err_code == clubb_fatal_error ) error stop
        3262             :
        3263             :     ! The following does not work for stats
        3264             :     !     stats_zt = stats_zt_col(1)
        3265             :     !     stats_zm = stats_zm_col(1)
        3266             :     !     stats_sfc = stats_sfc_col(1)
        3267             :     ! because of some mysterious pointer issue. However, the only thing that
        3268             :     ! updates in stats is the field values, so we can copy only those instead.
        3269           0 :     if ( stats_metadata%l_stats ) then
        3270           0 :       stats_zm%accum_field_values = stats_zm_col(1)%accum_field_values
        3271           0 :       stats_zm%accum_num_samples = stats_zm_col(1)%accum_num_samples
        3272             :
        3273           0 :       stats_zt%accum_field_values = stats_zt_col(1)%accum_field_values
        3274           0 :       stats_zt%accum_num_samples = stats_zt_col(1)%accum_num_samples
        3275             :
        3276           0 :       stats_sfc%accum_field_values = stats_sfc_col(1)%accum_field_values
        3277           0 :       stats_sfc%accum_num_samples = stats_sfc_col(1)%accum_num_samples
        3278             :     end if
        3279             :
        3280           0 :     hydrometp2 = hydrometp2_col(1,:,:)
        3281           0 :     mu_x_1_n = mu_x_1_n_col(1,:,:)
        3282           0 :     mu_x_2_n = mu_x_2_n_col(1,:,:)
        3283           0 :     sigma_x_1_n = sigma_x_1_n_col(1,:,:)
        3284           0 :     sigma_x_2_n = sigma_x_2_n_col(1,:,:)
        3285           0 :     corr_array_1_n = corr_array_1_n_col(1,:,:,:)
        3286           0 :     corr_array_2_n = corr_array_2_n_col(1,:,:,:)
        3287           0 :     corr_cholesky_mtx_1 = corr_cholesky_mtx_1_col(1,:,:,:)
        3288           0 :     corr_cholesky_mtx_2 = corr_cholesky_mtx_2_col(1,:,:,:)
        3289           0 :     if ( present(hydromet_pdf_params) ) then
        3290           0 :       hydromet_pdf_params = hydromet_pdf_params_col(1,:)
        3291             :     end if
        3292             :
        3293           0 :   end subroutine setup_pdf_parameters_api_single_col
        3294             : !===========================================================================!
        3295           0 :   subroutine setup_pdf_parameters_api_multi_col( gr, &
        3296             :     nz, ngrdcol, pdf_dim, hydromet_dim, dt, &    ! Intent(in)
        3297           0 :     Nc_in_cloud, cloud_frac, Kh_zm, &           ! Intent(in)
        3298           0 :     ice_supersat_frac, hydromet, wphydrometp, & ! Intent(in)
        3299           0 :     corr_array_n_cloud, corr_array_n_below, &   ! Intent(in)
        3300             :     hm_metadata, &                           ! Intent(in)
        3301             :     pdf_params, &                               ! Intent(in)
        3302             :     clubb_params, &                             ! Intent(in)
        3303             :     iiPDF_type, &                               ! Intent(in)
        3304             :     l_use_precip_frac, &                        ! Intent(in)
        3305             :     l_predict_upwp_vpwp, &                      ! Intent(in)
        3306             :     l_diagnose_correlations, &                  ! Intent(in)
        3307             :     l_calc_w_corr, &                            ! Intent(in)
        3308             :     l_const_Nc_in_cloud, &                      ! Intent(in)
        3309             :     l_fix_w_chi_eta_correlations, &             ! Intent(in)
        3310             :     stats_metadata, &                           ! Intent(in)
        3311           0 :     stats_zt, stats_zm, stats_sfc, &            ! Intent(inout)
        3312           0 :     hydrometp2, &                               ! Intent(inout)
        3313           0 :     mu_x_1_n, mu_x_2_n, &                       ! Intent(out)
        3314           0 :     sigma_x_1_n, sigma_x_2_n, &                 ! Intent(out)
        3315           0 :     corr_array_1_n, corr_array_2_n, &           ! Intent(out)
        3316           0 :     corr_cholesky_mtx_1, corr_cholesky_mtx_2, & ! Intent(out)
        3317             :     precip_fracs, &                             ! Intent(out)
        3318           0 :     hydromet_pdf_params )                       ! Intent(out)
        3319             :
        3320             :     use setup_clubb_pdf_params, only : setup_pdf_parameters
        3321             :
        3322             :     use parameter_indices, only: &
        3323             :         nparams    ! Variable(s)
        3324             :
        3325             :     use error_code, only : &
        3326             :         err_code, &         ! Error Indicator
        3327             :         clubb_fatal_error   ! Constant
        3328             :
        3329             :     implicit none
        3330             :
        3331             :     ! Input Variables
        3332             :     integer, intent(in) :: &
        3333             :       nz,           & ! Number of model vertical grid levels
        3334             :       pdf_dim,      & ! Number of variables in the correlation array
        3335             :       ngrdcol,      & ! Number of grid columns
        3336             :       hydromet_dim    ! Number of hydrometeor species
        3337             :
        3338             :     type (grid), target, intent(in) :: gr
        3339             :
        3340             :     real( kind = core_rknd ), intent(in) ::  &
        3341             :       dt    ! Model timestep                                           [s]
        3342             :
        3343             :     real( kind = core_rknd ), dimension(ngrdcol,nz), intent(in) :: &
        3344             :       Nc_in_cloud,       & ! Mean (in-cloud) cloud droplet conc.       [num/kg]
        3345             :       cloud_frac,        & ! Cloud fraction                            [-]
        3346             :       Kh_zm,             & ! Eddy diffusivity coef. on momentum levels [m^2/s]
        3347             :       ice_supersat_frac    ! Ice supersaturation fraction              [-]
        3348             :
        3349             :     real( kind = core_rknd ), dimension(ngrdcol,nz,hydromet_dim), intent(in) :: &
        3350             :       hydromet,    & ! Mean of hydrometeor, hm (overall) (t-levs.) [units]
        3351             :       wphydrometp    ! Covariance < w'h_m' > (momentum levels)     [(m/s)units]
        3352             :
        3353             :     real( kind = core_rknd ), dimension(pdf_dim,pdf_dim), &
        3354             :       intent(in) :: &
        3355             :       corr_array_n_cloud, & ! Prescribed norm. space corr. array in cloud    [-]
        3356             :       corr_array_n_below    ! Prescribed norm. space corr. array below cloud [-]
        3357             :
        3358             :     type (hm_metadata_type), intent(in) :: &
        3359             :       hm_metadata
        3360             :
        3361             :     type(pdf_parameter), intent(in) :: &
        3362             :       pdf_params    ! PDF parameters                               [units vary]
        3363             :
        3364             :     real( kind = core_rknd ), dimension(nparams), intent(in) :: &
        3365             :       clubb_params    ! Array of CLUBB's tunable parameters    [units vary]
        3366             :
        3367             :     integer, intent(in) :: &
        3368             :       iiPDF_type    ! Selected option for the two-component normal (double
        3369             :                     ! Gaussian) PDF type to use for the w, rt, and theta-l (or
        3370             :                     ! w, chi, and eta) portion of CLUBB's multivariate,
        3371             :                     ! two-component PDF.
        3372             :
        3373             :     logical, intent(in) :: &
        3374             :       l_use_precip_frac,            & ! Flag to use precipitation fraction in KK microphysics. The
        3375             :                                       ! precipitation fraction is automatically set to 1 when this
        3376             :                                       ! flag is turned off.
        3377             :       l_predict_upwp_vpwp,          & ! Flag to predict <u'w'> and <v'w'> along with <u> and <v>
        3378             :                                       ! alongside the advancement of <rt>, <w'rt'>, <thl>,
        3379             :                                       ! <wpthlp>, <sclr>, and <w'sclr'> in subroutine
        3380             :                                       ! advance_xm_wpxp.  Otherwise, <u'w'> and <v'w'> are still
        3381             :                                       ! approximated by eddy diffusivity when <u> and <v> are
        3382             :                                       ! advanced in subroutine advance_windm_edsclrm.
        3383             :       l_diagnose_correlations,      & ! Diagnose correlations instead of using fixed ones
        3384             :       l_calc_w_corr,                & ! Calculate the correlations between w and the hydrometeors
        3385             :       l_const_Nc_in_cloud,          & ! Use a constant cloud droplet conc. within cloud (K&K)
        3386             :       l_fix_w_chi_eta_correlations    ! Use a fixed correlation for s and t Mellor(chi/eta)
        3387             :
        3388             :     type (stats_metadata_type), intent(in) :: &
        3389             :       stats_metadata
        3390             :
        3391             :     ! Input/Output Variables
        3392             :     real( kind = core_rknd ), dimension(ngrdcol,nz,hydromet_dim), intent(inout) :: &
        3393             :       hydrometp2    ! Variance of a hydrometeor (overall) (m-levs.)   [units^2]
        3394             :
        3395             :     type(stats), target, dimension(ngrdcol), intent(inout) :: &
        3396             :       stats_zt, &
        3397             :       stats_zm, &
        3398             :       stats_sfc
        3399             :
        3400             :     ! Output Variables
        3401             :     real( kind = core_rknd ), dimension(ngrdcol,nz,pdf_dim), intent(out) :: &
        3402             :       mu_x_1_n,    & ! Mean array (normal space): PDF vars. (comp. 1) [un. vary]
        3403             :       mu_x_2_n,    & ! Mean array (normal space): PDF vars. (comp. 2) [un. vary]
        3404             :       sigma_x_1_n, & ! Std. dev. array (normal space): PDF vars (comp. 1) [u.v.]
        3405             :       sigma_x_2_n    ! Std. dev. array (normal space): PDF vars (comp. 2) [u.v.]
        3406             :
        3407             :     real( kind = core_rknd ), dimension(ngrdcol,nz,pdf_dim,pdf_dim), &
        3408             :       intent(out) :: &
        3409             :       corr_array_1_n, & ! Corr. array (normal space):  PDF vars. (comp. 1)   [-]
        3410             :       corr_array_2_n    ! Corr. array (normal space):  PDF vars. (comp. 2)   [-]
        3411             :
        3412             :     real( kind = core_rknd ), dimension(ngrdcol,nz,pdf_dim,pdf_dim), &
        3413             :       intent(out) :: &
        3414             :       corr_cholesky_mtx_1, & ! Transposed corr. cholesky matrix, 1st comp. [-]
        3415             :       corr_cholesky_mtx_2    ! Transposed corr. cholesky matrix, 2nd comp. [-]
        3416             :
        3417             :     type(hydromet_pdf_parameter), dimension(ngrdcol,nz), optional, intent(out) :: &
        3418             :       hydromet_pdf_params    ! Hydrometeor PDF parameters        [units vary]
        3419             :
        3420             :     ! This is only an output, but it contains allocated arrays, so we need to treat it as inout
        3421             :     type(precipitation_fractions), intent(inout) :: &
        3422             :       precip_fracs           ! Precipitation fractions      [-]
        3423             :
        3424             :     call setup_pdf_parameters( gr, &              ! intent(in)
        3425             :       nz, ngrdcol, pdf_dim, hydromet_dim, dt, &   ! Intent(in)
        3426             :       Nc_in_cloud, cloud_frac, Kh_zm, &           ! Intent(in)
        3427             :       ice_supersat_frac, hydromet, wphydrometp, & ! Intent(in)
        3428             :       corr_array_n_cloud, corr_array_n_below, &   ! Intent(in)
        3429             :       hm_metadata, &                           ! Intent(in)
        3430             :       pdf_params, &                               ! Intent(in)
        3431             :       clubb_params, &                             ! Intent(in)
        3432             :       iiPDF_type, &                               ! Intent(in)
        3433             :       l_use_precip_frac, &                        ! Intent(in)
        3434             :       l_predict_upwp_vpwp, &                      ! Intent(in)
        3435             :       l_diagnose_correlations, &                  ! Intent(in)
        3436             :       l_calc_w_corr, &                            ! Intent(in)
        3437             :       l_const_Nc_in_cloud, &                      ! Intent(in)
        3438             :       l_fix_w_chi_eta_correlations, &             ! Intent(in)
        3439             :       stats_metadata, &                           ! Intent(in)
        3440             :       stats_zt, stats_zm, stats_sfc, &            ! intent(inout)
        3441             :       hydrometp2, &                               ! Intent(inout)
        3442             :       mu_x_1_n, mu_x_2_n, &                       ! Intent(out)
        3443             :       sigma_x_1_n, sigma_x_2_n, &                 ! Intent(out)
        3444             :       corr_array_1_n, corr_array_2_n, &           ! Intent(out)
        3445             :       corr_cholesky_mtx_1, corr_cholesky_mtx_2, & ! Intent(out)
        3446             :       precip_fracs, &                             ! Intent(inout)
        3447           0 :       hydromet_pdf_params )                       ! Optional(out)
        3448             :
        3449           0 :     if ( err_code == clubb_fatal_error ) error stop
        3450             :
        3451           0 :   end subroutine setup_pdf_parameters_api_multi_col
        3452             :
        3453             :   !================================================================================================
        3454             :   ! stats_end_timestep - Calls statistics to be written to the output format.
        3455             :   !================================================================================================
        3456             :
        3457           0 :   subroutine stats_end_timestep_api( clubb_params, stats_metadata, &
        3458             :                                      stats_zt, stats_zm, stats_sfc, &
        3459             :                                      stats_lh_zt, stats_lh_sfc, &
        3460             :                                      stats_rad_zt, stats_rad_zm &
        3461             : #ifdef NETCDF
        3462             :                                      , l_uv_nudge, &
        3463             :                                      l_tke_aniso, &
        3464             :                                      l_standard_term_ta &
        3465             : #endif
        3466             :                                       )
        3467             :
        3468             :     use stats_clubb_utilities, only : stats_end_timestep
        3469             :
        3470             :     use parameter_indices, only: nparams
        3471             :
        3472             :     implicit none
        3473             :
        3474             :     ! Input Variables
        3475             :     real( kind = core_rknd ), dimension(nparams), intent(in) :: &
        3476             :       clubb_params    ! Array of CLUBB's tunable parameters    [units vary]
        3477             :
        3478             :     type (stats_metadata_type), intent(in) :: &
        3479             :       stats_metadata
        3480             :
        3481             :     type(stats), target, intent(inout) :: &
        3482             :       stats_zt, &
        3483             :       stats_zm, &
        3484             :       stats_sfc, &
        3485             :       stats_lh_zt, &
        3486             :       stats_lh_sfc, &
        3487             :       stats_rad_zt, &
        3488             :       stats_rad_zm
        3489             :
        3490             : #ifdef NETCDF
        3491             :     logical, intent(in) :: &
        3492             :       l_uv_nudge,         & ! For wind speed nudging.
        3493             :       l_tke_aniso,        & ! For anisotropic turbulent kinetic energy, i.e.
        3494             :                             ! TKE = 1/2 (u'^2 + v'^2 + w'^2)
        3495             :       l_standard_term_ta    ! Use the standard discretization for the turbulent advection terms.
        3496             :                             ! Setting to .false. means that a_1 and a_3 are pulled outside of the
        3497             :                             ! derivative in advance_wp2_wp3_module.F90 and in
        3498             :                             ! advance_xp2_xpyp_module.F90.
        3499             : #endif
        3500             :
        3501             :     call stats_end_timestep( clubb_params, stats_metadata,      & ! intent(in)
        3502             :                              stats_zt, stats_zm, stats_sfc,     & ! intent(inout)
        3503             :                              stats_lh_zt, stats_lh_sfc,         & ! intent(inout)
        3504             :                              stats_rad_zt, stats_rad_zm         & ! intent(inout)
        3505             : #ifdef NETCDF
        3506             :                              , l_uv_nudge,                      & ! Intent(in)
        3507             :                              l_tke_aniso,                       & ! Intent(in)
        3508             :                              l_standard_term_ta                 & ! Intent(in)
        3509             : #endif
        3510           0 :                               )
        3511             :
        3512           0 :     if ( err_code == clubb_fatal_error ) error stop
        3513             :
        3514           0 :   end subroutine stats_end_timestep_api
        3515             :
        3516             :   !================================================================================================
        3517             :   ! stats_finalize - Close NetCDF files and deallocate scratch space and stats file structures.
        3518             :   !================================================================================================
        3519             :
        3520           0 :   subroutine stats_finalize_api ( stats_metadata, &
        3521             :                                   stats_zt, stats_zm, stats_sfc, &
        3522             :                                   stats_lh_zt, stats_lh_sfc, &
        3523             :                                   stats_rad_zt, stats_rad_zm )
        3524             :
        3525             :     use stats_clubb_utilities, only : &
        3526             :       stats_finalize
        3527             :
        3528             :     implicit none
        3529             :
        3530             :     type(stats), target, intent(inout) :: &
        3531             :       stats_zt, &
        3532             :       stats_zm, &
        3533             :       stats_sfc, &
        3534             :       stats_lh_zt, &
        3535             :       stats_lh_sfc, &
        3536             :       stats_rad_zt, &
        3537             :       stats_rad_zm
        3538             :
        3539             :     type (stats_metadata_type), intent(inout) :: &
        3540             :       stats_metadata
        3541             :
        3542             :     call stats_finalize ( stats_metadata, & ! intent(inout)
        3543             :                           stats_zt, stats_zm, stats_sfc, & ! intent(inout)
        3544             :                           stats_lh_zt, stats_lh_sfc, & ! intent(inout)
        3545           0 :                           stats_rad_zt, stats_rad_zm ) ! intent(inout)
        3546             :
        3547           0 :   end subroutine stats_finalize_api
        3548             :
        3549             :
        3550             :   !================================================================================================
        3551             :   ! calculate_spurious_source - Checks whether there is conservation within the column.
        3552             :   !================================================================================================
        3553           0 :   function calculate_spurious_source_api ( &
        3554             :     integral_after, integral_before, &
        3555             :     flux_top, flux_sfc, &
        3556             :     integral_forcing, dt ) result( spurious_source )
        3557             :
        3558             :     use numerical_check, only : calculate_spurious_source
        3559             :
        3560             :     implicit none
        3561             :
        3562             :     ! Input Variables
        3563             :     real( kind = core_rknd ), intent(in) :: &
        3564             :       integral_after, &   ! Vertically-integrated quantity after dt time  [units vary]
        3565             :       integral_before, &  ! Vertically-integrated quantity before dt time [units vary]
        3566             :       flux_top, &         ! Total flux at the top of the domain           [units vary]
        3567             :       flux_sfc, &         ! Total flux at the bottom of the domain        [units vary]
        3568             :       integral_forcing, & ! Vertically-integrated forcing                 [units vary]
        3569             :       dt                  ! Timestep size                                 [s]
        3570             :
        3571             :     ! Return Variable
        3572             :     real( kind = core_rknd ) :: spurious_source ! [units vary]
        3573             :
        3574             :     spurious_source = calculate_spurious_source( &
        3575             :       integral_after, integral_before, &
        3576             :       flux_top, flux_sfc, &
        3577           0 :       integral_forcing, dt )
        3578             :
        3579           0 :   end function calculate_spurious_source_api
        3580             :
        3581             :   !================================================================================================
        3582             :   ! calculate_thlp2_rad - Computes the contribution of radiative cooling to thlp2
        3583             :   !================================================================================================
        3584           0 :   subroutine calculate_thlp2_rad_api &
        3585           0 :                   ( nz, rcm_zm, thlprcp, radht_zm, & ! Intent(in)
        3586             :                     clubb_params,                  & ! Intent(in)
        3587           0 :                     thlp2_forcing )                  ! Intent(inout)
        3588             :
        3589             :     use clubb_precision, only: &
        3590             :         core_rknd                     ! Constant(s)
        3591             :
        3592             :     use advance_clubb_core_module, only: &
        3593             :         calculate_thlp2_rad
        3594             :
        3595             :     use parameter_indices, only: &
        3596             :         nparams
        3597             :
        3598             :     implicit none
        3599             :
        3600             :   ! Input Variables
        3601             :     integer, intent(in) :: &
        3602             :       nz                    ! Number of vertical levels                      [-]
        3603             :
        3604             :     real( kind = core_rknd ), dimension(nz), intent(in) :: &
        3605             :       rcm_zm, &             ! Cloud water mixing ratio on momentum grid      [kg/kg]
        3606             :       thlprcp, &            ! thl'rc'                                        [K kg/kg]
        3607             :       radht_zm              ! SW + LW heating rate (on momentum grid)        [K/s]
        3608             :
        3609             :     real( kind = core_rknd ), dimension(nparams), intent(in) :: &
        3610             :       clubb_params    ! Array of CLUBB's tunable parameters    [units vary]
        3611             :
        3612             :   ! Input/Output Variables
        3613             :     real( kind = core_rknd ), dimension(nz), intent(inout) :: &
        3614             :       thlp2_forcing         ! <th_l'^2> forcing (momentum levels)            [K^2/s]
        3615             :   !----------------------------------------------------------------------
        3616             :
        3617             :     call calculate_thlp2_rad( nz, rcm_zm, thlprcp, radht_zm, & ! intent(in)
        3618             :                               clubb_params,                  & ! intent(in)
        3619           0 :                               thlp2_forcing )                  ! intent(inout)
        3620             :
        3621           0 :     return
        3622             :   end subroutine calculate_thlp2_rad_api
        3623             :
        3624             :   !================================================================================================
        3625             :   ! update_xp2_mc - Calculates the effects of rain evaporation on rtp2 and thlp2
        3626             :   !================================================================================================
        3627           0 :   subroutine update_xp2_mc_api_multi_col( gr, nz, ngrdcol, dt, cloud_frac, rcm, rvm, thlm, &
        3628           0 :                                           wm, exner, rrm_evap, pdf_params,        &
        3629           0 :                                           rtp2_mc, thlp2_mc, wprtp_mc, wpthlp_mc,    &
        3630           0 :                                           rtpthlp_mc )
        3631             :
        3632             :     use advance_xp2_xpyp_module, only: &
        3633             :         update_xp2_mc
        3634             :
        3635             :      ! Type
        3636             :
        3637             :     implicit none
        3638             :
        3639             :     ! -------------------- Input Variables --------------------
        3640             :     integer, intent(in) :: &
        3641             :       nz, & ! Points in the Vertical        [-]
        3642             :       ngrdcol
        3643             :
        3644             :     type(grid), target, intent(in) :: gr
        3645             :
        3646             :     real( kind = core_rknd ), intent(in) :: dt ! Model timestep        [s]
        3647             :
        3648             :     real( kind = core_rknd ), dimension(ngrdcol,nz), intent(in) :: &
        3649             :       cloud_frac, &       !Cloud fraction                        [-]
        3650             :       rcm, &              !Cloud water mixing ratio              [kg/kg]
        3651             :       rvm, &              !Vapor water mixing ratio              [kg/kg]
        3652             :       thlm, &             !Liquid potential temperature          [K]
        3653             :       wm, &               !Mean vertical velocity                [m/s]
        3654             :       exner, &            !Exner function                        [-]
        3655             :       rrm_evap         !Evaporation of rain                   [kg/kg/s]
        3656             :                           !It is expected that this variable is negative, as
        3657             :                           !that is the convention in Morrison microphysics
        3658             :
        3659             :     type(pdf_parameter), intent(in) :: &
        3660             :       pdf_params ! PDF parameters
        3661             :
        3662             :     ! -------------------- Input/Output Variables --------------------
        3663             :     real( kind = core_rknd ), dimension(ngrdcol,nz), intent(inout) :: &
        3664             :       rtp2_mc, &    !Tendency of <rt'^2> due to evaporation   [(kg/kg)^2/s]
        3665             :       thlp2_mc, &   !Tendency of <thl'^2> due to evaporation  [K^2/s]
        3666             :       wprtp_mc, &   !Tendency of <w'rt'> due to evaporation   [m*(kg/kg)/s^2]
        3667             :       wpthlp_mc, &  !Tendency of <w'thl'> due to evaporation  [m*K/s^2]
        3668             :       rtpthlp_mc    !Tendency of <rt'thl'> due to evaporation [K*(kg/kg)/s]
        3669             :
        3670             :     call update_xp2_mc( gr, nz, ngrdcol, dt, cloud_frac, rcm, rvm, thlm,        & ! intent(in)
        3671             :                         wm, exner, rrm_evap, pdf_params,        & ! intent(in)
        3672             :                         rtp2_mc, thlp2_mc, wprtp_mc, wpthlp_mc,    & ! intent(inout)
        3673           0 :                         rtpthlp_mc ) ! intent(inout)
        3674           0 :     return
        3675             :   end subroutine update_xp2_mc_api_multi_col
        3676             :
        3677             :   !================================================================================================
        3678             :   ! update_xp2_mc - Calculates the effects of rain evaporation on rtp2 and thlp2
        3679             :   !================================================================================================
        3680           0 :   subroutine update_xp2_mc_api_single_col( gr, nz, dt, cloud_frac, rcm, rvm, thlm, &
        3681           0 :                                            wm, exner, rrm_evap, pdf_params,        &
        3682           0 :                                            rtp2_mc, thlp2_mc, wprtp_mc, wpthlp_mc,    &
        3683           0 :                                            rtpthlp_mc )
        3684             :
        3685             :     use advance_xp2_xpyp_module, only: &
        3686             :         update_xp2_mc
        3687             :
        3688             :      ! Type
        3689             :
        3690             :     implicit none
        3691             :
        3692             :     ! -------------------- Input Variables --------------------
        3693             :     integer, intent(in) :: &
        3694             :       nz ! Points in the Vertical        [-]
        3695             :
        3696             :     type(grid), target, intent(in) :: gr
        3697             :
        3698             :     real( kind = core_rknd ), intent(in) :: dt ! Model timestep        [s]
        3699             :
        3700             :     real( kind = core_rknd ), dimension(nz), intent(in) :: &
        3701             :       cloud_frac, &       !Cloud fraction                        [-]
        3702             :       rcm, &              !Cloud water mixing ratio              [kg/kg]
        3703             :       rvm, &              !Vapor water mixing ratio              [kg/kg]
        3704             :       thlm, &             !Liquid potential temperature          [K]
        3705             :       wm, &               !Mean vertical velocity                [m/s]
        3706             :       exner, &            !Exner function                        [-]
        3707             :       rrm_evap         !Evaporation of rain                   [kg/kg/s]
        3708             :                           !It is expected that this variable is negative, as
        3709             :                           !that is the convention in Morrison microphysics
        3710             :
        3711             :     type(pdf_parameter), intent(in) :: &
        3712             :       pdf_params ! PDF parameters
        3713             :
        3714             :     ! -------------------- Input/Output Variables --------------------
        3715             :     real( kind = core_rknd ), dimension(nz), intent(inout) :: &
        3716             :       rtp2_mc, &    !Tendency of <rt'^2> due to evaporation   [(kg/kg)^2/s]
        3717             :       thlp2_mc, &   !Tendency of <thl'^2> due to evaporation  [K^2/s]
        3718             :       wprtp_mc, &   !Tendency of <w'rt'> due to evaporation   [m*(kg/kg)/s^2]
        3719             :       wpthlp_mc, &  !Tendency of <w'thl'> due to evaporation  [m*K/s^2]
        3720             :       rtpthlp_mc    !Tendency of <rt'thl'> due to evaporation [K*(kg/kg)/s]
        3721             :
        3722             :     ! -------------------- Local Variables --------------------
        3723             :     real( kind = core_rknd ), dimension(1,nz) :: &
        3724           0 :       cloud_frac_col, &       !Cloud fraction                        [-]
        3725           0 :       rcm_col, &              !Cloud water mixing ratio              [kg/kg]
        3726           0 :       rvm_col, &              !Vapor water mixing ratio              [kg/kg]
        3727           0 :       thlm_col, &             !Liquid potential temperature          [K]
        3728           0 :       wm_col, &               !Mean vertical velocity                [m/s]
        3729           0 :       exner_col, &            !Exner function                        [-]
        3730           0 :       rrm_evap_col         !Evaporation of rain                   [kg/kg/s]
        3731             :                           !It is expected that this variable is negative, as
        3732             :                           !that is the convention in Morrison microphysics
        3733             :
        3734             :     real( kind = core_rknd ), dimension(1,nz) :: &
        3735           0 :       rtp2_mc_col, &    !Tendency of <rt'^2> due to evaporation   [(kg/kg)^2/s]
        3736           0 :       thlp2_mc_col, &   !Tendency of <thl'^2> due to evaporation  [K^2/s]
        3737           0 :       wprtp_mc_col, &   !Tendency of <w'rt'> due to evaporation   [m*(kg/kg)/s^2]
        3738           0 :       wpthlp_mc_col, &  !Tendency of <w'thl'> due to evaporation  [m*K/s^2]
        3739           0 :       rtpthlp_mc_col    !Tendency of <rt'thl'> due to evaporation [K*(kg/kg)/s]
        3740             :
        3741           0 :     cloud_frac_col(1,:) = cloud_frac
        3742           0 :     rcm_col(1,:) = rcm
        3743           0 :     rvm_col(1,:) = rvm
        3744           0 :     thlm_col(1,:) = thlm
        3745           0 :     wm_col(1,:) = wm
        3746           0 :     exner_col(1,:) = exner
        3747           0 :     rrm_evap_col(1,:) = rrm_evap
        3748           0 :     rtp2_mc_col(1,:) = rtp2_mc
        3749           0 :     thlp2_mc_col(1,:) = thlp2_mc
        3750           0 :     wprtp_mc_col(1,:) = wprtp_mc
        3751           0 :     wpthlp_mc_col(1,:) = wpthlp_mc
        3752           0 :     rtpthlp_mc_col(1,:) = rtpthlp_mc
        3753             :
        3754             :     call update_xp2_mc( gr, nz, 1, dt, cloud_frac_col, rcm_col, rvm_col, thlm_col, & ! intent(in)
        3755             :                         wm_col, exner_col, rrm_evap_col, pdf_params,        & ! intent(in)
        3756             :                         rtp2_mc_col, thlp2_mc_col, wprtp_mc_col, wpthlp_mc_col,    & ! intent(inout)
        3757           0 :                         rtpthlp_mc_col ) ! intent(inout)
        3758             :
        3759           0 :     rtp2_mc = rtp2_mc_col(1,:)
        3760           0 :     thlp2_mc = thlp2_mc_col(1,:)
        3761           0 :     wprtp_mc = wprtp_mc_col(1,:)
        3762           0 :     wpthlp_mc = wpthlp_mc_col(1,:)
        3763           0 :     rtpthlp_mc = rtpthlp_mc_col(1,:)
        3764             :
        3765           0 :     return
        3766             :   end subroutine update_xp2_mc_api_single_col
        3767             :
        3768             :
        3769             :
        3770             :   !================================================================================================
        3771             :   ! set_default_parameters: Sets all CLUBB tunable parameters to a default setting
        3772             :   !================================================================================================
        3773        1536 :   subroutine set_default_parameters_api( &
        3774             :                C1, C1b, C1c, C2rt, C2thl, C2rtthl, &
        3775             :                C4, C_uu_shr, C_uu_buoy, C6rt, C6rtb, C6rtc, &
        3776             :                C6thl, C6thlb, C6thlc, C7, C7b, C7c, C8, C8b, C10, &
        3777             :                C11, C11b, C11c, C12, C13, C14, C_wp2_pr_dfsn, C_wp3_pr_tp, &
        3778             :                C_wp3_pr_turb, C_wp3_pr_dfsn, C_wp2_splat, &
        3779             :                C6rt_Lscale0, C6thl_Lscale0, C7_Lscale0, wpxp_L_thresh, &
        3780             :                c_K, c_K1, nu1, c_K2, nu2, c_K6, nu6, c_K8, nu8, &
        3781             :                c_K9, nu9, nu10, c_K_hm, c_K_hmb, K_hm_min_coef, nu_hm, &
        3782             :                slope_coef_spread_DG_means_w, pdf_component_stdev_factor_w, &
        3783             :                coef_spread_DG_means_rt, coef_spread_DG_means_thl, &
        3784             :                gamma_coef, gamma_coefb, gamma_coefc, mu, beta, lmin_coef, &
        3785             :                omicron, zeta_vrnce_rat, upsilon_precip_frac_rat, &
        3786             :                lambda0_stability_coef, mult_coef, taumin, taumax, &
        3787             :                Lscale_mu_coef, Lscale_pert_coef, alpha_corr, &
        3788             :                Skw_denom_coef, c_K10, c_K10h, thlp2_rad_coef, &
        3789             :                thlp2_rad_cloud_frac_thresh, up2_sfc_coef, &
        3790             :                Skw_max_mag, xp3_coef_base, xp3_coef_slope, &
        3791             :                altitude_threshold, rtp2_clip_coef, C_invrs_tau_bkgnd, &
        3792             :                C_invrs_tau_sfc, C_invrs_tau_shear, C_invrs_tau_N2, &
        3793             :                C_invrs_tau_N2_wp2, C_invrs_tau_N2_xp2, &
        3794             :                C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
        3795             :                C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
        3796             :                Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
        3797             :                wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace )
        3798             :
        3799             :     use parameters_tunable, only: &
        3800             :         set_default_parameters    ! Procedure(s)
        3801             :
        3802             :     implicit none
        3803             :
        3804             :     ! Output variables
        3805             :     real( kind = core_rknd ), intent(out) :: &
        3806             :       C1, C1b, C1c, C2rt, C2thl, C2rtthl, &
        3807             :       C4, C_uu_shr, C_uu_buoy, C6rt, C6rtb, C6rtc, C6thl, C6thlb, C6thlc, &
        3808             :       C7, C7b, C7c, C8, C8b, C10, &
        3809             :       C11, C11b, C11c, C12, C13, C14, C_wp2_pr_dfsn, C_wp3_pr_tp, &
        3810             :       C_wp3_pr_turb, C_wp3_pr_dfsn, C_wp2_splat, &
        3811             :       C6rt_Lscale0, C6thl_Lscale0, C7_Lscale0, wpxp_L_thresh, &
        3812             :       c_K, c_K1, nu1, c_K2, nu2, c_K6, nu6, c_K8, nu8,  &
        3813             :       c_K9, nu9, nu10, c_K_hm, c_K_hmb, K_hm_min_coef, nu_hm, &
        3814             :       slope_coef_spread_DG_means_w, pdf_component_stdev_factor_w, &
        3815             :       coef_spread_DG_means_rt, coef_spread_DG_means_thl, &
        3816             :       gamma_coef, gamma_coefb, gamma_coefc, mu, beta, lmin_coef, &
        3817             :       omicron, zeta_vrnce_rat, upsilon_precip_frac_rat, &
        3818             :       lambda0_stability_coef, mult_coef, taumin, taumax, Lscale_mu_coef, &
        3819             :       Lscale_pert_coef, alpha_corr, Skw_denom_coef, c_K10, c_K10h, &
        3820             :       thlp2_rad_coef, thlp2_rad_cloud_frac_thresh, up2_sfc_coef, &
        3821             :       Skw_max_mag, xp3_coef_base, xp3_coef_slope, altitude_threshold, &
        3822             :       rtp2_clip_coef, C_invrs_tau_bkgnd, C_invrs_tau_sfc, &
        3823             :       C_invrs_tau_shear, C_invrs_tau_N2, C_invrs_tau_N2_wp2, &
        3824             :       C_invrs_tau_N2_xp2, C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
        3825             :       C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
        3826             :       Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
        3827             :       wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace
        3828             :
        3829             :     call set_default_parameters( &
        3830             :                C1, C1b, C1c, C2rt, C2thl, C2rtthl, &
        3831             :                C4, C_uu_shr, C_uu_buoy, C6rt, C6rtb, C6rtc, &
        3832             :                C6thl, C6thlb, C6thlc, C7, C7b, C7c, C8, C8b, C10, &
        3833             :                C11, C11b, C11c, C12, C13, C14, C_wp2_pr_dfsn, C_wp3_pr_tp, &
        3834             :                C_wp3_pr_turb, C_wp3_pr_dfsn, C_wp2_splat, &
        3835             :                C6rt_Lscale0, C6thl_Lscale0, C7_Lscale0, wpxp_L_thresh, &
        3836             :                c_K, c_K1, nu1, c_K2, nu2, c_K6, nu6, c_K8, nu8, &
        3837             :                c_K9, nu9, nu10, c_K_hm, c_K_hmb, K_hm_min_coef, nu_hm, &
        3838             :                slope_coef_spread_DG_means_w, pdf_component_stdev_factor_w, &
        3839             :                coef_spread_DG_means_rt, coef_spread_DG_means_thl, &
        3840             :                gamma_coef, gamma_coefb, gamma_coefc, mu, beta, lmin_coef, &
        3841             :                omicron, zeta_vrnce_rat, upsilon_precip_frac_rat, &
        3842             :                lambda0_stability_coef, mult_coef, taumin, taumax, &
        3843             :                Lscale_mu_coef, Lscale_pert_coef, alpha_corr, &
        3844             :                Skw_denom_coef, c_K10, c_K10h, thlp2_rad_coef, &
        3845             :                thlp2_rad_cloud_frac_thresh, up2_sfc_coef, &
        3846             :                Skw_max_mag, xp3_coef_base, xp3_coef_slope, &
        3847             :                altitude_threshold, rtp2_clip_coef, C_invrs_tau_bkgnd, &
        3848             :                C_invrs_tau_sfc, C_invrs_tau_shear, C_invrs_tau_N2, &
        3849             :                C_invrs_tau_N2_wp2, C_invrs_tau_N2_xp2, &
        3850             :                C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
        3851             :                C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
        3852             :                Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
        3853        1536 :                wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace )
        3854             :
        3855        1536 :     return
        3856             :
        3857             :   end subroutine set_default_parameters_api
        3858             :
        3859             :   !================================================================================================
        3860             :   ! print_clubb_config_flags: Prints the clubb_config_flags
        3861             :   !================================================================================================
        3862           2 :   subroutine print_clubb_config_flags_api( iunit, clubb_config_flags ) ! In
        3863             :
        3864             :     use model_flags, only: &
        3865             :         clubb_config_flags_type, &          ! Type
        3866             :         print_clubb_config_flags            ! Procedure
        3867             :
        3868             :     implicit none
        3869             :
        3870             :     ! Input variables
        3871             :     integer, intent(in) :: &
        3872             :       iunit ! The file to write to
        3873             :
        3874             :     type(clubb_config_flags_type), intent(in) :: &
        3875             :       clubb_config_flags ! Derived type holding all configurable CLUBB flags
        3876             :
        3877           2 :     call print_clubb_config_flags( iunit, clubb_config_flags ) ! In
        3878             :
        3879           2 :   end subroutine print_clubb_config_flags_api
        3880             :
        3881             :   !================================================================================================
        3882             :   ! initialize_tau_sponge_damp
        3883             :   !================================================================================================
        3884           0 :   subroutine initialize_tau_sponge_damp_api( gr, dt, z, settings, damping_profile )
        3885             :
        3886             :     use sponge_layer_damping, only: &
        3887             :         sponge_damp_settings,       & ! Variable(s)
        3888             :         sponge_damp_profile,        &
        3889             :         initialize_tau_sponge_damp    ! Procedure(s)
        3890             :
        3891             :
        3892             :
        3893             :     implicit none
        3894             :
        3895             :     type(grid), target, intent(in) :: gr
        3896             :
        3897             :     ! Input Variable(s)
        3898             :     real( kind = core_rknd ), intent(in) :: &
        3899             :       dt    ! Model Timestep    [s]
        3900             :
        3901             :     real( kind = core_rknd ), dimension(gr%nz), intent(in) :: &
        3902             :       z    ! Height of model grid levels    [m]
        3903             :
        3904             :     type(sponge_damp_settings), intent(in) :: &
        3905             :       settings
        3906             :
        3907             :     ! Output Variable(s)
        3908             :     type(sponge_damp_profile), intent(out) :: &
        3909             :       damping_profile
        3910             :
        3911             :     call initialize_tau_sponge_damp( gr, dt, z, settings, & ! intent(in)
        3912           0 :                                      damping_profile ) ! intent(inout)
        3913             :
        3914           0 :   end subroutine initialize_tau_sponge_damp_api
        3915             :
        3916             :   !================================================================================================
        3917             :   ! finalize_tau_sponge_damp
        3918             :   !================================================================================================
        3919           0 :   subroutine finalize_tau_sponge_damp_api( damping_profile )
        3920             :
        3921             :     use sponge_layer_damping, only: &
        3922             :         sponge_damp_profile,      & ! Variable(s)
        3923             :         finalize_tau_sponge_damp    ! Procedure(s)
        3924             :
        3925             :     implicit none
        3926             :
        3927             :     ! Input/Output Variable(s)
        3928             :     type(sponge_damp_profile), intent(inout) :: &
        3929             :       damping_profile ! Information for damping the profile
        3930             :
        3931           0 :     call finalize_tau_sponge_damp( damping_profile ) ! intent(inout)
        3932             :
        3933           0 :   end subroutine finalize_tau_sponge_damp_api
        3934             :
        3935             : end module clubb_api_module

Generated by: LCOV version 1.14