linear algebra operation over the grids More...
Data Types | |
interface | dotproduct_k |
Functions/Subroutines | |
subroutine, public | redblack (mg, blk, iblk, omega, f, c, w, p, ic, eq_type) |
subroutine, public | blocked_residual (mg, eq_type, p, p_type, qf, f, f_type, r, r_type, halo_exch) |
residual More... | |
subroutine, public | blocked_matvec (mg, eq_type, p, p_type, ap, ap_type, halo_exch) |
computes the differential operator plus possible mas term on p More... | |
subroutine | blocked_residual_gen (mg, eq_type, p, p_type, qf, f, f_type, r, r_type, halo_exch, sign_lap) |
generalised subroutine which does the work for the residual and matvec wrappers halo_exch=.false. is meant for calls inside multigrid modules where we can avoid some copies and halo exchanges (which are already done by mg_relax) More... | |
subroutine, public | restrict_kernel (component, weight, mg, level, blk, iblk, eq_type) |
subroutine, public | copy_k (mg, s, vin, vin_type, vout, vout_type, si, ei, nobarrier, with_boundary) |
scaled copy, with boundary if needed More... | |
subroutine, public | update_k (mg, a, a_type, s, b, b_type, sa, with_boundary, nobarrier) |
computes a = sa * a + s * b on inside grid points More... | |
real(wp) function | dotproduct_k_with_mg (mg, a, atype, b, btype, scale) |
real(wp) function | dotproduct_k_no_mg (a, b, scale) |
simplification of dotproduct_k to be used with top grid assumes that the array start are provided via the array indexes a(sx:,sy:,sz:) the upper bound of the arrays is taken from bkl data structure this function must used only the inner point of the grid More... | |
subroutine | blocked_lap (mg, scale, vin, vin_type, vout, vout_type, nobarrier) |
subroutine, public | blocked_diagmatvec (mg, eq_type, v, v_type, vi, vi_type) |
Variables | |
integer, parameter, public | residual =901 |
integer, parameter, public | f_nonlinear = 902 |
linear algebra operation over the grids
Lucian Anton
subroutine, public dl_mg_kernels::blocked_diagmatvec | ( | type(mg_t), intent(inout) | mg, |
integer, intent(in) | eq_type, | ||
real(wp), dimension(:,:,:), intent(inout) | v, | ||
integer, intent(in) | v_type, | ||
real(wp), dimension(:,:,:), intent(in), optional | vi, | ||
integer, intent(in), optional | vi_type | ||
) |
subroutine dl_mg_kernels::blocked_lap | ( | type(mg_t), intent(inout) | mg, |
real(wp), intent(in) | scale, | ||
real(wp), dimension(:,:,:), intent(in) | vin, | ||
integer, intent(in) | vin_type, | ||
real(wp), dimension(:,:,:), intent(out) | vout, | ||
integer, intent(in) | vout_type, | ||
logical, intent(in), optional | nobarrier | ||
) |
subroutine, public dl_mg_kernels::blocked_matvec | ( | type(mg_t), intent(inout) | mg, |
integer, intent(in) | eq_type, | ||
real(wp), dimension(:,:,:), intent(in) | p, | ||
integer, intent(in) | p_type, | ||
real(wp), dimension(:,:,:), intent(out) | ap, | ||
integer, intent(in) | ap_type, | ||
logical, intent(in), optional | halo_exch | ||
) |
computes the differential operator plus possible mas term on p
subroutine, public dl_mg_kernels::blocked_residual | ( | type(mg_t), intent(inout) | mg, |
integer, intent(in) | eq_type, | ||
real(wp), dimension(:,:,:), intent(in) | p, | ||
integer, intent(in) | p_type, | ||
real(wp), intent(in) | qf, | ||
real(wp), dimension(:,:,:), intent(in) | f, | ||
integer, intent(in) | f_type, | ||
real(wp), dimension(:,:,:), intent(out) | r, | ||
integer, intent(in) | r_type, | ||
logical, intent(in), optional | halo_exch | ||
) |
residual
subroutine dl_mg_kernels::blocked_residual_gen | ( | type(mg_t), intent(inout) | mg, |
integer, intent(in) | eq_type, | ||
real(wp), dimension(:,:,:), intent(in) | p, | ||
integer, intent(in) | p_type, | ||
real(wp), intent(in), optional | qf, | ||
real(wp), dimension(:,:,:), intent(in), optional | f, | ||
integer, intent(in), optional | f_type, | ||
real(wp), dimension(:,:,:), intent(out) | r, | ||
integer, intent(in) | r_type, | ||
logical, intent(in), optional | halo_exch, | ||
real(wp), optional | sign_lap | ||
) |
generalised subroutine which does the work for the residual and matvec wrappers halo_exch=.false. is meant for calls inside multigrid modules where we can avoid some copies and halo exchanges (which are already done by mg_relax)
subroutine, public dl_mg_kernels::copy_k | ( | type(mg_t), intent(inout) | mg, |
real(wp), intent(in) | s, | ||
real(wp), dimension(:,:,:), intent(in) | vin, | ||
integer, intent(in) | vin_type, | ||
real(wp), dimension(:,:,:), intent(out) | vout, | ||
integer, intent(in) | vout_type, | ||
integer, dimension(3), intent(in), optional | si, | ||
integer, dimension(3), intent(in), optional | ei, | ||
logical, intent(in), optional | nobarrier, | ||
logical, intent(in), optional | with_boundary | ||
) |
scaled copy, with boundary if needed
[in] | with_boundary | if true copies the boundary values in case if DBC |
real(wp) function dl_mg_kernels::dotproduct_k_no_mg | ( | real(wp), dimension(:,:,:), intent(in) | a, |
real(wp), dimension(:,:,:), intent(in), optional | b, | ||
real(wp), intent(in), optional | scale | ||
) |
simplification of dotproduct_k to be used with top grid assumes that the array start are provided via the array indexes a(sx:,sy:,sz:) the upper bound of the arrays is taken from bkl data structure this function must used only the inner point of the grid
real(wp) function dl_mg_kernels::dotproduct_k_with_mg | ( | type(mg_t), intent(in) | mg, |
real(wp), dimension(:,:,:), intent(in) | a, | ||
integer, intent(in) | atype, | ||
real(wp), dimension(:,:,:), intent(in), optional | b, | ||
integer, intent(in), optional | btype, | ||
real(wp), intent(in), optional | scale | ||
) |
subroutine, public dl_mg_kernels::redblack | ( | type(mg_t), intent(in) | mg, |
type(block_list_t), intent(in) | blk, | ||
integer, intent(in) | iblk, | ||
real(wp), intent(in) | omega, | ||
real(wp), dimension(mg%fsx:, mg%fsy:, mg%fsz:), intent(in) | f, | ||
real(wp), dimension(mg%csx:, mg%csy:, mg%csz:, :), intent(in) | c, | ||
real(wp), dimension(mg%psx:, mg%psy:, mg%psz:), intent(in) | w, | ||
real(wp), dimension(mg%psx:, mg%psy:, mg%psz:), intent(inout) | p, | ||
integer, intent(in) | ic, | ||
integer, intent(in) | eq_type | ||
) |
subroutine, public dl_mg_kernels::restrict_kernel | ( | character(len=1), intent(in) | component, |
integer, intent(in) | weight, | ||
type(mg_t), dimension(:), intent(inout), target | mg, | ||
integer, intent(in) | level, | ||
type(block_list_t), dimension(:), intent(in) | blk, | ||
integer, intent(in) | iblk, | ||
integer, intent(in) | eq_type | ||
) |
subroutine, public dl_mg_kernels::update_k | ( | type(mg_t), intent(inout) | mg, |
real(wp), dimension(:,:,:), intent(inout) | a, | ||
integer, intent(in) | a_type, | ||
real(wp), intent(in) | s, | ||
real(wp), dimension(:,:,:), intent(in), optional | b, | ||
integer, intent(in), optional | b_type, | ||
real(wp), intent(in), optional | sa, | ||
logical, intent(in), optional | with_boundary, | ||
logical, intent(in), optional | nobarrier | ||
) |
computes a = sa * a + s * b on inside grid points
integer, parameter, public dl_mg_kernels::f_nonlinear = 902 |
integer, parameter, public dl_mg_kernels::residual =901 |