Commit Graph

157 Commits (606548e29414b03466da3aa320ff3e8890be451f)

Author SHA1 Message Date
jalmerol 606548e294 added field-split nested preconditioner with Schur and inner Krylov support 1 month ago
Stack-1 e1d759d019 [ADD] Generate the nested matrix support for s/c/z from the templates
Extend the nested (MATNEST) matrix support to all the arithmetics: the
psb_{s,c,z}_nest_{mat,base_mat,tools,builder}_mod modules and the
psb_{s,c,z}_nest_mod umbrellas are generated from the template-psblas
X_nest_* templates; the d sources are regenerated byte-identical.

Preparatory changes to the d sources for clean templating: rowsum/arwsum and
colsum/aclsum no longer share a helper (for the complex arithmetics the
absolute sums are real-valued while the plain sums are complex-valued), the
transposed kernel forwards the actual 'T'/'C' character to the blocks
(conjugate transpose for the complex types), and the capacity helper takes a
type-neutral name.

Build hooks (autotools Makefile and CMakeLists) updated with the per-arith
objects, compile rules and dependencies.  All four d tests keep passing.

Author: Simone Staccone (Stack-1)
1 month ago
Stack-1 8e02a99a11 [ADD] Stock preconditioners, configurable block format and full base-class contract for the nested matrix
Complete the integration of the nested (MATNEST) operator into the standard
PSBLAS infrastructure:

- Preconditioners: implement get_diag and csgetrow on psb_d_nest_base_mat so
  the stock one-level preconditioners build directly on the nested operator
  (DIAG through the concatenated block diagonals, BJAC through the
  format-agnostic csget path used by the ILU factorizations).

- Configurable block storage: psb_d_nest_rect_block and psb_d_nest_matrix%asb
  accept an optional type ('CSR' default, 'CSC', 'COO') or mold (any class
  extending psb_d_base_sparse_mat, e.g. the psb_ext ELL/HLL formats); the
  operator is format-agnostic since every operation delegates to the blocks.

- Device-capable matvec: override vect_mv to gather/scatter through the
  vectors' own gth/sct with encapsulated index vectors (device kernels on
  device vectors) and to run each block through its vect_mv, so device block
  formats execute their native kernels; bit-equivalent to csmv on host.

- Full psb_d_base_sparse_mat contract by delegation to the blocks: transposed
  csmv (dedicated kernel, ghost contributions left to the transposed halo
  exchange), multi-RHS csmm, cp_to_coo/mv_to_coo (unlocking cscnv, csclip,
  tril/triu through the base generics), rowsum/arwsum/colsum/aclsum,
  maxval/spnmi/spnm1, scal (left/right) and scals, clone (view semantics:
  shared blocks, re-owned index maps), mold, sizeof.  cp_from_coo/mv_from_coo,
  csput and cssv/cssm are intentionally left to the base error (meaningless
  for a block-operator view), documented in the type and in the README.

Tests: glob assembles the blocks in HLL (psb_ext) and rect in CSC, both still
bit-identical to the monolithic CSR oracle; the CG test solves under NONE,
DIAG and BJAC/ILU(0), requiring convergence to the exact solution for all of
them and DIAG bit-identical to NONE (exactness check of the nested get_diag).
README updated with the user API reference, the preconditioner section and
the implemented-contract section.

Author: Simone Staccone (Stack-1)
1 month ago
Stack-1 acdd2e9eb5 [ADD] Nested (MATNEST-style) block matrix support and tests
Add a block-structured distributed operator that presents itself to Krylov
solvers and preconditioners as a single ordinary distributed matrix (the
PSBLAS analogue of PETSc MATNEST), targeting saddle-point systems
M = [[A, B^T], [B, 0]] with possibly rectangular sub-blocks.

Library (base/modules):
- psb_desc_nest_mod, psb_d_nest_mat_mod: grid of per-field descriptors and
  per-block sparse storage.
- psb_d_nest_base_mat_mod: psb_d_nest_base_mat, the operator extending
  psb_d_base_sparse_mat (local csmv, free, field-split hooks for a future
  block preconditioner).
- psb_cd_nest_tools_mod / psb_d_nest_tools_mod: composed global descriptor
  with union halo (psb_cd_nest_compose) and rectangular local block builder
  (psb_d_nest_rect_block), plus the per-block assembly wrappers.
- psb_d_nest_builder_mod: psb_d_nest_matrix, the user frontend with the
  init/ins/asb/free pattern hiding all descriptor/halo/compose/setup
  boilerplate.
- psb_d_nest_mod: umbrella module (use psb_d_nest_mod).

Remove the earlier bespoke per-block prototype (comm/psblas/vect modules and
the pde_nest_psblas test) superseded by the single MATNEST design.

Tests (test/nested): glob (square operator vs monolithic CSR oracle), rect
(genuinely rectangular blocks), cg (low-level path, ill-conditioned SPD
red-black Laplacian solved with standard CG), builder (same solve via the
utility), plus a README describing the design and usage. All pass serially
and in parallel, with results invariant to the process count.

