Skip to content

Commit 539e69f

Browse files
committed
modified: src_pdiag/pdiag_double.cpp
Now only set elpa handle once, because set the same elpa handle in every ion step may cause the program collapse Require more tests
1 parent 4aa1944 commit 539e69f

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

source/src_pdiag/pdiag_double.cpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -664,22 +664,29 @@ void Pdiag_Double::diago_double_begin(
664664
MPI_Bcast(&maxnloc, 1, MPI_LONG, 0, comm_2D);
665665
wfc_2d.create(this->ncol,this->nrow); // Fortran order
666666

667-
int is_already_decomposed, elpa_error;
668667
static elpa_t handle;
668+
static bool has_set_elpa_handle = false;
669+
if(! has_set_elpa_handle)
670+
{
671+
set_elpahandle(handle, desc, nrow, ncol);
672+
has_set_elpa_handle = true;
673+
}
669674

675+
int is_already_decomposed;
670676
if(ifElpaHandle(GlobalC::CHR.get_new_e_iteration(), (GlobalV::CALCULATION=="nscf")))
671677
{
672-
ModuleBase::timer::tick("Diago_LCAO_Matrix","elpa_set");
678+
ModuleBase::timer::tick("Diago_LCAO_Matrix","decompose_S");
673679
LapackConnector::copy(nloc, s_mat, inc, Stmp, inc);
674-
set_elpahandle(handle, desc, nrow, ncol);
675680
is_already_decomposed=0;
676-
ModuleBase::timer::tick("Diago_LCAO_Matrix","elpa_set");
681+
ModuleBase::timer::tick("Diago_LCAO_Matrix","decompose_S");
677682
}
678683
else
679684
{
680685
is_already_decomposed=1;
681686
}
687+
682688
ModuleBase::timer::tick("Diago_LCAO_Matrix","elpa_solve");
689+
int elpa_error;
683690
elpa_generalized_eigenvectors_d(handle, h_mat, Stmp, eigen, wfc_2d.c, is_already_decomposed, &elpa_error);
684691
ModuleBase::timer::tick("Diago_LCAO_Matrix","elpa_solve");
685692

@@ -1019,15 +1026,16 @@ void Pdiag_Double::diago_complex_begin(
10191026
MPI_Bcast(&maxnloc, 1, MPI_LONG, 0, comm_2D);
10201027
wfc_2d.create(this->ncol,this->nrow); // Fortran order
10211028

1022-
LapackConnector::copy(nloc, cs_mat, inc, Stmp, inc);
1023-
ModuleBase::timer::tick("Diago_LCAO_Matrix","elpa_set");
10241029
static elpa_t handle;
1025-
1026-
if(ifElpaHandle(GlobalC::CHR.get_new_e_iteration(), (GlobalV::CALCULATION=="nscf")))
1030+
static bool has_set_elpa_handle = false;
1031+
if(! has_set_elpa_handle)
10271032
{
10281033
set_elpahandle(handle, desc, nrow, ncol);
1034+
has_set_elpa_handle = true;
10291035
}
1030-
ModuleBase::timer::tick("Diago_LCAO_Matrix","elpa_set");
1036+
1037+
LapackConnector::copy(nloc, cs_mat, inc, Stmp, inc);
1038+
10311039
ModuleBase::timer::tick("Diago_LCAO_Matrix","elpa_solve");
10321040
int elpa_derror;
10331041
elpa_generalized_eigenvectors_dc(handle, reinterpret_cast<double _Complex*>(ch_mat),

0 commit comments

Comments
 (0)