atoms.h Source File

LibRPA: atoms.h Source File
LibRPA
atoms.h
Go to the documentation of this file.
1 
6 #ifndef ATOMS_H
7 #define ATOMS_H
8 
9 #include <set>
10 #include <vector>
11 #include <utility>
12 #include <map>
13 /* #include "vector3.h" */
14 /* #include "matrix3.h" */
15 
16 using std::vector;
17 using std::map;
18 using std::pair;
19 using std::size_t;
20 
22 typedef size_t atom_t;
23 
25 typedef pair<atom_t, atom_t> atpair_t;
26 
28 template <typename T>
30 {
31  typedef T non_t;
33  typedef map<atom_t, T> single_t;
35  typedef map<atpair_t, T> pair_t;
37  typedef map<pair<atom_t, atpair_t>, T> tri_t;
39  typedef map<atom_t, map<atom_t, T>> pair_t_old;
41  typedef map<atom_t, map<atom_t, map<atom_t, T>>> tri_t_old;
42 };
43 
45 template <typename T>
46 vector<atom_t> get_atom(const map<atom_t, T> &adata) // work
47 /* vector<atom_t> get_atom(const typename atom_mapping<T>::single_t &adata) // not work */
48 {
49  vector<atom_t> alist;
50  for (const auto &a1: adata)
51  alist.push_back(a1.first);
52  return alist;
53 }
54 
56 template <typename T>
57 vector<atpair_t> get_atom_pair(const map<atom_t, map<atom_t, T>> &apdata) // work
58 /* vector<pair<atom_t, atom_t>> get_atom_pair(const typename atom_mapping<T>::pair_t &apdata) // not work */
59 {
60  vector<atpair_t> apair;
61  for (const auto &a1: apdata)
62  for (const auto &a2: a1.second)
63  apair.push_back({a1.first, a2.first});
64  return apair;
65 }
66 
68 template <typename T>
69 vector<atpair_t> get_atom_pair(const map<atpair_t, T> &apdata) // work
70 /* vector<pair<atom_t, atom_t>> get_atom_pair(const typename atom_mapping<T>::pair_t &apdata) // not work */
71 // FIXME: check this: https://en.cppreference.com/w/cpp/language/template_argument_deduction
72 {
73  vector<atpair_t> apair;
74  for (const auto &ap: apdata)
75  apair.push_back(ap.first);
76  return apair;
77 }
78 
79 template <typename T>
80 vector<atpair_t> generate_atom_pair_from_nat(const T &nat, bool ordered_pair = false)
81 {
82  vector<atpair_t> apair;
83  for(int i=0; i!=nat; i++)
84  for(int j = ordered_pair? 0 : i; j!=nat; j++)
85  apair.push_back({i,j});
86  return apair;
87 }
88 
89 template <typename TA1, typename TA2>
90 std::pair<std::set<TA1>, std::set<TA2>> convert_IJset_to_Iset_Jset(std::set<std::pair<TA1, TA2>> IJset)
91 {
92  std::set<TA1> Iset, Jset;
93  for (const auto& IJ: IJset)
94  {
95  Iset.insert(IJ.first);
96  Jset.insert(IJ.second);
97  }
98  return {Iset, Jset};
99 }
100 
102 
107 class Atoms
108 {
109  private:
111  /* size_t n_ineq; */
113  /* Matrix3 latt; */
114  /* Matrix3 G; */
115  size_t n_atoms;
117  /* vector<size_t> n_atoms_per_ineq; */
119  /* vector<Vector3<double>> coords; */
121  /* vector<Vector3<double>> coords_ineq; */
123  /* vector<map<atom_t, atom_t>> imap_at2ineq; */
124  public:
125  /* Matrix3 & get_lattice_vectors() { return latt; } */
126  /* const Matrix3 & get_lattice_vectors() const { return latt; } */
127  /* const size_t & get_n_atoms() const { return n_atoms; } */
128 };
129 
130 #endif // !ATOMS_H
vector< atpair_t > get_atom_pair(const map< atom_t, map< atom_t, T >> &apdata)
get atom pairs from a atom_mapping::pair_t object (old style)
Definition: atoms.h:57
pair< atom_t, atom_t > atpair_t
atom-pair type. NOTE: may turn into a class?
Definition: atoms.h:25
vector< atom_t > get_atom(const map< atom_t, T > &adata)
get atom indcies from a atom_mapping::single_t object (old style)
Definition: atoms.h:46
size_t atom_t
type of atom indices
Definition: atoms.h:22
Object to handle the atomic structure.
Definition: atoms.h:108
mapping from atom entries to data
Definition: atoms.h:30
map< atom_t, map< atom_t, map< atom_t, T > > > tri_t_old
mapping between tri-atom group and data. Nested map, old style
Definition: atoms.h:41
map< pair< atom_t, atpair_t >, T > tri_t
mapping between tri-atom group and data
Definition: atoms.h:37
map< atom_t, map< atom_t, T > > pair_t_old
mapping between atom pair and data. Nested map, old style
Definition: atoms.h:39
map< atpair_t, T > pair_t
mapping between atom pair and data
Definition: atoms.h:35
map< atom_t, T > single_t
mapping between single atom and data
Definition: atoms.h:33