mirror of
https://github.com/triqs/dft_tools
synced 2024-11-01 11:43:47 +01:00
49 lines
1.3 KiB
ReStructuredText
49 lines
1.3 KiB
ReStructuredText
|
.. highlight:: c
|
||
|
|
||
|
.. _gf_clef:
|
||
|
|
||
|
Interaction with CLEF expressions
|
||
|
============================================
|
||
|
|
||
|
* The gf containers and their view classes can be used with the :doc:`../clef/contents` library :
|
||
|
|
||
|
* They can be called with CLEF expressions.
|
||
|
* :doc:`Automatic assignment<../clef/assign>` has been set up.
|
||
|
|
||
|
* Using the CLEF library offers a quick and efficient way to fill an array with multiple advantages :
|
||
|
|
||
|
* It is simpler and more readeable than a series of for loops.
|
||
|
* It is usually more optimal since the for loops are automatically written in the TraversalOrder of the array.
|
||
|
|
||
|
|
||
|
* **Example** :
|
||
|
|
||
|
.. compileblock::
|
||
|
|
||
|
#include <triqs/gfs.hpp>
|
||
|
using namespace triqs::gfs; using triqs::clef::placeholder;
|
||
|
int main(){
|
||
|
|
||
|
// Cf gf<imfreq> specialisation page for the constructor
|
||
|
double beta=10; int Nfreq =100;
|
||
|
auto g = gf<imfreq> { {beta,Fermion,Nfreq}, {1,1} };
|
||
|
|
||
|
// Filling the gf with something...
|
||
|
placeholder<0> wn_;
|
||
|
g(wn_) << 1/ (wn_ + 2);
|
||
|
g(wn_) << 1/ (wn_ + 2 + g(wn_) );
|
||
|
}
|
||
|
|
||
|
.. note::
|
||
|
|
||
|
The syntax uses a <<, not = since the array is not assigned to an expression
|
||
|
but filled by the evaluation thereof.
|
||
|
|
||
|
The LHS uses () and not brackets, even though it is on the mesh, because of the strange C++ limitation
|
||
|
that [] can not be overloaded for several variables...
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|