Ian Jauslin
summaryrefslogtreecommitdiff
blob: 75c9583e69595b9f756de3458c0ea5e8379a2429 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
<html>
  <head>
    <!--<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"> </script>-->
    <script type="text/javascript" src="/usr/share/mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"> </script>

    <style>
      body {
	margin-top:40pt;
	margin-bottom:40pt;
	margin-left:40pt;
	margin-right:40pt;

	text-align:justify;
      }

      p {
	text-indent:20pt;
      }

      .codeblock {
	display:block;
	margin-left:40pt;
	margin-top:10pt;
	margin-bottom:15pt;
	text-indent:0pt;
      }

      .toc {
	font-weight:bold;
      }
      .toc ul {
	list-style-type:none;
      }
      .toc_sec {
	counter-increment: tocsec;
	counter-reset: tocsub 0;
      }
      .toc_sec:before {
	content: counter(tocsec) ". ";
      }
      .toc_sub {
	counter-increment: tocsub;
      }
      .toc_sub:before {
	content: counter(tocsec) "." counter(tocsub) ". ";
      }

      body {
	counter-reset: section 0;
      }
      .section:before {
	counter-increment: section;
	content: counter(section) ". ";
      }
      .section {
	margin-top:50pt;
	counter-reset: subsection 0;
      }
      .subsection:before {
	counter-increment: subsection;
	content: counter(section) "." counter(subsection) ". ";
      }
      .subsection {
	margin-top:30pt;
      }

    </style>

  </head>

  <body>
    <h1 style="margin-bottom:50pt;">meankondo <span style="margin-left:10pt;font-size:18pt">v1.5</span></h1>

    <p>
      This is the official documentation for <b>meankondo</b>, version 1.5. The aim of this document is not to give a technical description of how to use the various programs bundled with <b>meankondo</b>, nor is it to explain where hierarchical models come from and what their meaning is, but rather a conceptual overview of how <b>meankondo</b> approaches the computation of flow equations, and how its programs can be made to interact with one another to compute various quantities. For a more technical description, see the man pages included with the <b>meankondo</b> source code. For a more theoretical discussion of Fermionic hierarchical models, see <a href="http://ian.jauslin.org/publications/15bgj">[G.Benfatto, G.Gallavotti, I.Jauslin, 2015]</a>.
    </p>

    <h2 style="margin-top:50pt;">Table of contents</h2>
    <div class="toc">
      <ul>
	<li class="toc_sec"><a href="#description">Description</a></li>
	<li class="toc_sec"><a href="#quickstart">Quickstart</a></li>
	<li class="toc_sec"><a href="#fermionic_hierarchical_models">Fermionic hierarchical models</a></li>
	  <ul>
	    <li class="toc_sub"><a href="#fields">Fields</a></li>
	    <li class="toc_sub"><a href="#propagator">Propagator</a></li>
	  </ul>
	<li class="toc_sec"><a href="#flow_equation">Flow Equation</a></li>
	  <ul>
	    <li class="toc_sub"><a href="#flow_equation_definition">Definition</a></li>
	    <li class="toc_sub"><a href="#flow_equation_computation">Computation</a></li>
	  </ul>
	<li class="toc_sec"><a href="#operations">Operations on flow equations</a></li>
	  <ul>
	    <li class="toc_sub"><a href="#processing">Pre- and post-processing</a></li>
	    <li class="toc_sub"><a href="#numerical_evaluation">Numerical Evaluation</a></li>
	    <li class="toc_sub"><a href="#differentiation">Differentiation</a></li>
	  </ul>
	<li class="toc_sec"><a href="#exactness">Comments on the exactness of the computation</a></li>
	<li class="toc_sec"><a href="#authors">Authors</a></li>
      </ul>
    </div>

    <h2 class="section" id="description">Description</h2>
    <p>
      <b>meankondo</b> is a collection of tools to compute and manipulate the renormalization group flow in Fermionic hierarchical models. The programs included in <b>meankondo</b> are the following:
      <ul>
	<li><b>meankondo</b>: computes the flow equation.</li>
	<li><b>numkondo</b>: iterate the flow equation numerically.</li>
	<li><b>meantools</b>: tools to take products, sums, exponentials or logairhtms, differentiate or evaluate a flow equation.</li>
	<li><b>meantools-convert</b>: python script to convert a flow equation to C, javascript or LaTeX code.</li>
      </ul>
      In addition, <b>meankondo</b> includes a library, <b>libkondo</b>, which can either be compiled as a <i>shared</i> or a <i>static</i> object, and contains the various structures and functions <b>meankondo</b> is built with.
    </p>

    <p>
      <b>Remark</b>: The name "meankondo" comes from the fact that it was originally developed for the hierarchical Kondo model, though the tools in <b>meankondo</b> are quite versatile and can be used for a wide variety of Fermionic hierarchical models.
    </p>

    <h2 class="section" id="quickstart">Quickstart</h2>
    <p>
      We first discuss the more elementary commands that can be used to compute and iterate flow equations. The rest of this document is dedicated to what flow equations are and how <b>meankondo</b> represents and manipulates them.
    </p>
    
    <p>
      Given a configuration file 'config.mk', the flow equation can be computed by
      <code class="codeblock">
	meankondo config.mk
      </code>
      and it can be iterated for, say, 100 steps starting from \(\ell_0^{[m]}=-0.01\) using
      <code class="codeblock">
	meankondo -C config.mk | numkondo -N 100 -I "0:-0.01"
      </code>
    </p>

    <h2 class="section" id="fermionic_hierarchical_models">Fermionic hierarchical models</h2>
    <p>
      In this section, we discuss how the models that <b>meankondo</b> can process are defined. A model is specified by a collection of <i>fields</i>, and a <i>propagator</i> between pairs of fields.
    </p>

    <h3 class="subsection" id="fields">Fields</h3>
    <p>
      Fields are the elementary objects in terms of which a model is defined. Fields can be one of
      <ul>
	<li><b>internal</b>: which are organized in pairs, and are denoted by \((\psi_i^+,\psi_i^-)\) for \(i\in\{1,\cdots,I\}\).
	<li><b>external</b>: which are organized in pairs, and are denoted by \((\Psi_i^+,\Psi_i^-)\) for \(i\in\{1,\cdots,E\}\).
	<li><b>super-external</b>: which denoted by \(H_i\) for \(i\in\{1,\cdots,X\}\) (the only difference with external fields is that super-external fields are not in pairs, which is a seemingly innocuous difference; but super-external fields are meant to be used for different purposes as external fields (see <a href="#flow_equation_definition">Definition</a> below)).
      </ul>
      The fields are used as a basis for a complex algebra, so that we can take products and linear combinations of fields (in other words, the concept of <i>polynomials over the fields</i> is well defined). Some of the fields (<i>Fermions</i>) anti-commute with each other (two fields \(a\) and \(b\) are said to anti-commute if \(ab\equiv-ba\)), and the rest (<i>Bosons</i>) commute. Which fields are Fermions and which are Bosons is specified in the <code>#!fields</code> entry in the configuration file. <b>(Warning: As of version 1.5, all internal fields must be Fermions.)</b>
    </p>
    <p>
      In the configuration file of the <b>meankondo</b> program, the fields are specified in the <code>#!fields</code> entry.
    </p>

    <h3 class="subsection" id="propagator">Propagator</h3>
    <p>
      Given a collection of fields, a <i>model</i> is specified as a recipe for computing the <i>average</i> of a polynomial of fields. We will use the following notation: given a polynomial \(F(\psi,\Psi,H)\) in the fields, its average will be denoted by \(\langle F(\psi,\Psi,H)\rangle\). The average is a linear operation, and, as indicated by the name "internal", only acts on internal fields, so that the external and super-external fields are viewed as constants for the averaging operation and can be factored out. It therefore suffices to define the average of a monomial of internal fields.
    </p>
    <p>
      First of all, a monomial of internal fields which does not contain the same number of \(\psi^+_i\) as \(\psi^-_j\) is \(0\). The average of a monomial of the form \(\psi_{i_1}^+\psi_{j_1}^-\cdots\psi_{i_n}^+\psi_{j_n}^-\) in which \(n\in\mathbb N\), \((i_1,\cdots,i_n)\in\{1,\cdots,I\}^n\) and \((j_1,\cdots,j_n)\in\{1,\cdots,I\}^n\), is computed using the <i>Wick rule</i>:
      $$
      \langle\psi_{i_1}^+\psi_{j_1}^-\cdots\psi_{i_n}^+\psi_{j_n}^-\rangle=
      \sum_{\pi\in\mathcal S_n}(-1)^\pi\langle\psi_{i_1}^+\psi_{j_{\pi(1)}}^-\rangle\cdots\langle\psi_{i_n}^+\psi_{j_{\pi(N)}}^-\rangle
      $$
      in which \(\mathcal S_n\) denotes the set of permutations of \(\{1,\cdots,n\}\) and \((-1)^\pi\) denotes the signature of \(\pi\). Using the Wick rule, we can specify any average by defining the quadratic moments of the model, similarly to the moments of a 0-mean Gaussian measure. The collection of all quadratic moments of the form
      $$\langle\psi_i^+\psi_j^-\rangle$$
      with \((i,j)\in\{1,\cdots,I\}^2\) is called the <i>propagator</i> of the model.
    </p>
    <p>
      In the configuration file of the <b>meankondo</b> program, the propagator is specified in the <code>#!propagator</code> entry. Note that <b>meankondo</b> recognizes numeric propagators as well as symbolic ones.
    </p>

    <p>
      It is convenient to re-expres the Wick rule in determinant form: if \(M\) is the \(n\times n\) matrix whose entries are \(M_{a,b}=\langle\psi_{i_a}^+\psi_{j_b}^-\rangle\), then
      $$
      \langle\psi_{i_1}^+\psi_{j_1}^-\cdots\psi_{i_n}^+\psi_{j_n}^-\rangle=
      \det(M).
      $$
      <b>meankondo</b> implements an algorithm, based on an <i>LU decomposition</i>, to compute \(\det(M)\) in \(O(n^3)\) operations. However, when performing the LU decomposition, elements of \(M\) are divided, and since polynomial divisions are not supported in <b>meankondo</b>, the LU decomposition will only be performed if every entry of the propagator is numeric. If the propagator has symbolic entries, then <b>meankondo</b> computes the means summing over permutations, which requires \(O(n!)\) operations but does not require divisions.
    </p>


    <h2 class="section" id="flow_equation">Flow equation</h2>
    <p>
      In this section, we discuss what flow equations are, and how <b>meankondo</b> computes them.
    </p>

    <h3 class="subsection" id="flow_equation_definition">Definition</h3>
    <p>
      We first discuss how a flow equation is defined from a renormalization group map. The discussion below is not, in any sense, precise, and is meant as a guiding idea to understand why <b>meankondo</b> does what it does in the way it does.
    </p>
    <p>
      Consider a map, which we will call the <i>renormalization group</i> flow, of the form:
      $$
      V^{[m]}(\Phi^{[m]},H)\longmapsto V^{[m-1]}(\Phi^{[m-1]},H)=\frac1{C^{[m]}}\left(\left\langle\prod_{\nu=1}^k\left(1+V^{[m]}(\Phi_\nu^{[m]},H)\right)\right\rangle-1\right)
      $$
      where \(V^{[m]}\) anf \(V^{[m-1]}\) are polynomials with no constant term, \(C^{[m]}\in\mathbb R\setminus\{0\}\) is a constant, \(\langle\cdot\rangle\) is the average defined in <a href="#propagator">Propagator</a>, \(H\) is the collection of super-external fields, \(k=I/E\) which we assume to be an integer, \(\{\Phi^{[m]\pm}_{\nu,i}\}_{i\in\{1,\cdots,E\},\ k\in\{1,\cdots,k\}}\) and \(\{\Phi^{[m-1]\pm}_{i}\}_{i\in\{1,\cdots,E\}}\) are collections of combinations of the internal and external fields, of the form
      $$
      \Phi^{[m]\pm}_{\nu,i}=\alpha_i\Psi_i^\pm+\psi_{j_\nu^{(i)}}^\pm,\quad
      \Phi^{[m-1]\pm}_{i}=\Psi_i^\pm
      $$
      in which \(\alpha_i\in\mathbb R\setminus\{0\}\) is some <i>re-scaling</i> factor, and
      $$
      \bigcup_{i\in\{1,\cdots,E\}}^\circ\{j_1^{(i)},\cdots,j_k^{(i)}\}=\{1,\cdots,I\}
      $$
      in which the \(\circ\) over the union means it is disjoint.
    </p>
    <p>
      If \(V^{[m-1]}\) can be written in the same form as \(V^{[m]}\), then the renormalization group map can be written as a finite system of equations: if there exist \(p\in\mathbb N\), \((\ell_1^{[m]},\cdots,\ell_p^{[m]})\in\mathbb C^p\), \((\ell_1^{[m-1]},\cdots,\ell_p^{[m-1]})\in\mathbb C^p\), and polynomials \((O_1(\Phi,H),\cdots,O_l(\Phi,H))\) such that
      $$
      V^{[m]}(\Phi_\nu^{[m]},H)=\sum_{n=1}^p\ell_n^{[m]}O_n(\Phi_\nu^{[m]},H),\quad
      V^{[m-1]}(\Phi^{[m-1]},H)=\sum_{n=1}^p\ell_n^{[m-1]}O_n(\Phi^{[m-1]},H)
      $$
      then the renormalization group map can be written as a finite system of equations, called the <i>flow equation</i>, which maps
      $$
      (\ell_1^{[m]},\cdots,\ell_p^{[m]})\longmapsto(C^{[m]},\ell_1^{[m-1]},\cdots,\ell_1^{[m-1]})
      $$
      (we added the constant \(C^{[m]}\) which plays an important role). The collection \(\underline\ell\) is called the collection of <i>running coupling constants</i>.
    </p>

    <h3 class="subsection" id="flow_equation_computation">Computation</h3>
    <p>
      We now discuss how <b>meankondo</b> computes flow equations. The two relevant configuration file entries are <code>#!input_polynomial</code> and <code>#!id_table</code>.
    </p>
    <p>
      The entry <code>#!input_polynomial</code> specifies a polynomial \(F(\underline\ell,\psi,\Psi,H)\) in the fields, as well as in a family of complex symbolic variables \(\underline\ell=(\ell_1,\cdots,\ell_p)\). In the context of the computation in <a href="#flow_equation_definition">Definition</a>, it would be of the form
      $$
      \prod_{\nu=1}^k\left(1+\sum_{n=1}^p\ell_nO_n(\Phi_{\nu}^{[m]},H)\right).
      $$
    </p>
    <p>
      The entry <code>#!id_table</code> specifies a sequence of \(p\) polynomials \((O_1(\Psi,H),\cdots,O_p(\Psi,H))\) in the external fields. In the context of the computation in <a href="#flow_equation_definition">Definition</a> the \(n\)-th polynomial would be
      $$
      O_n(\Phi_{\nu}^{[m]},H)
      $$
      which specifies that \(O_n\) corresponds to \(\ell_n\).
      </p>
      <p>
      <b>meankondo</b> first computes the average
      $$
      F'(\underline\ell,\Psi,H):=\langle F(\underline\ell,\psi,\Psi,H)\rangle
      $$
      and then <i>groups</i> \(F'\) according to the id table, that is it tries to put it in the form
      $$
      F'(\underline\ell,\Psi,H)=C(\underline\ell)\left(1+\sum_{n=1}^p\ell'_n(\underline\ell)O_n(\Psi,H)\right)
      $$
      in which \(C(\underline\ell)\) is a complex constant term and \(\ell'_n(\underline\ell)\) is some complex coefficient, which are both functions of \(\underline\ell\). Note that for Fermionic hierarchical models, \(\ell'_n\) is a rational function of \(\underline\ell\), and \(C\) is a polynomial in \(\underline\ell\). In addition, \(\ell'_n\) can be expressed as a polynomial in \((\underline\ell,C^{-1}(\underline\ell))\). The flow equation is then defined as
      $$
      \mathcal R:\underline\ell\longmapsto(C(\underline\ell),\ell'_1(\underline\ell),\cdots,\ell'_p(\underline\ell))
      $$
      If \(F'\) cannot be grouped, then <b>meankondo</b> exits with error code <code>-1</code>.
    </p>

    <h2 class="section" id="operations">Operations on flow equations</h2>
    <p>
      In this section we describe the various operations on flow equations that <b>meankondo</b> and the tools bundled with it support.
    </p>

    <h3 class="subsection" id="processing">Pre- and post-processing</h3>
    <p>
      <b>meankondo</b> can perform operations on the effective potential before and after applying the renormalization group transformation. This is useful, for instance, if the effective potential is expressed as an expontential: \(exp(W)\), in which case the input polynomial can be exponentiated before the computation, and the logarithm taken after the computation. To do this, <b>meankondo</b> implements some basic symbolic processing. For the syntax of the symbolic processing, see the <b>man</b> pages bundled with <b>meankondo</b>. The pre-processing is done in the <code>#!input_polynomial</code> configuration entry, and the post-processing can be done in the <code>#!postprocess_operation</code>, <code>#!postprocess_flow_equation</code> or <code>#!numerical_postprocess_operation</code> entries. In addition, <b>meantoolds expand</b> can be used to compute sums, products, exponentials and logarithms of effective potentials.
    </p>

    <p>
      There are subtle differences between using <code>#!postprocess_operation</code>, <code>#!postprocess_flow_equation</code> and <code>#!numerical_postprocess_operation</code>. With <code>#!postprocess_operation</code>, the post-processing operation is done immediately after having computed the average. With <code>#!postprocess_flow_equation</code> and <code>#!numerical_postprocess_operation</code>, the avergae is first turned into a flow equation, and then the post-processing is applied to each equation. The main difference is in the handling of the constant term of the polynomials, see the <b>man</b> for details. The <code>numerical</code> entry is to be used for the numerical evaluation of the flow only, using <b>numkondo</b>.
    </p>

    <h3 class="subsection" id="numerical_evaluation">Numerical evaluation</h3>
    <p>
      Once a flow equation \(\mathcal R\) has been computed, it can be numerically evaluated by passing a vector \(\underline\ell\) of double precision floating point numbers to <b>meantools eval</b> or <b>numkondo</b> which computes \(\mathcal R(\underline\ell)\) in the former case, and \(\mathcal R^m(\underline\ell)\) for any \(m\in\mathbb N\) in the latter.
    </p>

    <p>
      Numerical evaluation is handled in a straightforward manner, but for the following consideration. As was mentioned in <a href="#flow_equation_computation">Computation</a>, \(\mathcal R\) is a polynomial in \((\underline\ell,C^{-1}(\underline\ell))\), and when evaluating \(\mathcal R(\underline\ell)\), <b>meankondo</b> first evaluates \(C\) and the computes \(\ell'_n(\underline\ell)\).
    </p>

    <h3 class="subsection" id="differentiation">Differentiation</h3>
    <p>
      This feature was introduced to compute the susceptibility in the hierarchical Kondo model. In that case, some of the running coupling constants depend on the field, \(h\), and the susceptibility is expressed as a derivative of \(C(\underline\ell(h))\) with respect to \(h\). To that end, we wrote <b>meantools differentiate</b> to compute the derivatives of a flow equation with respect to an external variable.
    </p>

    <p>
      The input of <b>meantools differentiate</b> consists in a flow equation and a collection of variables \(X\subset\{1,\cdots,p\}\). Each running coupling constant \(\ell_i\) for \(i\in X\) is assumed to depend on an external parameter, \(h\). The flow equation is then differentiated with respect to \(h\): for every \(n\in\{1,\cdots,p\}\), the derivative of \(\ell_n'(\underline\ell)\) with respect to \(h\) in terms of \(\partial_h\ell_i\) for \(i\in X\) is computed. It is then appended to the input flow equation.
    </p>

    <h2 class="section" id="exactness">Comments on the exactness of the computation</h2>
    <p>
      The computation of the flow equation, as well as all the operations done on it, are <i>exact</i> in the sense that they only involve operations on integers and are not subject to truncations. The coefficients appearing in the flow equation are therefore <i>exact</i>. This statement has one major caveat: integer operations are only correct as long as the integers involved are not too large. The precise meaning of "not too large" is system dependent. In the source code, integers relating to flow equation coefficients are declared with the <code>long int</code> type, which, at least using the C library <b>meankondo</b> was tested with (that is <code>glibc 2.21</code>), means integers are encoded on 64 bits on 64-bit systems and 32 bits on 32-bit systems. All operations are therefore exact as long as all integers are in \([-2^{31},2^{31}-1]\) on 64-bit systems and \([-2^{15},2^{15}-1]\) on 32-bit systems.
    </p>

    <!--<p>
      Numerical evaluations are not exact. The numbers manipulated <b>meankondo</b> are double precision floating point numbers ("doubles" for short), which are also system-dependent. On systems that follow the IEEE 754 standard, doubles have a precision of 53 bits, which implies they are accurate to 15 decimal places; and the absolute value of doubles is bounded above by \(2^{1024}-2^{1024-53}\) (that is the number whose binary expansion has \(1023\) digits and whose \(53\) left-most digits are \(1\) whereas the others are \(0\)) and below by \(2^{-1022}\).
    </p>-->
    <p>
      Numerical evaluations are not exact. The numbers manipulated <b>meankondo</b> are either "long doubles" or "MPFR floats", depending on the options passed to <b>numkondo</b> (see <code>man numkondo</code>).
      <ul>
	<li>
	  Long doubles: when compiled for x86 processors, have a precision of 64 bits, which implies they are accurate to 19 decimal places; and the absolute value of doubles is bounded above by \(2^{16384}-2^{16384-64}\) (that is the number whose binary expansion has \(16383\) digits and whose \(64\) left-most digits are \(1\) whereas the others are \(0\)) and below by \(2^{-16382}\).
	</li>
	<li>
	  MPFR floats: the precision and size of the exponent can be specified as options on the command line. The maximal precision and maximal value of the exponent are, on 64 bit systems, \(2^{63}\) bits and \(2^{62}\) respectively.
	</li>
      </ul>
    </p>


    <h2 class="section" id="authors">Authors</h2>
    <p>
      <b>meankondo</b> was written by Ian Jauslin, in the context of a project in collaboration with Giuseppe Benfatto and Giovanni Gallavotti.
    </p>
  </body>
</html>