Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
258 commits
Select commit Hold shift + click to select a range
2529afe
Works
Flying-dragon-boxing Dec 7, 2023
09da6b1
adapt to the new container
Flying-dragon-boxing Jan 15, 2024
f52bd99
Turn off USE_PEXSI
Flying-dragon-boxing Jan 15, 2024
682d19b
Update LibRI to 553c91c
Flying-dragon-boxing Jan 16, 2024
a5ea7e1
Merge remote-tracking branch into develop
Flying-dragon-boxing Jan 17, 2024
90f600e
modify include files
Flying-dragon-boxing Jan 17, 2024
3d8c366
namespace-ize
Flying-dragon-boxing Jan 22, 2024
8075b14
new inputs added
Flying-dragon-boxing Jan 24, 2024
1e428d2
Configure Makefile Compiling, fix typos
Flying-dragon-boxing Jan 26, 2024
1264b64
Fix Makefile Intel toolchains compile errors
Flying-dragon-boxing Jan 26, 2024
a694146
Fix even more PEXSI related Makefile compiling issues
Flying-dragon-boxing Jan 26, 2024
4c4bd76
Merge remote-tracking branch 'upstream/develop' into modify_inputs
Flying-dragon-boxing Jan 28, 2024
cd3a028
Modify inputs and update to latest version (#2)
Flying-dragon-boxing Jan 28, 2024
6aa019c
Revert "Modify inputs and update to latest version"
Flying-dragon-boxing Jan 28, 2024
7561bfa
Merge pull request #3 from Flying-dragon-boxing/revert-2-modify_inputs
Flying-dragon-boxing Jan 28, 2024
3202786
Merge pull request #4 from Flying-dragon-boxing/modify_inputs
Flying-dragon-boxing Jan 28, 2024
c4c5272
Update FindPEXSI.cmake to fix Comments
Flying-dragon-boxing Jan 28, 2024
f3e18a4
Fix CI errors
Flying-dragon-boxing Jan 29, 2024
4d16f56
Fix CI Errors and Merge with Upstream
Flying-dragon-boxing Jan 29, 2024
86217fd
Merge branch 'develop' into develop
Flying-dragon-boxing Jan 29, 2024
4857553
Resolve Pull Request Reviews
Flying-dragon-boxing Feb 1, 2024
89ff055
Merge branch 'develop' into develop
Flying-dragon-boxing Feb 1, 2024
494c661
Merge remote-tracking branch 'origin/develop' into develop
Flying-dragon-boxing Feb 1, 2024
70d68d9
Fix parallel communication related issue
Flying-dragon-boxing Feb 1, 2024
c0066fe
Merge branch 'develop' into develop
Flying-dragon-boxing Feb 2, 2024
5b4a6cf
Fix vars in Makefile.vars, add input tests and comments for pexsi vars
Flying-dragon-boxing Feb 3, 2024
43ca04b
Merge branch 'develop' into develop
Flying-dragon-boxing Feb 3, 2024
493f713
Fix nspin > 1 cases
Flying-dragon-boxing Feb 3, 2024
c7efb18
Merge remote-tracking branch 'origin/develop' into develop
Flying-dragon-boxing Feb 3, 2024
7f4e526
Merge branch 'develop' into develop
Flying-dragon-boxing Feb 3, 2024
26685cd
Improvement: take calculated mu as new initial guess, may slightly im…
Flying-dragon-boxing Feb 3, 2024
2cf6773
Fix mistakes in the last commit
Flying-dragon-boxing Feb 3, 2024
7298c41
Fix: params and features
Flying-dragon-boxing Feb 6, 2024
9ee7aec
Merge branch 'develop' into develop
Flying-dragon-boxing Feb 6, 2024
ce18c08
fix empty lines
Flying-dragon-boxing Feb 6, 2024
c4d86a4
Fix: move params to pexsi_solver, rename USE_PEXSI to ENABLE_PEXSI
Flying-dragon-boxing Feb 7, 2024
5b406b9
Merge branch 'develop' into develop
Flying-dragon-boxing Feb 7, 2024
569f68d
Tests: Modify Dockerfile and GitHub Workflows
Flying-dragon-boxing Feb 7, 2024
7f0d06c
Fix: wrong abacus link for dockerfile
Flying-dragon-boxing Feb 7, 2024
b33a37b
Docs: added docs for pexsi inputs
Flying-dragon-boxing Feb 7, 2024
13d3e84
Merge pull request #6 from Flying-dragon-boxing/develop
Flying-dragon-boxing Feb 7, 2024
80ce12b
Tests: three tests added for pexsi
Flying-dragon-boxing Feb 7, 2024
8da04fc
Merge branch 'develop' into develop
Flying-dragon-boxing Feb 19, 2024
b5ad8af
Merge branch 'develop' into develop
Flying-dragon-boxing Feb 26, 2024
0829198
Merge branch 'develop' into develop
Flying-dragon-boxing Mar 30, 2024
6521241
Merge branch 'modify_tests' into modify_tests_2
Flying-dragon-boxing Mar 30, 2024
8e8598f
Merge pull request #8 from Flying-dragon-boxing/modify_tests_2
Flying-dragon-boxing Mar 30, 2024
94ff925
Fix unit test issues in input_conv
Flying-dragon-boxing Mar 30, 2024
b0d9c30
Merge pull request #9 from Flying-dragon-boxing/develop
Flying-dragon-boxing Mar 30, 2024
a97b563
Very good unit test, making my laptop fan spin
Flying-dragon-boxing Mar 31, 2024
11f0a12
Change default pexsi_npole from 80 to 40
Flying-dragon-boxing Mar 31, 2024
fd19b2c
Place pexsi_EDM in DensityMatrix, set size of pexsi_dm = 1 when Globa…
Flying-dragon-boxing Mar 31, 2024
5572872
Merge pull request #10 from Flying-dragon-boxing/develop
Flying-dragon-boxing Mar 31, 2024
aec57c0
An unit test added for DiagoPexsi
Flying-dragon-boxing Mar 31, 2024
a4efc59
Merge branch 'develop' into develop
mohanchen Apr 8, 2024
2167ba5
Merge branch 'develop' into develop
Flying-dragon-boxing Apr 9, 2024
70f9a54
modify for changed gint interface
Flying-dragon-boxing Apr 9, 2024
e7088f7
Merge pull request #11 from Flying-dragon-boxing/develop
Flying-dragon-boxing Apr 9, 2024
5a891f7
correct nspin related behaviors
Flying-dragon-boxing Apr 9, 2024
d7b402d
add efermi passthrough
Flying-dragon-boxing Apr 9, 2024
76774f6
Revert "add efermi passthrough"
Flying-dragon-boxing Apr 9, 2024
9f8532a
Merge branch 'develop' into resolve_conflict
Flying-dragon-boxing Apr 13, 2024
9e8c724
commits to resolve conversations related to codes
Flying-dragon-boxing Apr 13, 2024
569269b
DM and EDM pointers in pexsi now handled by diagopexsi, and copying h…
Flying-dragon-boxing Apr 13, 2024
f8352cb
add pexsi examples
Flying-dragon-boxing Apr 13, 2024
b0ef9ad
fix pexsi unit test (original version shouldn't run)
Flying-dragon-boxing Apr 13, 2024
5b53d6f
add building docs for pexsi
Flying-dragon-boxing Apr 17, 2024
3e5fea8
Merge branch 'develop' into resolve_conflict
Flying-dragon-boxing Apr 17, 2024
69b774a
Merge branch 'develop' into resolve_conflict
Flying-dragon-boxing Apr 18, 2024
110e5b0
set cxx standard to c++14, which is required in make_unique
Flying-dragon-boxing Apr 18, 2024
1ced552
Merge branch 'develop' into resolve_conflict
Flying-dragon-boxing May 3, 2024
e874a84
Merge branch 'develop' into resolve_conflict
Flying-dragon-boxing May 11, 2024
696d01c
Merge branch 'develop' into resolve_conflict
mohanchen May 12, 2024
04db1c1
Merge branch 'develop' into resolve_conflict
WHUweiqingzhou May 14, 2024
29f1efc
Merge branch 'develop' into resolve_conflict
mohanchen May 14, 2024
2a0b367
Merge pull request #12 from deepmodeling/develop
Flying-dragon-boxing May 15, 2024
a832159
Merge pull request #13 from Flying-dragon-boxing/resolve_conflict
Flying-dragon-boxing May 15, 2024
d1b62c4
Merge pull request #15 from deepmodeling/develop
Flying-dragon-boxing Jul 15, 2024
20cb2ae
Fix: Fix typo related to pexsi
Flying-dragon-boxing Jul 15, 2024
5308568
update to PPEXSIDFTDriver2
Flying-dragon-boxing Jul 18, 2024
8d75717
default npoints to 1, so single core pexsi will work
Flying-dragon-boxing Jul 22, 2024
8306447
Feature: exx operator for pw basis, single kpt
Flying-dragon-boxing Jul 22, 2024
dcad001
apply pexsi changes(?)
Flying-dragon-boxing Jul 23, 2024
b9e9844
q-e style exx_div
Flying-dragon-boxing Aug 1, 2024
cda67e6
Correct exxdiv
Flying-dragon-boxing Aug 7, 2024
dc367da
Merge pull request #16 from deepmodeling/develop
Flying-dragon-boxing Aug 7, 2024
c8b7221
Fix Compile errors
Flying-dragon-boxing Aug 7, 2024
aa6dc7d
refactor to abandon `pdiagh`
Flying-dragon-boxing Aug 8, 2024
7ee641a
Merge branch 'develop' into develop
Flying-dragon-boxing Aug 8, 2024
a05f3a6
Fix mu_buffer and nspin
Flying-dragon-boxing Aug 8, 2024
b92e6c5
Merge branch 'develop' into develop
Flying-dragon-boxing Aug 8, 2024
58a2297
HSE examples
Flying-dragon-boxing Sep 2, 2024
1f97745
Feature: Multi-K exx
Flying-dragon-boxing Sep 3, 2024
f672456
Feature: Multi-K exx
Flying-dragon-boxing Sep 23, 2024
998b19f
Updates with latest
Flying-dragon-boxing Sep 23, 2024
bd474b2
Merge branch 'develop' of https://github.com/deepmodeling/abacus-deve…
Flying-dragon-boxing Oct 9, 2024
c1626f4
Updates with latest
Flying-dragon-boxing Oct 11, 2024
140e361
Remove redundant global vars
Flying-dragon-boxing Oct 18, 2024
8bad499
Merge remote-tracking branch 'upstream/develop' into exx_pw
Flying-dragon-boxing Feb 4, 2025
69beb4c
Update to v3.9.0
Flying-dragon-boxing Feb 18, 2025
3405c7a
Update to v3.9.0, now code works
Flying-dragon-boxing Feb 19, 2025
d4e3bf9
Merge remote-tracking branch 'upstream/develop' into exx_pw
Flying-dragon-boxing Feb 19, 2025
a6aa3c7
Remove Redundant cal_exx_energy in esolver_ks_pw.cpp
Flying-dragon-boxing Feb 18, 2025
d9ed5b9
Some mess
Flying-dragon-boxing Feb 19, 2025
988b2ef
Minor Fixes
Flying-dragon-boxing Feb 19, 2025
1ecbb09
Fix separate loop and screening
Flying-dragon-boxing Feb 20, 2025
323e05c
Add EXX stress
Flying-dragon-boxing Feb 21, 2025
247ab5c
EXX Energy???
Flying-dragon-boxing Feb 24, 2025
eb8e92a
Multi-K is broken???
Flying-dragon-boxing Feb 24, 2025
6de3f9d
Fix: Multi-K and stress
Flying-dragon-boxing Feb 25, 2025
2e742a2
Feature: ACE for single-K
Flying-dragon-boxing Feb 27, 2025
08d92dd
Feature: ACE should work for multi-K, but not for sure
Flying-dragon-boxing Feb 28, 2025
1c6c47e
Feature: ACE works. Next step is ACE energy.
Flying-dragon-boxing Feb 28, 2025
412df28
Merge branch 'develop' into exx_pw
Flying-dragon-boxing Mar 7, 2025
36b7f71
Fix: adapt to the latest instruction for variable `conv_esolver`
Flying-dragon-boxing Mar 7, 2025
155f47a
Reconstruct: move exx_helper to hamilt_pwdft
Flying-dragon-boxing Mar 7, 2025
fb8b16f
Merge remote-tracking branch 'upstream/develop' into develop
Flying-dragon-boxing Mar 7, 2025
9dc2a36
Refactor: in ESolver_KS_PW, calculate deband in iter_finish, not in h…
Flying-dragon-boxing Mar 7, 2025
3fd4dc6
Fix: make files in consistent with upstream
Flying-dragon-boxing Mar 7, 2025
4ce66ba
Fix: Now EXX PW doesn't depend on LibRI
Flying-dragon-boxing Mar 7, 2025
f8ea0ed
Fix: Add input constraints for EXX PW
Flying-dragon-boxing Mar 7, 2025
a8b7af0
Fix: Remove redundant mpi barrier
Flying-dragon-boxing Mar 7, 2025
8178ff2
Fix: Clean irrelevant files
Flying-dragon-boxing Mar 7, 2025
eaac855
Fix: Clean irrelevant files
Flying-dragon-boxing Mar 7, 2025
5fb70bb
Feature: add ace flag, exit on using gpu
Flying-dragon-boxing Mar 10, 2025
56e4cc5
Refactor: Phase 1 for refactoring exx energy
Flying-dragon-boxing Mar 10, 2025
3d6ab83
Feature: now ace calculates energy
Flying-dragon-boxing Mar 10, 2025
1edd234
Feature: enable exx energy
Flying-dragon-boxing Mar 10, 2025
6b9280c
Merge branch 'develop' into exx_pw
Flying-dragon-boxing Mar 10, 2025
6728fd2
Fix: fix makefile compilation error
Flying-dragon-boxing Mar 10, 2025
1d2a260
Fix: One minor fix for a segmentation fault
Flying-dragon-boxing Mar 11, 2025
6b0a77c
Merge remote-tracking branch 'origin/exx_pw' into exx_pw
Flying-dragon-boxing Mar 11, 2025
0ba28dd
Merge branch 'develop' into exx_pw
Flying-dragon-boxing Mar 11, 2025
e7b606f
Tests: one integrate test for exx pw, only for verifying whether exx …
Flying-dragon-boxing Mar 11, 2025
8c0bb5c
Revert "Tests: one integrate test for exx pw, only for verifying whet…
Flying-dragon-boxing Mar 11, 2025
fd8224f
Merge with upstream
Flying-dragon-boxing Mar 22, 2025
3111b09
Fix: EXX PW ACE open only when separate_loop is on
Flying-dragon-boxing Mar 22, 2025
d1430a0
Merge branch 'develop' into exx_pw
Flying-dragon-boxing Mar 22, 2025
04307bf
Merge branch 'develop' into exx_pw
Flying-dragon-boxing Mar 23, 2025
0ba2760
add timer
Flying-dragon-boxing Apr 2, 2025
abb6549
Feature: Double Grid method of EXX PW
Flying-dragon-boxing Apr 2, 2025
7e20895
Feature: Double Grid method of EXX PW Stress
Flying-dragon-boxing Apr 2, 2025
9e0b9c3
Fix: Double Grid method of EXX PW Stress
Flying-dragon-boxing Apr 2, 2025
5e1f823
Feature: add double grid variable
Flying-dragon-boxing Apr 2, 2025
297808b
Feature: add double grid variable
Flying-dragon-boxing Apr 2, 2025
86e1eb7
Fis: HSE stress
Flying-dragon-boxing Apr 2, 2025
ef23a19
Fix: HSE Stress
Flying-dragon-boxing Apr 2, 2025
0ca2b77
Fix: Timer
Flying-dragon-boxing Apr 3, 2025
d502509
Fix: Timer
Flying-dragon-boxing Apr 3, 2025
52e75a5
Merge pull request #19 from deepmodeling/develop
Flying-dragon-boxing Apr 3, 2025
7a68932
Merge remote-tracking branch 'upstream/develop' into exx_pw
Flying-dragon-boxing Apr 7, 2025
2758160
For non mp sampling, disable extrapolation
Flying-dragon-boxing Apr 7, 2025
9966efa
Modify test
Flying-dragon-boxing Apr 7, 2025
5446405
Modify mp
Flying-dragon-boxing Apr 7, 2025
eaa1b5c
Merge branch 'develop' into exx_pw
Flying-dragon-boxing Apr 7, 2025
97d078d
Merge branch 'develop' into exx_pw
Flying-dragon-boxing Apr 8, 2025
7f433e0
Format
Flying-dragon-boxing Apr 8, 2025
4fd697c
Merge remote-tracking branch 'origin/exx_pw' into exx_pw
Flying-dragon-boxing Apr 8, 2025
53792cb
Format
Flying-dragon-boxing Apr 8, 2025
8ab5358
Merge branch 'develop' into exx_pw
Flying-dragon-boxing Apr 8, 2025
60a14cb
Merge remote-tracking branch 'upstream' into exx_pw
Flying-dragon-boxing Apr 14, 2025
fd88664
Feature: nspin == 2 scf
Flying-dragon-boxing Apr 14, 2025
22d3166
Fix: nspin == 2 scf
Flying-dragon-boxing Apr 15, 2025
b718a52
Merge remote-tracking branch 'upstream' into exx_pw
Flying-dragon-boxing Jun 2, 2025
c5e0837
Docs: EXX PW Docs
Flying-dragon-boxing Jun 2, 2025
e38c94f
Feature: EXX PW for nspin=2
Flying-dragon-boxing Jun 2, 2025
2113b23
Docs: EXX PW Docs
Flying-dragon-boxing Jun 2, 2025
6134e3e
Docs: EXX PW Docs
Flying-dragon-boxing Jun 2, 2025
596de5b
Docs: EXX PW Docs, minor fixes
Flying-dragon-boxing Jun 2, 2025
b80c6a8
Merge remote-tracking branch 'upstream/develop' into exx_pw
Flying-dragon-boxing Jun 2, 2025
a9e9ecd
Merge
Flying-dragon-boxing Jun 3, 2025
89f2cc1
Refactor
Flying-dragon-boxing Jun 3, 2025
f48ea9b
Refactor
Flying-dragon-boxing Jun 3, 2025
ae10873
Refactor
Flying-dragon-boxing Jun 3, 2025
88eec25
Merge branch 'develop' into develop
Flying-dragon-boxing Jun 3, 2025
d060712
Refactor
Flying-dragon-boxing Jun 3, 2025
bb55801
Refactor
Flying-dragon-boxing Jun 3, 2025
d5183d8
Refactor: fix unit test
Flying-dragon-boxing Jun 3, 2025
23ed59a
Refactor: fix unit test
Flying-dragon-boxing Jun 3, 2025
a80ec81
Refactor: fix unit test
Flying-dragon-boxing Jun 3, 2025
7756c96
Refactor: fix unit test
Flying-dragon-boxing Jun 4, 2025
009964b
Merge branch 'develop' into develop
Flying-dragon-boxing Jun 5, 2025
4801e6d
Merge remote-tracking branch 'upstream/develop' into exx_pw
Flying-dragon-boxing Jun 6, 2025
6dc3de4
Bump version v3.9.0.7
Flying-dragon-boxing Jun 6, 2025
4737f8a
Refactor: Remove set kvec funcs in `K_Vectors`
Flying-dragon-boxing Jun 9, 2025
bcd549f
Refactor: Remove final_scf
Flying-dragon-boxing Jun 9, 2025
f5cd794
Refactor: Fix kvecc2d/d2c
Flying-dragon-boxing Jun 9, 2025
bf01b41
Merge branch 'develop' into develop
Flying-dragon-boxing Jun 9, 2025
ce796a9
Fix: Tests
Flying-dragon-boxing Jun 9, 2025
98f4c07
Fix: Tests
Flying-dragon-boxing Jun 9, 2025
8a41e6e
Merge branch 'develop' into develop
Flying-dragon-boxing Jun 10, 2025
8493b5e
Fix: Tests
Flying-dragon-boxing Jun 10, 2025
5f8f70e
Fix: Tests
Flying-dragon-boxing Jun 10, 2025
e3dc6ca
Refactor: Final?
Flying-dragon-boxing Jun 10, 2025
c6353ef
Fix
Flying-dragon-boxing Jun 10, 2025
2ef53b7
Fix
Flying-dragon-boxing Jun 10, 2025
a22d396
Fix
Flying-dragon-boxing Jun 10, 2025
0afd3e1
Fix
Flying-dragon-boxing Jun 10, 2025
c2aa114
Merge branch 'develop' into develop
Flying-dragon-boxing Jun 12, 2025
17e82b8
Merge branch 'develop' into develop
Flying-dragon-boxing Jun 13, 2025
5202d0b
Merge
Flying-dragon-boxing Jun 25, 2025
7fcd75f
GPU EXX PW Support
Flying-dragon-boxing Jun 26, 2025
95593c4
Merge
Flying-dragon-boxing Jun 26, 2025
36d7f7e
Fix: Compile Error on CUDA > 12.9
Flying-dragon-boxing Jun 26, 2025
964d4b6
Fix: Compile Error on CUDA > 12.9
Flying-dragon-boxing Jun 26, 2025
5dcfb20
NVTX3
Flying-dragon-boxing Jun 26, 2025
a1c7cb9
F***ing new version
Flying-dragon-boxing Jun 26, 2025
c50e4b7
F***ing new version
Flying-dragon-boxing Jun 26, 2025
0141d58
Merge remote-tracking branch 'upstream/develop' into develop
Flying-dragon-boxing Jul 9, 2025
d6b9da2
Feature: Support linear combination of coulomb_param for EXX PW
Flying-dragon-boxing Jul 9, 2025
6049913
Fix: Fix compile issue
Flying-dragon-boxing Jul 9, 2025
acc2839
F***ing new version
Flying-dragon-boxing Jul 19, 2025
3c07894
F***ing new version
Flying-dragon-boxing Jul 19, 2025
a0cbb24
F***ing new version
Flying-dragon-boxing Jul 19, 2025
f8b27d4
F***ing new version
Flying-dragon-boxing Jul 19, 2025
0d119e9
Uploading hybrid gauge tddft (#6369)
ESROAMER Jul 10, 2025
ec01e60
Improve md calculation stress output in running log (#6366)
lanshuyue Jul 10, 2025
954b5e6
Refactor: Remove redundant Input_para from ESolver Class (#6370)
sunliang98 Jul 10, 2025
a9b1917
Fix: Fix memory leak introduced by new gint module (#6375)
dzzz2001 Jul 10, 2025
1a3125d
refactor Exx_Opt_Orb (#6378)
linpeize Jul 12, 2025
f1196e5
Add use sw and fix Floating point exception (#6372)
A-006 Jul 12, 2025
efdeaa5
Update the output formats of rt-TDDFT (#6381)
mohanchen Jul 13, 2025
07a3824
[Refactor] Rename grid to module_grid and genelpa to module_genelpa (…
Critsium-xy Jul 14, 2025
f2e0f16
Update the outputs of geometry relaxation (#6387)
mohanchen Jul 14, 2025
2877670
Feature: support the output of matrix representation of symm_ops (#6390)
kirk0830 Jul 18, 2025
6a70de5
Feature: Output real space wavefunction and partial charge density wh…
AsTonyshment Jul 18, 2025
9674217
Optimize RT-TDDFT dipole output (#6393)
AsTonyshment Jul 18, 2025
ea5b326
Perf: support GPU version of cal_force_cc with LCAO basis (#6392)
dzzz2001 Jul 19, 2025
160ad95
[Refactor] Move module_lr to source_lcao and add a new folder module_…
Critsium-xy Jul 19, 2025
f80ef2e
Fix a bug for the output information after relaxation (#6395)
mohanchen Jul 19, 2025
6e6bbf5
bump version to 3.9.0.10 (#6397)
Cstandardlib Jul 20, 2025
f1e5cb3
Fix: fix exx_gamma_extrapolation error in MPI
Flying-dragon-boxing Jul 21, 2025
6bcb232
Fix: fix exx_gamma_extrapolation error in MPI
Flying-dragon-boxing Jul 21, 2025
0dc4140
Merge pull request #20 from deepmodeling/develop
Flying-dragon-boxing Jul 21, 2025
ebed51f
Merge branch 'develop' into develop
mohanchen Jul 21, 2025
f19607e
Merge branch 'develop' into exx_pw
Flying-dragon-boxing Jul 22, 2025
1bed146
Merge pull request #21 from deepmodeling/develop
Flying-dragon-boxing Jul 23, 2025
0801fcc
Update lapack.cu
Flying-dragon-boxing Jul 23, 2025
43f8926
Merge branch 'develop' into develop
Flying-dragon-boxing Jul 26, 2025
b8cdb29
Refactor: Use LAPACK interfaces from ATen
Flying-dragon-boxing Jul 30, 2025
adc4fc1
Merge remote-tracking branch 'origin/exx_pw' into exx_pw
Flying-dragon-boxing Jul 30, 2025
26b7d00
Merge branch 'develop' into develop
Flying-dragon-boxing Jul 30, 2025
9c65553
Fix: Integrate test
Flying-dragon-boxing Jul 30, 2025
b5be1a4
Merge remote-tracking branch 'origin/develop' into develop
Flying-dragon-boxing Jul 30, 2025
ec5e8a0
Merge branch 'develop' into exx_pw
Flying-dragon-boxing Jul 31, 2025
52925f5
Merge branch 'develop' into exx_pw
Flying-dragon-boxing Jul 31, 2025
25aa53a
Fix: implement devinfo for potrf
Flying-dragon-boxing Jul 31, 2025
ba2b651
Fix: MPI and Makefile
Flying-dragon-boxing Jul 31, 2025
eb57368
Fix: get_potential
Flying-dragon-boxing Jul 31, 2025
0197961
Fix: ace
Flying-dragon-boxing Jul 31, 2025
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
8 changes: 8 additions & 0 deletions source/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ list(APPEND device_srcs
source_pw/module_pwdft/kernels/vnl_op.cpp
source_base/kernels/math_ylm_op.cpp
source_hamilt/module_xc/kernels/xc_functional_op.cpp
source_pw/module_pwdft/kernels/cal_density_real_op.cpp
source_pw/module_pwdft/kernels/mul_potential_op.cpp
source_pw/module_pwdft/kernels/vec_mul_vec_complex_op.cpp
source_pw/module_pwdft/kernels/exx_cal_energy_op.cpp
)

if(USE_CUDA)
Expand All @@ -80,6 +84,10 @@ if(USE_CUDA)
source_base/kernels/cuda/math_kernel_op.cu
source_base/kernels/cuda/math_kernel_op_vec.cu
source_hamilt/module_xc/kernels/cuda/xc_functional_op.cu
source_pw/module_pwdft/kernels/cuda/cal_density_real_op.cu
source_pw/module_pwdft/kernels/cuda/mul_potential_op.cu
source_pw/module_pwdft/kernels/cuda/vec_mul_vec_complex.cu
source_pw/module_pwdft/kernels/cuda/exx_cal_energy_op.cu
)
endif()

Expand Down
4 changes: 4 additions & 0 deletions source/Makefile.Objects
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,10 @@ OBJS_HAMILT=hamilt_pw.o\
velocity_pw.o\
radial_proj.o\
exx_helper.o\
vec_mul_vec_complex_op.o\
exx_cal_energy_op.o\
cal_density_real_op.o\
mul_potential_op.o\

OBJS_HAMILT_OF=kedf_tf.o\
kedf_vw.o\
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,6 @@ struct lapack_trtri<T, DEVICE_GPU> {
{
// TODO: trtri is not implemented in this method yet
// Cause the trtri in cuSolver is not stable for ABACUS!
// But why?! trtri and potri are different routines for different job!
// How can BPCG work without using a proper routine?
cuSolverConnector::trtri(cusolver_handle, uplo, diag, dim, Mat, lda);
// cuSolverConnector::potri(cusolver_handle, uplo, diag, dim, Mat, lda);
}
Expand Down
24 changes: 18 additions & 6 deletions source/source_base/module_container/base/third_party/cusolver.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,45 +87,57 @@ static inline
void potrf (cusolverDnHandle_t& cusolver_handle, const char& uplo, const int& n, float * A, const int& lda)
{
int lwork;
int *info = nullptr;
cudaErrcheck(cudaMalloc((void**)&info, 1 * sizeof(int)));
cusolverErrcheck(cusolverDnSpotrf_bufferSize(cusolver_handle, cublas_fill_mode(uplo), n, A, n, &lwork));
float* work;
cudaErrcheck(cudaMalloc((void**)&work, lwork * sizeof(float)));
// Perform Cholesky decomposition
cusolverErrcheck(cusolverDnSpotrf(cusolver_handle, cublas_fill_mode(uplo), n, A, n, work, lwork, nullptr));
cusolverErrcheck(cusolverDnSpotrf(cusolver_handle, cublas_fill_mode(uplo), n, A, n, work, lwork, info));
cudaErrcheck(cudaFree(work));
cudaErrcheck(cudaFree(info));
}
static inline
void potrf (cusolverDnHandle_t& cusolver_handle, const char& uplo, const int& n, double * A, const int& lda)
{
int lwork;
int *info = nullptr;
cudaErrcheck(cudaMalloc((void**)&info, 1 * sizeof(int)));
cusolverErrcheck(cusolverDnDpotrf_bufferSize(cusolver_handle, cublas_fill_mode(uplo), n, A, n, &lwork));
double* work;
cudaErrcheck(cudaMalloc((void**)&work, lwork * sizeof(double)));
// Perform Cholesky decomposition
cusolverErrcheck(cusolverDnDpotrf(cusolver_handle, cublas_fill_mode(uplo), n, A, n, work, lwork, nullptr));
cusolverErrcheck(cusolverDnDpotrf(cusolver_handle, cublas_fill_mode(uplo), n, A, n, work, lwork, info));
cudaErrcheck(cudaFree(work));
cudaErrcheck(cudaFree(info));
}
static inline
void potrf (cusolverDnHandle_t& cusolver_handle, const char& uplo, const int& n, std::complex<float> * A, const int& lda)
{
int lwork;
cusolverErrcheck(cusolverDnCpotrf_bufferSize(cusolver_handle, cublas_fill_mode(uplo), n, reinterpret_cast<cuComplex*>(A), n, &lwork));
int *info = nullptr;
cudaErrcheck(cudaMalloc((void**)&info, 1 * sizeof(int)));
cusolverErrcheck(cusolverDnCpotrf_bufferSize(cusolver_handle, cublas_fill_mode(uplo), n, reinterpret_cast<cuComplex*>(A), lda, &lwork));
cuComplex* work;
cudaErrcheck(cudaMalloc((void**)&work, lwork * sizeof(cuComplex)));
// Perform Cholesky decomposition
cusolverErrcheck(cusolverDnCpotrf(cusolver_handle, cublas_fill_mode(uplo), n, reinterpret_cast<cuComplex*>(A), n, work, lwork, nullptr));
cusolverErrcheck(cusolverDnCpotrf(cusolver_handle, cublas_fill_mode(uplo), n, reinterpret_cast<cuComplex*>(A), lda, work, lwork, info));
cudaErrcheck(cudaFree(work));
cudaErrcheck(cudaFree(info));
}
static inline
void potrf (cusolverDnHandle_t& cusolver_handle, const char& uplo, const int& n, std::complex<double> * A, const int& lda)
{
int lwork;
cusolverErrcheck(cusolverDnZpotrf_bufferSize(cusolver_handle, cublas_fill_mode(uplo), n, reinterpret_cast<cuDoubleComplex*>(A), n, &lwork));
int *info = nullptr;
cudaErrcheck(cudaMalloc((void**)&info, 1 * sizeof(int)));
cusolverErrcheck(cusolverDnZpotrf_bufferSize(cusolver_handle, cublas_fill_mode(uplo), n, reinterpret_cast<cuDoubleComplex*>(A), lda, &lwork));
cuDoubleComplex* work;
cudaErrcheck(cudaMalloc((void**)&work, lwork * sizeof(cuDoubleComplex)));
// Perform Cholesky decomposition
cusolverErrcheck(cusolverDnZpotrf(cusolver_handle, cublas_fill_mode(uplo), n, reinterpret_cast<cuDoubleComplex*>(A), n, work, lwork, nullptr));
cusolverErrcheck(cusolverDnZpotrf(cusolver_handle, cublas_fill_mode(uplo), n, reinterpret_cast<cuDoubleComplex*>(A), lda, work, lwork, info));
cudaErrcheck(cudaFree(work));
cudaErrcheck(cudaFree(info));
}


Expand Down
3 changes: 3 additions & 0 deletions source/source_basis/module_pw/pw_basis.h
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,9 @@ class PW_Basis
void set_device(std::string device_);
void set_precision(std::string precision_);

std::string get_device() const { return device; }
std::string get_precision() const { return precision; }

protected:

std::string device = "cpu"; ///< cpu or gpu
Expand Down
1 change: 1 addition & 0 deletions source/source_esolver/esolver_ks_pw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -619,6 +619,7 @@ void ESolver_KS_PW<T, Device>::iter_finish(UnitCell& ucell, const int istep, int
{
auto start = std::chrono::high_resolution_clock::now();
exx_helper.set_firstiter(false);
exx_helper.op_exx->first_iter = false;
exx_helper.set_psi(this->kspw_psi);

conv_esolver = exx_helper.exx_after_converge(iter);
Expand Down
8 changes: 2 additions & 6 deletions source/source_io/input_conv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -488,19 +488,15 @@ void Input_Conv::Convert()
{
if (ModuleSymmetry::Symmetry::symm_flag != -1)
{
ModuleBase::WARNING("Input_Conv", "EXX PW works only with symmetry=-1");
ModuleSymmetry::Symmetry::symm_flag = -1;
ModuleBase::WARNING_QUIT("Input_Conv", "EXX PW works only with symmetry=-1");
// ModuleSymmetry::Symmetry::symm_flag = -1;
}

if (PARAM.inp.nspin != 1 && PARAM.inp.nspin != 2)
{
ModuleBase::WARNING_QUIT("Input_Conv", "EXX PW works only with nspin=1 and 2");
}

if (PARAM.inp.device != "cpu")
{
ModuleBase::WARNING_QUIT("Input_Conv", "EXX PW works only with device=cpu");
}
}

//----------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion source/source_pw/module_pwdft/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ list(APPEND objects
stress_func_nl.cpp
stress_func_us.cpp
stress_func_onsite.cpp
stress_func_exx.cpp
stress_pw.cpp
VL_in_pw.cpp
VNL_in_pw.cpp
Expand All @@ -47,7 +48,6 @@ add_library(
module_pwdft
OBJECT
${objects}
stress_func_exx.cpp
)

if(ENABLE_COVERAGE)
Expand Down
25 changes: 25 additions & 0 deletions source/source_pw/module_pwdft/kernels/cal_density_real_op.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#include "source_pw/module_pwdft/kernels/cal_density_real_op.h"
#include "source_psi/psi.h"
namespace hamilt
{
template <typename T>
struct cal_density_real_op<T, base_device::DEVICE_CPU>
{
void operator()(const T *in1, const T *in2, T *out, double omega, int nrxx)
{
#ifdef _OPENMP
#pragma omp parallel for schedule(static)
#endif
for (int ir = 0; ir < nrxx; ir++)
{
// assert(is_finite(psi_nk_real[ir]));
// assert(is_finite(psi_mq_real[ir]));
out[ir] = in1[ir] * std::conj(in2[ir]) / static_cast<T>(omega); // Phase e^(i(q-k)r)
}
}

};

template struct cal_density_real_op<std::complex<float>, base_device::DEVICE_CPU>;
template struct cal_density_real_op<std::complex<double>, base_device::DEVICE_CPU>;
}
14 changes: 14 additions & 0 deletions source/source_pw/module_pwdft/kernels/cal_density_real_op.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#include "source_base/macros.h"

#ifndef CAL_DENSITY_REAL_OP_H
#define CAL_DENSITY_REAL_OP_H
namespace hamilt
{
template <typename T, typename Device>
struct cal_density_real_op
{
using Real = typename GetTypeReal<T>::type;
void operator()(const T *psi1, const T* psi2, T *out, double omega, int nrxx);
};
}
#endif //CAL_DENSITY_REAL_OP_H
48 changes: 48 additions & 0 deletions source/source_pw/module_pwdft/kernels/cuda/cal_density_real_op.cu
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#include "source_pw/module_pwdft/kernels/cal_density_real_op.h"
#include "source_psi/psi.h"

#include <thrust/complex.h>

namespace hamilt
{
template <typename FPTYPE>
__global__ void cal_density_real_kernel(
const thrust::complex<FPTYPE> *in1,
const thrust::complex<FPTYPE> *in2,
thrust::complex<FPTYPE> *out,
const FPTYPE omega,
int nrxx)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx < nrxx)
{
out[idx] = in1[idx] * thrust::conj(in2[idx]) / static_cast<thrust::complex<FPTYPE>>(omega);
}
}

template <typename FPTYPE>
struct cal_density_real_op<std::complex<FPTYPE>, base_device::DEVICE_GPU>
{
using T = std::complex<FPTYPE>;
void operator()(const T *psi1, const T *psi2, T *out, double omega, int nrxx)
{
int threads_per_block = 256;
int num_blocks = (nrxx + threads_per_block - 1) / threads_per_block;

cal_density_real_kernel<FPTYPE><<<num_blocks, threads_per_block>>>(
reinterpret_cast<const thrust::complex<FPTYPE> *>(psi1),
reinterpret_cast<const thrust::complex<FPTYPE> *>(psi2),
reinterpret_cast<thrust::complex<FPTYPE> *>(out),
static_cast<FPTYPE>(omega), nrxx);

cudaError_t err = cudaGetLastError();
if (err != cudaSuccess)
{
throw std::runtime_error("CUDA error in cal_density_real_kernel: " + std::string(cudaGetErrorString(err)));
}
}
};

template struct cal_density_real_op<std::complex<float>, base_device::DEVICE_GPU>;
template struct cal_density_real_op<std::complex<double>, base_device::DEVICE_GPU>;
} // namespace hamilt
84 changes: 84 additions & 0 deletions source/source_pw/module_pwdft/kernels/cuda/exx_cal_energy_op.cu
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
#include "source_pw/module_pwdft/kernels/exx_cal_energy_op.h"
#include "source_psi/psi.h"

#include <thrust/complex.h>

namespace hamilt
{

// #ifdef _OPENMP
// #pragma omp parallel for reduction(+:Eexx_ik_real)
// #endif
// for (int ig = 0; ig < rhopw_dev->npw; ig++)
// {
// int nks = wfcpw->nks;
// int npw = rhopw_dev->npw;
// int nk = nks / nk_fac;
// Real Fac = pot[ik * nks * npw + iq * npw + ig];

// Eexx_ik_real += Fac * (density_recip[ig] * std::conj(density_recip[ig])).real()
// * wg_iqb_real / nqs * wg_ikb_real / kv->wk[ik];
// }

template <typename FPTYPE>
__global__ void cal_vec_norm_kernel(
const thrust::complex<FPTYPE> *den,
const FPTYPE *pot,
FPTYPE *result,
int npw)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx < npw)
{
// atomicAdd(result, (den[idx].real() * den[idx].real() + den[idx].imag() * den[idx].imag()) * pot[idx]);
FPTYPE tmp =(den[idx] * thrust::conj(den[idx])).real() * pot[idx];
atomicAdd(result, tmp);
}
__syncthreads();
}

template <typename FPTYPE>
struct exx_cal_energy_op<std::complex<FPTYPE>, base_device::DEVICE_GPU>
{
using T = std::complex<FPTYPE>;
FPTYPE operator()(const T *den, const FPTYPE *pot, FPTYPE scalar, int npw)
{
// T *den_cpu = new T[npw];
// FPTYPE *pot_cpu = new FPTYPE[npw];
// cudaMemcpy(den_cpu, den, npw * sizeof(T), cudaMemcpyDeviceToHost);
// cudaMemcpy(pot_cpu, pot, npw * sizeof(FPTYPE), cudaMemcpyDeviceToHost);
// FPTYPE result = exx_cal_energy_op<std::complex<FPTYPE>, base_device::DEVICE_CPU>()(den_cpu, pot_cpu, scalar, npw);
// delete[] den_cpu;
// delete[] pot_cpu;
// return result;
FPTYPE result = 0.0;

int threads_per_block = 256;
int num_blocks = (npw + threads_per_block - 1) / threads_per_block;

FPTYPE *d_result;
cudaMalloc(&d_result, sizeof(FPTYPE));
cudaMemset(d_result, 0, sizeof(FPTYPE));

cal_vec_norm_kernel<FPTYPE><<<num_blocks, threads_per_block>>>(
reinterpret_cast<const thrust::complex<FPTYPE> *>(den),
pot,
d_result,
npw);

cudaError_t err = cudaGetLastError();
if (err != cudaSuccess)
{
throw std::runtime_error("CUDA error in cal_vec_norm_kernel: " + std::string(cudaGetErrorString(err)));
}

cudaMemcpy(&result, d_result, sizeof(FPTYPE), cudaMemcpyDeviceToHost);
cudaFree(d_result);

return scalar * result;
}
};

template struct exx_cal_energy_op<std::complex<float>, base_device::DEVICE_GPU>;
template struct exx_cal_energy_op<std::complex<double>, base_device::DEVICE_GPU>;
} // namespace hamilt
53 changes: 53 additions & 0 deletions source/source_pw/module_pwdft/kernels/cuda/mul_potential_op.cu
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#include "source_pw/module_pwdft/kernels/mul_potential_op.h"
#include "source_io/module_parameter/parameter.h"
#include "source_psi/psi.h"

#include <thrust/complex.h>

namespace hamilt {
template <typename FPTYPE>
__global__ void mul_potential_kernel(
const FPTYPE *pot_shifted,
thrust::complex<FPTYPE> *density_recip,
int npw)
{
int ig = blockIdx.x * blockDim.x + threadIdx.x;
if (ig < npw)
{
density_recip[ig] *= pot_shifted[ig];
}
}

template <typename FPTYPE>
struct mul_potential_op<std::complex<FPTYPE>, base_device::DEVICE_GPU>
{
using T = std::complex<FPTYPE>;
void operator()(const FPTYPE *pot, T *density_recip, int npw, int nks, int ik, int iq)
{
// #ifdef _OPENMP
// #pragma omp parallel for schedule(static)
// #endif
// for (int ig = 0; ig < npw; ig++)
// {
// int ig_kq = ik * nks * npw + iq * npw + ig;
// density_recip[ig] *= pot[ig_kq];
//
// }
int threads_per_block = 256;
int num_blocks = (npw + threads_per_block - 1) / threads_per_block;

mul_potential_kernel<<<num_blocks, threads_per_block>>>(
pot + ik * nks * npw + iq * npw,
reinterpret_cast<thrust::complex<FPTYPE>*>(density_recip),
npw);

cudaError_t err = cudaGetLastError();
if (err != cudaSuccess)
{
throw std::runtime_error("CUDA error in mul_potential_kernel: " + std::string(cudaGetErrorString(err)));
}
}
};
template struct mul_potential_op<std::complex<float>, base_device::DEVICE_GPU>;
template struct mul_potential_op<std::complex<double>, base_device::DEVICE_GPU>;
} // hamilt
Loading
Loading