hypre_obj_SetupSolIJver Subroutine

private impure subroutine hypre_obj_SetupSolIJver(this)

Sets up solver with IJ interface.

Type Bound

hypre_obj

Arguments

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

Hypre machinery


Calls

proc~~hypre_obj_setupsolijver~~CallsGraph proc~hypre_obj_setupsolijver hypre_obj%hypre_obj_SetupSolIJver 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

Called by

proc~~hypre_obj_setupsolijver~~CalledByGraph proc~hypre_obj_setupsolijver hypre_obj%hypre_obj_SetupSolIJver proc~hypre_obj_setup hypre_obj%hypre_obj_Setup proc~hypre_obj_setup->proc~hypre_obj_setupsolijver 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_SetupSolIJver(this)
      !> Sets up solver with IJ interface.
      implicit none
      class(hypre_obj), intent(inout) :: this                                  !! Hypre machinery
      ! Work variables
      integer :: ierr
      integer :: precond_id

      select case (this%solver_name)
      case (HYPRE_SOL_IJ_AMG_NONE)
        ! Using Boomer AMG (no preconditioning)
        call HYPRE_BoomerAMGCreate           (this%solver,             ierr)
        call HYPRE_BoomerAMGSetPrintLevel    (this%solver, 0,          ierr)

#ifdef USE_GPU
        ! Parameters optimized for GPU
        call HYPRE_BoomerAMGSetRelaxType    (this%solver, 11,          ierr)
        call HYPRE_BoomerAMGSetRelaxOrder   (this%solver, 0,           ierr)
        call HYPRE_BoomerAMGSetCoarsenType  (this%solver, 8,           ierr)
        call HYPRE_BoomerAMGSetInterpType   (this%solver, 14,          ierr)
        call HYPRE_BoomerAMGSetAggNumLevels (this%solver, 0,           ierr)
        call HYPRE_BoomerAMGSetAggInterpType(this%solver, 5,           ierr)
        call HYPRE_BoomerAMGSetRAP2         (this%solver, 0,           ierr)
        call HYPRE_BoomerAMGSetKeepTransp   (this%solver, 1,           ierr)
#else
        call HYPRE_BoomerAMGSetCoarsenType  (this%solver, 10,          ierr)
        call HYPRE_BoomerAMGSetInterpType   (this%solver, 6,           ierr)
        call HYPRE_BoomerAMGSetRelaxType    (this%solver, 8,           ierr)
        call HYPRE_BoomerAMGSetRelaxOrder   (this%solver, 0,           ierr)
        call HYPRE_BoomerAMGSetKeepTransp   (this%solver, 1,           ierr)
        call HYPRE_BoomerAMGSetPMaxElmts    (this%solver, 4,           ierr)
#endif
        call HYPRE_BoomerAMGSetNumSweeps    (this%solver, 1,           ierr)
        call HYPRE_BoomerAMGSetMaxLevels    (this%solver, 25,          ierr)
        call HYPRE_BoomerAMGSetMaxIter      (this%solver, this%MaxIt,  ierr)
        call HYPRE_BoomerAMGSetTol          (this%solver, this%MaxTol, ierr)

        call HYPRE_BoomerAMGSetup(this%solver, this%par_matrix, this%par_rhs, this%par_sol, ierr)
      case (HYPRE_SOL_IJ_PCG_AMG)
        ! Using PCG with AMG preconditioning
        call HYPRE_ParCSRPCGCreate          (this%comm,   this%solver, ierr)
        call HYPRE_ParCSRPCGSetTol          (this%solver, this%MaxTol, ierr)
        call HYPRE_ParCSRPCGSetMaxIter      (this%solver, this%MaxIt,  ierr)
        call HYPRE_ParCSRPCGSetTwoNorm      (this%solver, 1,           ierr)
        call HYPRE_ParCSRPCGSetLogging      (this%solver, 1,           ierr)

        call HYPRE_BoomerAMGCreate          (this%precond,             ierr)
        call HYPRE_BoomerAMGSetPrintLevel   (this%precond, 1,          ierr)
        call HYPRE_BoomerAMGSetCoarsenType  (this%precond, 8,          ierr)
        call HYPRE_BoomerAMGSetInterpType   (this%precond, 3,          ierr)
        call HYPRE_BoomerAMGSetRelaxType    (this%precond, 6,          ierr)
        call HYPRE_BoomerAMGSetNumSweeps    (this%precond, 1,          ierr)
        call HYPRE_BoomerAMGSetMaxIter      (this%precond, 1,          ierr)
        call HYPRE_BoomerAMGSetTol          (this%precond, 0.0_wp,     ierr)

        precond_id=2
        call HYPRE_ParCSRPCGSetPrecond(this%solver, precond_id, this%precond, ierr)

        call HYPRE_ParCSRPCGSetup(this%solver, this%par_matrix, this%par_rhs, this%par_sol, ierr)
      case (HYPRE_SOL_IJ_PCG_DS)
        ! Using PCG with DS preconditioning
        call HYPRE_ParCSRPCGCreate           (this%comm,   this%solver,ierr)
        call HYPRE_ParCSRPCGSetTol           (this%solver, this%MaxTol,ierr)
        call HYPRE_ParCSRPCGSetMaxIter       (this%solver, this%MaxIt, ierr)
        call HYPRE_ParCSRPCGSetTwoNorm       (this%solver, 1,          ierr)
        !call HYPRE_ParCSRPCGSetPrintLevel(this%solver, 2, ierr)
        call HYPRE_ParCSRPCGSetLogging       (this%solver, 1,          ierr)

        precond_id=1
        call HYPRE_ParCSRPCGSetPrecond(this%solver, precond_id, this%precond, ierr)

        call HYPRE_ParCSRPCGSetup(this%solver, this%par_matrix, this%par_rhs, this%par_sol, ierr)
      case default
        call this%parallel%Stop("Unknown HYPRE solver")
      end select

      return
    end subroutine hypre_obj_SetupSolIJver