AnisoMortarFluxCollect_MappedVector3D Subroutine

public subroutine AnisoMortarFluxCollect_MappedVector3D(this, mesh)

GPU implementation of AnisoMortarFluxCollect (see the base class for the algorithm and conservation statement).

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

Calls

proc~~anisomortarfluxcollect_mappedvector3d~~CallsGraph proc~anisomortarfluxcollect_mappedvector3d AnisoMortarFluxCollect_MappedVector3D proc~allocateanisomortarbuff_mappedvector3d AllocateAnisoMortarBuff_MappedVector3D proc~anisomortarfluxcollect_mappedvector3d->proc~allocateanisomortarbuff_mappedvector3d interface~anisomortargather_3d_gpu AnisoMortarGather_3D_gpu proc~anisomortarfluxcollect_mappedvector3d->interface~anisomortargather_3d_gpu interface~anisomortarflip_3d_gpu AnisoMortarFlip_3D_gpu proc~anisomortarfluxcollect_mappedvector3d->interface~anisomortarflip_3d_gpu interface~anisomortarfluxscatter_3d_gpu AnisoMortarFluxScatter_3D_gpu proc~anisomortarfluxcollect_mappedvector3d->interface~anisomortarfluxscatter_3d_gpu interface~hipmalloc hipMalloc proc~allocateanisomortarbuff_mappedvector3d->interface~hipmalloc proc~gpucheck gpuCheck proc~allocateanisomortarbuff_mappedvector3d->proc~gpucheck

Contents


Source Code

  subroutine AnisoMortarFluxCollect_MappedVector3D(this,mesh)
    !! GPU implementation of AnisoMortarFluxCollect (see the base class for the
    !! algorithm and conservation statement).
    implicit none
    class(MappedVector3D),intent(inout) :: this
    type(Mesh3D),intent(inout) :: mesh
    ! Local
    integer :: offset

    offset = mesh%decomp%offsetElem(mesh%decomp%rankId+1)
    call AllocateAnisoMortarBuff_MappedVector3D(this,mesh)

    if(mesh%decomp%mpiEnabled) then
      call this%MPIAnisoMortarFluxAsync(mesh)
    endif

    ! Stage rank-local small-face integrands (the big-face slots are gathered too but
    ! unused by the flux scatter)
    call AnisoMortarGather_3D_gpu(this%anisoMortarBuff_gpu,this%boundarynormal_gpu, &
                                  mesh%anisoMortarInfo_gpu,mesh%decomp%elemToRank_gpu, &
                                  mesh%decomp%rankId,offset,this%interp%N,this%nvar, &
                                  mesh%nAnisoMortars,this%nelem)

    if(mesh%decomp%mpiEnabled) then
      call mesh%decomp%FinalizeMPIExchangeAsync()
      call AnisoMortarFlip_3D_gpu(this%anisoMortarBuff_gpu,mesh%anisoMortarInfo_gpu, &
                                  mesh%decomp%elemToRank_gpu,mesh%decomp%rankId, &
                                  this%interp%N,this%nvar,mesh%nAnisoMortars)
    endif

    call AnisoMortarFluxScatter_3D_gpu(this%boundarynormal_gpu,this%anisoMortarBuff_gpu, &
                                       this%interp%mortarP_gpu, &
                                       mesh%anisoMortarInfo_gpu,mesh%decomp%elemToRank_gpu, &
                                       mesh%decomp%rankId,offset,this%interp%N,this%nvar, &
                                       mesh%nAnisoMortars,this%nelem)

  endsubroutine AnisoMortarFluxCollect_MappedVector3D