diff options
29 files changed, 1653 insertions, 0 deletions
diff --git a/Jauslin_Harvard_2018.tex b/Jauslin_Harvard_2018.tex new file mode 100644 index 0000000..245d8b0 --- /dev/null +++ b/Jauslin_Harvard_2018.tex @@ -0,0 +1,288 @@ +\documentclass{ian-presentation} + +\usepackage[hidelinks]{hyperref} +\usepackage{graphicx} +\usepackage{dsfont} + +\begin{document} +\pagestyle{empty} +\hbox{}\vfil +\bf\Large +\hfil Liquid crystals and the\par +\smallskip +\hfil Heilmann-Lieb model\par +\vfil +\large +\hfil Ian Jauslin +\normalsize +\vfil +\hfil\rm joint with {\bf Elliott H. Lieb}\par +\vfil +arXiv: {\tt \href{http://arxiv.org/abs/1709.05297}{1709.05297}} +\hfill{\tt \href{http://ian.jauslin.org}{http://ian.jauslin.org}} +\eject + +\setcounter{page}1 +\pagestyle{plain} + +\title{Gas-liquid-crystal} +\vfill +\hfil +\includegraphics[width=3cm]{gas.png} +\includegraphics[width=3cm]{liquid.png} +\includegraphics[width=3cm]{crystal.png} +\vfill +\eject + +\title{Liquid crystals} +\begin{itemize} + \item Orientational order and positional disorder. +\end{itemize} +\hfil\includegraphics[width=4.5cm]{nematic.png} +\hfil\includegraphics[width=4.5cm]{chiral.png} +\vfill +\eject + +\title{History} +\begin{itemize} + \item \href{http://dx.doi.org/10.1111/j.1749-6632.1949.tb27296.x}{[Onsager, 1949]}: mean field model for hard needles in $\mathbb R^3$. + \item \href{http://dx.doi.org/10.1007/BF01009518}{[Heilmann, Lieb, 1979]}: interacting dimers. +\vphantom{ + \item \href{http://dx.doi.org/10.1007/BF00535264}{[Bricmont, Kuroda, Lebowitz, 1984]}: hard needles in $\mathbb R^2$ with a {\it finite} number of orientations. + \item \href{http://dx.doi.org/10.1007/s10955-005-8085-8}{[Ioffe, Velenik, Zahradn\'\i k, 2006]}: hard rods in $\mathbb Z^2$ (variable length). + \item \href{http://dx.doi.org/10.1007/s00220-013-1767-1}{[Disertori, Giuliani, 2013]}: hard rods in $\mathbb Z^2$. +} +\end{itemize} +\vfill +\eject + + +\title{Heilmann-Lieb model} +\hfil\href{http://dx.doi.org/10.1007/BF01009518}{[Heilmann, Lieb, 1979]} +\vfil +\hfil\includegraphics[width=5cm]{grid.pdf} +\vfil\eject + +\addtocounter{page}{-1} +\title{Heilmann-Lieb model} +\hfil\href{http://dx.doi.org/10.1007/BF01009518}{[Heilmann, Lieb, 1979]} +\vfil +\hfil\includegraphics[width=5cm]{dimers.pdf} +\vfil\eject + +\addtocounter{page}{-1} +\title{Heilmann-Lieb model} +\hfil\href{http://dx.doi.org/10.1007/BF01009518}{[Heilmann, Lieb, 1979]} +\vfil +\hfil\includegraphics[width=5cm]{interaction.pdf} +\vfil\eject + +\title{Heilmann-Lieb conjecture} +\begin{itemize} + \item \href{http://dx.doi.org/10.1007/BF01009518}{[Heilmann, Lieb, 1979]}: proved orientational order using reflection positivity. + \item HL Conjecture: absence of positional order. +\vphantom{ + \item \href{http://dx.doi.org/10.1007/s10955-015-1421-8}{[Alberici, 2016]}: different fugacities for horizontal and vertical dimers. + \item \href{http://dx.doi.org/10.1103/PhysRevB.89.035128}{[Papanikolaou, Charrier, Fradkin, 2014]}: numerics. +} +\end{itemize} +\vfill +\eject + +\title{History} +\begin{itemize} + \item \href{http://dx.doi.org/10.1111/j.1749-6632.1949.tb27296.x}{[Onsager, 1949]}: mean field model for hard needles in $\mathbb R^3$. + \item \href{http://dx.doi.org/10.1007/BF01009518}{[Heilmann, Lieb, 1979]}: interacting dimers. + \item \href{http://dx.doi.org/10.1007/BF00535264}{[Bricmont, Kuroda, Lebowitz, 1984]}: hard needles in $\mathbb R^2$ with a {\it finite} number of orientations. + \item \href{http://dx.doi.org/10.1007/s10955-005-8085-8}{[Ioffe, Velenik, Zahradn\'\i k, 2006]}: hard rods in $\mathbb Z^2$ (variable length). + \item \href{http://dx.doi.org/10.1007/s00220-013-1767-1}{[Disertori, Giuliani, 2013]}: hard rods in $\mathbb Z^2$. +\end{itemize} +\vfill +\eject + +\title{Heilmann-Lieb conjecture} +\begin{itemize} + \item \href{http://dx.doi.org/10.1007/BF01009518}{[Heilmann, Lieb, 1979]}: proved orientational order using reflection positivity. + \item HL Conjecture: absence of positional order. + \item \href{http://dx.doi.org/10.1007/s10955-015-1421-8}{[Alberici, 2016]}: different fugacities for horizontal and vertical dimers. + \item \href{http://dx.doi.org/10.1103/PhysRevB.89.035128}{[Papanikolaou, Charrier, Fradkin, 2014]}: numerics. +\end{itemize} +\vfill +\eject + + +\title{Heilmann-Lieb model} +\begin{itemize} + \item Grand-canonical Gibbs measure: + $$ + \left<A\right>_{\mathrm v} + := + \lim_{\Lambda\to\mathbb Z^2} + \frac1{\Xi_{\mathrm v}(\Lambda)} + \sum_{\underline\delta\in\Omega_{\mathrm v}(\Lambda)}A(\underline\delta)z^{|\underline\delta|}\prod_{\delta\neq \delta'\in \underline\delta}e^{\frac12J\mathds 1_{\delta\sim\delta'}} + $$ + \vskip-15pt + \begin{itemize} + \item $\Lambda$: finite box. + \item $\Omega_{\mathrm v}(\Lambda)$: non-overlapping dimer configurations satisfying the boundary condition. + \item $z\geqslant 0$: fugacity. + \item $J\geqslant 0$: interaction strength. + \item $\mathds 1_{\delta\sim\delta'}$ indicator that dimers are adjacent and aligned. + \end{itemize} +\end{itemize} +\vfill +\eject + +\title{Boundary condition} +\begin{itemize} + \item Fix length $\ell_0:=e^{\frac32J}\sqrt z$, +\end{itemize} +\hfil\includegraphics[width=5cm]{boundary.pdf} + +\title{Theorem} +For $1\ll z\ll J$, $\|(x,y)\|_{\mathrm{HL}}:=J|x|+e^{-\frac32J}z^{-\frac12}|y|$, +\begin{itemize} + \item Given two vertical edges $e_{\mathrm v},f_{\mathrm v}$, $\left<\mathds 1_{e_{\mathrm v}}\right>_{\mathrm v}$ is {\it independent} of $e_{\mathrm v}$ and + $$ + \begin{array}{c} + \left<\mathds 1_{e_{\mathrm v}}\right>_{\mathrm v}=\frac12(1+O(e^{-\frac12J}z^{-\frac12})) + \\[0.3cm] + \left<\mathds 1_{e_{\mathrm v}}\mathds 1_{f_{\mathrm v}}\right>_{\mathrm v} + -\left<\mathds 1_{e_{\mathrm v}}\right>_{\mathrm v} + \left<\mathds 1_{f_{\mathrm v}}\right>_{\mathrm v} + =O(e^{-c\ \mathrm{dist}_{\mathrm{HL}}(e_{\mathrm v},f_{\mathrm v})}) + \end{array} + $$ + \vskip-5pt + \item Given two horizontal edges $e_{\mathrm h},f_{\mathrm h}$, $\left<\mathds 1_{e_{\mathrm h}}\right>_{\mathrm v}$ is {\it independent} of $e_{\mathrm h}$ and + $$ + \begin{array}{c} + \left<\mathds 1_{e_{\mathrm h}}\right>_{\mathrm v}=O(e^{-3J}) + \\[0.3cm] + \left<\mathds 1_{e_{\mathrm h}}\mathds 1_{f_{\mathrm h}}\right>_{\mathrm v} + -\left<\mathds 1_{e_{\mathrm h}}\right>_{\mathrm v} + \left<\mathds 1_{f_{\mathrm h}}\right>_{\mathrm v} + =O(e^{-6J-c\ \mathrm{dist}_{\mathrm{HL}}(e_{\mathrm h},f_{\mathrm h})}) + \end{array} + $$ +\end{itemize} +\vfill +\eject + +\title{1D system} +\begin{itemize} + \item {\it Only} vertical dimers: integrable. + \item Given two vertical edges $e_{\mathrm v},f_{\mathrm v}$, $\left<\mathds 1_{e_{\mathrm v}}\right>_{\mathrm v}$ is {\it independent} of $e_{\mathrm v}$ and + $$ + \begin{array}{c} + \left<\mathds 1_{e_{\mathrm v}}\right>_{\mathrm v}=\frac12(1+O(e^{-\frac12J}z^{-\frac12})) + \\[0.3cm] + \left<\mathds 1_{e_{\mathrm v}}\mathds 1_{f_{\mathrm v}}\right>_{\mathrm v} + -\left<\mathds 1_{e_{\mathrm v}}\right>_{\mathrm v} + \left<\mathds 1_{f_{\mathrm v}}\right>_{\mathrm v} + =O(e^{-c\ \mathrm{dist}_{\mathrm{1D}}(e_{\mathrm v},f_{\mathrm v})}) + \end{array} + $$ + with $\|(x,y)\|_{\mathrm{1D}}:=e^{-\frac32J}z^{-\frac12}|y|$. +\end{itemize} +\vfill +\eject + +\title{Loop model} +\vfill +\hfil\includegraphics[width=5cm]{dimer_contour.pdf} +\begin{itemize} + \item Weight of a loop of length $|l|$: $e^{-\frac12J|l|}$. +\end{itemize} +\vfill +\eject + +\title{Difficulty: loops interact} +\vskip-10pt +\begin{itemize} + \item Correlated dimers induce an interaction between loops, which decays exponentially with a rate $e^{-\frac32J}z^{-\frac12}$. +\end{itemize} +\hfil\includegraphics[width=3.5cm]{segments.pdf} +\begin{itemize} + \item Vertical-to-horizontal boundaries and horizontal-to-vertical ones have different geometries. +\end{itemize} +\vfill +\eject + +\title{Pirogov-Sinai} +\hfil\includegraphics[width=5cm]{dimer_contour.pdf} +\vfill +\eject + +\addtocounter{page}{-1} +\title{Pirogov-Sinai} +\hfil\includegraphics[width=5cm]{dimer_pirogov_sinai.pdf} +$$ + \Xi_{\mathrm v}(\Lambda)=\Xi_{\mathrm v}(\mathrm{Out})\ \Xi_{\mathrm h}(\mathrm{In}) +$$ +\vfill +\eject + +\addtocounter{page}{-1} +\title{Pirogov-Sinai} +\hfil\includegraphics[width=5cm]{dimer_pirogov_sinai_preflip.pdf} +$$ + \Xi_{\mathrm v}(\Lambda)=\Xi_{\mathrm v}(\mathrm{Out})\ \Xi_{\mathrm h}(\mathrm{In}) +$$ +\vfill +\eject + +\addtocounter{page}{-1} +\title{Pirogov-Sinai} +\hfil\includegraphics[width=5cm]{dimer_pirogov_sinai_flip.pdf} +$$ + \Xi_{\mathrm v}(\Lambda)=\Xi_{\mathrm v}(\mathrm{Out})\ \Xi_{\mathrm v}(\mathrm{In})\eta_{\mathrm h,\mathrm v}(\mathrm{In}) + ,\quad + \eta_{\mathrm h,\mathrm v}(\mathrm{In})= + \frac{\Xi_{\mathrm h}(\mathrm{In})}{\Xi_{\mathrm v}(\mathrm{In})} +$$ +\vfill +\eject + +\title{Pirogov-Sinai} +\begin{itemize} + \item Boundary term: + $$ + \eta_{\mathrm h,\mathrm v}(\mathrm{In}) + \leqslant e^{c|\partial\mathrm{In}|} + $$ + \item Energy gain: + $$ + e^{-\frac12J|\partial\mathrm{In}|}e^{c|\partial\mathrm{In}|}\ll 1 + $$ +\end{itemize} +\vfill +\eject + +\title{Entropy of contours} +\begin{itemize} + \item Loops at a distance $<e^{\frac32J}z^{\frac12}\equiv\ell_0$ form a single object: a {\it contour}. +\end{itemize} +\hfil\includegraphics[width=5cm]{contours.pdf} +\vfill +\eject + +\title{Entropy of contours} +\begin{itemize} + \item Weight of a contour: + \begin{itemize} + \item $e^{-\frac12J|l|}$ for each loop $l$. + \item $e^{-\ell_0^{-1}|\sigma|}$ for each segment $\sigma$. + \end{itemize} + \item Each new loop in a contour contributes $e^{-3J}\ell_0\equiv e^{-\frac32J}z^{\frac12}\ll 1$ +\end{itemize} +\hfil\includegraphics[height=3cm]{smallest.pdf} +\vfill +\eject + +\title{Parameter regime} +\vfill +\hfil\includegraphics[width=8cm]{regime.pdf} + + +\end{document} diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9069488 --- /dev/null +++ b/Makefile @@ -0,0 +1,47 @@ +PROJECTNAME=$(basename $(wildcard *.tex)) +LIBS=$(notdir $(wildcard libs/*)) +FIGS=$(notdir $(wildcard figs/*.fig)) + +PDFS=$(addsuffix .pdf, $(PROJECTNAME)) +SYNCTEXS=$(addsuffix .synctex.gz, $(PROJECTNAME)) + +all: $(PROJECTNAME) + +$(PROJECTNAME): $(LIBS) $(FIGS) + pdflatex -file-line-error $@.tex + pdflatex -synctex=1 $@.tex + +$(SYNCTEXS): $(LIBS) $(FIGS) + pdflatex -synctex=1 $(patsubst %.synctex.gz, %.tex, $@) + + +$(LIBS): + ln -fs libs/$@ ./ + + +$(FIGS): + make -C figs/$@ + for pdf in $$(find figs/$@/ -name '*.pdf'); do ln -fs "$$pdf" ./ ; done + for png in $$(find figs/$@/ -name '*.png'); do ln -fs "$$png" ./ ; done + + +clean-aux: clean-figs-aux + rm -f $(addsuffix .aux, $(PROJECTNAME)) + rm -f $(addsuffix .log, $(PROJECTNAME)) + rm -f $(addsuffix .out, $(PROJECTNAME)) + +clean-libs: + rm -f $(LIBS) + +clean-figs: + $(foreach fig,$(addprefix figs/, $(FIGS)), make -C $(fig) clean; ) + rm -f $(notdir $(wildcard figs/*.fig/*.pdf)) + +clean-figs-aux: + $(foreach fig,$(addprefix figs/, $(FIGS)), make -C $(fig) clean-aux; ) + + +clean-tex: + rm -f $(PDFS) $(SYNCTEXS) + +clean: clean-aux clean-tex clean-libs clean-figs @@ -0,0 +1,34 @@ +This directory contains the source files to typeset the presentation, and +generate the figures. This can be accomplished by running + make + +This document uses a custom class file, located in the 'libs' directory, which +defines a number of commands. + + +* Dependencies: + + pdflatex + TeXlive packages: + amsfonts + doublestroke + graphics + hyperref + latex + pgf + standalone + GNU make + python3 + gnuplot + +* Files: + + Jauslin_Harvard_2018.tex: + main LaTeX file + + libs: + custom LaTeX class file + + figs: + source code for the figures + diff --git a/figs/atoms.fig/Makefile b/figs/atoms.fig/Makefile new file mode 100644 index 0000000..a4b610f --- /dev/null +++ b/figs/atoms.fig/Makefile @@ -0,0 +1,15 @@ +PROJECTNAME=crystal liquid gas nematic chiral +PNGS=$(addsuffix .png, $(PROJECTNAME)) + +all: $(PNGS) + +$(PNGS): + cp $(patsubst %.png, %, $@)-base.gp $(patsubst %.png, %, $@).gp + python $(patsubst %.png, %, $@).py >> $(patsubst %.png, %, $@).gp + gnuplot $(patsubst %.png, %, $@).gp > $@ + +clean-aux: + rm -f $(addsuffix .gp, $(PROJECTNAME)) + +clean: clean-aux + rm -f $(PNGS) diff --git a/figs/atoms.fig/chiral-base.gp b/figs/atoms.fig/chiral-base.gp new file mode 100644 index 0000000..5960ce6 --- /dev/null +++ b/figs/atoms.fig/chiral-base.gp @@ -0,0 +1,22 @@ +set terminal pngcairo size 2048,2048 + +set key off +unset colorbox +unset border +unset xtics +unset ytics +unset ztics + +set parametric + +set view 80,10,1.5 +set view equal xyz + +set isosample 100 + +set pm3d depthorder +set pm3d lighting primary 0.50 specular 0.6 + +set palette defined (0 "#339999", 1 "#339999") + +splot \ diff --git a/figs/atoms.fig/chiral.py b/figs/atoms.fig/chiral.py new file mode 100644 index 0000000..eed6df8 --- /dev/null +++ b/figs/atoms.fig/chiral.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 + +from math import * +import random +import sys + +# size of space +L=30 +# number of lines +H=5 +# heigh of lines +height=5 +# number of rods per line +N=16 +# aspect ratio +a=10 +# spread in theta angle +spread_t=pi/60 +# in phi +spread_p=pi/60 +# in height +spread_h=1/120 + +# check whether two rods overlap +def check_overlap(rod1,rod2): + # relative placement + relative_pos=unrotate(subtract(rod2[0],rod1[0]), rod1[1]) + if(abs(relative_pos[0])<2 and abs(relative_pos[1])<2 and abs(relative_pos[2])<2): + return(True) + # relative angle + relative_ang=cart_to_spherical(unrotate(spherical_to_cart(rod2[1]), rod1[1])) + # exclusion volume + # rotate other rod + relative_pos=unrotate(relative_pos, [0,relative_ang[1]]) + #if(abs(relative_pos[1])<2 and abs(relative_pos[0])-2<abs(sin(relative_ang[0]))*a and abs(relative_pos[2])-a-2<abs(cos(relative_ang[0])*a)): + if(abs(relative_pos[1])<2 and abs(relative_pos[0])-2<abs(sin(relative_ang[0]))*a and abs(sin(relative_ang[0])*relative_pos[2]-cos(relative_ang[0])*relative_pos[0])-2<abs(sin(relative_ang[0])*a)): + return(True) + return(False) + +# def subtract vectors +def subtract(x,y): + return([x[0]-y[0],x[1]-y[1],x[2]-y[2]]) +# rotate vector +def unrotate(x,w): + ret=[x[0],x[1],x[2]] + # rotate phi + tmp=cos(w[1])*ret[0]+sin(w[1])*ret[1] + ret[1]=-sin(w[1])*ret[0]+cos(w[1])*ret[1] + ret[0]=tmp + # rotate theta + tmp=cos(w[0])*ret[0]-sin(w[0])*ret[2] + ret[2]=sin(w[0])*ret[0]+cos(w[0])*ret[2] + ret[0]=tmp + return(ret) + +# convert coordinates +def spherical_to_cart(w): + return([cos(w[1])*sin(w[0]),sin(w[1])*sin(w[0]),cos(w[0])]) +def cart_to_spherical(x): + w=[0,0] + w[0]=acos(x[2]) + if(sin(w[0]==0)): + return([w[0],0]) + c=x[0]/sin(w[0]) + s=x[1]/sin(w[0]) + # to avoid truncation errors + if(abs(c)>1 and abs(c)<1.0001): + if(c>0): + return([w[0],0]) + else: + return([w[0],pi]) + if(s>=0): + return([w[0],acos(c)]) + return([w[0],2*pi-acos(c)]) + +# configuration +config=[] +# add rods +for h in range(H): + config_h=[] + while len(config_h)<N: + # random position and angles + x=[random.uniform(0,L), random.uniform(0,L), random.gauss(h*height,spread_h)] + w=[abs(random.gauss(pi/2,spread_t)), random.gauss(pi/2*(1-h/(H-1)),spread_p)] + # chek it does not interfere with other rods + fine=True + for rod in config+config_h: + if(check_overlap(rod,[x,w])): + fine=False + break + if fine: + config_h.append([x,w]) + config=config+config_h + +for i in range(len(config)): + rod=config[i] + print(str(rod[0][0])+"+("+str(cos(rod[1][1])*cos(rod[1][0]))+")*cos(u)*sin(v)+("+str(-sin(rod[1][1]))+")*sin(u)*sin(v)+("+str(cos(rod[1][1])*sin(rod[1][0])*a)+")*cos(v)", end=", ") + print(str(rod[0][1])+"+("+str(sin(rod[1][1])*cos(rod[1][0]))+")*cos(u)*sin(v)+("+str(cos(rod[1][1]))+")*sin(u)*sin(v)+("+str(sin(rod[1][1])*sin(rod[1][0])*a)+")*cos(v)", end=", ") + print(str(rod[0][2])+"+("+str(-sin(rod[1][0]))+")*cos(u)*sin(v)+("+str(cos(rod[1][0])*a)+")*cos(v)", end=" ") + print("with pm3d", end="") + if i<len(config)-1: + print(", \\") diff --git a/figs/atoms.fig/crystal-base.gp b/figs/atoms.fig/crystal-base.gp new file mode 100644 index 0000000..4de0ee2 --- /dev/null +++ b/figs/atoms.fig/crystal-base.gp @@ -0,0 +1,21 @@ +set terminal pngcairo size 2048,2048 + +set key off +unset colorbox +unset border +unset xtics +unset ytics +unset ztics + +set parametric + +set view equal xyz + +set isosample 100 + +set pm3d depthorder +set pm3d lighting primary 0.50 specular 0.6 + +set palette defined (0 "#339999", 1 "#339999") + +splot \ diff --git a/figs/atoms.fig/crystal.py b/figs/atoms.fig/crystal.py new file mode 100644 index 0000000..4b1ba3c --- /dev/null +++ b/figs/atoms.fig/crystal.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +from math import * +import random +import sys + +# size of lattice +N=5 + +# configuration +config=[] +for i in range(N): + for j in range(N): + for k in range(N): + config.append([2*i+((j+k)%2),sqrt(3)*(j+(k%2)/3),2*sqrt(6)/3*k]) + + +for i in range(len(config)): + print(str(config[i][0])+"+cos(u)*sin(v)", end=",") + print(str(config[i][1])+"+sin(u)*sin(v)", end=",") + print(str(config[i][2])+"+cos(v)", end=" ") + print("with pm3d", end="") + if i<len(config)-1: + print(", \\") diff --git a/figs/atoms.fig/gas-base.gp b/figs/atoms.fig/gas-base.gp new file mode 100644 index 0000000..e95f005 --- /dev/null +++ b/figs/atoms.fig/gas-base.gp @@ -0,0 +1,21 @@ +set terminal pngcairo size 2048,2048 + +set key off +unset colorbox +unset border +unset xtics +unset ytics +unset ztics + +set parametric + +set view equal xyz + +set isosample 100 + +set pm3d depthorder +set pm3d lighting primary 0.5 specular 0.6 + +set palette defined (0 "#339999", 1 "#339999") + +splot \ diff --git a/figs/atoms.fig/gas.py b/figs/atoms.fig/gas.py new file mode 100644 index 0000000..8685999 --- /dev/null +++ b/figs/atoms.fig/gas.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 + +from math import * +import random + +# size of space +L=15 +# number of particles +N=10 + +# check whether two rods overlap +def check_overlap(sphere1,sphere2): + if(sqrt((sphere2[0]-sphere1[0])**2+(sphere2[1]-sphere1[1])**2+(sphere2[2]-sphere1[2])**2)<2): + return(True) + return(False) + +# configuration +config=[] +# add spheres +while len(config)<N: + # random position + x=[random.uniform(0,L), random.uniform(0,L), random.uniform(0,L)] + # check it does not interfere with other spheres + fine=True + for sphere in config: + if(check_overlap(sphere,x)): + fine=False + break + if fine: + config.append(x) + +for i in range(len(config)): + sphere=config[i] + print(str(sphere[0])+"+cos(u)*sin(v)", end=", ") + print(str(sphere[1])+"+sin(u)*sin(v)", end=", ") + print(str(sphere[2])+"+cos(v)", end=" ") + print("with pm3d", end="") + if i<len(config)-1: + print(", \\") diff --git a/figs/atoms.fig/liquid-base.gp b/figs/atoms.fig/liquid-base.gp new file mode 100644 index 0000000..4de0ee2 --- /dev/null +++ b/figs/atoms.fig/liquid-base.gp @@ -0,0 +1,21 @@ +set terminal pngcairo size 2048,2048 + +set key off +unset colorbox +unset border +unset xtics +unset ytics +unset ztics + +set parametric + +set view equal xyz + +set isosample 100 + +set pm3d depthorder +set pm3d lighting primary 0.50 specular 0.6 + +set palette defined (0 "#339999", 1 "#339999") + +splot \ diff --git a/figs/atoms.fig/liquid.py b/figs/atoms.fig/liquid.py new file mode 100644 index 0000000..99b09ba --- /dev/null +++ b/figs/atoms.fig/liquid.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 + +from math import * +import random + +# size of space +L=15 +# number of particles +N=100 + +# check whether two rods overlap +def check_overlap(sphere1,sphere2): + if(sqrt((sphere2[0]-sphere1[0])**2+(sphere2[1]-sphere1[1])**2+(sphere2[2]-sphere1[2])**2)<2): + return(True) + return(False) + +# configuration +config=[] +# add spheres +while len(config)<N: + # random position + x=[random.uniform(0,L), random.uniform(0,L), random.uniform(0,L)] + # check it does not interfere with other spheres + fine=True + for sphere in config: + if(check_overlap(sphere,x)): + fine=False + break + if fine: + config.append(x) + +for i in range(len(config)): + sphere=config[i] + print(str(sphere[0])+"+cos(u)*sin(v)", end=", ") + print(str(sphere[1])+"+sin(u)*sin(v)", end=", ") + print(str(sphere[2])+"+cos(v)", end=" ") + print("with pm3d", end="") + if i<len(config)-1: + print(", \\") diff --git a/figs/atoms.fig/nematic-base.gp b/figs/atoms.fig/nematic-base.gp new file mode 100644 index 0000000..4de0ee2 --- /dev/null +++ b/figs/atoms.fig/nematic-base.gp @@ -0,0 +1,21 @@ +set terminal pngcairo size 2048,2048 + +set key off +unset colorbox +unset border +unset xtics +unset ytics +unset ztics + +set parametric + +set view equal xyz + +set isosample 100 + +set pm3d depthorder +set pm3d lighting primary 0.50 specular 0.6 + +set palette defined (0 "#339999", 1 "#339999") + +splot \ diff --git a/figs/atoms.fig/nematic.py b/figs/atoms.fig/nematic.py new file mode 100644 index 0000000..5c779c0 --- /dev/null +++ b/figs/atoms.fig/nematic.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 + +from math import * +import random + +# size of space +L=30 +# number of rods +N=75 +# aspect ratio +a=10 +# spread in theta angle +spread=pi/30 + +# check whether two rods overlap +def check_overlap(rod1,rod2): + # relative placement + relative_pos=unrotate(subtract(rod2[0],rod1[0]), rod1[1]) + if(abs(relative_pos[0])<2 and abs(relative_pos[1])<2 and abs(relative_pos[2])<2): + return(True) + # relative angle + relative_ang=cart_to_spherical(unrotate(spherical_to_cart(rod2[1]), rod1[1])) + # exclusion volume + # rotate other rod + relative_pos=unrotate(relative_pos, [0,relative_ang[1]]) + #if(abs(relative_pos[1])<2 and abs(relative_pos[0])-2<abs(sin(relative_ang[0]))*a and abs(relative_pos[2])-a-2<abs(cos(relative_ang[0])*a)): + if(abs(relative_pos[1])<2 and abs(relative_pos[0])-2<abs(sin(relative_ang[0]))*a and abs(sin(relative_ang[0])*relative_pos[2]-cos(relative_ang[0])*relative_pos[0])-2<abs(sin(relative_ang[0])*a)): + return(True) + return(False) + +# def subtract vectors +def subtract(x,y): + return([x[0]-y[0],x[1]-y[1],x[2]-y[2]]) +# rotate vector +def unrotate(x,w): + ret=[x[0],x[1],x[2]] + # rotate phi + tmp=cos(w[1])*ret[0]+sin(w[1])*ret[1] + ret[1]=-sin(w[1])*ret[0]+cos(w[1])*ret[1] + ret[0]=tmp + # rotate theta + tmp=cos(w[0])*ret[0]-sin(w[0])*ret[2] + ret[2]=sin(w[0])*ret[0]+cos(w[0])*ret[2] + ret[0]=tmp + return(ret) + +# convert coordinates +def spherical_to_cart(w): + return([cos(w[1])*sin(w[0]),sin(w[1])*sin(w[0]),cos(w[0])]) +def cart_to_spherical(x): + w=[0,0] + w[0]=acos(x[2]) + if(sin(w[0]==0)): + return([w[0],0]) + c=x[0]/sin(w[0]) + s=x[1]/sin(w[0]) + # to avoid truncation errors + if(abs(c)>1 and abs(c)<1.0001): + if(c>0): + return([w[0],0]) + else: + return([w[0],pi]) + if(s>=0): + return([w[0],acos(c)]) + return([w[0],2*pi-acos(c)]) + +# configuration +config=[] +# add rods +while len(config)<N: + # random position and angles + x=[random.uniform(0,L), random.uniform(0,L), random.uniform(0,L)] + w=[abs(random.gauss(0,spread)), random.uniform(0,2*pi)] + # chek it does not interfere with other rods + fine=True + for rod in config: + if(check_overlap(rod,[x,w])): + fine=False + break + if fine: + config.append([x,w]) + +for i in range(len(config)): + rod=config[i] + print(str(rod[0][0])+"+("+str(cos(rod[1][1])*cos(rod[1][0]))+")*cos(u)*sin(v)+("+str(-sin(rod[1][1]))+")*sin(u)*sin(v)+("+str(cos(rod[1][1])*sin(rod[1][0])*a)+")*cos(v)", end=", ") + print(str(rod[0][1])+"+("+str(sin(rod[1][1])*cos(rod[1][0]))+")*cos(u)*sin(v)+("+str(cos(rod[1][1]))+")*sin(u)*sin(v)+("+str(sin(rod[1][1])*sin(rod[1][0])*a)+")*cos(v)", end=", ") + print(str(rod[0][2])+"+("+str(-sin(rod[1][0]))+")*cos(u)*sin(v)+("+str(cos(rod[1][0])*a)+")*cos(v)", end=" ") + print("with pm3d", end="") + if i<len(config)-1: + print(", \\") diff --git a/figs/dimer_example.fig/Makefile b/figs/dimer_example.fig/Makefile new file mode 100644 index 0000000..826c6bb --- /dev/null +++ b/figs/dimer_example.fig/Makefile @@ -0,0 +1,32 @@ +PROJECTNAME=grid dimers interaction boundary dimer_contour dimer_pirogov_sinai dimer_pirogov_sinai_preflip dimer_pirogov_sinai_flip +LIBS=$(notdir $(wildcard libs/*)) + +PDFS=$(addsuffix .pdf, $(PROJECTNAME)) +SOURCES=$(addsuffix .tikz.tex, $(PROJECTNAME)) + +all: $(PDFS) + +$(PDFS): $(SOURCES) $(LIBS) + echo $(LIBS) + pdflatex -jobname $(basename $@) -file-line-error $(patsubst %.pdf, %.tikz.tex, $@) + +$(SOURCES): + python3 dimer_conf.py + +$(LIBS): + ln -fs libs/$@ ./ + +clean-libs: + rm -f $(LIBS) + +clean-aux: + rm -f $(addsuffix .aux, $(PROJECTNAME)) + rm -f $(addsuffix .log, $(PROJECTNAME)) + +clean-tex: + rm -f $(PDFS) + +clean-sources: + rm -f $(SOURCES) + +clean: clean-libs clean-aux clean-tex clean-sources diff --git a/figs/dimer_example.fig/dimer_conf.py b/figs/dimer_example.fig/dimer_conf.py new file mode 100644 index 0000000..5e23e51 --- /dev/null +++ b/figs/dimer_example.fig/dimer_conf.py @@ -0,0 +1,321 @@ +#!/usr/bin/env python3 + +import random +from math import * + +# size of the grid +L=24 +# boundary thickness (must be even) +l0=4 +# activity and interaction +z=3 +J=5 + + +# draw random dimers in a select area +def fill_dimers(mask,direction): + if(direction=="h"): + d=[1,0] + else: + d=[0,1] + + dimers=[] + + # keep track of which sites are occupied + occupied=[] + for i in range(L): + occupied.append([]) + for j in range(L): + occupied[i].append(0) + + for i in range(10000): + # pick a random edge (indexed by its lower-left corner) + e=None + while(e==None or e[0]+d[0]>=L or e[1]+d[1]>=L or mask[e[0]][e[1]]==0 or mask[e[0]+d[0]][e[1]+d[1]]==0): + e=[random.randint(0,L-1),random.randint(0,L-1)] + # check whether a dimer can be added to the edge + if(occupied[e[0]][e[1]]==0 and occupied[e[0]+d[0]][e[1]+d[1]]==0): + # number of interactions + interactions=0 + if(e[0]+2*d[0]<L and e[1]+2*d[1]<L and occupied[e[0]+2*d[0]][e[1]+2*d[1]]==1): + interactions=interactions+1 + if(e[0]-d[0]>=0 and e[1]-d[1]>=0 and occupied[e[0]-d[0]][e[1]-d[1]]==1): + interactions=interactions+1 + # probability of adding the dimer + p=1/(1+1/z*exp(-J*interactions)) + if(p>random.random()): + # add dimer + dimers.append(e) + occupied[e[0]][e[1]]=1 + occupied[e[0]+d[0]][e[1]+d[1]]=1 + + return(dimers) + +# find interactions +def interactions(dimers,direction): + if(direction=="h"): + d=[1,0] + else: + d=[0,1] + + out=[] + for d1 in dimers: + for d2 in dimers: + if(d1[0]-d2[0]==2*d[0] and d1[1]-d2[1]==2*d[1]): + out.append([d2[0]+d[0],d2[1]+d[1]]) + return(out) + + +# draw dimers +def draw_dimers(v_dimers,h_dimers,file_desc,color): + for d in v_dimers: + print("\\dimer{[color="+color+"]("+str(d[0])+","+str(d[1])+")}v", file=file_desc) + print("", file=file_desc) + for d in h_dimers: + print("\\dimer{[color="+color+"]("+str(d[0])+","+str(d[1])+")}h", file=file_desc) + print("", file=file_desc) + +# draw interactions +def draw_interactions(v_interactions,h_interactions,file_desc): + for d in v_interactions: + print("\\interaction{("+str(d[0])+","+str(d[1])+")}v", file=file_desc) + print("", file=file_desc) + for d in h_interactions: + print("\\interaction{("+str(d[0])+","+str(d[1])+")}h", file=file_desc) + print("", file=file_desc) + +# draw loops +def draw_loops(loops,file_desc,color): + for loop in loops: + print("\\draw[color="+color+", line width=3pt]",end="",file=file_desc) + for e in loop: + print("("+str(e[0])+","+str(e[1])+")--",end="",file=file_desc) + print("cycle;",file=file_desc) + +# init tikz file +def init_tikz(filename): + file_desc=open(filename,"w") + print("\\documentclass{standalone}\n\n\\usepackage{tikz}\n\\usepackage{dimer}\n\\usetikzlibrary{decorations.pathmorphing}\n\n\\begin{document}\n\\begin{tikzpicture}\n\n", file=file_desc) + return(file_desc) + +# close tikz file +def close_tikz(file_desc): + print("\\end{tikzpicture}\n\\end{document}", file=file_desc) + file_desc.close() + + +mu=int(L/2) + +# loops +loop1=[] +for i in range(0,2*l0): + loop1.append([mu-l0+i,mu+4.5]) +for i in range(0,4): + loop1.append([mu+l0-1+0.5,mu+4-i]) +for i in range(0,l0): + loop1.append([mu+l0+i,mu+0.5]) +for i in range(0,6): + loop1.append([mu+2*l0-1+0.5,mu-i]) +for i in range(0,4*l0): + loop1.append([mu+2*l0-1-i,mu-5.5]) +for i in range(0,6): + loop1.append([mu-2*l0-0.5,mu-5+i]) +for i in range(0,l0): + loop1.append([mu-2*l0+i,mu+0.5]) +for i in range(0,4): + loop1.append([mu-l0-0.5,mu+1+i]) +# core of loop1 +core_loop1=[] +for i in range(0,2*l0-4): + core_loop1.append([mu-l0+2+i,mu+3.5]) +for i in range(0,3): + core_loop1.append([mu+l0-3+0.5,mu+3-i]) +core_loop1.append([mu+l0-2,mu+0.5]) +core_loop1.append([mu+l0-1,mu+0.5]) +for i in range(0,l0-2): + core_loop1.append([mu+l0+i,mu-1+0.5]) +for i in range(0,4): + core_loop1.append([mu+2*l0-3+0.5,mu-1-i]) +for i in range(0,4*l0-4): + core_loop1.append([mu+2*l0-3-i,mu-4.5]) +for i in range(0,4): + core_loop1.append([mu-2*l0+2-0.5,mu-4+i]) +for i in range(0,l0-2): + core_loop1.append([mu-2*l0+2+i,mu-1+0.5]) +core_loop1.append([mu-l0,mu+0.5]) +core_loop1.append([mu-l0+1,mu+0.5]) +for i in range(0,3): + core_loop1.append([mu-l0+2-0.5,mu+1+i]) + +loop2=[[mu-1,mu+2.5],[mu-0.5,mu+2],[mu-0.5,mu+1],[mu-1,mu+0.5],[mu-1.5,mu+1],[mu-1.5,mu+2]] +loop3=[[mu-1,mu-1.5],[mu,mu-1.5],[mu+0.5,mu-2],[mu+0.5,mu-3],[mu,mu-3.5],[mu-1,mu-3.5],[mu-1.5,mu-3],[mu-1.5,mu-2]] + + +loops=[loop1,loop2,loop3] + + +# masks +# init +v_mask=[] +h_mask=[] +for i in range(L): + v_mask.append([]) + h_mask.append([]) + for j in range(L): + v_mask[i].append(1) + h_mask[i].append(0) +# draw masks +for i in range(mu-l0,mu+l0): + for j in range(mu+1,mu+5): + v_mask[i][j]=0 +for i in range(mu-2*l0,mu+2*l0): + for j in range(mu-5,mu+1): + v_mask[i][j]=0 +for i in range(mu-l0+2,mu+l0-2): + for j in range(mu+1,mu+4): + h_mask[i][j]=1 +for i in range(mu-l0,mu+l0): + h_mask[i][mu]=1 +for i in range(mu-2*l0+2,mu+2*l0-2): + for j in range(mu-4,mu): + h_mask[i][j]=1 +h_mask[mu-1][mu+1]=0 +h_mask[mu-1][mu+2]=0 +h_mask[mu-1][mu-3]=0 +h_mask[mu-1][mu-2]=0 +h_mask[mu][mu-3]=0 +h_mask[mu][mu-2]=0 + +# random dimers in mask +v_dimers=fill_dimers(v_mask,"v") +h_dimers=fill_dimers(h_mask,"h") + +# mantle dimers +h_mantle=[] +for i in range(0,l0): + h_mantle.append([mu-l0+2*i,mu+4]) +for i in range(0,4): + h_mantle.append([mu+l0-2,mu+4-i]) + h_mantle.append([mu-l0,mu+4-i]) +for i in range(0,int(l0/2)): + h_mantle.append([mu+l0+2*i,mu]) + h_mantle.append([mu-l0-2-2*i,mu]) +for i in range(0,5): + h_mantle.append([mu+2*l0-2,mu-i]) + h_mantle.append([mu-2*l0,mu-i]) +for i in range(0,2*l0): + h_mantle.append([mu-2*l0+2*i,mu-5]) + +v_mantle=[] +v_mantle.append([mu-1,mu+1]) +v_mantle.append([mu-1,mu-3]) +v_mantle.append([mu,mu-3]) + +# flip horizontal mantle +flip_mantle=[] +for i in range(2,2*l0-2): + flip_mantle.append([mu-l0+i,mu+4]) +for i in range(0,2): + flip_mantle.append([mu+l0-2,mu+3-2*i]) + flip_mantle.append([mu-l0+1,mu+3-2*i]) +flip_mantle.append([mu+l0-1,mu+1]) +flip_mantle.append([mu-l0,mu+1]) +for i in range(1,l0-1): + flip_mantle.append([mu+l0-1+i,mu]) + flip_mantle.append([mu-l0-i,mu]) +for i in range(0,2): + flip_mantle.append([mu+2*l0-2,mu-2*i-2]) + flip_mantle.append([mu-2*l0+1,mu-2*i-2]) +for i in range(2,4*l0-2): + flip_mantle.append([mu-2*l0+i,mu-6]) + +# interactions +v_interactions=interactions(v_dimers+v_mantle,"v") +h_interactions=interactions(h_dimers+h_mantle,"h") + + +# files + +grid=init_tikz("grid.tikz.tex") +print("\\grid{"+str(L-1)+"}{"+str(L-1)+"}{(0,0)}\n", file=grid) +close_tikz(grid) + +dimers=init_tikz("dimers.tikz.tex") +print("\\grid{"+str(L-1)+"}{"+str(L-1)+"}{(0,0)}\n", file=dimers) +draw_dimers(v_dimers+v_mantle,h_dimers+h_mantle,dimers,"black") +close_tikz(dimers) + +interaction=init_tikz("interaction.tikz.tex") +print("\\grid{"+str(L-1)+"}{"+str(L-1)+"}{(0,0)}\n", file=interaction) +draw_interactions(v_interactions,h_interactions,interaction) +draw_dimers(v_dimers+v_mantle,h_dimers+h_mantle,interaction,"black") +close_tikz(interaction) + +boundary=init_tikz("boundary.tikz.tex") +print("\\fill[color=cyan](-0.5,-0.5)--++("+str(L)+",0)--++(0,"+str(l0)+")--++("+str(-L)+",0)--cycle;", file=boundary) +print("\\fill[color=cyan](-0.5,"+str(L-l0-0.5)+")--++("+str(L)+",0)--++(0,"+str(l0)+")--++("+str(-L)+",0)--cycle;", file=boundary) +print("", file=boundary) +print("\\grid{"+str(L-1)+"}{"+str(L-1)+"}{(0,0)}\n", file=boundary) +draw_dimers(v_dimers+v_mantle,h_dimers+h_mantle,boundary,"black") +close_tikz(boundary) + +contour=init_tikz("dimer_contour.tikz.tex") +print("\\grid{"+str(L-1)+"}{"+str(L-1)+"}{(0,0)}\n", file=contour) +draw_loops([loop1,loop2,loop3],contour,"blue") +draw_interactions(v_interactions,h_interactions,contour) +draw_dimers(v_dimers,h_dimers,contour,"black") +draw_dimers(v_mantle,h_mantle,contour,"black") +close_tikz(contour) + +pirogov_sinai=init_tikz("dimer_pirogov_sinai.tikz.tex") +print("\\begin{scope}", file=pirogov_sinai) +print(" \\clip", end="", file=pirogov_sinai) +for e in loop1: + print("("+str(e[0])+","+str(e[1])+")--", end="", file=pirogov_sinai) +print("cycle;",file=pirogov_sinai) +print(" \\fill[color=white]("+str(mu-2*l0-2)+","+str(mu-7)+")--++("+str(4*l0+3)+",0)--++(0,13)--++("+str(-4*l0-3)+",0);", file=pirogov_sinai) +print(" \\fill[color=cyan]", end="", file=pirogov_sinai) +for e in core_loop1: + print("("+str(e[0])+","+str(e[1])+")--", end="", file=pirogov_sinai) +print("cycle;",file=pirogov_sinai) +print("\\end{scope}\n", file=pirogov_sinai) +print("\\grid{"+str(L-1)+"}{"+str(L-1)+"}{(0,0)}\n", file=pirogov_sinai) +draw_loops([loop1],pirogov_sinai,"blue") +draw_interactions(v_interactions,[],pirogov_sinai) +draw_dimers(v_dimers,[],pirogov_sinai,"black") +draw_dimers([],h_mantle,pirogov_sinai,"black") +close_tikz(pirogov_sinai) + +pirogov_sinai_preflip=init_tikz("dimer_pirogov_sinai_preflip.tikz.tex") +print("\\begin{scope}", file=pirogov_sinai_preflip) +print(" \\clip", end="", file=pirogov_sinai_preflip) +for e in loop1: + print("("+str(e[0])+","+str(e[1])+")--", end="", file=pirogov_sinai_preflip) +print("cycle;",file=pirogov_sinai_preflip) +print(" \\fill[color=white]("+str(mu-2*l0-2)+","+str(mu-7)+")--++("+str(4*l0+3)+",0)--++(0,13)--++("+str(-4*l0-3)+",0);", file=pirogov_sinai_preflip) +print(" \\fill[color=cyan]", end="", file=pirogov_sinai_preflip) +for e in core_loop1: + print("("+str(e[0])+","+str(e[1])+")--", end="", file=pirogov_sinai_preflip) +print("cycle;",file=pirogov_sinai_preflip) +print("\\end{scope}\n", file=pirogov_sinai_preflip) +print("\\grid{"+str(L-1)+"}{"+str(L-1)+"}{(0,0)}\n", file=pirogov_sinai_preflip) +draw_loops([loop1],pirogov_sinai_preflip,"blue") +draw_dimers([],h_mantle,pirogov_sinai_preflip,"black") +close_tikz(pirogov_sinai_preflip) + +pirogov_sinai_flip=init_tikz("dimer_pirogov_sinai_flip.tikz.tex") +print("\\begin{scope}", file=pirogov_sinai_flip) +print(" \\clip", end="", file=pirogov_sinai_flip) +for e in loop1: + print("("+str(e[0])+","+str(e[1])+")--", end="", file=pirogov_sinai_flip) +print("cycle;",file=pirogov_sinai_flip) +print(" \\fill[color=white]("+str(mu-2*l0-2)+","+str(mu-7)+")--++("+str(4*l0+3)+",0)--++(0,13)--++("+str(-4*l0-3)+",0);", file=pirogov_sinai_flip) +print(" \\fill[color=cyan]", end="", file=pirogov_sinai_flip) +for e in core_loop1: + print("("+str(e[0])+","+str(e[1])+")--", end="", file=pirogov_sinai_flip) +print("cycle;",file=pirogov_sinai_flip) +print("\\end{scope}\n", file=pirogov_sinai_flip) +print("\\grid{"+str(L-1)+"}{"+str(L-1)+"}{(0,0)}\n", file=pirogov_sinai_flip) +draw_loops([loop1],pirogov_sinai_flip,"blue") +draw_dimers(flip_mantle,[],pirogov_sinai_flip,"black") +close_tikz(pirogov_sinai_flip) diff --git a/figs/dimer_example.fig/libs/dimer.sty b/figs/dimer_example.fig/libs/dimer.sty new file mode 120000 index 0000000..2d83c8a --- /dev/null +++ b/figs/dimer_example.fig/libs/dimer.sty @@ -0,0 +1 @@ +../../libs/dimer.sty
\ No newline at end of file diff --git a/figs/libs/Makefile b/figs/libs/Makefile new file mode 100644 index 0000000..994463b --- /dev/null +++ b/figs/libs/Makefile @@ -0,0 +1,25 @@ +PROJECTNAME=$(basename $(basename $(wildcard *.tikz.tex))) +LIBS=$(notdir $(wildcard libs/*)) + +PDFS=$(addsuffix .pdf, $(PROJECTNAME)) + +all: $(PDFS) + +$(PDFS): $(LIBS) + echo $(LIBS) + pdflatex -jobname $(basename $@) -file-line-error $(patsubst %.pdf, %.tikz.tex, $@) + +$(LIBS): + ln -fs libs/$@ ./ + +clean-libs: + rm -f $(LIBS) + +clean-aux: + rm -f $(addsuffix .aux, $(PROJECTNAME)) + rm -f $(addsuffix .log, $(PROJECTNAME)) + +clean-tex: + rm -f $(PDFS) + +clean: clean-libs clean-aux clean-tex diff --git a/figs/libs/dimer.sty b/figs/libs/dimer.sty new file mode 100644 index 0000000..0f087ef --- /dev/null +++ b/figs/libs/dimer.sty @@ -0,0 +1,33 @@ +% square lattice (width #1, height #2, origin #3) +\def\grid#1#2#3{ + \foreach\i in {0,...,#2}{ + \draw#3++(0,\i)--++(#1,0); + } + \foreach\i in {0,...,#1}{ + \draw#3++(\i,0)--++(0,#2); + } +} + +% dimer (bottom-left vertex #1, vertical or horizontal #2) +\def\dimer#1#2{ + \if#2h + \draw[line width=5pt]#1--++(1,0); + \fill#1circle(7pt); + \fill#1++(1,0)circle(7pt); + \else + \draw[line width=5pt]#1--++(0,1); + \fill#1circle(7pt); + \fill#1++(0,1)circle(7pt); + \fi +} + +% interactions (bottom-left vertex #1, vertical or horizontal #2) +\def\interaction#1#2{ + \if#2h + \draw[line width=5pt, color=white]#1--++(1,0); + \draw[line width=4pt, decorate, decoration={snake}, color=red]#1--++(1,0); + \else + \draw[line width=5pt, color=white]#1--++(0,1); + \draw[line width=4pt, decorate, decoration={snake}, color=red]#1--++(0,1); + \fi +} diff --git a/figs/polymer_example.fig/Makefile b/figs/polymer_example.fig/Makefile new file mode 120000 index 0000000..704310e --- /dev/null +++ b/figs/polymer_example.fig/Makefile @@ -0,0 +1 @@ +../libs/Makefile
\ No newline at end of file diff --git a/figs/polymer_example.fig/contours.tikz.tex b/figs/polymer_example.fig/contours.tikz.tex new file mode 100644 index 0000000..995bda2 --- /dev/null +++ b/figs/polymer_example.fig/contours.tikz.tex @@ -0,0 +1,61 @@ +\documentclass{standalone} + +\usepackage{tikz} +\usepackage{dimer} + +\begin{document} +\begin{tikzpicture} + +%% mantles + +% blue +\fill[color=red](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle; +\fill[color=white](4,7.5)--++(9,0)--++(0.5,0.5)--++(0,6)--++(-0.5,0.5)--++(-9,0)--++(-0.5,-0.5)--++(0,-6)--cycle; +% red +\fill[color=red](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle; +\fill[color=white](7,10.5)--++(2,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-2,0)--++(-0.5,-0.5)--++(0,-1)--cycle; +% teal +\fill[color=blue](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle; +\fill[color=white](11,20.5)--++(7,0)--++(0.5,-0.5)--++(0.5,-0.5)--++(1,0)--++(0.5,-0.5)--++(0,-9)--++(0.5,-0.5)--++(11,0)--++(0.5,0.5)--++(0,20)--++(-0.5,0.5)--++(-21,0)--++(-0.5,-0.5)--++(0,-9)--cycle; +% magenta +\fill[color=blue](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle; +\fill[color=white](14,23.5)--++(16,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-16,0)--++(-0.5,-0.5)--++(0,-3)--cycle; +% orange +\fill[color=blue](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle; +\fill[color=white](17,24.5)--++(1,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-1,0)--++(-0.5,-0.5)--++(0,-1)--cycle; +% green +\fill[color=blue](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle; + + +%% segments + +\foreach \i in {9,...,14}{ + \draw[color=red, line width=15pt](3.5,\i)--++(2,0); + \draw[color=red, line width=15pt](10.5,\i)--++(3,0); +} + +\foreach \i in {22,...,29}{ + \draw[color=blue, line width=15pt](10.5,\i)--++(2,0); + \draw[color=blue, line width=15pt](31.5,\i)--++(1,0); +} + +\foreach \i in {23,...,26}{ + \draw[color=blue, line width=15pt](\i,23.5)--++(0,1); + \draw[color=blue, line width=15pt](\i,26.5)--++(0,1); +} + +%% grid +\grid{36}{36}{[color=lightgray](0,0)} + + +%% loops +\draw[color=black, line width=5pt](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle; +\draw[color=black, line width=5pt](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle; +\draw[color=black, line width=5pt](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle; +\draw[color=black, line width=5pt](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle; +\draw[color=black, line width=5pt](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle; +\draw[color=black, line width=5pt](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle; + +\end{tikzpicture} +\end{document} + diff --git a/figs/polymer_example.fig/libs/dimer.sty b/figs/polymer_example.fig/libs/dimer.sty new file mode 120000 index 0000000..2d83c8a --- /dev/null +++ b/figs/polymer_example.fig/libs/dimer.sty @@ -0,0 +1 @@ +../../libs/dimer.sty
\ No newline at end of file diff --git a/figs/polymer_example.fig/segments.tikz.tex b/figs/polymer_example.fig/segments.tikz.tex new file mode 100644 index 0000000..9669e3b --- /dev/null +++ b/figs/polymer_example.fig/segments.tikz.tex @@ -0,0 +1,132 @@ +\documentclass{standalone} + +\usepackage{tikz} +\usepackage{dimer} + +\begin{document} +\begin{tikzpicture} + + +%% mantles + +% blue +\fill[color=blue](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle; +\fill[color=white](4,7.5)--++(9,0)--++(0.5,0.5)--++(0,6)--++(-0.5,0.5)--++(-9,0)--++(-0.5,-0.5)--++(0,-6)--cycle; +% red +\fill[color=red](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle; +\fill[color=white](7,10.5)--++(2,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-2,0)--++(-0.5,-0.5)--++(0,-1)--cycle; +% teal +\fill[color=teal](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle; +\fill[color=white](11,20.5)--++(7,0)--++(0.5,-0.5)--++(0.5,-0.5)--++(1,0)--++(0.5,-0.5)--++(0,-9)--++(0.5,-0.5)--++(11,0)--++(0.5,0.5)--++(0,20)--++(-0.5,0.5)--++(-21,0)--++(-0.5,-0.5)--++(0,-9)--cycle; +% magenta +\fill[color=magenta](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle; +\fill[color=white](14,23.5)--++(16,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-16,0)--++(-0.5,-0.5)--++(0,-3)--cycle; +% cyan +\fill[color=cyan](23,11.5)--++(7,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-7,0)--++(-0.5,-0.5)--++(0,-5)--cycle; +\fill[color=white](24,13.5)--++(5,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-1)--cycle; +% orange +\fill[color=orange](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle; +\fill[color=white](17,24.5)--++(1,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-1,0)--++(-0.5,-0.5)--++(0,-1)--cycle; +% green +\fill[color=green](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle; + + +%% segments + +\foreach \i in {0,...,1}{ + \draw[color=gray, line width=15pt](\i,-0.5)--++(0,37); +} +\foreach \i in {2,...,8}{ + \draw[color=gray, line width=15pt](\i,-0.5)--++(0,7); + \draw[color=gray, line width=15pt](\i,15.5)--++(0,21); +} +\foreach \i in {9,...,15}{ + \draw[color=gray, line width=15pt](\i,-0.5)--++(0,7); + \draw[color=gray, line width=15pt](\i,15.5)--++(0,4); + \draw[color=gray, line width=15pt](\i,31.5)--++(0,5); +} +\foreach \i in {16,...,18}{ + \draw[color=gray, line width=15pt](\i,-0.5)--++(0,20); + \draw[color=gray, line width=15pt](\i,31.5)--++(0,5); +} +\foreach \i in {19,...,34}{ + \draw[color=gray, line width=15pt](\i,-0.5)--++(0,9); + \draw[color=gray, line width=15pt](\i,31.5)--++(0,5); +} +\foreach \i in {35,...,36}{ + \draw[color=gray, line width=15pt](\i,-0.5)--++(0,37); +} + +\draw[color=blue, line width=15pt](3.5,8)--++(10,0); +\foreach \i in {9,...,14}{ + \draw[color=blue, line width=15pt](3.5,\i)--++(2,0); + \draw[color=blue, line width=15pt](10.5,\i)--++(3,0); +} + +\foreach \i in {7,...,9}{ + \draw[color=red, line width=15pt](\i,10.5)--++(0,2); +} + +\foreach \i in {10,...,11}{ + \draw[color=teal, line width=15pt](20.5,\i)--++(12,0); +} +\foreach \i in {12,...,17}{ + \draw[color=teal, line width=15pt](20.5,\i)--++(2,0); + \draw[color=teal, line width=15pt](30.5,\i)--++(2,0); +} +\foreach \i in {18,...,19}{ + \draw[color=teal, line width=15pt](20.5,\i)--++(12,0); +} +\draw[color=teal, line width=15pt](18.5,20)--++(14,0); +\draw[color=teal, line width=15pt](10.5,21)--++(22,0); +\foreach \i in {22,...,29}{ + \draw[color=teal, line width=15pt](10.5,\i)--++(2,0); + \draw[color=teal, line width=15pt](31.5,\i)--++(1,0); +} +\draw[color=teal, line width=15pt](10.5,30)--++(22,0); + +\foreach \i in {24,...,29}{ + \draw[color=cyan, line width=15pt](\i,13.5)--++(0,2); +} + +\draw[color=magenta, line width=15pt](14,23.5)--++(0,4); +\foreach \i in {21,...,22}{ + \draw[color=magenta, line width=15pt](\i,23.5)--++(0,4); +} +\foreach \i in {23,...,26}{ + \draw[color=magenta, line width=15pt](\i,23.5)--++(0,1); + \draw[color=magenta, line width=15pt](\i,26.5)--++(0,1); +} +\foreach \i in {27,...,30}{ + \draw[color=magenta, line width=15pt](\i,23.5)--++(0,4); +} + +\foreach \i in {25,...,26}{ + \draw[color=orange, line width=15pt](16.5,\i)--++(2,0); +} + + + +%% grid +\grid{36}{36}{[color=lightgray](0,0)} + +%% loops +% blue +\draw[color=black, line width=5pt](2,6.5)--++(13,0)--++(0.5,0.5)--++(0,8)--++(-0.5,0.5)--++(-13,0)--++(-0.5,-0.5)--++(0,-8)--cycle; +% red +\draw[color=black, line width=5pt](6,8.5)--++(4,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-4,0)--++(-0.5,-0.5)--++(0,-5)--cycle; +% teal +\draw[color=black, line width=5pt](9,19.5)--++(9,0)--++(0.5,-0.5)--++(0,-10)--++(0.5,-0.5)--++(15,0)--++(0.5,0.5)--++(0,22)--++(-0.5,0.5)--++(-25,0)--++(-0.5,-0.5)--++(0,-11)--cycle; +% magenta +\draw[color=black, line width=5pt](13,21.5)--++(18,0)--++(0.5,0.5)--++(0,7)--++(-0.5,0.5)--++(-18,0)--++(-0.5,-0.5)--++(0,-7)--cycle; +% cyan +\draw[color=black, line width=5pt](23,11.5)--++(7,0)--++(0.5,0.5)--++(0,5)--++(-0.5,0.5)--++(-7,0)--++(-0.5,-0.5)--++(0,-5)--cycle; +% orange +\draw[color=black, line width=5pt](15,23.5)--++(5,0)--++(0.5,0.5)--++(0,3)--++(-0.5,0.5)--++(-5,0)--++(-0.5,-0.5)--++(0,-3)--cycle; +%green +\draw[color=black, line width=5pt](23,24.5)--++(3,0)--++(0.5,0.5)--++(0,1)--++(-0.5,0.5)--++(-3,0)--++(-0.5,-0.5)--++(0,-1)--cycle; + + +\end{tikzpicture} +\end{document} + diff --git a/figs/regime.fig/Makefile b/figs/regime.fig/Makefile new file mode 100644 index 0000000..9544dcc --- /dev/null +++ b/figs/regime.fig/Makefile @@ -0,0 +1,26 @@ +PROJECTNAME=regime + +PDFS=$(addsuffix .pdf, $(PROJECTNAME)) +TEXS=$(addsuffix .tikz.tex, $(PROJECTNAME)) + +all: $(PDFS) + +$(PDFS): + gnuplot $(patsubst %.pdf, %.gnuplot, $@) > $(patsubst %.pdf, %.tikz.tex, $@) + pdflatex -jobname $(basename $@) -file-line-error $(patsubst %.pdf, %.tikz.tex, $@) + +install: $(PDFS) + cp $^ $(INSTALLDIR)/ + +clean-aux: + rm -f $(addsuffix .aux, $(PROJECTNAME)) + rm -f $(addsuffix .log, $(PROJECTNAME)) + +clean-dat: + rm -f $(addsuffix .tikz.tex, $(PROJECTNAME)) + rm -f short-time.dat + +clean-tex: + rm -f $(PDFS) + +clean: clean-dat clean-aux clean-tex diff --git a/figs/regime.fig/regime.gnuplot b/figs/regime.fig/regime.gnuplot new file mode 100644 index 0000000..b105b56 --- /dev/null +++ b/figs/regime.fig/regime.gnuplot @@ -0,0 +1,31 @@ +set ylabel "J\\hskip10pt" norotate +set xlabel "z" + +set xrange[0:2] +set yrange [0:] + +unset xtics +unset ytics + +# default output canvas size: 12.5cm x 8.75cm +set term lua tikz size 12.5,8.75 standalone + +set key off + +# 3=1+2 draw bottom and left sides of the box +set border 3 + +# set linestyle +set style line 1 linetype rgbcolor "#4169E1" linewidth 3 +set style line 2 linetype rgbcolor "#DC143C" linewidth 3 +set style line 3 linetype rgbcolor "#32CD32" linewidth 3 +set style line 4 linetype rgbcolor "#4B0082" linewidth 3 +set style line 5 linetype rgbcolor "#DAA520" linewidth 3 + +set pointsize 0.6 + +set label "\\bf [HL79]" at 0.85,3.5 front textcolor "white" +set label "\\bf [JL18]" at 1.65,3.5 front textcolor "white" + +plot (x<1 ? -log(x)+1 : 1) with filledcurves x2 linestyle 1 ,\ + (x>1.5 ? x : 1/0) with filledcurves x2 linestyle 2 diff --git a/figs/smallest.fig/Makefile b/figs/smallest.fig/Makefile new file mode 120000 index 0000000..704310e --- /dev/null +++ b/figs/smallest.fig/Makefile @@ -0,0 +1 @@ +../libs/Makefile
\ No newline at end of file diff --git a/figs/smallest.fig/libs/dimer.sty b/figs/smallest.fig/libs/dimer.sty new file mode 120000 index 0000000..2d83c8a --- /dev/null +++ b/figs/smallest.fig/libs/dimer.sty @@ -0,0 +1 @@ +../../libs/dimer.sty
\ No newline at end of file diff --git a/figs/smallest.fig/smallest.tikz.tex b/figs/smallest.fig/smallest.tikz.tex new file mode 100644 index 0000000..9fb62fc --- /dev/null +++ b/figs/smallest.fig/smallest.tikz.tex @@ -0,0 +1,16 @@ +\documentclass{standalone} + +\usepackage{tikz} +\usepackage{dimer} + +\begin{document} +\begin{tikzpicture} + +\fill[color=gray](1,0.5)--++(1,0)--++(0.5,0.5)--++(-0.5,0.5)--++(-1,0)--++(-0.5,-0.5)--cycle; +\draw[line width=15pt,color=gray](1,-2.5)--(1,1); +\grid{3}{5}{[color=lightgray](0,-3)} +\draw[color=black, line width=5pt](1,0.5)--++(1,0)--++(0.5,0.5)--++(-0.5,0.5)--++(-1,0)--++(-0.5,-0.5)--cycle; + +\end{tikzpicture} +\end{document} + diff --git a/libs/ian-presentation.cls b/libs/ian-presentation.cls new file mode 100644 index 0000000..91bd487 --- /dev/null +++ b/libs/ian-presentation.cls @@ -0,0 +1,187 @@ +%% +%% Ian's presentation class +%% + +%% TeX format +\NeedsTeXFormat{LaTeX2e}[1995/12/01] + +%% class name +\ProvidesClass{ian-presentation}[2017/09/29] + +\def\ian@defaultoptions{ + \pagestyle{plain} + \RequirePackage{color} + \RequirePackage{amssymb} +} + +%% paper dimensions +\setlength\paperheight{240pt} +\setlength\paperwidth{427pt} + +%% fonts +\input{size11.clo} +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} + +%% text dimensions +\textheight=208pt +\textwidth=370pt +\hoffset=-1in +\voffset=-1in +\oddsidemargin=24pt +\evensidemargin=24pt +\topmargin=8pt +\headheight=0pt +\headsep=0pt +\marginparsep=0pt +\marginparwidth=0pt +\footskip=16pt + + +%% remove default skips +\parindent=0pt +\parskip=0pt +\baselineskip=0pt + +%% something is wrong with \thepage, redefine it +\gdef\thepage{\the\c@page} + +%% correct vertical alignment at the end of a document +\AtEndDocument{ + % save total slide count + \immediate\write\@auxout{\noexpand\gdef\noexpand\slidecount{\thepage}} + \vfill + \eject +} + + +%% footer +\def\ps@plain{ + \def\@oddhead{} + \def\@evenhead{\@oddhead} + \def\@oddfoot{\tiny\hfill\thepage/\safe\slidecount\hfill} + \def\@evenfoot{\@oddfoot} +} +\def\ps@empty{ + \def\@oddhead{} + \def\@evenhead{\@oddhead} + \def\@oddfoot{} + \def\@evenfoot{\@oddfoot} +} + + +%% title of slide +\def\title#1{ + \hfil{\bf\large #1}\par + \hfil\vrule width0.75\textwidth height0.3pt\par + \vskip5pt +} + + +%% hyperlinks +% hyperlinkcounter +\newcounter{lncount} +% hyperref anchor +\def\hrefanchor{% +\stepcounter{lncount}% +\hypertarget{ln.\thelncount}{}% +} + +%% define a command and write it to aux file +\def\outdef#1#2{% + % define command% + \expandafter\xdef\csname #1\endcsname{#2}% + % hyperlink number% + \expandafter\xdef\csname #1@hl\endcsname{\thelncount}% + % write command to aux% + \immediate\write\@auxout{\noexpand\expandafter\noexpand\gdef\noexpand\csname #1\endcsname{\csname #1\endcsname}}% + \immediate\write\@auxout{\noexpand\expandafter\noexpand\gdef\noexpand\csname #1@hl\endcsname{\thelncount}}% +} + +%% can call commands even when they are not defined +\def\safe#1{% + \ifdefined#1% + #1% + \else% + {\color{red}\bf?}% + \fi% +} + + +%% itemize +\newlength\itemizeskip +% left margin for items +\setlength\itemizeskip{20pt} +\newlength\itemizeseparator +% space between the item symbol and the text +\setlength\itemizeseparator{5pt} +% penalty preceding an itemize +\def\itemizepenalty{0} +% counter counting the itemize level +\newcounter{itemizecount} + +% item symbol +\def\itemizept#1{ + \ifnum#1=1 + \textbullet + \else + $\scriptstyle\blacktriangleright$ + \fi +} + +\newlength\current@itemizeskip +\setlength\current@itemizeskip{0pt} +\def\itemize{ + \par\penalty\itemizepenalty\medskip\penalty\itemizepenalty + \addtocounter{itemizecount}{1} + \addtolength\current@itemizeskip{\itemizeskip} + \leftskip\current@itemizeskip +} +\def\enditemize{ + \addtocounter{itemizecount}{-1} + \addtolength\current@itemizeskip{-\itemizeskip} + \par\leftskip\current@itemizeskip + \medskip +} +\newlength\itempt@total +\def\item{ + \settowidth\itempt@total{\itemizept\theitemizecount} + \addtolength\itempt@total{\itemizeseparator} + \par + \medskip + \hskip-\itempt@total\itemizept\theitemizecount\hskip\itemizeseparator +} + +%% enumerate +\newcounter{enumerate@count} +\def\enumerate{ + \setcounter{enumerate@count}0 + \let\olditem\item + \let\olditemizept\itemizept + \def\item{ + % counter + \stepcounter{enumerate@count} + % set header + \def\itemizept{\theenumerate@count.} + % hyperref anchor + \hrefanchor + % define tag (for \label) + \xdef\tag{\theenumerate@count} + \olditem + } + \itemize +} +\def\endenumerate{ + \enditemize + \let\item\olditem + \let\itemizept\olditemizept +} + + +%% end +\ian@defaultoptions + +\endinput |