hypre_obj_Setup Subroutine

private impure subroutine hypre_obj_Setup(this)

Sets up the hypre objects in preparation for solves. Note: Setting up HYPRE is an expensive operation so it's best to do this only once during a simulation as opposed to setting-up and destorying each time-step.

Type Bound

hypre_obj

Arguments

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

Hypre machinery


Calls

proc~~hypre_obj_setup~~CallsGraph proc~hypre_obj_setup hypre_obj%hypre_obj_Setup proc~hypre_obj_setupgrids hypre_obj%hypre_obj_SetupGridS proc~hypre_obj_setup->proc~hypre_obj_setupgrids proc~hypre_obj_setupmatrixij hypre_obj%hypre_obj_SetupMatrixIJ proc~hypre_obj_setup->proc~hypre_obj_setupmatrixij proc~hypre_obj_setupmatrixs hypre_obj%hypre_obj_SetupMatrixS proc~hypre_obj_setup->proc~hypre_obj_setupmatrixs proc~hypre_obj_setuppointersij hypre_obj%hypre_obj_SetupPointersIJ proc~hypre_obj_setup->proc~hypre_obj_setuppointersij proc~hypre_obj_setuprhsij hypre_obj%hypre_obj_SetupRHSIJ proc~hypre_obj_setup->proc~hypre_obj_setuprhsij proc~hypre_obj_setuprhss hypre_obj%hypre_obj_SetupRHSS proc~hypre_obj_setup->proc~hypre_obj_setuprhss proc~hypre_obj_setuprowsij hypre_obj%hypre_obj_SetupRowsIJ proc~hypre_obj_setup->proc~hypre_obj_setuprowsij proc~hypre_obj_setupsolij hypre_obj%hypre_obj_SetupSolIJ proc~hypre_obj_setup->proc~hypre_obj_setupsolij proc~hypre_obj_setupsolijver hypre_obj%hypre_obj_SetupSolIJver proc~hypre_obj_setup->proc~hypre_obj_setupsolijver proc~hypre_obj_setupsols hypre_obj%hypre_obj_SetupSolS proc~hypre_obj_setup->proc~hypre_obj_setupsols proc~hypre_obj_setupsolvers hypre_obj%hypre_obj_SetupSolverS proc~hypre_obj_setup->proc~hypre_obj_setupsolvers proc~hypre_obj_setupstencils hypre_obj%hypre_obj_SetupStencilS proc~hypre_obj_setup->proc~hypre_obj_setupstencils hypre_structgridassemble hypre_structgridassemble proc~hypre_obj_setupgrids->hypre_structgridassemble hypre_structgridcreate hypre_structgridcreate proc~hypre_obj_setupgrids->hypre_structgridcreate hypre_structgridsetextents hypre_structgridsetextents proc~hypre_obj_setupgrids->hypre_structgridsetextents hypre_structgridsetperiodic hypre_structgridsetperiodic proc~hypre_obj_setupgrids->hypre_structgridsetperiodic hypre_ijmatrixassemble hypre_ijmatrixassemble proc~hypre_obj_setupmatrixij->hypre_ijmatrixassemble hypre_ijmatrixcreate hypre_ijmatrixcreate proc~hypre_obj_setupmatrixij->hypre_ijmatrixcreate hypre_ijmatrixgetobject hypre_ijmatrixgetobject proc~hypre_obj_setupmatrixij->hypre_ijmatrixgetobject hypre_ijmatrixinitialize hypre_ijmatrixinitialize proc~hypre_obj_setupmatrixij->hypre_ijmatrixinitialize hypre_ijmatrixsetobjecttype hypre_ijmatrixsetobjecttype proc~hypre_obj_setupmatrixij->hypre_ijmatrixsetobjecttype proc~hypre_obj_buildmatrixij hypre_obj%hypre_obj_BuildMatrixIJ proc~hypre_obj_setupmatrixij->proc~hypre_obj_buildmatrixij hypre_structmatrixassemble hypre_structmatrixassemble proc~hypre_obj_setupmatrixs->hypre_structmatrixassemble hypre_structmatrixcreate hypre_structmatrixcreate proc~hypre_obj_setupmatrixs->hypre_structmatrixcreate hypre_structmatrixinitialize hypre_structmatrixinitialize proc~hypre_obj_setupmatrixs->hypre_structmatrixinitialize proc~hypre_obj_buildmatrixs hypre_obj%hypre_obj_BuildMatrixS proc~hypre_obj_setupmatrixs->proc~hypre_obj_buildmatrixs hypre_setexecutionpolicy hypre_setexecutionpolicy proc~hypre_obj_setuppointersij->hypre_setexecutionpolicy hypre_setmemorylocation hypre_setmemorylocation proc~hypre_obj_setuppointersij->hypre_setmemorylocation hypre_setspgemmusevendor hypre_setspgemmusevendor proc~hypre_obj_setuppointersij->hypre_setspgemmusevendor proc~device_malloc_managed device_malloc_managed proc~hypre_obj_setuppointersij->proc~device_malloc_managed hypre_ijvectorassemble hypre_ijvectorassemble proc~hypre_obj_setuprhsij->hypre_ijvectorassemble hypre_ijvectorcreate hypre_ijvectorcreate proc~hypre_obj_setuprhsij->hypre_ijvectorcreate hypre_ijvectorgetobject hypre_ijvectorgetobject proc~hypre_obj_setuprhsij->hypre_ijvectorgetobject hypre_ijvectorinitialize hypre_ijvectorinitialize proc~hypre_obj_setuprhsij->hypre_ijvectorinitialize hypre_ijvectorsetobjecttype hypre_ijvectorsetobjecttype proc~hypre_obj_setuprhsij->hypre_ijvectorsetobjecttype hypre_ijvectorsetvalues hypre_ijvectorsetvalues proc~hypre_obj_setuprhsij->hypre_ijvectorsetvalues hypre_structvectorassemble hypre_structvectorassemble proc~hypre_obj_setuprhss->hypre_structvectorassemble hypre_structvectorcreate hypre_structvectorcreate proc~hypre_obj_setuprhss->hypre_structvectorcreate hypre_structvectorinitialize hypre_structvectorinitialize proc~hypre_obj_setuprhss->hypre_structvectorinitialize proc~eulerian_obj_init eulerian_obj_base%eulerian_obj_Init proc~hypre_obj_setuprowsij->proc~eulerian_obj_init proc~eulerian_obj_updateghostcells eulerian_obj_base%eulerian_obj_UpdateGhostCells proc~hypre_obj_setuprowsij->proc~eulerian_obj_updateghostcells proc~hypre_obj_setupsolij->hypre_ijvectorassemble proc~hypre_obj_setupsolij->hypre_ijvectorcreate proc~hypre_obj_setupsolij->hypre_ijvectorgetobject proc~hypre_obj_setupsolij->hypre_ijvectorinitialize proc~hypre_obj_setupsolij->hypre_ijvectorsetobjecttype proc~hypre_obj_setupsolij->hypre_ijvectorsetvalues hypre_boomeramgcreate hypre_boomeramgcreate proc~hypre_obj_setupsolijver->hypre_boomeramgcreate hypre_boomeramgsetagginterptype hypre_boomeramgsetagginterptype proc~hypre_obj_setupsolijver->hypre_boomeramgsetagginterptype hypre_boomeramgsetaggnumlevels hypre_boomeramgsetaggnumlevels proc~hypre_obj_setupsolijver->hypre_boomeramgsetaggnumlevels hypre_boomeramgsetcoarsentype hypre_boomeramgsetcoarsentype proc~hypre_obj_setupsolijver->hypre_boomeramgsetcoarsentype hypre_boomeramgsetinterptype hypre_boomeramgsetinterptype proc~hypre_obj_setupsolijver->hypre_boomeramgsetinterptype hypre_boomeramgsetkeeptransp hypre_boomeramgsetkeeptransp proc~hypre_obj_setupsolijver->hypre_boomeramgsetkeeptransp hypre_boomeramgsetmaxiter hypre_boomeramgsetmaxiter proc~hypre_obj_setupsolijver->hypre_boomeramgsetmaxiter hypre_boomeramgsetmaxlevels hypre_boomeramgsetmaxlevels proc~hypre_obj_setupsolijver->hypre_boomeramgsetmaxlevels hypre_boomeramgsetnumsweeps hypre_boomeramgsetnumsweeps proc~hypre_obj_setupsolijver->hypre_boomeramgsetnumsweeps hypre_boomeramgsetpmaxelmts hypre_boomeramgsetpmaxelmts proc~hypre_obj_setupsolijver->hypre_boomeramgsetpmaxelmts hypre_boomeramgsetprintlevel hypre_boomeramgsetprintlevel proc~hypre_obj_setupsolijver->hypre_boomeramgsetprintlevel hypre_boomeramgsetrap2 hypre_boomeramgsetrap2 proc~hypre_obj_setupsolijver->hypre_boomeramgsetrap2 hypre_boomeramgsetrelaxorder hypre_boomeramgsetrelaxorder proc~hypre_obj_setupsolijver->hypre_boomeramgsetrelaxorder hypre_boomeramgsetrelaxtype hypre_boomeramgsetrelaxtype proc~hypre_obj_setupsolijver->hypre_boomeramgsetrelaxtype hypre_boomeramgsettol hypre_boomeramgsettol proc~hypre_obj_setupsolijver->hypre_boomeramgsettol hypre_boomeramgsetup hypre_boomeramgsetup proc~hypre_obj_setupsolijver->hypre_boomeramgsetup hypre_parcsrpcgcreate hypre_parcsrpcgcreate proc~hypre_obj_setupsolijver->hypre_parcsrpcgcreate hypre_parcsrpcgsetlogging hypre_parcsrpcgsetlogging proc~hypre_obj_setupsolijver->hypre_parcsrpcgsetlogging hypre_parcsrpcgsetmaxiter hypre_parcsrpcgsetmaxiter proc~hypre_obj_setupsolijver->hypre_parcsrpcgsetmaxiter hypre_parcsrpcgsetprecond hypre_parcsrpcgsetprecond proc~hypre_obj_setupsolijver->hypre_parcsrpcgsetprecond hypre_parcsrpcgsettol hypre_parcsrpcgsettol proc~hypre_obj_setupsolijver->hypre_parcsrpcgsettol hypre_parcsrpcgsettwonorm hypre_parcsrpcgsettwonorm proc~hypre_obj_setupsolijver->hypre_parcsrpcgsettwonorm hypre_parcsrpcgsetup hypre_parcsrpcgsetup proc~hypre_obj_setupsolijver->hypre_parcsrpcgsetup proc~hypre_obj_setupsols->hypre_structvectorassemble proc~hypre_obj_setupsols->hypre_structvectorcreate proc~hypre_obj_setupsols->hypre_structvectorinitialize hypre_structvectorsetboxvalues hypre_structvectorsetboxvalues proc~hypre_obj_setupsols->hypre_structvectorsetboxvalues hypre_structpcgcreate hypre_structpcgcreate proc~hypre_obj_setupsolvers->hypre_structpcgcreate hypre_structpcgsetlogging hypre_structpcgsetlogging proc~hypre_obj_setupsolvers->hypre_structpcgsetlogging hypre_structpcgsetmaxiter hypre_structpcgsetmaxiter proc~hypre_obj_setupsolvers->hypre_structpcgsetmaxiter hypre_structpcgsetprintlevel hypre_structpcgsetprintlevel proc~hypre_obj_setupsolvers->hypre_structpcgsetprintlevel hypre_structpcgsettol hypre_structpcgsettol proc~hypre_obj_setupsolvers->hypre_structpcgsettol hypre_structpcgsetup hypre_structpcgsetup proc~hypre_obj_setupsolvers->hypre_structpcgsetup hypre_structpfmgcreate hypre_structpfmgcreate proc~hypre_obj_setupsolvers->hypre_structpfmgcreate hypre_structpfmgsetlogging hypre_structpfmgsetlogging proc~hypre_obj_setupsolvers->hypre_structpfmgsetlogging hypre_structpfmgsetmaxiter hypre_structpfmgsetmaxiter proc~hypre_obj_setupsolvers->hypre_structpfmgsetmaxiter hypre_structpfmgsetprintlevel hypre_structpfmgsetprintlevel proc~hypre_obj_setupsolvers->hypre_structpfmgsetprintlevel hypre_structpfmgsetraptype hypre_structpfmgsetraptype proc~hypre_obj_setupsolvers->hypre_structpfmgsetraptype hypre_structpfmgsetrelaxtype hypre_structpfmgsetrelaxtype proc~hypre_obj_setupsolvers->hypre_structpfmgsetrelaxtype hypre_structpfmgsettol hypre_structpfmgsettol proc~hypre_obj_setupsolvers->hypre_structpfmgsettol hypre_structpfmgsetup hypre_structpfmgsetup proc~hypre_obj_setupsolvers->hypre_structpfmgsetup hypre_structsmgcreate hypre_structsmgcreate proc~hypre_obj_setupsolvers->hypre_structsmgcreate hypre_structsmgsetlogging hypre_structsmgsetlogging proc~hypre_obj_setupsolvers->hypre_structsmgsetlogging hypre_structsmgsetmaxiter hypre_structsmgsetmaxiter proc~hypre_obj_setupsolvers->hypre_structsmgsetmaxiter hypre_structsmgsetnumpostrelax hypre_structsmgsetnumpostrelax proc~hypre_obj_setupsolvers->hypre_structsmgsetnumpostrelax hypre_structsmgsetnumprerelax hypre_structsmgsetnumprerelax proc~hypre_obj_setupsolvers->hypre_structsmgsetnumprerelax hypre_structsmgsetprintlevel hypre_structsmgsetprintlevel proc~hypre_obj_setupsolvers->hypre_structsmgsetprintlevel hypre_structsmgsettol hypre_structsmgsettol proc~hypre_obj_setupsolvers->hypre_structsmgsettol hypre_structsmgsetup hypre_structsmgsetup proc~hypre_obj_setupsolvers->hypre_structsmgsetup hypre_structstencilcreate hypre_structstencilcreate proc~hypre_obj_setupstencils->hypre_structstencilcreate hypre_structstencilsetelement hypre_structstencilsetelement proc~hypre_obj_setupstencils->hypre_structstencilsetelement interface~cudamallocmanaged cudaMallocManaged proc~device_malloc_managed->interface~cudamallocmanaged proc~eulerian_obj_updateghostcells_x eulerian_obj_base%eulerian_obj_UpdateGhostCells_x proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_x proc~eulerian_obj_updateghostcells_y eulerian_obj_base%eulerian_obj_UpdateGhostCells_y proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_y proc~eulerian_obj_updateghostcells_z eulerian_obj_base%eulerian_obj_UpdateGhostCells_z proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_z hypre_ijmatrixaddtovalues hypre_ijmatrixaddtovalues proc~hypre_obj_buildmatrixij->hypre_ijmatrixaddtovalues hypre_structmatrixsetvalues hypre_structmatrixsetvalues proc~hypre_obj_buildmatrixs->hypre_structmatrixsetvalues cell cell proc~eulerian_obj_updateghostcells_x->cell mpi_irecv mpi_irecv proc~eulerian_obj_updateghostcells_x->mpi_irecv mpi_isend mpi_isend proc~eulerian_obj_updateghostcells_x->mpi_isend mpi_waitall mpi_waitall proc~eulerian_obj_updateghostcells_x->mpi_waitall proc~eulerian_obj_updateghostcells_y->cell proc~eulerian_obj_updateghostcells_y->mpi_irecv proc~eulerian_obj_updateghostcells_y->mpi_isend proc~eulerian_obj_updateghostcells_y->mpi_waitall proc~eulerian_obj_updateghostcells_z->cell proc~eulerian_obj_updateghostcells_z->mpi_irecv proc~eulerian_obj_updateghostcells_z->mpi_isend proc~eulerian_obj_updateghostcells_z->mpi_waitall

