Init_ECAdvection2D Subroutine

public subroutine Init_ECAdvection2D(this, mesh, geometry)

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

Arguments

TypeIntentOptionalAttributesName
class(ECAdvection2D), intent(out) :: this
type(Mesh2D), intent(in), target:: mesh
type(SEMQuad), intent(in), target:: geometry

Calls

proc~~init_ecadvection2d~~CallsGraph proc~init_ecadvection2d Init_ECAdvection2D proc~init_ecdgmodel2d_t Init_ECDGModel2D_t proc~init_ecadvection2d->proc~init_ecdgmodel2d_t proc~gpucheck gpuCheck proc~init_ecadvection2d->proc~gpucheck interface~hipmemcpy hipMemcpy proc~init_ecadvection2d->interface~hipmemcpy interface~hipmalloc hipMalloc proc~init_ecadvection2d->interface~hipmalloc proc~init_dgmodel2d_t Init_DGModel2D_t proc~init_ecdgmodel2d_t->proc~init_dgmodel2d_t

Contents

Source Code


Source Code

  subroutine Init_ECAdvection2D(this,mesh,geometry)
    !! Initialize EC Advection 2D, then upload BC element/side arrays to GPU.
    implicit none
    class(ECAdvection2D),intent(out) :: this
    type(Mesh2D),intent(in),target :: mesh
    type(SEMQuad),intent(in),target :: geometry
    ! Local
    type(BoundaryCondition),pointer :: bc

    call Init_ECDGModel2D_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_ECAdvection2D