DiffusiveFluxMethod_ESAtmo3D_t Subroutine

public subroutine DiffusiveFluxMethod_ESAtmo3D_t(this)

Fill diffFlux%interior with the constant-coefficient Laplacian flux at every interior node:

F_d(rho) = 0 (no mass diffusion) F_d(rhov_i) = -nu * d(rhov_i)/dx_d F_d(rhotheta)= -kappa * d(rhotheta)/dx_d

solutionGradient%interior(i,j,k,iel,iVar,d) holds d(s_iVar)/dx_d.

Arguments

TypeIntentOptionalAttributesName
class(ESAtmo3D_t), intent(inout) :: this

Contents


Source Code

  subroutine DiffusiveFluxMethod_ESAtmo3D_t(this)
    !! Fill diffFlux%interior with the constant-coefficient Laplacian
    !! flux at every interior node:
    !!
    !!   F_d(rho)      = 0                              (no mass diffusion)
    !!   F_d(rho*v_i)  = -nu    * d(rho*v_i)/dx_d
    !!   F_d(rho*theta)= -kappa * d(rho*theta)/dx_d
    !!
    !! solutionGradient%interior(i,j,k,iel,iVar,d) holds d(s_iVar)/dx_d.
    implicit none
    class(ESAtmo3D_t),intent(inout) :: this
    ! Local
    integer :: i,j,k,iel,d

    do concurrent(i=1:this%solution%N+1,j=1:this%solution%N+1, &
                  k=1:this%solution%N+1,iel=1:this%mesh%nElem,d=1:3)
      this%diffFlux%interior(i,j,k,iel,1,d) = 0.0_prec
      this%diffFlux%interior(i,j,k,iel,2,d) = &
        -this%nu*this%solutionGradient%interior(i,j,k,iel,2,d)
      this%diffFlux%interior(i,j,k,iel,3,d) = &
        -this%nu*this%solutionGradient%interior(i,j,k,iel,3,d)
      this%diffFlux%interior(i,j,k,iel,4,d) = &
        -this%nu*this%solutionGradient%interior(i,j,k,iel,4,d)
      this%diffFlux%interior(i,j,k,iel,5,d) = &
        -this%kappa*this%solutionGradient%interior(i,j,k,iel,5,d)
      ! Geopotential carries no diffusion.
      this%diffFlux%interior(i,j,k,iel,6,d) = 0.0_prec
    enddo

  endsubroutine DiffusiveFluxMethod_ESAtmo3D_t