- to use already a few c14 convenience details :
-> polymorphic std::plus, e.g.
boost::mpi::reduce (world, A,C, std::c14::plus<>(),0);
this plus determine the type by itself ...
-> errors on the type can be very cryptic on the gf.
-> add std::c14::make_unique
(equivalent of make_shared for unique_ptr).
- The previous version of the * operator for matrix was too clever.
It was giving a lazy object and then rewriting C = A *B into gemm (a,A,B,0,C).
The pb was in case of aliasing : when e.g. C = A, or is a part of A.
gemm is not correct that case, and as a result generic code like
a = a *b
may not be correct in matrix case, which is unacceptable.
- So we revert to a simple * operator for matrix
that does immediate computation.
Same thing for matrix* vector
- we also suppress a_x_ty class.
-> for M = a * b,
when M is a matrix, there is no overhead due to move assignment
-> however, when M is a view, there is an additionnal copy.
-Correctness comes first, hence the fix.
However, if one wants more speed and one can guarantee that
there is no aliasing possible, then one has to write a direct gemm call.
-> det_manip class was adapted, since in that case, we can show there
no alias, and we want the speed gain, so the * ops where replaced
by direct blas call (using the array blas interface).
-> also gemm, gemv, ger were overloaded in the case the return
matrix/vector (i.e. last parameter of the function) is not an lvalue,
but a temporary view created on the fly.
gf: security in the case beta<0 added in the mesh construction
gf: inline added in slice
test/triqs/gf: test of on_mesh() added
gfs: scalar for two-real_times
test/triqs/gf/ renamed in gfs, test gf_retw.cpp completed
gfs: evaluator homogeneised
two_times: evaluator corrected
test/triqs/gf/ renamed in gfs, test gf_retw.cpp completed
+ Correction after rebase
Fix a test : gf_re_im_freq_time
There is an issue with the last point.
To be fixed.
- change : all objects are by default
stored now by reference, not by copy any more.
Unless the trait force_copy_in_expr is true.
- rvalue refs are moved into the tree
- simplifies a lot the writing of lazy method, objects.
- added a macro for methods
- tests ok. Further check needed to control absence of copies...
- improved documentation
I added a version.hpp and updated the version.py so that
one can find the version of the library either from the
c++ or the python (if there is python support).
modified: CMakeLists.txt
modified: cmake/TRIQSConfig.cmake.in
modified: pytriqs/version.py.in
modified: triqs/CMakeLists.txt
new file: triqs/version.hpp.in
gcc has a pb because the template mesh<Variable,Opt>
has the name same as the gf mesh method (!).
Clang is fine however on this...
Solution : rename the template mesh<...> to gf_mesh...
Not very elegant, but ok.
- has_view_type_tag mechanism was replaced by a decltype long ago.
Cleaning since it seems to work on all supported compiler now.
- removed add_views : not used any more.
- Apparently there is a bug in release 3.3 of clang
(? on kondo cluster ?) that crash the compiler in compiling
a test. Pb not present in clang from svn.
Changed a little bit the libs as a workaround.
new policy : for non standard conforming compilers,
we can skip the tests using new features using recent c++ features.
I.e. compilers below gcc 4.8.1, clang 3.3.
- All access to grid is now using the [] operator.
() always returns const, and is an evaluation over the domain.
- Now :
* () is always a call to evaluator (or a lazy expression).
* mesh_pt accepted by [] , both const and non const,
and not by ().
- Ported the libs (fourier et al.) but this break API.