Skip to content

Commit

Permalink
Merge branch 'pseudopotential_set_interface' into 'master'
Browse files Browse the repository at this point in the history
Pseudopotential set in species_set

See merge request npneq/inq!1102
  • Loading branch information
xavierandrade committed Jul 7, 2024
2 parents 4d1de68 + 4b18faf commit f00fd4b
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 39 deletions.
2 changes: 1 addition & 1 deletion external_libs/pseudopod
Submodule pseudopod updated from 9b658a to 3c8d91
15 changes: 6 additions & 9 deletions src/hamiltonian/atomic_potential.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ namespace hamiltonian {
template <class SpeciesList>
atomic_potential(SpeciesList const & species_list, double gcutoff, options::electrons const & conf = {}):
sep_(0.625), //this is the default from octopus
pseudo_set_(conf.pseudopotentials_value()),
pseudo_set_(species_list.pseudopotentials()),
double_grid_(conf.double_grid_value()),
fourier_pseudo_(conf.fourier_pseudo_value())
{
Expand Down Expand Up @@ -339,19 +339,16 @@ TEST_CASE(INQ_TEST_FILE, INQ_TEST_TAG){
parallel::communicator comm{boost::mpi3::environment::get_self_instance()};

SECTION("Non-existing element"){
std::vector<species> el_list({"P", "X"});

CHECK_THROWS(hamiltonian::atomic_potential(el_list, gcut));
}
ionic::species_set el_list;
el_list.insert("P");
el_list.insert("X");

SECTION("Duplicated element"){
std::vector<species> el_list({"N", "N"});
CHECK_THROWS(hamiltonian::atomic_potential(el_list, gcut));
}

SECTION("Empty list"){
std::vector<species> el_list;
ionic::species_set el_list;

hamiltonian::atomic_potential pot(el_list, gcut);

CHECK(pot.num_species() == 0);
Expand Down
17 changes: 16 additions & 1 deletion src/ionic/species_set.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
// file, You can obtain one at https://mozilla.org/MPL/2.0/.

#include <ionic/species.hpp>
#include <pseudopod/set_id.hpp>

namespace inq {
namespace ionic {
Expand All @@ -19,9 +20,23 @@ class species_set {
using container_type = std::unordered_map<std::string, ionic::species>;

container_type list_;
pseudo::set_id pseudo_set_;

public:


species_set(pseudo::set_id const & pseudos = pseudo::set_id::pseudodojo_pbe()):
pseudo_set_(pseudos)
{
}

auto & pseudopotentials() const {
return pseudo_set_;
}

auto & pseudopotentials() {
return pseudo_set_;
}

auto size() const {
return (long) list_.size();
}
Expand Down
28 changes: 2 additions & 26 deletions src/options/electrons.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class electrons {
std::optional<double> density_factor_;
std::optional<bool> spherical_grid_;
std::optional<bool> fourier_pseudo_;
std::optional<pseudo::set> pseudo_set_;

public:

Expand Down Expand Up @@ -148,16 +147,6 @@ class electrons {
return fourier_pseudo_.value_or(false);
}

auto pseudopotentials(pseudo::set && set){
electrons conf = *this;
conf.pseudo_set_.emplace(std::forward<pseudo::set>(set));
return conf;
}

auto pseudopotentials_value() const{
return pseudo_set_.value_or(pseudo::set::pseudodojo_pbe());
}

void save(parallel::communicator & comm, std::string const & dirname) const {
auto error_message = "INQ error: Cannot save the options::electrons to directory '" + dirname + "'.";

Expand All @@ -171,7 +160,6 @@ class electrons {
utils::save_optional(comm, dirname + "/spherical_grid", spherical_grid_, error_message);
utils::save_optional(comm, dirname + "/fourier_pseudo", fourier_pseudo_, error_message);
utils::save_optional(comm, dirname + "/spin", spin_, error_message);
if(pseudo_set_.has_value()) utils::save_value(comm, dirname + "/pseudo_set", pseudo_set_->path(), error_message);

}

Expand All @@ -187,17 +175,7 @@ class electrons {
utils::load_optional(dirname + "/spherical_grid", opts.spherical_grid_);
utils::load_optional(dirname + "/fourier_pseudo", opts.fourier_pseudo_);
utils::load_optional(dirname + "/spin", opts.spin_);

//PSEUDO_SET
{
auto file = std::ifstream(dirname + "/pseudo_set");
if(file){
std::string readval;
file >> readval;
opts.pseudo_set_.emplace(readval);
}
}


return opts;
}

Expand Down Expand Up @@ -264,13 +242,12 @@ TEST_CASE(INQ_TEST_FILE, INQ_TEST_TAG) {

parallel::communicator comm{boost::mpi3::environment::get_world_instance()};

auto conf = options::electrons{}.spacing(23.1_b).extra_states(666).spin_non_collinear().pseudopotentials(pseudo::set::ccecp());
auto conf = options::electrons{}.spacing(23.1_b).extra_states(666).spin_non_collinear();

CHECK(conf.extra_states_val() == 666);
CHECK(conf.spacing_value() == 23.1_a);
CHECK(conf.fourier_pseudo_value() == false);
CHECK(conf.spin_val() == states::spin_config::NON_COLLINEAR);
CHECK(conf.pseudopotentials_value().path() == "pseudopotentials/pseudopotentiallibrary.org/ccecp/");

conf.save(comm, "options_electrons_save");
auto read_conf = options::electrons::load("options_electrons_save");
Expand All @@ -279,7 +256,6 @@ TEST_CASE(INQ_TEST_FILE, INQ_TEST_TAG) {
CHECK(read_conf.spacing_value() == 23.1_a);
CHECK(read_conf.fourier_pseudo_value() == false);
CHECK(read_conf.spin_val() == states::spin_config::NON_COLLINEAR);
CHECK(read_conf.pseudopotentials_value().path() == "pseudopotentials/pseudopotentiallibrary.org/ccecp/");

}
#endif
4 changes: 2 additions & 2 deletions tests/pseudos.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ int main(int argc, char ** argv){

{
systems::ions ions(cell);

ions.species_list().pseudopotentials() = pseudo::set_id::ccecp();
ions.insert(ionic::species("C"), {0.0_b, 0.0_b, 0.0_b});

systems::electrons electrons(ions, options::electrons{}.pseudopotentials(pseudo::set::ccecp()).cutoff(25.0_Ha).extra_states(4).temperature(300.0_K));
systems::electrons electrons(ions, options::electrons{}.cutoff(25.0_Ha).extra_states(4).temperature(300.0_K));

ground_state::initial_guess(ions, electrons);

Expand Down

0 comments on commit f00fd4b

Please sign in to comment.