Commit 85d5440b by Valerio

### Solution ex 11 and text last exercise ;)

parent 0583f9b8
 { "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from tenpy.models.lattice import Lattice\n", "from tenpy.models.model import CouplingMPOModel\n", "from tenpy.networks.site import SpinSite\n", "from tenpy.tools.params import get_parameter\n", "from tenpy.algorithms import dmrg\n", "from tenpy.networks.mps import MPS\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import time\n", "import random" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Model Definition" ] }, { "cell_type": "code", "execution_count": 204, "metadata": {}, "outputs": [], "source": [ "#Create a ComplingMPOModel to describe the system.\n", "#The parameters are passed via model_params\n", "class Heisenberg(CouplingMPOModel):\n", "\n", " def __init__(self,model_params):\n", " CouplingMPOModel.__init__(self,model_params)\n", " \n", " def init_lattice(self, model_params):\n", " #Here initialize the typo of lattice considered\n", " lattice = get_parameter(model_params, 'lattice', self.name, False)\n", " return lattice\n", " \n", " def init_terms(self, model_params):\n", " D= get_parameter(model_params, 'D', 0., self.name, True)\n", " J= get_parameter(model_params, 'J', 1., self.name, True)\n", " lam= get_parameter(model_params, 'lambda', 0., self.name, True)\n", " \n", " #Here implement the couplings of the chain\n", " \n", " #D term\n", " self.add_onsite(D, 0, 'Sz Sz') \n", " \n", " #Heisenberg interaction\n", " self.add_coupling(J, 0, 'Sx', 0, 'Sx', 1,) \n", " self.add_coupling(J, 0, 'Sy', 0, 'Sy', 1,)\n", " self.add_coupling(J, 0, 'Sz', 0, 'Sz', 1,)\n", " \n", " #Quadratic Heisenberg term\n", " for i in ['Sx','Sy','Sz']:\n", " for j in ['Sx','Sy','Sz']:\n", " names1=[i,j]\n", " names2=[i,j]\n", " op1=' '.join(names1)\n", " op2=' '.join(names2)\n", " self.add_coupling(lam, 0, op1, 0, op2, 1,)\n", " \n", " #self.add_coupling(lam, 0, 'Cdu', 0, 'Cu', 1,)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Phase diagram for $\\lambda=0$ and varying $D$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define the model " ] }, { "cell_type": "code", "execution_count": 175, "metadata": {}, "outputs": [], "source": [ "L=2 #Chain length (2 for the iMPS)\n", "J=1 #Anitferromagnetic interaction\n", "lam=0 #Quadratic term\n", "Dmin=-1\n", "Dmax=2\n", "points=30\n", "d=np.linspace(Dmin,Dmax,points,endpoint=True) #Values considered for D\n", "\n", "#Definition of the lattice model\n", "site=SpinSite(S=1, conserve=None)\n", "lat=Lattice([L],[site],order='default',bc='periodic',bc_MPS='infinite') #We choose an infinite MPS " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Perform iDMRG" ] }, { "cell_type": "code", "execution_count": 176, "metadata": {}, "outputs": [], "source": [ "entEnt=[]\n", "entSp=[]\n", "stagMag=[]\n", "for D in d:\n", " \n", " #Define the paramters of the model\n", " model_params={\n", " 'verbose':0,\n", " 'J':J,\n", " 'D':D,\n", " 'lambda':lam, \n", " 'lattice':lat \n", " }\n", "\n", " #Create the model\n", " chain=Heisenberg(model_params)\n", "\n", " #Define the paramters for the DMRG\n", " dmrg_paramsGs = {\n", " 'mixer': False,\n", " 'trunc_params': {\n", " 'chi_max': 20, #Maximum bond dimension\n", " 'svd_min': 1.e-12\n", " },\n", " 'max_E_err': 1.e-12,\n", " 'verbose': 0\n", " }\n", " \n", " #Initialize the MPS with an arbitrary product state\n", " product_state=['up',0]\n", " psiGs=MPS.from_product_state(chain.lat.mps_sites(),product_state,bc=chain.lat.bc_MPS)\n", " \n", " #Perform iDMRG\n", " info=dmrg.run(psiGs, chain, dmrg_paramsGs)\n", " \n", " mag=psiGs.expectation_value('Sz') #Measure Sz component at each site\n", " stagMag.append(abs(mag[0]-mag[1])/2) #Compute staggered magnetization\n", " \n", " spectrum=psiGs.entanglement_spectrum()\n", " entSp.append(spectrum[0])\n", " \n", " entropy=psiGs.entanglement_entropy() #Measure entanglement entropy\n", " entEnt.append(entropy[0])\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Study staggered magnetization" ] }, { "cell_type": "code", "execution_count": 177, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-1, 2)" ] }, "execution_count": 177, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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/8it997Lz373O6761a/YdpttmLj//nz0Qx9iwvvfT88ePbJ8K5IkSVLZlLVAiohDgYuBOuCqlNL5GzyfB64F+hS3OSuldGc5M3VkpbQU79mjB0cdfDBHHXwwq1av5u6//IVb77uPX913HzdOn07XLl341/e+l499+MMc/oEP0K9Pn3ZKL0mSJJVf2U6xi4g6YBowAdgF+FRE7LLBZt8Abk4p7QkcDVxWrjzadF27dOGw/ffnym98g4XTp/OHK67gix//OE889xzHT5nCoEMO4aAvfYlpN9/Mgpdffsdrb2hoYMTEiXQaP54REydyQ0NDRu9CkiRJKl05Z5D2AWanlOYARMRNwBHAM822SUCv4uPewD/LmEdboK6ujgP22osD9tqL73/lKzz297/zy3vu4Zf33sspF1zAKRdcwHt3242PHngg9fX1nPOjH/HmypWA91ySJElS9ShngTQUmNdseT7w3g22mQz8NiK+DGwDHNzSjiLiROBEgPzAgVs9qDZNRLD3zjuz9847M3XSJJ59/nluvfdebr3vPs669NIWX+M9lyRJklQNsu5i9yngJymlYcBhwPUR8a5MKaUrUkrjUkrjBvTu3e4h1badR47k65/7HI9cdx0v3HFHq9u9uGhRO6aSJEmSNl05C6QFQK7Z8rDiuuZOAG4GSCk9DHQD+pcxk8ps+JAhDB88uMXnunbuzH0zZrR4w1pJkiSpEpSzQHoEKETEyIjoQmMThts32OZF4CCAiNiZxgLplTJmUjto6Z5Lnevr6dy5Mx/64hd5/+c+x2333cf69eszSihJkiS1rGwFUkppLXAKMB14lsZudU9HxHkR8ZHiZqcDX4iIvwI3Asclpxeq3jETJnDF2WczfPBgIoLhgwfz43PPZdH06Vx21lksWrKEfz/jDHb75Ce59te/Zs3atVlHliRJkgCIaqtHxo0enWbceGPWMbQF1q5dy89//3vOv/Zanpw1i9ygQZxx7LGccMQRbNO9e9bxyuauhvUMmDA+6xiSVLMaZt3FhAMGZB1DUgUYN3TcoymlcZvz2qybNKgDqq+v51OHHsoTP/0pv/nBDxix/fac+r3vMXziRM678kqWLFuWdURJkiR1UBZIykxEcNj++3P/lVfy4FVXse/uu3Pu5ZeTnziR07//febb9U6SJEntzAJJFWG/sWO54/vf58mbbuKjBx7I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\n", "text/plain": [ "