Skip to content

Commit

Permalink
Merge pull request #715 from electronic-structure/fix-static-lto-build
Browse files Browse the repository at this point in the history
fix compilation error for static library when lto is enabled
  • Loading branch information
toxa81 authored Jan 7, 2022
2 parents 591a990 + 537edbf commit 8887f42
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 117 deletions.
1 change: 0 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ set(_SOURSES
"k_point/generate_spinor_wave_functions.cpp"
"k_point/k_point.cpp"
"k_point/k_point_set.cpp"
"k_point/generate_gklo_basis.cpp"
"k_point/test_fv_states.cpp"
"function3d/field4d.cpp"
"radial/radial_integrals.cpp"
Expand Down
116 changes: 0 additions & 116 deletions src/k_point/generate_gklo_basis.cpp

This file was deleted.

83 changes: 83 additions & 0 deletions src/k_point/k_point.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1133,6 +1133,89 @@ K_point<T>::compute_gradient_wave_functions(Wave_functions<T>& phi, const int st
}
}

template <typename T>
void
K_point<T>::generate_gklo_basis()
{
/* find local number of row G+k vectors */
splindex<splindex_t::block_cyclic> spl_ngk_row(num_gkvec(), num_ranks_row_, rank_row_, ctx_.cyclic_block_size());
num_gkvec_row_ = spl_ngk_row.local_size();

igk_row_.resize(num_gkvec_row_);
for (int i = 0; i < num_gkvec_row_; i++) {
igk_row_[i] = spl_ngk_row[i];
}

/* find local number of column G+k vectors */
splindex<splindex_t::block_cyclic> spl_ngk_col(num_gkvec(), num_ranks_col_, rank_col_, ctx_.cyclic_block_size());
num_gkvec_col_ = spl_ngk_col.local_size();

igk_col_.resize(num_gkvec_col_);
for (int i = 0; i < num_gkvec_col_; i++) {
igk_col_[i] = spl_ngk_col[i];
}

/* mapping between local and global G+k vecotor indices */
igk_loc_.resize(num_gkvec_loc());
for (int i = 0; i < num_gkvec_loc(); i++) {
igk_loc_[i] = gkvec().offset() + i;
}

if (ctx_.full_potential()) {
splindex<splindex_t::block_cyclic> spl_nlo_row(num_gkvec() + unit_cell_.mt_lo_basis_size(), num_ranks_row_,
rank_row_, ctx_.cyclic_block_size());
splindex<splindex_t::block_cyclic> spl_nlo_col(num_gkvec() + unit_cell_.mt_lo_basis_size(), num_ranks_col_,
rank_col_, ctx_.cyclic_block_size());

lo_basis_descriptor lo_desc;

int idx{0};
/* local orbital basis functions */
for (int ia = 0; ia < unit_cell_.num_atoms(); ia++) {
auto& atom = unit_cell_.atom(ia);
auto& type = atom.type();

int lo_index_offset = type.mt_aw_basis_size();

for (int j = 0; j < type.mt_lo_basis_size(); j++) {
int l = type.indexb(lo_index_offset + j).l;
int lm = type.indexb(lo_index_offset + j).lm;
int order = type.indexb(lo_index_offset + j).order;
int idxrf = type.indexb(lo_index_offset + j).idxrf;
lo_desc.ia = static_cast<uint16_t>(ia);
lo_desc.l = static_cast<uint8_t>(l);
lo_desc.lm = static_cast<uint16_t>(lm);
lo_desc.order = static_cast<uint8_t>(order);
lo_desc.idxrf = static_cast<uint8_t>(idxrf);

if (spl_nlo_row.local_rank(num_gkvec() + idx) == rank_row_) {
lo_basis_descriptors_row_.push_back(lo_desc);
}
if (spl_nlo_col.local_rank(num_gkvec() + idx) == rank_col_) {
lo_basis_descriptors_col_.push_back(lo_desc);
}

idx++;
}
}
assert(idx == unit_cell_.mt_lo_basis_size());

atom_lo_cols_.clear();
atom_lo_cols_.resize(unit_cell_.num_atoms());
for (int i = 0; i < num_lo_col(); i++) {
int ia = lo_basis_descriptor_col(i).ia;
atom_lo_cols_[ia].push_back(i);
}

atom_lo_rows_.clear();
atom_lo_rows_.resize(unit_cell_.num_atoms());
for (int i = 0; i < num_lo_row(); i++) {
int ia = lo_basis_descriptor_row(i).ia;
atom_lo_rows_[ia].push_back(i);
}
}
}

template class K_point<double>;
#ifdef USE_FP32
template class K_point<float>;
Expand Down

0 comments on commit 8887f42

Please sign in to comment.