- When evaluation produces temporaries in intermediate
steps, they were capture by ref, not properly forwarded.
This results in bugs in more complex cases,
like evaluation of objects returning new arrays expression template.
(preparation for next commit).
This reverts the part of the commit 1906dc30a5
which introduced modifications in the expr templates of the Green's
functions. The commit had introduced some bugs and this revert
removes them (the expr templates will be taken care of fully in later
commits). This is a temporary fix for issues #18 and #25.
reverted: triqs/gfs/data_proxies.hpp
reverted: triqs/gfs/gf.hpp
reverted: triqs/gfs/gf_expr.hpp
- add a parent in the group, to allow iteration on group
elements
- normally in h5, one needs to have the parent group and the name
of the group to iterate on its elements.
- added a parent (possibly empty) to get a simply syntax to
get the element of a group...
- add move semantics in expression template.
for gfs :
- rm descriptor
- Remove data from expr, rewrote assignment
which now iterates on the mesh, simply.
RHS models now FunctionOnMesh
- This fix the multiplication bug of gf
- Remove assign_no_resize/assign_with_resize from proxy
- a thin layer, using a bit boost::mpi (for the communicator mostly ...)
along the lines discussed in #12.
- implemented reduce, allreduce, bcast for arrays, simple scalars,
and any custom type that support boost serialization.
- Custom types : the operations are done recursively on members.
No change is needed in the class to use this mpi routine, as long as
serialize function is defined.
- For arrays of basic types (int, double...), a direct call to MPI C API, which works also for views
(as long as they are contiguous).
- For arrays of more complex types, we revert to boost::mpi.
- Added a simple test.
- Work still in progress :
- missing a simple scatter/gather for the arrays
- need more tests & API thinking.
- dispatch array code to array lib
- reduce is "sum" only, but do we need more.
Now the tail have a fixed size. It actually makes everything simpler. I took
order_min = -1 and order_max = 8. This makes the tails compatible with the
previous implementation. However we might want to change this to something like
-10, 10 so that they are self-contained. This commit should also fix issue #11.
- 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.
- necessary otherwise the class gf and the namespace have
the same name, leading to some confusion, and need to qualify
some functions (specially on gcc).
Same naming conventions as arrays.
- A()(0) = 1
will not work any more if A is const, as it should be.
- Introduced the notion of const_view, simply done by a flag
(flag 0, for easy debug)
- changed the slice of ISP to use it (only on C++11 compliant compiler)
- Move BoundCheck Flags to 5.
- improve the mem_block and shared_block.
- the reference counting is now done in the mem_block and shared_block, removing the need of shared_ptr.
- speed tests shows that shared_ptr is very slow (due to thread safety?)
the new version is much better, though not perfect.
- Hence introducing weak views.
- also :
-- clean the guard mechanism for python (to allow returning from python without any python ref left).
-- clean code, add documentation for mem_block
-- remove nan init, which was not working, and corresponding test
-- serialisation of view still unchanged (need to forbid serialization of view ??).
- tests ok, incl. valgrind tests.
- introducing scalar_valued gf
- Change Fourier routines to run on scalar_valued,
and then use those routines to run on matrix_valued.
- Tools for slices of 2 variables functions