3
0
mirror of https://github.com/triqs/dft_tools synced 2024-11-01 03:33:50 +01:00
dft_tools/triqs/gf/domains/discrete.hpp
Olivier Parcollet 40f8cb5c18 [API BREAK] gf : rename namespace gf->gfs
- necessary otherwise the class gf and the namespace have
the same name, leading to some confusion, and need to qualify
some functions (specially on gcc).
Same naming conventions as arrays.
2013-07-28 21:11:28 +02:00

73 lines
2.4 KiB
C++

/*******************************************************************************
*
* TRIQS: a Toolbox for Research in Interacting Quantum Systems
*
* Copyright (C) 2012 by M. Ferrero, O. Parcollet
*
* TRIQS is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* TRIQS. If not, see <http://www.gnu.org/licenses/>.
*
******************************************************************************/
#ifndef TRIQS_GF_DISCRETE_DOMAIN_H
#define TRIQS_GF_DISCRETE_DOMAIN_H
#include "../tools.hpp"
namespace triqs { namespace gfs {
/// The domain
class discrete_domain {
size_t Nmax;
std::vector<std::string> _names;// name of the points (e.g. for block)
public:
typedef long point_t;
size_t size() const { return Nmax;};
discrete_domain (size_t Nmax_=1) : Nmax(Nmax_) {
for (size_t i =0; i<Nmax; ++i) { std::stringstream fs; fs<<i; _names.push_back(fs.str());}
}
discrete_domain (std::vector<std::string> && Names) : Nmax(Names.size()), _names(Names) { }
discrete_domain (std::vector<std::string> const & Names) : Nmax(Names.size()), _names(Names) { }
std::vector<std::string> const & names() const { return _names;}
bool operator == (discrete_domain const & D) const { return (Nmax == D.Nmax);}
/// Write into HDF5
friend void h5_write (h5::group fg, std::string subgroup_name, discrete_domain const & d) {
h5::group gr = fg.create_group(subgroup_name);
h5_write(gr,"n_max",d.Nmax);
}
/// Read from HDF5
friend void h5_read (h5::group fg, std::string subgroup_name, discrete_domain & d){
h5::group gr = fg.open_group(subgroup_name);
long n;
h5_read(gr,"n_max",n);
d = discrete_domain(n);
}
// BOOST Serialization
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
ar & boost::serialization::make_nvp("n_max",Nmax);
ar & boost::serialization::make_nvp("names",_names);
}
};
}}
#endif