- for pieces that need to be precomputed for several
measures.
- put them under shared_ptr, and register then with add_measure_aux.
- they must be callable, as void ().
- TODO : add this in the doc when tested
- the condition p%2 ==1 was wrong if p<0 (never true!)
- added corresponding test (gf_notail)
Conflicts:
triqs/gfs/imtime.hpp
Fixed by O.P. : already fixed in Laura's pull request ...
- 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).
- there was a confusion in gf imfreq, in the new case
where freq can be <0 (non real gf, or for product gf).
- index: is the matsubara n, as in the struct matsubara_freq
index can be >0 or <0
- linear_index : is the shift from the 0. It is always >0.
Fixed function to compute it.
- Also changed the construction of mesh_point in the generic iterator.
Before, was constructed with a mesh point of index 0
Now, added a new constructor on mesh_point_t, just taking the mesh
which construct the *first* mesh_point.
Fixed linear, discrete, product accordingly.
Added to the documentation of the concepts of gf.
- little details : code cleaning, clang formatting, along
with documentation writing for c++ gf.
- separated the mesh in small class for better doc.
- work on documentation : reorganize specialisation, ...
std::conj returns a complex according to std.
On gcc, we need to define it (bug?) but on clang libc++
it is an error.
-> one test is still failing : to be decided later
DRAFT : to be tested further...
- update gf<imfreq>
- write a specific mesh for matsubara frequencies
- now the cast series is :
mesh_pt --> matsubara_freq --> complex<double>
- matsubara_freq is just the matsubara frequency
- arithmetic of the mesh_pt casted to matsubara_freq
- arithmetic of matsubara_freq is casted to complex, except + and -,
which are kept as matsubara_freq.
- evaluator now accept : int, mesh_pt, and matsubara_freq
for matsubara_freq : for negative omega, use conjugation
for omega outside windows, evaluate the tail on omega.
- as a result : g( om - nu) where om, nu are 2 meshes points,
is the extrapolation outside the grid if necessary.
- updated tests
- added evaluation for tail.
- a(1,ellipsis()) for a an array<T,1> e.g.,
was not compiling.
- also added const_iterator for range to allow simple code :
for (auto i : range {3,6}) ....-> i = 3,4,5 as in python
- clef : fix a little bug in storage when evaluating
(was using the wrong trait to deduce storage type).
- gf : block :
- added reinterpret_scalar_valued_gf_as_matrix_valued
for block function
- cleaned make_block_gf_view_from_vector
- added make_block_gf_view_from_vectormake_block_gf_view_from_vector_of_cython_proxy
and changed the cython accordingly because it requires a slightly different syntax.
- updated tests
- gf : cleaned some template.
- lazy_fourier and co --> fourier
- ex fourier --> make_gf_from_fourier to make a new gf
- = fourier (g) works only iif lhs is a view, like scalar.
- updated python (commented fourier method).
- was a bug workaround. Should be ok, but
reason of previous fix unclear. Suspicious...
- necessary to remove this :
- it is useless normally.
- it prevent the evaluator to work for scalar valued gf
- Make more general constructors for the gf.
gf( mesh, target_shape_t)
- remove the old make_gf for the basic gf.
- 2 var non generic gf removed.
- clean evaluator
- add tensor_valued
- add a simple vertex test.
- clean specialisation
- Fix bug introduced in 1906dc3
- forgot to resize the gf in new version of operator =
- Fix make_singularity in gf.hpp
- clean resize in operator =
- update h5 read/write for block gf
- changed a bit the general trait to save *all* the gf.
- allows a more general specialization, then a correct for blocks
- NOT FINISHED : need to save the block indice for python.
How to reread ?
Currently it read the blocks names and reconstitute the mesh from it.
Is it sufficient ?
- clean block constructors
- block constructors simplest possible : an int for the number of blocks
- rest in free factories.
- fixed the generic constructor from GfType for the regular type :
only enable iif GfType is ImmutableGreenFunction
- multivar. fix linear index in C, and h5 format
- linear index now correctly flatten in C mode
(was in fortran mode), using a simple reverse of the tuple in the folding.
- fix the h5 read write of the multivar fonctions
in order to write an array on dimension # variables + dim_target
i.e. without flattening the indices of the meshes.
Easier for later data analysis, e.g. in Python.
- merge matrix/tensor_valued. improve factories
- matrix_valued now = tensor_valued<2>
(simplifies generic code for h5).
- factories_one_var -> factories : this is the generic case ...
only a few specialization, code is simpler.
- clef expression call with rvalue for *this
- generalize matrix_proxy to tensor and clean
- clean exception catch in tests
- exception catching catch in need in test
because the silly OS X does not print anything, just "exception occurred".
Very convenient for the developer...
- BUT, one MUST add return 1, or the make test will *pass* !!
- --> systematically replace the catch by a macro TRIQS_CATCH_AND_ABORT
which return a non zero error code.
- exception : curry_and_fourier which does not work at this stage
(mesh incompatible).
- gf: clean draft of gf 2 times
- comment the python interface for the moment.
- rm useless tests
- the arithmetics of the gf mesh_points :
the forwarding of the second argument was missing,
leading to subtle bugs e.g. in (in matrix case) :
deltaw(iom_) << iom_ * gw.singularity()(-1) + gw.singularity()(0) - gw(iom_);
because the partial evaluation of the expression introduced a dangling const matrix_view &
instead of moving the temporary matrix_view into the final matrix expression template.
- clean array, matrix, vector expression template
they take const & of objects, or move && objects
no more views. -> C++11 modernisation
- Fix a bug in array resize : it was resetting the indexmap
to C memory layout e.g. for a fortran array
- Fix a bug in read h5 array when not in C order
(forgot an else, the array was read twice).
- 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