Free_DGModel3D Subroutine

public subroutine Free_DGModel3D(this)

Free the 3D DG model, including GPU BC arrays.

Arguments

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

Calls

proc~~free_dgmodel3d~~CallsGraph proc~free_dgmodel3d Free_DGModel3D interface~hipfree hipFree proc~free_dgmodel3d->interface~hipfree proc~free_dgmodel3d_t Free_DGModel3D_t proc~free_dgmodel3d->proc~free_dgmodel3d_t proc~gpucheck gpuCheck proc~free_dgmodel3d->proc~gpucheck

Contents

Source Code


Source Code

  subroutine Free_DGModel3D(this)
    !! Free the 3D DG model, including GPU BC arrays.
    implicit none
    class(DGModel3D),intent(inout) :: this
    ! Local
    type(BoundaryCondition),pointer :: bc

    ! Free hyperbolic BC device arrays
    bc => this%hyperbolicBCs%head
    do while(associated(bc))
      if(c_associated(bc%elements_gpu)) call gpuCheck(hipFree(bc%elements_gpu))
      if(c_associated(bc%sides_gpu)) call gpuCheck(hipFree(bc%sides_gpu))
      bc%elements_gpu = c_null_ptr
      bc%sides_gpu = c_null_ptr
      bc => bc%next
    enddo

    ! Free parabolic BC device arrays
    bc => this%parabolicBCs%head
    do while(associated(bc))
      if(c_associated(bc%elements_gpu)) call gpuCheck(hipFree(bc%elements_gpu))
      if(c_associated(bc%sides_gpu)) call gpuCheck(hipFree(bc%sides_gpu))
      bc%elements_gpu = c_null_ptr
      bc%sides_gpu = c_null_ptr
      bc => bc%next
    enddo

    ! Release the AMR transfer staging buffers. These are lazily created by
    ! StageSolutionForTransfer / ApplyTransferPlan and survive across adaptation epochs (and
    ! across Regrid, which runs between the two), so they are owned by the model and released
    ! only here.
    if(c_associated(this%xferOld_gpu)) call gpuCheck(hipFree(this%xferOld_gpu))
    if(c_associated(this%xferWin_gpu)) call gpuCheck(hipFree(this%xferWin_gpu))
    if(c_associated(this%xferKind_gpu)) call gpuCheck(hipFree(this%xferKind_gpu))
    if(c_associated(this%xferElem_gpu)) call gpuCheck(hipFree(this%xferElem_gpu))
    if(c_associated(this%xferFamily_gpu)) call gpuCheck(hipFree(this%xferFamily_gpu))
    if(c_associated(this%xferDepth_gpu)) call gpuCheck(hipFree(this%xferDepth_gpu))
    if(c_associated(this%xferPath_gpu)) call gpuCheck(hipFree(this%xferPath_gpu))
    this%xferOld_gpu = c_null_ptr
    this%xferWin_gpu = c_null_ptr
    this%xferKind_gpu = c_null_ptr
    this%xferElem_gpu = c_null_ptr
    this%xferFamily_gpu = c_null_ptr
    this%xferDepth_gpu = c_null_ptr
    this%xferPath_gpu = c_null_ptr
    this%xferAllocBytes = 0
    this%planAllocElem = 0
    this%planAllocStride = 0
    this%xferNOld = 0
    this%xferWinBytes = 0
    this%xferNWin = 0
    this%xferWinFirst = 0

    call Free_DGModel3D_t(this)

  endsubroutine Free_DGModel3D