mirror of
https://github.com/triqs/dft_tools
synced 2024-12-25 05:43:40 +01:00
gf: imfreq: fix out of bound product gf imfreq
- gf<cartesian_product<imfreq,imfreq>> was not correct when out bounds. Fixed evaluator. - tensor_proxy : fix the trait for algebra which was incorrect. - TODO: clean code (repetition, put in mesh some windowing).
This commit is contained in:
parent
1b3a66af24
commit
2200e2680f
@ -37,7 +37,7 @@ int main() {
|
||||
auto zz = G_w_wn2(t_,tp_);
|
||||
//std::cout << std::get<0>(zz.childs).data() << std::endl ;
|
||||
auto yy = eval ( zz, t_=2, tp_=3);
|
||||
std::cout << yy.indexmap()<< std::endl ;
|
||||
//std::cout << yy.indexmap()<< std::endl ;
|
||||
std::cout << yy << std::endl ;
|
||||
//std::cout << eval ( zz, t_=2, tp_=3)<< std::endl ;
|
||||
//std::cout << eval ( G_w_wn2(t_,tp_), t_=2, tp_=3)<< std::endl ;
|
||||
|
@ -35,7 +35,7 @@ namespace arrays {
|
||||
// tensor const
|
||||
template <typename A, bool IsMatrix>
|
||||
struct const_matrix_tensor_proxy : std::conditional<IsMatrix, TRIQS_CONCEPT_TAG_NAME(ImmutableMatrix),
|
||||
TRIQS_CONCEPT_TAG_NAME(ImmutableCuboidArray)>::type {
|
||||
TRIQS_CONCEPT_TAG_NAME(ImmutableArray)>::type {
|
||||
|
||||
typedef typename std::remove_reference<A>::type A_t;
|
||||
static constexpr bool is_const = true;
|
||||
@ -84,7 +84,7 @@ namespace arrays {
|
||||
// tensor no const
|
||||
template <typename A, bool IsMatrix>
|
||||
struct matrix_tensor_proxy : std::conditional<IsMatrix, TRIQS_CONCEPT_TAG_NAME(MutableMatrix),
|
||||
TRIQS_CONCEPT_TAG_NAME(MutableCuboidArray)>::type {
|
||||
TRIQS_CONCEPT_TAG_NAME(MutableArray)>::type {
|
||||
|
||||
typedef typename std::remove_reference<A>::type A_t;
|
||||
static constexpr bool is_const = false;
|
||||
|
@ -55,10 +55,14 @@ namespace gfs {
|
||||
// simple evaluation : take the point on the grid...
|
||||
template <> struct evaluator_fnt_on_mesh<imfreq> {
|
||||
long n;
|
||||
double w;
|
||||
evaluator_fnt_on_mesh() = default;
|
||||
template <typename MeshType> evaluator_fnt_on_mesh(MeshType const &m, long p) { n = p; }
|
||||
template <typename MeshType> evaluator_fnt_on_mesh(MeshType const &m, matsubara_freq const &p) { n = p.n; }
|
||||
template <typename F> auto operator()(F const &f) const DECL_AND_RETURN(f(n));
|
||||
template <typename MeshType> evaluator_fnt_on_mesh(MeshType const &m, long p) { n = p; w=1; }
|
||||
template <typename MeshType> evaluator_fnt_on_mesh(MeshType const &m, matsubara_freq const &p) {
|
||||
if ((p.n >= m.index_start()) && (p.n < m.size()+m.index_start())) {w=1; n =p.n;}
|
||||
else {w=0; n=0;}
|
||||
}
|
||||
template <typename F> auto operator()(F const &f) const DECL_AND_RETURN(w*f(n));
|
||||
};
|
||||
|
||||
// ------------- evaluator -------------------
|
||||
|
@ -69,6 +69,9 @@ namespace gfs {
|
||||
/// Flatten the index in the positive linear index for memory storage (almost trivial here).
|
||||
long index_to_linear(index_t ind) const { return ind - index_start(); }
|
||||
|
||||
/// Is the mesh only for positive omega_n (G(tau) real))
|
||||
bool positive_only() const { return _positive_only;}
|
||||
|
||||
/**
|
||||
* The mesh point
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user