Neko 1.99.7
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
tree_amg_multigrid Module Reference

Implements multigrid using the TreeAMG hierarchy structure. USE: More...

Data Types

type  tamg_solver_t
 Type for the TreeAMG solver. More...
 
type  tamg_wrk_t
 

Functions/Subroutines

subroutine tamg_mg_init (this, ax, xh, coef, msh, gs_h, nlvls, blst, max_iter, cheby_degree)
 Initialization of the TreeAMG multigrid solver.
 
subroutine tamg_mg_free (this)
 free tree amg solver object
 
subroutine tamg_mg_invalidate_eigs (this)
 Re-estimate every level's eigenvalues on the next solve. Needed when the operator changes underneath the hierarchy.
 
subroutine tamg_mg_set_eig_refresh (this, warm_start, power_its_refresh)
 Set the eigenvalue re-estimation policy on every level.
 
subroutine tamg_mg_solve (this, z, r, n)
 Solver function for the TreeAMG solver object.
 
subroutine tamg_mg_cycle (this, zero_initial_guess)
 multigrid cycle for the TreeAMG solver object
 
subroutine tamg_mg_cycle_d (this, zero_initial_guess)
 multigrid cycle for the TreeAMG solver object on device
 
subroutine calc_resid (r, x, b, amg, lvl, n)
 Wrapper function to calculate residyal.
 
subroutine print_preagg_info (lvl, nagg, agg_type)
 
subroutine print_resid_info (r, x, b, r_d, x_d, b_d, amg, lvl, n)
 
subroutine fill_lvl_map (amg)
 Create index mapping between levels and directly to finest level.
 
subroutine build_agg_csr (amg)
 Build the transpose of map_finest2lvl in CSR form: for every aggregate on a level, the list of finest-level dofs that map to it. This lets the flat matvec walk aggregates rather than dofs, so its restriction becomes a segmented reduction with disjoint writes instead of an atomic scatter. Two O(n) passes per level.
 

Detailed Description

type(tamg_hierarchy_t) :: amg type(tamg_solver_t) :: amg_solver

call amginit(ax, Xh, coef, msh, gs_h, 3) call amg_solverinit(amg, niter)

call amg_solversolve(xx, f, n)

Function/Subroutine Documentation

◆ build_agg_csr()

subroutine tree_amg_multigrid::build_agg_csr ( type(tamg_hierarchy_t), intent(inout amg)
private
Parameters
amgThe tamg hierarchy, with the level maps already filled

Cache-line padding for the per-thread partials, in elements of rp. 32 doubles = 256 B, the A64FX line; a multiple of the 64 B line everywhere else.

Definition at line 615 of file tree_amg_multigrid.f90.

Here is the caller graph for this function:

◆ calc_resid()

subroutine tree_amg_multigrid::calc_resid ( real(kind=rp), dimension(n), intent(inout r,
real(kind=rp), dimension(n), intent(inout x,
real(kind=rp), dimension(n), intent(inout b,
type(tamg_hierarchy_t), intent(inout amg,
integer, intent(in lvl,
integer, intent(in n 
)
private
Parameters
rThe residual to be returned
xThe current solution
bThe right-hand side
amgThe TreeAMG object
lvlCurrent level of the cycle
nNumber of dofs

Definition at line 504 of file tree_amg_multigrid.f90.

Here is the caller graph for this function:

◆ fill_lvl_map()

subroutine tree_amg_multigrid::fill_lvl_map ( type(tamg_hierarchy_t), intent(inout amg)
private
Parameters
amgThe tamg hierarchy

Definition at line 558 of file tree_amg_multigrid.f90.

Here is the caller graph for this function:

◆ print_preagg_info()

subroutine tree_amg_multigrid::print_preagg_info ( integer, intent(in lvl,
integer, intent(in nagg,
integer, intent(in agg_type 
)
private

Definition at line 517 of file tree_amg_multigrid.f90.

Here is the caller graph for this function:

◆ print_resid_info()

subroutine tree_amg_multigrid::print_resid_info ( real(kind=rp), dimension(n), intent(inout r,
real(kind=rp), dimension(n), intent(inout x,
real(kind=rp), dimension(n), intent(inout b,
type(c_ptr)  r_d,
type(c_ptr)  x_d,
type(c_ptr)  b_d,
type(tamg_hierarchy_t), intent(inout amg,
integer, intent(in lvl,
integer, intent(in n 
)
private

Definition at line 536 of file tree_amg_multigrid.f90.

◆ tamg_mg_cycle()

subroutine tree_amg_multigrid::tamg_mg_cycle ( class(tamg_solver_t), intent(inout), target  this,
logical, intent(inout zero_initial_guess 
)
private
Parameters
thisThe Solver object.
zero_initial_guessFlag for when the initial guess is zero

Definition at line 354 of file tree_amg_multigrid.f90.

Here is the call graph for this function:

◆ tamg_mg_cycle_d()

subroutine tree_amg_multigrid::tamg_mg_cycle_d ( class(tamg_solver_t), intent(inout), target  this,
logical, intent(inout zero_initial_guess 
)
private
Parameters
thisThe Solver object.
zero_initial_guessFlag for when the initial guess is zero

Definition at line 423 of file tree_amg_multigrid.f90.

◆ tamg_mg_free()

subroutine tree_amg_multigrid::tamg_mg_free ( class(tamg_solver_t), intent(inout), target  this)
private

Definition at line 230 of file tree_amg_multigrid.f90.

◆ tamg_mg_init()

subroutine tree_amg_multigrid::tamg_mg_init ( class(tamg_solver_t), intent(inout), target  this,
class(ax_t), intent(in), target  ax,
type(space_t), intent(in), target  xh,
type(coef_t), intent(in), target  coef,
type(mesh_t), intent(in), target  msh,
type(gs_t), intent(in), target  gs_h,
integer, intent(in nlvls,
type(bc_list_t), intent(in), target  blst,
integer, intent(in max_iter,
integer, intent(in cheby_degree 
)
Parameters
axFinest level matvec operator
XhFinest level field
coefFinest level coeff thing
mshFinest level mesh information
gs_hFinest level gather scatter operator
nlvlsNumber of levels for the TreeAMG hierarchy
blstFinest level BC list
max_iterNumber of AMG iterations

Definition at line 111 of file tree_amg_multigrid.f90.

Here is the call graph for this function:

◆ tamg_mg_invalidate_eigs()

subroutine tree_amg_multigrid::tamg_mg_invalidate_eigs ( class(tamg_solver_t), intent(inout this)
private

Definition at line 273 of file tree_amg_multigrid.f90.

◆ tamg_mg_set_eig_refresh()

subroutine tree_amg_multigrid::tamg_mg_set_eig_refresh ( class(tamg_solver_t), intent(inout this,
logical, intent(in warm_start,
integer, intent(in power_its_refresh 
)
private
Parameters
warm_startRestart from the saved eigenvector
power_its_refreshIterations to use when restarting

Definition at line 285 of file tree_amg_multigrid.f90.

◆ tamg_mg_solve()

subroutine tree_amg_multigrid::tamg_mg_solve ( class(tamg_solver_t), intent(inout this,
real(kind=rp), dimension(n), intent(inout z,
real(kind=rp), dimension(n), intent(inout r,
integer, intent(in n 
)
private
Parameters
zThe solution to be returned
rThe right-hand side
nNumber of dofs

Definition at line 301 of file tree_amg_multigrid.f90.

Here is the call graph for this function: