Sets up the hypre solver.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(hypre_obj), | intent(inout) | :: | this |
Hypre machinery |
impure subroutine hypre_obj_SetupSolverS(this) !> Sets up the hypre solver. implicit none class(hypre_obj), intent(inout) :: this !! Hypre machinery ! Work variables integer :: ierr select case (this%solver_name) case (HYPRE_SOL_S_PCG_NONE) ! Create call HYPRE_StructPCGCreate(this%comm,this%solver, ierr) ! Parameterize call HYPRE_StructPCGSetMaxIter( this%solver, this%MaxIt, ierr) call HYPRE_StructPCGSetTol( this%solver, this%MaxTol, ierr) call HYPRE_StructPCGSetPrintLevel( this%solver, 1, ierr) call HYPRE_StructPCGSetLogging( this%solver, 1, ierr) ! Setup call HYPRE_StructPCGSetup(this%solver,this%matrix,this%rhs,this%sol,ierr) case(HYPRE_SOL_S_SMG_NONE) ! Create call HYPRE_StructSMGCreate(this%comm,this%solver, ierr) ! Parameterize call HYPRE_StructSMGSetMaxIter( this%solver, this%MaxIt, ierr) call HYPRE_StructSMGSetTol( this%solver, this%MaxTol, ierr) call HYPRE_StructSMGSetNumPreRelax( this%solver, 1, ierr) call HYPRE_StructSMGSetNumPostRelax(this%solver, 1, ierr) call HYPRE_StructSMGSetPrintLevel( this%solver, 1, ierr) call HYPRE_StructSMGSetLogging( this%solver, 1, ierr) ! Setup call HYPRE_StructSMGSetup(this%solver,this%matrix,this%rhs,this%sol,ierr) case(HYPRE_SOL_S_PFMG_NONE) ! Create call HYPRE_StructPFMGCreate(this%comm,this%solver , ierr) ! Parameterize call HYPRE_StructPFMGSetMaxIter( this%solver, this%MaxIt, ierr) call HYPRE_StructPFMGSetTol( this%solver, this%MaxTol, ierr) call HYPRE_StructPFMGSetRelaxType( this%solver, this%RelaxType,ierr) call HYPRE_StructPFMGSetRAPType( this%solver, 0, ierr) call HYPRE_StructPFMGSetLogging( this%solver, 1, ierr) call HYPRE_StructPFMGSetPrintLevel( this%solver, 1, ierr) ! Setup call HYPRE_StructPFMGSetup(this%solver,this%matrix,this%rhs,this%sol,ierr) case default call this%parallel%Stop("Unknown HYPRE solver") end select return end subroutine hypre_obj_SetupSolverS