Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 2 additions & 1 deletion ABACUS.develop/source/src_io/istate_charge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,8 @@ void IState_Charge::idmatrix(const int &ib)
if ( mu_local >= 0)
{
// set a pointer.
double *alpha = LOC.DM[is][mu_local];
//double *alpha = LOC.DM[is][mu_local];
double *alpha = &LOC.DM[is](mu_local,0);
for (int j=i; j<NLOCAL; j++)
{
const int nu_local = GridT.trace_lo[j];
Expand Down
6 changes: 4 additions & 2 deletions ABACUS.develop/source/src_io/read_dm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ void Local_Orbital_Charge::read_dm(const int &is, const string &fn)
{
for(int j=0; j<NLOCAL; ++j)
{
ifs >> DM[is][i][j];
//ifs >> DM[is][i][j];
ifs >> DM[is](i,j);
}
}
}
Expand Down Expand Up @@ -164,7 +165,8 @@ void Local_Orbital_Charge::read_dm(const int &is, const string &fn)
const int nu = GridT.trace_lo[j];
if(nu >= 0)
{
DM[is][mu][nu] = tmp[j];
//DM[is][mu][nu] = tmp[j];
DM[is](mu,nu) = tmp[j];
}
}
}
Expand Down
6 changes: 4 additions & 2 deletions ABACUS.develop/source/src_io/write_dm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ void Local_Orbital_Charge::write_dm(
for(int j=0; j<NLOCAL; ++j)
{
if(j%8==0) ofs << "\n";
ofs << " " << this->DM[is][i][j];
//ofs << " " << this->DM[is][i][j];
ofs << " " << this->DM[is](i,j);
}
}
}
Expand Down Expand Up @@ -178,7 +179,8 @@ void Local_Orbital_Charge::write_dm(
const int nu = GridT.trace_lo[j];
if (nu >=0)
{
tmp[j] = DM[is][mu][nu];
//tmp[j] = DM[is][mu][nu];
tmp[j] = DM[is](mu,nu);
//ofs_running << " dmi=" << i << " j=" << j << " " << DM[is][mu][nu] << endl;
}
}
Expand Down
49 changes: 29 additions & 20 deletions ABACUS.develop/source/src_lcao/DM_gamma.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -220,13 +220,13 @@ void Local_Orbital_Charge::allocate_gamma(const Grid_Technique &gt)
if(this->init_DM)
{
assert(lgd_last > 0);
for (int is=0; is<NSPIN; is++)
/*for (int is=0; is<NSPIN; is++)
{
delete[] DM[is];
delete[] DM_pool[is];
}
//delete[] DM_pool[is];
}*/
delete[] DM;
delete[] DM_pool;
//delete[] DM_pool;
init_DM = false;
}

Expand All @@ -235,18 +235,19 @@ void Local_Orbital_Charge::allocate_gamma(const Grid_Technique &gt)
// mohan update 2010-09-06
if(lgd_now > 0)
{
this->DM = new double**[NSPIN];
this->DM_pool = new double *[NSPIN];
this->DM = new matrix [NSPIN];
//this->DM_pool = new double *[NSPIN];
for(int is=0; is<NSPIN; is++)
{
this->DM_pool[is]=new double [lgd_now*lgd_now];
ZEROS(DM_pool[is], lgd_now*lgd_now);
this->DM[is] = new double*[lgd_now];
//this->DM_pool[is]=new double [lgd_now*lgd_now];
//ZEROS(DM_pool[is], lgd_now*lgd_now);
this->DM[is].create(lgd_now, lgd_now);
this->DM[is].zero_out();

for (int i=0; i<lgd_now; i++)
/*for (int i=0; i<lgd_now; i++)
{
DM[is][i] = &DM_pool[is][i*lgd_now];
}
}*/
Memory::record("LocalOrbital_Charge","Density_Kernal",NSPIN*lgd_now*lgd_now,"double");
}
this->init_DM = true;
Expand Down Expand Up @@ -343,7 +344,8 @@ void Local_Orbital_Charge::cal_dk_gamma_from_2D(void)
const int idx=receiver_local_index[i];
const int icol=idx%lgd_now;
const int irow=(idx-icol)/lgd_now;
DM[is][irow][icol]=receiver_buffer[i];
DM[is](irow,icol)=receiver_buffer[i];
//DM[is][irow][icol]=receiver_buffer[i];
//DM[is][icol][irow]=receiver_buffer[i];
if(receiver_buffer[i]!=0) ++nNONZERO;
}
Expand Down Expand Up @@ -380,7 +382,8 @@ void Local_Orbital_Charge::cal_dk_gamma_from_2D(void)
{
int jj=GridT.trace_lo[j];
if(jj<0) continue;
ofs_running<<DM[is][ii][jj]<<" ";
//ofs_running<<DM[is][ii][jj]<<" ";
ofs_running << DM[is](ii,jj) << " ";
}
ofs_running<<endl;
}
Expand Down Expand Up @@ -410,10 +413,11 @@ void Local_Orbital_Charge::cal_dk_gamma(void)
// Peize Lin update 2018-07-02
for(int is=0; is<NSPIN; ++is )
{
for (int i=0; i<lgd_now; i++)
/*for (int i=0; i<lgd_now; i++)
{
ZEROS(this->DM[is][i], lgd_now);
}
}*/
this->DM[is].zero_out();
}

