Skip to content

Commit

Permalink
New tag BORNSYM to swith on/off the symmetrization of Born effective …
Browse files Browse the repository at this point in the history
…charges
  • Loading branch information
ttadano committed Jan 28, 2018
1 parent 352f69e commit 8f9e82b
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 6 deletions.
10 changes: 7 additions & 3 deletions anphon/dynamical.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ using namespace PHON_NS;
Dynamical::Dynamical(PHON *phon): Pointers(phon)
{
index_bconnect = nullptr;
symmetrize_borncharge = 0;
}

Dynamical::~Dynamical()
Expand Down Expand Up @@ -121,7 +122,7 @@ void Dynamical::setup_dynamical(std::string mode)
if (nonanalytic) {
memory->allocate(borncharge, system->natmin, 3, 3);

if (mympi->my_rank == 0) load_born();
if (mympi->my_rank == 0) load_born(symmetrize_borncharge);

MPI_Bcast(&dielec[0][0], 9, MPI_DOUBLE, 0, MPI_COMM_WORLD);
MPI_Bcast(&borncharge[0][0][0], 9 * system->natmin, MPI_DOUBLE, 0, MPI_COMM_WORLD);
Expand Down Expand Up @@ -817,7 +818,7 @@ void Dynamical::modify_eigenvectors()
}


void Dynamical::load_born()
void Dynamical::load_born(const unsigned int flag_symmborn)
{
// Read the dielectric tensor and born effective charges from file_born

Expand Down Expand Up @@ -892,7 +893,7 @@ void Dynamical::load_born()
if (res > eps10) {
std::cout << std::endl;
std::cout << " WARNING: Born effective charges do not satisfy the acoustic sum rule." << std::endl;
std::cout << " The born effective charges are modified to follow the ASR." << std::endl;
std::cout << " The born effective charges are modified to satisfy the ASR." << std::endl;

for (i = 0; i < system->natmin; ++i) {
for (j = 0; j < 3; ++j) {
Expand All @@ -903,6 +904,8 @@ void Dynamical::load_born()
}
}

if (flag_symmborn) {

// Symmetrize Born effective charges. Necessary to avoid the violation of ASR
// particularly for NONANALYTIC=3 (Ewald summation).

Expand Down Expand Up @@ -991,6 +994,7 @@ void Dynamical::load_born()
}
}
}
}
std::cout << std::scientific;
}

Expand Down
3 changes: 2 additions & 1 deletion anphon/dynamical.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ namespace PHON_NS
unsigned int neval;
bool eigenvectors;
bool print_eigenvectors;
unsigned int symmetrize_borncharge;
unsigned int nonanalytic;
bool participation_ratio;
unsigned int band_connection;
Expand Down Expand Up @@ -98,7 +99,7 @@ namespace PHON_NS

private:

void load_born();
void load_born(const unsigned int);

void prepare_mindist_list(std::vector<int> **);
void calc_atomic_participation_ratio(std::complex<double> *, double *);
Expand Down
8 changes: 6 additions & 2 deletions anphon/parsephon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ void Input::parse_general_vars()
bool selenergy_offdiagonal;
bool update_fc2;
bool classical;
unsigned int bornsym;
unsigned int band_connection;

struct stat st;
Expand All @@ -129,7 +130,7 @@ void Input::parse_general_vars()
std::string str_tmp;
std::string str_allowed_list = "PREFIX MODE NSYM TOLERANCE PRINTSYM FCSXML FC2XML TMIN TMAX DT \
NBANDS NONANALYTIC BORNINFO NA_SIGMA ISMEAR EPSILON EMIN EMAX DELTA_E \
RESTART TREVSYM NKD KD MASS TRISYM PREC_EWALD CLASSICAL BCONNECT";
RESTART TREVSYM NKD KD MASS TRISYM PREC_EWALD CLASSICAL BCONNECT BORNSYM";
std::string str_no_defaults = "PREFIX MODE FCSXML NKD KD MASS";
std::vector<std::string> no_defaults;
std::vector<std::string> kdname_v, masskd_v;
Expand Down Expand Up @@ -209,6 +210,7 @@ void Input::parse_general_vars()
use_triplet_symmetry = true;
classical = false;
band_connection = 0;
bornsym = 0;

prec_ewald = 1.0e-12;

Expand Down Expand Up @@ -257,8 +259,9 @@ void Input::parse_general_vars()
assign_val(classical, "CLASSICAL", general_var_dict);
assign_val(band_connection, "BCONNECT", general_var_dict);
assign_val(use_triplet_symmetry, "TRISYM", general_var_dict);
assign_val(bornsym, "BORNSYM", general_var_dict);

if (band_connection < 0 || band_connection > 2) {
if (band_connection > 2) {
error->exit("parse_general_vars", "BCONNECT-tag can take 0, 1, or 2.");
}

Expand Down Expand Up @@ -318,6 +321,7 @@ void Input::parse_general_vars()

dynamical->nonanalytic = nonanalytic;
dynamical->na_sigma = na_sigma;
dynamical->symmetrize_borncharge = bornsym;
writes->nbands = nbands;
dynamical->file_born = borninfo;
dynamical->band_connection = band_connection;
Expand Down

0 comments on commit 8f9e82b

Please sign in to comment.