diff --git a/QMC.org b/QMC.org index 2d44712..63cd513 100644 --- a/QMC.org +++ b/QMC.org @@ -4,9 +4,7 @@ # SETUPFILE: https://fniessen.github.io/org-html-themes/org/theme-bigblow.setup #+STARTUP: latexpreview -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: +#+HTML_HEAD: * Introduction @@ -30,15 +28,12 @@ $\Psi : \mathbb{R}^{3N} \rightarrow \mathbb{R}$. In addition, $\Psi$ is defined everywhere, continuous and infinitely differentiable. -** Python - -** Fortran - - - 1.d0 - - external - - r(:) = 0.d0 - - a = (/ 0.1, 0.2 /) - - size(x) + *Note* + #+begin_important + In Fortran, when you use a double precision constant, don't forget + to put d0 as a suffix (for example 2.0d0), or it will be + interpreted as a single precision value + #+end_important * Numerical evaluation of the energy @@ -63,9 +58,9 @@ E_L(\mathbf{r}) = \frac{\hat{H} \Psi(\mathbf{r})}{\Psi(\mathbf{r})}, $$ - is constant. + is constant. We will also see that when $a \ne 1$ the local energy + is not constant, so $\hat{H} \Psi \ne E \Psi$. - The probabilistic /expected value/ of an arbitrary function $f(x)$ with respect to a probability density function $p(x)$ is given by @@ -79,16 +74,16 @@ The electronic energy of a system is the expectation value of the - local energy $E(\mathbf{r})$ with respect to the $3N$-dimensional + local energy $E(\mathbf{r})$ with respect to the 3N-dimensional electron density given by the square of the wave function: - \begin{eqnarray} - E & = & \frac{\langle \Psi| \hat{H} | \Psi\rangle}{\langle \Psi |\Psi \rangle} \\ - & = & \frac{\int \Psi(\mathbf{r})\, \hat{H} \Psi(\mathbf{r})\, d\mathbf{r}}{\int \left[\Psi(\mathbf{r}) \right]^2 d\mathbf{r}} \\ - & = & \frac{\int \left[\Psi(\mathbf{r})\right]^2\, \frac{\hat{H} \Psi(\mathbf{r})}{\Psi(\mathbf{r})}\,d\mathbf{r}}{\int \left[\Psi(\mathbf{r}) \right]^2 d\mathbf{r}} \\ - & = & \frac{\int \left[\Psi(\mathbf{r})\right]^2\, E_L(\mathbf{r})\,d\mathbf{r}}{\int \left[\Psi(\mathbf{r}) \right]^2 d\mathbf{r}} + \begin{eqnarray*} + E & = & \frac{\langle \Psi| \hat{H} | \Psi\rangle}{\langle \Psi |\Psi \rangle} + = \frac{\int \Psi(\mathbf{r})\, \hat{H} \Psi(\mathbf{r})\, d\mathbf{r}}{\int \left[\Psi(\mathbf{r}) \right]^2 d\mathbf{r}} \\ + & = & \frac{\int \left[\Psi(\mathbf{r})\right]^2\, \frac{\hat{H} \Psi(\mathbf{r})}{\Psi(\mathbf{r})}\,d\mathbf{r}}{\int \left[\Psi(\mathbf{r}) \right]^2 d\mathbf{r}} + = \frac{\int \left[\Psi(\mathbf{r})\right]^2\, E_L(\mathbf{r})\,d\mathbf{r}}{\int \left[\Psi(\mathbf{r}) \right]^2 d\mathbf{r}} = \langle E_L \rangle_{\Psi^2} - \end{eqnarray} + \end{eqnarray*} ** Local energy :PROPERTIES: @@ -99,67 +94,68 @@ The function accepts a 3-dimensional vector =r= as input arguments and returns the potential. - $\mathbf{r}=\sqrt{x^2 + y^2 + z^2}$, so + $\mathbf{r}=\left( \begin{array}{c} x \\ y\\ z\end{array} \right)$, so $$ - V(x,y,z) = -\frac{1}{\sqrt{x^2 + y^2 + z^2}} + V(\mathbf{r}) = -\frac{1}{\sqrt{x^2 + y^2 + z^2}} $$ - #+BEGIN_SRC python :results none + *Python* + #+BEGIN_SRC python :results none import numpy as np def potential(r): return -1. / np.sqrt(np.dot(r,r)) - #+END_SRC + #+END_SRC - #+BEGIN_SRC f90 + *Fortran* + #+BEGIN_SRC f90 double precision function potential(r) implicit none double precision, intent(in) :: r(3) potential = -1.d0 / dsqrt( r(1)*r(1) + r(2)*r(2) + r(3)*r(3) ) end function potential - #+END_SRC + #+END_SRC *** Write a function which computes the wave function at $\mathbf{r}$ The function accepts a scalar =a= and a 3-dimensional vector =r= as input arguments, and returns a scalar. - #+BEGIN_SRC python :results none + + *Python* + #+BEGIN_SRC python :results none def psi(a, r): return np.exp(-a*np.sqrt(np.dot(r,r))) - #+END_SRC + #+END_SRC - #+BEGIN_SRC f90 + *Fortran* + #+BEGIN_SRC f90 double precision function psi(a, r) implicit none double precision, intent(in) :: a, r(3) psi = dexp(-a * dsqrt( r(1)*r(1) + r(2)*r(2) + r(3)*r(3) )) end function psi - #+END_SRC + #+END_SRC *** Write a function which computes the local kinetic energy at $\mathbf{r}$ The function accepts =a= and =r= as input arguments and returns the local kinetic energy. - The local kinetic energy is defined as $$-\frac{1}{2}\frac{\Delta \Psi}{\Psi}$$. + The local kinetic energy is defined as $$-\frac{1}{2}\frac{\Delta \Psi}{\Psi}.$$ - $$ - \Psi(x,y,z) = \exp(-a\,\sqrt{x^2 + y^2 + z^2}). - $$ - We differentiate $\Psi$ with respect to $x$: - $$ - \frac{\partial \Psi}{\partial x} - = \frac{\partial \Psi}{\partial r} \frac{\partial r}{\partial x} - = - \frac{a\,x}{|\mathbf{r}|} \Psi(x,y,z) - $$ + \[\Psi(\mathbf{r}) = \exp(-a\,|\mathbf{r}|) \] + \[\frac{\partial \Psi}{\partial x} + = \frac{\partial \Psi}{\partial |\mathbf{r}|} \frac{\partial |\mathbf{r}|}{\partial x} + = - \frac{a\,x}{|\mathbf{r}|} \Psi(\mathbf{r}) \] and we differentiate a second time: $$ \frac{\partial^2 \Psi}{\partial x^2} = - \left( \frac{a^2\,x^2}{|\mathbf{r}|^2} - \frac{a(y^2+z^2)}{|\mathbf{r}|^{3}} \right) \Psi(x,y,z). + \left( \frac{a^2\,x^2}{|\mathbf{r}|^2} - + \frac{a(y^2+z^2)}{|\mathbf{r}|^{3}} \right) \Psi(\mathbf{r}). $$ The Laplacian operator $\Delta = \frac{\partial^2}{\partial x^2} + @@ -167,49 +163,54 @@ end function psi applied to the wave function gives: $$ - \Delta \Psi (x,y,z) = \left(a^2 - \frac{2a}{\mathbf{|r|}} \right) \Psi(x,y,z) + \Delta \Psi (\mathbf{r}) = \left(a^2 - \frac{2a}{\mathbf{|r|}} \right) \Psi(\mathbf{r}) $$ So the local kinetic energy is $$ - -\frac{1}{2} \frac{\Delta \Psi}{\Psi} (x,y,z) = -\frac{1}{2}\left(a^2 - \frac{2a}{\mathbf{|r|}} \right) + -\frac{1}{2} \frac{\Delta \Psi}{\Psi} (\mathbf{r}) = -\frac{1}{2}\left(a^2 - \frac{2a}{\mathbf{|r|}} \right) $$ - #+BEGIN_SRC python :results none + *Python* + #+BEGIN_SRC python :results none def kinetic(a,r): return -0.5 * (a**2 - (2.*a)/np.sqrt(np.dot(r,r))) - #+END_SRC + #+END_SRC - #+BEGIN_SRC f90 + *Fortran* + #+BEGIN_SRC f90 double precision function kinetic(a,r) implicit none double precision, intent(in) :: a, r(3) kinetic = -0.5d0 * (a*a - (2.d0*a) / & dsqrt( r(1)*r(1) + r(2)*r(2) + r(3)*r(3) ) ) end function kinetic - #+END_SRC + #+END_SRC *** Write a function which computes the local energy at $\mathbf{r}$ The function accepts =x,y,z= as input arguments and returns the local energy. $$ - E_L(x,y,z) = -\frac{1}{2} \frac{\Delta \Psi}{\Psi} (x,y,z) + V(x,y,z) + E_L(\mathbf{r}) = -\frac{1}{2} \frac{\Delta \Psi}{\Psi} (\mathbf{r}) + V(\mathbf{r}) $$ - #+BEGIN_SRC python :results none + + *Python* + #+BEGIN_SRC python :results none def e_loc(a,r): return kinetic(a,r) + potential(r) - #+END_SRC + #+END_SRC - #+BEGIN_SRC f90 + *Fortran* + #+BEGIN_SRC f90 double precision function e_loc(a,r) implicit none double precision, intent(in) :: a, r(3) double precision, external :: kinetic, potential e_loc = kinetic(a,r) + potential(r) end function e_loc - #+END_SRC + #+END_SRC ** Plot of the local energy along the $x$ axis :PROPERTIES: @@ -220,6 +221,7 @@ end function e_loc For multiple values of $a$ (0.1, 0.2, 0.5, 1., 1.5, 2.), plot the local energy along the $x$ axis. + *Python* #+BEGIN_SRC python :results none import numpy as np import matplotlib.pyplot as plt @@ -249,6 +251,8 @@ plt.savefig("plot_py.png") [[./plot_py.png]] + + *Fortran* #+begin_src f90 program plot implicit none @@ -289,7 +293,7 @@ gfortran hydrogen.f90 plot_hydrogen.f90 -o plot_hydrogen #+RESULTS: - To plot the data using gnuplot" + To plot the data using gnuplot: #+begin_src gnuplot :file plot.png :exports both set grid @@ -312,11 +316,11 @@ plot './data' index 0 using 1:2 with lines title 'a=0.1', \ :header-args:f90: :tangle energy_hydrogen.f90 :END: - If the space is discretized in small volume elements $\delta - \mathbf{r}$, the expression of \langle E_L \rangle_{\Psi^2}$ becomes - a weighted average of the local energy, where the weights are the - values of the probability density at $\mathbf{r}$ multiplied - by the volume element: + If the space is discretized in small volume elements $\mathbf{r}_i$ + of size $\delta \mathbf{r}$, the expression of $\langle E_L \rangle_{\Psi^2}$ + becomes a weighted average of the local energy, where the weights + are the values of the probability density at $\mathbf{r}_i$ + multiplied by the volume element: $$ \langle E \rangle_{\Psi^2} \approx \frac{\sum_i w_i E_L(\mathbf{r}_i)}{\sum_i w_i}, \;\; @@ -327,11 +331,14 @@ plot './data' index 0 using 1:2 with lines title 'a=0.1', \ energy in a grid of $50\times50\times50$ points in the range $(-5,-5,-5) \le \mathbf{r} \le (5,5,5)$. - Note: the energy is biased because: + #+begin_note + The energy is biased because: - The volume elements are not infinitely small (discretization error) - The energy is evaluated only inside the box (incompleteness of the space) + #+end_note - #+BEGIN_SRC python :results none + *Python* + #+BEGIN_SRC python :results none import numpy as np from hydrogen import e_loc, psi @@ -356,19 +363,19 @@ for a in [0.1, 0.2, 0.5, 0.9, 1., 1.5, 2.]: E = E / norm print(f"a = {a} \t E = {E}") - #+end_src + #+end_src - #+RESULTS: - : a = 0.1 E = -0.24518438948809218 - : a = 0.2 E = -0.26966057967803525 - : a = 0.5 E = -0.3856357612517407 - : a = 0.9 E = -0.49435709786716214 - : a = 1.0 E = -0.5 - : a = 1.5 E = -0.39242967082602226 - : a = 2.0 E = -0.08086980667844901 + #+RESULTS: + : a = 0.1 E = -0.24518438948809218 + : a = 0.2 E = -0.26966057967803525 + : a = 0.5 E = -0.3856357612517407 + : a = 0.9 E = -0.49435709786716214 + : a = 1.0 E = -0.5 + : a = 1.5 E = -0.39242967082602226 + : a = 2.0 E = -0.08086980667844901 - - #+begin_src f90 + *Fortran* + #+begin_src f90 program energy_hydrogen implicit none double precision, external :: e_loc, psi @@ -407,22 +414,22 @@ program energy_hydrogen end do end program energy_hydrogen - #+end_src + #+end_src - To compile the Fortran and run it: + To compile the Fortran and run it: - #+begin_src sh :results output :exports both + #+begin_src sh :results output :exports both gfortran hydrogen.f90 energy_hydrogen.f90 -o energy_hydrogen ./energy_hydrogen - #+end_src + #+end_src - #+RESULTS: - : a = 0.10000000000000001 E = -0.24518438948809140 - : a = 0.20000000000000001 E = -0.26966057967803236 - : a = 0.50000000000000000 E = -0.38563576125173815 - : a = 1.0000000000000000 E = -0.50000000000000000 - : a = 1.5000000000000000 E = -0.39242967082602065 - : a = 2.0000000000000000 E = -8.0869806678448772E-002 + #+RESULTS: + : a = 0.10000000000000001 E = -0.24518438948809140 + : a = 0.20000000000000001 E = -0.26966057967803236 + : a = 0.50000000000000000 E = -0.38563576125173815 + : a = 1.0000000000000000 E = -0.50000000000000000 + : a = 1.5000000000000000 E = -0.39242967082602065 + : a = 2.0000000000000000 E = -8.0869806678448772E-002 ** Compute the variance of the local energy :PROPERTIES: @@ -446,6 +453,7 @@ gfortran hydrogen.f90 energy_hydrogen.f90 -o energy_hydrogen Compute a numerical estimate of the variance of the local energy in a grid of $50\times50\times50$ points in the range $(-5,-5,-5) \le \mathbf{r} \le (5,5,5)$. + *Python* #+begin_src python :results none import numpy as np from hydrogen import e_loc, psi @@ -469,8 +477,8 @@ for a in [0.1, 0.2, 0.5, 0.9, 1., 1.5, 2.]: El = e_loc(a, r) E += w * El norm += w - E = E / norm - s2 = 0. + E = E / norm + s2 = 0. for x in interval: r[0] = x for y in interval: @@ -481,8 +489,8 @@ for a in [0.1, 0.2, 0.5, 0.9, 1., 1.5, 2.]: w = w * w * delta El = e_loc(a, r) s2 += w * (El - E)**2 - s2 = s2 / norm - print(f"a = {a} \t E = {E:10.8f} \t \sigma^2 = {s2:10.8f}") + s2 = s2 / norm + print(f"a = {a} \t E = {E:10.8f} \t \sigma^2 = {s2:10.8f}") #+end_src #+RESULTS: @@ -494,6 +502,7 @@ for a in [0.1, 0.2, 0.5, 0.9, 1., 1.5, 2.]: : a = 1.5 E = -0.39242967 \sigma^2 = 0.31449671 : a = 2.0 E = -0.08086981 \sigma^2 = 1.80688143 + *Fortran* #+begin_src f90 program variance_hydrogen implicit none @@ -523,7 +532,6 @@ program variance_hydrogen r(3) = x(l) w = psi(a(j),r) w = w * w * delta - energy = energy + w * e_loc(a(j), r) norm = norm + w end do @@ -541,7 +549,6 @@ program variance_hydrogen r(3) = x(l) w = psi(a(j),r) w = w * w * delta - s2 = s2 + w * ( e_loc(a(j), r) - energy )**2 norm = norm + w end do @@ -573,11 +580,9 @@ gfortran hydrogen.f90 variance_hydrogen.f90 -o variance_hydrogen * Variational Monte Carlo Numerical integration with deterministic methods is very efficient - in low dimensions. When the number of dimensions becomes larger than - Instead of computing the average energy as a numerical integration - on a grid, we will do a Monte Carlo sampling, which is an extremely - efficient method to compute integrals when the number of dimensions is - large. + in low dimensions. When the number of dimensions becomes large, + instead of computing the average energy as a numerical integration + on a grid, it is usually more efficient to do a Monte Carlo sampling. Moreover, a Monte Carlo sampling will alow us to remove the bias due to the discretization of space, and compute a statistical confidence @@ -615,6 +620,7 @@ gfortran hydrogen.f90 variance_hydrogen.f90 -o variance_hydrogen Write a function returning the average and statistical error of an input array. + *Python* #+BEGIN_SRC python :results none from math import sqrt def ave_error(arr): @@ -625,6 +631,7 @@ def ave_error(arr): return (average, sqrt(variance/M)) #+END_SRC + *Fortran* #+BEGIN_SRC f90 subroutine ave_error(x,n,ave,err) implicit none @@ -667,6 +674,7 @@ end subroutine ave_error Compute the energy of the wave function with $a=0.9$. + *Python* #+BEGIN_SRC python :results output from hydrogen import * from qmc_stats import * @@ -692,6 +700,7 @@ print(f"E = {E} +/- {deltaE}") #+RESULTS: : E = -0.4956255109300764 +/- 0.0007082875482711226 + *Fortran* #+BEGIN_SRC f90 subroutine uniform_montecarlo(a,nmax,energy) implicit none @@ -764,6 +773,7 @@ gfortran hydrogen.f90 qmc_stats.f90 qmc_uniform.f90 -o qmc_uniform z_2 &=& \sqrt{-2 \ln u_1} \sin(2 \pi u_2) \end{eqnarray*} + *Fortran* #+BEGIN_SRC f90 :tangle qmc_stats.f90 subroutine random_gauss(z,n) implicit none @@ -813,6 +823,7 @@ end subroutine random_gauss w_i = \frac{\left[\Psi(\mathbf{r}_i)\right]^2}{P(\mathbf{r}_i)} \delta \mathbf{r} $$ + *Python* #+BEGIN_SRC python :results output from hydrogen import * from qmc_stats import * @@ -843,6 +854,7 @@ print(f"E = {E} +/- {deltaE}") : E = -0.49507506093129827 +/- 0.00014164037765553668 + *Fortran* #+BEGIN_SRC f90 double precision function gaussian(r) implicit none @@ -994,12 +1006,14 @@ gfortran hydrogen.f90 qmc_stats.f90 qmc_gaussian.f90 -o qmc_gaussian First, write a function to compute the drift vector $\frac{\nabla \Psi(\mathbf{r})}{\Psi(\mathbf{r})}$. + *Python* #+BEGIN_SRC python def drift(a,r): ar_inv = -a/np.sqrt(np.dot(r,r)) return r * ar_inv #+END_SRC + *Fortran* #+BEGIN_SRC f90 subroutine drift(a,r,b) implicit none @@ -1012,7 +1026,50 @@ end subroutine drift #+END_SRC - Now we can write the Monte Carlo sampling + Now we can write the Monte Carlo sampling: + + *Python* + #+BEGIN_SRC python +def MonteCarlo(a,tau,nmax): + E = 0. + N = 0. + sq_tau = sqrt(tau) + r_old = np.random.normal(loc=0., scale=1.0, size=(3)) + d_old = drift(a,r_old) + d2_old = np.dot(d_old,d_old) + psi_old = psi(a,r_old) + for istep in range(nmax): + eta = np.random.normal(loc=0., scale=1.0, size=(3)) + r_new = r_old + tau * d_old + sq_tau * eta + d_new = drift(a,r_new) + d2_new = np.dot(d_new,d_new) + psi_new = psi(a,r_new) + # Metropolis + prod = np.dot((d_new + d_old), (r_new - r_old)) + argexpo = 0.5 * (d2_new - d2_old)*tau + prod + q = psi_new / psi_old + q = np.exp(-argexpo) * q*q + if np.random.uniform() < q: + r_old = r_new + d_old = d_new + d2_old = d2_new + psi_old = psi_new + N += 1. + E += e_loc(a,r_old) + return E/N + + +nmax = 100000 +tau = 0.1 +X = [MonteCarlo(a,tau,nmax) for i in range(30)] +E, deltaE = ave_error(X) +print(f"E = {E} +/- {deltaE}") + #+END_SRC + + #+RESULTS: + : E = -0.4951783346213532 +/- 0.00022067316984271938 + + *Fortran* #+BEGIN_SRC f90 subroutine variational_montecarlo(a,nmax,energy) implicit none @@ -1061,46 +1118,6 @@ gfortran hydrogen.f90 qmc_stats.f90 vmc.f90 -o vmc ./vmc #+end_src - #+BEGIN_SRC python -def MonteCarlo(a,tau,nmax): - E = 0. - N = 0. - sq_tau = sqrt(tau) - r_old = np.random.normal(loc=0., scale=1.0, size=(3)) - d_old = drift(a,r_old) - d2_old = np.dot(d_old,d_old) - psi_old = psi(a,r_old) - for istep in range(nmax): - eta = np.random.normal(loc=0., scale=1.0, size=(3)) - r_new = r_old + tau * d_old + sq_tau * eta - d_new = drift(a,r_new) - d2_new = np.dot(d_new,d_new) - psi_new = psi(a,r_new) - # Metropolis - prod = np.dot((d_new + d_old), (r_new - r_old)) - argexpo = 0.5 * (d2_new - d2_old)*tau + prod - q = psi_new / psi_old - q = np.exp(-argexpo) * q*q - if np.random.uniform() < q: - r_old = r_new - d_old = d_new - d2_old = d2_new - psi_old = psi_new - N += 1. - E += e_loc(a,r_old) - return E/N - - -nmax = 100000 -tau = 0.1 -X = [MonteCarlo(a,tau,nmax) for i in range(30)] -E, deltaE = ave_error(X) -print(f"E = {E} +/- {deltaE}") - #+END_SRC - - #+RESULTS: - : E = -0.4951783346213532 +/- 0.00022067316984271938 - * Diffusion Monte Carlo diff --git a/worg.css b/worg.css new file mode 100644 index 0000000..50e4846 --- /dev/null +++ b/worg.css @@ -0,0 +1,958 @@ +@import url(https://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Droid+Serif); + +@media all +{ + html { + margin: 0; + font: .9em/1.6em "Droid Serif", Cambria, Georgia, "DejaVu Serif", serif; + background-image: url(/img/org-mode-unicorn-logo-worg.png); + background-attachment: fixed; + background-position: right bottom; + background-repeat: no-repeat; + background-color: white; + } + + body { + font-size: 14pt; + line-height: 22pt; + color: black; + margin-top: 0; + + } + body #content { + padding-top: 2em; + margin: auto; + max-width: 70%; + background-color: white; + } + + body #support { + position: fixed; + top:0; + display:block; + font-size: 12pt; + right:0pt; + text-align: right; + padding: .2em 1em; + background: #EEE; + border-radius: 10px; + } + + body .title { + margin-left: 0px; + font-size: 22pt; + } + + #org-div-home-and-up{ + position: fixed; + right: 0.5em; + margin-top: 70px; + font-family:sans-serif; + } + + /* TOC inspired by http://jashkenas.github.com/coffee-script */ + #table-of-contents { + margin-top: 105px; + font-size: 10pt; + font-family:sans-serif; + position: fixed; + right: 0em; + top: 0em; + background: white; + line-height: 12pt; + text-align: right; + box-shadow: 0 0 1em #777777; + -webkit-box-shadow: 0 0 1em #777777; + -moz-box-shadow: 0 0 1em #777777; + -webkit-border-bottom-left-radius: 5px; + -moz-border-radius-bottomleft: 5px; + /* ensure doesn't flow off the screen when expanded */ + max-height: 80%; + overflow: auto; } + #table-of-contents h2 { + font-size: 13pt; + max-width: 9em; + border: 0; + font-weight: normal; + padding-left: 0.5em; + padding-right: 0.5em; + padding-top: 0.05em; + padding-bottom: 0.05em; } + #table-of-contents #text-table-of-contents { + display: none; + text-align: left; } + #table-of-contents:hover #text-table-of-contents { + display: block; + padding: 0.5em; + margin-top: -1.5em; } + + #license { + background-color: #eeeeee; + } + + h1 { + font-size:2.1em; + padding:0 0 30px 0; + margin-top: 10px; + margin-bottom: 10px; + margin-right: 7%; + color: grey; + } + + h2 { + font-family:sans-serif; + font-size:1.45em; + padding:10px 0 10px 0; + color: black; + border-bottom: 1px solid #ddd; + padding-top: 1.5em; + } + + .outline-text-2 { + margin-left: 0.1em + } + + h3 { + font-family:sans-serif; + font-size:1.3em; + color: grey; + margin-left: 0.6em; + padding-top: 1.5em; + } + + /* #A34D32;*/ + + + .outline-text-3 { + margin-left: 0.9em; + } + + h4 { + font-family:sans-serif; + font-size:1.2em; + margin-left: 1.2em; + color: #A5573E; + padding-top: 1.5em; + } + + .outline-text-4 { + margin-left: 1.45em; + } + + a {text-decoration: none; font-weight: 400;} + a:visited {text-decoration: none; font-weight: 400;} + a:hover {text-decoration: underline;} + + .todo { + color: #CA0000; + } + + .done { + color: #006666; + } + + .timestamp-kwd { + color: #444; + } + + .tag { + + } + + li { + margin: .4em; + } + + table { + border: 0; + } + + thead { + border: 0; + } + + tbody { + border: 0; + } + + tr { + border: 0; + } + + td { + border-left: 0px; + border-right: 0px; + border-top: 0px; + border-bottom: 0px; + } + + th { + border-left: 0px; + border-right: 0px; + border-top: 1px solid grey; + border-bottom: 1px solid grey; + } + + code { + font-size: 100%; + color: black; + padding: 0px 0.2em; + } + + img { + border: 0; + } + + .share img { + opacity: .4; + -moz-opacity: .4; + filter: alpha(opacity=40); + } + + .share img:hover { + opacity: 1; + -moz-opacity: 1; + filter: alpha(opacity=100); + } + + pre { + font-family: Droid Sans Mono, Monaco, Consolas, "Lucida Console", monospace; + color: black; + font-size: 90%; + padding: 0.5em; + overflow: auto; + border: none; + background-color: #f2f2f2; + border-radius: 5px; + } + + .org-info-box { + clear:both; + margin-left:auto; + margin-right:auto; + padding:0.7em; + } + .org-info-box img { + float:left; + margin:0em 0.5em 0em 0em; + } + .org-info-box p { + margin:0em; + padding:0em; + } + + + .builtin { + /* font-lock-builtin-face */ + color: #f4a460; + } + .comment { + /* font-lock-comment-face */ + color: #737373; + } + .comment-delimiter { + /* font-lock-comment-delimiter-face */ + color: #666666; + } + .constant { + /* font-lock-constant-face */ + color: #db7093; + } + .doc { + /* font-lock-doc-face */ + color: #b3b3b3; + } + .function-name { + /* font-lock-function-name-face */ + color: #5f9ea0; + } + .headline { + /* headline-face */ + color: #ffffff; + background-color: #000000; + font-weight: bold; + } + .keyword { + /* font-lock-keyword-face */ + color: #4682b4; + } + .negation-char { + } + .regexp-grouping-backslash { + } + .regexp-grouping-construct { + } + .string { + /* font-lock-string-face */ + color: #ccc79a; + } + .todo-comment { + /* todo-comment-face */ + color: #ffffff; + background-color: #000000; + font-weight: bold; + } + .variable-name { + /* font-lock-variable-name-face */ + color: #ff6a6a; + } + .warning { + /* font-lock-warning-face */ + color: #ffffff; + background-color: #cd5c5c; + font-weight: bold; + } + .important { + /* font-lock-warning-face */ + background-color: #e3e3f7; + } + .note { + /* font-lock-warning-face */ + background-color: #f7f7d9; + } + pre.a { + color: inherit; + background-color: inherit; + font: inherit; + text-decoration: inherit; + } + pre.a:hover { + text-decoration: underline; + } + + /* Styles for org-info.js */ + + .org-info-js_info-navigation + { + border-style:none; + } + + #org-info-js_console-label + { + font-size:10px; + font-weight:bold; + white-space:nowrap; + } + + .org-info-js_search-highlight + { + background-color:#ffff00; + color:#000000; + font-weight:bold; + } + + #org-info-js-window + { + border-bottom:1px solid black; + padding-bottom:10px; + margin-bottom:10px; + } + + + + .org-info-search-highlight + { + background-color:#adefef; /* same color as emacs default */ + color:#000000; + font-weight:bold; + } + + .org-bbdb-company { + /* bbdb-company */ + font-style: italic; + } + .org-bbdb-field-name { + } + .org-bbdb-field-value { + } + .org-bbdb-name { + /* bbdb-name */ + text-decoration: underline; + } + .org-bold { + /* bold */ + font-weight: bold; + } + .org-bold-italic { + /* bold-italic */ + font-weight: bold; + font-style: italic; + } + .org-border { + /* border */ + background-color: #000000; + } + .org-buffer-menu-buffer { + /* buffer-menu-buffer */ + font-weight: bold; + } + .org-builtin { + /* font-lock-builtin-face */ + color: #da70d6; + } + .org-button { + /* button */ + text-decoration: underline; + } + .org-c-nonbreakable-space { + /* c-nonbreakable-space-face */ + background-color: #ff0000; + font-weight: bold; + } + .org-calendar-today { + /* calendar-today */ + text-decoration: underline; + } + .org-comment { + /* font-lock-comment-face */ + color: #b22222; + } + .org-comment-delimiter { + /* font-lock-comment-delimiter-face */ + color: #b22222; + } + .org-constant { + /* font-lock-constant-face */ + color: #5f9ea0; + } + .org-cursor { + /* cursor */ + background-color: #000000; + } + .org-default { + /* default */ + color: #000000; + background-color: #ffffff; + } + .org-diary { + /* diary */ + color: #ff0000; + } + .org-doc { + /* font-lock-doc-face */ + color: #bc8f8f; + } + .org-escape-glyph { + /* escape-glyph */ + color: #a52a2a; + } + .org-file-name-shadow { + /* file-name-shadow */ + color: #7f7f7f; + } + .org-fixed-pitch { + } + .org-fringe { + /* fringe */ + background-color: #f2f2f2; + } + .org-function-name { + /* font-lock-function-name-face */ + color: #0000ff; + } + .org-header-line { + /* header-line */ + color: #333333; + background-color: #e5e5e5; + } + .org-help-argument-name { + /* help-argument-name */ + font-style: italic; + } + .org-highlight { + /* highlight */ + background-color: #b4eeb4; + } + .org-holiday { + /* holiday */ + background-color: #ffc0cb; + } + .org-info-header-node { + /* info-header-node */ + color: #a52a2a; + font-weight: bold; + font-style: italic; + } + .org-info-header-xref { + /* info-header-xref */ + color: #0000ff; + text-decoration: underline; + } + .org-info-menu-header { + /* info-menu-header */ + font-weight: bold; + } + .org-info-menu-star { + /* info-menu-star */ + color: #ff0000; + } + .org-info-node { + /* info-node */ + color: #a52a2a; + font-weight: bold; + font-style: italic; + } + .org-info-title-1 { + /* info-title-1 */ + font-size: 172%; + font-weight: bold; + } + .org-info-title-2 { + /* info-title-2 */ + font-size: 144%; + font-weight: bold; + } + .org-info-title-3 { + /* info-title-3 */ + font-size: 120%; + font-weight: bold; + } + .org-info-title-4 { + /* info-title-4 */ + font-weight: bold; + } + .org-info-xref { + /* info-xref */ + color: #0000ff; + text-decoration: underline; + } + .org-isearch { + /* isearch */ + color: #b0e2ff; + background-color: #cd00cd; + } + .org-italic { + /* italic */ + font-style: italic; + } + .org-keyword { + /* font-lock-keyword-face */ + color: #a020f0; + } + .org-lazy-highlight { + /* lazy-highlight */ + background-color: #afeeee; + } + .org-link { + /* link */ + color: #0000ff; + text-decoration: underline; + } + .org-link-visited { + /* link-visited */ + color: #8b008b; + text-decoration: underline; + } + .org-match { + /* match */ + background-color: #ffff00; + } + .org-menu { + } + .org-message-cited-text { + /* message-cited-text */ + color: #ff0000; + } + .org-message-header-cc { + /* message-header-cc */ + color: #191970; + } + .org-message-header-name { + /* message-header-name */ + color: #6495ed; + } + .org-message-header-newsgroups { + /* message-header-newsgroups */ + color: #00008b; + font-weight: bold; + font-style: italic; + } + .org-message-header-other { + /* message-header-other */ + color: #4682b4; + } + .org-message-header-subject { + /* message-header-subject */ + color: #000080; + font-weight: bold; + } + .org-message-header-to { + /* message-header-to */ + color: #191970; + font-weight: bold; + } + .org-message-header-xheader { + /* message-header-xheader */ + color: #0000ff; + } + .org-message-mml { + /* message-mml */ + color: #228b22; + } + .org-message-separator { + /* message-separator */ + color: #a52a2a; + } + .org-minibuffer-prompt { + /* minibuffer-prompt */ + color: #0000cd; + } + .org-mm-uu-extract { + /* mm-uu-extract */ + color: #006400; + background-color: #ffffe0; + } + .org-mode-line { + /* mode-line */ + color: #000000; + background-color: #bfbfbf; + } + .org-mode-line-buffer-id { + /* mode-line-buffer-id */ + font-weight: bold; + } + .org-mode-line-highlight { + } + .org-mode-line-inactive { + /* mode-line-inactive */ + color: #333333; + background-color: #e5e5e5; + } + .org-mouse { + /* mouse */ + background-color: #000000; + } + .org-negation-char { + } + .org-next-error { + /* next-error */ + background-color: #eedc82; + } + .org-nobreak-space { + /* nobreak-space */ + color: #a52a2a; + text-decoration: underline; + } + .org-org-agenda-date { + /* org-agenda-date */ + color: #0000ff; + } + .org-org-agenda-date-weekend { + /* org-agenda-date-weekend */ + color: #0000ff; + font-weight: bold; + } + .org-org-agenda-restriction-lock { + /* org-agenda-restriction-lock */ + background-color: #ffff00; + } + .org-org-agenda-structure { + /* org-agenda-structure */ + color: #0000ff; + } + .org-org-archived { + /* org-archived */ + color: #7f7f7f; + } + .org-org-code { + /* org-code */ + color: #7f7f7f; + } + .org-org-column { + /* org-column */ + background-color: #e5e5e5; + } + .org-org-column-title { + /* org-column-title */ + background-color: #e5e5e5; + font-weight: bold; + text-decoration: underline; + } + .org-org-date { + /* org-date */ + color: #a020f0; + text-decoration: underline; + } + .org-org-done { + /* org-done */ + color: #228b22; + font-weight: bold; + } + .org-org-drawer { + /* org-drawer */ + color: #0000ff; + } + .org-org-ellipsis { + /* org-ellipsis */ + color: #b8860b; + text-decoration: underline; + } + .org-org-formula { + /* org-formula */ + color: #b22222; + } + .org-org-headline-done { + /* org-headline-done */ + color: #bc8f8f; + } + .org-org-hide { + /* org-hide */ + color: #e5e5e5; + } + .org-org-latex-and-export-specials { + /* org-latex-and-export-specials */ + color: #8b4513; + } + .org-org-level-1 { + /* org-level-1 */ + color: #0000ff; + } + .org-org-level-2 { + /* org-level-2 */ + color: #b8860b; + } + .org-org-level-3 { + /* org-level-3 */ + color: #a020f0; + } + .org-org-level-4 { + /* org-level-4 */ + color: #b22222; + } + .org-org-level-5 { + /* org-level-5 */ + color: #228b22; + } + .org-org-level-6 { + /* org-level-6 */ + color: #5f9ea0; + } + .org-org-level-7 { + /* org-level-7 */ + color: #da70d6; + } + .org-org-level-8 { + /* org-level-8 */ + color: #bc8f8f; + } + .org-org-link { + /* org-link */ + color: #a020f0; + text-decoration: underline; + } + .org-org-property-value { + } + .org-org-scheduled-previously { + /* org-scheduled-previously */ + color: #b22222; + } + .org-org-scheduled-today { + /* org-scheduled-today */ + color: #006400; + } + .org-org-sexp-date { + /* org-sexp-date */ + color: #a020f0; + } + .org-org-special-keyword { + /* org-special-keyword */ + color: #bc8f8f; + } + .org-org-table { + /* org-table */ + color: #0000ff; + } + .org-org-tag { + /* org-tag */ + font-weight: bold; + } + .org-org-target { + /* org-target */ + text-decoration: underline; + } + .org-org-time-grid { + /* org-time-grid */ + color: #b8860b; + } + .org-org-todo { + /* org-todo */ + color: #ff0000; + } + .org-org-upcoming-deadline { + /* org-upcoming-deadline */ + color: #b22222; + } + .org-org-verbatim { + /* org-verbatim */ + color: #7f7f7f; + text-decoration: underline; + } + .org-org-warning { + /* org-warning */ + color: #ff0000; + font-weight: bold; + } + .org-outline-1 { + /* outline-1 */ + color: #0000ff; + } + .org-outline-2 { + /* outline-2 */ + color: #b8860b; + } + .org-outline-3 { + /* outline-3 */ + color: #a020f0; + } + .org-outline-4 { + /* outline-4 */ + color: #b22222; + } + .org-outline-5 { + /* outline-5 */ + color: #228b22; + } + .org-outline-6 { + /* outline-6 */ + color: #5f9ea0; + } + .org-outline-7 { + /* outline-7 */ + color: #da70d6; + } + .org-outline-8 { + /* outline-8 */ + color: #bc8f8f; + } + .outline-text-1, .outline-text-2, .outline-text-3, .outline-text-4, .outline-text-5, .outline-text-6 { + /* Add more spacing between section. Padding, so that folding with org-info.js works as expected. */ + + } + + .org-preprocessor { + /* font-lock-preprocessor-face */ + color: #da70d6; + } + .org-query-replace { + /* query-replace */ + color: #b0e2ff; + background-color: #cd00cd; + } + .org-regexp-grouping-backslash { + /* font-lock-regexp-grouping-backslash */ + font-weight: bold; + } + .org-regexp-grouping-construct { + /* font-lock-regexp-grouping-construct */ + font-weight: bold; + } + .org-region { + /* region */ + background-color: #eedc82; + } + .org-rmail-highlight { + } + .org-scroll-bar { + /* scroll-bar */ + background-color: #bfbfbf; + } + .org-secondary-selection { + /* secondary-selection */ + background-color: #ffff00; + } + .org-shadow { + /* shadow */ + color: #7f7f7f; + } + .org-show-paren-match { + /* show-paren-match */ + background-color: #40e0d0; + } + .org-show-paren-mismatch { + /* show-paren-mismatch */ + color: #ffffff; + background-color: #a020f0; + } + .org-string { + /* font-lock-string-face */ + color: #bc8f8f; + } + .org-texinfo-heading { + /* texinfo-heading */ + color: #0000ff; + } + .org-tool-bar { + /* tool-bar */ + color: #000000; + background-color: #bfbfbf; + } + .org-tooltip { + /* tooltip */ + color: #000000; + background-color: #ffffe0; + } + .org-trailing-whitespace { + /* trailing-whitespace */ + background-color: #ff0000; + } + .org-type { + /* font-lock-type-face */ + color: #228b22; + } + .org-underline { + /* underline */ + text-decoration: underline; + } + .org-variable-name { + /* font-lock-variable-name-face */ + color: #b8860b; + } + .org-variable-pitch { + } + .org-vertical-border { + } + .org-warning { + /* font-lock-warning-face */ + color: #ff0000; + font-weight: bold; + } + .rss_box {} + .rss_title, rss_title a {} + .rss_items {} + .rss_item a:link, .rss_item a:visited, .rss_item a:active {} + .rss_item a:hover {} + .rss_date {} + + label.org-src-name { + font-size: 80%; + font-style: italic; + } + + #show_source {margin: 0; padding: 0;} + + #postamble { + font-size: 75%; + min-width: 700px; + max-width: 80%; + line-height: 14pt; + margin-left: 20px; + margin-top: 10px; + padding: .2em; + background-color: #ffffff; + z-index: -1000; + } + + +} /* END OF @media all */ + +@media screen +{ + #table-of-contents { + position: fixed; + margin-top: 105px; + float: right; + border: 1px solid #red; + max-width: 50%; + overflow: auto; + } +} /* END OF @media screen */