tem_build_faceBuffers Subroutine

private subroutine tem_build_faceBuffers(minLevel, maxLevel, faces, levelDesc)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: minLevel

The minimum refinement level of your mesh.

integer, intent(in) :: maxLevel

The maximum refinement level of your mesh.

type(tem_face_type), intent(inout) :: faces(minLevel:maxLevel)

The communication pattern you want use for the buffer. The created face descriptor.

type(tem_levelDesc_type), intent(in) :: levelDesc(1:3,minLevel:maxLevel)

Dimension-by-dimension level descriptors


Source Code

  subroutine tem_build_faceBuffers( minLevel, maxLevel, faces, levelDesc )
    ! --------------------------------------------------------------------------
    !> The minimum refinement level of your mesh.
    integer, intent(in) :: minLevel
    !> The maximum refinement level of your mesh.
    integer, intent(in) :: maxLevel
    !> The communication pattern you want use for the buffer.
    ! type(tem_commpattern_type), intent(in) :: commPattern
    !> The created face descriptor.
    type(tem_face_type),intent(inout)  :: faces(minLevel:maxLevel)
    !> Dimension-by-dimension level descriptors
    type(tem_levelDesc_type), intent(in) :: levelDesc(1:3,minLevel:maxLevel)
    ! --------------------------------------------------------------------------
    integer :: iLevel, iDir
    ! --------------------------------------------------------------------------

    ! Create the face buffers for which I will receive information before
    ! my rank can do the timestep. Attention: this is consistent with the
    ! definition of a compute face.
    do iLevel = minLevel, maxLevel
      do iDir = 1, 3
        ! buffer for the state
        call tem_build_faceRecvBuffers(                                 &
          &    faces       = faces(iLevel)%faces(iDir),                 &
          &    levelDesc   = levelDesc(iDir, iLevel),                   &
          &    buf         = faces(iLevel)%faces(iDir)%recvBuffer_state )

        ! buffer for the flux
        call tem_build_faceRecvBuffers(                                &
          &    faces       = faces(iLevel)%faces(iDir),                &
          &    levelDesc   = levelDesc(iDir, iLevel),                  &
          &    buf         = faces(iLevel)%faces(iDir)%recvBuffer_flux )
      end do
    end do

    ! Create the face buffers for which I will send information before
    ! the other ranks can the timestep.
    do iLevel = minLevel, maxLevel
      do iDir = 1, 3
      ! buffer for the state
      call tem_build_faceSendBuffers(                                 &
        &    faces       = faces(iLevel)%faces(iDir),                 &
        &    levelDesc   = levelDesc(iDir, iLevel),                   &
        &    buf         = faces(iLevel)%faces(iDir)%sendBuffer_state )
      ! buffer for the flux
      call tem_build_faceSendBuffers(                                &
        &    faces       = faces(iLevel)%faces(iDir),                &
        &    levelDesc   = levelDesc(iDir, iLevel),                  &
        &    buf         = faces(iLevel)%faces(iDir)%sendBuffer_flux )
      end do
    end do

  end subroutine tem_build_faceBuffers