Operator []
Synopsis
value_type const & operator[](mesh_t::index_t const &) const (1a)
value_type & operator[](mesh_t::index_t const &) (1b)
value_type const & operator[](mesh_t::mesh_point_t const &) const (2a)
value_type & operator[](mesh_t::mesh_point_t const &) (2b)
value_type const & operator[](closest_mesh_pt_t const &) const (3a)
value_type & operator[](closest_mesh_pt_t const &) (3b)
ClefExpression operator[](ClefExpression expr) const (4)
The operator [] is in charge of accessing the data of the Green function on the mesh. This is therefore a way to modify the Green function.
This is valid for both the container (e.g. gf), and the view (e.g. gf_view).
Note that the gf_mesh<prod<X,Y,…>> provides additional functionality for the operator [].
(1) Use the linear index of the mesh
Each mesh_t has an associated index_t (e.g. the Matsubara index (long) for mesh::imfreq) that can be used to access the data of the Green function. Please refer to the respective mesh documentation page for the index_t and meaning.
(2) Use the mesh_point of the mesh
Each mesh_t has further an associated mesh_point_t that can be used to access the data. These mesh points are naturally acquired when looping over a mesh
for (auto iw : g_iw.mesh())
g_iw[iw] = 1.0 / iw;
Note however that this will not set a proper singularity of the Green function.
(3) Find the closest mesh point from a domain point
May or may not be provided by the specialisation. Cf specialization.
This is normally used with the helper function:
closest_mesh_point_t closest_mesh_point(Anything x)
closest_mesh_point_t is just a little “vehicle” that can contain anything (by copy or ref ???), and carry it through the [].
Usage
g [ closest_mesh_point(x) ] += y;
(4) Interaction with clef expressions
Like (), [] can be called with a ClefExpression.