Skip to content
Merged
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
49 changes: 24 additions & 25 deletions driver/driver_utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,30 +48,27 @@ std::vector<double> interpolate_dielec_func(int option, const std::vector<double
{
int n_basis, n_states, n_spin;

std::string file_abacus = driver_params.input_dir + "pyatb_librpa_df/velocity_matrix";
// std::string file_aims = driver_params.input_dir + "moment_KS_spin_01_kpt_000001.dat";
std::string file_aims = driver_params.input_dir + "mommat_ks_kpt_000001.dat";
std::string file_abacus = driver_params.input_dir + "velocity_matrix";
std::string file_aims = driver_params.input_dir + "moment_KS_spin_01_kpt_000001.dat";
ifstream infile_abacus;
ifstream infile_aims;
infile_abacus.open(file_abacus);
infile_aims.open(file_aims);
if (infile_abacus.is_open())
{
read_scf_occ_eigenvalues(driver_params.input_dir + "pyatb_librpa_df/band_out",
pyatb_meanfield);
read_eigenvector(driver_params.input_dir + "pyatb_librpa_df/", pyatb_meanfield);
// read_scf_occ_eigenvalues(driver_params.input_dir + "pyatb_librpa_df/band_out",
// pyatb_meanfield);
// read_eigenvector(driver_params.input_dir + "pyatb_librpa_df/", pyatb_meanfield);

read_velocity(file_abacus, pyatb_meanfield);
int flag;
std::vector<Vector3_Order<double>> kfrac_band =
read_band_kpath_info(driver_params.input_dir + "pyatb_librpa_df/k_path_info",
n_basis, n_states, n_spin, flag);
if (Params::use_soc)
{
assert(n_basis % 2 == 0 && "Error: nbasis is not even when SOC!");
n_basis = n_basis / 2;
}
df_headwing.set(pyatb_meanfield, kfrac_band, frequencies_target, n_basis, n_states,
read_velocity(file_abacus, meanfield);
n_basis = meanfield.get_n_aos();
n_states = meanfield.get_n_bands();
n_spin = meanfield.get_n_spins();
// int flag;
// std::vector<Vector3_Order<double>> kfrac_band =
// read_band_kpath_info(driver_params.input_dir + "pyatb_librpa_df/k_path_info",
// n_basis, n_states, n_spin, flag);
df_headwing.set(meanfield, kfrac_list, frequencies_target, n_basis, n_states,
n_spin);
}
else if (infile_aims.is_open())
Expand Down Expand Up @@ -104,21 +101,23 @@ std::vector<double> interpolate_dielec_func(int option, const std::vector<double
{
int n_basis, n_states, n_spin;

std::string file_abacus = driver_params.input_dir + "pyatb_librpa_df/velocity_matrix";
// std::string file_aims = driver_params.input_dir + "moment_KS_spin_01_kpt_000001.dat";
std::string file_aims = driver_params.input_dir + "mommat_ks_kpt_000001.dat";
std::string file_abacus = driver_params.input_dir + "velocity_matrix";
std::string file_aims = driver_params.input_dir + "moment_KS_spin_01_kpt_000001.dat";
ifstream infile_abacus;
ifstream infile_aims;
infile_abacus.open(file_abacus);
infile_aims.open(file_aims);
if (infile_abacus.is_open())
{
read_velocity(file_abacus, meanfield);
int flag;
std::vector<Vector3_Order<double>> kfrac_band =
read_band_kpath_info(driver_params.input_dir + "pyatb_librpa_df/k_path_info",
n_basis, n_states, n_spin, flag);
df_headwing.set(meanfield, kfrac_band, frequencies_target, n_basis, n_states,
n_basis = meanfield.get_n_aos();
n_states = meanfield.get_n_bands();
n_spin = meanfield.get_n_spins();
// int flag;
// std::vector<Vector3_Order<double>> kfrac_band =
// read_band_kpath_info(driver_params.input_dir + "pyatb_librpa_df/k_path_info",
// n_basis, n_states, n_spin, flag);
df_headwing.set(meanfield, kfrac_list, frequencies_target, n_basis, n_states,
n_spin);
}
else if (infile_aims.is_open())
Expand Down
4 changes: 4 additions & 0 deletions driver/inputfile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,10 @@ void parse_inputfile_to_params(const std::string &fn)
parser.parse_bool("replace_w_head", Params::replace_w_head, true, flag);
parser.parse_int("option_dielect_func", Params::option_dielect_func, 2, flag);

parser.parse_bool("band_continue", Params::band_continue, false, flag);

parser.parse_int("output_Wc_Rf_mat", Params::output_Wc_Rf_mat, false, flag);
parser.parse_bool("output_energy_qp", Params::output_energy_qp, false, flag);
parser.parse_bool("output_gw_sigc_mat", Params::output_gw_sigc_mat, false, flag);
parser.parse_bool("output_gw_sigc_mat_rt", Params::output_gw_sigc_mat_rt, false, flag);
parser.parse_bool("output_gw_sigc_mat_rf", Params::output_gw_sigc_mat_rf, false, flag);
Expand Down
31 changes: 31 additions & 0 deletions driver/task_gw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,37 @@ void task_g0w0(std::map<Vector3_Order<double>, ComplexMatrix> &sinvS)
printf("CBM: k-point %4d: (%.5f, %.5f, %.5f) \n", ik_cond + 1, k_cond.x, k_cond.y,
k_cond.z);
lib_printf("Bandgap(eV): %12.7f \n", bandgap);

if (Params::output_energy_qp) {
std::ofstream ofs("energy_qp");
ofs << " state occ_num e_gs(Ha) e_qp(Ha)"<<std::endl;
ofs << banner << std::endl;
for (int i_spin = 0; i_spin < meanfield.get_n_spins(); i_spin++)
{
for (int i_kpoint = 0; i_kpoint < meanfield.get_n_kpoints(); i_kpoint++)
{
const auto &k = kfrac_list[i_kpoint];
ofs << " K_point " << i_kpoint + 1 << " :" << std::setw(10) << std::setprecision(7)
<< k.x << std::setw(10) << k.y << std::setw(10) << k.z << std::setw(10)
<<" Spin " << i_spin + 1 << std::endl;
ofs << banner << std::endl;
for (int i_state = 0; i_state < meanfield.get_n_bands(); i_state++)
{
const auto &occ_state =
meanfield.get_weight()[i_spin](i_kpoint, i_state) * meanfield.get_n_kpoints();
const auto &eks_state =
meanfield.get_eigenvals()[i_spin](i_kpoint, i_state);
const auto &eqp = e_qp_all[i_spin][i_kpoint][i_state];
ofs << std::setw(7) << i_state + 1 << std::setw(10) << std::setprecision(5)
<< occ_state << std::setw(18) << std::setprecision(10) << eks_state
<< std::setw(18) << std::setprecision(10) << eqp << std::endl;
}
ofs << banner << std::endl;
ofs << std::endl;
}
}
ofs.close();
}
}
Profiler::stop("g0w0_solve_qpe");
}
Expand Down
Loading