Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
77163dd
C1: add para_2d() accessor and get_blacs_ctxt() to Parallel_Orbitals
kirk0830 Oct 27, 2026
c1dc33f
D2(module_rt): drop Parallel_2D inheritance in Parallel_Orbitals, mig…
kirk0830 Oct 28, 2026
3806abf
D2(module_dftu): drop Parallel_2D inheritance in Parallel_Orbitals, m…
kirk0830 Oct 28, 2026
4785523
D2(module_dm): drop Parallel_2D inheritance in Parallel_Orbitals, mig…
kirk0830 Oct 28, 2026
ecafdd5
D2(pyabacus): drop Parallel_2D inheritance in Parallel_Orbitals, migr…
kirk0830 Oct 28, 2026
75b5e00
D2(module_lr): drop Parallel_2D inheritance in Parallel_Orbitals, mig…
kirk0830 Oct 28, 2026
a278873
D2(misc_prod): drop Parallel_2D inheritance in Parallel_Orbitals, mig…
kirk0830 Oct 28, 2026
fe3c4ad
D2(module_operator_lcao): drop Parallel_2D inheritance in Parallel_Or…
kirk0830 Oct 28, 2026
7d2a635
D2(test_side): drop Parallel_2D inheritance in Parallel_Orbitals, mig…
kirk0830 Oct 28, 2026
0c4dd34
D2(module_current): drop Parallel_2D inheritance in Parallel_Orbitals…
kirk0830 Oct 28, 2026
8ccddf5
D2(module_ao): drop Parallel_2D inheritance in Parallel_Orbitals, mig…
kirk0830 Oct 28, 2026
c98fe04
D4(module_lr): pass Parallel_Orbitals as explicit para_2d() at upcast…
kirk0830 Oct 28, 2026
318b793
D4(module_hs): pass Parallel_Orbitals as explicit para_2d() at upcast…
kirk0830 Oct 28, 2026
2efe254
D4(module_io): pass Parallel_Orbitals as explicit para_2d() at upcast…
kirk0830 Oct 28, 2026
b5f593c
D4(module_dftu): pass Parallel_Orbitals as explicit para_2d() at upca…
kirk0830 Oct 28, 2026
8f69efe
D4(module_ao): remove Parallel_Orbitals implicit upcast operator
kirk0830 Oct 28, 2026
a2ece91
D5(test_side): stop writing descriptor/distribution fields directly i…
Oct 28, 2026
15ab2e0
D5(test_side): rewrite link-mock TUs to link the real implementation
Oct 28, 2026
103a962
D5(test_side): migrate parallel_orbitals_test serial branch to explic…
Oct 28, 2026
8f3327e
D5(test_side): keep original is_serial member name, expose read-only …
kirk0830 Oct 28, 2026
643f93b
D5(test_side): drop is_serial() accessor, restore direct member acces…
kirk0830 Oct 28, 2026
2222368
D5(test_side): merge d5-test-side worktree commits (test-side refacto…
kirk0830 Oct 28, 2026
ed3f729
D6(module_ao): add composition regression guard for Parallel_Orbitals…
kirk0830 Oct 28, 2026
92ca14d
S1(source_base): extract BlockCyclicDistributionInformation, demote P…
kirk0830 Oct 29, 2026
47360b5
S2: converge Parallel_Orbitals composition to BlockCyclicDistribution…
kirk0830 Oct 29, 2026
17d2540
S3: bind NDArray to DistributedNDArray thin wrapper (host-side ndarra…
kirk0830 Oct 29, 2026
4c79b0a
S4: verify build-system wiring across four build surfaces (CMake main…
kirk0830 Oct 29, 2026
516cca9
S5: remove legacy Parallel_2D alias and parallel_2d.{h,cpp}, rewire a…
kirk0830 Oct 29, 2026
8dc4d18
Merge remote-tracking branch 'upstream/develop' into pr/02-lcao-expli…
kirk0830 Nov 2, 2026
a1c9b49
style: remove trailing whitespace in LCAO layout migration
kirk0830 Nov 2, 2026
5e1603e
Merge branch 'pr/02-lcao-explicit-para2d' into pr/03-remove-parallel2…
kirk0830 Nov 3, 2026
a6a1532
test: use explicit serial block-cyclic layout
kirk0830 Nov 3, 2026
8eb8aaf
refactor: use explicit layout in serial paths
kirk0830 Nov 3, 2026
ad12452
refactor: migrate optional backends to explicit layout
kirk0830 Nov 3, 2026
1046ce6
Merge branch 'pr/03-remove-parallel2d-inheritance' into pr/04-composi…
kirk0830 Nov 3, 2026
c9b15b0
test(module_ao): tighten composition regression guard
kirk0830 Nov 3, 2026
3c4c968
Merge branch 'pr/04-composition-guard' into pr/05-blockcyclic-api
kirk0830 Nov 3, 2026
8bd23cd
refactor(base): simplify block-cyclic layout API
kirk0830 Nov 3, 2026
95cc5c9
style(base): name BLACS descriptor constants with UPPER_CASE
kirk0830 Nov 3, 2026
e10a898
refactor(base): make basis identity and distribution self-contained v…
kirk0830 Nov 3, 2026
4a3f83d
refactor(hcontainer): construct atom pair shapes from basis values
kirk0830 Nov 3, 2026
dd4326f
refactor(lcao): consume explicit basis and matrix layout values
kirk0830 Nov 3, 2026
0d09fa1
docs: record the layout boundary and forbid per-element basis offset …
kirk0830 Nov 3, 2026
d8edeb9
S1(source_base): extract BlockCyclicDistributionInformation, demote P…
kirk0830 Oct 29, 2026
2eba7e9
S2: converge Parallel_Orbitals composition to BlockCyclicDistribution…
kirk0830 Oct 29, 2026
dba2e5f
S3: bind NDArray to DistributedNDArray thin wrapper (host-side ndarra…
kirk0830 Oct 29, 2026
0c56e72
S5: remove legacy Parallel_2D alias and parallel_2d.{h,cpp}, rewire a…
kirk0830 Oct 29, 2026
f506aa8
refactor(base): simplify block-cyclic layout API
kirk0830 Nov 3, 2026
1d64b7c
style(base): name BLACS descriptor constants with UPPER_CASE
kirk0830 Nov 3, 2026
06bbed1
fix(base): complete explicit block-cyclic migration
kirk0830 Nov 5, 2026
39bcfd8
fix(ri): access block-cyclic distribution explicitly
kirk0830 Nov 5, 2026
de3f795
Merge branch 'develop' into pr/05-blockcyclic-api-v2
kirk0830 Nov 5, 2026
cd65d43
fix(base): correct distributed ndarray layout
kirk0830 Nov 5, 2026
dd716b4
Merge branch 'develop' into pr/05-blockcyclic-api-v2
kirk0830 Nov 6, 2026
a887b6e
refactor(base): shorten block-cyclic API names
kirk0830 Nov 6, 2026
cdc076a
fix(base): make array layout semantics explicit
kirk0830 Nov 6, 2026
292aabb
refactor(base): remove unused distributed NDArray adapter
kirk0830 Nov 6, 2026
d1e197f
Merge PR-5 block-cyclic API into explicit-layout refactor
kirk0830 Nov 6, 2026
c0a1d32
Merge remote-tracking branch 'upstream/develop' into pr/06-explicit-l…
kirk0830 Nov 7, 2026
0e96659
fix(io): preserve corrected nspin4 Mulliken spin signs
kirk0830 Nov 7, 2026
1fd814e
test(io): cover nspin4 Mulliken production path
kirk0830 Nov 7, 2026
74a34df
refactor(lcao): address explicit-layout review feedback
kirk0830 Nov 7, 2026
adbb919
refactor(base): rename block-cyclic distribution source
kirk0830 Nov 8, 2026
2dccf45
docs(headers): document forward declaration definitions
kirk0830 Nov 8, 2026
7ba7fa9
refactor(base): rename block-cyclic distribution type
kirk0830 Nov 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/13_dos/01_pw_Al/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ OMP_NUM_THREADS=${ABACUS_THREADS} mpirun -np ${ABACUS_NPROCS} ${ABACUS_PATH} | t

rm INPUT KPT

if [[ ! -f scf.output ]] ||
if [[ ! -f scf.output ]] ||
[[ ! -f nscf.output ]] ||
[[ ! -f OUT.ABACUS/running_scf.log ]] ||
[[ ! -f OUT.ABACUS/running_nscf.log ]] ||
Expand All @@ -28,4 +28,4 @@ then
else
echo "job succeeded!"
exit 0
fi
fi
4 changes: 2 additions & 2 deletions examples/13_dos/02_lcao_Si2/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ OMP_NUM_THREADS=${ABACUS_THREADS} mpirun -np ${ABACUS_NPROCS} ${ABACUS_PATH} | t

rm INPUT KPT

if [[ ! -f scf.output ]] ||
if [[ ! -f scf.output ]] ||
[[ ! -f nscf.output ]] ||
[[ ! -f OUT.ABACUS/running_scf.log ]] ||
[[ ! -f OUT.ABACUS/running_nscf.log ]] ||
Expand All @@ -28,4 +28,4 @@ then
else
echo "job succeeded!"
exit 0
fi
fi
4 changes: 3 additions & 1 deletion source/Makefile.Objects
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,8 @@ OBJS_BASE=assoc_laguerre.o\
complexarray.o\
complexmatrix.o\
clebsch_gordan_coeff.o\
basis_flattened_indexing.o\
atom_basis_view.o\
element_basis_index.o\
inverse_matrix.o\
gather_math_lib_info.o\
Expand Down Expand Up @@ -200,7 +202,7 @@ OBJS_BASE=assoc_laguerre.o\
device.o\
device_helpers.o\
output_device.o\
block_cyclic_distribution.o\
parallel_blkcyc.o\
binstream.o\
filename.o\
sparse_matrix.o\
Expand Down
185 changes: 103 additions & 82 deletions source/source_base/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,83 +3,87 @@ if(ENABLE_ABACUS_LIBM)
libm/sincos.cpp)
endif()
add_library(
base OBJECT
assoc_laguerre.cpp
module_external/blas_connector_base.cpp
module_external/blas_connector_vector.cpp
module_external/blas_connector_matrix.cpp
clebsch_gordan_coeff.cpp
complexarray.cpp
complexmatrix.cpp
element_basis_index.cpp
inverse_matrix.cpp
gather_math_lib_info.cpp
global_file.cpp
global_function.cpp
glob_fn_ddotreal.cpp
global_variable.cpp
intarray.cpp
math_integral.cpp
math_lebedev_laikov.cpp
math_polyint.cpp
math_sphbes.cpp
math_erf_complex.cpp
math_ylmreal.cpp
math_bspline.cpp
math_chebyshev.cpp
mathzone_add1.cpp
matrix.cpp
matrix3.cpp
memory_recorder.cpp
mymath.cpp
opt_cg.cpp
opt_dcsrch.cpp
opt_tn.cpp
output.cpp
para_gemm.cpp
realarray.cpp
sph_bessel_rec_d1.cpp
sph_bessel_rec_d2.cpp
timer.cpp
tool_check.cpp
tool_quit.cpp
tool_title.cpp
ylm.cpp
parallel_common.cpp
parallel_cell.cpp
parallel_global.cpp
parallel_comm.cpp
parallel_reduce.cpp
parallel_device.cpp
parallel_grid.cpp
sph_bessel_tf.cpp
cubic_spline.cpp
block_cyclic_distribution.cpp
module_out/binstream.cpp
module_out/filename.cpp
module_out/sparse_matrix.cpp
module_out/file_reader.cpp
module_out/csr_reader.cpp
module_out/read_exit_file.cpp
module_out/orb_io.cpp
module_mixing/mixing_data.cpp
module_mixing/mixing.cpp
module_mixing/plain_mixing.cpp
module_mixing/pulay_mixing.cpp
module_mixing/broyden_mixing.cpp
module_parallel/para_world.cpp
module_parallel/para_band_output.cpp
module_parallel/para_collection.cpp
module_parallel/para_kmesh_world.cpp
module_parallel/para_pw_world.cpp
module_parallel/para_diag_world.cpp
module_parallel/para_rgrid_world.cpp
module_parallel/para_bgroup_world.cpp
module_parallel/para_matrix_world.cpp
module_parallel/para_mpi_func.cpp
module_parallel/para_setup.cpp
module_parallel/para_bridge.cpp
${LIBM_SRC})
base
OBJECT
assoc_laguerre.cpp
atom_basis_view.cpp
module_external/blas_connector_base.cpp
module_external/blas_connector_vector.cpp
module_external/blas_connector_matrix.cpp
clebsch_gordan_coeff.cpp
complexarray.cpp
complexmatrix.cpp
basis_flattened_indexing.cpp
element_basis_index.cpp
inverse_matrix.cpp
gather_math_lib_info.cpp
global_file.cpp
global_function.cpp
glob_fn_ddotreal.cpp
global_variable.cpp
intarray.cpp
math_integral.cpp
math_lebedev_laikov.cpp
math_polyint.cpp
math_sphbes.cpp
math_erf_complex.cpp
math_ylmreal.cpp
math_bspline.cpp
math_chebyshev.cpp
mathzone_add1.cpp
matrix.cpp
matrix3.cpp
memory_recorder.cpp
mymath.cpp
opt_cg.cpp
opt_dcsrch.cpp
opt_tn.cpp
output.cpp
para_gemm.cpp
realarray.cpp
sph_bessel_rec_d1.cpp
sph_bessel_rec_d2.cpp
timer.cpp
tool_check.cpp
tool_quit.cpp
tool_title.cpp
ylm.cpp
parallel_common.cpp
parallel_cell.cpp
parallel_global.cpp
parallel_comm.cpp
parallel_reduce.cpp
parallel_device.cpp
parallel_grid.cpp
sph_bessel_tf.cpp
cubic_spline.cpp
parallel_blkcyc.cpp
module_out/binstream.cpp
module_out/filename.cpp
module_out/sparse_matrix.cpp
module_out/file_reader.cpp
module_out/csr_reader.cpp
module_out/read_exit_file.cpp
module_out/orb_io.cpp
module_mixing/mixing_data.cpp
module_mixing/mixing.cpp
module_mixing/plain_mixing.cpp
module_mixing/pulay_mixing.cpp
module_mixing/broyden_mixing.cpp
module_parallel/para_world.cpp
module_parallel/para_band_output.cpp
module_parallel/para_collection.cpp
module_parallel/para_kmesh_world.cpp
module_parallel/para_pw_world.cpp
module_parallel/para_diag_world.cpp
module_parallel/para_rgrid_world.cpp
module_parallel/para_bgroup_world.cpp
module_parallel/para_matrix_world.cpp
module_parallel/para_mpi_func.cpp
module_parallel/para_setup.cpp
module_parallel/para_bridge.cpp
${LIBM_SRC}
)

target_link_libraries(base PUBLIC container)
add_subdirectory(module_container)
Expand All @@ -89,19 +93,36 @@ if(ENABLE_COVERAGE)
endif()

if(BUILD_TESTING)
# TODO: classify the serial and parrallel tests
AddTest(
TARGET MODULE_BASE_block_cyclic_distribution
TARGET MODULE_BASE_atom_basis_view
LIBS parameter
SOURCES test/test_atom_basis_view.cpp
atom_basis_view.cpp
basis_flattened_indexing.cpp
parallel_blkcyc.cpp
element_basis_index.cpp
)
AddTest(
TARGET MODULE_BASE_parallel_blkcyc
Comment thread
kirk0830 marked this conversation as resolved.
Resolved
LIBS parameter base device container
SOURCES test/test_block_cyclic_distribution.cpp
SOURCES test/test_parallel_blkcyc.cpp
)
AddTest(
TARGET MODULE_BASE_basis_flattened_indexing
LIBS parameter
SOURCES test/test_basis_flattened_indexing.cpp
basis_flattened_indexing.cpp
parallel_blkcyc.cpp
element_basis_index.cpp
)
# TODO: classify the serial and parallel tests
if(ENABLE_MPI)
add_test(
NAME MODULE_BASE_block_cyclic_distribution_mpi
NAME MODULE_BASE_parallel_blkcyc_mpi
COMMAND
${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} 4
${MPIEXEC_PREFLAGS}
$<TARGET_FILE:MODULE_BASE_block_cyclic_distribution>
$<TARGET_FILE:MODULE_BASE_parallel_blkcyc>
${MPIEXEC_POSTFLAGS}
)
add_subdirectory(test)
Expand Down
77 changes: 77 additions & 0 deletions source/source_base/atom_basis_view.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#include "source_base/atom_basis_view.h"

#include "source_base/basis_flattened_indexing.h"
#include "source_base/parallel_blkcyc.h"

#include <stdexcept>

AtomBasisView::AtomBasisView(const Parallel_Blkcyclic* layout,
const int ibas0,
const int local0,
const int nloc,
const bool col_axis)
: layout_(layout), ibas0_(ibas0), local0_(local0), nloc_(nloc), col_axis_(col_axis)
{
}

AtomBasisView AtomBasisView::make(const BasisFlattenedIndexing& basis,
const Parallel_Blkcyclic& layout,
const int iat,
const bool columns)
{
const int global_size = columns ? layout.ncglb() : layout.nrglb();
if (basis.size() != static_cast<std::size_t>(global_size))
{
throw std::invalid_argument("basis indexing and matrix distribution sizes disagree");
}

const BasisRange basis_range = basis.range(iat);
const int ibas0 = static_cast<int>(basis_range.ibas0);
int local0 = -1;
int last_local = -2;
int nloc = 0;
for (std::size_t ibas = basis_range.ibas0; ibas < basis_range.ibas1; ++ibas)
{
const int ibas_global = static_cast<int>(ibas);
const int local = columns ? layout.icloc(ibas_global) : layout.irloc(ibas_global);
if (local < 0)
{
continue;
}
if (nloc == 0)
{
local0 = local;
}
else if (local != last_local + 1)
{
throw std::invalid_argument("atom basis entries are not contiguous");
}
last_local = local;
++nloc;
}
return AtomBasisView(&layout, ibas0, local0, nloc, columns);
}

int AtomBasisView::operator[](const std::size_t index) const
{
// Reproduces the eager value the old vector stored: the global basis index
// of the owned local entry minus the atom's first basis index (ibas - ibas0).
const int local = local0_ + static_cast<int>(index);
const int ibas_global = col_axis_ ? layout_->icglb(local) : layout_->irglb(local);
const int entry = ibas_global - ibas0_;
return entry;
}

AtomBasisView AtomBasisView::rows(const BasisFlattenedIndexing& basis,
const Parallel_Blkcyclic& layout,
const int iat)
{
return make(basis, layout, iat, false);
}

AtomBasisView AtomBasisView::cols(const BasisFlattenedIndexing& basis,
const Parallel_Blkcyclic& layout,
const int iat)
{
return make(basis, layout, iat, true);
}
64 changes: 64 additions & 0 deletions source/source_base/atom_basis_view.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#ifndef ABACUS_SOURCE_BASE_ATOM_BASIS_VIEW_H
#define ABACUS_SOURCE_BASE_ATOM_BASIS_VIEW_H

#include <cstddef>

class BasisFlattenedIndexing; // Defined in source/source_base/basis_flattened_indexing.h
class Parallel_Blkcyclic; // Defined in source/source_base/parallel_blkcyc.h

/**
* @brief Atom-local basis entries derived from basis indexing and distribution.
*
* Entries are atom-local basis numbers in local matrix order, materialized on
* demand from the indexing and distribution inputs; the view allocates nothing.
*/
class AtomBasisView
{
public:
static AtomBasisView rows(const BasisFlattenedIndexing& basis,
const Parallel_Blkcyclic& layout,
int iat);
static AtomBasisView cols(const BasisFlattenedIndexing& basis,
const Parallel_Blkcyclic& layout,
int iat);

int nloc() const
{
return nloc_;
}

bool empty() const
{
return nloc_ == 0;
}

int local0() const
{
return local0_;
}

// index must be smaller than nloc(); out-of-range access is not checked.
// This view borrows the distribution it was derived from; it must not
// outlive it.
int operator[](const std::size_t index) const;

private:
AtomBasisView(const Parallel_Blkcyclic* layout,
const int ibas0,
const int local0,
const int nloc,
const bool col_axis);

static AtomBasisView make(const BasisFlattenedIndexing& basis,
const Parallel_Blkcyclic& layout,
const int iat,
const bool columns);

const Parallel_Blkcyclic* layout_ = nullptr;
int ibas0_ = 0;
int local0_ = 0;
int nloc_ = 0;
bool col_axis_ = false;
};

#endif
Loading
Loading