improve cmp

This commit is contained in:
matthias@quintern.xyz 2025-02-23 09:54:17 +01:00
parent 6944f7160b
commit 16aacd72d8
24 changed files with 656 additions and 369 deletions

View File

@ -4,6 +4,8 @@ from scipy.constants import gas_constant, Avogadro, elementary_charge
Faraday = Avogadro * elementary_charge
# BUTLER VOLMER / TAFEL
@np.vectorize
def fbutler_volmer_anode(ac, z, eta, T):
return np.exp((1-ac)*z*Faraday*eta/(gas_constant*T))
@ -73,8 +75,119 @@ def tafel():
ax.grid()
return fig
# NYQUIST
@np.vectorize
def fZ_ohm(R, omega):
return R
@np.vectorize
def fZ_cap(C, omega):
return 1/(1j*omega*C)
@np.vectorize
def fZ_ind(L, omega):
return (1j*omega*L)
def nyquist():
fig, ax = plt.subplots(figsize=(full/2, full/3))
split_z = lambda Z: (Z.real, -Z.imag)
ax.grid()
ax.set_xlabel("$\\text{Re}(Z)$ [\\si{\\ohm}]")
ax.set_ylabel("$-\\text{Im}(Z)$ [\\si{\\ohm}]")
# ax.scatter(*split_z(Z_series), label="series")
R1 = 20
R2 = 5
RS = 7.5
C1 = 1e-4
C2 = 1e-6
ws1 = np.power(10, np.linspace(1, 8, 1000))
Z_ohm1 = fZ_ohm(R1, ws1)
Z_ohm2 = fZ_ohm(R2, ws1)
Z_ohmS = fZ_ohm(RS, ws1)
Z_cap1 = fZ_cap(C1, ws1)
Z_cap2 = fZ_cap(C2, ws1)
Z_parallel1 = 1/(1/Z_ohm1 + 1/Z_cap1)
Z_parallel2 = 1/(1/Z_ohm2 + 1/Z_cap2)
Z_cell = Z_parallel1 + Z_parallel2 + Z_ohmS
ax.scatter(*split_z(Z_parallel1), label="Parallel $C_1,R_1$")
ax.scatter(*split_z(Z_parallel2), label="Parallel $C_2,R_2$")
ax.scatter(*split_z(Z_cell), label="P1 + $R_3$ + P2")
ax.scatter(*split_z(Z_cap1), label=f"$C_1=\\SI{{{C1:.0e}}}{{\\farad}}$")
ax.scatter(*split_z(Z_ohm1), label=f"$R_1 = \\SI{{{R1}}}{{\\ohm}}$")
# wmax1 = 1/(R1 * C1)
# ZatWmax1 = Z_parallel1[np.argmin(ws1 - wmax1)]
# print(ws1[0], ws1[-1])
# print(wmax1, ZatWmax1)
# ax.scatter(*split_z(ZatWmax1), color="red")
# ax.scatter(*split_z(Z_cell1), label="cell")
# ax.scatter(*split_z(Z_ohm2), label="ohmic")
# ax.scatter(*split_z(Z_cell2), label="cell")
ax.axis('equal')
ax.set_ylim(0,R1*1.1)
ax.legend()
return fig
def fZ_tlm(Rel, Rion, Rct, Cct, ws, N):
Zion = fZ_ohm(Rion, ws)
Zel = fZ_ohm(Rel, ws)
Zct = 1/(1/fZ_ohm(Rct, ws) + 1/fZ_cap(Cct, ws))
Z = Zct
for _ in range(N):
Z = Zion + 1/(1/Zct + 1/Z)
Z += Zel
return Z
def nyquist_tlm():
fig, ax = plt.subplots(figsize=(full/2, full/4))
split_z = lambda Z: (Z.real, -Z.imag)
ax.grid()
ax.set_xlabel("$\\text{Re}(Z)$ [\\si{\\ohm}]")
ax.set_ylabel("$-\\text{Im}(Z)$ [\\si{\\ohm}]")
Rct1 = 300
Rct2 = 100
Rion = 10
ws = np.power(10, np.linspace(1e-6, 5, 1000))
Z1 = fZ_tlm(0, Rion, Rct1, 1e-4, ws, 100)
Z2 = fZ_tlm(0, Rion, Rct2, 1e-4, ws, 100)
ax.scatter(*split_z(Z1), label=f"$R_\\text{{ct}} = \\SI{{{Rct1}}}{{\\ohm}}$", marker=".")
ax.scatter(*split_z(Z2), label=f"$R_\\text{{ct}} = \\SI{{{Rct2}}}{{\\ohm}}$", marker=".")
ax.axis('equal')
# ax.set_ylim(0,R1*1.1)
ax.legend()
return fig
def fkohlrausch(L0, K, c):
return L0 - K*np.sqrt(c)
def kohlrausch():
fig, ax = plt.subplots(figsize=(full/4, full/4))
ax.grid()
ax.set_xlabel("$c_\\text{salt}$")
ax.set_ylabel("$\\Lambda_\\text{M}$")
L0 = 10
K1 = 1
K2 = 2
cs = np.linspace(0, 10)
L1 = fkohlrausch(L0, K1, cs)
L2 = fkohlrausch(L0, K2, cs)
ax.plot(cs, L1, label=f"$K={K1}$")
ax.plot(cs, L2, label=f"$K={K2}$")
ax.legend()
return fig
if __name__ == '__main__':
export(butler_volmer(), "ch_butler_volmer")
export(tafel(), "ch_tafel")
export(nyquist(), "ch_nyquist")
export(nyquist_tlm(), "ch_nyquist_tlm")
export(kohlrausch(), "ch_kohlrausch")

View File

@ -24,12 +24,12 @@ import util.colorschemes as cs
from util.gen_tex_colorscheme import generate_latex_colorscheme
# SET THE COLORSCHEME
# hard white and black
# cs.p_gruvbox["fg0"] = "#000000"
# cs.p_gruvbox["bg0"] = "#ffffff"
# COLORSCHEME = cs.gruvbox_light()
cs.p_gruvbox["fg0-hard"] = "#000000"
cs.p_gruvbox["bg0-hard"] = "#ffffff"
COLORSCHEME = cs.gruvbox_light()
# COLORSCHEME = cs.gruvbox_dark()
# cs.p_tum["fg0"] = cs.p_tum["alt-blue"]
COLORSCHEME = cs.tum()
# COLORSCHEME = cs.tum()
# COLORSCHEME = cs.legacy()
tex_src_path = "../src/"

View File

@ -152,6 +152,7 @@ def tum():
for n,c in p_tum.items():
n2 = n.replace("light", "bg").replace("dark", "fg")
TUM[n2] = c
TUM["fg-blue"] = p_tum["alt-blue"] # dark blue is too black
return TUM
#

View File

