mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-11 00:19:03 +00:00
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)
47 lines
1.4 KiB
Makefile
47 lines
1.4 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_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)
|