#define TRIQS_ARRAYS_ENFORCE_BOUNDCHECK #include #include namespace tql= triqs::clef; using namespace triqs::gfs; int main() { try { double beta =1.; double tmin=0.; double tmax=1.0; int n_re_time=100; int n_im_time=100; double wmin=0.; double wmax=1.0; int n_re_freq=100; int n_im_freq=100; auto G_w= gf{{wmin, wmax, n_re_freq}}; auto G_t_tau= gf, scalar_valued>({ gf_mesh(tmin, tmax, n_re_time), gf_mesh(beta, Fermion, n_im_time)} ); auto G_w_wn = gf, scalar_valued>( {gf_mesh(wmin, wmax, n_re_freq), gf_mesh(beta, Fermion, n_im_freq)}); auto G_w_tau =gf, scalar_valued>( {gf_mesh(wmin, wmax, n_re_freq), gf_mesh(beta, Fermion, n_im_time,full_bins)}); //auto g_tau = slice_mesh1(G_w_tau(),1); //auto g_wn = G_w_wn_curry0[1]; //std::cout << G_t_tau_N (0.1,0.2) << std::endl; auto G_w_wn_view = G_w_wn(); auto G_w_wn_sl0_a = partial_eval<0>(G_w_wn(), 8); static_assert(std::is_same::type, const gf_mesh>::value, "oops"); //auto G_w_wn_curry0_a = curry0(G_w_wn); //auto G_w_wn_sl0_a = slice_mesh0(G_w_wn(), 8); triqs::clef::placeholder<0> w_; triqs::clef::placeholder<1> wn_; triqs::clef::placeholder<2> tau_; G_w_wn(w_,wn_)<<1/(wn_-1)/( pow(w_,3) ); G_w_tau(w_,tau_)<< exp( -2*tau_ ) / (w_*w_ + 1 ); int index = n_re_freq/3; double tau = std::get<1>(G_w_tau.mesh().components())[index]; //identical functions G_w(w_) << exp( -2*tau ) / (w_*w_ + 1 ); //the singularity must be removed as it is inexistent in re_im_time, to give the same TF. G_w.singularity()(0)=triqs::arrays::matrix{{0}}; G_w.singularity()(1)=triqs::arrays::matrix{{0}}; G_w.singularity()(2)=triqs::arrays::matrix{{0}}; //auto G_w2 = slice_mesh1(G_w_tau(), index); /*auto G_w2 = slice_mesh_imtime(G_w_tau, index); for(auto& w:G_w.mesh()) if ( std::abs(G_w[w]-G_w2[w]) > precision) TRIQS_RUNTIME_ERROR<<" fourier_slice error : w="<< w <<" ,G_w="<< G_w[w]<<" ,G_w2="<< G_w2[w] <<"\n"; */ //test of the interpolation std::cout << G_t_tau(0.789,0.123) << std::endl; std::cout << "G_w_wn( 0.789,3) "<(G_w_wn); static_assert(std::is_same::type, const gf_mesh>::value, "oops"); static_assert(std::is_same::type, const gf_mesh>::value, "oops"); auto G_w_wn_curry1 = curry<1>(G_w_wn); auto G_w_wn_view2 = G_w_wn(); std::cout << " curry "< precision) TRIQS_RUNTIME_ERROR<<" fourier_slice_re_time error : t="<< t <<" ,G_t="<< G_t[t] <<" ,G_t2="<< G_t2[t] <<"\n"; */ } TRIQS_CATCH_AND_ABORT; }