3
0
mirror of https://github.com/triqs/dft_tools synced 2024-11-01 03:33:50 +01:00
dft_tools/triqs/gf/domains/matsubara.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

65 lines
2.3 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_DOMAIN_MATSUBARA_H
#define TRIQS_GF_DOMAIN_MATSUBARA_H
#include "../tools.hpp"
namespace triqs { namespace gfs {
/// The domain
template<bool IsComplex>
struct matsubara_domain {
typedef typename mpl::if_c<IsComplex, std::complex<double>, double>::type point_t;
double beta;
statistic_enum statistic;
matsubara_domain (double Beta=1, statistic_enum s = Fermion): beta(Beta), statistic(s){}
bool operator == (matsubara_domain const & D) const { return ((std::abs(beta - D.beta)<1.e-15) && (statistic == D.statistic));}
/// Write into HDF5
friend void h5_write (h5::group fg, std::string subgroup_name, matsubara_domain const & d) {
h5::group gr = fg.create_group(subgroup_name);
h5_write(gr,"beta",d.beta);
h5_write(gr,"statistic",(d.statistic==Fermion ? "F" : "B"));
}
/// Read from HDF5
friend void h5_read (h5::group fg, std::string subgroup_name, matsubara_domain & d){
h5::group gr = fg.open_group(subgroup_name);
double beta; std::string statistic;
h5_read(gr,"beta",beta);
h5_read(gr,"statistic",statistic);
d = matsubara_domain(beta,(statistic=="F" ? Fermion : Boson));
}
// BOOST Serialization
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
ar & boost::serialization::make_nvp("beta",beta);
ar & boost::serialization::make_nvp("statistic",statistic);
}
};
}}
#endif