hypre_obj_SetupStencilS Subroutine

private impure subroutine hypre_obj_SetupStencilS(this)

Sets up the discretization stencil. Each entry represents the relative offset (in index space) E.g.: a 2D 5-pt stencil would have the following geometry -- Offset { {0,0}, {-1,0}, {1,0}, {0,-1}, {0,1} } E.g.: a 3D 7-pt stencil would have the following geometry -- Offset { {0,0,0}, {-1,0,0}, {1,0,0}, {0,-1,0}, {0,1,0}, {0,0,-1}, {0,0,1} }

Type Bound

hypre_obj

Arguments

Type IntentOptional Attributes Name
class(hypre_obj), intent(inout) :: this

Hypre machinery


Calls

proc~~hypre_obj_setupstencils~~CallsGraph proc~hypre_obj_setupstencils hypre_obj%hypre_obj_SetupStencilS hypre_structstencilcreate hypre_structstencilcreate proc~hypre_obj_setupstencils->hypre_structstencilcreate hypre_structstencilsetelement hypre_structstencilsetelement proc~hypre_obj_setupstencils->hypre_structstencilsetelement

Called by

proc~~hypre_obj_setupstencils~~CalledByGraph proc~hypre_obj_setupstencils hypre_obj%hypre_obj_SetupStencilS proc~hypre_obj_setup hypre_obj%hypre_obj_Setup proc~hypre_obj_setup->proc~hypre_obj_setupstencils proc~cdifs_obj_preparesolveroperatorsplap cdifs_obj_PrepareSolverOperatorsPLAP proc~cdifs_obj_preparesolveroperatorsplap->proc~hypre_obj_setup proc~cdifs_obj_preparesolveroperatorsvflap cdifs_obj_PrepareSolverOperatorsVFLAP proc~cdifs_obj_preparesolveroperatorsvflap->proc~hypre_obj_setup proc~grans_obj_preparesolveroperators grans_obj_PrepareSolverOperators proc~grans_obj_preparesolveroperators->proc~hypre_obj_setup proc~marker_set_computesolidvolfrac marker_set%marker_set_ComputeSolidVolFrac proc~marker_set_computesolidvolfrac->proc~hypre_obj_setup proc~cdifs_obj_preparesolveroperators cdifs_obj_PrepareSolverOperators proc~cdifs_obj_preparesolveroperators->proc~cdifs_obj_preparesolveroperatorsplap proc~cdifs_obj_preparesolveroperators->proc~cdifs_obj_preparesolveroperatorsvflap proc~grans_obj_preparesolver grans_obj_PrepareSolver proc~grans_obj_preparesolver->proc~grans_obj_preparesolveroperators interface~grans_obj_preparesolver grans_obj%grans_obj_PrepareSolver interface~grans_obj_preparesolver->proc~grans_obj_preparesolver proc~cdifs_obj_preparesolver cdifs_obj_PrepareSolver proc~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolveroperators interface~cdifs_obj_preparesolver cdifs_obj%cdifs_obj_PrepareSolver interface~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolver

Source Code

    impure subroutine hypre_obj_SetupStencilS(this)
      !> Sets up the discretization stencil.
      ! Each entry represents the relative offset (in index space)
      ! E.g.: a 2D 5-pt stencil would have the following geometry
      !  -- Offset { {0,0}, {-1,0}, {1,0}, {0,-1}, {0,1} }
      ! E.g.: a 3D 7-pt stencil would have the following geometry
      !  -- Offset { {0,0,0}, {-1,0,0}, {1,0,0}, {0,-1,0}, {0,1,0}, {0,0,-1}, {0,0,1} }
      implicit none
      class(hypre_obj), intent(inout) :: this                                  !! Hypre machinery
      ! Work variables
      integer, allocatable :: offset(:,:)
      integer, allocatable :: offset_(:)
      integer :: n
      integer :: ierr

      ! Determine stencil size
      this%st_size= 1+2*this%dim*this%st

      ! Create an empty stencil object
      call HYPRE_StructStencilCreate(this%dim,this%st_size,this%stencil,ierr)

      ! Set the stencil entries
      allocate(offset(this%st_size,this%dim))
      allocate(offset_(this%dim))

      ! Offsets of a 7-point stencil
      select case (this%dim)
      case (2)
        offset(1,:)=[ 0, 0]
        offset(2,:)=[-1, 0]
        offset(3,:)=[ 1, 0]
        offset(4,:)=[ 0,-1]
        offset(5,:)=[ 0, 1]
      case (3)
        offset(1,:)=[ 0, 0, 0]
        offset(2,:)=[-1, 0, 0]
        offset(3,:)=[ 1, 0, 0]
        offset(4,:)=[ 0,-1, 0]
        offset(5,:)=[ 0, 1, 0]
        offset(6,:)=[ 0, 0,-1]
        offset(7,:)=[ 0, 0, 1]
      end select

      ! Assign stencil entries
      do n=1,this%st_size
        offset_=offset(n,1:this%dim)
        call HYPRE_StructStencilSetElement(this%stencil,n-1,offset_,ierr)
      end do
      deallocate(offset,offset_)

      return
    end subroutine hypre_obj_SetupStencilS