Build hooks updated (autotools Makefiles + CMakeLists); the nested tests are
relocated out of test/pdegen into test/nested.

Author: Simone Staccone (Stack-1)
1 month ago
jalmerol b8d41569fd Add double-precision nested block-structured matrix/vector layer 1 month ago
Stack-1 f725ccdeeb Merge branch 'development' into communication_v2
# Conflicts:
#	base/CMakeLists.txt
#	base/comm/internals/psi_cswapdata.F90
#	base/comm/internals/psi_dswapdata.F90
#	base/comm/internals/psi_iswapdata.F90
#	base/comm/internals/psi_lswapdata.F90
#	base/comm/internals/psi_sswapdata.F90
#	base/comm/internals/psi_zswapdata.F90
#	base/modules/Makefile
#	base/modules/comm/psb_i2_comm_mod.f90
#	base/modules/comm/psi_i2_comm_v_mod.f90
#	base/modules/serial/psb_i2_base_vect_mod.F90
#	test/computational_routines/spmm/spmm_checker
1 month ago
Stack-1 4b8e4dd4a3 [UPDATE] Refactor after template update for RMA routines 2 months ago
sfilippone 09308b5c7d various changes, including test matrix generators 2 months ago
sfilippone 19ce4a0942 Fix multivect assembly and comments in base_vect 3 months ago
Stack-1 6b803fd759 [UPDATE] Updated buffer reuse in psb_dcg 3 months ago
Stack-1 09a5a74d75 [ADD] Added polymorphic comm_handle data excahnge for non-blocking and persistant neighbor communication. Check test/comm/ to see how it's used. For now works only for d types 4 months ago
sfilippone a223c7eaf3 Rebuild I2 supprot 4 months ago
Stack-1 02f1ef741c [] 4 months ago
sfilippone c990dc6840 Fix info in %reinit 4 months ago
sfilippone ca458870b1 Fix intent in precbld to align with AMG 4 months ago
sfilippone d2fba9e952 Fix licensing text 4 months ago
Marco Feder 303edfedc7 Fix return value 4 months ago
Stack-1 e7e8a69373 [FIX] Fixed compilation for psi_dswapdata routine 4 months ago
sfilippone 356bdba5c7 Fix intent on base_vect%reinit 4 months ago
sfilippone e8c5c0b8b0 Add clear argument to reinit method in vectors. 4 months ago
sfilippone 96ab382ce8 Fix vect_clone and define check_addr 6 months ago
sfilippone 897d466013 Define DESC%check_addr for debugging 6 months ago
sfilippone ac5512974b Fix vector allocation etc. 6 months ago
sfilippone 3337a12e59 Fix multivect handling 6 months ago
sfilippone c1ca1665e7 Fixes to vector status and build processing for dealii 8 months ago
sfilippone 5333117010 Fix vect_clone, expose to C interface 8 months ago
sfilippone 0c84efb887 Working version with mods for building with dealii requests 8 months ago
sfilippone 98a6eba948 First round of changes for vector builds 8 months ago
sfilippone 0239569e2b Final fixes for compilation with INTEL 10 months ago
sfilippone dc25c789ef Fixes for Intel compilation take 2. To be completed. 10 months ago
sfilippone 727dc13a98 First attempt at a fix for INTEL 10 months ago
Salvatore Filippone cc8cab0e8a Workaround for strange ipk8 issue 1 year ago
sfilippone 07fa2323eb Fixes for IPK8 1 year ago
sfilippone ea6c4181f7 Changed all defines with prefix PSB_ 1 year ago
sfilippone 3c53066a04 Walk back some generic method changes made for NVHPC. 1 year ago
sfilippone 55518f5553 Avoid specific method names' conflicts between vect and multivect. 1 year ago
sfilippone 4e71fa971c Modify clean_zeros and have it only at base% 2 years ago
sfilippone ee56c6be3c Cosmetic changes to OpenACC vectors 2 years ago
sfilippone 8220140729 Merged recent changes from development 2 years ago
sfilippone 3168b7e8f7 Merge branch 'development' into oacc_loloum 2 years ago
sfilippone 7857015923 Cosmetic changes to vect_mod 2 years ago
sfilippone 2982aaee27 Implementation in OpenACC for ELL and HLL into templates. Merge from development 2 years ago
sfilippone 4461b44eda Change name abgdxyz into upd_xyz 2 years ago
sfilippone ba8c32c507 Define merge_nd method 2 years ago
sfilippone 373d841bce Don't need renaming of psi_gth and psi_sct 2 years ago
sfilippone 86be8ebcd0 New method W%XYZW() 2 years ago
Salvatore Filippone f4c7604f61 Fix base implementation of abgdxyz to call set_host 2 years ago
Salvatore Filippone b8f9badf95 Fix interface between vect and base_vect%ABGD 2 years ago
Salvatore Filippone 2a40b82b58 Fix typo in base_vect_mod 2 years ago
Salvatore Filippone 4e611bb078 Enable psi_abgdxyz 2 years ago