@ -64,33 +64,33 @@
\pgfmathsetmacro{\H}{3}
\pgfmathsetmacro{\elW}{\W/20}
\pgfmathsetmacro{\CEx}{1/6*\W}
\pgfmathsetmacro{\REx}{1/6*\W}
\pgfmathsetmacro{\WEx}{3/6*\W}
\pgfmathsetmacro{\REx}{5/6*\W}
\pgfmathsetmacro{\CEx}{5/6*\W}
\fill[bg-blue] (0,0) rectangle (\W, \H/2);
\draw[ultra thick] (0,0) rectangle (\W,\H);
% Electrodes
\draw[thick, fill=bg-gray] (\CEx-\elW,\H/5) rectangle (\CEx+\elW,\H);
\draw[thick, fill=bg-gray] (\REx-\elW,\H/5) rectangle (\REx+\elW,\H);
\draw[thick, fill=bg-purple] (\WEx-\elW,\H/5) rectangle (\WEx+\elW,\H);
\draw[thick, fill=bg-yellow] (\REx-\elW,\H/5) rectangle (\REx+\elW,\H);
\node at (\CEx,3*\H/5) {C};
\node at (\WEx,3*\H/5) {W};
\draw[thick, fill=bg-yellow] (\CEx-\elW,\H/5) rectangle (\CEx+\elW,\H);
\node at (\REx,3*\H/5) {R};
\node at (\WEx,3*\H/5) {W};
\node at (\CEx,3*\H/5) {C};
% potentiostat
\pgfmathsetmacro{\potH}{\H+0.5+2}
\pgfmathsetmacro{\potM}{\H+0.5+1}
\draw[thick] (0,\H+0.5) rectangle (\W,\potH);
% Wires
\draw (\CEx,\H) -- (\CEx,\potM) to[voltmeter,-o] (\WEx,\potM) to[european voltage source] (\WEx+1/6*\W,\potM) to[ammeter] (\REx,\potM);
\draw (\REx,\H) -- (\REx,\potM) to[voltmeter,-o] (\WEx,\potM) to[european voltage source] (\WEx+1/6*\W,\potM) to[ammeter] (\CEx,\potM);
\draw (\WEx,\H) -- (\WEx,\H+1.5);
\draw (\REx,\H) -- (\REx,\H+1.5);
\draw (\CEx,\H) -- (\CEx,\H+1.5);
% labels
\node[anchor=west, align=left] at (\W+0.2, 1*\H/4) {{\color{bg-gray} \blacksquare} \GT{counter_electrode}};
\node[anchor=west, align=left] at (\W+0.2, 1*\H/4) {{\color{bg-gray} \blacksquare} \GT{reference_electrode}};
\node[anchor=west, align=left] at (\W+0.2, 2*\H/4) {{\color{bg-purple}\blacksquare} \GT{working_electrode}};
\node[anchor=west, align=left] at (\W+0.2, 3*\H/4) {{\color{bg-yellow}\blacksquare} \GT{reference_electrode}};
\node[anchor=west, align=left] at (\W+0.2, 3*\H/4) {{\color{bg-yellow}\blacksquare} \GT{counter_electrode}};
\node[anchor=west, align=left] at (\W+0.2, \potM) {\GT{potentiostat}};
\end{tikzpicture}
\end{formula}
@ -189,19 +189,6 @@
\eq{ i_\text{conv} = \sum_i -z_i F \, c_i \, v_i^\text{flow} }
\end{formula}
\begin{formula}{ionic_conductivity}
\desc{Ionic conductivity}{}{\ConstRef{faraday}, $z_i$, $c_i$, $\mu_i$ charge number, \qtyRef{concentration} and \qtyRef{mobility} of the positive (+) and negative (-) ions}
\desc[german]{Ionische Leitfähigkeit}{}{\ConstRef{faraday}, $z_i$, $c_i$, $\mu_i$ Ladungszahl, \qtyRef{concentration} und \qtyRef{mobility} der positiv (+) und negativ geladenen Ionen}
\quantity{\kappa}{\per\ohm\cm=\siemens\per\cm}{}
\eq{\kappa = F^2 \left(z_+^2 \, c_+ \, \mu_+ + z_-^2 \, c_- \, \mu_-\right)}
\end{formula}
\begin{formula}{ionic_resistance}
\desc{Ohmic resistance of ionic current flow}{}{$L$ \qtyRef{length}, $A$ \qtyRef{area}, \QtyRef{ionic_conductivity}}
\desc[german]{Ohmscher Widerstand für Ionen-Strom}{}{}
\eq{R_\Omega = \frac{L}{A\,\kappa}}
\end{formula}
\begin{formula}{ionic_mobility}
\desc{Ionic mobility}{}{$v_\pm$ steady state drift \qtyRef{velocity}, $\phi$ \qtyRef{electric_scalar_potential}, $z$ \qtyRef{charge_number}, \ConstRef{faraday}, \ConstRef{charge}, \QtyRef{viscosity}, $r_\pm$ ion radius}
\desc[german]{Ionische Moblilität}{}{}
@ -215,6 +202,20 @@
\eq{F_\txR = 6\pi\,r \eta v}
\end{formula}
\begin{formula}{ionic_conductivity}
\desc{Ionic conductivity}{}{\ConstRef{faraday}, $z_i$, $c_i$, $u_i$ charge number, \qtyRef{concentration} and \qtyRef{ionic_mobility} of the positive (+) and negative (-) ions}
\desc[german]{Ionische Leitfähigkeit}{}{\ConstRef{faraday}, $z_i$, $c_i$, $u_i$ Ladungszahl, \qtyRef{concentration} und \qtyRef{ionic_mobility} der positiv (+) und negativ geladenen Ionen}
\quantity{\kappa}{\per\ohm\cm=\siemens\per\cm}{}
\eq{\kappa = F^2 \left(z_+^2 \, c_+ \, u_+ + z_-^2 \, c_- \, u_-\right)}
\end{formula}
\begin{formula}{ionic_resistance}
\desc{Ohmic resistance of ionic current flow}{}{$L$ \qtyRef{length}, $A$ \qtyRef{area}, \QtyRef{ionic_conductivity}}
\desc[german]{Ohmscher Widerstand für Ionen-Strom}{}{}
\eq{R_\Omega = \frac{L}{A\,\kappa}}
\end{formula}
\begin{formula}{transference}
\desc{Transference number}{Ion transport number \\Fraction of the current carried by positive / negative ions}{$i_{+/-}$ current through positive/negative charges}
\desc[german]{Überführungszahl}{Anteil der positiv / negativ geladenen Ionen am Gesamtstrom}{$i_{+/-}$ Strom durch positive / negative Ladungn}
@ -231,29 +232,30 @@
\end{formula}
\begin{formula}{kohlrausch_law}
\desc{Kohlrausch's law}{}{$\Lambda_\txM^0$ \qtyRef{molar_conductivity} at infinite dilution, $c_\text{salt}$ \gt{csalt}, $K$ \GT{constant}}
\desc[german]{}{}{$\Lambda_\txM^0$ \qtyRef{molar_conductivity} bei unendlicher Verdünnung, $\text{salt}$ \gt{csalt} $K$ \GT{constant}}
\desc{Kohlrausch's law}{For strong electrolytes}{$\Lambda_\txM^0$ \qtyRef{molar_conductivity} at infinite dilution, $c_\text{salt}$ \gt{csalt}, $K$ \GT{constant}}
\desc[german]{}{}{$\Lambda_\txM^0$ \qtyRef{molar_conductivity} bei unendlicher Verdünnung, $\text{salt}$ \gt{csalt},$K$ \GT{constant}}
\eq{\Lambda_\txM = \Lambda_\txM^0 - K \sqrt{c_\text{salt}}}
\fig{img/ch_kohlrausch.pdf}
\end{formula}
% Electrolyte conductivity
\begin{formula}{molality}
\desc{Molality}{}{\QtyRef{amount} of the solute, \QtyRef{mass} of the solvent}
\desc[german]{Molalität}{}{\QtyRef{amount} des gelösten Stoffs, \QtyRef{mass} des Lösungsmittels}
\desc{Molality}{Amount per mass}{\QtyRef{amount} of the solute, \QtyRef{mass} of the solvent}
\desc[german]{Molalität}{Stoffmenge pro Masse}{\QtyRef{amount} des gelösten Stoffs, \QtyRef{mass} des Lösungsmittels}
\quantity{b}{\mol\per\kg}{}
\eq{b = \frac{n}{m}}
\end{formula}
\begin{formula}{molarity}
\desc{Molarity}{\GT{see} \qtyRef{concentration}}{\QtyRef{amount} of the solute, \QtyRef{volume} of the solvent}
\desc[german]{Molarität}{}{\QtyRef{amount} des gelösten Stoffs, \QtyRef{volume} des Lösungsmittels}
\desc{Molarity}{Amount per volume\\\qtyRef{concentration}}{\QtyRef{amount} of the solute, \QtyRef{volume} of the solvent}
\desc[german]{Molarität}{Stoffmenge pro Volumen\\\qtyRef{concentration}}{\QtyRef{amount} des gelösten Stoffs, \QtyRef{volume} des Lösungsmittels}
\quantity{c}{\mol\per\litre}{}
\eq{c = \frac{n}{V}}
\end{formula}
\begin{formula}{ionic_strength}
\desc{Ionic strength}{Measure of the electric field in a solution through solved ions}{\QtyRef{molality}, \QtyRef{molarity}, $z$ \qtyRef{charge_number}}
\desc[german]{Ionenstärke}{Maß eienr Lösung für die elektrische Feldstärke durch gelöste Ionen}{}
\desc[german]{Ionenstärke}{Maß einer Lösung für die elektrische Feldstärke durch gelöste Ionen}{}
\quantity{I}{\mol\per\kg;\mol\per\litre}{}
\eq{I_b &= \frac{1}{2} \sum_i b_i z_i^2 \\ I_c &= \frac{1}{2} \sum_i c_i z_i^2}
\end{formula}
@ -265,10 +267,11 @@
\end{formula}
\begin{formula}{mean_ionic_activity}
\desc{Mean ionic activity coefficient}{Accounts for decreased reactivity because ions must divest themselves of their ion cloud before reacting}{}
\desc{Mean ionic activity coefficient}{Accounts for decreased reactivity because ions must divest themselves of their ion cloud before reacting}{\QtyRef{activity}, $m_i$ \qtyRef{molality}, $m_0 = \SI{1}{\mol\per\kg}$}
\desc[german]{Mittlerer ionischer Aktivitätskoeffizient}{Berücksichtigt dass Ionen sich erst von ihrer Ionenwolke lösen müssen, bevor sie reagieren können}{}
\quantity{\gamma}{}{s}
\eq{\gamma_\pm = \left(\gamma_+^{\nu_+} \, \gamma_-^{\nu_-}\right)^{\frac{1}{\nu_+ + \nu_-}}}
\eq{a_i \equiv \gamma_i \frac{m_i}{m^0}}
\end{formula}
\begin{formula}{debye_hueckel_law}
@ -324,40 +327,94 @@
\eq{\eta_\text{diff} = \frac{RT}{nF} \Ln{\frac{j_\infty}{j_\infty - j_\text{meas}}}}
\end{formula}
% 1: ion radius
% 2: ion color
% 3: ion label
% 4: N solvents, leave empty for none
% 5: solvent radius 6: solvent color
% 7:position
\newcommand{\drawIon}[7]{%
\fill[#2] (#7) circle[radius=#1] node[fg0] {#3};
\ifstrempty{#4}{}{
\foreach \j in {1,...,#4} {
\pgfmathsetmacro{\angle}{\j * 360/#4}
\fill[#6] (#7) ++(\angle:#1 + #5) circle[radius=#5];
}
}
}
\newcommand{\drawAnion}[1]{\drawIon{\Ranion}{bg-blue}{-}{}{}{}{#1}}
\newcommand{\drawCation}[1]{\drawIon{\Rcation}{bg-red}{+}{}{}{}{#1}}
\newcommand{\drawAnionSolved}[1]{\drawIon{\Ranion}{bg-blue}{-}{6}{\Rsolvent}{fg-blue!50!bg2}{#1}}
\Eng[electrode]{Electrode}
\Ger[electrode]{Elektrode}
\Eng[nernst_layer]{Nernst layer}
\Ger[nernst_layer]{Nernst-Schicht}
\Eng[electrolyte]{Electrolyte}
\Ger[electrolyte]{Elektrolyt}
\Eng[c_surface]{surface \qtyRef{concentration}}
\Eng[c_bulk]{bulk \qtyRef{concentration}}
\Ger[c_surface]{Oberflächen-\qtyRef{concentration}}
\Ger[c_bulk]{Bulk-\qtyRef{concentration}}
\begin{formula}{diffusion_layer}
\desc{Cell layers}{}{}
\desc[german]{Zellschichten}{}{}
\desc{Cell layers}{}{IHP/OHP inner/outer Helmholtz-plane, $c^0$ \GT{c_bulk}, $c^\txS$ \GT{c_surface}}
\desc[german]{Zellschichten}{}{IHP/OHP innere/äußere Helmholtzschicht, $c^0$ \GT{c_bulk}, $c^\txS$ \GT{c_surface}}
\begin{tikzpicture}
\tikzset{
label/.style={color=fg1,anchor=center,rotate=90},
}
\pgfmathsetmacro{\Ranion}{0.15}
\pgfmathsetmacro{\Rcation}{0.2}
\pgfmathsetmacro{\Rsolvent}{0.06}
\pgfmathsetmacro{\tkW}{8} % Total width
\pgfmathsetmacro{\tkH}{4} % Total height
\pgfmathsetmacro{\edW}{1} % electrode width
\pgfmathsetmacro{\hhW}{1} % helmholtz width
\pgfmathsetmacro{\ndW}{2} % nernst diffusion with
\pgfmathsetmacro{\hhW}{4*\Rsolvent+2*\Ranion} % helmholtz width
\pgfmathsetmacro{\ndW}{3} % nernst diffusion with
\pgfmathsetmacro{\eyW}{\tkW-\edW-\hhW-\ndW} % electrolyte width
\pgfmathsetmacro{\edX}{0} % electrode width
\pgfmathsetmacro{\hhX}{\edW} % helmholtz width
\pgfmathsetmacro{\ndX}{\edW+\hhW} % nernst diffusion with
\pgfmathsetmacro{\eyX}{\tkW-\eyW} % electrolyte width
\path[fill=bg-orange] (\edX,0) rectangle (\edX+\edW,\tkH); \node[label] at (\edX+\edW/2,\tkH/2) {\GT{electrode}};
\path[fill=bg-green!90!bg0] (\hhX,0) rectangle (\hhX+\hhW,\tkH); \node[label] at (\hhX+\hhW/2,\tkH/2) {\GT{helmholtz_layer}};
\path[fill=bg-green!60!bg0] (\ndX,0) rectangle (\ndX+\ndW,\tkH); \node[label] at (\ndX+\ndW/2,\tkH/2) {\GT{nernst_layer}};
\path[fill=bg-green!20!bg0] (\eyX,0) rectangle (\eyX+\eyW,\tkH); \node[label] at (\eyX+\eyW/2,\tkH/2) {\GT{electrolyte}};
\draw (\hhX,2) -- (\ndX,3) -- (\tkW,3);
\path[fill=bg-orange] (\edX,0) rectangle (\edX+\edW,\tkH);
\path[fill=bg-green!90!bg0] (\hhX,0) rectangle (\hhX+\hhW,\tkH);
\path[fill=bg-green!60!bg0] (\ndX,0) rectangle (\ndX+\ndW,\tkH);
\path[fill=bg-green!20!bg0] (\eyX,0) rectangle (\eyX+\eyW,\tkH);
\draw (\ndX,2) -- (\eyX,3) -- (\tkW,3);
% axes
\draw[->] (0,0) -- (\tkW+0.2,0) node[anchor=north] {$x$};
\draw[->] (0,0) -- (0,\tkH+0.2) node[anchor=east] {$c$};
\tkYTick{2}{$c^\txS$};
\tkYTick{3}{$c^0$};
\foreach \i in {1,...,5} {
\drawCation{\edW-\Ranion, \tkH * \i /6}
\drawAnionSolved{\edW+\Rcation+2*\Rsolvent, \tkH * \i /6}
}
\drawCation{\ndX+\ndW * 0.1, \tkH * 2/10}
\drawCation{\ndX+\ndW * 0.15, \tkH * 4/10}
\drawCation{\ndX+\ndW * 0.1, \tkH * 6/10}
\drawCation{\ndX+\ndW * 0.1, \tkH * 9/10}
\drawAnion{ \ndX+\ndW * 0.2, \tkH * 7/10}
\drawAnion{ \ndX+\ndW * 0.4, \tkH * 4/10}
\drawAnion{ \ndX+\ndW * 0.3, \tkH * 3/10}
\drawAnion{ \ndX+\ndW * 0.5, \tkH * 6/10}
\drawAnion{ \ndX+\ndW * 0.8, \tkH * 3/10}
\drawAnion{ \ndX+\ndW * 0.3, \tkH * 1/10}
\drawAnion{ \ndX+\ndW * 0.4, \tkH * 9/10}
\drawAnion{ \ndX+\ndW * 0.6, \tkH * 7/10}
\drawCation{\ndX+\ndW * 0.3, \tkH * 3/10}
\drawCation{\ndX+\ndW * 0.6, \tkH * 8/10}
\draw (\edX+\Rcation, 0) -- ++(0, -0.5) node[anchor=west,rotate=-45] {\GT{electrode}};
\draw (\edX+\edW-\Rcation, 0) -- ++(0, -0.5) node[anchor=west,rotate=-45] {{IHP}};
\draw (\hhX+\hhW/2, 0) -- ++(0, -0.5) node[anchor=west,rotate=-45] {{OHP}};
\draw (\ndX+\ndW/2, 0) -- ++(0, -0.5) node[anchor=west,rotate=-45] {\GT{nernst_layer}};
\draw (\eyX+\eyW/2, 0) -- ++(0, -0.5) node[anchor=west,rotate=-45] {\GT{electrolyte}};
% TODO
\end{tikzpicture}
\end{formula}
\Eng[c_surface]{surface \qtyRef{concentration}}
\Eng[c_bulk]{bulk \qtyRef{concentration}}
\Ger[c_surface]{Oberflächen-\qtyRef{concentration}}
\Ger[c_bulk]{Bulk-\qtyRef{concentration}}
\begin{formula}{diffusion_layer_thickness}
@ -458,8 +515,8 @@
\desc{Reversible hydrogen electrode (RHE)}{RHE Potential does not change with the pH value}{$E^0\equiv \SI{0}{\volt}$, \QtyRef{activity}, \QtyRef{pressure}, \GT{see} \fqEqRef{ch:el:cell:nernst_equation}}
\desc[german]{Reversible Wasserstoffelektrode (RHE)}{Potential ändert sich nicht mit dem pH-Wert}{}
\eq{
E_\text{RHE} &= E^0 + \frac{RT}{F} \Ln{\frac{a_{\ce{H^+}}}{p_{\ce{H2}}}} \\
&= \SI{0}{\volt} - \SI{0.059}{\volt}
E_\text{RHE} &= E^0 + \frac{RT}{F} \Ln{\frac{a_{\ce{H^+}}}{p_{\ce{H2}}}}
% \\ &= \SI{0}{\volt} - \SI{0.059}{\volt}
}
\end{formula}
@ -532,9 +589,15 @@
\end{minipage}
\end{bigformula}
\begin{formula}{charge}
\desc{Charge}{Area under the curve}{$v$ \qtyRef{scan_rate}}
\desc[german]{Ladung}{Fläche unter der Kurve}{}
\eq{q = \frac{1}{v} \int_{E_1}^{E_2}j\,\d E}
\end{formula}
\begin{formula}{peak_current}
\desc{Randles-Sevcik equation}{For reversible reaction.\\Peak current depends on square root of the scan rate}{$n$ \qtyRef{charge_number}, \ConstRef{faraday}, $A$ electrode surface area, $c^0$ bulk \qtyRef{concentration}, $v$ \qtyRef{scan_rate}, $D_\text{ox}$ \qtyRef{diffusion_coefficient} of oxidized analyte, \ConstRef{universal_gas}, \QtyRef{temperature}}
\desc[german]{Randles-Sevcik Gleichung}{Spitzenstrom}{}
\desc{Randles-Sevcik equation}{For reversible faradaic reaction.\\Peak current depends on square root of the scan rate}{$n$ \qtyRef{charge_number}, \ConstRef{faraday}, $A$ electrode surface area, $c^0$ bulk \qtyRef{concentration}, $v$ \qtyRef{scan_rate}, $D_\text{ox}$ \qtyRef{diffusion_coefficient} of oxidized analyte, \ConstRef{universal_gas}, \QtyRef{temperature}}
\desc[german]{Randles-Sevcik Gleichung}{Für eine reversible, faradäische Reaktion\\Spitzenstrom hängt von der Wurzel der Scanrate ab}{}
\eq{i_\text{peak} = 0.446\,nFAc^0 \sqrt{\frac{nFvD_\text{ox}}{RT}}}
\end{formula}
@ -570,7 +633,7 @@
\begin{formula}{diffusion_layer_thickness}
\desc{Diffusion layer thickness}{\TODO{Where does 1.61 come from}}{$D$ \qtyRef{diffusion_coefficient}, $\nu$ \qtyRef{kinematic_viscosity}, \QtyRef{angular_frequency}}
\desc[german]{Diffusionsshichtdicke}{}{}
\desc[german]{Diffusionsschichtdicke}{}{}
\eq{\delta_\text{diff}= 1.61 D{^\frac{1}{3}} \nu^{\frac{1}{6}} \omega^{-\frac{1}{2}}}
\end{formula}
@ -580,4 +643,40 @@
\eq{j_\infty = nFD \frac{c^0}{\delta_\text{diff}} = \frac{1}{1.61} nFD^{\frac{2}{3}} v^{\frac{-1}{6}} c^0 \sqrt{\omega}}
\end{formula}
\Subsubsection[
\eng{AC-Impedance}
\ger{AC-Impedanz}
]{ac}
\begin{formula}{nyquist}
\desc{Nyquist diagram}{Real and imaginary parts of \qtyRef{impedance} while varying the frequency}{}
\desc[german]{Nyquist-Diagram}{Real und Imaginaärteil der \qtyRef{impedance} während die Frequenz variiert wird}{}
\fig{img/ch_nyquist.pdf}
\end{formula}
\begin{formula}{tlm}
\desc{Transmission line model}{Model of porous electrodes as many slices}{$R_\text{ion}$ ion conduction resistance in electrode slice, $R$ / $C$ resistance / capacitance of electode slice}
% \desc[german]{}{}{}
\ctikzsubcircuitdef{rcpair}{in, out}{%
coordinate(#1-in)
(#1-in) -- ++(0, -\rcpairH)
-- ++(\rcpairW, 0) to[R, l=$R$] ++(0,-\rcpairL) -- ++(-\rcpairW, 0)
-- ++(0,-\rcpairH) coordinate (#1-out) ++(0,\rcpairH)
-- ++(-\rcpairW, 0) to[C, l=$C$] ++(0,\rcpairL) -- ++(\rcpairW,0)
(#1-out)
}
\pgfmathsetmacro{\rcpairH}{0.5}
\pgfmathsetmacro{\rcpairW}{0.5}
\pgfmathsetmacro{\rcpairL}{1.8}
\ctikzsubcircuitactivate{rcpair}
\pgfmathsetmacro{\rcpairD}{3.0} % distance
\centering
\begin{circuitikz}[/tikz/circuitikz/bipoles/length=1cm,scale=0.7]
\draw (0,0) to[R,l=$R_\text{electrolyte}$] ++(2,0) -- ++(1,0)
\rcpair{rc1}{} (rc1-in) to[R,l=$R_\text{ion}$] ++(\rcpairD,0) \rcpair{rc2}{} (rc2-in) to[R,l=$R_\text{ion}$] ++(\rcpairD,0) ++(\rcpairD,0) \rcpair{rc3}{};
\draw[dashed] (rc2-in) ++(\rcpairD,0) -- (rc3-in) (rc2-out) ++(\rcpairD,0) -- (rc3-out);
\draw (rc1-out) -- (rc2-out) -- ++(\rcpairD,0) (rc3-out) -- ++(\rcpairD/2,0);
\end{circuitikz}
\fig{img/ch_nyquist_tlm.pdf}
\end{formula}

View File

@ -3,7 +3,7 @@
\ger{Thermoelektrizität}
]{thermo}
\begin{formula}{seebeck}
\desc{Seebeck coefficient}{}{$V$ voltage, \QtyRef{temperature}}
\desc{Seebeck coefficient}{Thermopower}{$V$ voltage, \QtyRef{temperature}}
\desc[german]{Seebeck-Koeffizient}{}{}
\quantity{S}{\micro\volt\per\kelvin}{s}
\eq{S = -\frac{\Delta V}{\Delta T}}
@ -23,15 +23,15 @@
\end{formula}
\begin{formula}{wiedemann-franz}
\desc{Wiedemann-Franz law}{}{Electric \QtyRef{thermal_conductivity}, $L$ in \si{\watt\ohm\per\kelvin} Lorentz number, \QtyRef{conductivity}}
\desc[german]{Wiedemann-Franz Gesetz}{}{Elektrische \QtyRef{thermal_conductivity}, $L$ in \si{\watt\ohm\per\kelvin} Lorentzzahl, \QtyRef{conductivity}}
\desc{Wiedemann-Franz law}{}{$\kappa$ Electric \qtyRef{thermal_conductivity}, $L$ in \si{\watt\ohm\per\kelvin} Lorentz number, \QtyRef{conductivity}}
\desc[german]{Wiedemann-Franz Gesetz}{}{$\kappa$ Elektrische \qtyRef{thermal_conductivity}, $L$ in \si{\watt\ohm\per\kelvin} Lorentzzahl, \QtyRef{conductivity}}
\eq{\kappa = L\sigma T}
\end{formula}
\begin{formula}{zt}
\desc{Thermoelectric figure of merit}{Dimensionless quantity for comparing different materials}{\QtyRef{seebeck}, \QtyRef{conductivity}, }
\desc{Thermoelectric figure of merit}{Dimensionless quantity for comparing different materials}{\QtyRef{seebeck}, \QtyRef{conductivity}, $\kappa$ \qtyRef{thermal_conductivity}, \QtyRef{temperature}}
\desc[german]{Thermoelektrische Gütezahl}{Dimensionsoser Wert zum Vergleichen von Materialien}{}
\eq{zT = \frac{S^2\sigma}{\lambda} T}
\eq{zT = \frac{S^2\sigma}{\kappa} T}
\end{formula}
@ -93,6 +93,7 @@
\begin{formula}{common_chemicals}
\desc{Common chemicals}{}{}
\desc[german]{Häufige Chemikalien}{}{}
\centering
\begin{tabular}{l|c}
\GT{name} & \GT{formula} \\ \hline\hline
\begin{ttext}[cyanide]\eng{Cyanide}\ger{Zyanid}\end{ttext} & \ce{CN} \\ \hline

View File

@ -28,26 +28,38 @@
\begin{formula}{dispersion_1atom_basis}
\desc{Phonon dispersion of a lattice with a one-atom basis}{same as the dispersion of a linear chain}{$C_n$ force constants between layer $s$ and $s+n$, $M$ \qtyRef{mass} of the reference atom, $a$ \qtyRef{lattice_constant}, $q$ phonon \qtyRef{wavevector}, $u$ Ansatz for the atom displacement}
\desc[german]{Phonondispersion eines Gitters mit zweiatomiger Basis}{gleich der Dispersion einer linearen Kette}{$C_n$ Kraftkonstanten zwischen Ebene $s$ und $s+n$, $M$ \qtyRef{mass} des Referenzatoms, $a$ \qtyRef{lattice_constant}, $q$ Phonon \qtyRef{wavevector}, $u$ Ansatz für die Atomauslenkung}
\eq{
\begin{gather}
\omega^2 = \frac{4C_1}{M}\left[\sin^2 \left(\frac{qa}{2}\right) + \frac{C2}{C1} \sin^2(qa)\right] \\
\intertext{\GT{with}}
u_{s+n} = U\e^{-i \left[\omega t - q(s+n)a \right]}
}
\end{gather}
\fig{img/cm_phonon_dispersion_one_atom_basis.pdf}
\end{formula}
\TODO{Plots}
\begin{formula}{dispersion_2atom_basis}
\desc{Phonon dispersion of a lattice with a two-atom basis}{}{$C$ force constant between layers, $M_i$ \qtyRef{mass} of the basis atoms, $a$ \qtyRef{lattice_constant}, $q$ phonon \qtyRef{wavevector}, $u, v$ Ansatz for the displacement of basis atom 1 and 2, respectively}
\desc[german]{Phonondispersion eines Gitters mit einatomiger Basis}{}{$C$ Kraftkonstanten zwischen Ebene $s$ und $s+n$, $M_i$ \qtyRef{mass} der Basisatome, $a$ \qtyRef{lattice_constant}, $q$ Phonon \qtyRef{wavevector}, $u, v$ jeweils Ansatz für die Atomauslenkung des Basisatoms 1 und 2}
\eq{
\begin{gather}
\omega^2_{\txa,\txo} = C \left(\frac{1}{M_1}+\frac{1}{M_2}\right) \mp C \sqrt{\left(\frac{1}{M_1}+\frac{1}{M_2}\right)^2 - \frac{4}{M_1M_2} \sin^2 \left(\frac{qa}{2}\right)}
\intertext{\GT{with}}
u_{s} = U\e^{-i \left(\omega t - qsa \right)}, \quad
v_{s} = V\e^{-i \left(\omega t - qsa \right)}
}
\end{gather}
\fig{img/cm_phonon_dispersion_two_atom_basis.pdf}
\end{formula}
\begin{formula}{branches}
\desc{Vibration branches}{}{}
\desc[german]{Vibrationsmoden}{}{}
\ttxt{\eng{
\textbf{Acoustic}: 3 modes (1 longitudinal, 2 transversal), the two basis atoms oscillate in phase.
\\\textbf{Optical}: 3 modes, the two basis atoms oscillate in opposition. A dipole moment is created that can couple to photons.
}\ger{
\textbf{Akustisch}: 3 Moden (1 longitudinal, 2 transversal), die zwei Basisatome schwingen in Phase.
\\ \textbf{Optisch}: 3 Moden, die zwei Basisatome schwingen gegenphasig. Das dadurch entstehende Dipolmoment erlaubt die Wechselwirkung mit Photonen.
}}
\end{formula}
\Subsection[
\eng{Debye model}
\ger{Debye-Modell}

View File

@ -281,7 +281,7 @@
\item Use empirical interaction potential instead of electronic structure
\baditem Force fields need to be fitted for specific material \Rightarrow not transferable
\gooditem Faster than \abbrRef{bomd}
\item Example: \absRef{lennard_jones}
\item Example: \absRef[Lennard-Jones]{lennard_jones}
\end{itemize}
}}
\end{formula}
@ -309,8 +309,8 @@
\end{formula}
\begin{formula}{verlet}
\desc{Verlet integration}{Preverses time reversibility, does not require velocity updates}{}
\desc[german]{Verlet-Algorithmus}{Zeitumkehr-symmetrisch}{}
\desc{Verlet integration}{Preverses time reversibility, does not require velocity updates. Integration in 2nd order}{}
\desc[german]{Verlet-Algorithmus}{Zeitumkehr-symmetrisch. Interation in zweiter Ordnung}{}
\eq{
\vecR(t+\Delta t) = 2\vecR(t) -\vecR(t-\Delta t) + \veca(t) \Delta t^2 + \Order{\Delta t^4}
}
@ -325,7 +325,14 @@
}
\end{formula}
\TODO{leapfrog}
\begin{formula}{leapfrog}
\desc{Leapfrog}{Integration in 2nd order}{}
\desc[german]{Leapfrog}{Integration in zweiter Ordnung}{}
\eq{
x_{i+1} &= x_i + v_{i+1/2} \Delta t_i \\
v_{i+1/2} &= v_{i-1/2} + a_{i} \Delta t_i
}
\end{formula}
\Subsubsection[
\eng{Thermostats and barostats}

View File

@ -77,12 +77,14 @@
$\hat{T}$ kinetic electron energy,
$\hat{V}_{\text{en}}$ electron-nucleus attraction,
$\hat{V}_{\text{HF}}$ \fqEqRef{comp:dft:hf:potential},
$x = \vecr,\sigma$ position and spin
}
\desc[german]{Hartree-Fock Gleichung}{}{
$\varphi_\xi$ ein-Teilchen Wellenfunktion des $\xi$-ten Orbitals,
$\hat{T}$ kinetische Energie der Elektronen,
$\hat{V}_{\text{en}}$ Electron-Kern Anziehung,
$\hat{V}_{\text{HF}}$ \fqEqRef{comp:dft:hf:potential}
$\hat{V}_{\text{HF}}$ \fqEqRef{comp:dft:hf:potential},
$x = \vecr,\sigma$ Position and Spin
}
\eq{
\left(\hat{T} + \hat{V}_{\text{en}} + \hat{V}_{\text{HF}}^\xi\right)\varphi_\xi(x) = \epsilon_\xi \varphi_\xi(x)
@ -107,9 +109,9 @@
\ttxt{
\eng{
\begin{enumerate}
\item Initial guess for $\psi$
\item Initial guess for $\varphi$
\item Solve SG for each particle
\item Make new guess for $\psi$
\item Make new guess for $\varphi$
\end{enumerate}
}
}
@ -131,7 +133,7 @@
\desc{Hohenberg-Kohn theorem (HK2)}{}{}
\desc[german]{Hohenberg-Kohn Theorem (HK2)}{}{}
\ttxt{
\eng{Given the energy functional $E[n(\vecr)]$, the ground state density and energy can be obtained variationally. The density that minimizes the total energy is the ecxact ground state density. }
\eng{Given the energy functional $E[n(\vecr)]$, the ground state density and energy can be obtained variationally. The density that minimizes the total energy is the exact ground state density. }
\ger{Für ein Energiefunktional $E[n(\vecr)]$ kann die Grundzustandsdichte und Energie durch systematische Variation bestimmt werden. Die Dichte, welche die Gesamtenergie minimiert ist die exakte Grundzustandsichte. }
}
\end{formula}
@ -159,7 +161,7 @@
\desc{Kohn-Sham functional}{}{$T_\text{KS}$ kinetic enery, $V_\text{ext}$ external potential, $E_\txH$ \hyperref[f:comp:est:dft:hf:potential]{Hartree term}, $E_\text{XC}$ \fqEqRef{comp:est:dft:xc:xc}}
\desc[german]{Kohn-Sham Funktional}{}{}
\eq{E_\text{KS}[n(\vecr)] = T_\text{KS}[n(\vecr)] + V_\text{ext}[n(\vecr)] + E_\text{H}[n(\vecr)] + E_\text{XC}[n(\vecr)] }
\end{formula}
\end{formula}
\begin{formula}{equation}
\desc{Kohn-Sham equation}{Exact single particle \abbrRef{schroedinger_equation} (though often exact $E_\text{XC}$ is not known)\\ Solving it uses up a large portion of supercomputer resources}{$\phi_i^\text{KS}$ KS orbitals, $\int\d^3r v_\text{ext}(\vecr)n(\vecr)=V_\text{ext}[n(\vecr)]$}
@ -232,7 +234,6 @@
\ttxt{\eng{
Include \hyperref[f:comp:dft:hf:potential]{Fock term} (exact exchange) in other functional, like \abbrRef{gga}. Computationally expensive
}}
\end{formula}
@ -250,16 +251,123 @@
}}
\end{formula}
\begin{formula}{comparison}
\begin{bigformula}{comparison}
\desc{Comparison of DFT functionals}{}{}
\desc[german]{Vergleich von DFT Funktionalen}{}{}
\begin{tabular}{l|c}
\hyperref[f:comp:est:dft:hf:potential]{Hartree-Fock} & only exchange, no correlation \Rightarrow upper bound of GS energy \\
\abbrRef{lda} & understimates e repulsion \Rightarrow Overbinding \\
\abbrRef{gga} & underestimate band gap \\
hybrid & underestimate band gap
\end{tabular}
\end{formula}
% \begin{tabular}{l|c}
% \hyperref[f:comp:est:dft:hf:potential]{Hartree-Fock} & only exchange, no correlation \Rightarrow upper bound of GS energy \\
% \abbrRef{lda} & understimates e repulsion \Rightarrow Overbinding \\
% \abbrRef{gga} & underestimate band gap \\
% hybrid & underestimate band gap
% \end{tabular}
\TODO{HFtotal energy: upper boundary for GS density $n$}
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
% \begin{tabular}{|P{0.15\textwidth}|P{0.2\textwidth}|P{0.1\textwidth}|P{0.2\textwidth}|P{0.1\textwidth}|P{0.1\textwidth}|P{0.15\textwidth}|}
% \hline
% \textbf{Method} & \textbf{Description} & \textbf{Mean Absolute Error (eV)} & \textbf{Band Gap Accuracy} & \textbf{Computational Cost} & \textbf{Usage} & \textbf{Other Notes} \\
% \hline
% Hartree-Fock (HF) &
% $E_C \sim E_C^{HF\text{theory}}$
% $E_X \sim E_X^{FOCK}$
% & 3.1 (Underbinding) & \tabitem no SIE \tabitem correct long-range behaviour \tabitem nonlinear chemical potential (missing DD) \tabitem positive correlation effects & High & Reference for exact exchange, useful for small molecules. & Self-interaction free, but lacks correlation. \\
% \hline
% Local Density Approximation (LDA) &
% $E_x \sim n(r)$
% $E_c \sim n(r)$
% & 1.3 (Overbinding) & \tabitem SIE \tabitem wrong long-range behaviour \tabitem nonlinear chemical potential (missing DD) & Low & Basic solids and metallic systems, where accuracy is not critical. & Simple and computationally cheap. \\
% \hline
% Generalised Gradient Approximation (GGA) &
% $E_x \sim n(r), \nabla n(r)$
% $E_c \sim n(r), \nabla n(r)$
% & 0.3 (Mostly overbinding) & \tabitem SIE \tabitem wrong long-range behaviour \tabitem nonlinear chemical potential (missing DD) & Moderate & More accurate for molecules and chemical bonding studies. & Better than LDA for chemical bonding. \\
% \hline
% Hybrid Functionals &
% $E_x = E_x^{GGA}$
% $E_x = (1-\alpha)E_x^{GGA} + \alpha E_X^{FOCK}$
% \tabitem Add expensive non-local Fock term to reduce self-interaction
% & Lower than GGA (Improved balance) & \tabitem reduced SIE \tabitem wrong long-range behaviour \tabitem nonlinear chemical potential (missing DD) & Higher & Molecular chemistry, solid-state physics requiring better accuracy. & Balances accuracy and cost. \\
% \hline
% Range-Separated Hybrid (RSH) &
% $E_x = E_x^{GGA}$
% $E_{X,SR} = (1-\alpha)E_x^{GGA} + \alpha E_X^{FOCK}$
% $E_{X,LR} = E_x^{GGA}$
% \tabitem Mix-in expensive Fock term only for short-range interactions $\rightarrow$ since for LR the Coulomb interaction gets screening in dielectric substances ($\epsilon > 1$), such as crystalline materials.
% & Lower than Hybrid (Even better balance) & \tabitem reduced SIE \tabitem wrong long-range behaviour \tabitem nonlinear chemical potential (missing DD) & Very High & Semiconductors, materials with screened Coulomb interactions. & Used for dielectric materials. \\
% \hline
% Optimally Tuned RSH (OT-RSH) &
% $E_x = E_x^{GGA}$
% $E_{X,SR} = E_x^{GGA}$ and $E_X^{FOCK}$
% $E_{X,LR} = E_x^{GGA}$ and $E_X^{FOCK}$
% \tabitem More advanced tuning between Fock and GGA. So that set also have the correct asymptotic behaviour of $1/r$ (Coulomb e.g. Fock) instead of $e^{-r}$ from GGA
% & Lowest & \tabitem reduced SIE \tabitem better long-range behaviour \tabitem /+ better chemical potential - they include non-multiplicative, orbital dependent terms. Hence, in principle they allow for including a DD. & Extremely High & Precise calculations for band gap predictions and electronic properties. & Most flexible but computationally expensive. \\
% \hline
% \end{tabular}
% \begin{tabularx}{\textwidth}{lXlllll}
% \toprule
% \textbf{Method} & \textbf{Description} & \textbf{Mean Absolute Error (eV)} & \textbf{Band Gap Accuracy} & \textbf{Computational Cost} & \textbf{Usage} & \textbf{Other Notes} \\
% \midrule
% Hartree-Fock (HF) & $E_C \sim E_C^{HF\text{theory}}$ $E_X \sim E_X^{FOCK}$ & 3.1 (Underbinding) & Overestimates
% \tabitem no SIE
% \tabitem correct long-range behaviour
% \tabitem nonlinear chemical potential (missing DD)
% \tabitem positive correlation effects
% & High & Reference for exact exchange, useful for small molecules. & Self-interaction free, but lacks correlation. \\
% \midrule
% Local Density Approximation (LDA) &
% $E_x \sim n(r)$
% $E_c \sim n(r)$
% & 1.3 (Overbinding) & Underestimates
% \tabitem SIE
% \tabitem wrong long-range behaviour
% \tabitem nonlinear chemical potential (missing DD)
% & Low & Basic solids and metallic systems, where accuracy is not critical. & Simple and computationally cheap. \\
% \midrule
% Generalised Gradient Approximation (GGA) &
% $E_x \sim n(r), \nabla n(r)$
% $E_c \sim n(r), \nabla n(r)$
% & 0.3 (Mostly overbinding) & Improved over LDA
% \tabitem SIE
% \tabitem wrong long-range behaviour
% \tabitem nonlinear chemical potential (missing DD)
% & Moderate & More accurate for molecules and chemical bonding studies. & Better than LDA for chemical bonding. \\
% \midrule
% Hybrid Functionals &
% $E_x = E_x^{GGA}$
% $E_x = (1-\alpha)E_x^{GGA} + \alpha E_X^{FOCK}$
% \tabitem Add expensive non-local Fock term to reduce self-interaction
% & Lower than GGA (Improved balance) & Better than GGA
% \tabitem reduced SIE
% \tabitem wrong long-range behaviour
% \tabitem nonlinear chemical potential (missing DD)
% & Higher & Molecular chemistry, solid-state physics requiring better accuracy. & Balances accuracy and cost. \\
% \midrule
% Range-Separated Hybrid (RSH) &
% $E_x = E_x^{GGA}$
% $E_{X,SR} = (1-\alpha)E_x^{GGA} + \alpha E_X^{FOCK}$
% $E_{X,LR} = E_x^{GGA}$
% \tabitem Mix-in expensive Fock term only for short-range interactions $\rightarrow$ since for LR the Coulomb interaction gets screening in dielectric substances ($\epsilon > 1$), such as crystalline materials.
% & Lower than Hybrid (Even better balance) & Strongly underestimates
% \tabitem reduced SIE
% \tabitem wrong long-range behaviour
% \tabitem nonlinear chemical potential (missing DD)
% & Very High & Semiconductors, materials with screened Coulomb interactions. & Used for dielectric materials. \\
% \midrule
% Optimally Tuned RSH (OT-RSH) &
% $E_x = E_x^{GGA}$
% $E_{X,SR} = E_x^{GGA}$ and $E_X^{FOCK}$
% $E_{X,LR} = E_x^{GGA}$ and $E_X^{FOCK}$
% \tabitem More advanced tuning between Fock and GGA. So that set also have the correct asymptotic behaviour of $1/r$ (Coulomb e.g. Fock) instead of $e^{-r}$ from GGA
% & Lowest & Most accurate
% \tabitem reduced SIE
% \tabitem better long-range behaviour
% \tabitem /+ better chemical potential - they include non-multiplicative, orbital dependent terms. Hence, in principle they allow for including a DD.
% & Extremely High & Precise calculations for band gap predictions and electronic properties. & Most flexible but computationally expensive. \\
% \bottomrule
% \end{tabularx}
\end{bigformula}
\Subsubsection[
\eng{Basis sets}

View File

@ -21,14 +21,20 @@
\desc[german]{Genauigkeit}{}{}
\eq{a = \frac{\tgt{cp}}{\tgt{fp} + \tgt{cp}}}
\end{formula}
\TODO{is $n$ the nuber of predictions or the number of output features?}
\eng{n_desc}{Number of data points}
\ger{n_desc}{Anzahl der Datenpunkte}
\begin{formula}{mean_abs_error}
\desc{Mean absolute error (MAE)}{}{$y$ \gt{y}, $\hat{y}$ \gt{yhat}, $n$ ?}
\desc{Mean absolute error (MAE)}{}{$y$ \gt{y}, $\hat{y}$ \gt{yhat}, $n$ \gt{n_desc}}
\desc[german]{Mittlerer absoluter Fehler (MAE)}{}{}
\eq{\text{MAE} = \frac{1}{n} \sum_{i=1}^n \abs{y_i - \hat{y}_i}}
\end{formula}
\begin{formula}{mean_square_error}
\desc{Mean squared error (MSE)}{}{$y$ \gt{y}, $\hat{y}$ \gt{yhat}, $n$ \gt{n_desc}}
\desc[german]{Methode der kleinsten Quadrate (MSE)}{Quadratwurzel des mittleren quadratischen Fehlers (SME)}{}
\eq{\text{MSE} = \frac{1}{n} \sum_{i=1}^n \left(y_i - \hat{y}_i\right)^2}
\end{formula}
\begin{formula}{root_mean_square_error}
\desc{Root mean squared error (RMSE)}{}{$y$ \gt{y}, $\hat{y}$ \gt{yhat}, $n$ ?}
\desc{Root mean squared error (RMSE)}{}{$y$ \gt{y}, $\hat{y}$ \gt{yhat}, $n$ \gt{n_desc}}
\desc[german]{Standardfehler der Regression}{Quadratwurzel des mittleren quadratischen Fehlers (RSME)}{}
\eq{\text{RMSE} = \sqrt{\frac{1}{n} \sum_{i=1}^n \left(y_i - \hat{y}_i\right)^2}}
\end{formula}
@ -42,39 +48,127 @@
\ger{Lineare Regression}
]{linear}
\begin{formula}{eq}
\desc{Linear regression}{Fits the data under the assumption of \hyperref[f:math:pt:distributions:cont:normal]{normally distributed errors}}{$\mat{x}\in\R^{N\times M}$ input data, $\mat{y}\in\R^{N\times L}$ output data, $\mat{b}$ bias, $\vec{W}$ weights, $N$ samples, $M$ features, $L$ output variables}
\desc{Linear regression}{Fits the data under the assumption of \hyperref[f:math:pt:distributions:cont:normal]{normally distributed errors}}{$\mat{x}\in\R^{N\times M}$ input data, $\mat{y}\in\R^{N\times L}$ output data, $\mat{b}$ bias, $\vec{\beta}$ weights, $N$ samples, $M$ features, $L$ output variables}
\desc[german]{Lineare Regression}{Fitted Daten unter der Annahme \hyperref[f:math:pt:distributions:cont:normal]{normalverteilter Fehler}}{}
\eq{\mat{y} = \mat{b} + \mat{x} \cdot \vec{W}}
\eq{\mat{y} = \mat{\epsilon} + \mat{x} \cdot \vec{\beta}}
\end{formula}
\begin{formula}{design_matrix}
\desc{Design matrix}{Stack column of ones to the feature vector\\Useful when $b$ is scalar}{$x_{ij}$ feature $j$ of sample $i$}
\desc{Design matrix}{Stack column of ones to the feature vector\\Useful when $\epsilon$ is scalar}{$x_{ij}$ feature $j$ of sample $i$}
\desc[german]{Designmatrix Ansatz}{}{}
\eq{
\mat{X} = \begin{pmatrix} 1 & x_{11} & \ldots & x_{1M} \\ \vdots & \vdots & \vdots & \vdots \\ 1 & x_{N1} & \ldots & x_{NM} \end{pmatrix}
}
\end{formula}
\begin{formula}{scalar_bias}
\desc{Linear regression with scalar bias}{Using the design matrix, the scalar is absorbed into the weight vector}{$\mat{y}$ output data, $\mat{X}$ \fqEqRef{comp:ml:reg:design_matrix}, $\vec{W}$ weights}
\desc{Linear regression with scalar bias}{Using the design matrix, the scalar is absorbed into the weight vector}{$\mat{y}$ output data, $\mat{X}$ \fqEqRef{comp:ml:reg:design_matrix}, $\vec{\beta}$ weights}
\desc[german]{Lineare Regression mit skalarem Bias}{Durch die Designmatrix wird der Bias in den Gewichtsvektor absorbiert}{}
\eq{\mat{y} = \mat{X} \cdot \vec{W}}
\eq{\mat{y} = \mat{X} \cdot \vec{\beta}}
\end{formula}
\begin{formula}{normal_equation}
\desc{Normal equation}{Solves \fqEqRef{comp:ml:reg:linear:scalar_bias}}{$\mat{y}$ output data, $\mat{X}$ \fqEqRef{comp:ml:reg:linear:design_matrix}, $\vec{W}$ weights}
\desc[german]{Normalengleichung}{Löst \fqEqRef{comp:ml:reg:linear:scalar_bias}}{}
\eq{\vec{W} = \left(\mat{X}^\T \mat{X}\right)^{-1} \mat{X}^T \mat{y}}
\desc{Normal equation}{Solves \fqEqRef{comp:ml:reg:linear:scalar_bias} with \fqEqRef{comp:ml:performance:mse}}{$\mat{y}$ output data, $\mat{X}$ \fqEqRef{comp:ml:reg:linear:design_matrix}, $\vec{\beta}$ weights}
\desc[german]{Normalengleichung}{Löst \fqEqRef{comp:ml:reg:linear:scalar_bias} mit \fqEqRef{comp:ml:performance:mse}}{}
\eq{\vec{\beta} = \left(\mat{X}^\T \mat{X}\right)^{-1} \mat{X}^T \mat{y}}
\end{formula}
\Subsubsection[
\eng{Ridge regression}
\ger{Ridge Regression}
]{ridge}
\TODO{ridge reg, Kernel ridge reg, gaussian process reg}
% \Subsection[
% \eng{Bayesian probability theory}
% % \ger{}
% ]{bayesian}
\eng{Kernel method}
\ger{Kernelmethode}
]{kernel}
\begin{formula}{kernel_trick}
\desc{Kernel trick}{}{$\vecx_i \in \R^{M_1}$ input vectors, $M_1$ dimension of data vector space, $M_2$ dimension of feature space}
% \desc[german]{}{}{}
\ttxt{\eng{
Useful when transforming the input data $x$ into a much higher dimensional space ($M_2 \gg M_1$) $\Phi: \R^{M_1} \mapsto \R^{M_2},\quad \vecx \to \Phi(\vecx)$
and only the dot product of this transformed data $\Phi(x)^\T\Phi(x)$ is required.
Then the dot product can be replaced by a suitable kernel function $\kappa$.
}}
\eq{
k(\vecx_i,\vecx_j) \equiv \Phi(\vecx_i)^{\T} \Phi(\vecx_j)
}
\end{formula}
\begin{formula}{common_kernels}
\desc{Common kernels}{}{}
% \desc[german]{}{}{}
% \eq{}
\ttxt{\eng{
Linear, Polynomial, Sigmoid, Laplacian, radial basis funciton (RBF)
}}
\end{formula}
\begin{formula}{radial_basis_function}
\abbrLabel{RBF}
\desc{Radial basis function kernel (RBF)}{RBF = Real function of which the value only depends on the distance of the input}{}
\desc[german]{Radiale Basisfunktion-Kernel (RBF)}{RBF = Reelle Funktion, deren Wert nur vom Abstand zum Ursprung abängt}{}
\eq{k(\vecx_i, \vecx_j) = \Exp{-\frac{\norm{\vecx_i - \vecx_j}_2^2}{\sigma}}}
\end{formula}
\Subsubsection[
\eng{Bayesian regression}
\ger{Bayes'sche Regression}
]{bayes}
\begin{formula}{linear_regression}
\desc{Bayesian linear regression}{}{}
\desc[german]{Bayes'sche lineare Regression}{}{}
\ttxt{\eng{
Assume a \fqEqRef{math:pt:bayesian:prior} distribution over the weights.
Offers uncertainties in addition to the predictions.
}}
\end{formula}
\begin{formula}{ridge}
\desc{Ridge regression}{Regularization method}{}
\desc[german]{Ridge Regression}{}{}
\ttxt{\eng{
Applies a L2 norm penalty on the weights.
This ensures unimportant features are less regarded and do not encode noise.
\\Corresponds to assuming a \fqEqRef{math:pt:bayesian:prior} \absRef{multivariate_normal_distribution} with $\vec{mu} = 0$ and independent components ($\mat{\Sigma}$) for the weights.
}\ger{
Reduziert Gewichte mit der L2-Norm.
Dadurch werden unwichtige Features nicht berücksichtigt (kleines Gewicht) und enkodieren nicht Noise.
\\Entspricht der Annahme einer \absRef[Normalverteilung]{multivariate_normal_distribution} mit $\vec{mu}=0$ und unanhängingen Komponenten ($\mat{Sigma}$ diagonaol) der die Gewichte als \fqEqRef{math:pt:bayesian:prior}.
}}
\end{formula}
\begin{formula}{ridge_weights}
\desc{Optimal weights}{for ridge regression}{$\lambda = \frac{\sigma^2}{\xi^2}$ shrinkage parameter, $\xi$ \absRef{variance} of the gaussian \fqEqRef{math:pt:bayesian:prior}, $\sigma$ \absRef{variance} of the gaussian likelihood of the data}
\desc[german]{Optimale Gewichte}{für Ridge Regression}{}
\eq{\vec{\beta} = \left(\mat{X}^\T \mat{X} + \lambda \mathcal{1} \right)^{-1} \mat{X}^\T \vecy}
\TODO{Does this only work for gaussian data?}
\end{formula}
\begin{formula}{lasso}
\desc{Lasso regression}{Least absolute shrinkage and selection operator\\Regularization method}{}
\desc[german]{Lasso Regression}{}{}
\ttxt{\eng{
Applies a L1 norm penalty on the weights, which means features can be disregarded entirely.
\\Corresponds to assuming a \absRef{laplace_distribution} for the weights as \fqEqRef{math:pt:bayesian:prior}.
}\ger{
Reduziert Gewichte mit der L1-Norm.
Unwichtige Features werden reduziert und können auch ganz vernachlässigt werden und enkodieren nicht Noise.
\\Entspricht der Annahme einer \absRef[Laplace-Verteilung]{laplace_distribution} der die Gewichte als \fqEqRef{math:pt:bayesian:prior}.
}}
\end{formula}
\begin{formula}{gaussion_process_regression}
\desc{Gaussian process regression (GPR)}{}{}
% \desc[german]{}{}{}
\ttxt{\eng{
Gaussian process: A distribtuion over functions that produce jointly gaussian distribution.
Multivariate normal distribution like \secEqRef{bayesian}, except that $\vec{\mu}$ and $\mat{\Sigma}$ are functions.
GPR: non-parametric Bayesion regressor, does not assume fixed functional form for the underlying data, instead, the data determines the functional shape,
with predictions governed by the covariance structure defined by the kernel (often \abbrRef{radial_basis_function}).
Offers uncertainties in addition to the predictions.
\TODO{cleanup}
}}
\end{formula}
\TODO{soap}
\Subsection[
\eng{Gradient descent}

View File

@ -52,3 +52,11 @@
\val{1.602176634\xE{-19}}{\coulomb}
}
\end{formula}
\begin{formula}{atomic_mass_unit}
\desc{Atomic mass unit}{}{}
\desc[german]{Atomare Massneinheit}{}{}
\constant{u}{exp}{
\val{1.66053906892(52)\xE{-27}}{\kg}
}
\end{formula}

View File

@ -2,7 +2,7 @@
% (for vimtex)
\documentclass[11pt, a4paper]{article}
% SET LANGUAGE HERE
\usepackage[german]{babel}
\usepackage[english]{babel}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
% ENVIRONMENTS etc
\usepackage{adjustbox}
@ -87,10 +87,6 @@
\newcommand{\TODO}[1]{{\color{fg-red}TODO:#1}}
\newcommand{\ts}{\textsuperscript}
% \usepackage{xstring}
% Create a text file with relevant labels for vim-completion
\newwrite\labelsFile
\immediate\openout\labelsFile=\jobname.labels.txt
@ -101,6 +97,7 @@
\input{circuit.tex}
\input{util/macros.tex}
\input{util/math-macros.tex}
\input{util/environments.tex} % requires util/translation.tex to be loaded first
\usepackage{pkg/mqlua}
\usepackage{pkg/mqfqname}
@ -115,26 +112,11 @@
\usepackage{pkg/mqformula}
\usepackage{pkg/mqperiodictable}
% INPUT
% 1: starting pattern of files to input using the Input command. All other files are ignored
\newcommand\InputOnly[1]{\edef\inputOnlyFile{#1}}
\edef\inputOnlyFile{all}
\newcommand\Input[1]{
% yes this could surely be done in tex
\directlua{
if '\luaescapestring{\inputOnlyFile}' == 'all' or string.startswith('\luaescapestring{#1}', '\luaescapestring{\inputOnlyFile}') then
tex.print("\\input{\luaescapestring{#1}}")
end
}
}
\title{Formelsammlung}
\author{Matthias Quintern}
\date{\today}
\begin{document}
\IfFileExists{\jobname.translations.aux}{%
\input{\jobname.translations.aux}
}{}
\makeatletter\let\percentchar\@percentchar\makeatother
@ -145,7 +127,7 @@
\input{util/translations.tex}
% \InputOnly{ch}
% \InputOnly{comp}
\Input{math/math}
\Input{math/linalg}

View File

@ -143,9 +143,9 @@
\end{formula}
\begin{formula}{delta_of_function}
\desc{Dirac-Delta of a function}{}{$g(x_0) = 0$}
\desc{Dirac-Delta of a function}{}{$f(x_i) = 0$}
\desc[german]{Dirac-Delta einer Funktion}{}{}
\eq{\delta(f(x)) = \frac{\delta(x-x_0)}{\abs{g^\prime(x_0)}}}
\eq{\delta(f(x)) = \sum_i \frac{\delta(x-x_i)}{\abs{f^\prime(x_i)}}}
\end{formula}
\begin{formula}{geometric_series}
@ -208,6 +208,12 @@
\eq{\Grad^2 = \laplace = \frac{1}{r^2} \pdv{}{r} \left(r^2 \pdv{}{r}\right)}
\end{formula}
\begin{formula}{p-norm}
\desc{$p$-norm}{}{}
\desc[german]{$p$-Norm}{}{}
\eq{\norm{\vecx}_p \equiv \left(\sum_{i=1}^{n} \abs{x_i}^p\right)^\frac{1}{p}}
\end{formula}
\Subsection[
\eng{Integrals}
@ -317,5 +323,3 @@
\TODO{differential equation solutions}

View File

@ -107,6 +107,12 @@
\mat{\theta} = (\mat{X}^\T \mat{X})^{-1} \mat{X}^\T \vec{y}
}
\end{formula}
\begin{formula}{woodbury_matrix_identity}
\desc{Woodbury matrix identity}{Inverse of a rank-$k$ correction}{$\matA\,n\times n$, $\matU\,n\times k$, $\matC\,k\times k$, $\matV \, k\times n$}
\desc[german]{Woodbury-Matrix-Identität}{Inverse einer Rang-$k$-Korrektur}{}
\eq{(\matA + \matU + \matC + \matV){-1} = \matA^{-1}-\matA^{-1} \matU(\matC^{-1} + \matV \matA^{-1} \matU)^{-1} \matV \matA^{-1}}
\end{formula}
\begin{formula}{inverse_2x2}

View File

@ -4,6 +4,7 @@
]{pt}
\begin{formula}{mean}
\absLabel
\desc{Mean}{Expectation value}{}
\desc[german]{Mittelwert}{Erwartungswert}{}
\eq{\braket{x} = \int w(x)\, x\, \d x}
@ -11,18 +12,21 @@
\begin{formula}{variance}
\absLabel
\desc{Variance}{Square of the \fqEqRef{math:pt:std-deviation}}{}
\desc[german]{Varianz}{Quadrat der\fqEqRef{math:pt:std-deviation}}{}
\eq{\sigma^2 = (\Delta \hat{x})^2 = \Braket{\hat{x}^2} - \braket{\hat{x}}^2 = \braket{(x - \braket{x})^2}}
\end{formula}
\begin{formula}{covariance}
\absLabel
\desc{Covariance}{}{}
\desc[german]{Kovarianz}{}{}
\eq{\cov(x,y) = \sigma(x,y) = \sigma_{XY} = \Braket{(x-\braket{x})\,(y-\braket{y})}}
\end{formula}
\begin{formula}{std-deviation}
\absLabel
\desc{Standard deviation}{}{}
\desc[german]{Standardabweichung}{}{}
\eq{\sigma = \sqrt{\sigma^2} = \sqrt{(\Delta x)^2}}
@ -74,7 +78,8 @@
\eng{Continuous probability distributions}
\ger{Kontinuierliche Wahrscheinlichkeitsverteilungen}
]{cont}
\begin{bigformula}{normal}
\begin{bigformula}{normal}
\absLabel[normal_distribution]
\desc{Gauß/Normal distribution}{}{}
\desc[german]{Gauß/Normal-Verteilung}{}{}
\begin{minipage}{\distleftwidth}
@ -94,13 +99,36 @@
\end{distribution}
\end{bigformula}
\begin{formula}{standard_normal_distribution}
\begin{formula}{standard_normal}
\absLabel[standard_normal_distribution]
\desc{Density function of the standard normal distribution}{$\mu = 0$, $\sigma = 1$}{}
\desc[german]{Dichtefunktion der Standard-Normalverteilung}{$\mu = 0$, $\sigma = 1$}{}
\eq{\varphi(x) = \frac{1}{\sqrt{2\pi}} \e^{-\frac{1}{2}x^2}}
\end{formula}
\begin{bigformula}{multivariate_normal}
\absLabel[multivariate_normal_distribution]
\desc{Multivariate normal distribution}{Multivariate Gaussian distribution}{$\vec{mu}$ \absRef{mean}, $\mat{\Sigma}$ \absRef{covariance}}
\desc[german]{Mehrdimensionale Normalverteilung}{Multivariate Normalverteilung}{}
\begin{distribution}
\disteq{parameters}{\vec{\mu} \in \R^k,+\quad \mat{\Sigma} \in \R^{k\times k}}
\disteq{support}{\vec{x} \in \vec{\mu} + \text{span}(\mat{\Sigma})}
\disteq{pdf}{\mathcal{N}(\vec{mu}, \mat{\Sigma}) = \frac{1}{(2\pi)^{k/2}} \frac{1}{\sqrt{\det{\Sigma}}} \Exp{-\frac{1}{2} \left(\vecx-\vec{\mu}\right)^\T \mat{\Sigma}^{-1} \left(\vecx-\vec{\mu}\right)}}
\disteq{mean}{\vec{\mu}}
\disteq{variance}{\mat{\Sigma}}
\end{distribution}
\TODO{k-variate normal plot}
\end{bigformula}
\begin{formula}{laplace}
\absLabel[laplace_distribution]
\desc{Laplace-distribution}{}{}
\desc[german]{Laplace-Verteilung}{}{}
\TODO{TODO}
\end{formula}
\begin{bigformula}{cauchy}
\absLabel[lorentz_distribution]
\desc{Cauchys / Lorentz distribution}{Also known as Cauchy-Lorentz distribution, Lorentz(ian) function, Breit-Wigner distribution.}{}
\desc[german]{Cauchy / Lorentz-Verteilung}{Auch bekannt als Cauchy-Lorentz Verteilung, Lorentz Funktion, Breit-Wigner Verteilung.}{}
\begin{minipage}{\distleftwidth}
@ -121,6 +149,7 @@
\end{bigformula}
\begin{bigformula}{maxwell-boltzmann}
\absLabel[maxwell-boltzmann_distribution]
\desc{Maxwell-Boltzmann distribution}{}{}
\desc[german]{Maxwell-Boltzmann Verteilung}{}{}
\begin{minipage}{\distleftwidth}
@ -142,6 +171,7 @@
\begin{bigformula}{gamma}
\absLabel[gamma_distribution]
\desc{Gamma Distribution}{with $\lambda$ parameter}{$\Gamma$ \fqEqRef{math:cal:integral:list:gamma}, $\gamma$ \fqEqRef{math:cal:integral:list:lower_incomplete_gamma_function}}
\desc[german]{Gamma Verteilung}{mit $\lambda$ Parameter}{}
\begin{minipage}{\distleftwidth}
@ -305,8 +335,8 @@
\eq{L:\Theta \rightarrow [0,1], \quad \theta \mapsto \rho(x|\theta)}
\end{formula}
\begin{formula}{likelihood_independant}
\desc{Likelihood function}{for independent and identically distributed random variables}{$x_i$ $n$ random variables, $\rho$ \fqEqRef{math:pt:pdf} $x\mapsto \rho(x|\theta)$ depending on parameter $\theta$}
\desc[german]{Likelihood function}{für unabhängig und identisch verteilte Zufallsvariablen}{$x_i$ $n$ Zufallsvariablen$\rho$ \fqEqRef{math:pt:pdf} $x\mapsto \rho(x|\theta)$ hängt ab von Parameter $\theta$}
\desc{Likelihood function}{for independent and identically distributed random variables}{$x_i$ $n$ random variables, $\rho$ \fqEqRef{math:pt:pdf} $x\mapsto f(x|\theta)$ depending on parameter $\theta$}
\desc[german]{Likelihood function}{für unabhängig und identisch verteilte Zufallsvariablen}{$x_i$ $n$ Zufallsvariablen$\rho$ \fqEqRef{math:pt:pdf} $x\mapsto f(x|\theta)$ hängt ab von Parameter $\theta$}
\eq{L(\theta) = \prod_{i=1}^n f(x_i;\theta)}
\end{formula}
\begin{formula}{maximum_likelihood_estimate}

View File

@ -118,10 +118,10 @@
##2%
\end{alignat}
}
\newcommand{\fig}[2][1.0]{
\newcommand{\fig}[1]{
\newFormulaEntry
\centering
\includegraphics[width=##1\textwidth]{##2}
\includegraphics{##1}
}
% 1: content for the ttext environment
\newcommand{\ttxt}[2][#1:desc]{
@ -163,7 +163,7 @@
\begingroup
\label{f:\fqname:#1}
\storeLabel{\fqname:#1}
\storeLabel{\fqname:#1} % write label witout type prefix to aux file
\par\noindent\ignorespaces
% \textcolor{gray}{\hrule}
% \vspace{0.5\baselineskip}
@ -189,6 +189,7 @@
\par\noindent
\begin{minipage}{\textwidth} % using a minipage to now allow line breaks within the bigformula
\label{f:\fqname:#1}
\storeLabel{\fqname:#1} % write label witout type prefix to aux file
\par\noindent\ignorespaces
% \textcolor{gray}{\hrule}
% \vspace{0.5\baselineskip}

View File

@ -132,7 +132,7 @@
% <symbol>
\newrobustcmd{\qtyRef}[1]{%
\edef\tempname{\luaDoubleFieldValue{quantities}{"#1"}{"linkto"}}%
\hyperref[qty:#1]{\expandafter\GT\expandafter{\tempname:#1}}%
\hyperref[qty:#1]{\GT{\tempname:#1}}%
}
% <symbol> <name>
\newrobustcmd{\QtyRef}[1]{%
@ -142,7 +142,7 @@
% <name>
\newrobustcmd{\constRef}[1]{%
\edef\tempname{\luaDoubleFieldValue{constants}{"#1"}{"linkto"}}%
\hyperref[const:#1]{\expandafter\GT\expandafter{\tempname:#1}}%
\hyperref[const:#1]{\GT{\tempname:#1}}%
}
% <symbol> <name>
\newrobustcmd{\ConstRef}[1]{%
@ -184,11 +184,12 @@
abbrLabels["#2"]["fqname"] = [[#1]]
}
}
% [1]:
% [1]: text
% 2: key
\newrobustcmd{\absRef}[2][\relax]{%
\directlua{
if absLabels["#2"] == nil then
tex.sprint("\\detokenize{#2}???")
tex.sprint(string.sanitize(\luastring{#2}) .. "???")
else
if "#1" == "" then %-- if [#1] is not given, use translation of key as text, else us given text
tex.sprint("\\hyperref[" .. absLabels["#2"] .. "]{\\GT{" .. absLabels["#2"] .. "}}")
@ -201,7 +202,7 @@
\newrobustcmd{\abbrRef}[1]{%
\directlua{
if abbrLabels["#1"] == nil then
tex.sprint("\\detokenize{#1}???")
tex.sprint(string.sanitize(\luastring{#1}) .. "???")
else
tex.sprint("\\hyperref[" .. abbrLabels["#1"]["fqname"] .. "]{" .. abbrLabels["#1"]["abbr"] .. "}")
end

View File

@ -57,7 +57,7 @@ end
function string.sanitize(s)
% -- Use gsub to replace the specified characters with an empty string
local result = s:gsub("[_^&]", "")
local result = s:gsub("[_^&]", " ")
return result
end
}

View File

@ -3,9 +3,7 @@
\RequirePackage{etoolbox}
\directLuaAux{
if quantities == nil then
quantities = {}
end
quantities = quantities or {}
}
% [1]: label to point to
@ -31,13 +29,13 @@
\newcommand\quantity@print[1]{
\begingroup % for label
Symbol: $\luavar{quantities["#1"]["symbol"]}$
\\Unit: $\directlua{split_and_print_units(quantities["#1"]["units"])}$
\hfill Unit: $\directlua{split_and_print_units(quantities["#1"]["units"])}$ %
% label it only once
\directlua{
if quantities["#1"]["labeled"] == nil then
quantities["#1"]["labeled"] = true
tex.print("\\label{qty:#1}")
end
}
\endgroup
}%
\endgroup%
}

View File

@ -11,10 +11,11 @@
-- string to append to missing translations
-- unknownTranslation = "???"
unknownTranslation = ""
-- language that is set in usepackage[<lang>]{babel}
language = "\languagename"
fallbackLanguage = "english"
-- using additional .aux extension because vimtex wouldnt stop compiling otherwise
translationsFilepath = OUTDIR .. "/translations.lua.aux" or "/tmp/translations.lua"
-- using additional extension because vimtex wouldnt stop compiling otherwise
translationsFilepath = OUTDIR .. "/translations.lua.txt" or "/tmp/translations.lua.txt"
function tlAdd(language, key, value)
if value == "" then

View File

@ -218,6 +218,16 @@
}
\end{formula}
\begin{formula}{variational_principle}
\desc{Variational principle}{}{}
\desc[german]{Variationsprinzip}{}{}
\ttxt{\eng{
If $\hat{H}\psi = E\psi$, then $E_0 \le E = \Braket{\psi|\hat{H}|\psi}$. The ground state can thus be found by varying $\psi$ until $E$ is minimized.
}\ger{
Wenn $\hat{H}\psi = E\psi$, dann ist $E_0 \le E = \Braket{\psi|\hat{H}|\psi}$. Der Grundzustand kann daher gefunden werden, indem $\psi$ variiert wird bis die Energie minimiert ist.
}}
\end{formula}
\Subsection[
\eng{Time evolution}
\ger{Zeitentwicklug}

View File

@ -85,7 +85,7 @@
\begin{formula}{pressure}
\desc{Pressure}{}{}
\desc[german]{Druck}{}{}
\quantity{p}{\newtone\per\m^2}{}
\quantity{p}{\newton\per\m^2}{}
\end{formula}

View File

@ -526,8 +526,8 @@
\begin{formula}{maxwell_velocity}
\desc{Maxwell velocity distribution}{See also \ref{sec:pt:distributions::maxwell-boltzmann}}{}
\desc[german]{Maxwellsche Geschwindigkeitsverteilung}{Siehe auch \ref{sec:pt:distributions::maxwell-boltzmann}}{}
\desc{Maxwell velocity distribution}{See \absRef{maxwell-boltzmann_distribution}}{}
\desc[german]{Maxwellsche Geschwindigkeitsverteilung}{Siehe auch \absRef{maxwell-boltzmann_distribution}}{}
\eq{w(v) \d v = 4\pi \left(\frac{\beta m}{2\pi}\right)^\frac{3}{2} v^2 \e^{-\frac{\beta m v^2}{2}} \d v}
\end{formula}
@ -612,17 +612,18 @@
% b - \frac{a}{\kB T}}
\end{formula}
\begin{formula}{lennard_jones} \absLabel
\begin{formula}{lennard_jones}
\absLabel
\desc{Lennard-Jones potential}{Potential between two molecules. Attractive for $r > \sigma$, repulsive for $r < \sigma$.\\ In condensed matter: Attraction due to Landau Dispersion \TODO{verify} and repulsion due to Pauli exclusion principle.}{}
\desc[german]{Lennard-Jones-Potential}{Potential zwischen zwei Molekülen. Attraktiv für $r > \sigma$, repulsiv für $r < \sigma$.\\ In Festkörpern: Anziehung durch Landau-Dispersion und Abstoßung durch Pauli-Prinzip.}{}
\fig[0.7]{img/potential_lennard_jones.pdf}
\fig{img/potential_lennard_jones.pdf}
\eq{V(r) = 4\epsilon \left[\left(\frac{\sigma}{r}\right)^{12} - \left(\frac{\sigma}{r}\right)^{6}\right]}
\end{formula}
\Subsection[
\eng{Van der Waals equation}
\ger{Van der Waals Gleichung}
]{vdw}
]{vdw}
\begin{ttext}
\eng{Assumes a hard-core potential with a weak attraction.}
\ger{Annahme eines Harte-Kugeln Potentials mit einer schwachen Anziehung}
@ -688,7 +689,7 @@
\begin{formula}{occupation_number}
\desc{Occupation number}{}{\bosfer}
\desc[german]{Besetzungszahl}{}{\bosfer}
\fig[0.7]{img/td_id_qgas_distributions.pdf}
\fig{img/td_id_qgas_distributions.pdf}
\eq{
\braket{n(\epsilon)} &= \frac{1}{\e^{\beta(\epsilon - \mu)} \mp 1} \\
\shortintertext{\GT{for} $\epsilon - \mu \gg \kB T$}
@ -760,7 +761,7 @@
\begin{formula}{occupation}
\desc{Occupation number}{Fermi-Dirac distribution. At $T=0$ \textit{Fermi edge} at $\epsilon=\mu$}{}
\desc[german]{Besetzungszahl}{Fermi-Dirac Verteilung}{Bei $T=0$ \textit{Fermi-Kante} bei $\epsilon=\mu$}
\fig[0.7]{img/td_fermi_occupation.pdf}
\fig{img/td_fermi_occupation.pdf}
\eq{\braket{n_p} = \frac{1}{\e^{\beta(\epsilon-\mu)}+1}}
\end{formula}
@ -827,7 +828,7 @@
\begin{formula}{heat_cap}
\desc{Heat capacity}{\gt{low_temps}}{differs from \fqEqRef{td:TODO:petit_dulong}}
\desc[german]{Wärmecapacity}{\gt{low_temps}}{weicht ab vom \fqEqRef{td:TODO:petit_dulong}}
\fig[0.7]{img/td_fermi_heat_capacity.pdf}
\fig{img/td_fermi_heat_capacity.pdf}
\eq{C_V = \pdv{E}{T}_V = N\kB \frac{\pi}{2} \left(\frac{T}{T_\text{F}}\right)}
\end{formula}

View File

@ -1,38 +1,28 @@
% This file was generated by scripts/formulary.py
% Do not edit it directly, changes will be overwritten
\definecolor{fg-blue}{HTML}{072140}
\definecolor{bg-blue}{HTML}{5E94D4}
\definecolor{alt-blue}{HTML}{3070B3}
\definecolor{bg-yellow}{HTML}{FED702}
\definecolor{fg-yellow}{HTML}{CBAB01}
\definecolor{alt-yellow}{HTML}{FEDE34}
\definecolor{bg-orange}{HTML}{F7811E}
\definecolor{fg-orange}{HTML}{D99208}
\definecolor{alt-orange}{HTML}{F9BF4E}
\definecolor{bg-purple}{HTML}{B55CA5}
\definecolor{fg-purple}{HTML}{9B468D}
\definecolor{alt-purple}{HTML}{C680BB}
\definecolor{bg-red}{HTML}{EA7237}
\definecolor{fg-red}{HTML}{D95117}
\definecolor{alt-red}{HTML}{EF9067}
\definecolor{bg-green}{HTML}{9FBA36}
\definecolor{fg-green}{HTML}{7D922A}
\definecolor{alt-green}{HTML}{B6CE55}
\definecolor{bg-gray}{HTML}{475058}
\definecolor{fg-gray}{HTML}{20252A}
\definecolor{alt-gray}{HTML}{333A41}
\definecolor{bg-aqua}{HTML}{689d6a}
\definecolor{fg-aqua}{HTML}{427b58}
\definecolor{fg0-hard}{HTML}{000000}
\definecolor{fg0}{HTML}{000000}
\definecolor{fg0-soft}{HTML}{20252A}
\definecolor{fg1}{HTML}{072140}
\definecolor{fg2}{HTML}{333A41}
\definecolor{fg3}{HTML}{475058}
\definecolor{fg4}{HTML}{6A757E}
\definecolor{bg0-hard}{HTML}{FFFFFF}
\definecolor{bg0}{HTML}{FBF9FA}
\definecolor{bg0-soft}{HTML}{EBECEF}
\definecolor{bg1}{HTML}{DDE2E6}
\definecolor{bg2}{HTML}{E3EEFA}
\definecolor{bg3}{HTML}{F0F5FA}
\definecolor{bg0}{HTML}{ffffff}
\definecolor{fg1}{HTML}{3c3836}
\definecolor{fg2}{HTML}{504945}
\definecolor{fg3}{HTML}{665c54}
\definecolor{fg4}{HTML}{7c6f64}
\definecolor{bg1}{HTML}{ebdbb2}
\definecolor{bg2}{HTML}{d5c4a1}
\definecolor{bg3}{HTML}{bdae93}
\definecolor{bg4}{HTML}{a89984}
\definecolor{fg-red}{HTML}{9d0006}
\definecolor{fg-orange}{HTML}{af3a03}
\definecolor{fg-yellow}{HTML}{b57614}
\definecolor{fg-green}{HTML}{79740e}
\definecolor{fg-aqua}{HTML}{427b58}
\definecolor{fg-blue}{HTML}{076678}
\definecolor{fg-purple}{HTML}{8f3f71}
\definecolor{fg-gray}{HTML}{7c6f64}
\definecolor{bg-red}{HTML}{fb4934}
\definecolor{bg-orange}{HTML}{f38019}
\definecolor{bg-yellow}{HTML}{fabd2f}
\definecolor{bg-green}{HTML}{b8bb26}
\definecolor{bg-aqua}{HTML}{8ec07c}
\definecolor{bg-blue}{HTML}{83a598}
\definecolor{bg-purple}{HTML}{d3869b}
\definecolor{bg-gray}{HTML}{a89984}

View File

@ -1,180 +0,0 @@
% Everything related to referencing stuff
\newcommand\printFqName{\expandafter\detokenize\expandafter{\fqname}}
% SECTIONING
% start <section>, get heading from translation, set label
% secFqname is the fully qualified name of sections: the keys of all previous sections joined with a ':'
% fqname is secFqname:<key> where <key> is the key/id of some environment, like formula
% [1]: code to run after setting \fqname, but before the \part, \section etc
% 2: key
\newcommand{\Part}[2][desc]{
\newpage
\def\partName{#2}
\def\sectionName{}
\def\subsectionName{}
\def\subsubsectionName{}
\edef\fqname{\partName}
\edef\secFqname{\fqname}
#1
\edef\fqnameText{\expandafter\GetTranslation\expandafter{\fqname}}
\part{\fqnameText}
\label{sec:\fqname}
}
\newcommand{\Section}[2][]{
\def\sectionName{#2}
\def\subsectionName{}
\def\subsubsectionName{}
\edef\fqname{\partName:\sectionName}
\edef\secFqname{\fqname}
#1
% this is necessary so that \section takes the fully expanded string. Otherwise the pdf toc will have just the fqname
\edef\fqnameText{\expandafter\GetTranslation\expandafter{\fqname}}
\section{\fqnameText}
\label{sec:\fqname}
}
% \newcommand{\Subsection}[1]{\Subsection{#1}{}}
\newcommand{\Subsection}[2][]{
\def\subsectionName{#2}
\def\subsubsectionName{}
\edef\fqname{\partName:\sectionName:\subsectionName}
\edef\secFqname{\fqname}
#1
\edef\fqnameText{\expandafter\GetTranslation\expandafter{\fqname}}
\subsection{\fqnameText}
\label{sec:\fqname}
}
\newcommand{\Subsubsection}[2][]{
\def\subsubsectionName{#2}
\edef\fqname{\partName:\sectionName:\subsectionName:\subsubsectionName}
\edef\secFqname{\fqname}
#1
\edef\fqnameText{\expandafter\GetTranslation\expandafter{\fqname}}
\subsubsection{\fqnameText}
\label{sec:\fqname}
}
\edef\fqname{NULL}
\newcommand\luaDoubleFieldValue[3]{%
\directlua{
if #1 \string~= nil and #1[#2] \string~= nil and #1[#2][#3] \string~= nil then
tex.sprint(#1[#2][#3])
return
end
luatexbase.module_warning('luaDoubleFieldValue', 'Invalid indices to `#1`: `#2` and `#3`');
tex.sprint("???")
}%
}
% REFERENCES
% All xyzRef commands link to the key using the translated name
% Uppercase (XyzRef) commands have different link texts, but the same link target
% 1: key/fully qualified name (without qty/eq/sec/const/el... prefix)
% Equations/Formulas
% \newrobustcmd{\fqEqRef}[1]{%
\newrobustcmd{\fqEqRef}[1]{%
% \edef\fqeqrefname{\GT{#1}}
% \hyperref[eq:#1]{\fqeqrefname}
\hyperref[f:#1]{\GT{#1}}%
}
% Formula in the current section
\newrobustcmd{\secEqRef}[1]{%
% \edef\fqeqrefname{\GT{#1}}
% \hyperref[eq:#1]{\fqeqrefname}
\hyperref[f:\secFqname:#1]{\GT{\secFqname:#1}}%
}
% Section
% <name>
\newrobustcmd{\fqSecRef}[1]{%
\hyperref[sec:#1]{\GT{#1}}%
}
% Quantities
% <symbol>
\newrobustcmd{\qtyRef}[1]{%
\edef\tempname{\luaDoubleFieldValue{quantities}{"#1"}{"fqname"}}%
\hyperref[qty:#1]{\expandafter\GT\expandafter{\tempname:#1}}%
}
% <symbol> <name>
\newrobustcmd{\QtyRef}[1]{%
$\luaDoubleFieldValue{quantities}{"#1"}{"symbol"}$ \qtyRef{#1}%
}
% Constants
% <name>
\newrobustcmd{\constRef}[1]{%
\edef\tempname{\luaDoubleFieldValue{constants}{"#1"}{"fqname"}}%
\hyperref[const:#1]{\expandafter\GT\expandafter{\tempname:#1}}%
}
% <symbol> <name>
\newrobustcmd{\ConstRef}[1]{%
$\luaDoubleFieldValue{constants}{"#1"}{"symbol"}$ \constRef{#1}%
}
% Element from periodic table
% <symbol>
\newrobustcmd{\elRef}[1]{%
\hyperref[el:#1]{{\color{fg0}#1}}%
}
% <name>
\newrobustcmd{\ElRef}[1]{%
\hyperref[el:#1]{\GT{el:#1}}%
}
% "LABELS"
% These currently do not place a label,
% instead they provide an alternative way to reference an existing label
\directLuaAux{
if absLabels == nil then
absLabels = {}
end
}
% [1]: target (fqname to point to)
% 2: key
\newcommand{\absLink}[2][sec:\fqname]{
\directLuaAuxExpand{
absLabels["#2"] = [[#1]]
}
}
\directLuaAux{
if abbrLabels == nil then
abbrLabels = {}
end
}
% [1]: target (fqname to point to)
% 2: key
% 3: label (abbreviation)
\newcommand{\abbrLink}[3][sec:\fqname]{
\directLuaAuxExpand{
abbrLabels["#2"] = {}
abbrLabels["#2"]["abbr"] = [[#3]]
abbrLabels["#2"]["fqname"] = [[#1]]
}
}
% [1]:
\newrobustcmd{\absRef}[2][\relax]{%
\directlua{
if absLabels["#2"] == nil then
tex.sprint("\\detokenize{#2}???")
else
if "#1" == "" then %-- if [#1] is not given, use translation of key as text, else us given text
tex.sprint("\\hyperref[" .. absLabels["#2"] .. "]{\\GT{" .. absLabels["#2"] .. "}}")
else
tex.sprint("\\hyperref[" .. absLabels["#2"] .. "]{\luaescapestring{#1}}")
end
end
}
}
\newrobustcmd{\abbrRef}[1]{%
\directlua{
if abbrLabels["#1"] == nil then
tex.sprint("\\detokenize{#1}???")
else
tex.sprint("\\hyperref[" .. abbrLabels["#1"]["fqname"] .. "]{" .. abbrLabels["#1"]["abbr"] .. "}")
end
}
}