mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-24 14:51:49 +00:00
[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)
This commit is contained in:
+14
-19
@@ -84,7 +84,7 @@ SERIAL_MODS=serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o \
|
||||
serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_mat_mod.o \
|
||||
serial/psb_c_base_mat_mod.o serial/psb_c_csr_mat_mod.o serial/psb_c_csc_mat_mod.o serial/psb_c_mat_mod.o \
|
||||
serial/psb_z_base_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_z_csc_mat_mod.o serial/psb_z_mat_mod.o \
|
||||
serial/psb_d_nest_vect_mod.o serial/psb_d_nest_mat_mod.o
|
||||
serial/psb_d_nest_mat_mod.o serial/psb_d_nest_base_mat_mod.o
|
||||
#\
|
||||
# serial/psb_ls_csr_mat_mod.o serial/psb_ld_csr_mat_mod.o serial/psb_lc_csr_mat_mod.o serial/psb_lz_csr_mat_mod.o
|
||||
#\
|
||||
@@ -99,6 +99,7 @@ UTIL_MODS = desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o\
|
||||
tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o \
|
||||
tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o\
|
||||
tools/psb_d_nest_tools_mod.o \
|
||||
tools/psb_d_nest_builder_mod.o \
|
||||
tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o \
|
||||
tools/psb_i2_tools_a_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o \
|
||||
tools/psb_s_tools_a_mod.o tools/psb_d_tools_a_mod.o\
|
||||
@@ -114,7 +115,6 @@ UTIL_MODS = desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o\
|
||||
comm/psb_s_comm_mod.o comm/psb_d_comm_mod.o\
|
||||
comm/psb_c_comm_mod.o comm/psb_z_comm_mod.o \
|
||||
comm/psb_i2_comm_a_mod.o \
|
||||
comm/psb_d_nest_comm_mod.o \
|
||||
comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o \
|
||||
comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o\
|
||||
comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o \
|
||||
@@ -128,7 +128,6 @@ UTIL_MODS = desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o\
|
||||
psblas/psb_s_psblas_mod.o psblas/psb_c_psblas_mod.o \
|
||||
psblas/psb_d_psblas_mod.o psblas/psb_z_psblas_mod.o \
|
||||
psblas/psb_psblas_mod.o \
|
||||
psblas/psb_d_nest_psblas_mod.o \
|
||||
psb_check_mod.o desc/psb_hash_mod.o
|
||||
|
||||
|
||||
@@ -430,9 +429,14 @@ tools/psb_cd_nest_tools_mod.o: tools/psb_cd_nest_tools_mod.F90 tools/psb_cd_tool
|
||||
$(FC) $(FCOPT) $(FINCLUDES) $(FDEFINES) -c tools/psb_cd_nest_tools_mod.F90 -o tools/psb_cd_nest_tools_mod.o
|
||||
|
||||
tools/psb_d_nest_tools_mod.o: tools/psb_d_nest_tools_mod.F90 tools/psb_d_tools_mod.o \
|
||||
desc/psb_desc_nest_mod.o serial/psb_d_nest_mat_mod.o serial/psb_d_nest_vect_mod.o
|
||||
desc/psb_desc_nest_mod.o serial/psb_d_nest_mat_mod.o
|
||||
$(FC) $(FCOPT) $(FINCLUDES) $(FDEFINES) -c tools/psb_d_nest_tools_mod.F90 -o tools/psb_d_nest_tools_mod.o
|
||||
|
||||
tools/psb_d_nest_builder_mod.o: tools/psb_d_nest_builder_mod.F90 tools/psb_cd_tools_mod.o \
|
||||
tools/psb_cd_nest_tools_mod.o tools/psb_d_nest_tools_mod.o \
|
||||
serial/psb_d_nest_base_mat_mod.o serial/psb_d_nest_mat_mod.o desc/psb_desc_nest_mod.o
|
||||
$(FC) $(FCOPT) $(FINCLUDES) $(FDEFINES) -c tools/psb_d_nest_builder_mod.F90 -o tools/psb_d_nest_builder_mod.o
|
||||
|
||||
tools/psb_cd_tools_mod.o tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o \
|
||||
tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o \
|
||||
tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o \
|
||||
@@ -454,26 +458,17 @@ psblas/psb_z_psblas_mod.o: serial/psb_z_vect_mod.o serial/psb_z_mat_mod.o
|
||||
psblas/psb_psblas_mod.o: psblas/psb_s_psblas_mod.o psblas/psb_c_psblas_mod.o psblas/psb_d_psblas_mod.o psblas/psb_z_psblas_mod.o
|
||||
psblas/psb_s_psblas_mod.o psblas/psb_c_psblas_mod.o psblas/psb_d_psblas_mod.o psblas/psb_z_psblas_mod.o: serial/psb_mat_mod.o desc/psb_desc_mod.o
|
||||
|
||||
# --- nested mat/vec/desc dependencies ---
|
||||
# --- nested mat/desc dependencies (MATNEST) ---
|
||||
desc/psb_desc_nest_mod.o: desc/psb_desc_mod.o
|
||||
serial/psb_d_nest_vect_mod.o: serial/psb_d_vect_mod.o desc/psb_desc_mod.o
|
||||
serial/psb_d_nest_mat_mod.o: serial/psb_d_mat_mod.o
|
||||
comm/psb_d_nest_comm_mod.o: \
|
||||
desc/psb_desc_nest_mod.o \
|
||||
serial/psb_d_nest_vect_mod.o \
|
||||
comm/psb_d_comm_mod.o
|
||||
psblas/psb_d_nest_psblas_mod.o: \
|
||||
desc/psb_desc_nest_mod.o \
|
||||
serial/psb_d_nest_vect_mod.o \
|
||||
serial/psb_d_nest_mat_mod.o \
|
||||
serial/psb_d_mat_mod.o \
|
||||
psblas/psb_d_psblas_mod.o \
|
||||
comm/psb_d_nest_comm_mod.o
|
||||
serial/psb_d_nest_base_mat_mod.o: serial/psb_d_nest_mat_mod.o desc/psb_desc_nest_mod.o serial/psb_d_base_mat_mod.o serial/psb_d_mat_mod.o desc/psb_desc_mod.o
|
||||
psb_d_nest_mod.o: \
|
||||
desc/psb_desc_nest_mod.o \
|
||||
serial/psb_d_nest_vect_mod.o \
|
||||
serial/psb_d_nest_mat_mod.o \
|
||||
psblas/psb_d_nest_psblas_mod.o
|
||||
serial/psb_d_nest_base_mat_mod.o \
|
||||
tools/psb_cd_nest_tools_mod.o \
|
||||
tools/psb_d_nest_tools_mod.o \
|
||||
tools/psb_d_nest_builder_mod.o
|
||||
|
||||
psb_base_mod.o: $(MODULES)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user