Afivo  0.3
Data Types | Functions/Subroutines | Variables
m_coarse_solver Module Reference

Module to solve elliptic PDEs on the coarse grid. This module contains an interface to Hypre, assuming Hypre is compiled with OpenMP and without MPI. More...

Data Types

interface  HYPRE_StructMatrixSetBoxValues
 

Functions/Subroutines

subroutine, public coarse_solver_initialize (tree, mg)
 Initialize the coarse grid solver. More...
 
subroutine hypre_set_matrix (tree, mg)
 Set matrix type and store coefficients. More...
 
subroutine, public coarse_solver_update_matrix (tree, mg)
 Update matrix coefficients. More...
 
subroutine, public coarse_solver_destroy (cs)
 De-allocate storage for all coarse solver components. More...
 
subroutine hypre_destroy_solver (cs)
 De-allocate storage for solver. More...
 
subroutine hypre_create_grid (grid, nx, periodic)
 
subroutine hypre_create_vector (grid, nx, vec)
 Create a Hypre vector. More...
 
subroutine, public coarse_solver_set_rhs_phi (tree, mg)
 Set the right-hand side and copy phi from the tree. Also move the boundary conditions for phi to the rhs. More...
 
subroutine, public coarse_solver_get_phi (tree, mg)
 Copy solution from coarse solver to the tree. More...
 
subroutine hypre_create_matrix (A, grid, stencil_size, offsets, symmetric)
 Create a symmetric matrix on a grid. More...
 
subroutine hypre_prepare_solve (cs)
 
subroutine, public coarse_solver (cs, num_iterations)
 
subroutine stencil_handle_boundaries (box, mg, stencil, bc_to_rhs)
 Incorporate boundary conditions into stencil. More...
 
real(dp) function, dimension(dtimes(box%n_cell)), public mg_lsf_boundary_value (box, mg)
 Compute boundary value for internal boundaries. More...
 

Variables

integer, parameter hypre_parcsr = 5555
 
integer, parameter, public coarse_solver_hypre_smg = 1
 
integer, parameter, public coarse_solver_hypre_pfmg = 2
 
integer, parameter, public coarse_solver_hypre_pcg = 3
 
integer, parameter max_stencil_size = 2*NDIM + 1
 
integer, dimension(3, max_stencil_size), parameter stencil_offsets = reshape([0, -1, 1], [1, max_stencil_size])
 
integer, parameter mpi_comm_world = 0
 
integer, parameter num_procs = 1
 
integer, parameter myid = 0
 

Detailed Description

Module to solve elliptic PDEs on the coarse grid. This module contains an interface to Hypre, assuming Hypre is compiled with OpenMP and without MPI.

Function/Subroutine Documentation

◆ coarse_solver_initialize()

subroutine, public m_coarse_solver::coarse_solver_initialize ( type(af_t), intent(inout)  tree,
type(mg_t), intent(inout)  mg 
)

Initialize the coarse grid solver.

Parameters
[in,out]treeTree to do multigrid on

Definition at line 71 of file m_coarse_solver.f90.

◆ hypre_set_matrix()

subroutine m_coarse_solver::hypre_set_matrix ( type(af_t), intent(inout)  tree,
type(mg_t), intent(inout)  mg 
)
private

Set matrix type and store coefficients.

Definition at line 102 of file m_coarse_solver.f90.

◆ coarse_solver_update_matrix()

subroutine, public m_coarse_solver::coarse_solver_update_matrix ( type(af_t), intent(inout)  tree,
type(mg_t), intent(inout)  mg 
)

Update matrix coefficients.

Definition at line 195 of file m_coarse_solver.f90.

◆ coarse_solver_destroy()

subroutine, public m_coarse_solver::coarse_solver_destroy ( type(coarse_solve_t), intent(inout)  cs)

De-allocate storage for all coarse solver components.

Definition at line 206 of file m_coarse_solver.f90.

◆ hypre_destroy_solver()

subroutine m_coarse_solver::hypre_destroy_solver ( type(coarse_solve_t), intent(inout)  cs)
private

De-allocate storage for solver.

Definition at line 219 of file m_coarse_solver.f90.

◆ hypre_create_grid()

subroutine m_coarse_solver::hypre_create_grid ( type(c_ptr), intent(out)  grid,
integer, dimension(ndim), intent(in)  nx,
logical, dimension(ndim), intent(in)  periodic 
)
private
Parameters
[in]nxSize of grid
[in]periodicWhether the dimension is periodic

