LCOV - code coverage report
Current view: top level - chemistry/pp_none - mo_exp_sol.F90 (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 11 0.0 %
Date: 2025-01-13 21:54:50 Functions: 0 2 0.0 %

          Line data    Source code
       1             : module mo_exp_sol
       2             :   private
       3             :   public :: exp_sol
       4             :   public :: exp_sol_inti
       5             : contains
       6           0 :   subroutine exp_sol_inti
       7             :     use mo_tracname, only : solsym
       8             :     use chem_mods, only : clscnt1, clsmap
       9             :     use ppgrid, only : pver
      10             :     use cam_history, only : addfld
      11             :     implicit none
      12             :     integer :: i,j
      13             :     do i = 1,clscnt1
      14             :        j = clsmap(i,1)
      15             :        call addfld( trim(solsym(j))//'_CHMP', (/ 'lev' /), 'I', '/cm3/s', 'chemical production rate' )
      16             :        call addfld( trim(solsym(j))//'_CHML', (/ 'lev' /), 'I', '/cm3/s', 'chemical loss rate' )
      17             :     enddo
      18           0 :   end subroutine exp_sol_inti
      19           0 :   subroutine exp_sol( base_sol, reaction_rates, het_rates, extfrc, delt, xhnm, ncol, lchnk, ltrop )
      20             :     !-----------------------------------------------------------------------
      21             :     ! ... Exp_sol advances the volumetric mixing ratio
      22             :     ! forward one time step via the fully explicit
      23             :     ! Euler scheme
      24             :     !-----------------------------------------------------------------------
      25           0 :     use chem_mods, only : clscnt1, extcnt, gas_pcnst, clsmap, rxntot
      26             :     use ppgrid, only : pcols, pver
      27             :     use mo_prod_loss, only : exp_prod_loss
      28             :     use mo_indprd, only : indprd
      29             :     use shr_kind_mod, only : r8 => shr_kind_r8
      30             :     use cam_history, only : outfld
      31             :     use mo_tracname, only : solsym
      32             :     implicit none
      33             :     !-----------------------------------------------------------------------
      34             :     ! ... Dummy arguments
      35             :     !-----------------------------------------------------------------------
      36             :     integer, intent(in) :: ncol ! columns in chunck
      37             :     integer, intent(in) :: lchnk ! chunk id
      38             :     real(r8), intent(in) :: delt ! time step (s)
      39             :     real(r8), intent(in) :: het_rates(ncol,pver,max(1,gas_pcnst)) ! het rates (1/cm^3/s)
      40             :     real(r8), intent(in) :: reaction_rates(ncol,pver,rxntot) ! rxt rates (1/cm^3/s)
      41             :     real(r8), intent(in) :: extfrc(ncol,pver,extcnt) ! "external insitu forcing" (1/cm^3/s)
      42             :     real(r8), intent(in) :: xhnm(ncol,pver)
      43             :     integer, intent(in) :: ltrop(pcols) ! chemistry troposphere boundary (index)
      44             :     real(r8), intent(inout) :: base_sol(ncol,pver,gas_pcnst) ! working mixing ratios (vmr)
      45             :     !-----------------------------------------------------------------------
      46             :     ! ... Local variables
      47             :     !-----------------------------------------------------------------------
      48             :     integer :: i, k, l, m
      49             :     real(r8), dimension(ncol,pver,clscnt1) :: &
      50           0 :          prod, &
      51           0 :          loss, &
      52           0 :          ind_prd
      53           0 :     real(r8), dimension(ncol,pver) :: wrk
      54             :     !-----------------------------------------------------------------------
      55             :     ! ... Put "independent" production in the forcing
      56             :     !-----------------------------------------------------------------------
      57             :     call indprd( 1, ind_prd, clscnt1, base_sol, extfrc, &
      58           0 :          reaction_rates, ncol )
      59             :     !-----------------------------------------------------------------------
      60             :     ! ... Form F(y)
      61             :     !-----------------------------------------------------------------------
      62           0 :     call exp_prod_loss( prod, loss, base_sol, reaction_rates, het_rates )
      63             :     !-----------------------------------------------------------------------
      64             :     ! ... Solve for the mixing ratio at t(n+1)
      65             :     !-----------------------------------------------------------------------
      66             :     do m = 1,clscnt1
      67             :        l = clsmap(m,1)
      68             :        do i = 1,ncol
      69             :           do k = ltrop(i)+1,pver
      70             :              base_sol(i,k,l) = base_sol(i,k,l) + delt * (prod(i,k,m) + ind_prd(i,k,m) - loss(i,k,m))
      71             :           end do
      72             :        end do
      73             :        wrk(:,:) = (prod(:,:,m) + ind_prd(:,:,m))*xhnm
      74             :        call outfld( trim(solsym(l))//'_CHMP', wrk(:,:), ncol, lchnk )
      75             :        wrk(:,:) = (loss(:,:,m))*xhnm
      76             :        call outfld( trim(solsym(l))//'_CHML', wrk(:,:), ncol, lchnk )
      77             :     end do
      78           0 :   end subroutine exp_sol
      79             : end module mo_exp_sol

Generated by: LCOV version 1.14