Called by

proc~~hypre_obj_setup~~CalledByGraph proc~hypre_obj_setup hypre_obj%hypre_obj_Setup 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_Setup(this)
      !> Sets up the hypre objects in preparation for solves.
      ! Note: Setting up HYPRE is an expensive operation
      ! so it's best to do this only once during a simulation
      ! as opposed to setting-up and destorying each time-step.
      implicit none
      class(hypre_obj), intent(inout) :: this                                  !! Hypre machinery
      ! Work variables
      integer :: i,j,k
      real(wp):: dxi,dxmi(2)
      real(wp):: dyi,dymi(2)
      real(wp):: dzi,dzmi(2)

      if (.not.allocated(this%mat)) then
        ! Use default operator: 2nd order Laplacian
        ! Set stencil extent
        this%stm = 1

        ! Set matrix coefficients
        associate (x=>this%block%x, y=>this%block%y, z=>this%block%z,   &
          xm=>this%block%xm, ym=>this%block%ym, zm=>this%block%zm,      &
          lo=>this%block%lo, hi =>this%block%hi)
          allocate(this%mat(lo(1):hi(1),lo(2):hi(2),lo(3):hi(3),3,-this%stm:this%stm))

          do k=lo(3),hi(3)
            do j=lo(2),hi(2)
              do i=lo(1),hi(1)
                dxi     = 1.0_wp/(x(i+1)-x(i))
                dxmi(1) = 1.0_wp/(xm(i) -xm(i-1))
                dxmi(2) = 1.0_wp/(xm(i+1) -xm(i))

                dyi     = 1.0_wp/(y(j+1)-y(j))
                dymi(1) = 1.0_wp/(ym(j) -ym(j-1))
                dymi(2) = 1.0_wp/(ym(j+1) -ym(j))

                dzi     = 1.0_wp/(z(k+1)-z(k))
                dzmi(1) = 1.0_wp/(zm(k) -zm(k-1))
                dzmi(2) = 1.0_wp/(zm(k+1) -zm(k))
                ! Second derivative with respect to x1 (d2dx1): lower/diagonal/upper
                this%mat(i,j,k,1,:) = [dxi*dxmi(1),dxi*(-dxmi(1))-dxi*dxmi(2),dxi*dxmi(2)]
                ! Second derivative with respect to x2 (d2dx2): lower/diagonal/upper
                this%mat(i,j,k,2,:) = [dyi*dymi(1),dyi*(-dymi(1))-dyi*dymi(2),dyi*dymi(2)]
                ! Second derivative with respect to x3 (d2dx3): lower/diagonal/upper
                this%mat(i,j,k,3,:) = [dzi*dzmi(1),dzi*(-dzmi(1))-dzi*dzmi(2),dzi*dzmi(2)]
              end do
            end do
          end do
        end associate
      end if

      select case (this%interface)
      case (HYPRE_INT_Struct)
        ! Initialize the hypre components
        call hypre_obj_SetupGridS(this)
        call hypre_obj_SetupStencilS(this)
        call hypre_obj_SetupRHSS(this)
        call hypre_obj_SetupSolS(this)
        call hypre_obj_SetupMatrixS(this)

        ! Now setup the sovler
        call hypre_obj_SetupSolverS(this)
      case (HYPRE_INT_SStruct)
        ! Not yet implemented
      case (HYPRE_INT_IJ)
        call hypre_obj_SetupPointersIJ(this)
        call hypre_obj_SetupRowsIJ(this)
        call hypre_obj_SetupMatrixIJ(this)
        call hypre_obj_SetupRHSIJ(this)
        call hypre_obj_SetupSolIJ(this)

        ! Now setup the sovler
        call hypre_obj_SetupSolIJver(this)
      case default
        call this%parallel%Stop("Unknown or uninitialized HYPRE interface")
      end select

      ! Clear internal matrix
      deallocate(this%mat)

      return
    end subroutine hypre_obj_Setup