!----------------------------------------------------------------------
! this module computes the total advection tendencies of advected
! constituents for the finite volume dycore
!----------------------------------------------------------------------
module advect_tend 1,1
use shr_kind_mod
, only : r8 => shr_kind_r8
save
private
public :: compute_adv_tends_xyz
real(r8), allocatable :: adv_tendxyz(:,:,:,:)
contains
!----------------------------------------------------------------------
! computes the total advective tendencies
! called twice each time step:
! - first call sets the initial mixing ratios
! - second call computes and outputs the tendencies
!----------------------------------------------------------------------
subroutine compute_adv_tends_xyz( grid, tracer ) 2,6
use dynamics_vars
, only : T_FVDYCORE_GRID
use cam_history
, only : outfld
use time_manager
, only : get_step_size
use constituents
, only : tottnam
implicit none
type (T_FVDYCORE_GRID), intent(in) :: grid
real (r8) :: tracer(grid%ifirstxy:grid%ilastxy, grid%jfirstxy:grid%jlastxy, grid%km, grid%nq )
real(r8) :: dt,idt
integer :: iq, idim, i, j,ic
logical :: init
real(r8) :: tmpxy(grid%ifirstxy:grid%ilastxy,grid%km)
init = .false.
if ( .not. allocated( adv_tendxyz ) ) then
init = .true.
allocate( adv_tendxyz(grid%ifirstxy:grid%ilastxy, grid%jfirstxy:grid%jlastxy, grid%km, grid%nq ) )
adv_tendxyz(:,:,:,:) = 0._r8
endif
!!$ adv_tendxyz(:,:,:,:grid%nq) = q(:,:,:,:grid%nq) - adv_tendxyz(:,:,:,:grid%nq)
do ic=1,grid%nq
adv_tendxyz(:,:,:,ic) = tracer(:,:,:,ic) - adv_tendxyz(:,:,:,ic)
enddo
if ( .not. init ) then
dt = get_step_size
()
idt = 1._r8/dt
do i = 1,grid%nq
! call outfld
do j = grid%jfirstxy, grid%jlastxy
idim = grid%ilastxy - grid%ifirstxy + 1
tmpxy(:,:) = adv_tendxyz(:,j,:,i)*idt
call outfld
( tottnam(i), tmpxy, idim, j)
enddo
enddo
deallocate(adv_tendxyz)
endif
end subroutine compute_adv_tends_xyz
end module advect_tend