3
0
mirror of https://github.com/triqs/dft_tools synced 2024-12-27 06:43:40 +01:00
dft_tools/test/triqs/gfs/test_gf_triqs.cpp
2014-07-02 22:56:06 +02:00

77 lines
1.6 KiB
C++

#define TRIQS_ARRAYS_ENFORCE_BOUNDCHECK
#include <triqs/gfs.hpp>
using namespace triqs::gfs;
using namespace triqs::arrays;
#define TEST(X) std::cout << BOOST_PP_STRINGIZE((X)) << " ---> "<< (X) <<std::endl<<std::endl;
#include <triqs/gfs/local/fourier_matsubara.hpp>
#include<fstream>
#include <stdexcept>
#define TEST(X) std::cout << BOOST_PP_STRINGIZE((X)) << " ---> "<< (X) <<std::endl<<std::endl;
void print_to_file(std::string const s, gf<imtime> const & gt){
std::ofstream mfile(s);
if(mfile.is_open()){
for(int i=0;i<gt.mesh().size();i++){
mfile << gt.mesh().index_to_point(i) << "\t" << gt.data()(i,0,0) << std::endl;
}
mfile.close();
}
else{
throw std::runtime_error("Could not print to file");
}
}
void test_0(){
try {
int Ntau = 10001;
double beta =1;
/* ---------- construct a Green's function ---------*/
auto G = gf<imfreq> {{beta, Fermion, 100}, {1,1}};
triqs::clef::placeholder<0> om_;
G(om_) << 1./(om_ - 2.1);
/* ---------- Fourier transform ---------------------*/
auto Gt = gf<imtime> {{beta, Fermion, Ntau, full_bins}, {1,1}};
Gt() = inverse_fourier(G);
TEST(Gt(0.0));
TEST(Gt.data());
TEST(Gt.mesh().index_to_point(0));
TEST(Gt.mesh().index_to_point(1));
}
catch(std::exception const & e) { std::cout << e.what()<< std::endl;}
}
void test_1(){
try {
double beta=10;
/* ----- Fourier ----- */
auto Gt = gf<imtime> {{beta, Fermion, 201, full_bins}, {1,1}};
auto Gw = gf<imfreq> {{beta, Fermion, 100}, {1,1}};
Gw.singularity()(1) = 1;
Gt() = inverse_fourier(Gw);
}
catch(std::exception const & e) { std::cout << e.what()<< std::endl;}
}
int main() {
test_0();
test_1();
}