mirror of
https://github.com/triqs/dft_tools
synced 2024-11-01 03:33:50 +01:00
40f8cb5c18
- 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.
65 lines
2.3 KiB
C++
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
|
|
|