Definition at line 235 of file m_coarse_solver.f90.

◆ hypre_create_vector()

subroutine m_coarse_solver::hypre_create_vector ( type(c_ptr), intent(in)  grid,
integer, dimension(:), intent(in)  nx,
type(c_ptr), intent(out)  vec 
)
private

Create a Hypre vector.

Definition at line 265 of file m_coarse_solver.f90.

◆ coarse_solver_set_rhs_phi()

subroutine, public m_coarse_solver::coarse_solver_set_rhs_phi ( type(af_t), intent(inout)  tree,
type(mg_t), intent(in)  mg 
)

Set the right-hand side and copy phi from the tree. Also move the boundary conditions for phi to the rhs.

Definition at line 283 of file m_coarse_solver.f90.

◆ coarse_solver_get_phi()

subroutine, public m_coarse_solver::coarse_solver_get_phi ( type(af_t), intent(inout)  tree,
type(mg_t), intent(in)  mg 
)

Copy solution from coarse solver to the tree.

Definition at line 338 of file m_coarse_solver.f90.

◆ hypre_create_matrix()

subroutine m_coarse_solver::hypre_create_matrix ( type(c_ptr), intent(out)  A,
type(c_ptr), intent(in)  grid,
integer, intent(in)  stencil_size,
integer, dimension(ndim, stencil_size), intent(in)  offsets,
integer, intent(in)  symmetric 
)
private

Create a symmetric matrix on a grid.

Definition at line 358 of file m_coarse_solver.f90.

◆ hypre_prepare_solve()

subroutine m_coarse_solver::hypre_prepare_solve ( type(coarse_solve_t), intent(inout)  cs)
private

Definition at line 390 of file m_coarse_solver.f90.

◆ coarse_solver()

subroutine, public m_coarse_solver::coarse_solver ( type(coarse_solve_t), intent(in)  cs,
integer, intent(out)  num_iterations 
)

Definition at line 418 of file m_coarse_solver.f90.

◆ stencil_handle_boundaries()

subroutine m_coarse_solver::stencil_handle_boundaries ( type(box_t), intent(in)  box,
type(mg_t), intent(in)  mg,
real(dp), dimension(2*ndim+1, dtimes(box%n_cell)), intent(inout)  stencil,
real(dp), dimension(box%n_cell**(ndim-1), af_num_neighbors), intent(inout)  bc_to_rhs 
)
private

Incorporate boundary conditions into stencil.

Definition at line 439 of file m_coarse_solver.f90.

◆ mg_lsf_boundary_value()

real(dp) function, dimension(dtimes(box%n_cell)), public m_coarse_solver::mg_lsf_boundary_value ( type(box_t), intent(in)  box,
type(mg_t), intent(in)  mg 
)

Compute boundary value for internal boundaries.

Definition at line 491 of file m_coarse_solver.f90.

Variable Documentation

◆ hypre_parcsr

integer, parameter m_coarse_solver::hypre_parcsr = 5555
private

Definition at line 12 of file m_coarse_solver.f90.

◆ coarse_solver_hypre_smg

integer, parameter, public m_coarse_solver::coarse_solver_hypre_smg = 1

Definition at line 15 of file m_coarse_solver.f90.

◆ coarse_solver_hypre_pfmg

integer, parameter, public m_coarse_solver::coarse_solver_hypre_pfmg = 2

Definition at line 18 of file m_coarse_solver.f90.

◆ coarse_solver_hypre_pcg

integer, parameter, public m_coarse_solver::coarse_solver_hypre_pcg = 3

Definition at line 21 of file m_coarse_solver.f90.

◆ max_stencil_size

integer, parameter m_coarse_solver::max_stencil_size = 2*NDIM + 1
private

Definition at line 24 of file m_coarse_solver.f90.

◆ stencil_offsets

integer, dimension(3, max_stencil_size), parameter m_coarse_solver::stencil_offsets = reshape([0, -1, 1], [1, max_stencil_size])
private

Definition at line 28 of file m_coarse_solver.f90.

◆ mpi_comm_world

integer, parameter m_coarse_solver::mpi_comm_world = 0
private

Definition at line 42 of file m_coarse_solver.f90.

◆ num_procs

integer, parameter m_coarse_solver::num_procs = 1
private

Definition at line 43 of file m_coarse_solver.f90.

◆ myid

integer, parameter m_coarse_solver::myid = 0
private

Definition at line 44 of file m_coarse_solver.f90.