LCOV - code coverage report
Current view: top level - physics/cam7 - stochastic_tau_cam.F90 (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 53 0.0 %
Date: 2024-12-17 17:57:11 Functions: 0 2 0.0 %

          Line data    Source code
       1             : module stochastic_tau_cam
       2             : ! From Morrison (Lebo, originally TAU bin code)
       3             : ! Gettelman and Chen 2018
       4             : !the subroutines take in air density, air temperature, and the bin mass boundaries, and 
       5             : !output the mass and number mixing ratio tendencies in each bin directly.
       6             : !this is then wrapped for CAM. 
       7             : 
       8             : use shr_kind_mod,      only: cl=>shr_kind_cl
       9             : use cam_history,       only: addfld
      10             : use cam_logfile,       only: iulog
      11             : 
      12             : implicit none
      13             : private
      14             : save
      15             : 
      16             : ! Subroutines
      17             : public :: stochastic_tau_init_cam, stochastic_tau_readnl
      18             : 
      19             : !Module variables
      20             : 
      21             : integer, parameter, public  :: ncd = 35
      22             : character(len=cl) :: pumas_stochastic_tau_kernel_filename ! Full filepath/filename for tau kernel file
      23             : 
      24             : !===============================================================================
      25             : contains
      26             : !===============================================================================
      27           0 : subroutine stochastic_tau_readnl(nlfile)
      28             : 
      29             :   use namelist_utils,  only: find_group_name
      30             :   use units,           only: getunit, freeunit
      31             :   use spmd_utils,      only: mpicom, mstrid=>masterprocid, mpi_character, masterproc
      32             :   use cam_abortutils,  only: endrun
      33             :   use string_utils,    only: int2str
      34             : 
      35             :   character(len=*), intent(in) :: nlfile  ! filepath for file containing namelist input
      36             : 
      37             :   integer :: unitn, ierr
      38             :   character(len=*), parameter :: sub = 'stochastic_tau_readnl'
      39             : 
      40             :   namelist /pumas_stochastic_tau_nl/ pumas_stochastic_tau_kernel_filename
      41             : 
      42           0 :   if (masterproc) then
      43           0 :      unitn = getunit()
      44           0 :      open( unitn, file=trim(nlfile), status='old' )
      45           0 :      call find_group_name(unitn, 'pumas_stochastic_tau_nl', status=ierr)
      46           0 :      if (ierr == 0) then
      47           0 :         read(unitn, pumas_stochastic_tau_nl, iostat=ierr)
      48           0 :         if (ierr /= 0) then
      49           0 :            call endrun(sub // ':: ERROR reading namelist, iostat = ' // int2str(ierr))
      50             :         end if
      51             :      end if
      52           0 :      close(unitn)
      53           0 :      call freeunit(unitn)
      54             :   end if
      55             : 
      56             :   ! Broadcast namelist variables
      57           0 :   call mpi_bcast(pumas_stochastic_tau_kernel_filename, cl, mpi_character, mstrid, mpicom, ierr)
      58           0 :   if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: pumas_stochastic_tau_kernel_filename")
      59             : 
      60           0 :   write(iulog,*) 'PUMAS stochastic_tau_readnl, pumas_stochastic_tau_kernel_filename=',pumas_stochastic_tau_kernel_filename
      61             : 
      62           0 : end subroutine stochastic_tau_readnl
      63             : 
      64           0 : subroutine stochastic_tau_init_cam
      65             : 
      66             :     use cam_history_support, only:          add_hist_coord
      67             :     use pumas_stochastic_collect_tau, only: pumas_stochastic_kernel_init
      68             : 
      69             : 
      70           0 :     call pumas_stochastic_kernel_init(pumas_stochastic_tau_kernel_filename)
      71             : 
      72           0 :     call add_hist_coord('bins_ncd', ncd, 'bins for TAU microphysics')
      73             : 
      74             :     !Note: lev needs to be trop_cld_lev for proc_rates....
      75           0 :     call addfld('amk_c',(/'trop_cld_lev','bins_ncd    '/),'A','kg','cloud liquid mass from bins')
      76           0 :     call addfld('ank_c',(/'trop_cld_lev','bins_ncd    '/),'A','1/kg','cloud liquid number concentration from bins')
      77           0 :     call addfld('amk_r',(/'trop_cld_lev','bins_ncd    '/),'A','kg','rain mass from bins')
      78           0 :     call addfld('ank_r',(/'trop_cld_lev','bins_ncd    '/),'A','1/kg','rain number concentration from bins')
      79           0 :     call addfld('amk',(/'trop_cld_lev','bins_ncd    '/),'A','kg','all liquid mass from bins')
      80           0 :     call addfld('ank',(/'trop_cld_lev','bins_ncd    '/),'A','1/kg','all liquid number concentration from bins')
      81           0 :     call addfld('amk_out',(/'trop_cld_lev','bins_ncd    '/),'A','kg','all liquid mass from bins')
      82           0 :     call addfld('ank_out',(/'trop_cld_lev','bins_ncd    '/),'A','1/kg','all liquid number concentration from bins')
      83             : 
      84           0 :     call addfld('scale_nc',(/'trop_cld_lev'/),'A','1','scaling factor for nc') 
      85           0 :     call addfld('scale_nr',(/'trop_cld_lev'/),'A','1','scaling factor for nr') 
      86           0 :     call addfld('scale_qc',(/'trop_cld_lev'/),'A','1','scaling factor for qc') 
      87           0 :     call addfld('scale_qr',(/'trop_cld_lev'/),'A','1','scaling factor for qr')
      88             :  
      89           0 :     call addfld('QC_TAU_in',(/'trop_cld_lev'/),'A','kg/kg','qc in TAU')
      90           0 :     call addfld('NC_TAU_in',(/'trop_cld_lev'/),'A','1/kg','nc in TAU')
      91           0 :     call addfld('QR_TAU_in',(/'trop_cld_lev'/),'A','kg/kg','qr in TAU')
      92           0 :     call addfld('NR_TAU_in',(/'trop_cld_lev'/),'A','1/kg','nr in TAU')
      93           0 :     call addfld('QC_TAU_out',(/'trop_cld_lev'/),'A','kg/kg','qc out TAU')
      94           0 :     call addfld('NC_TAU_out',(/'trop_cld_lev'/),'A','1/kg','nc out TAU')
      95           0 :     call addfld('QR_TAU_out',(/'trop_cld_lev'/),'A','kg/kg','qr out TAU')
      96           0 :     call addfld('NR_TAU_out',(/'trop_cld_lev'/),'A','1/kg','nr out TAU')  
      97             :    
      98           0 :     call addfld('qctend_TAU',(/'trop_cld_lev'/),'A','kg/kg/s','qc tendency due to TAU bin code') 
      99           0 :     call addfld('nctend_TAU',(/'trop_cld_lev'/),'A','1/kg/s','nc tendency due to TAU bin code')
     100           0 :     call addfld('qrtend_TAU',(/'trop_cld_lev'/),'A','kg/kg/s','qr tendency due to TAU bin code') 
     101           0 :     call addfld('nrtend_TAU',(/'trop_cld_lev'/),'A','1/kg/s','nr tendency due to TAU bin code')
     102           0 :     call addfld('qctend_TAU_diag',(/'trop_cld_lev'/),'A','kg/kg/s','qc tendency due to TAU bin code')
     103           0 :     call addfld('nctend_TAU_diag',(/'trop_cld_lev'/),'A','1/kg/s','nc tendency due to TAU bin code')
     104           0 :     call addfld('qrtend_TAU_diag',(/'trop_cld_lev'/),'A','kg/kg/s','qr tendency due to TAU bin code')
     105           0 :     call addfld('nrtend_TAU_diag',(/'trop_cld_lev'/),'A','1/kg/s','nr tendency due to TAU bin code')
     106             : 
     107           0 :     call addfld('gmnnn_lmnnn_TAU',(/'trop_cld_lev'/),'A','1','sum of mass gain and loss from bin code')
     108           0 :     call addfld('ML_fixer',(/'trop_cld_lev'/),'A','1','frequency that ML fixer is activated')
     109           0 :     call addfld('qc_fixer',(/'trop_cld_lev'/),'A','kg/kg','delta qc due to ML fixer')
     110           0 :     call addfld('nc_fixer',(/'trop_cld_lev'/),'A','kg/kg','delta nc due to ML fixer')
     111           0 :     call addfld('qr_fixer',(/'trop_cld_lev'/),'A','kg/kg','delta qr due to ML fixer')
     112           0 :     call addfld('nr_fixer',(/'trop_cld_lev'/),'A','kg/kg','delta nr due to ML fixer')
     113             : 
     114           0 : end subroutine stochastic_tau_init_cam
     115             : end module stochastic_tau_cam
     116             : 
     117             : 

Generated by: LCOV version 1.14