mirror of
https://github.com/triqs/dft_tools
synced 2024-12-24 13:23:37 +01:00
[clef] Fix placeholder () and [] operators
- had been forgotten. - modified g(k,om) test
This commit is contained in:
parent
c7a1a25846
commit
c9a5856fb8
@ -1,3 +1,3 @@
|
||||
link_libraries (triqs)
|
||||
all_tests()
|
||||
|
||||
add_subdirectory(multivar)
|
||||
|
@ -23,12 +23,16 @@ int main() {
|
||||
// try to assign to expression
|
||||
placeholder<0> k_;
|
||||
placeholder<1> w_;
|
||||
auto eps = make_expr( [](k_t const& k) { return -2 * (cos(k(0)) + cos(k(1))); }) ;
|
||||
|
||||
G(k_, w_) << 1 / (w_ - eps(k_) - 1 / (w_ + 2));
|
||||
auto eps_k = -2 * (cos(k_(0)) + cos(k_(1)));
|
||||
G(k_, w_) << 1 / (w_ - eps_k - 1 / (w_ + 2));
|
||||
|
||||
// hdf5
|
||||
h5::file file("ess_g_k_om.h5", H5F_ACC_TRUNC );
|
||||
// same
|
||||
// auto eps = make_expr( [](k_t const& k) { return -2 * (cos(k(0)) + cos(k(1))); }) ;
|
||||
// G(k_, w_) << 1 / (w_ - eps(k_) - 1 / (w_ + 2));
|
||||
|
||||
// hdf5
|
||||
h5::file file("ess_g_k_om.h5", H5F_ACC_TRUNC);
|
||||
h5_write(file, "g", G);
|
||||
|
||||
|
||||
|
@ -59,12 +59,19 @@ namespace triqs { namespace clef {
|
||||
* Placeholder and corresponding traits
|
||||
* --------------------------------------------------------------------------------------------------- */
|
||||
template<int i, typename T> struct pair; // forward
|
||||
template<typename Tag, typename... T> struct expr; //forward
|
||||
|
||||
// a placeholder is an empty struct, labelled by an int.
|
||||
template<int N> struct placeholder {
|
||||
static_assert( (N>=0) && (N<64) , "Placeholder number limited to [0,63]");
|
||||
static constexpr int index = N;
|
||||
template <typename RHS> pair<N,RHS> operator = (RHS && rhs) { return {std::forward<RHS>(rhs)};}
|
||||
template <typename... T> expr<tags::function, placeholder, expr_storage_t<T>...> operator()(T&&... x) const {
|
||||
return {tags::function{}, *this, std::forward<T>(x)...};
|
||||
}
|
||||
template <typename T> expr<tags::subscript, placeholder, expr_storage_t<T>> operator[](T&& x) const {
|
||||
return {tags::subscript{}, *this, std::forward<T>(x)};
|
||||
}
|
||||
};
|
||||
|
||||
// placeholder will always be copied (they are empty anyway).
|
||||
|
@ -58,12 +58,19 @@ namespace triqs { namespace clef {
|
||||
* Placeholder and corresponding traits
|
||||
* --------------------------------------------------------------------------------------------------- */
|
||||
template<int i, typename T> struct pair; // forward
|
||||
template<typename Tag, typename... T> struct expr; //forward
|
||||
|
||||
// a placeholder is an empty struct, labelled by an int.
|
||||
template<int N> struct placeholder {
|
||||
static_assert( (N>=0) && (N<64) , "Placeholder number limited to [0,63]");
|
||||
static constexpr int index = N;
|
||||
template <typename RHS> pair<N,RHS> operator = (RHS && rhs) { return {std::forward<RHS>(rhs)};}
|
||||
template <typename RHS> pair<N,RHS> operator = (RHS && rhs) { return {std::forward<RHS>(rhs)};}
|
||||
template <typename... T> expr<tags::function, placeholder, expr_storage_t<T>...> operator()(T&&... x) const {
|
||||
return {tags::function{}, *this, std::forward<T>(x)...};
|
||||
}
|
||||
template <typename T> expr<tags::subscript, placeholder, expr_storage_t<T>> operator[](T&& x) const {
|
||||
return {tags::subscript{}, *this, std::forward<T>(x)};
|
||||
}
|
||||
};
|
||||
|
||||
// placeholder will always be copied (they are empty anyway).
|
||||
|
@ -68,6 +68,8 @@ namespace lattice {
|
||||
long index() const { return _index; }
|
||||
bool at_end() const { return (_index == m->size()); }
|
||||
void reset() { _index = 0; }
|
||||
double operator()(int i) const { return m->index_to_point(_index)(i);}
|
||||
double operator[](int i) const { return m->index_to_point(_index)(i);}
|
||||
};
|
||||
|
||||
/// Accessing a point of the mesh
|
||||
|
Loading…
Reference in New Issue
Block a user