// initialize
Expand Down Expand Up @@ -538,7 +542,8 @@ void Local_Orbital_Charge::cal_dk_gamma(void)
const int col_index = col_count*300 + i_col;
const int col_nu = GridT.trace_lo[col_index];
if(col_nu<0) continue;
this->DM[is][row_mu][col_nu] = rho_row_col(i_row,i_col);
//this->DM[is][row_mu][col_nu] = rho_row_col(i_row,i_col);
this->DM[is](row_mu,col_nu) = rho_row_col(i_row,i_col);
}
}
}
Expand All @@ -561,16 +566,20 @@ void Local_Orbital_Charge::cal_dk_gamma(void)

if(idx0>=0)
{
ofs_running<<"DM(0,0)"<<DM[is][idx0][idx0]<<"\t";
//ofs_running<<"DM(0,0)"<<DM[is][idx0][idx0]<<"\t";
ofs_running<<"DM(0,0)"<<DM[is](idx0,idx0)<<"\t";
}
if(idx0>=0 && idx1>=0)
{
ofs_running<<"DM(0,1)"<<DM[is][idx0][idx1]<<endl;
ofs_running<<"DM(1,0)"<<DM[is][idx1][idx0]<<"\t";
//ofs_running<<"DM(0,1)"<<DM[is][idx0][idx1]<<endl;
//ofs_running<<"DM(1,0)"<<DM[is][idx1][idx0]<<"\t";
ofs_running<<"DM(0,1)"<<DM[is](idx0,idx1)<<endl;
ofs_running<<"DM(1,0)"<<DM[is](idx1,idx0)<<"\t";
}
if(idx1>=0)
{
ofs_running<<"DM(1,1)"<<DM[is][idx1][idx1]<<endl;
//ofs_running<<"DM(1,1)"<<DM[is][idx1][idx1]<<endl;
ofs_running<<"DM(1,1)"<<DM[is](idx1,idx1)<<endl;
}
} // end for is
#endif //2015-09-06, xiaohui
Expand Down
3 changes: 2 additions & 1 deletion ABACUS.develop/source/src_lcao/gint_gamma_mull.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,8 @@ void Gint_Gamma::gamma_mulliken(double** mulliken)
{
v1=psi1[iw]+psi1[iw];
int iw2_lo = GridT.trace_lo[start2];
double *DMp = &LOC.DM[is][iw1_lo][iw2_lo];
//double *DMp = &LOC.DM[is][iw1_lo][iw2_lo];
double *DMp = &LOC.DM[is](iw1_lo,iw2_lo);
double *psi2p = psi2;
double *psi2p_end = psi2 + atom2->nw;

Expand Down
24 changes: 20 additions & 4 deletions ABACUS.develop/source/src_lcao/gint_gamma_rho.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -190,9 +190,13 @@ void Gint_Gamma::cal_band_rho(
// if enough cal_flag is nonzero
if(cal_num>ib_length/4)
{
dsymm_(&side, &uplo, &bsize[ia1], &ib_length,
/*dsymm_(&side, &uplo, &bsize[ia1], &ib_length,
&alpha_symm, &LOC.DM[is][iw1_lo][iw1_lo], &GridT.lgd,
&psir_ylm[first_ib][colidx[ia1]], &LD_pool,
&beta, &psir_DM[first_ib][colidx[ia1]], &LD_pool);*/
dsymm_(&side, &uplo, &bsize[ia1], &ib_length,
&alpha_symm, &LOC.DM[is](iw1_lo,iw1_lo), &GridT.lgd,
&psir_ylm[first_ib][colidx[ia1]], &LD_pool,
&beta, &psir_DM[first_ib][colidx[ia1]], &LD_pool);
}
else
Expand All @@ -202,9 +206,13 @@ void Gint_Gamma::cal_band_rho(
{
if(cal_flag[ib][ia1]>0)
{
dsymv_(&uplo, &bsize[ia1],
/*dsymv_(&uplo, &bsize[ia1],
&alpha_symm, &LOC.DM[is][iw1_lo][iw1_lo], &GridT.lgd,
&psir_ylm[ib][colidx[ia1]], &inc,
&beta, &psir_DM[ib][colidx[ia1]], &inc);*/
dsymv_(&uplo, &bsize[ia1],
&alpha_symm, &LOC.DM[is](iw1_lo,iw1_lo), &GridT.lgd,
&psir_ylm[ib][colidx[ia1]], &inc,
&beta, &psir_DM[ib][colidx[ia1]], &inc);
}
}
Expand Down Expand Up @@ -241,9 +249,13 @@ void Gint_Gamma::cal_band_rho(
int iw2_lo=block_iw[ia2];
if(cal_pair_num>ib_length/4)
{
dgemm_(&transa, &transb, &bsize[ia2], &ib_length, &bsize[ia1],
/*dgemm_(&transa, &transb, &bsize[ia2], &ib_length, &bsize[ia1],
&alpha_gemm, &LOC.DM[is][iw1_lo][iw2_lo], &GridT.lgd,
&psir_ylm[first_ib][colidx[ia1]], &LD_pool,
&beta, &psir_DM[first_ib][colidx[ia2]], &LD_pool);*/
dgemm_(&transa, &transb, &bsize[ia2], &ib_length, &bsize[ia1],
&alpha_gemm, &LOC.DM[is](iw1_lo,iw2_lo), &GridT.lgd,
&psir_ylm[first_ib][colidx[ia1]], &LD_pool,
&beta, &psir_DM[first_ib][colidx[ia2]], &LD_pool);
}
else
Expand All @@ -252,9 +264,13 @@ void Gint_Gamma::cal_band_rho(
{
if(cal_flag[ib][ia1]>0 && cal_flag[ib][ia2]>0)
{
dgemv_(&transa, &bsize[ia2], &bsize[ia1],
/*dgemv_(&transa, &bsize[ia2], &bsize[ia1],
&alpha_gemm, &LOC.DM[is][iw1_lo][iw2_lo], &GridT.lgd,
&psir_ylm[ib][colidx[ia1]], &inc,
&beta, &psir_DM[ib][colidx[ia2]], &inc);*/
dgemv_(&transa, &bsize[ia2], &bsize[ia1],
&alpha_gemm, &LOC.DM[is](iw1_lo,iw2_lo), &GridT.lgd,
&psir_ylm[ib][colidx[ia1]], &inc,
&beta, &psir_DM[ib][colidx[ia2]], &inc);
}
}
Expand Down
34 changes: 17 additions & 17 deletions ABACUS.develop/source/src_lcao/local_orbital_charge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,23 +44,23 @@ Local_Orbital_Charge::Local_Orbital_Charge()
Local_Orbital_Charge::~Local_Orbital_Charge()
{
// with gamma point only
if (this->init_DM)
{
for (int is=0; is<NSPIN; is++)
{
delete[] DM[is];
delete[] DM_pool[is];
}
delete[] DM;
delete[] DM_pool;
delete[] sender_2D_index;
delete[] sender_size_process;
delete[] sender_displacement_process;

delete[] receiver_local_index;
delete[] receiver_size_process;
delete[] receiver_displacement_process;
}
if (this->init_DM)
{
/*for (int is=0; is<NSPIN; is++)
{
delete[] DM[is];
//delete[] DM_pool[is];
}*/
delete[] DM;
//delete[] DM_pool;
delete[] sender_2D_index;
delete[] sender_size_process;
delete[] sender_displacement_process;

delete[] receiver_local_index;
delete[] receiver_size_process;
delete[] receiver_displacement_process;
}

// with k points
if (this->init_DM_R)
Expand Down
11 changes: 9 additions & 2 deletions ABACUS.develop/source/src_lcao/local_orbital_charge.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#ifndef LOCAL_ORBITAL_CHARGE
#define LOCAL_ORBITAL_CHARGE

#include "src_global/matrix.h"
#include "src_pw/tools.h"
#include "src_lcao/grid_technique.h"
#include "src_lcao/wfc_dm_2d.h"
Expand Down Expand Up @@ -33,7 +34,11 @@ class Local_Orbital_Charge

// liaochen modify on 2010-3-23
// change its state from private to public
double*** DM;
//double** DM;

// liuyu modify 2021-04-28
// change it to matrix to get rid of DM_pool
matrix *DM;
double** DM_R;

// whether to printout density matrix
Expand Down Expand Up @@ -66,7 +71,9 @@ class Local_Orbital_Charge
// add by yshen on 9/22/2014
// these variables are memory pool for DM series matrixes,
// so that these matrixes will be storaged continuously in the memory.
double **DM_pool;

// liuyu delete 2021-04-28
//double **DM_pool;

// Buffer parameters for tranforming 2D block-cyclic distributed DM matrix
// to grid distributed DM matrix
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,8 @@ Exx_Abfs::Parallel::Communicate::DM::LOC_to_grid(
for( int i1=0; i1!=GridT.lgd; ++i1 )
{
for( int i2=0; i2!=GridT.lgd; ++i2 )
ofs<<LOC.DM[is][i1][i2]<<"\t";
//ofs<<LOC.DM[is][i1][i2]<<"\t";
ofs<<LOC.DM[is](i1,i2)<<"\t";
ofs<<endl;
}
ofs<<endl;
Expand All @@ -200,7 +201,8 @@ Exx_Abfs::Parallel::Communicate::DM::LOC_to_grid(
{
for( int iw2=0; iw2!=nw2; ++iw2 )
{
DM_grid_2D(iw1,iw2) = LOC.DM[is][iwt1_index+iw1][iwt2_index+iw2];
//DM_grid_2D(iw1,iw2) = LOC.DM[is][iwt1_index+iw1][iwt2_index+iw2];
DM_grid_2D(iw1,iw2) = LOC.DM[is](iwt1_index+iw1,iwt2_index+iw2);
}
}
if( DM_grid_2D.absmax() * SPIN_multiple >= threshold )
Expand Down
3 changes: 2 additions & 1 deletion ABACUS.develop/source/src_ri/exx_lcao.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -999,7 +999,8 @@ ofs_mpi.close();
for( size_t iw1=0; iw1!=ucell.atoms[it1].nw; ++iw1 )
{
for( size_t iw2=0; iw2!=ucell.atoms[it2].nw; ++iw2 )
ofs<<LOC.DM[is][ucell.itiaiw2iwt(it1,ia1,iw1)][ucell.itiaiw2iwt(it2, ia2, iw2)]<<"\t";
//ofs<<LOC.DM[is][ucell.itiaiw2iwt(it1,ia1,iw1)][ucell.itiaiw2iwt(it2, ia2, iw2)]<<"\t";
ofs<<LOC.DM[is](ucell.itiaiw2iwt(it1,ia1,iw1), ucell.itiaiw2iwt(it2, ia2, iw2))<<"\t";
ofs<<endl;
}
ofs<<endl;
Expand Down