<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Selected Tools of Modern Theoretical Physics 1</title><link>/</link><description>Recent content on Selected Tools of Modern Theoretical Physics 1</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>noreply@numqm.local (Pok Man Lo)</managingEditor><webMaster>noreply@numqm.local (Pok Man Lo)</webMaster><atom:link href="/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>/julia_cheatsheet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/julia_cheatsheet/</guid><description>
&lt;h1 id="julia-cheatsheet">Julia Cheatsheet&lt;/h1>
&lt;h2 id="repl-modes">REPL Modes&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Key&lt;/th>
&lt;th>Mode&lt;/th>
&lt;th>Example&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>(default)&lt;/td>
&lt;td>Julia&lt;/td>
&lt;td>&lt;code>1 + 1&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>?&lt;/code>&lt;/td>
&lt;td>Help&lt;/td>
&lt;td>&lt;code>?sqrt&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>]&lt;/code>&lt;/td>
&lt;td>Pkg&lt;/td>
&lt;td>&lt;code>add QuadGK&lt;/code>, &lt;code>status&lt;/code>, &lt;code>rm Foo&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>;&lt;/code>&lt;/td>
&lt;td>Shell&lt;/td>
&lt;td>&lt;code>ls&lt;/code>, &lt;code>pwd&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="variables--types">Variables &amp;amp; Types&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>x = &lt;span style="color:#3677a9">55699&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x = &lt;span style="color:#3677a9">1&lt;/span> + &lt;span style="color:#3677a9">1&lt;/span>&lt;span style="color:#24909d">im&lt;/span> &lt;span style="color:#999;font-style:italic"># complex number (no space before im)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x = &lt;span style="color:#3677a9">3.14&lt;/span> &lt;span style="color:#999;font-style:italic"># Float64&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x = &lt;span style="color:#24909d">true&lt;/span> &lt;span style="color:#999;font-style:italic"># Bool&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>typeof(x) &lt;span style="color:#999;font-style:italic"># check type&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>eltype(x) &lt;span style="color:#999;font-style:italic"># element type (for arrays)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="arithmetic--math">Arithmetic &amp;amp; Math&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#3677a9">2.0&lt;/span>^&lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#999;font-style:italic"># exponent (not **)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sqrt(&lt;span style="color:#3677a9">9&lt;/span>) &lt;span style="color:#999;font-style:italic"># → 3.0 (Float64)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sqrt(&lt;span style="color:#6ab825;font-weight:bold">Complex&lt;/span>(-&lt;span style="color:#3677a9">1.0&lt;/span>)) &lt;span style="color:#999;font-style:italic"># need complex input for complex result&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>div(&lt;span style="color:#3677a9">8&lt;/span>, &lt;span style="color:#3677a9">5&lt;/span>) &lt;span style="color:#999;font-style:italic"># integer division → 1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#3677a9">8&lt;/span> ÷ &lt;span style="color:#3677a9">5&lt;/span> &lt;span style="color:#999;font-style:italic"># \div&amp;lt;tab&amp;gt;, same as div()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rem(&lt;span style="color:#3677a9">8&lt;/span>, &lt;span style="color:#3677a9">5&lt;/span>) &lt;span style="color:#999;font-style:italic"># remainder → 3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#3677a9">8&lt;/span> % &lt;span style="color:#3677a9">5&lt;/span> &lt;span style="color:#999;font-style:italic"># same as rem()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>abs(-&lt;span style="color:#3677a9">3&lt;/span>) &lt;span style="color:#999;font-style:italic"># absolute value&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="strings">Strings&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>s = &lt;span style="color:#ed9d13">&amp;#34;hello&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ed9d13">&amp;#34;&lt;/span>&lt;span style="color:#ed9d13">$s&lt;/span>&lt;span style="color:#ed9d13"> world&amp;#34;&lt;/span> &lt;span style="color:#999;font-style:italic"># interpolation&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ed9d13">&amp;#34;&lt;/span>&lt;span style="color:#ed9d13">$s&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;&lt;/span> * &lt;span style="color:#ed9d13">&amp;#34;!&amp;#34;&lt;/span> &lt;span style="color:#999;font-style:italic"># concatenation&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>length(s)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>uppercase(s)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>split(&lt;span style="color:#ed9d13">&amp;#34;a b c&amp;#34;&lt;/span>) &lt;span style="color:#999;font-style:italic"># → [&amp;#34;a&amp;#34;, &amp;#34;b&amp;#34;, &amp;#34;c&amp;#34;]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="functions">Functions&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Inline / anonymous&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f = x -&amp;gt; &lt;span style="color:#3677a9">2&lt;/span> * x
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>square = x -&amp;gt; x^&lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Short form&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(x) = &lt;span style="color:#3677a9">2&lt;/span> * x
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Full form (preferred for non-trivial logic)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> f(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#3677a9">2&lt;/span> * x
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Optional positional + keyword arguments&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># positional optional must come before keywords&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> f(x, y=&lt;span style="color:#3677a9">2&lt;/span>, z=&lt;span style="color:#3677a9">3&lt;/span>; a=&lt;span style="color:#3677a9">4.0&lt;/span>, b=&lt;span style="color:#3677a9">5.0&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println([x, y, z, a, b])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> x + y + z^a + b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(&lt;span style="color:#3677a9">1&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">10&lt;/span>, b=&lt;span style="color:#3677a9">173&lt;/span>, a=&lt;span style="color:#3677a9">77&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">4&lt;/span>, b=&lt;span style="color:#3677a9">173&lt;/span>) &lt;span style="color:#999;font-style:italic"># must specify y before z&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Splat a NamedTuple as keywords&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>opts = (a=&lt;span style="color:#3677a9">5.0&lt;/span>, b=&lt;span style="color:#3677a9">3.0&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">4&lt;/span>; opts...)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Pipe operator&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#3677a9">2&lt;/span> |&amp;gt; square &lt;span style="color:#999;font-style:italic"># → 4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Broadcast (element-wise)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sin.(&lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#3677a9">5&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@.&lt;/span> sin(&lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#3677a9">5&lt;/span>)^&lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#999;font-style:italic"># applies . to every operation&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="control-flow">Control Flow&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># if / elseif / else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> x &amp;gt; &lt;span style="color:#3677a9">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println(&lt;span style="color:#ed9d13">&amp;#34;positive&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">elseif&lt;/span> x == &lt;span style="color:#3677a9">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println(&lt;span style="color:#ed9d13">&amp;#34;zero&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println(&lt;span style="color:#ed9d13">&amp;#34;negative&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Ternary&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x &amp;gt; &lt;span style="color:#3677a9">0&lt;/span> ? &lt;span style="color:#ed9d13">&amp;#34;pos&amp;#34;&lt;/span> : &lt;span style="color:#ed9d13">&amp;#34;non-pos&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># for loop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#3677a9">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println(i)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># while loop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i = &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">while&lt;/span> i &amp;lt;= &lt;span style="color:#3677a9">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> i += &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># break / continue work as expected&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="arrays--vectors">Arrays &amp;amp; Vectors&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># 1D (column vector)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>v = [&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Row vector&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>r = [&lt;span style="color:#3677a9">1&lt;/span> &lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#3677a9">3&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Concatenation&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[v; v] &lt;span style="color:#999;font-style:italic"># vertical (append rows)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[r r] &lt;span style="color:#999;font-style:italic"># horizontal (append cols)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Constructors&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>zeros(&lt;span style="color:#3677a9">3&lt;/span>) &lt;span style="color:#999;font-style:italic"># [0.0, 0.0, 0.0]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ones(&lt;span style="color:#3677a9">3&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rand(&lt;span style="color:#3677a9">5&lt;/span>) &lt;span style="color:#999;font-style:italic"># uniform [0,1)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>randn(&lt;span style="color:#3677a9">5&lt;/span>) &lt;span style="color:#999;font-style:italic"># standard normal&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Ranges&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>r = &lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#3677a9">10&lt;/span> &lt;span style="color:#999;font-style:italic"># lazy range&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>r = range(&lt;span style="color:#3677a9">0.0&lt;/span>, &lt;span style="color:#3677a9">1.0&lt;/span>, length=&lt;span style="color:#3677a9">50&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>r = range(&lt;span style="color:#3677a9">0.0&lt;/span>, &lt;span style="color:#3677a9">1.0&lt;/span>, step=&lt;span style="color:#3677a9">0.1&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Comprehensions &amp;amp; generators&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>arr = [x^&lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> x &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#3677a9">10&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gen = (x^&lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> x &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#3677a9">10&lt;/span>) &lt;span style="color:#999;font-style:italic"># lazy, no memory allocation&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>collect(gen) &lt;span style="color:#999;font-style:italic"># materialize generator → array&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># similar / fill&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x1 = similar(arr)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>fill!(x1, &lt;span style="color:#24909d">π&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Useful operations&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>push!(v, &lt;span style="color:#3677a9">4&lt;/span>) &lt;span style="color:#999;font-style:italic"># append in-place&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pop!(v) &lt;span style="color:#999;font-style:italic"># remove last&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>append!(v, [&lt;span style="color:#3677a9">5&lt;/span>,&lt;span style="color:#3677a9">6&lt;/span>]) &lt;span style="color:#999;font-style:italic"># append multiple&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>length(v)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sum(v); prod(v); maximum(v); minimum(v)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Indexing (1-based)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>v[&lt;span style="color:#3677a9">1&lt;/span>] &lt;span style="color:#999;font-style:italic"># first element&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>v[&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>] &lt;span style="color:#999;font-style:italic"># last element&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>v[&lt;span style="color:#3677a9">2&lt;/span>:&lt;span style="color:#3677a9">4&lt;/span>] &lt;span style="color:#999;font-style:italic"># slice (returns copy)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>v[&lt;span style="color:#3677a9">2&lt;/span>:&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># eachindex — always prefer over 1:length(v)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># safe for any index type, offset arrays, etc.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> eachindex(v)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> v[i] *= &lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># iterate with both index and value&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (i, val) &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> enumerate(v)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println(&lt;span style="color:#ed9d13">&amp;#34;v[&lt;/span>&lt;span style="color:#ed9d13">$i&lt;/span>&lt;span style="color:#ed9d13">] = &lt;/span>&lt;span style="color:#ed9d13">$val&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># iterate two arrays together&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (a, b) &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> zip(v, w)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println(a + b)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Broadcast&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>v .^ &lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@.&lt;/span> sin(v)^&lt;span style="color:#3677a9">4&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="matrices">Matrices&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Literal syntax (spaces = cols, semicolons = rows)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>A = [&lt;span style="color:#3677a9">1&lt;/span> &lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#3677a9">3&lt;/span>; &lt;span style="color:#3677a9">4&lt;/span> &lt;span style="color:#3677a9">5&lt;/span> &lt;span style="color:#3677a9">6&lt;/span>] &lt;span style="color:#999;font-style:italic"># 2×3 matrix&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Column-based construction&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>A = [[&lt;span style="color:#3677a9">1&lt;/span>,&lt;span style="color:#3677a9">4&lt;/span>,&lt;span style="color:#3677a9">7&lt;/span>] [&lt;span style="color:#3677a9">2&lt;/span>,&lt;span style="color:#3677a9">5&lt;/span>,&lt;span style="color:#3677a9">8&lt;/span>] [&lt;span style="color:#3677a9">3&lt;/span>,&lt;span style="color:#3677a9">6&lt;/span>,&lt;span style="color:#3677a9">9&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># From reshape&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>A = reshape(&lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#3677a9">9&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>) &lt;span style="color:#999;font-style:italic"># NOTE: fills column-major&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Constructors&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>zeros(&lt;span style="color:#3677a9">3&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ones(&lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">4&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rand(&lt;span style="color:#3677a9">3&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>randn(&lt;span style="color:#3677a9">3&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">Matrix&lt;/span>{&lt;span style="color:#6ab825;font-weight:bold">Float64&lt;/span>}(&lt;span style="color:#24909d">undef&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>) &lt;span style="color:#999;font-style:italic"># uninitialized&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">Matrix&lt;/span>(I, &lt;span style="color:#3677a9">3&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>) &lt;span style="color:#999;font-style:italic"># identity (using LinearAlgebra)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Indexing&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>A[&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>] &lt;span style="color:#999;font-style:italic"># row 1, col 2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>A[:, &lt;span style="color:#3677a9">1&lt;/span>] &lt;span style="color:#999;font-style:italic"># entire first column&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>A[&lt;span style="color:#3677a9">1&lt;/span>, :] &lt;span style="color:#999;font-style:italic"># entire first row&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Transpose&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>A&amp;#39; &lt;span style="color:#999;font-style:italic"># adjoint (conjugate transpose)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>transpose(A) &lt;span style="color:#999;font-style:italic"># non-conjugate transpose&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Common operations (using LinearAlgebra)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">using&lt;/span> LinearAlgebra
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>A * B &lt;span style="color:#999;font-style:italic"># matrix multiply&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>A .* B &lt;span style="color:#999;font-style:italic"># element-wise multiply&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>inv(A)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tr(A) &lt;span style="color:#999;font-style:italic"># trace&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>diag(A) &lt;span style="color:#999;font-style:italic"># diagonal elements&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>det(A)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>norm(A)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>eigen(A) &lt;span style="color:#999;font-style:italic"># eigendecomposition → .values, .vectors&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>eigvals(A)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>eigvecs(A)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>svd(A) &lt;span style="color:#999;font-style:italic"># SVD&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Solve A*x = b&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>b = rand(&lt;span style="color:#3677a9">3&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x = A \ b
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="summation-patterns">Summation Patterns&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>N = &lt;span style="color:#3677a9">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Loop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ret = &lt;span style="color:#3677a9">0.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:N
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ret += &lt;span style="color:#3677a9">1&lt;/span> / i^&lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Array comprehension&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ret = sum([&lt;span style="color:#3677a9">1&lt;/span>/i^&lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:N])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Generator (no intermediate array allocated — preferred)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ret = sum(&lt;span style="color:#3677a9">1&lt;/span>/i^&lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:N)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Broadcast shorthand&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ret = sum(&lt;span style="color:#ffa500">@.&lt;/span> &lt;span style="color:#3677a9">1&lt;/span> / (&lt;span style="color:#3677a9">1&lt;/span>:N)^&lt;span style="color:#3677a9">2&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="recursion">Recursion&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Ternary (concise)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>fac(n) = n == &lt;span style="color:#3677a9">1&lt;/span> ? &lt;span style="color:#3677a9">1&lt;/span> : n * fac(n - &lt;span style="color:#3677a9">1&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Full form with type annotation&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> fac(n::&lt;span style="color:#6ab825;font-weight:bold">Int&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> n &amp;lt; &lt;span style="color:#3677a9">1&lt;/span> &amp;amp;&amp;amp; error(&lt;span style="color:#ed9d13">&amp;#34;n must be ≥ 1&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> n == &lt;span style="color:#3677a9">1&lt;/span> ? &lt;span style="color:#3677a9">1&lt;/span> : n * fac(n - &lt;span style="color:#3677a9">1&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Non-integer generalization: use gamma function&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">using&lt;/span> SpecialFunctions
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gamma(n + &lt;span style="color:#3677a9">1&lt;/span>) &lt;span style="color:#999;font-style:italic"># equals fac(n) for integer n&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="io">I/O&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># User input&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>s = readline()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x = parse(&lt;span style="color:#6ab825;font-weight:bold">Float64&lt;/span>, readline())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>n = parse(&lt;span style="color:#6ab825;font-weight:bold">Int&lt;/span>, readline())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># CSV (recommended for tabular data)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">using&lt;/span> CSV, DataFrames
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>df = DataFrame(rand(&lt;span style="color:#3677a9">10&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>), &lt;span style="color:#ed9d13">:auto&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CSV.write(&lt;span style="color:#ed9d13">&amp;#34;result.csv&amp;#34;&lt;/span>, df)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>df = DataFrame(CSV.File(&lt;span style="color:#ed9d13">&amp;#34;result.csv&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># CSV with options&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>df = DataFrame(CSV.File(&lt;span style="color:#ed9d13">&amp;#34;result.dat&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> comment=&lt;span style="color:#ed9d13">&amp;#34;#&amp;#34;&lt;/span>, delim=&lt;span style="color:#ed9d13">&amp;#34; &amp;#34;&lt;/span>, header=&lt;span style="color:#24909d">false&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># DelimitedFiles (lightweight, no DataFrame needed)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">using&lt;/span> DelimitedFiles
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Build data row-by-row (e.g. from a solver returning multiple outputs)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># _solver(x) returns a tuple/array; splat it with ...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data = []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> x_now &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> x_arr
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> entry = [x_now, _solver(x_now)...] &lt;span style="color:#999;font-style:italic"># flatten into one row&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> push!(data, entry&amp;#39;) &lt;span style="color:#999;font-style:italic"># push as row vector&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data = vcat(data...) &lt;span style="color:#999;font-style:italic"># stack into matrix&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>open(&lt;span style="color:#ed9d13">&amp;#34;result.dat&amp;#34;&lt;/span>, &lt;span style="color:#ed9d13">&amp;#34;w&amp;#34;&lt;/span>) &lt;span style="color:#6ab825;font-weight:bold">do&lt;/span> f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> write(f, &lt;span style="color:#ed9d13">&amp;#34;# x y z&lt;/span>&lt;span style="color:#ed9d13">\n&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> writedlm(f, data)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data2 = readdlm(&lt;span style="color:#ed9d13">&amp;#34;result.dat&amp;#34;&lt;/span>, comments=&lt;span style="color:#24909d">true&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># fetch columns by index&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xvec = data2[:, &lt;span style="color:#3677a9">1&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>yvec = data2[:, &lt;span style="color:#3677a9">2&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Load a Julia file&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>include(&lt;span style="color:#ed9d13">&amp;#34;./myfile.jl&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="plotting-plotsjl">Plotting (Plots.jl)&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">using&lt;/span> Plots
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x = range(&lt;span style="color:#3677a9">0&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>&lt;span style="color:#24909d">π&lt;/span>, length=&lt;span style="color:#3677a9">200&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>p = plot(x, sin.(x), label=&lt;span style="color:#ed9d13">&amp;#34;sin(x)&amp;#34;&lt;/span>, lw=&lt;span style="color:#3677a9">2&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>plot!(p, x, cos.(x), label=&lt;span style="color:#ed9d13">&amp;#34;cos(x)&amp;#34;&lt;/span>, linestyle=&lt;span style="color:#ed9d13">:dash&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xlabel!(&lt;span style="color:#ed9d13">&amp;#34;x&amp;#34;&lt;/span>); ylabel!(&lt;span style="color:#ed9d13">&amp;#34;y&amp;#34;&lt;/span>); title!(&lt;span style="color:#ed9d13">&amp;#34;Trig functions&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>savefig(p, &lt;span style="color:#ed9d13">&amp;#34;fig.png&amp;#34;&lt;/span>) &lt;span style="color:#999;font-style:italic"># or .pdf, .svg&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="introspection--performance">Introspection &amp;amp; Performance&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>methods(*) &lt;span style="color:#999;font-style:italic"># all methods for *&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>methods(*, [&lt;span style="color:#6ab825;font-weight:bold">Int&lt;/span>, &lt;span style="color:#6ab825;font-weight:bold">Int&lt;/span>]) &lt;span style="color:#999;font-style:italic"># filtered by types&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@less&lt;/span> &lt;span style="color:#3677a9">2&lt;/span> + &lt;span style="color:#3677a9">2.0&lt;/span> &lt;span style="color:#999;font-style:italic"># view source&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@code_llvm&lt;/span> &lt;span style="color:#3677a9">2&lt;/span> + &lt;span style="color:#3677a9">4.0&lt;/span> &lt;span style="color:#999;font-style:italic"># LLVM IR&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@code_native&lt;/span> &lt;span style="color:#3677a9">1&lt;/span> + &lt;span style="color:#3677a9">1&lt;/span> &lt;span style="color:#999;font-style:italic"># native assembly&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@time&lt;/span> f(x) &lt;span style="color:#999;font-style:italic"># time + allocations&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@allocated&lt;/span> f(x) &lt;span style="color:#999;font-style:italic"># allocations only&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@benchmark&lt;/span> f(x) &lt;span style="color:#999;font-style:italic"># (BenchmarkTools.jl)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="further-resources">Further Resources&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://docs.julialang.org/en/v1/">Julia Docs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://benlauwens.github.io/ThinkJulia.jl/latest/book.html">ThinkJulia&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://discourse.julialang.org/">Julia Discourse&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://juliaacademy.com/">Julia Academy&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title/><link>/mds/code_of_conduct/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/mds/code_of_conduct/</guid><description>
&lt;h1 id="contributor-covenant-code-of-conduct">Contributor Covenant Code of Conduct&lt;/h1>
&lt;h2 id="our-pledge">Our Pledge&lt;/h2>
&lt;p>In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.&lt;/p>
&lt;h2 id="our-standards">Our Standards&lt;/h2>
&lt;p>Examples of behavior that contributes to creating a positive environment
include:&lt;/p></description></item><item><title/><link>/setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/setup/</guid><description>
&lt;h1 id="setup-notes">setup notes&lt;/h1>
&lt;h1 id="preparation">preparation&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># at top folder&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hugo new site final
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#24909d">cd&lt;/span> final
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># install a theme&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git submodule add -f https://github.com/panr/hugo-theme-hello-friend.git themes/hello-friend
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># copy and paste config.toml and content from theme/hello-friend/exampleSite/ to the main directory&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># check the see the basics are working&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hugo version; hugo serve
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="fine-tune-the-configtoml-to-your-liking">fine tune the config.toml to your liking&lt;/h1>
&lt;h1 id="dealing-with-_indexmd-in-content">dealing with _index.md in /content/&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># put _index.md in /content/&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="hack-the-themehello-friendlayout_defaultbaseofhtml-into">hack the theme/hello-friend/layout/_default/baseof.html into&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-html" data-lang="html">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold">&amp;lt;!DOCTYPE html&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;&lt;span style="color:#6ab825;font-weight:bold">html&lt;/span> &lt;span style="color:#bbb">lang&lt;/span>=&lt;span style="color:#ed9d13">&amp;#34;{{ $.Site.Language }}&amp;#34;&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#6ab825;font-weight:bold">head&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ block &amp;#34;title&amp;#34; . }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#6ab825;font-weight:bold">title&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ if .IsHome }}{{ $.Site.Title }}{{ with $.Site.Params.Subtitle }} —
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ . }}{{ end }}{{ else }}{{ .Title }} ::
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ $.Site.Title }}{{ with $.Site.Params.Subtitle }} — {{ . }}{{ end }}{{ end }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/&lt;span style="color:#6ab825;font-weight:bold">title&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ end }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ partial &amp;#34;head.html&amp;#34; . }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/&lt;span style="color:#6ab825;font-weight:bold">head&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#6ab825;font-weight:bold">body&lt;/span> &lt;span style="color:#bbb">class&lt;/span>=&lt;span style="color:#ed9d13">&amp;#34;{{ if ne $.Site.Params.defaultTheme &amp;#34;&lt;/span>&lt;span style="color:#bbb">light&lt;/span>&lt;span style="color:#a61717;background-color:#e3d2d2">&amp;#34;&lt;/span> &lt;span style="color:#bbb">-&lt;/span>&lt;span style="color:#a61717;background-color:#e3d2d2">}}&lt;/span> &lt;span style="color:#bbb">dark-theme&lt;/span> &lt;span style="color:#a61717;background-color:#e3d2d2">{{&lt;/span>&lt;span style="color:#bbb">-&lt;/span> &lt;span style="color:#bbb">end&lt;/span> &lt;span style="color:#bbb">-&lt;/span>&lt;span style="color:#a61717;background-color:#e3d2d2">}}&amp;#34;&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#6ab825;font-weight:bold">div&lt;/span> &lt;span style="color:#bbb">class&lt;/span>=&lt;span style="color:#ed9d13">&amp;#34;container&amp;#34;&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ partial &amp;#34;header.html&amp;#34; . }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#6ab825;font-weight:bold">div&lt;/span> &lt;span style="color:#bbb">class&lt;/span>=&lt;span style="color:#ed9d13">&amp;#34;post&amp;#34;&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ .Content }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/&lt;span style="color:#6ab825;font-weight:bold">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ block &amp;#34;footer&amp;#34; . }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ partial &amp;#34;footer.html&amp;#34; . }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ end }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/&lt;span style="color:#6ab825;font-weight:bold">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ if $.Site.GoogleAnalytics }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ template &amp;#34;_internal/google_analytics.html&amp;#34; . }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ end }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/&lt;span style="color:#6ab825;font-weight:bold">body&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;/&lt;span style="color:#6ab825;font-weight:bold">html&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that the &amp;ldquo;.Content&amp;rdquo; part is the key. Then save it as index.html in /layout/&lt;/p></description></item><item><title>cheatsheet</title><link>/mds/cheatsheet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/mds/cheatsheet/</guid><description>
&lt;h1 id="julia-basic-usage">Julia basic usage&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># using package&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">using&lt;/span> LinearAlgebra
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">using&lt;/span> Plots
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># assign variables&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x = &lt;span style="color:#3677a9">55699&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x = &lt;span style="color:#3677a9">1&lt;/span> + &lt;span style="color:#3677a9">1&lt;/span> * &lt;span style="color:#24909d">im&lt;/span> &lt;span style="color:#999;font-style:italic"># complex number&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x = [&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>] &lt;span style="color:#999;font-style:italic"># mutable list&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x = [&lt;span style="color:#3677a9">1&lt;/span> &lt;span style="color:#3677a9">2&lt;/span>; &lt;span style="color:#3677a9">3&lt;/span> &lt;span style="color:#3677a9">4&lt;/span>] &lt;span style="color:#999;font-style:italic"># matrix&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#3677a9">2.0&lt;/span>^&lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#999;font-style:italic"># not **&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sqrt(&lt;span style="color:#3677a9">9&lt;/span>) &lt;span style="color:#999;font-style:italic"># give Float64&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sqrt(-&lt;span style="color:#3677a9">1&lt;/span>) &lt;span style="color:#999;font-style:italic"># give error&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sqrt(-&lt;span style="color:#3677a9">1.0&lt;/span> + &lt;span style="color:#3677a9">0.0&lt;/span> * &lt;span style="color:#24909d">im&lt;/span>) &lt;span style="color:#999;font-style:italic"># need complex number input to get complex result&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># ? to get help&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># ] to enter pkg mode&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># add QuadGK&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># ; to enter shell&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># include(&amp;#34;./myfile.jl&amp;#34;) to load a file&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># divisor and remainder&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>div(&lt;span style="color:#3677a9">8&lt;/span>,&lt;span style="color:#3677a9">5&lt;/span>) &lt;span style="color:#999;font-style:italic"># should be 1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#3677a9">8&lt;/span> ÷ &lt;span style="color:#3677a9">5&lt;/span> &lt;span style="color:#999;font-style:italic"># \div&amp;lt;tab&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rem(&lt;span style="color:#3677a9">8&lt;/span>,&lt;span style="color:#3677a9">5&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#3677a9">8&lt;/span> % &lt;span style="color:#3677a9">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># function:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f = x -&amp;gt; &lt;span style="color:#3677a9">2&lt;/span> * x &lt;span style="color:#999;font-style:italic"># in-line&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># or&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(x) = &lt;span style="color:#3677a9">2&lt;/span> * x &lt;span style="color:#999;font-style:italic"># lousy&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># best&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> f(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#3677a9">2&lt;/span>*x
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># general way to construct a function&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># std. form&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> f(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ret = &lt;span style="color:#3677a9">2&lt;/span> * x
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> ret
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># with optional arguments &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># required, optional + sequential; optional keywords (arbitrary order)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> f(x, y = &lt;span style="color:#3677a9">2&lt;/span>, z = &lt;span style="color:#3677a9">3&lt;/span>; a = &lt;span style="color:#3677a9">4.0&lt;/span>, b = &lt;span style="color:#3677a9">5.0&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ret = x + y + z^a + b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println([x, y, z, a, b])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> ret
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(&lt;span style="color:#3677a9">1&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">10&lt;/span>, b = &lt;span style="color:#3677a9">173&lt;/span>, a = &lt;span style="color:#3677a9">77&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># have to specify y before we can specify z&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">4&lt;/span>, b = &lt;span style="color:#3677a9">173&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># use of NamedTuples&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>options = (a=&lt;span style="color:#3677a9">5.0&lt;/span>, b=&lt;span style="color:#3677a9">3.0&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">4&lt;/span>; options...)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># evaluate a function&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f = x-&amp;gt;x^&lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(&lt;span style="color:#3677a9">2&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># pipe it&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#3677a9">2&lt;/span> |&amp;gt; f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rand() &lt;span style="color:#999;font-style:italic"># uniform, 0 to 1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rand(&lt;span style="color:#3677a9">10&lt;/span>) &lt;span style="color:#999;font-style:italic"># array of 10 random number&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rand(&lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>) &lt;span style="color:#999;font-style:italic"># 2 x 2 random matrix (real)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>zeros(x) &lt;span style="color:#999;font-style:italic"># suitable zero for the variable type of x&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ones(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># code internal: multiple dispatch and type stability&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>methods(*, [&lt;span style="color:#6ab825;font-weight:bold">Int&lt;/span>, &lt;span style="color:#6ab825;font-weight:bold">Int&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@less&lt;/span> &lt;span style="color:#3677a9">2&lt;/span> + &lt;span style="color:#3677a9">2.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@code_llvm&lt;/span> &lt;span style="color:#3677a9">2&lt;/span> + &lt;span style="color:#3677a9">4.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@code_native&lt;/span> &lt;span style="color:#3677a9">1&lt;/span> + &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># check type&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>typeof(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>eltype(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># arrays and generators&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>N = &lt;span style="color:#3677a9">50&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xmin = &lt;span style="color:#3677a9">0.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xmax = &lt;span style="color:#3677a9">1.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xarr = [xmin + (i1 - &lt;span style="color:#3677a9">1&lt;/span>) * (xmax - xmin) / (N - &lt;span style="color:#3677a9">1&lt;/span>) &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:N]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># create an array with similar dimension and fill it with values&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x1arr = similar(xarr)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>fill!(x1arr, &lt;span style="color:#24909d">pi&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># similar construction but with a generator (iterator)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xarr = range(&lt;span style="color:#3677a9">0.0&lt;/span>, &lt;span style="color:#3677a9">1.0&lt;/span>, length = &lt;span style="color:#3677a9">50&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xarr = range(&lt;span style="color:#3677a9">0.0&lt;/span>, &lt;span style="color:#3677a9">1.0&lt;/span>, step = &lt;span style="color:#3677a9">1&lt;/span>/&lt;span style="color:#3677a9">49&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gen = (x^&lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> x &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> xarr)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># convert a generator to an array&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xarr = collect(gen)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># &amp;#34;.&amp;#34; operation: on each element&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xarr .^ &lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sin.(xarr)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># more convenient&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@.&lt;/span> sin(xarr)^&lt;span style="color:#3677a9">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[sin(xx)^&lt;span style="color:#3677a9">4&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> xx &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> range(&lt;span style="color:#3677a9">0.0&lt;/span>, &lt;span style="color:#3677a9">1.0&lt;/span>, length = &lt;span style="color:#3677a9">50&lt;/span>)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># summation&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># by standard loop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>N = &lt;span style="color:#3677a9">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ret = &lt;span style="color:#3677a9">0.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:N
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ret += &lt;span style="color:#3677a9">1&lt;/span> / i1^&lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># with list&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ret = sum([&lt;span style="color:#3677a9">1&lt;/span> / i1^&lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:N])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># really condensed notation&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ret = sum(&lt;span style="color:#ffa500">@.&lt;/span> &lt;span style="color:#3677a9">1&lt;/span> / (&lt;span style="color:#3677a9">1&lt;/span>:N)^&lt;span style="color:#3677a9">2&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># cool way to write recursive function&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># 3-way if statement&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>fac(N) = N == &lt;span style="color:#3677a9">1&lt;/span> ? &lt;span style="color:#3677a9">1&lt;/span> : N * fac(N - &lt;span style="color:#3677a9">1&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> fac1(N::&lt;span style="color:#6ab825;font-weight:bold">Int&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> N == &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ret = &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ret = N * fac1(N - &lt;span style="color:#3677a9">1&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> ret
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># what if N is not an integer?&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">using&lt;/span> SpecialFunctions
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gamma(N + &lt;span style="color:#3677a9">1&lt;/span>) &lt;span style="color:#999;font-style:italic"># :D&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>methods(gamma)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># list construction&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data = []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#3677a9">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> push!(data, i1)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data = [x &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> x &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#3677a9">10&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># matrix operation&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x = [&lt;span style="color:#3677a9">1&lt;/span> &lt;span style="color:#3677a9">2&lt;/span>; &lt;span style="color:#3677a9">3&lt;/span> &lt;span style="color:#3677a9">4&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>y = rand(&lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x * y
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>inv(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sqrt(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>exp(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>log(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tr(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>diag(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>eigen(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>eigvals(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>eigvecs(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># A * x = b&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>A = rand(&lt;span style="color:#3677a9">2&lt;/span>,&lt;span style="color:#3677a9">2&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>b = rand(&lt;span style="color:#3677a9">2&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>A \ b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># asking user for input&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>char = readline()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ff = parse(&lt;span style="color:#6ab825;font-weight:bold">Float64&lt;/span>, readline())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i1 = parse(&lt;span style="color:#6ab825;font-weight:bold">Int&lt;/span>, readline())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># simple I/O (write to &amp;amp; read from file)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># prepare your data in whatever way&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># e.g. 10 rows, 3 columns&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>df = DataFrame(rand(&lt;span style="color:#3677a9">10&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>), &lt;span style="color:#ed9d13">:auto&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># DataFrames &amp;amp; CSV (recommended)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">using&lt;/span> CSV
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># to write&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CSV.write(&lt;span style="color:#ed9d13">&amp;#34;result.dat&amp;#34;&lt;/span>, df)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># to read&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>df = CSV.File(&lt;span style="color:#ed9d13">&amp;#34;result.dat&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># nice looking dataset&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>df
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>push!(df, [&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>df.x1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>df.x2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># in REPL, ; to shell for further manipulation of the datafile.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># useful options: &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># comment with #, spaces as delimiters, no header, etc.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dataf = CSV.File(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ed9d13">&amp;#34;result.dat&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> comment = &lt;span style="color:#ed9d13">&amp;#34;#&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> delim = &lt;span style="color:#ed9d13">&amp;#34; &amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> header = &lt;span style="color:#24909d">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># DelimitedFiles&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># see delimited files https://docs.julialang.org/en/v1/stdlib/DelimitedFiles/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">using&lt;/span> DelimitedFiles
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># to write&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f(x, y) = x * y
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data = []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#3677a9">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x = i1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> y = rand()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> push!(data, [x, y, f(x, y)]&amp;#39;) &lt;span style="color:#999;font-style:italic"># entry as column then transposed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># push!(data, [x y f(x, y)]) # entry as row&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data = vcat(data...) &lt;span style="color:#999;font-style:italic"># turn data into a matrix&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># to get the 2nd column&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data[:, &lt;span style="color:#3677a9">2&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>filename = &lt;span style="color:#ed9d13">&amp;#34;result.dat&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>open(filename, &lt;span style="color:#ed9d13">&amp;#34;w&amp;#34;&lt;/span>) &lt;span style="color:#6ab825;font-weight:bold">do&lt;/span> f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Base.write(f, &lt;span style="color:#ed9d13">&amp;#34;# some captions &lt;/span>&lt;span style="color:#ed9d13">\n&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> writedlm(f, data)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># to read, comments like #... are ignored&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>file = filename
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data2 = readdlm(file, comments = &lt;span style="color:#24909d">true&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data2 == data
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># to fetch, e.g. xvec&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xvec = data[:, &lt;span style="color:#3677a9">1&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># quick plot&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rval = &lt;span style="color:#3677a9">2.5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>p1 = plot(xarr, x -&amp;gt; x^&lt;span style="color:#3677a9">2&lt;/span>, label=&lt;span style="color:#ed9d13">&amp;#34;r=&lt;/span>&lt;span style="color:#ed9d13">$rval&lt;/span>&lt;span style="color:#ed9d13">, &lt;/span>&lt;span style="color:#ed9d13">\\&lt;/span>&lt;span style="color:#ed9d13">alpha is alpha&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title(&lt;span style="color:#ed9d13">&amp;#34;title of plot&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>legend([&lt;span style="color:#ed9d13">&amp;#34;line 1&amp;#34;&lt;/span>, &lt;span style="color:#ed9d13">&amp;#34;line 2&amp;#34;&lt;/span>], &lt;span style="color:#ed9d13">&amp;#34;northwest&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>savefig(p1, &lt;span style="color:#ed9d13">&amp;#34;fig.png&amp;#34;&lt;/span>) &lt;span style="color:#999;font-style:italic"># or pdf&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># ways to get the same matrix&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mat1 = [&lt;span style="color:#3677a9">1&lt;/span> &lt;span style="color:#3677a9">2&lt;/span> &lt;span style="color:#3677a9">3&lt;/span>; &lt;span style="color:#3677a9">4&lt;/span> &lt;span style="color:#3677a9">5&lt;/span> &lt;span style="color:#3677a9">6&lt;/span>; &lt;span style="color:#3677a9">7&lt;/span> &lt;span style="color:#3677a9">8&lt;/span> &lt;span style="color:#3677a9">9&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mat1[&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># column based thinking&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mat2 = [[&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">4&lt;/span>, &lt;span style="color:#3677a9">7&lt;/span>] [&lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">5&lt;/span>, &lt;span style="color:#3677a9">8&lt;/span>] [&lt;span style="color:#3677a9">3&lt;/span>, &lt;span style="color:#3677a9">6&lt;/span>, &lt;span style="color:#3677a9">9&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># reshape&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mat3 = [i1 &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#3677a9">9&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mat3 = reshape(mat3, (&lt;span style="color:#3677a9">3&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mat3&amp;#39;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># eachindex&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xv = range(&lt;span style="color:#3677a9">0&lt;/span>, &lt;span style="color:#3677a9">1&lt;/span>, lenght=&lt;span style="color:#3677a9">250&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ret = &lt;span style="color:#3677a9">0.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> eachindex(xv)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ret += xv[i1]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="further-resources">further resources&lt;/h1>
&lt;ul>
&lt;li>&lt;a href="https://docs.julialang.org/en/v1/">Julia Docs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://benlauwens.github.io/ThinkJulia.jl/latest/book.html">ThinkJulia&lt;/a>&lt;/li>
&lt;li>&lt;a href="./julia/">resources&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Fall 2026 (on-going)</title><link>/lecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/lecture/</guid><description>
&lt;h1 id="python--julia--programming-basics">Python / Julia / Programming Basics&lt;/h1>
&lt;ul>
&lt;li>&lt;a href="./lessons/babysteps.html">baby steps&lt;/a>&lt;/li>
&lt;li>&lt;a href="./lessons/logistic_map.html">logistic map&lt;/a>&lt;/li>
&lt;/ul>
&lt;h1 id="differential-equations-i">Differential Equations I&lt;/h1>
&lt;ul>
&lt;li>&lt;a href="./plutofiles/ode01.jl.html">differential equation 01&lt;/a>&lt;/li>
&lt;li>&lt;a href="./lessons/lorenz_attractor.html">Lorenz model&lt;/a>&lt;/li>
&lt;li>&lt;a href="./lessons/pendulum.html">pendulum model&lt;/a>&lt;/li>
&lt;/ul>
&lt;h1 id="solution-to-schroedinger-equations">Solution to Schroedinger equations&lt;/h1>
&lt;ul>
&lt;li>&lt;a href="./plutofiles/SEsolver01.jl.html">Schroedinger Eqn. 01&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/SEsolver02.jl.html">Schroedinger Eqn. 02&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/SEsolver03.jl.html">periodic potentials&lt;/a>&lt;/li>
&lt;/ul>
&lt;!-- raw HTML omitted -->
&lt;!-- raw HTML omitted -->
&lt;h1 id="homeworks">Homeworks&lt;/h1>
&lt;p>(please attach the source files of programs)&lt;/p>
&lt;ul>
&lt;li>&lt;a href="./hw/hw01.pdf">hw01&lt;/a>; &lt;a href="./">grade&lt;/a>&lt;/li>
&lt;/ul>
&lt;!-- raw HTML omitted -->
&lt;!-- raw HTML omitted -->
&lt;h1 id="miniproject">miniProject&lt;/h1>
&lt;ul>
&lt;li>&lt;a href="./hw/project.pdf">project guide&lt;/a>&lt;/li>
&lt;/ul>
&lt;h1 id="stacks">stacks&lt;/h1>
&lt;ul>
&lt;li>&lt;a href="./mds/plutolist/">list of Pluto files&lt;/a>&lt;/li>
&lt;li>&lt;a href="./lessons/adaptive_simpson.html">adaptive Simpson&amp;rsquo;s rule&lt;/a>&lt;/li>
&lt;li>&lt;a href="./lessons/GaussianIntegrals.html">gaussian integrals&lt;/a>&lt;/li>
&lt;li>&lt;a href="./lessons/Vandermonde.html">Vandermonde&lt;/a>&lt;/li>
&lt;li>&lt;a href="./lessons/companion_matrix.html">Companion Matrix&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Julia: tips and tricks</title><link>/julia/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/julia/</guid><description>
&lt;h2 id="install-juliahttpsjulialangorgdownloads-via-juliaup">&lt;a href="https://julialang.org/downloads/">install Julia&lt;/a> via juliaup&lt;/h2>
&lt;pre tabindex="0">&lt;code class="language-unix" data-lang="unix">curl -fsSL https://install.julialang.org | sh
&lt;/code>&lt;/pre>&lt;h2 id="new-to-julia-look-at-the-cheatsheetjulia_cheatsheet">New to Julia? Look at the &lt;a href="./julia_cheatsheet/">cheatsheet&lt;/a>&lt;/h2>
&lt;h2 id="veteran-looking-for-challenges-check-it-outplutofilesisingfasthtml">Veteran looking for challenges? &lt;a href="./plutofiles/isingfast.html">check it out&lt;/a>&lt;/h2>
&lt;h2 id="python-remindermdspython">&lt;a href="./mds/python/">python reminder&lt;/a>&lt;/h2>
&lt;h2 id="many-ways-to-loop">many ways to loop&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:N1, i2 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:N2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># do something for mat[i1, i2]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># col. major, faster&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i2 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:N2, i1 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#3677a9">1&lt;/span>:N1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># do something for mat[i1, i2]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sites = Base.product(&lt;span style="color:#3677a9">1&lt;/span>:N1, &lt;span style="color:#3677a9">1&lt;/span>:N2)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> site &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> sites
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> i1, i2 = site
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># do something&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="no-more-side-effect">no more side effect&lt;/h2>
&lt;p>try the following code&lt;/p></description></item><item><title>Linux</title><link>/mds/linux/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/mds/linux/</guid><description>
&lt;h1 id="useful-stuffs">useful stuffs&lt;/h1>
&lt;h2 id="shortcuts-for-shell">shortcuts for shell&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>ctrl + k: cut from here to end&lt;/p>
&lt;/li>
&lt;li>
&lt;p>ctrl + u: cut from here to start&lt;/p>
&lt;/li>
&lt;li>
&lt;p>ctrl + y: yank it&lt;/p>
&lt;/li>
&lt;li>
&lt;p>ctrl + a: jump to the beginning&lt;/p>
&lt;/li>
&lt;li>
&lt;p>ctrl + e: jump to the end&lt;/p>
&lt;/li>
&lt;li>
&lt;p>ctrl + p: (p)revious line&lt;/p>
&lt;/li>
&lt;li>
&lt;p>ctrl + n: (n)ext line&lt;/p>
&lt;/li>
&lt;li>
&lt;p>sudo !!: sudo the last command&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://youtu.be/V8EUdia_kOE">see tutoriaLinux for more&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>List of Pluto files</title><link>/mds/plutolist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/mds/plutolist/</guid><description>
&lt;p>This list keeps expanding
(Caution: sliders will not work in the html version. Run them locally.)&lt;/p>
&lt;ul>
&lt;li>&lt;a href="./plutofiles/angular01.jl.html">angular01.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/angular02.jl.html">angular02.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/ant_colony.jl.html">ant_colony.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/bag_model.jl.html">bag_model.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/chebyshev.jl.html">chebyshev.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/csdiff.jl.html">csdiff.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/Dalitz.jl.html">Dalitz.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/electron_gas.jl.html">electron gas&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/euler.jl.html">euler.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/fast.jl.html">fast.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/fourier.jl.html">fourier.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/fractal.jl.html">fractal.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/gaussian_integral.jl.html">gaussian_integral.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/ising01.jl.html">ising01.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/ising02.jl.html">ising02.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/ising03.jl.html">ising03.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/isingfast.html">isingfast.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/iter01.jl.html">iter01.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/iter02.jl.html">iter02.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/jlang_feature1.jl.html">jlang_feature1.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/jlang_feature2.jl.html">jlang_feature2.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/LagrangeMultiplier.jl.html">LagrangeMultiplier.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/lambert.jl.html">lambert.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/legendre2.jl.html">legendre2.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/LieAlg.jl.html">LieAlg.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/logistic_map.html">logistic_map.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/markov.jl.html">markov.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/matsubara.jl.html">matsubara.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/mc01.jl.html">mc01.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/mc02.jl.html">mc02.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/mc03.jl.html">mc03.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/ode01.jl.html">ode01.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/pack_use.jl.html">pack_use.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/path_integral.jl.html">path_integral.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/PhaseSpace.jl.html">PhaseSpace.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/pi_estimate.jl.html">pi_estimate.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/qr.jl.html">qr.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/resonance.jl.html">resonance.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/resolvent.jl.html">resolvent.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/salesman.jl.html">salesman.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/scattering01.jl.html">scattering01.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/scattering02.jl.html">scattering02.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/schwinger.jl.html">schwinger.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/SEsolver01.jl.html">SEsolver01.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/SEsolver02.jl.html">SEsolver02.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/SEsolver03.jl.html">SEsolver03.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/sho.jl.html">sho.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/shuffle.jl.html">shuffle.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/ssb.jl.html">ssb.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/ssb2.jl.html">ssb2.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/vdw.jl.html">vdw.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/warmup.jl.html">warmup.jl.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="./plutofiles/zeta.jl.html">zeta.jl.html&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>NumQM2021</title><link>/mds/readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/mds/readme/</guid><description>
&lt;h1 id="exploring-quantum-many-body-systems-with-modern-numerical-tools">Exploring Quantum Many Body Systems with Modern Numerical Tools&lt;/h1>
&lt;h2 id="instructor">Instructor&lt;/h2>
&lt;ul>
&lt;li>Pok Man Lo&lt;/li>
&lt;li>428 Institute of Theoretical Physics, University of Wroclaw&lt;/li>
&lt;li>&lt;a href="mailto:pokman.lo@uwr.edu.pl">pokman.lo@urw.edu.pl&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://pmloop.github.io/NumQM2021/">course website&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/pmloop/NumQM2021">github pages&lt;/a>&lt;/li>
&lt;li>consultation hours:
Mon 1500-1600
Wed 1500-1700&lt;/li>
&lt;/ul>
&lt;h2 id="course-description">Course Description&lt;/h2>
&lt;p>This is a graduate course on applying numerical method to study aspects of quantum many body problems. It aims to develop or reinforce programming skills, numerical analysis skills, familiarity with some important problems in quantum many body physics, and their methods of solution.&lt;/p></description></item><item><title>python reminder</title><link>/mds/python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/mds/python/</guid><description>
&lt;h2 id="generator-for-integrals">generator for integrals&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>inte = &lt;span style="color:#24909d">sum&lt;/span>(f(xvec) * xweight)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>is much faster than&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>inte = &lt;span style="color:#3677a9">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1, xval &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#24909d">enumerate&lt;/span>(xvec):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> inte += f(xval) * xweight[i1]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="generator-for-nested-sum">generator for nested sum&lt;/h2>
&lt;p>cast a nested sum into one big iterator:&lt;/p>
&lt;ul>
&lt;li>simple case:&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>N1 = &lt;span style="color:#3677a9">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>N2 = &lt;span style="color:#3677a9">8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>p1_arr = np.linspace(&lt;span style="color:#3677a9">0.8&lt;/span>, &lt;span style="color:#3677a9">1.2&lt;/span>, N1)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>p2_arr = np.linspace(&lt;span style="color:#3677a9">3.8&lt;/span>, &lt;span style="color:#3677a9">4.5&lt;/span>, N2)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grid = (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (i1, i2)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#24909d">range&lt;/span>(N1) &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i2 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#24909d">range&lt;/span>(N2)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ans = (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> _f(p1_arr[i1], p2_arr[i2])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1, i2 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> grid
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ans = &lt;span style="color:#24909d">sum&lt;/span>(ans)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>further processing:&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>N1 = &lt;span style="color:#3677a9">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>N2 = &lt;span style="color:#3677a9">80&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>para1_arr = np.linspace(&lt;span style="color:#3677a9">0.8&lt;/span>, &lt;span style="color:#3677a9">1.2&lt;/span>, N1)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>para2_arr = np.linspace(&lt;span style="color:#3677a9">3.6&lt;/span>, &lt;span style="color:#3677a9">4.0&lt;/span>, N2)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grid = (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (i1, i2)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#24909d">range&lt;/span>(N1) &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i2 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#24909d">range&lt;/span>(N2)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pool = [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [fitfunc([para1_arr[i1], para2_arr[i2]]), i1, i2]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> i1, i2 &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> grid
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pool = np.array(pool).T
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>_ii = np.argmin(pool[&lt;span style="color:#3677a9">0&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i1, i2 = &lt;span style="color:#24909d">int&lt;/span>(pool[&lt;span style="color:#3677a9">1&lt;/span>][_ii]), &lt;span style="color:#24909d">int&lt;/span>(pool[&lt;span style="color:#3677a9">2&lt;/span>][_ii])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#24909d">print&lt;/span>(para1_arr[i1], para2_arr[i2])
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="passing-tuple-as-index-for-array">passing tuple as index for array&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>lat[&lt;span style="color:#24909d">tuple&lt;/span>([*xvec, d])]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>lat[xvec[&lt;span style="color:#3677a9">0&lt;/span>], xvec[&lt;span style="color:#3677a9">1&lt;/span>], xvec[&lt;span style="color:#3677a9">2&lt;/span>], xvec[&lt;span style="color:#3677a9">3&lt;/span>], d]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="data-stacking">data stacking&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>data = vstack((data, new_col))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="filename-versioning">filename versioning&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>filename=&lt;span style="color:#ed9d13">f&lt;/span>&lt;span style="color:#ed9d13">&amp;#39;file_&lt;/span>&lt;span style="color:#ed9d13">{&lt;/span>&lt;span style="color:#24909d">int&lt;/span>(num)&lt;span style="color:#ed9d13">:&lt;/span>&lt;span style="color:#ed9d13">03&lt;/span>&lt;span style="color:#ed9d13">}&lt;/span>&lt;span style="color:#ed9d13">&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="watch-out-for-side-effects">watch out for side effects&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">import&lt;/span> &lt;span style="color:#447fcf;text-decoration:underline">numpy&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">as&lt;/span> &lt;span style="color:#447fcf;text-decoration:underline">np&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># test 1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xarr = [&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>yarr = [&lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">4&lt;/span>, &lt;span style="color:#3677a9">6&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>a = xarr
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>a += yarr
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Guess what xarr becomes now?&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># test 2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>xarr = np.array([&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">3&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>yarr = np.array([&lt;span style="color:#3677a9">2&lt;/span>, &lt;span style="color:#3677a9">4&lt;/span>, &lt;span style="color:#3677a9">6&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>a = xarr
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>a += yarr
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># Guess what xarr becomes now?&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This can be a hard bug to track down!&lt;/p></description></item><item><title>Resources</title><link>/resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/resources/</guid><description>
&lt;h2 id="free-lunch">Free Lunch&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://www.youtube.com/watch?v=xvFZjo5PgG0">How to instantly understand QCD and non-perturbative QFT&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.youtube.com/watch?v=xvFZjo5PgG0">Can you do the programming stuffs without the physics?&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.youtube.com/watch?v=xvFZjo5PgG0">Can you do the physics stuffs without the numerical things?&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.youtube.com/watch?v=xvFZjo5PgG0">Can you stop the Rickrolling?&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="fools-collection">Fool&amp;rsquo;s collection&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://www.cefns.nau.edu/~schulz/fool.pdf?">Fool&amp;rsquo;s rule&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="physics">Physics&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="http://fafnir.phyast.pitt.edu/CompPhys/index.html">Computational Physics @ Pitt&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://inspirehep.net">inspirehep.net&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://pdg.lbl.gov/index.html">Particle Data Group&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.reed.edu/physics/faculty/wheeler/documents/index.html">Nicholas Wheeler QM notes&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="http://chaosbook.org/FieldTheory">QFT notes (most of the stuffs we do in a QM class has nothing specifically quantum mechanical to it.)&lt;/a>&lt;/p></description></item><item><title>Student Research Projects</title><link>/projects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/projects/</guid><description>
&lt;p>(come and ask!)&lt;/p>
&lt;h2 id="gluons-in-dense-matter">Gluons in Dense Matter&lt;/h2>
&lt;h2 id="lattice-qcd-with-julia">Lattice QCD with Julia&lt;/h2>
&lt;h2 id="confinement-models-of-quarks-and-gluons">Confinement Models of Quarks and Gluons&lt;/h2>
&lt;ul>
&lt;li>explore various ways to model confinement&lt;/li>
&lt;li>color group structure&lt;/li>
&lt;/ul>
&lt;h2 id="scattering-theory-and-quark-hadron-duality">Scattering Theory and Quark Hadron Duality&lt;/h2>
&lt;ul>
&lt;li>the roles of quarks and gluons in hadron phenomenology&lt;/li>
&lt;li>VMD in chiral quark models&lt;/li>
&lt;li>manifestations of chiral symmetry&lt;/li>
&lt;/ul>
&lt;h2 id="hadron-yields-in-heavy-ion-collisions">Hadron Yields in Heavy Ion Collisions&lt;/h2>
&lt;ul>
&lt;li>the Hadron Resonance Gas Model and working towards its improvement&lt;/li>
&lt;li>kinetic theory from field theory&lt;/li>
&lt;li>in-medium hadron masses from S-matrix&lt;/li>
&lt;/ul>
&lt;h2 id="aspects-of-constituent-quark-models">Aspects of Constituent Quark Models&lt;/h2>
&lt;ul>
&lt;li>quarkonia and tetraquarks&lt;/li>
&lt;li>form factors, decays, and mixing&lt;/li>
&lt;li>coupled-channel model&lt;/li>
&lt;/ul>
&lt;h2 id="non-perturbative-field-theory">Non-perturbative field theory&lt;/h2>
&lt;ul>
&lt;li>Schwinger Dyson equations in Minkowski space&lt;/li>
&lt;li>effects of boundary conditions&lt;/li>
&lt;/ul>
&lt;h2 id="topics-in-quantum-mechanics">Topics in Quantum Mechanics&lt;/h2>
&lt;ul>
&lt;li>supersymmetric quantum mechanics&lt;/li>
&lt;li>path integral&lt;/li>
&lt;li>&lt;a href="./Emilia.pdf">Emilia&amp;rsquo;s notes&lt;/a>&lt;/li>
&lt;li>constituent quark model&lt;/li>
&lt;/ul></description></item><item><title>Syllabus</title><link>/syllabus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/syllabus/</guid><description>
&lt;h1 id="numerical-methods-for-babies">Numerical methods for Babies&lt;/h1>
&lt;p>In this course the programming language of choice is Julia. (As interactive as Python, but as fast as C.) No previous experience with Julia is assumed and we will pick up the syntaxes along the way. Of course, some familiarity with at least one programming language (Python, C, C++, Fortran, etc.) would be a big plus.&lt;/p>
&lt;h1 id="topics">Topics&lt;/h1>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;h2 id="gentle-introduction-to-julia-language">Gentle introduction to Julia language&lt;/h2>
&lt;ul>
&lt;li>REPL, Pluto / Jupyter NoteBooks, and Scripts&lt;/li>
&lt;li>program flow, style guide&lt;/li>
&lt;li>basic data types, struct, etc.&lt;/li>
&lt;li>mutables and immutables: arrays, tuples&lt;/li>
&lt;li>iterators and generators&lt;/li>
&lt;li>scope and typeof&lt;/li>
&lt;li>type instability&lt;/li>
&lt;li>tips on writing efficient code&lt;/li>
&lt;/ul>
&lt;h2 id="basic-skills-of-applied-computational-physics">Basic skills of applied computational physics&lt;/h2>
&lt;ul>
&lt;li>integration: Gaussian quadrature&lt;/li>
&lt;li>differentiation: finite difference, complex-step, ect.&lt;/li>
&lt;li>linear algebra&lt;/li>
&lt;li>differential equations&lt;/li>
&lt;li>minimization&lt;/li>
&lt;/ul>
&lt;h2 id="introduction-to-monte-carlo-methods">Introduction to Monte Carlo Methods&lt;/h2>
&lt;h2 id="ising-model">Ising model&lt;/h2>
&lt;h2 id="simulating-a-pure-gauge-system">Simulating a Pure Gauge System&lt;/h2>
&lt;h2 id="basic-machine-learning">Basic Machine learning&lt;/h2></description></item><item><title>Z2 gauge theory</title><link>/mds/z2_babel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>noreply@numqm.local (Pok Man Lo)</author><guid>/mds/z2_babel/</guid><description>
&lt;h1 id="sample-code-to-study-z2-gauge-theory">Sample code to study Z2 gauge theory&lt;/h1>
&lt;h2 id="julia">julia&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-julia" data-lang="julia">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> main(Ns = &lt;span style="color:#3677a9">40&lt;/span>, dim = &lt;span style="color:#3677a9">4&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> latt = ones(&lt;span style="color:#6ab825;font-weight:bold">Int64&lt;/span>, ntuple(i1 -&amp;gt; i1 &amp;lt;= dim ? Ns : dim, dim + &lt;span style="color:#3677a9">1&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> links = &lt;span style="color:#6ab825;font-weight:bold">CartesianIndices&lt;/span>(latt)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> mvup(x::&lt;span style="color:#6ab825;font-weight:bold">CartesianIndex&lt;/span>, d)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># key routine to optimize: KISS&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f1(i1) = x[i1]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f2(i1) = x[i1] == Ns ? &lt;span style="color:#3677a9">1&lt;/span> : x[i1] + &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f(i1) = i1 != d ? f1(i1) : f2(i1)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">CartesianIndex&lt;/span>(ntuple(f, length(x)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> mvdown(x::&lt;span style="color:#6ab825;font-weight:bold">CartesianIndex&lt;/span>, d)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># key routine to optimize: KISS&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f1(i1) = x[i1]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f2(i1) = x[i1] == &lt;span style="color:#3677a9">1&lt;/span> ? Ns : x[i1] - &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f(i1) = i1 != d ? f1(i1) : f2(i1)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">CartesianIndex&lt;/span>(ntuple(f, length(x)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> coldstart()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> latt .= &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> randomstart()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> latt .= rand([-&lt;span style="color:#3677a9">1&lt;/span>, &lt;span style="color:#3677a9">1&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> staplecal(link::&lt;span style="color:#6ab825;font-weight:bold">CartesianIndex&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x = &lt;span style="color:#6ab825;font-weight:bold">CartesianIndex&lt;/span>(link.I[&lt;span style="color:#3677a9">1&lt;/span>:&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>-&lt;span style="color:#3677a9">1&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> d = link.I[&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># following M. Creutz&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># staples around link(1-&amp;gt;4)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># dperp 6--5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># ^ | |&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># | 1--4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># | | |&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># -----&amp;gt; d 2--3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum = &lt;span style="color:#3677a9">0.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> dperp = &lt;span style="color:#3677a9">1&lt;/span>:length(x)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> dperp != d
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># plaquette 1234&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x = mvdown(x, dperp)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> link1 = latt[x, dperp]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> link2 = latt[x, d]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x = mvup(x, d)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> link3 = latt[x, dperp]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x = mvup(x, dperp)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># plaquette 4561&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> link4 = latt[x, dperp]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x = mvup(x, dperp)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x = mvdown(x, d)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> link5 = latt[x, d]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x = mvdown(x, dperp)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> link6 = latt[x, dperp]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum += link1 * link2 * link3 + link4 * link5 * link6
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> staplesum
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">function&lt;/span> update(beta)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action = &lt;span style="color:#3677a9">0.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> link &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> links
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum = staplecal(link)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># calculate the Boltzmann weight&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bplus = exp(beta * staplesum * &lt;span style="color:#3677a9">1&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bplus /= (bplus + &lt;span style="color:#3677a9">1&lt;/span> / bplus)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># the heatbath algorithm&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> rand() &amp;lt; bplus
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> latt[link] = &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action += staplesum
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> latt[link] = -&lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action -= staplesum
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#3677a9">1.0&lt;/span> - action / Ns^dim / dim / &lt;span style="color:#3677a9">6.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> beta_arr1 = range(&lt;span style="color:#3677a9">1&lt;/span>, stop = &lt;span style="color:#3677a9">0&lt;/span>, length = &lt;span style="color:#3677a9">20&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> beta_arr2 = range(&lt;span style="color:#3677a9">0&lt;/span>, stop = &lt;span style="color:#3677a9">1&lt;/span>, length = &lt;span style="color:#3677a9">20&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> coldstart()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># randomstart()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println(&lt;span style="color:#ed9d13">&amp;#34;#cold -&amp;gt; hot&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> beta &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> beta_arr1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println(beta, &lt;span style="color:#ed9d13">&amp;#34; &amp;#34;&lt;/span>, update(beta))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># already hot&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println(&lt;span style="color:#ed9d13">&amp;#34;#hot -&amp;gt; cold&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> beta &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> beta_arr2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> println(beta, &lt;span style="color:#ed9d13">&amp;#34; &amp;#34;&lt;/span>, update(beta))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ffa500">@time&lt;/span> main()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="python">python&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">import&lt;/span> &lt;span style="color:#447fcf;text-decoration:underline">numpy&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">as&lt;/span> &lt;span style="color:#447fcf;text-decoration:underline">np&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">import&lt;/span> &lt;span style="color:#447fcf;text-decoration:underline">itertools&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># N = 20 is already slow&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>N = &lt;span style="color:#3677a9">20&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>latt = np.ones(N**&lt;span style="color:#3677a9">4&lt;/span>*&lt;span style="color:#3677a9">4&lt;/span>).reshape([N, N, N, N, &lt;span style="color:#3677a9">4&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rng = np.random.default_rng()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"># utility&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">def&lt;/span> &lt;span style="color:#447fcf">moveup&lt;/span>(xvec, d):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># xvec is mutable&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> xvec[d] += &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> xvec[d] = xvec[d] % N &lt;span style="color:#999;font-style:italic"># stays between [0, 1, ..., N-1]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">None&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">def&lt;/span> &lt;span style="color:#447fcf">movedown&lt;/span>(xvec, d):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># xvec is mutable&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> xvec[d] -= &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> xvec[d] = xvec[d] % N
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">None&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">def&lt;/span> &lt;span style="color:#447fcf">coldstart&lt;/span>():
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> latt[:] = &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">None&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">def&lt;/span> &lt;span style="color:#447fcf">randomstart&lt;/span>():
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sites = itertools.product(&lt;span style="color:#24909d">range&lt;/span>(N), &lt;span style="color:#24909d">range&lt;/span>(N), &lt;span style="color:#24909d">range&lt;/span>(N), &lt;span style="color:#24909d">range&lt;/span>(N), &lt;span style="color:#24909d">range&lt;/span>(&lt;span style="color:#3677a9">4&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> site &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> sites:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> spin = rng.integers(&lt;span style="color:#3677a9">2&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> spin == &lt;span style="color:#3677a9">0&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> spin = -&lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> latt[site] = spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">None&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">def&lt;/span> &lt;span style="color:#447fcf">update&lt;/span>(beta):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sites = itertools.product(&lt;span style="color:#24909d">range&lt;/span>(N), &lt;span style="color:#24909d">range&lt;/span>(N), &lt;span style="color:#24909d">range&lt;/span>(N), &lt;span style="color:#24909d">range&lt;/span>(N), &lt;span style="color:#24909d">range&lt;/span>(&lt;span style="color:#3677a9">4&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action = &lt;span style="color:#3677a9">0.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> site &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> sites:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> *x, d = site
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># following M. Creutz&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># staples around link(1-&amp;gt;4)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># dperp 6--5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># ^ | |&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># | 1--4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># | | |&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># -----&amp;gt; d 2--3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum = &lt;span style="color:#3677a9">0.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> dperp &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> &lt;span style="color:#24909d">range&lt;/span>(&lt;span style="color:#3677a9">4&lt;/span>):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> dperp != d:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># plaquette 1234&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> movedown(x, dperp)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple = latt[x[&lt;span style="color:#3677a9">0&lt;/span>], x[&lt;span style="color:#3677a9">1&lt;/span>], x[&lt;span style="color:#3677a9">2&lt;/span>], x[&lt;span style="color:#3677a9">3&lt;/span>], dperp]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple *= latt[x[&lt;span style="color:#3677a9">0&lt;/span>], x[&lt;span style="color:#3677a9">1&lt;/span>], x[&lt;span style="color:#3677a9">2&lt;/span>], x[&lt;span style="color:#3677a9">3&lt;/span>], d]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> moveup(x, d)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple *= latt[x[&lt;span style="color:#3677a9">0&lt;/span>], x[&lt;span style="color:#3677a9">1&lt;/span>], x[&lt;span style="color:#3677a9">2&lt;/span>], x[&lt;span style="color:#3677a9">3&lt;/span>], dperp]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> moveup(x, dperp)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum += staple
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># plaquette 4561&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple = latt[x[&lt;span style="color:#3677a9">0&lt;/span>], x[&lt;span style="color:#3677a9">1&lt;/span>], x[&lt;span style="color:#3677a9">2&lt;/span>], x[&lt;span style="color:#3677a9">3&lt;/span>], dperp]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> moveup(x, dperp)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> movedown(x, d)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple *= latt[x[&lt;span style="color:#3677a9">0&lt;/span>], x[&lt;span style="color:#3677a9">1&lt;/span>], x[&lt;span style="color:#3677a9">2&lt;/span>], x[&lt;span style="color:#3677a9">3&lt;/span>], d]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> movedown(x, dperp)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple *= latt[x[&lt;span style="color:#3677a9">0&lt;/span>], x[&lt;span style="color:#3677a9">1&lt;/span>], x[&lt;span style="color:#3677a9">2&lt;/span>], x[&lt;span style="color:#3677a9">3&lt;/span>], dperp]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum += staple
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># calculate the Boltzmann weight&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bplus = np.exp(beta*staplesum)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bminus = np.exp(-beta*staplesum)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bplus = bplus/(bplus+bminus)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># the heatbath algorithm&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> r = rng.uniform()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> r &amp;lt; bplus:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> latt[site] = &lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action += staplesum
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> latt[site] = -&lt;span style="color:#3677a9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action -= staplesum
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#3677a9">1.&lt;/span> - action/N**&lt;span style="color:#3677a9">4&lt;/span>/&lt;span style="color:#3677a9">4.&lt;/span>/&lt;span style="color:#3677a9">6.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">def&lt;/span> &lt;span style="color:#447fcf">main&lt;/span>():
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># beta_c = 0.44&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> beta_arr1 = np.linspace(&lt;span style="color:#3677a9">1.&lt;/span>, &lt;span style="color:#3677a9">0.&lt;/span>, &lt;span style="color:#3677a9">40&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> beta_arr2 = np.linspace(&lt;span style="color:#3677a9">0.&lt;/span>, &lt;span style="color:#3677a9">1.&lt;/span>, &lt;span style="color:#3677a9">40&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> coldstart()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#24909d">print&lt;/span>(&lt;span style="color:#ed9d13">&amp;#39;# cold -&amp;gt; hot&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> beta &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> beta_arr1:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action = update(beta)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#24909d">print&lt;/span>(beta, action)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic"># already hot&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#24909d">print&lt;/span>(&lt;span style="color:#ed9d13">&amp;#39;# hot -&amp;gt; down&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> beta &lt;span style="color:#6ab825;font-weight:bold">in&lt;/span> beta_arr2:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action = update(beta)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#24909d">print&lt;/span>(beta, action)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">None&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>main()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="fortran-90">fortran 90&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-fortran" data-lang="fortran">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">program&lt;/span>&lt;span style="color:#666"> &lt;/span>main&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">use&lt;/span>&lt;span style="color:#666"> &lt;/span>iso_fortran_env&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">implicit&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">none&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">parameter&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>dp&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>REAL64&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">parameter&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>N&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">40&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">dimension&lt;/span>(N,N,N,N,&lt;span style="color:#3677a9">4&lt;/span>)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>latt&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">real&lt;/span>(dp)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>beta&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">real&lt;/span>(dp)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>dbeta&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">0.01&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">real&lt;/span>(dp)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>actionS&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>i1&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#999;font-style:italic">! coldstart
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span>&lt;span style="color:#666"> &lt;/span>latt&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#999;font-style:italic">! cold -&amp;gt; hot
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666"> &lt;/span>i1&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">100&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>beta&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1.&lt;/span>&lt;span style="color:#666"> &lt;/span>-&lt;span style="color:#666"> &lt;/span>i1*dbeta&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">call&lt;/span>&lt;span style="color:#666"> &lt;/span>sweep(N,&lt;span style="color:#666"> &lt;/span>beta,&lt;span style="color:#666"> &lt;/span>latt,&lt;span style="color:#666"> &lt;/span>actionS)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">print&lt;/span>*,&lt;span style="color:#666"> &lt;/span>beta,&lt;span style="color:#666"> &lt;/span>actionS&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#999;font-style:italic">! hot -&amp;gt; cold
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666"> &lt;/span>i1&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">100&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>beta&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>i1*dbeta&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">call&lt;/span>&lt;span style="color:#666"> &lt;/span>sweep(N,&lt;span style="color:#666"> &lt;/span>beta,&lt;span style="color:#666"> &lt;/span>latt,&lt;span style="color:#666"> &lt;/span>actionS)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">print&lt;/span>*,&lt;span style="color:#666"> &lt;/span>beta,&lt;span style="color:#666"> &lt;/span>actionS&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">contains&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">subroutine&lt;/span>&lt;span style="color:#666"> &lt;/span>moveup(xvec,&lt;span style="color:#666"> &lt;/span>d,&lt;span style="color:#666"> &lt;/span>N)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">implicit&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">none&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">intent&lt;/span>(in)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>d&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">intent&lt;/span>(in)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>N&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">dimension&lt;/span>(&lt;span style="color:#3677a9">4&lt;/span>),&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">intent&lt;/span>(inout)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>xvec&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>xvec(d)&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>xvec(d)&lt;span style="color:#666"> &lt;/span>+&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">if&lt;/span>(xvec(d)&lt;span style="color:#666"> &lt;/span>&amp;gt;&lt;span style="color:#666"> &lt;/span>N)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">then&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>xvec(d)&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>xvec(d)&lt;span style="color:#666"> &lt;/span>-&lt;span style="color:#666"> &lt;/span>N&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">else&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">if&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">subroutine&lt;/span>&lt;span style="color:#666"> &lt;/span>moveup&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">subroutine&lt;/span>&lt;span style="color:#666"> &lt;/span>movedown(xvec,&lt;span style="color:#666"> &lt;/span>d,&lt;span style="color:#666"> &lt;/span>N)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">implicit&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">none&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">intent&lt;/span>(in)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>d&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">intent&lt;/span>(in)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>N&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">dimension&lt;/span>(&lt;span style="color:#3677a9">4&lt;/span>),&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">intent&lt;/span>(inout)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>xvec&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>xvec(d)&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>xvec(d)&lt;span style="color:#666"> &lt;/span>-&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">if&lt;/span>(xvec(d)&lt;span style="color:#666"> &lt;/span>&amp;lt;&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">then&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>xvec(d)&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>xvec(d)&lt;span style="color:#666"> &lt;/span>+&lt;span style="color:#666"> &lt;/span>N&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">else&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">if&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">subroutine&lt;/span>&lt;span style="color:#666"> &lt;/span>movedown&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">subroutine&lt;/span>&lt;span style="color:#666"> &lt;/span>sweep(N,&lt;span style="color:#666"> &lt;/span>beta,&lt;span style="color:#666"> &lt;/span>lat,&lt;span style="color:#666"> &lt;/span>actionS)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">use&lt;/span>&lt;span style="color:#666"> &lt;/span>iso_fortran_env&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">implicit&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">none&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">parameter&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>dp&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>REAL64&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">intent&lt;/span>(in)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>N&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">real&lt;/span>(dp),&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">intent&lt;/span>(in)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>beta&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">dimension&lt;/span>(N,N,N,N,&lt;span style="color:#3677a9">4&lt;/span>),&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">intent&lt;/span>(inout)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>lat&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">real&lt;/span>(dp),&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">intent&lt;/span>(out)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>actionS&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>i1,&lt;span style="color:#666"> &lt;/span>i2,&lt;span style="color:#666"> &lt;/span>i3,&lt;span style="color:#666"> &lt;/span>i4,&lt;span style="color:#666"> &lt;/span>d,&lt;span style="color:#666"> &lt;/span>dperp&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">real&lt;/span>(dp)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>r_num&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">real&lt;/span>(dp),&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">dimension&lt;/span>(N,N,N,N,&lt;span style="color:#3677a9">4&lt;/span>)&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>rand_arr&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">integer&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">dimension&lt;/span>(&lt;span style="color:#3677a9">4&lt;/span>)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>xvec&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">real&lt;/span>(dp)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>staple&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">real&lt;/span>(dp)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>staplesum&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">real&lt;/span>(dp)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>bplus&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">real&lt;/span>(dp)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">::&lt;/span>&lt;span style="color:#666"> &lt;/span>bminus&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">call&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#24909d">random_seed&lt;/span>()&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">call&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#24909d">random_number&lt;/span>(rand_arr)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>actionS&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">0.&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666"> &lt;/span>i1&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>,&lt;span style="color:#666"> &lt;/span>N&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666"> &lt;/span>i2&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>,&lt;span style="color:#666"> &lt;/span>N&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666"> &lt;/span>i3&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>,&lt;span style="color:#666"> &lt;/span>N&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666"> &lt;/span>i4&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>,&lt;span style="color:#666"> &lt;/span>N&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666"> &lt;/span>d&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">4&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>xvec&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>[&lt;span style="color:#666"> &lt;/span>i1,&lt;span style="color:#666"> &lt;/span>i2,&lt;span style="color:#666"> &lt;/span>i3,&lt;span style="color:#666"> &lt;/span>i4&lt;span style="color:#666"> &lt;/span>]&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>staplesum&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">0.&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666"> &lt;/span>dperp&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>,&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">4&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">if&lt;/span>&lt;span style="color:#666"> &lt;/span>(dperp&lt;span style="color:#666"> &lt;/span>/=&lt;span style="color:#666"> &lt;/span>d)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">then&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">call&lt;/span>&lt;span style="color:#666"> &lt;/span>movedown(xvec,&lt;span style="color:#666"> &lt;/span>dperp,&lt;span style="color:#666"> &lt;/span>N)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>staple&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>lat(xvec(&lt;span style="color:#3677a9">1&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">2&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">3&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">4&lt;/span>),&lt;span style="color:#666"> &lt;/span>dperp)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>staple&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>staple*lat(xvec(&lt;span style="color:#3677a9">1&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">2&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">3&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">4&lt;/span>),&lt;span style="color:#666"> &lt;/span>d)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">call&lt;/span>&lt;span style="color:#666"> &lt;/span>moveup(xvec,&lt;span style="color:#666"> &lt;/span>d,&lt;span style="color:#666"> &lt;/span>N)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>staple&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>staple*lat(xvec(&lt;span style="color:#3677a9">1&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">2&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">3&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">4&lt;/span>),&lt;span style="color:#666"> &lt;/span>dperp)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">call&lt;/span>&lt;span style="color:#666"> &lt;/span>moveup(xvec,&lt;span style="color:#666"> &lt;/span>dperp,&lt;span style="color:#666"> &lt;/span>N)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>staplesum&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>staplesum&lt;span style="color:#666"> &lt;/span>+&lt;span style="color:#666"> &lt;/span>staple&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>staple&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>lat(xvec(&lt;span style="color:#3677a9">1&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">2&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">3&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">4&lt;/span>),&lt;span style="color:#666"> &lt;/span>dperp)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">call&lt;/span>&lt;span style="color:#666"> &lt;/span>moveup(xvec,&lt;span style="color:#666"> &lt;/span>dperp,&lt;span style="color:#666"> &lt;/span>N)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">call&lt;/span>&lt;span style="color:#666"> &lt;/span>movedown(xvec,&lt;span style="color:#666"> &lt;/span>d,&lt;span style="color:#666"> &lt;/span>N)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>staple&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>staple*lat(xvec(&lt;span style="color:#3677a9">1&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">2&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">3&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">4&lt;/span>),&lt;span style="color:#666"> &lt;/span>d)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">call&lt;/span>&lt;span style="color:#666"> &lt;/span>movedown(xvec,&lt;span style="color:#666"> &lt;/span>dperp,&lt;span style="color:#666"> &lt;/span>N)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>staple&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>staple*lat(xvec(&lt;span style="color:#3677a9">1&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">2&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">3&lt;/span>),&lt;span style="color:#666"> &lt;/span>xvec(&lt;span style="color:#3677a9">4&lt;/span>),&lt;span style="color:#666"> &lt;/span>dperp)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>staplesum&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>staplesum&lt;span style="color:#666"> &lt;/span>+&lt;span style="color:#666"> &lt;/span>staple&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">else&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">if&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>bplus&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#24909d">exp&lt;/span>(beta&lt;span style="color:#666"> &lt;/span>*&lt;span style="color:#666"> &lt;/span>staplesum)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>bminus&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#24909d">exp&lt;/span>(-beta&lt;span style="color:#666"> &lt;/span>*&lt;span style="color:#666"> &lt;/span>staplesum)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>bplus&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>bplus&lt;span style="color:#666"> &lt;/span>/&lt;span style="color:#666"> &lt;/span>(bplus&lt;span style="color:#666"> &lt;/span>+&lt;span style="color:#666"> &lt;/span>bminus)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>r_num&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>rand_arr(i1,&lt;span style="color:#666"> &lt;/span>i2,&lt;span style="color:#666"> &lt;/span>i3,&lt;span style="color:#666"> &lt;/span>i4,&lt;span style="color:#666"> &lt;/span>d)&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#999;font-style:italic">!call random_number(r_num)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">if&lt;/span>&lt;span style="color:#666"> &lt;/span>(r_num&lt;span style="color:#666"> &lt;/span>&amp;lt;=&lt;span style="color:#666"> &lt;/span>bplus)&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">then&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>lat(i1,&lt;span style="color:#666"> &lt;/span>i2,&lt;span style="color:#666"> &lt;/span>i3,&lt;span style="color:#666"> &lt;/span>i4,&lt;span style="color:#666"> &lt;/span>d)&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>actionS&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>actionS&lt;span style="color:#666"> &lt;/span>+&lt;span style="color:#666"> &lt;/span>staplesum/N**&lt;span style="color:#3677a9">4&lt;/span>/&lt;span style="color:#3677a9">2&lt;/span>&lt;span style="color:#3677a9">4.&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">else&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>lat(i1,&lt;span style="color:#666"> &lt;/span>i2,&lt;span style="color:#666"> &lt;/span>i3,&lt;span style="color:#666"> &lt;/span>i4,&lt;span style="color:#666"> &lt;/span>d)&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>-&lt;span style="color:#3677a9">1&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>actionS&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>actionS&lt;span style="color:#666"> &lt;/span>-&lt;span style="color:#666"> &lt;/span>staplesum/N**&lt;span style="color:#3677a9">4&lt;/span>/&lt;span style="color:#3677a9">2&lt;/span>&lt;span style="color:#3677a9">4.&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">if&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">do&lt;/span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>actionS&lt;span style="color:#666"> &lt;/span>=&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#3677a9">1.&lt;/span>&lt;span style="color:#666"> &lt;/span>-&lt;span style="color:#666"> &lt;/span>actionS&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">subroutine&lt;/span>&lt;span style="color:#666"> &lt;/span>sweep&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#666">&lt;/span>&lt;span style="color:#6ab825;font-weight:bold">end&lt;/span>&lt;span style="color:#666"> &lt;/span>&lt;span style="color:#6ab825;font-weight:bold">program&lt;/span>&lt;span style="color:#666"> &lt;/span>main&lt;span style="color:#666">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="c-from-m-creutz">c (from M. Creutz)&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">/* Z_2 lattice gauge simulation */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">/* Michael Creutz &amp;lt;creutz@bnl.gov&amp;gt; */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">/* http://thy.phy.bnl.gov/~creutz/z2.c */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold">#include&lt;/span> &lt;span style="color:#cd2828;font-weight:bold">&amp;lt;stdio.h&amp;gt;&lt;/span>&lt;span style="color:#cd2828;font-weight:bold">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold">#include&lt;/span> &lt;span style="color:#cd2828;font-weight:bold">&amp;lt;stdlib.h&amp;gt;&lt;/span>&lt;span style="color:#cd2828;font-weight:bold">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold">#include&lt;/span> &lt;span style="color:#cd2828;font-weight:bold">&amp;lt;math.h&amp;gt;&lt;/span>&lt;span style="color:#cd2828;font-weight:bold">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">/* the lattice is of dimensions SIZE**4 */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold">#define SIZE 40
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold">&lt;/span>&lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> link[SIZE][SIZE][SIZE][SIZE][&lt;span style="color:#3677a9">4&lt;/span>]; &lt;span style="color:#999;font-style:italic">/* last index gives link direction */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">/* utility functions */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">void&lt;/span> &lt;span style="color:#447fcf">moveup&lt;/span>(&lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> x[],&lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> d) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x[d]+=&lt;span style="color:#3677a9">1&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> (x[d]&amp;gt;=SIZE) x[d]-=SIZE;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">void&lt;/span> &lt;span style="color:#447fcf">movedown&lt;/span>(&lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> x[],&lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> d) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x[d]-=&lt;span style="color:#3677a9">1&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> (x[d]&amp;lt;&lt;span style="color:#3677a9">0&lt;/span>) x[d]+=SIZE;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">void&lt;/span> &lt;span style="color:#447fcf">coldstart&lt;/span>(){ &lt;span style="color:#999;font-style:italic">/* set all links to unity */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> x[&lt;span style="color:#3677a9">4&lt;/span>],d;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">0&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">0&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">0&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">1&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">1&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">1&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">2&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">2&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">2&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">3&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">3&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">3&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (d=&lt;span style="color:#3677a9">0&lt;/span>;d&amp;lt;&lt;span style="color:#3677a9">4&lt;/span>;d++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> link[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d]=&lt;span style="color:#3677a9">1&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">/* for a random start: call coldstart() and then update once at beta=0 */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">/* do a Monte Carlo sweep; return energy */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> &lt;span style="color:#447fcf">update&lt;/span>(&lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> beta){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> x[&lt;span style="color:#3677a9">4&lt;/span>],d,dperp,staple,staplesum;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> bplus,bminus,action=&lt;span style="color:#3677a9">0.0&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">0&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">0&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">0&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">1&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">1&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">1&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">2&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">2&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">2&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">3&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">3&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">3&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (d=&lt;span style="color:#3677a9">0&lt;/span>; d&amp;lt;&lt;span style="color:#3677a9">4&lt;/span>; d++) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum=&lt;span style="color:#3677a9">0&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (dperp=&lt;span style="color:#3677a9">0&lt;/span>;dperp&amp;lt;&lt;span style="color:#3677a9">4&lt;/span>;dperp++){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> (dperp!=d){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* move around thusly:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"> dperp 6--5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"> ^ | |
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"> | 1--4
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"> | | |
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"> -----&amp;gt; d 2--3 */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* plaquette 1234 */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">movedown&lt;/span>(x,dperp);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple=link[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][dperp]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> *link[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">moveup&lt;/span>(x,d);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple*=link[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][dperp];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">moveup&lt;/span>(x,dperp);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum+=staple;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* plaquette 1456 */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple=link[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][dperp];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">moveup&lt;/span>(x,dperp);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">movedown&lt;/span>(x,d);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple*=link[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">movedown&lt;/span>(x,dperp);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple*=link[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][dperp];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum+=staple;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* calculate the Boltzmann weight */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bplus=&lt;span style="color:#447fcf">exp&lt;/span>(beta*staplesum);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bminus=&lt;span style="color:#3677a9">1&lt;/span>/bplus;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bplus=bplus/(bplus+bminus);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* the heatbath algorithm */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> ( &lt;span style="color:#447fcf">drand48&lt;/span>() &amp;lt; bplus ){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> link[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d]=&lt;span style="color:#3677a9">1&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action+=staplesum;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">else&lt;/span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> link[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d]=-&lt;span style="color:#3677a9">1&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action-=staplesum;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action /= (SIZE*SIZE*SIZE*SIZE*&lt;span style="color:#3677a9">4&lt;/span>*&lt;span style="color:#3677a9">6&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#3677a9">1.&lt;/span>-action;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">/******************************/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> &lt;span style="color:#447fcf">main&lt;/span>(){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> beta, dbeta, action;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">srand48&lt;/span>(&lt;span style="color:#3677a9">1234L&lt;/span>); &lt;span style="color:#999;font-style:italic">/* initialize random number generator */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* do your experiment here; this example is a thermal cycle */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> dbeta=&lt;span style="color:#3677a9">.01&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">coldstart&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* heat it up */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (beta=&lt;span style="color:#3677a9">1&lt;/span>; beta&amp;gt;&lt;span style="color:#3677a9">0.0&lt;/span>; beta-=dbeta){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action=&lt;span style="color:#447fcf">update&lt;/span>(beta);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">printf&lt;/span>(&lt;span style="color:#ed9d13">&amp;#34;%g&lt;/span>&lt;span style="color:#ed9d13">\t&lt;/span>&lt;span style="color:#ed9d13">%g&lt;/span>&lt;span style="color:#ed9d13">\n&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;&lt;/span>,beta,action);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">printf&lt;/span>(&lt;span style="color:#ed9d13">&amp;#34;&lt;/span>&lt;span style="color:#ed9d13">\n\n&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* cool it down */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (beta=&lt;span style="color:#3677a9">0&lt;/span>; beta&amp;lt;&lt;span style="color:#3677a9">1.0&lt;/span>; beta+=dbeta){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action=&lt;span style="color:#447fcf">update&lt;/span>(beta);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">printf&lt;/span>(&lt;span style="color:#ed9d13">&amp;#34;%g&lt;/span>&lt;span style="color:#ed9d13">\t&lt;/span>&lt;span style="color:#ed9d13">%g&lt;/span>&lt;span style="color:#ed9d13">\n&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;&lt;/span>,beta,action);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">printf&lt;/span>(&lt;span style="color:#ed9d13">&amp;#34;&lt;/span>&lt;span style="color:#ed9d13">\n\n&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#447fcf">exit&lt;/span>(&lt;span style="color:#3677a9">0&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="cpp">cpp&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:6;-o-tab-size:6;tab-size:6;">&lt;code class="language-cpp" data-lang="cpp">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">// Z2 4D lattice
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">// cpp adaptation of M. Creutz C code
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">//
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold"># include &amp;lt;stdio.h&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold"># include &amp;lt;stdlib.h&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold"># include &amp;lt;math.h&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold"># include &amp;lt;iostream&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold"># include &amp;lt;random&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">using&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">namespace&lt;/span> std;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">// the lattice is of dimensions SIZE**4
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span>&lt;span style="color:#cd2828;font-weight:bold">#define SIZE 40
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cd2828;font-weight:bold">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">class&lt;/span> &lt;span style="color:#447fcf;text-decoration:underline">config&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">private&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> lattice[SIZE][SIZE][SIZE][SIZE][&lt;span style="color:#3677a9">4&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">public&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">// basic feature of lattice_config
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span> config ();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">void&lt;/span> &lt;span style="color:#447fcf">coldstart&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">void&lt;/span> &lt;span style="color:#447fcf">randomstart&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> &lt;span style="color:#447fcf">staplecal&lt;/span>(&lt;span style="color:#6ab825;font-weight:bold">const&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> *y, &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> d);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> &lt;span style="color:#447fcf">sweep&lt;/span>(&lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> beta);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> };
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>config::config(){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> x[&lt;span style="color:#3677a9">4&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> d;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">0&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">0&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">0&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">1&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">1&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">1&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">2&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">2&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">2&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">3&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">3&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">3&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (d=&lt;span style="color:#3677a9">0&lt;/span>;d&amp;lt;&lt;span style="color:#3677a9">4&lt;/span>;d++){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d]=&lt;span style="color:#3677a9">1.&lt;/span>;}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">// utility
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">//
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">// move +1 step along d-th direction
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span>&lt;span style="color:#6ab825;font-weight:bold">void&lt;/span> &lt;span style="color:#447fcf">moveup&lt;/span>(&lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> *x, &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> d) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x[d] = x[d] + &lt;span style="color:#3677a9">1&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> (x[d]&amp;gt;=SIZE) x[d]=x[d]-SIZE;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">void&lt;/span> &lt;span style="color:#447fcf">movedown&lt;/span>(&lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> *x, &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> d) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x[d] = x[d] - &lt;span style="color:#3677a9">1&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> (x[d]&amp;lt;&lt;span style="color:#3677a9">0&lt;/span>) x[d]=x[d]+SIZE;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">void&lt;/span> config::coldstart()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> x[&lt;span style="color:#3677a9">4&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> d;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">0&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">0&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">0&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">1&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">1&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">1&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">2&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">2&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">2&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">3&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>;x[&lt;span style="color:#3677a9">3&lt;/span>]&amp;lt;SIZE;x[&lt;span style="color:#3677a9">3&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (d=&lt;span style="color:#3677a9">0&lt;/span>;d&amp;lt;&lt;span style="color:#3677a9">4&lt;/span>;d++){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d]=&lt;span style="color:#3677a9">1.&lt;/span>;}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">void&lt;/span> config::randomstart()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> x[&lt;span style="color:#3677a9">4&lt;/span>],d;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">// usage: unif(rng) to get a random number
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span> std::uniform_real_distribution&amp;lt;&lt;span style="color:#6ab825;font-weight:bold">double&lt;/span>&amp;gt; unif(&lt;span style="color:#3677a9">0.&lt;/span>, &lt;span style="color:#3677a9">1.&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> std::random_device rand_dev; &lt;span style="color:#999;font-style:italic">// Use random_device to get a random seed.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span> std::mt19937_64 rng(rand_dev()); &lt;span style="color:#999;font-style:italic">// mt19937 is a good pseudo-random number generator.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">0&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">0&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">0&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">1&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">1&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">1&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">2&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">2&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">2&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">3&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">3&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">3&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (d=&lt;span style="color:#3677a9">0&lt;/span>; d&amp;lt;&lt;span style="color:#3677a9">4&lt;/span>; d++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> ( unif(rng) &amp;gt; &lt;span style="color:#3677a9">0.5&lt;/span> ){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d]=&lt;span style="color:#3677a9">1.&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">else&lt;/span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d]=-&lt;span style="color:#3677a9">1.&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">// staple calculation
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span>&lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> config::staplecal(&lt;span style="color:#6ab825;font-weight:bold">const&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> *y, &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> d)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> staple,staplesum;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> x[&lt;span style="color:#3677a9">4&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> dperp;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">// copy the address of current site
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span> x[&lt;span style="color:#3677a9">0&lt;/span>] = y[&lt;span style="color:#3677a9">0&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x[&lt;span style="color:#3677a9">1&lt;/span>] = y[&lt;span style="color:#3677a9">1&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x[&lt;span style="color:#3677a9">2&lt;/span>] = y[&lt;span style="color:#3677a9">2&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x[&lt;span style="color:#3677a9">3&lt;/span>] = y[&lt;span style="color:#3677a9">3&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum=&lt;span style="color:#3677a9">0.&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (dperp=&lt;span style="color:#3677a9">0&lt;/span>;dperp&amp;lt;&lt;span style="color:#3677a9">4&lt;/span>;dperp++){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> (dperp!=d){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* move around thusly:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"> dperp 6--5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"> ^ | |
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"> | 1--4
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"> | | |
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic"> -----&amp;gt; d 2--3 */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* plaquette 1234 */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> movedown(x,dperp);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple=lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][dperp]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> *lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> moveup(x,d);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple=staple*lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][dperp];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> moveup(x,dperp);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum=staplesum+staple;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* plaquette 1456 */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple=lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][dperp];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> moveup(x,dperp);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> movedown(x,d);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple=staple*lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> movedown(x,dperp);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staple=staple*lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][dperp];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum=staplesum+staple;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> staplesum;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">// do one Monte Carlo sweep
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> config::sweep(&lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> beta)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> x[&lt;span style="color:#3677a9">4&lt;/span>],d;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> staplesum;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> bplus,bminus;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> action = &lt;span style="color:#3677a9">0.0&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> current_link;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">// usage: unif(rng) to get a random number
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span> std::uniform_real_distribution&amp;lt;&lt;span style="color:#6ab825;font-weight:bold">double&lt;/span>&amp;gt; unif(&lt;span style="color:#3677a9">0.&lt;/span>, &lt;span style="color:#3677a9">1.&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> std::random_device rand_dev; &lt;span style="color:#999;font-style:italic">// Use random_device to get a random seed.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span> std::mt19937_64 rng(rand_dev()); &lt;span style="color:#999;font-style:italic">// mt19937 is a good pseudo-random number generator.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">0&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">0&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">0&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">1&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">1&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">1&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">2&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">2&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">2&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (x[&lt;span style="color:#3677a9">3&lt;/span>]=&lt;span style="color:#3677a9">0&lt;/span>; x[&lt;span style="color:#3677a9">3&lt;/span>]&amp;lt;SIZE; x[&lt;span style="color:#3677a9">3&lt;/span>]++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (d=&lt;span style="color:#3677a9">0&lt;/span>; d&amp;lt;&lt;span style="color:#3677a9">4&lt;/span>; d++)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> staplesum = staplecal(x, d);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* calculate the Boltzmann weight */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bplus=exp(beta*staplesum);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bminus=exp(-&lt;span style="color:#3677a9">1.&lt;/span>*beta*staplesum);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bplus=bplus/(bplus+bminus);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* the heatbath algorithm */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">if&lt;/span> ( unif(rng) &amp;lt; bplus ){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d]=&lt;span style="color:#3677a9">1.&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action +=staplesum;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">else&lt;/span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lattice[x[&lt;span style="color:#3677a9">0&lt;/span>]][x[&lt;span style="color:#3677a9">1&lt;/span>]][x[&lt;span style="color:#3677a9">2&lt;/span>]][x[&lt;span style="color:#3677a9">3&lt;/span>]][d]=-&lt;span style="color:#3677a9">1.&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action -=staplesum;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action /= (SIZE*SIZE*SIZE*SIZE*&lt;span style="color:#3677a9">4&lt;/span>*&lt;span style="color:#3677a9">6&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#3677a9">1.&lt;/span>-action;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> &lt;span style="color:#447fcf">main&lt;/span>(){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">// parameters
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> beta_min = &lt;span style="color:#3677a9">0.&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> beta_max = &lt;span style="color:#3677a9">1.&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">const&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">int&lt;/span> N_beta = &lt;span style="color:#3677a9">100&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> action = &lt;span style="color:#3677a9">0.&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">double&lt;/span> beta, dbeta;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">//static config current;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span> &lt;span style="color:#6ab825;font-weight:bold">static&lt;/span> config current;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> dbeta= (beta_max-beta_min)/(N_beta);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> current.coldstart();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">//current.randomstart();
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#999;font-style:italic">&lt;/span> &lt;span style="color:#999;font-style:italic">/* heat it up */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (beta=beta_max; beta&amp;gt;beta_min; beta-=dbeta){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action = current.sweep(beta);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> cout &amp;lt;&amp;lt; beta &amp;lt;&amp;lt; &lt;span style="color:#ed9d13">&amp;#34; &amp;#34;&lt;/span> &amp;lt;&amp;lt; action &amp;lt;&amp;lt; endl;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#999;font-style:italic">/* cool it down */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">for&lt;/span> (beta=beta_min; beta&amp;lt;beta_max; beta+=dbeta){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action = current.sweep(beta);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> cout &amp;lt;&amp;lt; beta &amp;lt;&amp;lt; &lt;span style="color:#ed9d13">&amp;#34; &amp;#34;&lt;/span> &amp;lt;&amp;lt; action &amp;lt;&amp;lt; endl;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">return&lt;/span> &lt;span style="color:#3677a9">0&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item></channel></rss>