Initial commit
This commit is contained in:
15
figs/atoms.fig/Makefile
Normal file
15
figs/atoms.fig/Makefile
Normal file
@ -0,0 +1,15 @@
|
||||
PROJECTNAME=nematic liquid crystal 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)
|
22
figs/atoms.fig/chiral-base.gp
Normal file
22
figs/atoms.fig/chiral-base.gp
Normal file
@ -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 \
|
102
figs/atoms.fig/chiral.py
Normal file
102
figs/atoms.fig/chiral.py
Normal file
@ -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(", \\")
|
21
figs/atoms.fig/crystal-base.gp
Normal file
21
figs/atoms.fig/crystal-base.gp
Normal file
@ -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 "#ff00ff", 1 "#00ff00")
|
||||
|
||||
splot \
|
26
figs/atoms.fig/crystal.py
Normal file
26
figs/atoms.fig/crystal.py
Normal file
@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from math import *
|
||||
import random
|
||||
import sys
|
||||
|
||||
# number of Cl atoms
|
||||
N=5
|
||||
|
||||
for i in range(N):
|
||||
for j in range(N):
|
||||
for k in range(N):
|
||||
if ((i+j+k)%2==0):
|
||||
color=1
|
||||
size=1
|
||||
else:
|
||||
color=0
|
||||
size=0.5
|
||||
print("'++' u", end=" ")
|
||||
print("("+str(1.5*i)+"+("+str(size)+")*cos($1)*sin($2))", end=":")
|
||||
print("("+str(1.5*j)+"+("+str(size)+")*sin($1)*sin($2))", end=":")
|
||||
print("("+str(1.5*k)+"+("+str(size)+")*cos($2))", end=":")
|
||||
print("("+str(color)+")", end=" ")
|
||||
print("with pm3d", end="")
|
||||
if i<N**3-1:
|
||||
print(", \\")
|
21
figs/atoms.fig/liquid-base.gp
Normal file
21
figs/atoms.fig/liquid-base.gp
Normal file
@ -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 \
|
39
figs/atoms.fig/liquid.py
Normal file
39
figs/atoms.fig/liquid.py
Normal file
@ -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(", \\")
|
21
figs/atoms.fig/nematic-base.gp
Normal file
21
figs/atoms.fig/nematic-base.gp
Normal file
@ -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 \
|
90
figs/atoms.fig/nematic.py
Normal file
90
figs/atoms.fig/nematic.py
Normal file
@ -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(", \\")
|
32
figs/dimer_example.fig/Makefile
Normal file
32
figs/dimer_example.fig/Makefile
Normal file
@ -0,0 +1,32 @@
|
||||
PROJECTNAME=interaction
|
||||
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
|
167
figs/dimer_example.fig/dimer_conf.py
Normal file
167
figs/dimer_example.fig/dimer_conf.py
Normal file
@ -0,0 +1,167 @@
|
||||
#!/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)
|
||||
|
||||
# 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)
|
||||
|
||||
|
||||
# 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])
|
||||
|
||||
# interactions
|
||||
v_interactions=interactions(v_dimers+v_mantle,"v")
|
||||
h_interactions=interactions(h_dimers+h_mantle,"h")
|
||||
|
||||
# files
|
||||
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)
|
33
figs/dimer_example.fig/libs/dimer.sty
Normal file
33
figs/dimer_example.fig/libs/dimer.sty
Normal file
@ -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
|
||||
}
|
BIN
figs/pyrite.jpg
Normal file
BIN
figs/pyrite.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 MiB |
Reference in New Issue
Block a user