mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-13 01:19:05 +00:00
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)
47 lines
1.5 KiB
Makefile
47 lines
1.5 KiB
Makefile
INSTALLDIR=../..
|
|
INCDIR=$(INSTALLDIR)/include
|
|
MODDIR=$(INSTALLDIR)/modules/
|
|
include $(INCDIR)/Make.inc.psblas
|
|
#
|
|
# Libraries used
|
|
LIBDIR=$(INSTALLDIR)/lib
|
|
PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_linsolve -lpsb_prec -lpsb_ext -lpsb_base
|
|
LDLIBS= $(PSBLDLIBS)
|
|
#
|
|
# Compilers and such
|
|
#
|
|
CCOPT= -g
|
|
FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG).
|
|
|
|
|
|
EXEDIR=./runs
|
|
|
|
all: runsd psb_d_nest_glob_test psb_d_nest_rect_test psb_d_nest_cg_test psb_d_nest_builder_test
|
|
|
|
runsd:
|
|
(if test ! -d runs ; then mkdir runs; fi)
|
|
|
|
psb_d_nest_glob_test: psb_d_nest_glob_test.o
|
|
$(FLINK) psb_d_nest_glob_test.o -o psb_d_nest_glob_test $(PSBLAS_LIB) $(LDLIBS)
|
|
/bin/mv psb_d_nest_glob_test $(EXEDIR)
|
|
|
|
psb_d_nest_rect_test: psb_d_nest_rect_test.o
|
|
$(FLINK) psb_d_nest_rect_test.o -o psb_d_nest_rect_test $(PSBLAS_LIB) $(LDLIBS)
|
|
/bin/mv psb_d_nest_rect_test $(EXEDIR)
|
|
|
|
psb_d_nest_cg_test: psb_d_nest_cg_test.o
|
|
$(FLINK) psb_d_nest_cg_test.o -o psb_d_nest_cg_test $(PSBLAS_LIB) $(LDLIBS)
|
|
/bin/mv psb_d_nest_cg_test $(EXEDIR)
|
|
|
|
psb_d_nest_builder_test: psb_d_nest_builder_test.o
|
|
$(FLINK) psb_d_nest_builder_test.o -o psb_d_nest_builder_test $(PSBLAS_LIB) $(LDLIBS)
|
|
/bin/mv psb_d_nest_builder_test $(EXEDIR)
|
|
|
|
clean:
|
|
/bin/rm -f psb_d_nest_glob_test.o psb_d_nest_rect_test.o psb_d_nest_cg_test.o psb_d_nest_builder_test.o *$(.mod) \
|
|
$(EXEDIR)/psb_d_nest_glob_test $(EXEDIR)/psb_d_nest_rect_test $(EXEDIR)/psb_d_nest_cg_test $(EXEDIR)/psb_d_nest_builder_test
|
|
verycleanlib:
|
|
(cd ../..; make veryclean)
|
|
lib:
|
|
(cd ../../; make library)
|