2
0
mirror of https://github.com/LCPQ/DEHam synced 2024-11-13 09:33:52 +01:00
DEHam/notebooks/t_J_Model.ipynb

497 lines
34 KiB
Plaintext
Raw Normal View History

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 1. t-J Model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"-----"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. t-J Hamiltonian"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### a. Basis"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The $t-J$ Hamiltonian with a S=1/2 spin-model is constructed in a basis of $\\mathcal{R}^3$ given by the vector B as follows:\n",
"\n",
"$$\n",
"B=\n",
" \\begin{bmatrix}\n",
" 0 \\\\\n",
" \\uparrow \\\\\n",
" \\downarrow\n",
" \\end{bmatrix}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### b.) Operators"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Hamiltonian is constructed using two types of operators.\n",
"\n",
"1. The particle creation and annihilation operators $\\hat{C}^\\dagger,\\hat{C}$\n",
"2. The spin ladder operators $\\hat{S}^+, \\hat{S}^-, \\hat{S}^z$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The matrix form of the five operators in the above basis is given as follows:\n",
"\n",
"$$\n",
"\\hat{C}^{\\dagger}_{\\uparrow}= \\left( \\hat{C}_{\\uparrow} \\right)^\\dagger=\n",
" \\begin{bmatrix}\n",
" 0 & 0 & 0 \\\\\n",
" 1 & 0 & 0 \\\\\n",
" 0 & 0 & 0\n",
" \\end{bmatrix}\n",
"$$\n",
"\n",
"$$\n",
"\\hat{C}^{\\dagger}_{\\downarrow}= \\left( \\hat{C}_{\\downarrow} \\right)^\\dagger=\n",
" \\begin{bmatrix}\n",
" 0 & 0 & 0 \\\\\n",
" 0 & 0 & 0 \\\\\n",
" 1 & 0 & 0\n",
" \\end{bmatrix}\n",
"$$\n",
"\n",
"$$\n",
"\\hat{S}^{z}\\ \\ \\ \\ =\\ \\ \\ \\ \\ \n",
" \\begin{bmatrix}\n",
" 0 & 0 & 0 \\\\\n",
" 0 & \\frac{1}{2} & 0 \\\\\n",
" 0 & 0 & -\\frac{1}{2}\n",
" \\end{bmatrix}\n",
"$$\n",
"\n",
"$$\n",
"\\hat{S}^{+}_{\\downarrow}= \\left( \\hat{S}^- \\right)^\\dagger=\n",
" \\begin{bmatrix}\n",
" 0 & 0 & 0 \\\\\n",
" 0 & 0 & 0 \\\\\n",
" 0 & 1 & 0\n",
" \\end{bmatrix}\n",
"$$\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### c.) Hamiltonian "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Nearest Neighbor coupling**\n",
"\n",
"The $t-J$ Hamiltonian is written in the above basis with the above five operators and the two parameters $t$ which governs the kinetic energy of the particles and the magnetic-coupling parameter $J$ which governs the coupling of the localized spins on neighboring sites.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\hat{H_{t-J}} = \\sum^{N-1}_i \\left\\{ t_{i,i+1} \\sum_{\\sigma} \\left(\\hat{C}^{\\dagger}_{\\sigma,i}\\cdot\\hat{C}_{\\sigma,i+1} + h.c. \\right) + J_{i,i+1} \\left( \\frac{\\hat{S}^+_{i}\\cdot\\hat{S}^-_{i+1} + \\hat{S}^-_{i}\\cdot\\hat{S}^+_{i+1}}{2} + \\hat{S}^z_i\\cdot\\hat{S}^z_{i+1} \\right)\\right\\}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$h.c.$ stands for Hermitian conjugate."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 2. 2D Lattice"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"----"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.) Labeling\n",
"Here a 4x4 lattice is shown with periodic boundary conditions where each site and bond is labelled."
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib as mplt\n",
"import networkx as nx\n",
"import numpy as np\n",
"\n",
"Lx = 4\n",
"Ly = 4\n",
"\n",
"draw2DLattice(Lx,Ly)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2.) Generating input file \n",
"\n",
"In this work, we will be using the [DEHam](https://github.com/v1j4y/DEHam) code to solve the Hamiltonian using Exact Diagonalization method. \n",
"\n",
"The input file for the code is as follows:\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
" 1. The DEHam program requires an input file which \n",
" has the topology of the Hamiltonian and the various parameters\n",
" as explained below in a sample inputfile:\n",
"\n",
"```python\n",
"8 \t\t\t\t\t\t\t\t# The number of orbitals (total)\n",
"1 \t\t\t\t\t\t\t\t# The largest number of non-zero elements per row (Multiple of Ndet)\n",
"1 \t\t\t\t\t\t\t\t# The total number of processors used in parallel (Multiple of Ndet)\n",
"1 \t\t\t\t\t\t\t\t# The number of holes\n",
"0 \t\t\t\t\t\t\t\t# The isz (ms-1/2) value\n",
"true \t# Restrict the hole to the 1'st (i.e. half of natom) Family of states. *false* for no restrictions\n",
"1,2,3,1,2,3,4,5,6,7\t\t\t\t\t# (L1) The topology of the system is specified here\n",
"2,3,4,8,7,6,5,6,7,8\t\t\t\t\t# (L2) first and second line contain the two sites linked\n",
"1,1,1,2,2,2,2,3,3,3\t\t\t\t\t# (ltype) third line contains the type of link (1 for t or J, 2 for K and 3 for none)\n",
".1430,-0.20,0.0000\t\t\t\t\t# The three types of links this line gives Jz, Kz\n",
".1430,-0.20,0.0000\t\t\t\t\t# The three types of links this line gives Jx,y; Kx,y\n",
"-1.00,0.0,0.00\t\t\t\t\t\t# This line gives t(i,i+1), t(i,i+2), t(i,i+3)\n",
"0.,0.,0.,0.,0.,0.,0.,0.,0. \t\t # Energy of each orbital + additional energy\n",
"2 \t\t\t\t# The total number of roots\n",
"1 \t\t\t\t# I The position of the first\n",
"1 \t\t\t\t# I SBox\n",
"1 \t\t\t\t# I\n",
"1 \t\t\t\t# I\n",
"1 \t\t\t\t# II The positions of the second\n",
"1 \t\t\t\t# II SBox\n",
"1 \t\t\t\t# II\n",
"1 \t\t\t\t# II\n",
"1 \t\t\t\t# III\n",
"1 \t\t\t\t# III The positions of the third\n",
"1 \t\t\t\t# III SBox\n",
"1 \t\t\t\t# III\n",
"1 \t\t\t\t# positio of the hole\n",
"0 \t\t\t\t# fix the position of the first hole during the CI\n",
"0 \t\t\t\t# fix the position of the second hole during the CI\n",
"0 \t\t\t\t# Print the wavefunction. It is stored in the FIL666 file after the run\n",
"```\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### a.) Script for $t-J$ input file"
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]\n",
"[2, 3, 4, 1, 6, 7, 8, 5, 10, 11, 12, 9, 14, 15, 16, 13, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 2, 3, 4]\n",
"[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n"
]
}
],
"source": [
"l1, l2, ltype = getInput(Lx,Ly)\n",
"print(l1)\n",
"print(l2)\n",
"print(ltype)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"------"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3.) Misc"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Draw Lattice"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"jupyter": {
"source_hidden": true
}
},
"outputs": [],
"source": [
"\"\"\"\n",
"Function that draws a 2D Lattice\n",
"\"\"\"\n",
"def draw2DLattice(Lx,Ly):\n",
" n=Lx+2\n",
" m=Ly+2\n",
"\n",
" G = nx.grid_2d_graph(n,m) # Lx, Ly grid\n",
"\n",
" pos = dict( (n, n) for n in G.nodes() );\n",
" #labels = Dict( ((i, j), i + (Ly-j) * (Lx+1) ) for (i,j) in G.nodes() );\n",
" #edges=Dict()\n",
" #for (i,edge) in enumerate(G.edges)\n",
" # edges[edge]=i\n",
" # print(i,\"\\t\",edge,\"\\n\")\n",
" #end\n",
"\n",
"\n",
" for j in range(0,m-1):\n",
" G.remove_edge((0,j),(0,j+1))\n",
" G.remove_edge((n-1,j),(n-1,j+1))\n",
"\n",
" for i in range(0,n-1):\n",
" G.remove_edge((i,0),(i+1,0))\n",
" G.remove_edge((i,m-1),(i+1,m-1))\n",
"\n",
"\n",
"\n",
" edgescenter = dict()\n",
" countedge = 1\n",
" for j in range(1,m-1):\n",
" for i in range(1,n-1):\n",
" edgescenter[((i,j),(i+1,j))] = countedge\n",
" countedge += 1\n",
"\n",
"\n",
" for j in range(1,m-1):\n",
" for i in range(1,n-1):\n",
" edgescenter[((i,j),(i,j+1))] = countedge\n",
" countedge += 1\n",
"\n",
"\n",
" labelscenter = dict()\n",
" countlabels = 1\n",
" for j in range(1,m-1):\n",
" for i in range(1,n-1):\n",
" labelscenter[(i,j)]=countlabels\n",
" countlabels+=1\n",
"\n",
"\n",
" color_map=[]\n",
" countcolor=0\n",
" for i in range(0,n):\n",
" for j in range(0,m):\n",
" if i==0 or j==0 or i==n-1 or j==m-1:\n",
" color_map.append(\"white\")\n",
" else:\n",
" if(countcolor%2 == 0):\n",
" color_map.append(\"blue\")\n",
" else:\n",
" color_map.append(\"red\")\n",
" countcolor+=1\n",
" countcolor+=1\n",
"\n",
"\n",
" nx.draw(G, pos=pos, labels=labelscenter, node_color=color_map, font_color=\"white\");\n",
" nx.draw_networkx_edge_labels(G,pos,edge_labels=edgescenter,font_color=\"black\");\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Generate Input"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {
"jupyter": {
"source_hidden": true
}
},
"outputs": [],
"source": [
"\"\"\"\n",
"Function that generates the input\n",
"\"\"\"\n",
"def getInput(Lx,Ly):\n",
" n=Lx+2\n",
" m=Ly+2\n",
"\n",
"\n",
" labelscenter = dict()\n",
" countlabels = 1\n",
" for j in range(1,m-1):\n",
" for i in range(1,n-1):\n",
" labelscenter[(i,j)]=countlabels\n",
" countlabels+=1\n",
"\n",
" edgescenter = dict()\n",
" countedge = 1\n",
" for j in range(1,m-1):\n",
" for i in range(1,n-1):\n",
" edgescenter[((i,j),(i+1,j))] = countedge\n",
" countedge += 1\n",
" for j in range(1,m-1):\n",
" for i in range(1,n-1):\n",
" edgescenter[((i,j),(i,j+1))] = countedge\n",
" countedge += 1\n",
"\n",
"\n",
" l1 = []\n",
" l2 = []\n",
" itype = [1 for x in range(0,len(edgescenter))]\n",
"\n",
" for x in edgescenter:\n",
" if Lx + 1 not in x[1]:\n",
" l1.append(labelscenter[x[0]])\n",
" l2.append(labelscenter[x[1]])\n",
" else:\n",
" l1.append(labelscenter[x[0]])\n",
" if x[1][0] > Lx:\n",
" l2.append(labelscenter[(x[1][0]-Lx,x[1][1])])\n",
" elif x[1][1] > Ly:\n",
" l2.append(labelscenter[(x[1][0],x[1][1]-Ly)])\n",
"\n",
"# print(l1,\"\\n\")\n",
"# print(l2,\"\\n\")\n",
"# print(itype,\"\\n\")\n",
" return l1,l2,itype"
]
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"([1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n",
" [2, 3, 1, 5, 6, 4, 8, 9, 7, 4, 5, 6, 7, 8, 9, 1, 2, 3],\n",
" [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])"
]
},
"execution_count": 133,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"getInput(3,3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"header=r\"\"\"\n",
"\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python3",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}