Init_ECAdvection3D Subroutine

public subroutine Init_ECAdvection3D(this, mesh, geometry)

Initialize EC Advection 3D, then upload BC element/side arrays to GPU.

Arguments

TypeIntentOptionalAttributesName
class(ECAdvection3D), intent(out) :: this
type(Mesh3D), intent(in), target:: mesh
type(SEMHex), intent(in), target:: geometry

Calls

proc~~init_ecadvection3d~~CallsGraph proc~init_ecadvection3d Init_ECAdvection3D proc~init_ecdgmodel3d_t Init_ECDGModel3D_t proc~init_ecadvection3d->proc~init_ecdgmodel3d_t proc~gpucheck gpuCheck proc~init_ecadvection3d->proc~gpucheck interface~hipmemcpy hipMemcpy proc~init_ecadvection3d->interface~hipmemcpy interface~hipmalloc hipMalloc proc~init_ecadvection3d->interface~hipmalloc proc~init_dgmodel3d_t Init_DGModel3D_t proc~init_ecdgmodel3d_t->proc~init_dgmodel3d_t

Contents

Source Code


Source Code

  subroutine Init_ECAdvection3D(this,mesh,geometry)
    !! Initialize EC Advection 3D, then upload BC element/side arrays to GPU.
    implicit none
    class(ECAdvection3D),intent(out) :: this
    type(Mesh3D),intent(in),target :: mesh
    type(SEMHex),intent(in),target :: geometry
    ! Local
    type(BoundaryCondition),pointer :: bc

    call Init_ECDGModel3D_t(this,mesh,geometry)

    ! Upload hyperbolic BC element/side arrays to device
    bc => this%hyperbolicBCs%head
    do while(associated(bc))
      if(bc%nBoundaries > 0) then
        call gpuCheck(hipMalloc(bc%elements_gpu,sizeof(bc%elements)))
        call gpuCheck(hipMemcpy(bc%elements_gpu,c_loc(bc%elements), &
                                sizeof(bc%elements),hipMemcpyHostToDevice))
        call gpuCheck(hipMalloc(bc%sides_gpu,sizeof(bc%sides)))
        call gpuCheck(hipMemcpy(bc%sides_gpu,c_loc(bc%sides), &
                                sizeof(bc%sides),hipMemcpyHostToDevice))
      endif
      bc => bc%next
    enddo

  endsubroutine Init_ECAdvection3D