diff --git a/README.md b/README.md index c7e96c34..c5dcc4ea 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ For a list of DMRG references for methods implemented in ``block2``, see: https: Documentation: https://block2.readthedocs.io/en/latest/ -Tutorial (python interface): https://block2.readthedocs.io/en/latest/tutorial/hubbard.html +Tutorial (python interface): https://block2.readthedocs.io/en/latest/tutorial/qc-hamiltonians.html Source code: https://github.com/block-hczhai/block2-preview diff --git a/docs/source/index.rst b/docs/source/index.rst index 566cb364..923a0cb9 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -132,6 +132,7 @@ Features tutorial/qc-hamiltonians tutorial/energy-extrapolation tutorial/custom-hamiltonian + tutorial/greens-function tutorial/hubbard tutorial/heisenberg diff --git a/docs/source/tutorial/custom-hamiltonian.ipynb b/docs/source/tutorial/custom-hamiltonian.ipynb new file mode 100644 index 00000000..89fa5ed3 --- /dev/null +++ b/docs/source/tutorial/custom-hamiltonian.ipynb @@ -0,0 +1,270 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Custom Hamiltonian\n", + "\n", + "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/block-hczhai/block2-preview/blob/master/docs/source/tutorial/custom-hamiltonian.ipynb)" + ], + "metadata": { + "id": "gEis3BAAaJLD" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install block2==0.5.2rc13 -qq --progress-bar off --extra-index-url=https://block-hczhai.github.io/block2-preview/pypi/\n", + "!pip install pyscf==2.3.0 -qq --progress-bar off" + ], + "metadata": { + "id": "2FXmEVkEaJxX" + }, + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "\n", + "In this tutorial, we provide an example python script for performing DMRG using custom Hamiltonians, where the operators and states at local Hilbert space at every site can be redefined. It is also possible to use different local Hilbert space for different sites. New letters can be introduced for representing new operators.\n", + "\n", + "Note the following examples is only supposed to work in the ``SZ`` mode.\n", + "\n", + "## The Hubbard Model\n", + "\n", + "In the following example, we implement a custom Hamiltonian for the Hubbard model. In the standard implementation, the on-site term was represented as ``cdCD``. Here we instead introduce a single letter ``N`` for the ``cdCD`` term. For each letter in ``cdCDN`` (representing elementary operators), we define its matrix representation in the local basis in ``site_ops``. The quantum number and number of states in each quantum number at each site (which defines the local Hilbert space) is set in ``site_basis``.\n", + "\n" + ], + "metadata": { + "id": "aAO2KvxWaSjo" + } + }, + { + "cell_type": "code", + "source": [ + "from pyblock2.driver.core import DMRGDriver, SymmetryTypes, MPOAlgorithmTypes\n", + "import numpy as np\n", + "\n", + "L = 8\n", + "U = 2\n", + "N_ELEC = 8\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ, n_threads=4)\n", + "driver.initialize_system(n_sites=L, n_elec=N_ELEC, spin=0)\n", + "\n", + "# [Part A] Set states and matrix representation of operators in local Hilbert space\n", + "site_basis, site_ops = [], []\n", + "Q = driver.bw.SX # quantum number wrapper (n_elec, 2 * spin, point group irrep)\n", + "\n", + "for k in range(L):\n", + " basis = [(Q(0, 0, 0), 1), (Q(1, 1, 0), 1), (Q(1, -1, 0), 1), (Q(2, 0, 0), 1)] # [0ab2]\n", + " ops = {\n", + " \"\": np.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]), # identity\n", + " \"c\": np.array([[0, 0, 0, 0], [1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 1, 0]]), # alpha+\n", + " \"d\": np.array([[0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 0]]), # alpha\n", + " \"C\": np.array([[0, 0, 0, 0], [0, 0, 0, 0], [1, 0, 0, 0], [0, -1, 0, 0]]), # beta+\n", + " \"D\": np.array([[0, 0, 1, 0], [0, 0, 0, -1], [0, 0, 0, 0], [0, 0, 0, 0]]), # beta\n", + " \"N\": np.array([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1]]), # cdCD\n", + " }\n", + " site_basis.append(basis)\n", + " site_ops.append(ops)\n", + "\n", + "# [Part B] Set Hamiltonian terms\n", + "driver.ghamil = driver.get_custom_hamiltonian(site_basis, site_ops)\n", + "b = driver.expr_builder()\n", + "\n", + "b.add_term(\"cd\", np.array([[i, i + 1, i + 1, i] for i in range(L - 1)]).ravel(), -1)\n", + "b.add_term(\"CD\", np.array([[i, i + 1, i + 1, i] for i in range(L - 1)]).ravel(), -1)\n", + "b.add_term(\"N\", np.array([i for i in range(L)]), U)\n", + "\n", + "# [Part C] Perform DMRG\n", + "mpo = driver.get_mpo(b.finalize(adjust_order=True), algo_type=MPOAlgorithmTypes.FastBipartite)\n", + "mps = driver.get_random_mps(tag=\"KET\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, mps, n_sweeps=10, bond_dims=[250] * 4 + [500] * 4,\n", + " noises=[1e-4] * 4 + [1e-5] * 4 + [0], thrds=[1e-10] * 8, dav_max_iter=30, iprint=1)\n", + "print(\"DMRG energy = %20.15f\" % energy)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XuXZpeFTb5e2", + "outputId": "878cdd30-3bb5-4b47-d7de-6d1ae8bfdef3" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.342 | E = -6.2256341447 | DW = 2.65e-16\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.456 | E = -6.2256341447 | DE = -1.07e-14 | DW = 4.93e-16\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.585 | E = -6.2256341447 | DE = -1.78e-15 | DW = 9.81e-17\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.694 | E = -6.2256341447 | DE = -3.55e-15 | DW = 1.20e-16\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.873 | E = -6.2256341447 | DE = -8.88e-16 | DW = 4.50e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.028 | E = -6.2256341447 | DE = -2.66e-15 | DW = 4.87e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.178 | E = -6.2256341447 | DE = 5.33e-15 | DW = 3.86e-20\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.320 | E = -6.2256341447 | DE = 1.78e-15 | DW = 4.94e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 1.472 | E = -6.2256341447 | DE = 0.00e+00 | DW = 2.86e-20\n", + "\n", + "DMRG energy = -6.225634144657919\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## The Hubbard-Holstein Model\n", + "\n", + "The above script can be easily extended to treat phonons." + ], + "metadata": { + "id": "AoKOfFPEbrHw" + } + }, + { + "cell_type": "code", + "source": [ + "from pyblock2.driver.core import DMRGDriver, SymmetryTypes, MPOAlgorithmTypes\n", + "import numpy as np\n", + "\n", + "N_SITES_ELEC, N_SITES_PH, N_ELEC = 4, 4, 4\n", + "N_PH, U, OMEGA, G = 11, 2, 0.25, 0.5\n", + "L = N_SITES_ELEC + N_SITES_PH\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ, n_threads=4)\n", + "driver.initialize_system(n_sites=L, n_elec=N_ELEC, spin=0)\n", + "\n", + "# [Part A] Set states and matrix representation of operators in local Hilbert space\n", + "site_basis, site_ops = [], []\n", + "Q = driver.bw.SX # quantum number wrapper (n_elec, 2 * spin, point group irrep)\n", + "\n", + "for k in range(L):\n", + " if k < N_SITES_ELEC:\n", + " # electron part\n", + " basis = [(Q(0, 0, 0), 1), (Q(1, 1, 0), 1), (Q(1, -1, 0), 1), (Q(2, 0, 0), 1)] # [0ab2]\n", + " ops = {\n", + " \"\": np.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]), # identity\n", + " \"c\": np.array([[0, 0, 0, 0], [1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 1, 0]]), # alpha+\n", + " \"d\": np.array([[0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 0]]), # alpha\n", + " \"C\": np.array([[0, 0, 0, 0], [0, 0, 0, 0], [1, 0, 0, 0], [0, -1, 0, 0]]), # beta+\n", + " \"D\": np.array([[0, 0, 1, 0], [0, 0, 0, -1], [0, 0, 0, 0], [0, 0, 0, 0]]), # beta\n", + " }\n", + " else:\n", + " # phonon part\n", + " basis = [(Q(0, 0, 0), N_PH)]\n", + " ops = {\n", + " \"\": np.identity(N_PH), # identity\n", + " \"E\": np.diag(np.sqrt(np.arange(1, N_PH)), k=-1), # ph+\n", + " \"F\": np.diag(np.sqrt(np.arange(1, N_PH)), k=1), # ph\n", + " }\n", + " site_basis.append(basis)\n", + " site_ops.append(ops)\n", + "\n", + "# [Part B] Set Hamiltonian terms in Hubbard-Holstein model\n", + "driver.ghamil = driver.get_custom_hamiltonian(site_basis, site_ops)\n", + "b = driver.expr_builder()\n", + "\n", + "# electron part\n", + "b.add_term(\"cd\", np.array([[i, i + 1, i + 1, i] for i in range(N_SITES_ELEC - 1)]).ravel(), -1)\n", + "b.add_term(\"CD\", np.array([[i, i + 1, i + 1, i] for i in range(N_SITES_ELEC - 1)]).ravel(), -1)\n", + "b.add_term(\"cdCD\", np.array([[i, i, i, i] for i in range(N_SITES_ELEC)]).ravel(), U)\n", + "\n", + "# phonon part\n", + "b.add_term(\"EF\", np.array([[i + N_SITES_ELEC, ] * 2 for i in range(N_SITES_PH)]).ravel(), OMEGA)\n", + "\n", + "# interaction part\n", + "b.add_term(\"cdE\", np.array([[i, i, i + N_SITES_ELEC] for i in range(N_SITES_ELEC)]).ravel(), G)\n", + "b.add_term(\"cdF\", np.array([[i, i, i + N_SITES_ELEC] for i in range(N_SITES_ELEC)]).ravel(), G)\n", + "b.add_term(\"CDE\", np.array([[i, i, i + N_SITES_ELEC] for i in range(N_SITES_ELEC)]).ravel(), G)\n", + "b.add_term(\"CDF\", np.array([[i, i, i + N_SITES_ELEC] for i in range(N_SITES_ELEC)]).ravel(), G)\n", + "\n", + "# [Part C] Perform DMRG\n", + "mpo = driver.get_mpo(b.finalize(adjust_order=True), algo_type=MPOAlgorithmTypes.FastBipartite)\n", + "mps = driver.get_random_mps(tag=\"KET\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, mps, n_sweeps=10, bond_dims=[250] * 4 + [500] * 4,\n", + " noises=[1e-4] * 4 + [1e-5] * 4 + [0], thrds=[1e-10] * 8, dav_max_iter=30, iprint=1)\n", + "print(\"DMRG energy = %20.15f\" % energy)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JqphdawZboo9", + "outputId": "919844ac-eed3-44f2-af2b-dd6ac5d5ee55" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 108.945 | E = -6.9568929229 | DW = 3.62e-09\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 142.030 | E = -6.9568932112 | DE = -2.88e-07 | DW = 3.07e-19\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 154.346 | E = -6.9568932112 | DE = -1.78e-15 | DW = 1.38e-19\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 165.954 | E = -6.9568932112 | DE = -1.78e-15 | DW = 6.71e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 176.280 | E = -6.9568932112 | DE = -8.88e-16 | DW = 7.26e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 186.605 | E = -6.9568932112 | DE = 2.66e-15 | DW = 6.17e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 196.209 | E = -6.9568932112 | DE = -1.78e-15 | DW = 9.34e-20\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 205.734 | E = -6.9568932112 | DE = 2.66e-15 | DW = 6.36e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 215.378 | E = -6.9568932112 | DE = -9.77e-15 | DW = 7.87e-20\n", + "\n", + "DMRG energy = -6.956893211180049\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/docs/source/tutorial/custom-hamiltonian.rst b/docs/source/tutorial/custom-hamiltonian.rst deleted file mode 100644 index c986c980..00000000 --- a/docs/source/tutorial/custom-hamiltonian.rst +++ /dev/null @@ -1,231 +0,0 @@ - -.. highlight:: bash - -Custom Hamiltonian -================== - -In this tutorial, we provide an example python script for performing DMRG using custom Hamiltonians, -where the operators and states at local Hilbert space at every site can be redefined. -It is also possible to use different local Hilbert space for different sites. -New letters can be introduced for representing new operators. - -.. highlight:: python3 - -In the following example, we implement a custom Hamiltonian for the Hubbard model. -In the standard implementation, the on-site term was represented as ``cdCD``. -Here we instead introduce a single letter ``N`` for the ``cdCD`` term. -The matrix representation of ``N`` is given in the ``init_site_ops`` method. :: - - from pyblock2.driver.core import DMRGDriver, SymmetryTypes - import numpy as np - from itertools import accumulate - - L = 8 - U = 2 - - driver = DMRGDriver(scratch="./tmp", symm_type=SymmetryTypes.SZ, n_threads=4) - driver.initialize_system(n_sites=L, n_elec=L, spin=0, orb_sym=None) - - GH = driver.bw.bs.GeneralHamiltonian - - class HubbardHamiltonian(GH): - - def __init__(self, vacuum, n_sites, orb_sym): - GH.__init__(self) - self.opf = driver.bw.bs.OperatorFunctions(driver.bw.brs.CG()) - self.vacuum = vacuum - self.n_sites = n_sites - self.orb_sym = orb_sym - self.basis = driver.bw.brs.VectorStateInfo([ - self.get_site_basis(m) for m in range(self.n_sites) - ]) - self.site_op_infos = driver.bw.brs.VectorVectorPLMatInfo([ - driver.bw.brs.VectorPLMatInfo() for _ in range(self.n_sites) - ]) - self.site_norm_ops = driver.bw.bs.VectorMapStrSpMat([ - driver.bw.bs.MapStrSpMat() for _ in range(self.n_sites) - ]) - self.init_site_ops() - - def get_site_basis(self, m): - """Single site states.""" - bz = driver.bw.brs.StateInfo() - bz.allocate(4) - bz.quanta[0] = driver.bw.SX(0, 0, 0) - bz.quanta[1] = driver.bw.SX(1, 1, self.orb_sym[m]) - bz.quanta[2] = driver.bw.SX(1, -1, self.orb_sym[m]) - bz.quanta[3] = driver.bw.SX(2, 0, 0) - bz.n_states[0] = bz.n_states[1] = bz.n_states[2] = bz.n_states[3] = 1 - bz.sort_states() - return bz - - def init_site_ops(self): - """Initialize operator quantum numbers at each site (site_op_infos) - and primitive (single character) site operators (site_norm_ops).""" - i_alloc = driver.bw.b.IntVectorAllocator() - d_alloc = driver.bw.b.DoubleVectorAllocator() - # site op infos - max_n, max_s = 10, 10 - max_n_odd, max_s_odd = max_n | 1, max_s | 1 - max_n_even, max_s_even = max_n_odd ^ 1, max_s_odd ^ 1 - for m in range(self.n_sites): - qs = {self.vacuum} - for n in range(-max_n_odd, max_n_odd + 1, 2): - for s in range(-max_s_odd, max_s_odd + 1, 2): - qs.add(driver.bw.SX(n, s, self.orb_sym[m])) - for n in range(-max_n_even, max_n_even + 1, 2): - for s in range(-max_s_even, max_s_even + 1, 2): - qs.add(driver.bw.SX(n, s, 0)) - for q in sorted(qs): - mat = driver.bw.brs.SparseMatrixInfo(i_alloc) - mat.initialize(self.basis[m], self.basis[m], q, q.is_fermion) - self.site_op_infos[m].append((q, mat)) - - # prim ops - for m in range(self.n_sites): - - # ident - mat = driver.bw.bs.SparseMatrix(d_alloc) - info = self.find_site_op_info(m, driver.bw.SX(0, 0, 0)) - mat.allocate(info) - mat[info.find_state(driver.bw.SX(0, 0, 0))] = np.array([1.0]) - mat[info.find_state(driver.bw.SX(1, 1, self.orb_sym[m]))] = np.array([1.0]) - mat[info.find_state(driver.bw.SX(1, -1, self.orb_sym[m]))] = np.array([1.0]) - mat[info.find_state(driver.bw.SX(2, 0, 0))] = np.array([1.0]) - self.site_norm_ops[m][""] = mat - - # C alpha - mat = driver.bw.bs.SparseMatrix(d_alloc) - info = self.find_site_op_info(m, driver.bw.SX(1, 1, self.orb_sym[m])) - mat.allocate(info) - mat[info.find_state(driver.bw.SX(0, 0, 0))] = np.array([1.0]) - mat[info.find_state(driver.bw.SX(1, -1, self.orb_sym[m]))] = np.array([1.0]) - self.site_norm_ops[m]["c"] = mat - - # D alpha - mat = driver.bw.bs.SparseMatrix(d_alloc) - info = self.find_site_op_info(m, driver.bw.SX(-1, -1, self.orb_sym[m])) - mat.allocate(info) - mat[info.find_state(driver.bw.SX(1, 1, self.orb_sym[m]))] = np.array([1.0]) - mat[info.find_state(driver.bw.SX(2, 0, 0))] = np.array([1.0]) - self.site_norm_ops[m]["d"] = mat - - # C beta - mat = driver.bw.bs.SparseMatrix(d_alloc) - info = self.find_site_op_info(m, driver.bw.SX(1, -1, self.orb_sym[m])) - mat.allocate(info) - mat[info.find_state(driver.bw.SX(0, 0, 0))] = np.array([1.0]) - mat[info.find_state(driver.bw.SX(1, 1, self.orb_sym[m]))] = np.array([-1.0]) - self.site_norm_ops[m]["C"] = mat - - # D beta - mat = driver.bw.bs.SparseMatrix(d_alloc) - info = self.find_site_op_info(m, driver.bw.SX(-1, 1, self.orb_sym[m])) - mat.allocate(info) - mat[info.find_state(driver.bw.SX(1, -1, self.orb_sym[m]))] = np.array([1.0]) - mat[info.find_state(driver.bw.SX(2, 0, 0))] = np.array([-1.0]) - self.site_norm_ops[m]["D"] = mat - - # Nup * Ndn - mat = driver.bw.bs.SparseMatrix(d_alloc) - info = self.find_site_op_info(m, driver.bw.SX(0, 0, 0)) - mat.allocate(info) - mat[info.find_state(driver.bw.SX(2, 0, 0))] = np.array([1.0]) - self.site_norm_ops[m]["N"] = mat - - def get_site_string_ops(self, m, ops): - """Construct longer site operators from primitive ones.""" - d_alloc = driver.bw.b.DoubleVectorAllocator() - for k in ops: - if k in self.site_norm_ops[m]: - ops[k] = self.site_norm_ops[m][k] - else: - xx = self.site_norm_ops[m][k[0]] - for p in k[1:]: - xp = self.site_norm_ops[m][p] - q = xx.info.delta_quantum + xp.info.delta_quantum - mat = driver.bw.bs.SparseMatrix(d_alloc) - mat.allocate(self.find_site_op_info(m, q)) - self.opf.product(0, xx, xp, mat) - xx = mat - ops[k] = self.site_norm_ops[m][k] = xx - return ops - - def init_string_quanta(self, exprs, term_l, left_vacuum): - """Quantum number for string operators (orbital independent part).""" - qs = { - 'N': driver.bw.SX(0, 0, 0), - 'c': driver.bw.SX(1, 1, 0), - 'C': driver.bw.SX(1, -1, 0), - 'd': driver.bw.SX(-1, -1, 0), - 'D': driver.bw.SX(-1, 1, 0), - } - return driver.bw.VectorVectorSX([driver.bw.VectorSX(list(accumulate( - [qs['N']] + [qs[x] for x in expr], lambda x, y: x + y))) - for expr in exprs - ]) - - def get_string_quanta(self, ref, expr, idxs, k): - """Quantum number for string operators (orbital dependent part).""" - l, r = ref[k], ref[-1] - ref[k] - for j, (ex, ix) in enumerate(zip(expr, idxs)): - ipg = self.orb_sym[ix] - if ex == "N": - pass - elif j < k: - l.pg = l.pg ^ ipg - else: - r.pg = r.pg ^ ipg - return l, r - - def get_string_quantum(self, expr, idxs): - """Total quantum number for a string operator.""" - qs = lambda ix: { - 'N': driver.bw.SX(0, 0, 0), - 'c': driver.bw.SX(1, 1, self.orb_sym[ix]), - 'C': driver.bw.SX(1, -1, self.orb_sym[ix]), - 'd': driver.bw.SX(-1, -1, self.orb_sym[ix]), - 'D': driver.bw.SX(-1, 1, self.orb_sym[ix]), - } - return sum([qs(0)['N']] + [qs(ix)[ex] for ex, ix in zip(expr, idxs)]) - - def deallocate(self): - """Release memory.""" - for ops in self.site_norm_ops: - for p in ops.values(): - p.deallocate() - for infos in self.site_op_infos: - for _, p in infos: - p.deallocate() - for bz in self.basis: - bz.deallocate() - - - driver.ghamil = HubbardHamiltonian(driver.vacuum, driver.n_sites, driver.orb_sym) - - b = driver.expr_builder() - - # make sure the indices in every term are non-descending - for t, ops in zip([-1, 1, -1, 1], ["cd", "dc", "CD", "DC"]): - b.add_term(ops, np.array([[i, i + 1] for i in range(L - 1)]).ravel(), - [t] * (L - 1)) - b.add_term("N", np.array([[i, ] for i in range(L)]).ravel(), [U] * L) - mpo = driver.get_mpo(b.finalize(adjust_order=False), iprint=2) - - def run_dmrg(driver, mpo): - ket = driver.get_random_mps(tag="GS", bond_dim=250, nroots=1) - bond_dims = [250] * 4 + [500] * 4 - noises = [1e-4] * 4 + [1e-5] * 4 + [0] - thrds = [1e-10] * 8 - return driver.dmrg( - mpo, - ket, - n_sweeps=20, - bond_dims=bond_dims, - noises=noises, - thrds=thrds, - iprint=1, - ) - - energies = run_dmrg(driver, mpo) - print('DMRG energy = %20.15f' % energies) diff --git a/docs/source/tutorial/energy-extrapolation.ipynb b/docs/source/tutorial/energy-extrapolation.ipynb index d85553ed..9c46dfcd 100644 --- a/docs/source/tutorial/energy-extrapolation.ipynb +++ b/docs/source/tutorial/energy-extrapolation.ipynb @@ -1,98 +1,57 @@ { + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, "cells": [ { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "gEis3BAAaJLD" - }, "source": [ "# Energy Extrapolation\n", "\n", "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/block-hczhai/block2-preview/blob/master/docs/source/tutorial/energy-extrapolation.ipynb)" - ] + ], + "metadata": { + "id": "gEis3BAAaJLD" + } }, { "cell_type": "code", - "execution_count": 1, + "source": [ + "!pip install block2==0.5.2rc13 -qq --progress-bar off --extra-index-url=https://block-hczhai.github.io/block2-preview/pypi/\n", + "!pip install pyscf==2.3.0 -qq --progress-bar off" + ], "metadata": { "id": "2FXmEVkEaJxX" }, - "outputs": [], - "source": [ - "!pip install block2==0.5.2rc5 -qq --progress-bar off --extra-index-url=https://block-hczhai.github.io/block2-preview/pypi/\n", - "!pip install pyscf==2.1.1 -qq --progress-bar off" - ] + "execution_count": 1, + "outputs": [] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "aAO2KvxWaSjo" - }, "source": [ "## Introduction\n", "\n", "In this tutorial we explain how to do DMRG energy extrapolation and also get an estimate of the error in the extrapolated energy. First we need to do a normal DMRG calculation, and then a DMRG with a reserve schedule, and then we do the energy extrapolation using the data from the reserve schedule. The DMRG energy is extrapolated using a linear fit for discarded weight vs energies for different bond dimensions. The error is estimated as one fifth of the extrapolation distance, as a convention. It is not recommended to use the normal DMRG data for the extrapolation because the energy for each bond dimension may not be fully converged. For the same reason, the energy at the largest bond dimension may also be excluded from the extrapolation.\n", "\n", "First, we prepare the integrals and the MPO and the initial guess for the MPS." - ] + ], + "metadata": { + "id": "aAO2KvxWaSjo" + } }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "XuXZpeFTb5e2", - "outputId": "09f5a1ed-566f-42a8-c7f6-10f38a165a79" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "converged SCF energy = -75.3869023777058\n", - "NCAS = 26 NCASELEC = 8\n", - "integral symmetrize error = 7.237728341514619e-12\n", - "integral cutoff error = 3.0907247248324555e-20\n", - "mpo terms = 28590\n", - "\n", - "Build MPO | Nsites = 26 | Nterms = 28590 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", - " Site = 0 / 26 .. Mmpo = 13 DW = 0.00e+00 NNZ = 13 SPT = 0.0000 Tmvc = 0.002 T = 0.012\n", - " Site = 1 / 26 .. Mmpo = 42 DW = 0.00e+00 NNZ = 69 SPT = 0.8736 Tmvc = 0.003 T = 0.014\n", - " Site = 2 / 26 .. Mmpo = 80 DW = 0.00e+00 NNZ = 201 SPT = 0.9402 Tmvc = 0.005 T = 0.022\n", - " Site = 3 / 26 .. Mmpo = 126 DW = 0.00e+00 NNZ = 271 SPT = 0.9731 Tmvc = 0.005 T = 0.026\n", - " Site = 4 / 26 .. Mmpo = 164 DW = 0.00e+00 NNZ = 497 SPT = 0.9759 Tmvc = 0.006 T = 0.025\n", - " Site = 5 / 26 .. Mmpo = 210 DW = 0.00e+00 NNZ = 681 SPT = 0.9802 Tmvc = 0.009 T = 0.030\n", - " Site = 6 / 26 .. Mmpo = 264 DW = 0.00e+00 NNZ = 831 SPT = 0.9850 Tmvc = 0.009 T = 0.029\n", - " Site = 7 / 26 .. Mmpo = 326 DW = 0.00e+00 NNZ = 1127 SPT = 0.9869 Tmvc = 0.012 T = 0.060\n", - " Site = 8 / 26 .. Mmpo = 396 DW = 0.00e+00 NNZ = 1361 SPT = 0.9895 Tmvc = 0.012 T = 0.055\n", - " Site = 9 / 26 .. Mmpo = 474 DW = 0.00e+00 NNZ = 1565 SPT = 0.9917 Tmvc = 0.012 T = 0.058\n", - " Site = 10 / 26 .. Mmpo = 560 DW = 0.00e+00 NNZ = 1775 SPT = 0.9933 Tmvc = 0.012 T = 0.046\n", - " Site = 11 / 26 .. Mmpo = 650 DW = 0.00e+00 NNZ = 2109 SPT = 0.9942 Tmvc = 0.013 T = 0.066\n", - " Site = 12 / 26 .. Mmpo = 674 DW = 0.00e+00 NNZ = 8581 SPT = 0.9804 Tmvc = 0.019 T = 0.085\n", - " Site = 13 / 26 .. Mmpo = 654 DW = 0.00e+00 NNZ = 4571 SPT = 0.9896 Tmvc = 0.011 T = 0.048\n", - " Site = 14 / 26 .. Mmpo = 560 DW = 0.00e+00 NNZ = 3347 SPT = 0.9909 Tmvc = 0.005 T = 0.036\n", - " Site = 15 / 26 .. Mmpo = 474 DW = 0.00e+00 NNZ = 1523 SPT = 0.9943 Tmvc = 0.004 T = 0.027\n", - " Site = 16 / 26 .. Mmpo = 396 DW = 0.00e+00 NNZ = 1385 SPT = 0.9926 Tmvc = 0.003 T = 0.022\n", - " Site = 17 / 26 .. Mmpo = 326 DW = 0.00e+00 NNZ = 1241 SPT = 0.9904 Tmvc = 0.003 T = 0.017\n", - " Site = 18 / 26 .. Mmpo = 264 DW = 0.00e+00 NNZ = 1061 SPT = 0.9877 Tmvc = 0.002 T = 0.015\n", - " Site = 19 / 26 .. Mmpo = 210 DW = 0.00e+00 NNZ = 903 SPT = 0.9837 Tmvc = 0.002 T = 0.013\n", - " Site = 20 / 26 .. Mmpo = 164 DW = 0.00e+00 NNZ = 499 SPT = 0.9855 Tmvc = 0.001 T = 0.011\n", - " Site = 21 / 26 .. Mmpo = 126 DW = 0.00e+00 NNZ = 421 SPT = 0.9796 Tmvc = 0.001 T = 0.008\n", - " Site = 22 / 26 .. Mmpo = 70 DW = 0.00e+00 NNZ = 321 SPT = 0.9636 Tmvc = 0.000 T = 0.007\n", - " Site = 23 / 26 .. Mmpo = 39 DW = 0.00e+00 NNZ = 153 SPT = 0.9440 Tmvc = 0.000 T = 0.009\n", - " Site = 24 / 26 .. Mmpo = 13 DW = 0.00e+00 NNZ = 67 SPT = 0.8679 Tmvc = 0.000 T = 0.004\n", - " Site = 25 / 26 .. Mmpo = 1 DW = 0.00e+00 NNZ = 13 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", - "Ttotal = 0.746 Tmvc-total = 0.151 MPO bond dimension = 674 MaxDW = 0.00e+00\n", - "NNZ = 34586 SIZE = 3192901 SPT = 0.9892\n", - "\n", - "Rank = 0 Ttotal = 0.888 MPO method = FastBipartite bond dimension = 674 NNZ = 34586 SIZE = 3192901 SPT = 0.9892\n" - ] - } - ], "source": [ "import numpy as np\n", "from pyblock2._pyscf.ao2mo import integrals as itg\n", @@ -109,1748 +68,316 @@ "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2,\n", " stack_mem=4 << 30, n_threads=4)\n", "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", - "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=1)\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", "ket = driver.get_random_mps(tag=\"KET\", bond_dim=250, nroots=1)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XuXZpeFTb5e2", + "outputId": "5c43a1cf-edfc-473c-d479-91621c850990" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "converged SCF energy = -75.3869023777059\n", + "NCAS = 26 NCASELEC = 8\n" + ] + } ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "AoKOfFPEbrHw" - }, "source": [ "## The Normal Schedule\n", "\n", - "First, we do a DMRG with the normal schedule (namely, the bond dimension increses). We first do 20 2-site sweeps, and then 8 1-site sweeps when it is close to convergence, which is cheaper." - ] + "First, we do a DMRG with the normal (forward) schedule (namely, the bond dimension increses). We first do 20 2-site sweeps, and then 8 1-site sweeps when it is close to convergence, which is cheaper.\n", + "\n", + "To prevent optimizing to local minima, it is highly recommended to set the first bond dimension in the forward to be at least 250. If the gap of the system is small or the truncation error is large (for example, for 2D Hubbard model), one may need to do more sweeps for each bond dimension. Sometimes state averaging over multiple states (for example, setting ``nroots=4`` in ``driver.get_random_mps`` above) can help converging the ground state." + ], + "metadata": { + "id": "AoKOfFPEbrHw" + } }, { "cell_type": "code", - "execution_count": 3, + "source": [ + "bond_dims = [250] * 4 + [500] * 4 + [750] * 4 + [1000] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 12 + [0]\n", + "thrds = [1e-8] * 20\n", + "\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=28, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1, twosite_to_onesite=20)\n", + "print('DMRG energy (variational) = %20.15f' % energy)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "JqphdawZboo9", - "outputId": "fd832df5-db03-4954-f384-91cfe6d1ed57" + "outputId": "26dde43a-9f8d-4b7a-81aa-4e1f05c088a4" }, + "execution_count": 3, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "Environment initialization | Nsites = 26 | Center = 0\n", - " INIT-R <-- Site = 23 .. Bmem = 200 B Rmem = 200 B T = 0.00\n", - " INIT-R <-- Site = 22 .. Bmem = 2.47 KB Rmem = 2.47 KB T = 0.00\n", - " INIT-R <-- Site = 21 .. Bmem = 22.6 KB Rmem = 22.6 KB T = 0.01\n", - " INIT-R <-- Site = 20 .. Bmem = 237 KB Rmem = 237 KB T = 0.02\n", - " INIT-R <-- Site = 19 .. Bmem = 3.46 MB Rmem = 1.62 MB T = 0.11\n", - " INIT-R <-- Site = 18 .. Bmem = 25.7 MB Rmem = 1.91 MB T = 0.38\n", - " INIT-R <-- Site = 17 .. Bmem = 31.7 MB Rmem = 2.39 MB T = 0.48\n", - " INIT-R <-- Site = 16 .. Bmem = 40.6 MB Rmem = 3.04 MB T = 0.73\n", - " INIT-R <-- Site = 15 .. Bmem = 51.7 MB Rmem = 3.84 MB T = 0.94\n", - " INIT-R <-- Site = 14 .. Bmem = 66.2 MB Rmem = 4.84 MB T = 1.50\n", - " INIT-R <-- Site = 13 .. Bmem = 83.1 MB Rmem = 6.77 MB T = 2.07\n", - " INIT-R <-- Site = 12 .. Bmem = 116 MB Rmem = 8.38 MB T = 6.14\n", - " INIT-R <-- Site = 11 .. Bmem = 126 MB Rmem = 10.0 MB T = 6.20\n", - " INIT-R <-- Site = 10 .. Bmem = 143 MB Rmem = 9.48 MB T = 14.06\n", - " INIT-R <-- Site = 9 .. Bmem = 122 MB Rmem = 9.15 MB T = 4.83\n", - " INIT-R <-- Site = 8 .. Bmem = 116 MB Rmem = 7.99 MB T = 3.10\n", - " INIT-R <-- Site = 7 .. Bmem = 101 MB Rmem = 7.88 MB T = 2.71\n", - " INIT-R <-- Site = 6 .. Bmem = 97.8 MB Rmem = 6.72 MB T = 2.67\n", - " INIT-R <-- Site = 5 .. Bmem = 82.3 MB Rmem = 6.12 MB T = 2.58\n", - " INIT-R <-- Site = 4 .. Bmem = 73.9 MB Rmem = 5.19 MB T = 4.01\n", - " INIT-R <-- Site = 3 .. Bmem = 61.7 MB Rmem = 4.42 MB T = 2.17\n", - " INIT-R <-- Site = 2 .. Bmem = 52.0 MB Rmem = 3.42 MB T = 1.94\n", - " INIT-R <-- Site = 1 .. Bmem = 32.7 MB Rmem = 2.33 MB T = 1.22\n", - " INIT-R <-- Site = 0 .. Bmem = 18.1 MB Rmem = 1.28 MB T = 0.88\n", - "Time init sweep = 58.944 | MaxBmem = 143 MB | MaxRmem = 9.48 MB\n", - " | Tread = 0.000 | Twrite = 0.376 | Tfpread = 0.000 | Tfpwrite = 0.325 | data = 107 MB | cpsd = 85.7 MB | Tasync = 0.000\n", - "\n", "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 8 E = -73.8474331980 Error = 0.00e+00 FLOPS = 1.13e+06 Tdav = 0.00 T = 0.32\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 6 E = -74.7572678886 Error = 0.00e+00 FLOPS = 1.24e+07 Tdav = 0.00 T = 0.90\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 7 E = -75.4057431921 Error = 0.00e+00 FLOPS = 2.53e+07 Tdav = 0.01 T = 1.10\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 12 E = -75.4933199025 Error = 0.00e+00 FLOPS = 3.02e+07 Tdav = 0.12 T = 2.27\n", - " --> Site = 4- 5 .. Mmps = 250 Ndav = 13 E = -75.5511779853 Error = 1.55e-07 FLOPS = 1.85e+08 Tdav = 0.15 T = 3.18\n", - " --> Site = 5- 6 .. Mmps = 250 Ndav = 11 E = -75.5821441039 Error = 4.05e-07 FLOPS = 4.28e+08 Tdav = 0.12 T = 2.25\n", - " --> Site = 6- 7 .. Mmps = 250 Ndav = 9 E = -75.5915829325 Error = 2.43e-07 FLOPS = 3.66e+08 Tdav = 0.10 T = 2.43\n", - " --> Site = 7- 8 .. Mmps = 250 Ndav = 8 E = -75.6005958131 Error = 2.24e-07 FLOPS = 3.48e+08 Tdav = 0.09 T = 2.51\n", - " --> Site = 8- 9 .. Mmps = 250 Ndav = 7 E = -75.6084163811 Error = 1.89e-07 FLOPS = 1.75e+08 Tdav = 0.16 T = 2.60\n", - " --> Site = 9- 10 .. Mmps = 250 Ndav = 6 E = -75.6139136492 Error = 1.55e-07 FLOPS = 3.21e+08 Tdav = 0.08 T = 3.94\n", - " --> Site = 10- 11 .. Mmps = 250 Ndav = 6 E = -75.6263559050 Error = 1.08e-07 FLOPS = 2.95e+08 Tdav = 0.09 T = 2.58\n", - " --> Site = 11- 12 .. Mmps = 250 Ndav = 7 E = -75.6446170827 Error = 1.08e-07 FLOPS = 1.31e+08 Tdav = 0.27 T = 11.36\n", - " --> Site = 12- 13 .. Mmps = 250 Ndav = 7 E = -75.6622214724 Error = 1.10e-07 FLOPS = 1.23e+08 Tdav = 0.27 T = 8.55\n", - " --> Site = 13- 14 .. Mmps = 250 Ndav = 7 E = -75.6734975685 Error = 8.78e-08 FLOPS = 1.49e+08 Tdav = 0.23 T = 6.63\n", - " --> Site = 14- 15 .. Mmps = 250 Ndav = 6 E = -75.6831150768 Error = 7.50e-08 FLOPS = 1.18e+08 Tdav = 0.21 T = 2.68\n", - " --> Site = 15- 16 .. Mmps = 250 Ndav = 5 E = -75.6858350656 Error = 8.64e-08 FLOPS = 3.06e+08 Tdav = 0.05 T = 1.54\n", - " --> Site = 16- 17 .. Mmps = 250 Ndav = 6 E = -75.6963199628 Error = 2.87e-08 FLOPS = 3.09e+08 Tdav = 0.05 T = 0.78\n", - " --> Site = 17- 18 .. Mmps = 250 Ndav = 5 E = -75.6986756290 Error = 4.66e-08 FLOPS = 2.98e+08 Tdav = 0.03 T = 0.60\n", - " --> Site = 18- 19 .. Mmps = 250 Ndav = 4 E = -75.6993525343 Error = 1.11e-08 FLOPS = 2.68e+08 Tdav = 0.02 T = 0.44\n", - " --> Site = 19- 20 .. Mmps = 250 Ndav = 5 E = -75.7027390374 Error = 1.30e-08 FLOPS = 1.60e+08 Tdav = 0.05 T = 0.36\n", - " --> Site = 20- 21 .. Mmps = 250 Ndav = 4 E = -75.7032889181 Error = 2.64e-09 FLOPS = 1.39e+08 Tdav = 0.03 T = 0.36\n", - " --> Site = 21- 22 .. Mmps = 250 Ndav = 1 E = -75.7032889175 Error = 1.28e-09 FLOPS = 1.47e+08 Tdav = 0.00 T = 0.17\n", - " --> Site = 22- 23 .. Mmps = 198 Ndav = 1 E = -75.7032889174 Error = 7.04e-21 FLOPS = 1.71e+08 Tdav = 0.00 T = 0.10\n", - " --> Site = 23- 24 .. Mmps = 72 Ndav = 1 E = -75.7032889174 Error = 8.95e-21 FLOPS = 2.24e+08 Tdav = 0.00 T = 0.05\n", - " --> Site = 24- 25 .. Mmps = 13 Ndav = 1 E = -75.7032889174 Error = 1.31e-20 FLOPS = 4.13e+07 Tdav = 0.00 T = 0.02\n", - "Time elapsed = 57.987 | E = -75.7032889181 | DW = 4.05e-07\n", - "Time sweep = 57.987 | 395 MFLOP/SWP\n", - " | Dmem = 10.0 MB (0%) | Imem = 42.7 MB (90%) | Hmem = 219 MB | Pmem = 1.13 MB\n", - " | Tread = 0.637 | Twrite = 0.280 | Tfpread = 0.616 | Tfpwrite = 0.275 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 83.5 MB | cpsd = 67.1 MB\n", - " | Trot = 0.508 | Tctr = 0.082 | Tint = 0.015 | Tmid = 0.000 | Tdctr = 0.427 | Tdiag = 0.076 | Tinfo = 0.406\n", - " | Teff = 53.459 | Tprt = 0.395 | Teig = 2.122 | Tblk = 56.402 | Tmve = 1.324 | Tdm = 0.062 | Tsplt = 0.048 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 48.206 | E = -75.6988045936 | DW = 4.92e-07\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7032889174 Error = 0.00e+00 FLOPS = 5.42e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 9 Ndav = 1 E = -75.7032889174 Error = 0.00e+00 FLOPS = 2.11e+08 Tdav = 0.00 T = 0.02\n", - " <-- Site = 22- 23 .. Mmps = 22 Ndav = 1 E = -75.7032889174 Error = 0.00e+00 FLOPS = 2.37e+08 Tdav = 0.00 T = 0.04\n", - " <-- Site = 21- 22 .. Mmps = 43 Ndav = 1 E = -75.7032889174 Error = 0.00e+00 FLOPS = 2.37e+08 Tdav = 0.00 T = 0.08\n", - " <-- Site = 20- 21 .. Mmps = 76 Ndav = 2 E = -75.7032889206 Error = 0.00e+00 FLOPS = 3.03e+08 Tdav = 0.01 T = 0.08\n", - " <-- Site = 19- 20 .. Mmps = 125 Ndav = 3 E = -75.7032895134 Error = 0.00e+00 FLOPS = 2.24e+08 Tdav = 0.02 T = 0.15\n", - " <-- Site = 18- 19 .. Mmps = 188 Ndav = 5 E = -75.7039836935 Error = 0.00e+00 FLOPS = 5.47e+08 Tdav = 0.03 T = 0.21\n", - " <-- Site = 17- 18 .. Mmps = 250 Ndav = 4 E = -75.7040772417 Error = 1.61e-09 FLOPS = 7.54e+08 Tdav = 0.03 T = 0.26\n", - " <-- Site = 16- 17 .. Mmps = 250 Ndav = 4 E = -75.7041078276 Error = 1.91e-08 FLOPS = 9.50e+08 Tdav = 0.05 T = 0.36\n", - " <-- Site = 15- 16 .. Mmps = 250 Ndav = 4 E = -75.7045618933 Error = 4.39e-08 FLOPS = 5.61e+08 Tdav = 0.11 T = 0.55\n", - " <-- Site = 14- 15 .. Mmps = 250 Ndav = 5 E = -75.7047673753 Error = 9.05e-08 FLOPS = 5.80e+08 Tdav = 0.18 T = 1.24\n", - " <-- Site = 13- 14 .. Mmps = 250 Ndav = 5 E = -75.7049954414 Error = 1.41e-07 FLOPS = 7.20e+08 Tdav = 0.19 T = 1.63\n", - " <-- Site = 12- 13 .. Mmps = 250 Ndav = 5 E = -75.7055187255 Error = 2.26e-07 FLOPS = 1.32e+09 Tdav = 0.12 T = 1.84\n", - " <-- Site = 11- 12 .. Mmps = 250 Ndav = 6 E = -75.7062377598 Error = 2.57e-07 FLOPS = 6.93e+08 Tdav = 0.31 T = 1.80\n", - " <-- Site = 10- 11 .. Mmps = 250 Ndav = 6 E = -75.7070962937 Error = 4.62e-07 FLOPS = 9.67e+08 Tdav = 0.22 T = 0.96\n", - " <-- Site = 9- 10 .. Mmps = 250 Ndav = 7 E = -75.7088515103 Error = 6.45e-07 FLOPS = 8.72e+08 Tdav = 0.31 T = 1.00\n", - " <-- Site = 8- 9 .. Mmps = 250 Ndav = 7 E = -75.7104952548 Error = 9.43e-07 FLOPS = 1.11e+09 Tdav = 0.24 T = 1.19\n", - " <-- Site = 7- 8 .. Mmps = 250 Ndav = 7 E = -75.7120703855 Error = 1.54e-06 FLOPS = 1.29e+09 Tdav = 0.21 T = 0.79\n", - " <-- Site = 6- 7 .. Mmps = 250 Ndav = 9 E = -75.7161133542 Error = 5.68e-06 FLOPS = 1.24e+09 Tdav = 0.29 T = 0.80\n", - " <-- Site = 5- 6 .. Mmps = 250 Ndav = 11 E = -75.7212507958 Error = 4.34e-05 FLOPS = 1.34e+09 Tdav = 0.38 T = 0.94\n", - " <-- Site = 4- 5 .. Mmps = 250 Ndav = 14 E = -75.7234552663 Error = 4.39e-05 FLOPS = 5.86e+08 Tdav = 0.50 T = 0.89\n", - " <-- Site = 3- 4 .. Mmps = 250 Ndav = 5 E = -75.7233040406 Error = 2.24e-06 FLOPS = 2.35e+08 Tdav = 0.08 T = 0.44\n", - " <-- Site = 2- 3 .. Mmps = 250 Ndav = 1 E = -75.7233040399 Error = 3.63e-08 FLOPS = 4.18e+07 Tdav = 0.01 T = 0.15\n", - " <-- Site = 1- 2 .. Mmps = 110 Ndav = 1 E = -75.7233040399 Error = 2.11e-20 FLOPS = 2.81e+08 Tdav = 0.00 T = 0.08\n", - " <-- Site = 0- 1 .. Mmps = 16 Ndav = 1 E = -75.7233040399 Error = 8.92e-21 FLOPS = 5.85e+07 Tdav = 0.00 T = 0.02\n", - "Time elapsed = 73.752 | E = -75.7234552663 | DE = -2.02e-02 | DW = 4.39e-05\n", - "Time sweep = 15.765 | 2.76 GFLOP/SWP\n", - " | Dmem = 8.37 MB (1%) | Imem = 1.66 MB (95%) | Hmem = 151 MB | Pmem = 5.03 MB\n", - " | Tread = 0.193 | Twrite = 0.271 | Tfpread = 0.191 | Tfpwrite = 0.266 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 70.3 MB | cpsd = 57.5 MB\n", - " | Trot = 0.572 | Tctr = 0.027 | Tint = 0.016 | Tmid = 0.000 | Tdctr = 0.024 | Tdiag = 0.082 | Tinfo = 0.233\n", - " | Teff = 9.944 | Tprt = 0.880 | Teig = 3.294 | Tblk = 14.364 | Tmve = 1.140 | Tdm = 0.094 | Tsplt = 0.043 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 61.355 | E = -75.7234052111 | DE = -2.46e-02 | DW = 4.32e-05\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7233040399 Error = 0.00e+00 FLOPS = 5.55e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7233040399 Error = 0.00e+00 FLOPS = 2.49e+08 Tdav = 0.00 T = 0.04\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7233040399 Error = 0.00e+00 FLOPS = 1.57e+08 Tdav = 0.00 T = 0.10\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7233040399 Error = 0.00e+00 FLOPS = 1.16e+08 Tdav = 0.03 T = 0.26\n", - " --> Site = 4- 5 .. Mmps = 250 Ndav = 6 E = -75.7234552653 Error = 4.19e-05 FLOPS = 3.63e+08 Tdav = 0.35 T = 0.83\n", - " --> Site = 5- 6 .. Mmps = 250 Ndav = 7 E = -75.7236837786 Error = 6.75e-05 FLOPS = 7.96e+08 Tdav = 0.49 T = 1.35\n", - " --> Site = 6- 7 .. Mmps = 250 Ndav = 6 E = -75.7236343699 Error = 2.35e-05 FLOPS = 9.71e+08 Tdav = 0.38 T = 1.27\n", - " --> Site = 7- 8 .. Mmps = 250 Ndav = 5 E = -75.7238471454 Error = 1.10e-05 FLOPS = 1.61e+09 Tdav = 0.20 T = 1.00\n", - " --> Site = 8- 9 .. Mmps = 250 Ndav = 5 E = -75.7241004000 Error = 7.65e-06 FLOPS = 1.10e+09 Tdav = 0.33 T = 0.97\n", - " --> Site = 9- 10 .. Mmps = 250 Ndav = 5 E = -75.7243407868 Error = 7.98e-06 FLOPS = 1.40e+09 Tdav = 0.28 T = 1.02\n", - " --> Site = 10- 11 .. Mmps = 250 Ndav = 5 E = -75.7245501245 Error = 4.20e-06 FLOPS = 1.81e+09 Tdav = 0.24 T = 1.02\n", - " --> Site = 11- 12 .. Mmps = 250 Ndav = 5 E = -75.7246649288 Error = 2.39e-06 FLOPS = 2.74e+09 Tdav = 0.16 T = 1.92\n", - " --> Site = 12- 13 .. Mmps = 250 Ndav = 5 E = -75.7247766699 Error = 2.07e-06 FLOPS = 2.44e+09 Tdav = 0.16 T = 1.54\n", - " --> Site = 13- 14 .. Mmps = 250 Ndav = 4 E = -75.7248271758 Error = 1.27e-06 FLOPS = 2.22e+09 Tdav = 0.12 T = 0.99\n", - " --> Site = 14- 15 .. Mmps = 250 Ndav = 4 E = -75.7248602671 Error = 9.22e-07 FLOPS = 2.14e+09 Tdav = 0.10 T = 0.69\n", - " --> Site = 15- 16 .. Mmps = 250 Ndav = 3 E = -75.7248760116 Error = 8.91e-07 FLOPS = 1.82e+09 Tdav = 0.06 T = 0.44\n", - " --> Site = 16- 17 .. Mmps = 250 Ndav = 3 E = -75.7248826691 Error = 2.77e-07 FLOPS = 1.82e+09 Tdav = 0.04 T = 0.39\n", - " --> Site = 17- 18 .. Mmps = 250 Ndav = 3 E = -75.7248857066 Error = 2.26e-07 FLOPS = 1.34e+09 Tdav = 0.03 T = 0.30\n", - " --> Site = 18- 19 .. Mmps = 250 Ndav = 3 E = -75.7248862949 Error = 9.03e-08 FLOPS = 4.70e+08 Tdav = 0.04 T = 0.26\n", - " --> Site = 19- 20 .. Mmps = 250 Ndav = 3 E = -75.7248866870 Error = 4.99e-08 FLOPS = 3.09e+08 Tdav = 0.03 T = 0.28\n", - " --> Site = 20- 21 .. Mmps = 250 Ndav = 2 E = -75.7248867396 Error = 1.85e-08 FLOPS = 2.30e+08 Tdav = 0.01 T = 0.21\n", - " --> Site = 21- 22 .. Mmps = 250 Ndav = 2 E = -75.7248867630 Error = 4.44e-09 FLOPS = 1.88e+08 Tdav = 0.01 T = 0.14\n", - " --> Site = 22- 23 .. Mmps = 228 Ndav = 2 E = -75.7248867883 Error = 1.09e-20 FLOPS = 1.60e+08 Tdav = 0.00 T = 0.10\n", - " --> Site = 23- 24 .. Mmps = 81 Ndav = 2 E = -75.7248867914 Error = 2.30e-20 FLOPS = 2.33e+08 Tdav = 0.00 T = 0.06\n", - " --> Site = 24- 25 .. Mmps = 13 Ndav = 1 E = -75.7248867914 Error = 1.10e-20 FLOPS = 1.35e+07 Tdav = 0.00 T = 0.02\n", - "Time elapsed = 89.238 | E = -75.7248867914 | DE = -1.43e-03 | DW = 6.75e-05\n", - "Time sweep = 15.486 | 3.70 GFLOP/SWP\n", - " | Dmem = 6.98 MB (1%) | Imem = 1.66 MB (95%) | Hmem = 143 MB | Pmem = 5.44 MB\n", - " | Tread = 0.328 | Twrite = 0.233 | Tfpread = 0.318 | Tfpwrite = 0.228 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 67.7 MB | cpsd = 54.6 MB\n", - " | Trot = 0.508 | Tctr = 0.044 | Tint = 0.013 | Tmid = 0.000 | Tdctr = 0.173 | Tdiag = 0.132 | Tinfo = 0.619\n", - " | Teff = 9.700 | Tprt = 0.676 | Teig = 3.082 | Tblk = 13.759 | Tmve = 1.439 | Tdm = 0.131 | Tsplt = 0.075 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 74.078 | E = -75.7249238917 | DE = -1.52e-03 | DW = 6.80e-05\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7248867914 Error = 0.00e+00 FLOPS = 3.44e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7248867914 Error = 0.00e+00 FLOPS = 2.14e+08 Tdav = 0.00 T = 0.04\n", - " <-- Site = 22- 23 .. Mmps = 27 Ndav = 1 E = -75.7248867914 Error = 0.00e+00 FLOPS = 1.30e+08 Tdav = 0.00 T = 0.06\n", - " <-- Site = 21- 22 .. Mmps = 54 Ndav = 2 E = -75.7248867946 Error = 0.00e+00 FLOPS = 1.67e+08 Tdav = 0.01 T = 0.12\n", - " <-- Site = 20- 21 .. Mmps = 106 Ndav = 2 E = -75.7248868039 Error = 0.00e+00 FLOPS = 2.27e+08 Tdav = 0.01 T = 0.17\n", - " <-- Site = 19- 20 .. Mmps = 196 Ndav = 2 E = -75.7248868341 Error = 0.00e+00 FLOPS = 2.99e+08 Tdav = 0.02 T = 0.25\n", - " <-- Site = 18- 19 .. Mmps = 250 Ndav = 2 E = -75.7248868801 Error = 2.56e-10 FLOPS = 3.95e+08 Tdav = 0.04 T = 0.42\n", - " <-- Site = 17- 18 .. Mmps = 250 Ndav = 2 E = -75.7248870579 Error = 1.46e-08 FLOPS = 6.94e+08 Tdav = 0.05 T = 0.55\n", - " <-- Site = 16- 17 .. Mmps = 250 Ndav = 2 E = -75.7248871499 Error = 6.26e-08 FLOPS = 9.07e+08 Tdav = 0.06 T = 0.58\n", - " <-- Site = 15- 16 .. Mmps = 250 Ndav = 3 E = -75.7248879524 Error = 9.03e-08 FLOPS = 1.07e+09 Tdav = 0.10 T = 0.72\n", - " <-- Site = 14- 15 .. Mmps = 250 Ndav = 3 E = -75.7248891070 Error = 1.89e-07 FLOPS = 2.08e+09 Tdav = 0.07 T = 0.71\n", - " <-- Site = 13- 14 .. Mmps = 250 Ndav = 3 E = -75.7248913940 Error = 2.99e-07 FLOPS = 2.32e+09 Tdav = 0.09 T = 1.00\n", - " <-- Site = 12- 13 .. Mmps = 250 Ndav = 3 E = -75.7248963863 Error = 5.77e-07 FLOPS = 2.34e+09 Tdav = 0.10 T = 1.48\n", - " <-- Site = 11- 12 .. Mmps = 250 Ndav = 3 E = -75.7249017661 Error = 7.36e-07 FLOPS = 2.54e+09 Tdav = 0.10 T = 1.28\n", - " <-- Site = 10- 11 .. Mmps = 250 Ndav = 4 E = -75.7249117163 Error = 1.78e-06 FLOPS = 2.66e+09 Tdav = 0.12 T = 0.62\n", - " <-- Site = 9- 10 .. Mmps = 250 Ndav = 4 E = -75.7249409915 Error = 4.49e-06 FLOPS = 2.46e+09 Tdav = 0.12 T = 0.54\n", - " <-- Site = 8- 9 .. Mmps = 250 Ndav = 4 E = -75.7249596983 Error = 4.48e-06 FLOPS = 2.40e+09 Tdav = 0.11 T = 0.51\n", - " <-- Site = 7- 8 .. Mmps = 250 Ndav = 4 E = -75.7250012936 Error = 7.09e-06 FLOPS = 2.69e+09 Tdav = 0.09 T = 0.46\n", - " <-- Site = 6- 7 .. Mmps = 250 Ndav = 5 E = -75.7251621620 Error = 1.77e-05 FLOPS = 2.52e+09 Tdav = 0.12 T = 0.45\n", - " <-- Site = 5- 6 .. Mmps = 250 Ndav = 6 E = -75.7254258749 Error = 7.01e-05 FLOPS = 2.57e+09 Tdav = 0.13 T = 0.40\n", - " <-- Site = 4- 5 .. Mmps = 250 Ndav = 8 E = -75.7253597600 Error = 4.77e-05 FLOPS = 1.26e+09 Tdav = 0.13 T = 0.34\n", - " <-- Site = 3- 4 .. Mmps = 250 Ndav = 5 E = -75.7251922660 Error = 2.28e-06 FLOPS = 4.98e+08 Tdav = 0.04 T = 0.17\n", - " <-- Site = 2- 3 .. Mmps = 250 Ndav = 1 E = -75.7251922653 Error = 3.80e-08 FLOPS = 2.84e+08 Tdav = 0.00 T = 0.08\n", - " <-- Site = 1- 2 .. Mmps = 116 Ndav = 1 E = -75.7251922653 Error = 2.22e-20 FLOPS = 4.18e+08 Tdav = 0.00 T = 0.05\n", - " <-- Site = 0- 1 .. Mmps = 16 Ndav = 1 E = -75.7251922653 Error = 1.01e-21 FLOPS = 9.92e+07 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 100.471 | E = -75.7254258749 | DE = -5.39e-04 | DW = 7.01e-05\n", - "Time sweep = 11.233 | 2.79 GFLOP/SWP\n", - " | Dmem = 6.88 MB (2%) | Imem = 1.68 MB (95%) | Hmem = 142 MB | Pmem = 5.43 MB\n", - " | Tread = 0.137 | Twrite = 0.188 | Tfpread = 0.135 | Tfpwrite = 0.182 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 69.6 MB | cpsd = 56.9 MB\n", - " | Trot = 0.412 | Tctr = 0.012 | Tint = 0.005 | Tmid = 0.000 | Tdctr = 0.012 | Tdiag = 0.071 | Tinfo = 0.183\n", - " | Teff = 7.774 | Tprt = 0.717 | Teig = 1.514 | Tblk = 10.212 | Tmve = 0.817 | Tdm = 0.076 | Tsplt = 0.035 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 87.346 | E = -75.7254307257 | DE = -5.07e-04 | DW = 6.87e-05\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7251922653 Error = 0.00e+00 FLOPS = 4.57e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7251922653 Error = 0.00e+00 FLOPS = 3.09e+08 Tdav = 0.00 T = 0.03\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7251922653 Error = 0.00e+00 FLOPS = 2.66e+08 Tdav = 0.00 T = 0.06\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 2 E = -75.7251922707 Error = 0.00e+00 FLOPS = 4.79e+08 Tdav = 0.02 T = 0.12\n", - " --> Site = 4- 5 .. Mmps = 418 Ndav = 7 E = -75.7253597653 Error = 0.00e+00 FLOPS = 1.12e+09 Tdav = 0.13 T = 0.31\n", - " --> Site = 5- 6 .. Mmps = 500 Ndav = 9 E = -75.7257640222 Error = 4.10e-06 FLOPS = 3.62e+09 Tdav = 0.31 T = 0.68\n", - " --> Site = 6- 7 .. Mmps = 500 Ndav = 6 E = -75.7259698953 Error = 1.09e-06 FLOPS = 3.80e+09 Tdav = 0.33 T = 0.93\n", - " --> Site = 7- 8 .. Mmps = 500 Ndav = 5 E = -75.7262152517 Error = 5.64e-07 FLOPS = 2.31e+09 Tdav = 0.52 T = 1.67\n", - " --> Site = 8- 9 .. Mmps = 500 Ndav = 5 E = -75.7264730074 Error = 4.98e-07 FLOPS = 2.99e+09 Tdav = 0.47 T = 1.64\n", - " --> Site = 9- 10 .. Mmps = 500 Ndav = 5 E = -75.7267102196 Error = 4.14e-07 FLOPS = 4.60e+09 Tdav = 0.35 T = 1.33\n", - " --> Site = 10- 11 .. Mmps = 500 Ndav = 5 E = -75.7269383229 Error = 2.75e-07 FLOPS = 4.78e+09 Tdav = 0.38 T = 1.30\n", - " --> Site = 11- 12 .. Mmps = 500 Ndav = 5 E = -75.7271112802 Error = 2.24e-07 FLOPS = 4.63e+09 Tdav = 0.45 T = 2.16\n", - " --> Site = 12- 13 .. Mmps = 500 Ndav = 4 E = -75.7272188705 Error = 1.53e-07 FLOPS = 4.69e+09 Tdav = 0.33 T = 3.10\n", - " --> Site = 13- 14 .. Mmps = 500 Ndav = 4 E = -75.7272939023 Error = 9.09e-08 FLOPS = 4.49e+09 Tdav = 0.30 T = 1.96\n", - " --> Site = 14- 15 .. Mmps = 500 Ndav = 4 E = -75.7273538379 Error = 6.23e-08 FLOPS = 2.00e+09 Tdav = 0.53 T = 2.19\n", - " --> Site = 15- 16 .. Mmps = 500 Ndav = 4 E = -75.7273798807 Error = 5.82e-08 FLOPS = 2.15e+09 Tdav = 0.37 T = 1.67\n", - " --> Site = 16- 17 .. Mmps = 500 Ndav = 4 E = -75.7273961523 Error = 2.21e-08 FLOPS = 3.67e+09 Tdav = 0.17 T = 1.16\n", - " --> Site = 17- 18 .. Mmps = 500 Ndav = 3 E = -75.7274033954 Error = 1.08e-08 FLOPS = 2.92e+09 Tdav = 0.10 T = 0.70\n", - " --> Site = 18- 19 .. Mmps = 500 Ndav = 3 E = -75.7274050057 Error = 4.36e-09 FLOPS = 2.24e+09 Tdav = 0.06 T = 0.53\n", - " --> Site = 19- 20 .. Mmps = 500 Ndav = 3 E = -75.7274052691 Error = 2.40e-09 FLOPS = 1.47e+09 Tdav = 0.04 T = 0.37\n", - " --> Site = 20- 21 .. Mmps = 500 Ndav = 2 E = -75.7274053796 Error = 6.03e-10 FLOPS = 9.35e+08 Tdav = 0.02 T = 0.25\n", - " --> Site = 21- 22 .. Mmps = 500 Ndav = 2 E = -75.7274056556 Error = 1.29e-10 FLOPS = 6.75e+08 Tdav = 0.01 T = 0.19\n", - " --> Site = 22- 23 .. Mmps = 405 Ndav = 2 E = -75.7274057190 Error = 2.73e-21 FLOPS = 7.29e+08 Tdav = 0.00 T = 0.13\n", - " --> Site = 23- 24 .. Mmps = 99 Ndav = 1 E = -75.7274057190 Error = 1.45e-20 FLOPS = 7.40e+08 Tdav = 0.00 T = 0.07\n", - " --> Site = 24- 25 .. Mmps = 13 Ndav = 1 E = -75.7274057190 Error = 7.49e-21 FLOPS = 1.44e+07 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 123.235 | E = -75.7274057190 | DE = -1.98e-03 | DW = 4.10e-06\n", - "Time sweep = 22.764 | 15.5 GFLOP/SWP\n", - " | Dmem = 23.7 MB (1%) | Imem = 2.06 MB (94%) | Hmem = 345 MB | Pmem = 11.2 MB\n", - " | Tread = 0.658 | Twrite = 0.686 | Tfpread = 0.652 | Tfpwrite = 0.680 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 251 MB | cpsd = 201 MB\n", - " | Trot = 1.209 | Tctr = 0.019 | Tint = 0.009 | Tmid = 0.000 | Tdctr = 0.521 | Tdiag = 0.104 | Tinfo = 0.475\n", - " | Teff = 13.692 | Tprt = 1.148 | Teig = 4.912 | Tblk = 20.143 | Tmve = 2.414 | Tdm = 0.178 | Tsplt = 0.105 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 110.212 | E = -75.7273558056 | DE = -1.93e-03 | DW = 3.97e-06\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7274057190 Error = 0.00e+00 FLOPS = 5.97e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7274057190 Error = 0.00e+00 FLOPS = 6.41e+08 Tdav = 0.00 T = 0.04\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7274057190 Error = 0.00e+00 FLOPS = 2.88e+08 Tdav = 0.00 T = 0.09\n", - " <-- Site = 21- 22 .. Mmps = 80 Ndav = 1 E = -75.7274057190 Error = 0.00e+00 FLOPS = 3.63e+08 Tdav = 0.01 T = 0.14\n", - " <-- Site = 20- 21 .. Mmps = 173 Ndav = 2 E = -75.7274057255 Error = 0.00e+00 FLOPS = 8.34e+08 Tdav = 0.02 T = 0.20\n", - " <-- Site = 19- 20 .. Mmps = 333 Ndav = 2 E = -75.7274057451 Error = 0.00e+00 FLOPS = 1.46e+09 Tdav = 0.03 T = 0.33\n", - " <-- Site = 18- 19 .. Mmps = 500 Ndav = 2 E = -75.7274058236 Error = 3.70e-11 FLOPS = 2.26e+09 Tdav = 0.04 T = 0.50\n", - " <-- Site = 17- 18 .. Mmps = 500 Ndav = 3 E = -75.7274067355 Error = 5.97e-10 FLOPS = 3.22e+09 Tdav = 0.11 T = 0.85\n", - " <-- Site = 16- 17 .. Mmps = 500 Ndav = 3 E = -75.7274073462 Error = 3.07e-09 FLOPS = 4.02e+09 Tdav = 0.15 T = 1.02\n", - " <-- Site = 15- 16 .. Mmps = 500 Ndav = 3 E = -75.7274084505 Error = 8.11e-09 FLOPS = 4.83e+09 Tdav = 0.22 T = 1.24\n", - " <-- Site = 14- 15 .. Mmps = 500 Ndav = 3 E = -75.7274097439 Error = 1.88e-08 FLOPS = 5.01e+09 Tdav = 0.29 T = 1.84\n", - " <-- Site = 13- 14 .. Mmps = 500 Ndav = 3 E = -75.7274114998 Error = 2.86e-08 FLOPS = 2.95e+09 Tdav = 0.61 T = 3.93\n", - " <-- Site = 12- 13 .. Mmps = 500 Ndav = 3 E = -75.7274186265 Error = 5.15e-08 FLOPS = 5.43e+09 Tdav = 0.37 T = 4.27\n", - " <-- Site = 11- 12 .. Mmps = 500 Ndav = 4 E = -75.7274285940 Error = 9.81e-08 FLOPS = 5.92e+09 Tdav = 0.50 T = 3.49\n", - " <-- Site = 10- 11 .. Mmps = 500 Ndav = 4 E = -75.7274520439 Error = 3.40e-07 FLOPS = 6.18e+09 Tdav = 0.44 T = 1.72\n", - " <-- Site = 9- 10 .. Mmps = 500 Ndav = 4 E = -75.7274903409 Error = 1.03e-06 FLOPS = 6.34e+09 Tdav = 0.39 T = 1.51\n", - " <-- Site = 8- 9 .. Mmps = 500 Ndav = 4 E = -75.7275406233 Error = 1.63e-06 FLOPS = 3.43e+09 Tdav = 0.66 T = 2.20\n", - " <-- Site = 7- 8 .. Mmps = 500 Ndav = 5 E = -75.7276126923 Error = 2.35e-06 FLOPS = 3.88e+09 Tdav = 0.64 T = 2.09\n", - " <-- Site = 6- 7 .. Mmps = 500 Ndav = 6 E = -75.7277474015 Error = 4.20e-06 FLOPS = 6.19e+09 Tdav = 0.45 T = 1.22\n", - " <-- Site = 5- 6 .. Mmps = 500 Ndav = 9 E = -75.7279116880 Error = 1.59e-05 FLOPS = 5.24e+09 Tdav = 0.54 T = 1.11\n", - " <-- Site = 4- 5 .. Mmps = 500 Ndav = 4 E = -75.7278372937 Error = 1.86e-07 FLOPS = 2.65e+09 Tdav = 0.10 T = 0.46\n", - " <-- Site = 3- 4 .. Mmps = 500 Ndav = 1 E = -75.7278372935 Error = 8.21e-08 FLOPS = 1.02e+09 Tdav = 0.01 T = 0.27\n", - " <-- Site = 2- 3 .. Mmps = 500 Ndav = 1 E = -75.7278372935 Error = 5.16e-10 FLOPS = 8.38e+08 Tdav = 0.00 T = 0.14\n", - " <-- Site = 1- 2 .. Mmps = 118 Ndav = 1 E = -75.7278372935 Error = 1.68e-21 FLOPS = 9.38e+08 Tdav = 0.00 T = 0.10\n", - " <-- Site = 0- 1 .. Mmps = 17 Ndav = 1 E = -75.7278372935 Error = 8.77e-23 FLOPS = 8.90e+07 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 152.209 | E = -75.7279116880 | DE = -5.06e-04 | DW = 1.59e-05\n", - "Time sweep = 28.974 | 24.4 GFLOP/SWP\n", - " | Dmem = 26.9 MB (1%) | Imem = 2.25 MB (95%) | Hmem = 570 MB | Pmem = 20.4 MB\n", - " | Tread = 0.471 | Twrite = 0.681 | Tfpread = 0.469 | Tfpwrite = 0.676 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 265 MB | cpsd = 216 MB\n", - " | Trot = 1.040 | Tctr = 0.006 | Tint = 0.005 | Tmid = 0.000 | Tdctr = 0.011 | Tdiag = 0.106 | Tinfo = 0.261\n", - " | Teff = 18.584 | Tprt = 2.025 | Teig = 5.591 | Tblk = 26.742 | Tmve = 2.036 | Tdm = 0.258 | Tsplt = 0.102 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 142.710 | E = -75.7278860763 | DE = -5.30e-04 | DW = 1.58e-05\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7278372935 Error = 0.00e+00 FLOPS = 5.15e+07 Tdav = 0.00 T = 0.03\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7278372935 Error = 0.00e+00 FLOPS = 9.17e+08 Tdav = 0.00 T = 0.07\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7278372935 Error = 0.00e+00 FLOPS = 7.16e+08 Tdav = 0.00 T = 0.09\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7278372935 Error = 0.00e+00 FLOPS = 6.15e+08 Tdav = 0.02 T = 0.20\n", - " --> Site = 4- 5 .. Mmps = 421 Ndav = 1 E = -75.7278372935 Error = 0.00e+00 FLOPS = 2.25e+09 Tdav = 0.03 T = 0.33\n", - " --> Site = 5- 6 .. Mmps = 500 Ndav = 6 E = -75.7279121807 Error = 1.69e-05 FLOPS = 5.46e+09 Tdav = 0.34 T = 1.01\n", - " --> Site = 6- 7 .. Mmps = 500 Ndav = 5 E = -75.7278631713 Error = 5.60e-06 FLOPS = 6.01e+09 Tdav = 0.38 T = 1.07\n", - " --> Site = 7- 8 .. Mmps = 500 Ndav = 4 E = -75.7278616600 Error = 3.05e-06 FLOPS = 6.06e+09 Tdav = 0.30 T = 1.12\n", - " --> Site = 8- 9 .. Mmps = 500 Ndav = 4 E = -75.7278727617 Error = 2.33e-06 FLOPS = 6.44e+09 Tdav = 0.35 T = 1.31\n", - " --> Site = 9- 10 .. Mmps = 500 Ndav = 4 E = -75.7278816145 Error = 1.99e-06 FLOPS = 6.59e+09 Tdav = 0.38 T = 1.51\n", - " --> Site = 10- 11 .. Mmps = 500 Ndav = 4 E = -75.7278842641 Error = 9.37e-07 FLOPS = 3.65e+09 Tdav = 0.78 T = 3.01\n", - " --> Site = 11- 12 .. Mmps = 500 Ndav = 4 E = -75.7278900775 Error = 5.42e-07 FLOPS = 6.33e+09 Tdav = 0.51 T = 4.34\n", - " --> Site = 12- 13 .. Mmps = 500 Ndav = 3 E = -75.7278936142 Error = 3.53e-07 FLOPS = 6.12e+09 Tdav = 0.38 T = 3.91\n", - " --> Site = 13- 14 .. Mmps = 500 Ndav = 3 E = -75.7278957464 Error = 1.84e-07 FLOPS = 2.16e+09 Tdav = 0.99 T = 3.53\n", - " --> Site = 14- 15 .. Mmps = 500 Ndav = 3 E = -75.7278967416 Error = 1.32e-07 FLOPS = 5.63e+09 Tdav = 0.30 T = 4.09\n", - " --> Site = 15- 16 .. Mmps = 500 Ndav = 3 E = -75.7278971883 Error = 1.08e-07 FLOPS = 5.55e+09 Tdav = 0.23 T = 1.27\n", - " --> Site = 16- 17 .. Mmps = 500 Ndav = 2 E = -75.7278970648 Error = 3.22e-08 FLOPS = 4.51e+09 Tdav = 0.11 T = 1.01\n", - " --> Site = 17- 18 .. Mmps = 500 Ndav = 2 E = -75.7278971008 Error = 1.50e-08 FLOPS = 3.58e+09 Tdav = 0.07 T = 0.82\n", - " --> Site = 18- 19 .. Mmps = 500 Ndav = 2 E = -75.7278971188 Error = 5.96e-09 FLOPS = 2.46e+09 Tdav = 0.04 T = 0.59\n", - " --> Site = 19- 20 .. Mmps = 500 Ndav = 2 E = -75.7278971183 Error = 3.24e-09 FLOPS = 1.41e+09 Tdav = 0.03 T = 0.40\n", - " --> Site = 20- 21 .. Mmps = 500 Ndav = 1 E = -75.7278971176 Error = 7.74e-10 FLOPS = 8.42e+08 Tdav = 0.01 T = 0.24\n", - " --> Site = 21- 22 .. Mmps = 500 Ndav = 1 E = -75.7278971174 Error = 1.56e-10 FLOPS = 6.23e+08 Tdav = 0.01 T = 0.19\n", - " --> Site = 22- 23 .. Mmps = 416 Ndav = 1 E = -75.7278971174 Error = 5.93e-21 FLOPS = 4.70e+08 Tdav = 0.00 T = 0.12\n", - " --> Site = 23- 24 .. Mmps = 101 Ndav = 1 E = -75.7278971174 Error = 6.82e-21 FLOPS = 7.86e+08 Tdav = 0.00 T = 0.06\n", - " --> Site = 24- 25 .. Mmps = 14 Ndav = 1 E = -75.7278971174 Error = 6.49e-21 FLOPS = 1.08e+08 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 182.749 | E = -75.7279121807 | DE = -4.93e-07 | DW = 1.69e-05\n", - "Time sweep = 30.540 | 23.6 GFLOP/SWP\n", - " | Dmem = 26.9 MB (1%) | Imem = 2.29 MB (95%) | Hmem = 578 MB | Pmem = 20.3 MB\n", - " | Tread = 0.975 | Twrite = 0.805 | Tfpread = 0.970 | Tfpwrite = 0.800 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 256 MB | cpsd = 205 MB\n", - " | Trot = 1.329 | Tctr = 0.023 | Tint = 0.018 | Tmid = 0.000 | Tdctr = 0.524 | Tdiag = 0.104 | Tinfo = 0.558\n", - " | Teff = 20.115 | Tprt = 1.479 | Teig = 5.283 | Tblk = 27.572 | Tmve = 2.778 | Tdm = 0.259 | Tsplt = 0.099 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 173.278 | E = -75.7278862359 | DE = -1.60e-07 | DW = 1.67e-05\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7278971174 Error = 0.00e+00 FLOPS = 9.70e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7278971174 Error = 0.00e+00 FLOPS = 6.87e+08 Tdav = 0.00 T = 0.05\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7278971174 Error = 0.00e+00 FLOPS = 6.46e+08 Tdav = 0.00 T = 0.08\n", - " <-- Site = 21- 22 .. Mmps = 80 Ndav = 1 E = -75.7278971174 Error = 0.00e+00 FLOPS = 4.53e+08 Tdav = 0.01 T = 0.14\n", - " <-- Site = 20- 21 .. Mmps = 174 Ndav = 1 E = -75.7278971174 Error = 0.00e+00 FLOPS = 8.83e+08 Tdav = 0.01 T = 0.19\n", - " <-- Site = 19- 20 .. Mmps = 335 Ndav = 1 E = -75.7278971174 Error = 0.00e+00 FLOPS = 1.41e+09 Tdav = 0.02 T = 0.32\n", - " <-- Site = 18- 19 .. Mmps = 500 Ndav = 2 E = -75.7278971203 Error = 4.72e-11 FLOPS = 2.38e+09 Tdav = 0.05 T = 0.51\n", - " <-- Site = 17- 18 .. Mmps = 500 Ndav = 2 E = -75.7278971332 Error = 6.95e-10 FLOPS = 3.39e+09 Tdav = 0.08 T = 0.81\n", - " <-- Site = 16- 17 .. Mmps = 500 Ndav = 2 E = -75.7278971785 Error = 3.41e-09 FLOPS = 4.34e+09 Tdav = 0.11 T = 0.96\n", - " <-- Site = 15- 16 .. Mmps = 500 Ndav = 3 E = -75.7278974506 Error = 1.20e-08 FLOPS = 5.21e+09 Tdav = 0.24 T = 1.34\n", - " <-- Site = 14- 15 .. Mmps = 500 Ndav = 3 E = -75.7278977123 Error = 2.38e-08 FLOPS = 3.06e+09 Tdav = 0.54 T = 3.22\n", - " <-- Site = 13- 14 .. Mmps = 500 Ndav = 3 E = -75.7278981071 Error = 3.82e-08 FLOPS = 5.92e+09 Tdav = 0.36 T = 2.87\n", - " <-- Site = 12- 13 .. Mmps = 500 Ndav = 3 E = -75.7278989956 Error = 9.10e-08 FLOPS = 5.97e+09 Tdav = 0.39 T = 3.89\n", - " <-- Site = 11- 12 .. Mmps = 500 Ndav = 3 E = -75.7278999746 Error = 1.56e-07 FLOPS = 5.77e+09 Tdav = 0.42 T = 3.48\n", - " <-- Site = 10- 11 .. Mmps = 500 Ndav = 3 E = -75.7279025869 Error = 4.88e-07 FLOPS = 3.26e+09 Tdav = 0.65 T = 2.65\n", - " <-- Site = 9- 10 .. Mmps = 500 Ndav = 4 E = -75.7279096995 Error = 1.41e-06 FLOPS = 5.29e+09 Tdav = 0.48 T = 2.16\n", - " <-- Site = 8- 9 .. Mmps = 500 Ndav = 4 E = -75.7279129757 Error = 1.82e-06 FLOPS = 6.20e+09 Tdav = 0.36 T = 1.39\n", - " <-- Site = 7- 8 .. Mmps = 500 Ndav = 4 E = -75.7279199022 Error = 2.48e-06 FLOPS = 6.04e+09 Tdav = 0.31 T = 1.16\n", - " <-- Site = 6- 7 .. Mmps = 500 Ndav = 5 E = -75.7279436991 Error = 5.05e-06 FLOPS = 6.34e+09 Tdav = 0.37 T = 1.15\n", - " <-- Site = 5- 6 .. Mmps = 500 Ndav = 6 E = -75.7280001150 Error = 1.66e-05 FLOPS = 5.12e+09 Tdav = 0.37 T = 0.95\n", - " <-- Site = 4- 5 .. Mmps = 500 Ndav = 4 E = -75.7279221795 Error = 1.87e-07 FLOPS = 2.51e+09 Tdav = 0.10 T = 0.46\n", - " <-- Site = 3- 4 .. Mmps = 500 Ndav = 1 E = -75.7279221793 Error = 8.18e-08 FLOPS = 1.00e+09 Tdav = 0.01 T = 0.26\n", - " <-- Site = 2- 3 .. Mmps = 500 Ndav = 1 E = -75.7279221793 Error = 5.12e-10 FLOPS = 7.65e+08 Tdav = 0.00 T = 0.15\n", - " <-- Site = 1- 2 .. Mmps = 116 Ndav = 1 E = -75.7279221793 Error = 7.24e-21 FLOPS = 7.81e+08 Tdav = 0.00 T = 0.09\n", - " <-- Site = 0- 1 .. Mmps = 18 Ndav = 1 E = -75.7279221793 Error = 9.39e-23 FLOPS = 8.13e+07 Tdav = 0.00 T = 0.02\n", - "Time elapsed = 211.229 | E = -75.7280001150 | DE = -8.79e-05 | DW = 1.66e-05\n", - "Time sweep = 28.480 | 22.3 GFLOP/SWP\n", - " | Dmem = 26.8 MB (1%) | Imem = 2.28 MB (95%) | Hmem = 577 MB | Pmem = 20.4 MB\n", - " | Tread = 0.489 | Twrite = 0.735 | Tfpread = 0.487 | Tfpwrite = 0.730 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 264 MB | cpsd = 214 MB\n", - " | Trot = 1.034 | Tctr = 0.007 | Tint = 0.007 | Tmid = 0.000 | Tdctr = 0.011 | Tdiag = 0.109 | Tinfo = 0.262\n", - " | Teff = 18.731 | Tprt = 1.994 | Teig = 4.885 | Tblk = 26.205 | Tmve = 2.094 | Tdm = 0.272 | Tsplt = 0.106 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 203.646 | E = -75.7279905032 | DE = -1.04e-04 | DW = 1.65e-05\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 750 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7279221793 Error = 0.00e+00 FLOPS = 4.43e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7279221793 Error = 0.00e+00 FLOPS = 7.05e+08 Tdav = 0.00 T = 0.07\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7279221793 Error = 0.00e+00 FLOPS = 7.47e+08 Tdav = 0.00 T = 0.09\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7279221793 Error = 0.00e+00 FLOPS = 9.29e+08 Tdav = 0.01 T = 0.21\n", - " --> Site = 4- 5 .. Mmps = 421 Ndav = 1 E = -75.7279221793 Error = 0.00e+00 FLOPS = 1.94e+09 Tdav = 0.03 T = 0.35\n", - " --> Site = 5- 6 .. Mmps = 750 Ndav = 6 E = -75.7280001172 Error = 1.37e-06 FLOPS = 5.23e+09 Tdav = 0.36 T = 0.88\n", - " --> Site = 6- 7 .. Mmps = 750 Ndav = 5 E = -75.7280391170 Error = 1.39e-06 FLOPS = 7.41e+09 Tdav = 0.62 T = 1.61\n", - " --> Site = 7- 8 .. Mmps = 750 Ndav = 5 E = -75.7280836346 Error = 7.54e-07 FLOPS = 3.86e+09 Tdav = 1.32 T = 2.96\n", - " --> Site = 8- 9 .. Mmps = 750 Ndav = 4 E = -75.7281266556 Error = 6.05e-07 FLOPS = 7.83e+09 Tdav = 0.62 T = 2.63\n", - " --> Site = 9- 10 .. Mmps = 750 Ndav = 4 E = -75.7281640899 Error = 5.36e-07 FLOPS = 7.60e+09 Tdav = 0.73 T = 2.38\n", - " --> Site = 10- 11 .. Mmps = 750 Ndav = 4 E = -75.7281900249 Error = 3.58e-07 FLOPS = 7.42e+09 Tdav = 0.84 T = 2.80\n", - " --> Site = 11- 12 .. Mmps = 750 Ndav = 4 E = -75.7282062204 Error = 1.95e-07 FLOPS = 4.64e+09 Tdav = 1.52 T = 5.46\n", - " --> Site = 12- 13 .. Mmps = 750 Ndav = 3 E = -75.7282133385 Error = 1.36e-07 FLOPS = 7.19e+09 Tdav = 0.71 T = 7.01\n", - " --> Site = 13- 14 .. Mmps = 750 Ndav = 3 E = -75.7282169216 Error = 6.88e-08 FLOPS = 6.76e+09 Tdav = 0.66 T = 4.30\n", - " --> Site = 14- 15 .. Mmps = 750 Ndav = 3 E = -75.7282186795 Error = 5.18e-08 FLOPS = 3.51e+09 Tdav = 0.97 T = 4.26\n", - " --> Site = 15- 16 .. Mmps = 750 Ndav = 3 E = -75.7282195707 Error = 4.35e-08 FLOPS = 6.42e+09 Tdav = 0.39 T = 2.23\n", - " --> Site = 16- 17 .. Mmps = 750 Ndav = 3 E = -75.7282198676 Error = 1.35e-08 FLOPS = 5.68e+09 Tdav = 0.26 T = 1.63\n", - " --> Site = 17- 18 .. Mmps = 750 Ndav = 2 E = -75.7282199673 Error = 7.31e-09 FLOPS = 4.74e+09 Tdav = 0.12 T = 1.16\n", - " --> Site = 18- 19 .. Mmps = 750 Ndav = 2 E = -75.7282199749 Error = 2.89e-09 FLOPS = 3.17e+09 Tdav = 0.07 T = 0.85\n", - " --> Site = 19- 20 .. Mmps = 750 Ndav = 2 E = -75.7282199756 Error = 1.49e-09 FLOPS = 2.20e+09 Tdav = 0.04 T = 0.67\n", - " --> Site = 20- 21 .. Mmps = 750 Ndav = 2 E = -75.7282199759 Error = 3.05e-10 FLOPS = 1.41e+09 Tdav = 0.02 T = 0.42\n", - " --> Site = 21- 22 .. Mmps = 750 Ndav = 2 E = -75.7282199844 Error = 4.12e-11 FLOPS = 9.97e+08 Tdav = 0.02 T = 0.32\n", - " --> Site = 22- 23 .. Mmps = 477 Ndav = 1 E = -75.7282199844 Error = 2.46e-21 FLOPS = 8.37e+08 Tdav = 0.00 T = 0.20\n", - " --> Site = 23- 24 .. Mmps = 100 Ndav = 1 E = -75.7282199844 Error = 1.54e-20 FLOPS = 8.37e+08 Tdav = 0.00 T = 0.09\n", - " --> Site = 24- 25 .. Mmps = 13 Ndav = 1 E = -75.7282199844 Error = 9.16e-21 FLOPS = 8.62e+07 Tdav = 0.00 T = 0.02\n", - "Time elapsed = 254.056 | E = -75.7282199844 | DE = -2.20e-04 | DW = 1.39e-06\n", - "Time sweep = 42.827 | 49.6 GFLOP/SWP\n", - " | Dmem = 54.1 MB (1%) | Imem = 2.34 MB (95%) | Hmem = 905 MB | Pmem = 31.3 MB\n", - " | Tread = 1.491 | Twrite = 1.343 | Tfpread = 1.485 | Tfpwrite = 1.338 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 545 MB | cpsd = 436 MB\n", - " | Trot = 2.178 | Tctr = 0.023 | Tint = 0.007 | Tmid = 0.000 | Tdctr = 1.000 | Tdiag = 0.139 | Tinfo = 0.542\n", - " | Teff = 25.313 | Tprt = 2.758 | Teig = 9.327 | Tblk = 38.474 | Tmve = 4.140 | Tdm = 0.433 | Tsplt = 0.191 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 249.619 | E = -75.7282187494 | DE = -2.28e-04 | DW = 1.40e-06\n", "\n", "Sweep = 9 | Direction = backward | Bond dimension = 750 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7282199844 Error = 0.00e+00 FLOPS = 8.21e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7282199844 Error = 0.00e+00 FLOPS = 9.55e+08 Tdav = 0.00 T = 0.05\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7282199844 Error = 0.00e+00 FLOPS = 8.90e+08 Tdav = 0.00 T = 0.12\n", - " <-- Site = 21- 22 .. Mmps = 81 Ndav = 1 E = -75.7282199844 Error = 0.00e+00 FLOPS = 8.80e+08 Tdav = 0.01 T = 0.22\n", - " <-- Site = 20- 21 .. Mmps = 194 Ndav = 1 E = -75.7282199844 Error = 0.00e+00 FLOPS = 1.33e+09 Tdav = 0.01 T = 0.28\n", - " <-- Site = 19- 20 .. Mmps = 427 Ndav = 2 E = -75.7282199855 Error = 0.00e+00 FLOPS = 2.20e+09 Tdav = 0.04 T = 0.48\n", - " <-- Site = 18- 19 .. Mmps = 750 Ndav = 2 E = -75.7282199874 Error = 4.65e-13 FLOPS = 3.43e+09 Tdav = 0.07 T = 0.77\n", - " <-- Site = 17- 18 .. Mmps = 750 Ndav = 2 E = -75.7282199926 Error = 1.26e-10 FLOPS = 4.84e+09 Tdav = 0.13 T = 1.29\n", - " <-- Site = 16- 17 .. Mmps = 750 Ndav = 2 E = -75.7282200147 Error = 8.00e-10 FLOPS = 3.31e+09 Tdav = 0.35 T = 3.10\n", - " <-- Site = 15- 16 .. Mmps = 750 Ndav = 2 E = -75.7282201278 Error = 3.37e-09 FLOPS = 6.05e+09 Tdav = 0.34 T = 2.69\n", - " <-- Site = 14- 15 .. Mmps = 750 Ndav = 3 E = -75.7282203378 Error = 1.06e-08 FLOPS = 7.30e+09 Tdav = 0.68 T = 3.92\n", - " <-- Site = 13- 14 .. Mmps = 750 Ndav = 3 E = -75.7282206825 Error = 2.19e-08 FLOPS = 5.80e+09 Tdav = 1.17 T = 5.85\n", - " <-- Site = 12- 13 .. Mmps = 750 Ndav = 3 E = -75.7282214696 Error = 4.09e-08 FLOPS = 7.76e+09 Tdav = 0.99 T = 8.72\n", - " <-- Site = 11- 12 .. Mmps = 750 Ndav = 3 E = -75.7282229139 Error = 6.25e-08 FLOPS = 4.51e+09 Tdav = 1.74 T = 8.23\n", - " <-- Site = 10- 11 .. Mmps = 750 Ndav = 3 E = -75.7282282743 Error = 2.00e-07 FLOPS = 7.90e+09 Tdav = 0.89 T = 3.57\n", - " <-- Site = 9- 10 .. Mmps = 750 Ndav = 4 E = -75.7282372064 Error = 4.91e-07 FLOPS = 8.21e+09 Tdav = 1.02 T = 3.26\n", - " <-- Site = 8- 9 .. Mmps = 750 Ndav = 4 E = -75.7282472664 Error = 6.65e-07 FLOPS = 8.30e+09 Tdav = 0.91 T = 2.90\n", - " <-- Site = 7- 8 .. Mmps = 750 Ndav = 4 E = -75.7282690730 Error = 1.28e-06 FLOPS = 4.49e+09 Tdav = 1.42 T = 3.86\n", - " <-- Site = 6- 7 .. Mmps = 750 Ndav = 5 E = -75.7283158616 Error = 2.38e-06 FLOPS = 8.24e+09 Tdav = 0.90 T = 2.40\n", - " <-- Site = 5- 6 .. Mmps = 750 Ndav = 7 E = -75.7283227767 Error = 2.03e-06 FLOPS = 6.50e+09 Tdav = 0.60 T = 1.49\n", - " <-- Site = 4- 5 .. Mmps = 750 Ndav = 3 E = -75.7283134538 Error = 6.24e-08 FLOPS = 3.40e+09 Tdav = 0.10 T = 0.65\n", - " <-- Site = 3- 4 .. Mmps = 750 Ndav = 1 E = -75.7283134538 Error = 5.46e-08 FLOPS = 1.46e+09 Tdav = 0.02 T = 0.41\n", - " <-- Site = 2- 3 .. Mmps = 750 Ndav = 1 E = -75.7283134538 Error = 1.40e-12 FLOPS = 1.17e+09 Tdav = 0.00 T = 0.22\n", - " <-- Site = 1- 2 .. Mmps = 114 Ndav = 1 E = -75.7283134538 Error = 1.62e-20 FLOPS = 1.08e+09 Tdav = 0.00 T = 0.17\n", - " <-- Site = 0- 1 .. Mmps = 16 Ndav = 1 E = -75.7283134538 Error = 9.93e-23 FLOPS = 6.27e+07 Tdav = 0.00 T = 0.03\n", - "Time elapsed = 308.966 | E = -75.7283227767 | DE = -1.03e-04 | DW = 2.38e-06\n", - "Time sweep = 54.910 | 67.6 GFLOP/SWP\n", - " | Dmem = 61.9 MB (1%) | Imem = 2.57 MB (95%) | Hmem = 1.25 GB | Pmem = 44.2 MB\n", - " | Tread = 0.957 | Twrite = 1.607 | Tfpread = 0.955 | Tfpwrite = 1.601 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 582 MB | cpsd = 471 MB\n", - " | Trot = 2.424 | Tctr = 0.020 | Tint = 0.005 | Tmid = 0.000 | Tdctr = 0.011 | Tdiag = 0.146 | Tinfo = 0.341\n", - " | Teff = 32.821 | Tprt = 4.415 | Teig = 11.410 | Tblk = 50.189 | Tmve = 4.506 | Tdm = 0.757 | Tsplt = 0.254 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 308.157 | E = -75.7283283738 | DE = -1.10e-04 | DW = 2.39e-06\n", "\n", "Sweep = 10 | Direction = forward | Bond dimension = 750 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7283134538 Error = 0.00e+00 FLOPS = 5.78e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7283134538 Error = 0.00e+00 FLOPS = 9.60e+08 Tdav = 0.00 T = 0.10\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7283134538 Error = 0.00e+00 FLOPS = 9.79e+08 Tdav = 0.01 T = 0.16\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7283134538 Error = 0.00e+00 FLOPS = 1.45e+09 Tdav = 0.02 T = 0.31\n", - " --> Site = 4- 5 .. Mmps = 421 Ndav = 1 E = -75.7283134538 Error = 0.00e+00 FLOPS = 3.10e+09 Tdav = 0.04 T = 0.46\n", - " --> Site = 5- 6 .. Mmps = 750 Ndav = 4 E = -75.7283227780 Error = 2.58e-06 FLOPS = 6.44e+09 Tdav = 0.34 T = 1.14\n", - " --> Site = 6- 7 .. Mmps = 750 Ndav = 4 E = -75.7283257926 Error = 3.30e-06 FLOPS = 8.30e+09 Tdav = 0.71 T = 1.95\n", - " --> Site = 7- 8 .. Mmps = 750 Ndav = 4 E = -75.7283217596 Error = 1.84e-06 FLOPS = 2.21e+09 Tdav = 2.80 T = 6.06\n", - " --> Site = 8- 9 .. Mmps = 750 Ndav = 4 E = -75.7283240665 Error = 1.21e-06 FLOPS = 8.02e+09 Tdav = 0.94 T = 3.20\n", - " --> Site = 9- 10 .. Mmps = 750 Ndav = 4 E = -75.7283255347 Error = 1.12e-06 FLOPS = 8.22e+09 Tdav = 1.06 T = 3.43\n", - " --> Site = 10- 11 .. Mmps = 750 Ndav = 3 E = -75.7283247759 Error = 6.37e-07 FLOPS = 8.02e+09 Tdav = 0.93 T = 3.66\n", - " --> Site = 11- 12 .. Mmps = 750 Ndav = 3 E = -75.7283252456 Error = 3.23e-07 FLOPS = 7.54e+09 Tdav = 1.13 T = 8.62\n", - " --> Site = 12- 13 .. Mmps = 750 Ndav = 3 E = -75.7283253684 Error = 2.00e-07 FLOPS = 4.35e+09 Tdav = 1.92 T = 9.21\n", - " --> Site = 13- 14 .. Mmps = 750 Ndav = 3 E = -75.7283253847 Error = 9.21e-08 FLOPS = 7.96e+09 Tdav = 0.96 T = 5.36\n", - " --> Site = 14- 15 .. Mmps = 750 Ndav = 3 E = -75.7283254044 Error = 7.26e-08 FLOPS = 7.48e+09 Tdav = 0.76 T = 3.82\n", - " --> Site = 15- 16 .. Mmps = 750 Ndav = 2 E = -75.7283253882 Error = 5.41e-08 FLOPS = 3.69e+09 Tdav = 0.64 T = 3.16\n", - " --> Site = 16- 17 .. Mmps = 750 Ndav = 2 E = -75.7283253042 Error = 1.58e-08 FLOPS = 5.36e+09 Tdav = 0.26 T = 2.62\n", - " --> Site = 17- 18 .. Mmps = 750 Ndav = 2 E = -75.7283252866 Error = 8.51e-09 FLOPS = 5.02e+09 Tdav = 0.15 T = 1.40\n", - " --> Site = 18- 19 .. Mmps = 750 Ndav = 2 E = -75.7283252811 Error = 3.33e-09 FLOPS = 3.46e+09 Tdav = 0.08 T = 0.94\n", - " --> Site = 19- 20 .. Mmps = 750 Ndav = 1 E = -75.7283252788 Error = 1.56e-09 FLOPS = 2.17e+09 Tdav = 0.02 T = 0.62\n", - " --> Site = 20- 21 .. Mmps = 750 Ndav = 1 E = -75.7283252775 Error = 3.24e-10 FLOPS = 4.87e+08 Tdav = 0.04 T = 0.47\n", - " --> Site = 21- 22 .. Mmps = 750 Ndav = 1 E = -75.7283252774 Error = 4.09e-11 FLOPS = 7.08e+08 Tdav = 0.01 T = 0.30\n", - " --> Site = 22- 23 .. Mmps = 484 Ndav = 1 E = -75.7283252774 Error = 9.73e-21 FLOPS = 5.81e+08 Tdav = 0.01 T = 0.23\n", - " --> Site = 23- 24 .. Mmps = 101 Ndav = 1 E = -75.7283252774 Error = 9.42e-21 FLOPS = 4.99e+08 Tdav = 0.00 T = 0.10\n", - " --> Site = 24- 25 .. Mmps = 14 Ndav = 1 E = -75.7283252774 Error = 6.98e-21 FLOPS = 5.09e+07 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 366.524 | E = -75.7283257926 | DE = -3.02e-06 | DW = 3.30e-06\n", - "Time sweep = 57.558 | 68.3 GFLOP/SWP\n", - " | Dmem = 61.9 MB (1%) | Imem = 2.58 MB (95%) | Hmem = 1.27 GB | Pmem = 44.2 MB\n", - " | Tread = 2.581 | Twrite = 1.388 | Tfpread = 2.574 | Tfpwrite = 1.382 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 551 MB | cpsd = 441 MB\n", - " | Trot = 2.267 | Tctr = 0.022 | Tint = 0.011 | Tmid = 0.000 | Tdctr = 1.317 | Tdiag = 0.232 | Tinfo = 0.608\n", - " | Teff = 34.278 | Tprt = 4.396 | Teig = 12.846 | Tblk = 52.945 | Tmve = 4.395 | Tdm = 0.667 | Tsplt = 0.227 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 368.993 | E = -75.7283309384 | DE = -2.56e-06 | DW = 3.28e-06\n", "\n", "Sweep = 11 | Direction = backward | Bond dimension = 750 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7283252774 Error = 0.00e+00 FLOPS = 5.11e+06 Tdav = 0.01 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7283252774 Error = 0.00e+00 FLOPS = 8.71e+08 Tdav = 0.00 T = 0.05\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7283252774 Error = 0.00e+00 FLOPS = 9.31e+08 Tdav = 0.00 T = 0.12\n", - " <-- Site = 21- 22 .. Mmps = 81 Ndav = 1 E = -75.7283252774 Error = 0.00e+00 FLOPS = 8.50e+08 Tdav = 0.01 T = 0.21\n", - " <-- Site = 20- 21 .. Mmps = 194 Ndav = 1 E = -75.7283252774 Error = 0.00e+00 FLOPS = 1.25e+09 Tdav = 0.01 T = 0.28\n", - " <-- Site = 19- 20 .. Mmps = 497 Ndav = 2 E = -75.7283252789 Error = 0.00e+00 FLOPS = 2.32e+09 Tdav = 0.04 T = 0.52\n", - " <-- Site = 18- 19 .. Mmps = 750 Ndav = 2 E = -75.7283252812 Error = 3.61e-12 FLOPS = 3.05e+09 Tdav = 0.09 T = 0.87\n", - " <-- Site = 17- 18 .. Mmps = 750 Ndav = 2 E = -75.7283252886 Error = 1.65e-10 FLOPS = 5.10e+09 Tdav = 0.15 T = 1.44\n", - " <-- Site = 16- 17 .. Mmps = 750 Ndav = 2 E = -75.7283253165 Error = 9.40e-10 FLOPS = 5.55e+09 Tdav = 0.25 T = 1.75\n", - " <-- Site = 15- 16 .. Mmps = 750 Ndav = 2 E = -75.7283254464 Error = 3.96e-09 FLOPS = 4.26e+09 Tdav = 0.56 T = 3.70\n", - " <-- Site = 14- 15 .. Mmps = 750 Ndav = 2 E = -75.7283256016 Error = 1.30e-08 FLOPS = 7.32e+09 Tdav = 0.52 T = 3.50\n", - " <-- Site = 13- 14 .. Mmps = 750 Ndav = 3 E = -75.7283258194 Error = 2.61e-08 FLOPS = 7.70e+09 Tdav = 0.97 T = 5.37\n", - " <-- Site = 12- 13 .. Mmps = 750 Ndav = 3 E = -75.7283263661 Error = 5.20e-08 FLOPS = 7.74e+09 Tdav = 1.07 T = 9.47\n", - " <-- Site = 11- 12 .. Mmps = 750 Ndav = 3 E = -75.7283271182 Error = 8.22e-08 FLOPS = 8.03e+09 Tdav = 1.06 T = 6.86\n", - " <-- Site = 10- 11 .. Mmps = 750 Ndav = 3 E = -75.7283290998 Error = 2.67e-07 FLOPS = 8.11e+09 Tdav = 0.92 T = 4.91\n", - " <-- Site = 9- 10 .. Mmps = 750 Ndav = 3 E = -75.7283325773 Error = 6.38e-07 FLOPS = 7.87e+09 Tdav = 0.83 T = 3.00\n", - " <-- Site = 8- 9 .. Mmps = 750 Ndav = 4 E = -75.7283337719 Error = 6.98e-07 FLOPS = 8.38e+09 Tdav = 0.89 T = 2.73\n", - " <-- Site = 7- 8 .. Mmps = 750 Ndav = 4 E = -75.7283397837 Error = 1.32e-06 FLOPS = 7.53e+09 Tdav = 0.82 T = 2.37\n", - " <-- Site = 6- 7 .. Mmps = 750 Ndav = 4 E = -75.7283499489 Error = 2.58e-06 FLOPS = 4.36e+09 Tdav = 1.35 T = 3.18\n", - " <-- Site = 5- 6 .. Mmps = 750 Ndav = 5 E = -75.7283476017 Error = 2.08e-06 FLOPS = 5.35e+09 Tdav = 0.52 T = 1.75\n", - " <-- Site = 4- 5 .. Mmps = 750 Ndav = 3 E = -75.7283380519 Error = 6.20e-08 FLOPS = 3.29e+09 Tdav = 0.11 T = 0.66\n", - " <-- Site = 3- 4 .. Mmps = 750 Ndav = 1 E = -75.7283380519 Error = 5.47e-08 FLOPS = 1.44e+09 Tdav = 0.02 T = 0.40\n", - " <-- Site = 2- 3 .. Mmps = 750 Ndav = 1 E = -75.7283380519 Error = 1.58e-12 FLOPS = 1.14e+09 Tdav = 0.00 T = 0.22\n", - " <-- Site = 1- 2 .. Mmps = 116 Ndav = 1 E = -75.7283380519 Error = 7.77e-21 FLOPS = 6.37e+08 Tdav = 0.01 T = 0.17\n", - " <-- Site = 0- 1 .. Mmps = 16 Ndav = 1 E = -75.7283380519 Error = 1.21e-22 FLOPS = 1.03e+08 Tdav = 0.00 T = 0.02\n", - "Time elapsed = 420.306 | E = -75.7283499489 | DE = -2.42e-05 | DW = 2.58e-06\n", - "Time sweep = 53.782 | 64.9 GFLOP/SWP\n", - " | Dmem = 61.0 MB (1%) | Imem = 2.61 MB (95%) | Hmem = 1.26 GB | Pmem = 44.2 MB\n", - " | Tread = 0.950 | Twrite = 1.440 | Tfpread = 0.947 | Tfpwrite = 1.434 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 580 MB | cpsd = 470 MB\n", - " | Trot = 2.330 | Tctr = 0.013 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 0.011 | Tdiag = 0.159 | Tinfo = 0.326\n", - " | Teff = 33.371 | Tprt = 4.455 | Teig = 10.221 | Tblk = 49.366 | Tmve = 4.205 | Tdm = 0.622 | Tsplt = 0.248 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 426.670 | E = -75.7283513281 | DE = -2.04e-05 | DW = 2.59e-06\n", "\n", "Sweep = 12 | Direction = forward | Bond dimension = 1000 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7283380519 Error = 0.00e+00 FLOPS = 6.72e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7283380519 Error = 0.00e+00 FLOPS = 1.15e+09 Tdav = 0.00 T = 0.10\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7283380519 Error = 0.00e+00 FLOPS = 1.11e+09 Tdav = 0.00 T = 0.16\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7283380519 Error = 0.00e+00 FLOPS = 1.43e+09 Tdav = 0.02 T = 0.29\n", - " --> Site = 4- 5 .. Mmps = 421 Ndav = 1 E = -75.7283380519 Error = 0.00e+00 FLOPS = 3.09e+09 Tdav = 0.04 T = 0.46\n", - " --> Site = 5- 6 .. Mmps = 1000 Ndav = 5 E = -75.7283476022 Error = 1.26e-07 FLOPS = 6.13e+09 Tdav = 0.45 T = 1.18\n", - " --> Site = 6- 7 .. Mmps = 1000 Ndav = 5 E = -75.7283640220 Error = 1.18e-06 FLOPS = 8.88e+09 Tdav = 1.20 T = 2.82\n", - " --> Site = 7- 8 .. Mmps = 1000 Ndav = 4 E = -75.7283781690 Error = 7.61e-07 FLOPS = 9.05e+09 Tdav = 1.12 T = 3.33\n", - " --> Site = 8- 9 .. Mmps = 1000 Ndav = 4 E = -75.7283905492 Error = 5.41e-07 FLOPS = 8.53e+09 Tdav = 1.44 T = 5.23\n", - " --> Site = 9- 10 .. Mmps = 1000 Ndav = 4 E = -75.7284016645 Error = 5.06e-07 FLOPS = 8.92e+09 Tdav = 1.58 T = 4.49\n", - " --> Site = 10- 11 .. Mmps = 1000 Ndav = 4 E = -75.7284102157 Error = 3.42e-07 FLOPS = 6.87e+09 Tdav = 2.34 T = 6.24\n", - " --> Site = 11- 12 .. Mmps = 1000 Ndav = 4 E = -75.7284143436 Error = 1.61e-07 FLOPS = 8.75e+09 Tdav = 2.09 T = 9.31\n", - " --> Site = 12- 13 .. Mmps = 1000 Ndav = 3 E = -75.7284161715 Error = 1.11e-07 FLOPS = 8.63e+09 Tdav = 1.54 T = 12.04\n", - " --> Site = 13- 14 .. Mmps = 1000 Ndav = 3 E = -75.7284170631 Error = 5.68e-08 FLOPS = 4.99e+09 Tdav = 2.37 T = 8.13\n", - " --> Site = 14- 15 .. Mmps = 1000 Ndav = 3 E = -75.7284175601 Error = 4.14e-08 FLOPS = 8.30e+09 Tdav = 1.08 T = 5.24\n", - " --> Site = 15- 16 .. Mmps = 1000 Ndav = 3 E = -75.7284177160 Error = 3.27e-08 FLOPS = 7.52e+09 Tdav = 0.74 T = 3.39\n", - " --> Site = 16- 17 .. Mmps = 1000 Ndav = 2 E = -75.7284177191 Error = 9.99e-09 FLOPS = 5.79e+09 Tdav = 0.38 T = 2.64\n", - " --> Site = 17- 18 .. Mmps = 1000 Ndav = 2 E = -75.7284177276 Error = 5.36e-09 FLOPS = 3.45e+09 Tdav = 0.35 T = 3.30\n", - " --> Site = 18- 19 .. Mmps = 1000 Ndav = 2 E = -75.7284177237 Error = 2.08e-09 FLOPS = 3.89e+09 Tdav = 0.12 T = 1.43\n", - " --> Site = 19- 20 .. Mmps = 1000 Ndav = 1 E = -75.7284177214 Error = 9.18e-10 FLOPS = 1.84e+09 Tdav = 0.04 T = 0.89\n", - " --> Site = 20- 21 .. Mmps = 1000 Ndav = 1 E = -75.7284177208 Error = 1.55e-10 FLOPS = 1.64e+09 Tdav = 0.02 T = 0.59\n", - " --> Site = 21- 22 .. Mmps = 1000 Ndav = 1 E = -75.7284177208 Error = 1.10e-11 FLOPS = 1.11e+09 Tdav = 0.01 T = 0.53\n", - " --> Site = 22- 23 .. Mmps = 536 Ndav = 1 E = -75.7284177208 Error = 3.23e-21 FLOPS = 1.05e+09 Tdav = 0.01 T = 0.33\n", - " --> Site = 23- 24 .. Mmps = 100 Ndav = 1 E = -75.7284177208 Error = 1.06e-20 FLOPS = 7.87e+08 Tdav = 0.00 T = 0.11\n", - " --> Site = 24- 25 .. Mmps = 15 Ndav = 1 E = -75.7284177208 Error = 4.32e-21 FLOPS = 8.37e+07 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 492.790 | E = -75.7284177276 | DE = -6.78e-05 | DW = 1.18e-06\n", - "Time sweep = 72.484 | 120 GFLOP/SWP\n", - " | Dmem = 94.9 MB (1%) | Imem = 2.84 MB (95%) | Hmem = 1.70 GB | Pmem = 57.6 MB\n", - " | Tread = 2.502 | Twrite = 2.457 | Tfpread = 2.496 | Tfpwrite = 2.452 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 942 MB | cpsd = 752 MB\n", - " | Trot = 4.267 | Tctr = 0.025 | Tint = 0.005 | Tmid = 0.000 | Tdctr = 1.626 | Tdiag = 0.185 | Tinfo = 0.624\n", - " | Teff = 40.581 | Tprt = 5.610 | Teig = 16.978 | Tblk = 64.777 | Tmve = 7.501 | Tdm = 0.940 | Tsplt = 0.337 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 502.719 | E = -75.7284190450 | DE = -6.77e-05 | DW = 1.18e-06\n", "\n", "Sweep = 13 | Direction = backward | Bond dimension = 1000 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7284177208 Error = 0.00e+00 FLOPS = 5.30e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7284177208 Error = 0.00e+00 FLOPS = 8.13e+08 Tdav = 0.00 T = 0.06\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7284177208 Error = 0.00e+00 FLOPS = 1.07e+09 Tdav = 0.01 T = 0.19\n", - " <-- Site = 21- 22 .. Mmps = 81 Ndav = 1 E = -75.7284177208 Error = 0.00e+00 FLOPS = 1.10e+09 Tdav = 0.01 T = 0.32\n", - " <-- Site = 20- 21 .. Mmps = 220 Ndav = 1 E = -75.7284177208 Error = 0.00e+00 FLOPS = 1.45e+09 Tdav = 0.02 T = 0.40\n", - " <-- Site = 19- 20 .. Mmps = 548 Ndav = 2 E = -75.7284177222 Error = 0.00e+00 FLOPS = 2.54e+09 Tdav = 0.07 T = 0.76\n", - " <-- Site = 18- 19 .. Mmps = 1000 Ndav = 2 E = -75.7284177245 Error = 4.10e-13 FLOPS = 3.92e+09 Tdav = 0.12 T = 1.23\n", - " <-- Site = 17- 18 .. Mmps = 1000 Ndav = 2 E = -75.7284177307 Error = 4.42e-11 FLOPS = 5.52e+09 Tdav = 0.24 T = 2.23\n", - " <-- Site = 16- 17 .. Mmps = 1000 Ndav = 2 E = -75.7284177492 Error = 4.00e-10 FLOPS = 3.65e+09 Tdav = 0.72 T = 4.25\n", - " <-- Site = 15- 16 .. Mmps = 1000 Ndav = 2 E = -75.7284178517 Error = 1.34e-09 FLOPS = 6.95e+09 Tdav = 0.63 T = 3.99\n", - " <-- Site = 14- 15 .. Mmps = 1000 Ndav = 2 E = -75.7284179775 Error = 6.39e-09 FLOPS = 8.11e+09 Tdav = 0.88 T = 5.60\n", - " <-- Site = 13- 14 .. Mmps = 1000 Ndav = 3 E = -75.7284181867 Error = 1.56e-08 FLOPS = 7.97e+09 Tdav = 1.93 T = 10.39\n", - " <-- Site = 12- 13 .. Mmps = 1000 Ndav = 3 E = -75.7284187120 Error = 3.08e-08 FLOPS = 9.29e+09 Tdav = 1.95 T = 13.64\n", - " <-- Site = 11- 12 .. Mmps = 1000 Ndav = 3 E = -75.7284194743 Error = 4.75e-08 FLOPS = 8.38e+09 Tdav = 2.20 T = 12.20\n", - " <-- Site = 10- 11 .. Mmps = 1000 Ndav = 3 E = -75.7284222140 Error = 1.44e-07 FLOPS = 9.39e+09 Tdav = 1.73 T = 6.13\n", - " <-- Site = 9- 10 .. Mmps = 1000 Ndav = 3 E = -75.7284271872 Error = 2.96e-07 FLOPS = 6.93e+09 Tdav = 2.06 T = 6.83\n", - " <-- Site = 8- 9 .. Mmps = 1000 Ndav = 4 E = -75.7284316297 Error = 3.37e-07 FLOPS = 9.63e+09 Tdav = 1.73 T = 4.86\n", - " <-- Site = 7- 8 .. Mmps = 1000 Ndav = 4 E = -75.7284409350 Error = 5.99e-07 FLOPS = 9.59e+09 Tdav = 1.45 T = 4.20\n", - " <-- Site = 6- 7 .. Mmps = 1000 Ndav = 4 E = -75.7284581923 Error = 1.11e-06 FLOPS = 7.36e+09 Tdav = 1.64 T = 5.02\n", - " <-- Site = 5- 6 .. Mmps = 1000 Ndav = 3 E = -75.7284530409 Error = 1.37e-07 FLOPS = 6.70e+09 Tdav = 0.38 T = 1.59\n", - " <-- Site = 4- 5 .. Mmps = 1000 Ndav = 1 E = -75.7284529723 Error = 4.03e-08 FLOPS = 3.68e+09 Tdav = 0.05 T = 0.83\n", - " <-- Site = 3- 4 .. Mmps = 1000 Ndav = 1 E = -75.7284529723 Error = 3.68e-08 FLOPS = 1.77e+09 Tdav = 0.03 T = 0.59\n", - " <-- Site = 2- 3 .. Mmps = 880 Ndav = 1 E = -75.7284529723 Error = 9.57e-20 FLOPS = 1.40e+09 Tdav = 0.01 T = 0.33\n", - " <-- Site = 1- 2 .. Mmps = 118 Ndav = 1 E = -75.7284529723 Error = 5.49e-21 FLOPS = 1.19e+09 Tdav = 0.00 T = 0.20\n", - " <-- Site = 0- 1 .. Mmps = 18 Ndav = 1 E = -75.7284529723 Error = 7.48e-21 FLOPS = 1.47e+08 Tdav = 0.00 T = 0.02\n", - "Time elapsed = 578.873 | E = -75.7284581923 | DE = -4.05e-05 | DW = 1.11e-06\n", - "Time sweep = 86.083 | 134 GFLOP/SWP\n", - " | Dmem = 107 MB (1%) | Imem = 2.89 MB (95%) | Hmem = 2.20 GB | Pmem = 73.5 MB\n", - " | Tread = 1.808 | Twrite = 2.518 | Tfpread = 1.806 | Tfpwrite = 2.509 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 0.98 GB | cpsd = 813 MB\n", - " | Trot = 3.987 | Tctr = 0.011 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 0.013 | Tdiag = 0.193 | Tinfo = 0.382\n", - " | Teff = 51.744 | Tprt = 7.068 | Teig = 17.872 | Tblk = 78.833 | Tmve = 7.045 | Tdm = 1.071 | Tsplt = 0.368 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 592.335 | E = -75.7284581391 | DE = -3.91e-05 | DW = 1.11e-06\n", "\n", "Sweep = 14 | Direction = forward | Bond dimension = 1000 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7284529723 Error = 0.00e+00 FLOPS = 4.03e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7284529723 Error = 0.00e+00 FLOPS = 1.23e+09 Tdav = 0.00 T = 0.13\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7284529723 Error = 0.00e+00 FLOPS = 1.35e+09 Tdav = 0.01 T = 0.21\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7284529723 Error = 0.00e+00 FLOPS = 1.48e+09 Tdav = 0.03 T = 0.42\n", - " --> Site = 4- 5 .. Mmps = 421 Ndav = 1 E = -75.7284529723 Error = 0.00e+00 FLOPS = 3.53e+09 Tdav = 0.06 T = 0.63\n", - " --> Site = 5- 6 .. Mmps = 1000 Ndav = 2 E = -75.7284530409 Error = 1.71e-07 FLOPS = 6.42e+09 Tdav = 0.26 T = 1.18\n", - " --> Site = 6- 7 .. Mmps = 1000 Ndav = 4 E = -75.7284588409 Error = 1.80e-06 FLOPS = 8.42e+09 Tdav = 1.44 T = 3.69\n", - " --> Site = 7- 8 .. Mmps = 1000 Ndav = 4 E = -75.7284555167 Error = 1.17e-06 FLOPS = 9.57e+09 Tdav = 1.48 T = 5.17\n", - " --> Site = 8- 9 .. Mmps = 1000 Ndav = 3 E = -75.7284542527 Error = 7.92e-07 FLOPS = 9.62e+09 Tdav = 1.32 T = 4.31\n", - " --> Site = 9- 10 .. Mmps = 1000 Ndav = 3 E = -75.7284548070 Error = 8.05e-07 FLOPS = 6.16e+09 Tdav = 2.42 T = 6.32\n", - " --> Site = 10- 11 .. Mmps = 1000 Ndav = 3 E = -75.7284537883 Error = 4.88e-07 FLOPS = 9.53e+09 Tdav = 1.82 T = 6.19\n", - " --> Site = 11- 12 .. Mmps = 1000 Ndav = 3 E = -75.7284532211 Error = 2.18e-07 FLOPS = 9.39e+09 Tdav = 2.10 T = 12.51\n", - " --> Site = 12- 13 .. Mmps = 1000 Ndav = 3 E = -75.7284531158 Error = 1.36e-07 FLOPS = 9.51e+09 Tdav = 2.05 T = 13.73\n", - " --> Site = 13- 14 .. Mmps = 1000 Ndav = 3 E = -75.7284529508 Error = 6.45e-08 FLOPS = 6.80e+09 Tdav = 2.47 T = 9.54\n", - " --> Site = 14- 15 .. Mmps = 1000 Ndav = 2 E = -75.7284528896 Error = 4.67e-08 FLOPS = 8.62e+09 Tdav = 0.91 T = 6.01\n", - " --> Site = 15- 16 .. Mmps = 1000 Ndav = 2 E = -75.7284528180 Error = 3.66e-08 FLOPS = 7.56e+09 Tdav = 0.64 T = 3.74\n", - " --> Site = 16- 17 .. Mmps = 1000 Ndav = 2 E = -75.7284527442 Error = 1.08e-08 FLOPS = 3.53e+09 Tdav = 0.84 T = 4.25\n", - " --> Site = 17- 18 .. Mmps = 1000 Ndav = 2 E = -75.7284527267 Error = 5.45e-09 FLOPS = 5.62e+09 Tdav = 0.26 T = 2.74\n", - " --> Site = 18- 19 .. Mmps = 1000 Ndav = 1 E = -75.7284527198 Error = 2.10e-09 FLOPS = 3.73e+09 Tdav = 0.07 T = 1.38\n", - " --> Site = 19- 20 .. Mmps = 1000 Ndav = 1 E = -75.7284527173 Error = 9.57e-10 FLOPS = 2.35e+09 Tdav = 0.04 T = 0.99\n", - " --> Site = 20- 21 .. Mmps = 1000 Ndav = 1 E = -75.7284527166 Error = 1.68e-10 FLOPS = 1.59e+09 Tdav = 0.02 T = 0.64\n", - " --> Site = 21- 22 .. Mmps = 1000 Ndav = 1 E = -75.7284527165 Error = 1.20e-11 FLOPS = 1.16e+09 Tdav = 0.01 T = 0.49\n", - " --> Site = 22- 23 .. Mmps = 547 Ndav = 1 E = -75.7284527165 Error = 2.48e-21 FLOPS = 1.12e+09 Tdav = 0.00 T = 0.34\n", - " --> Site = 23- 24 .. Mmps = 100 Ndav = 1 E = -75.7284527165 Error = 5.22e-21 FLOPS = 9.70e+08 Tdav = 0.00 T = 0.11\n", - " --> Site = 24- 25 .. Mmps = 13 Ndav = 1 E = -75.7284527165 Error = 8.92e-21 FLOPS = 1.06e+08 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 663.821 | E = -75.7284588409 | DE = -6.49e-07 | DW = 1.80e-06\n", - "Time sweep = 84.948 | 137 GFLOP/SWP\n", - " | Dmem = 107 MB (1%) | Imem = 2.91 MB (95%) | Hmem = 2.22 GB | Pmem = 73.9 MB\n", - " | Tread = 3.262 | Twrite = 2.651 | Tfpread = 3.256 | Tfpwrite = 2.645 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 947 MB | cpsd = 756 MB\n", - " | Trot = 4.266 | Tctr = 0.032 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 1.573 | Tdiag = 0.171 | Tinfo = 0.646\n", - " | Teff = 50.179 | Tprt = 6.469 | Teig = 18.270 | Tblk = 76.982 | Tmve = 7.767 | Tdm = 1.110 | Tsplt = 0.353 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 681.041 | E = -75.7284587601 | DE = -6.21e-07 | DW = 1.80e-06\n", "\n", "Sweep = 15 | Direction = backward | Bond dimension = 1000 | Noise = 1.00e-05 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7284527165 Error = 0.00e+00 FLOPS = 7.53e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7284527165 Error = 0.00e+00 FLOPS = 9.93e+08 Tdav = 0.00 T = 0.06\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7284527165 Error = 0.00e+00 FLOPS = 1.10e+09 Tdav = 0.01 T = 0.19\n", - " <-- Site = 21- 22 .. Mmps = 89 Ndav = 1 E = -75.7284527165 Error = 0.00e+00 FLOPS = 1.10e+09 Tdav = 0.01 T = 0.31\n", - " <-- Site = 20- 21 .. Mmps = 242 Ndav = 1 E = -75.7284527165 Error = 0.00e+00 FLOPS = 1.48e+09 Tdav = 0.02 T = 0.42\n", - " <-- Site = 19- 20 .. Mmps = 576 Ndav = 2 E = -75.7284527175 Error = 0.00e+00 FLOPS = 2.66e+09 Tdav = 0.07 T = 0.75\n", - " <-- Site = 18- 19 .. Mmps = 1000 Ndav = 2 E = -75.7284527206 Error = 8.24e-13 FLOPS = 4.06e+09 Tdav = 0.12 T = 1.24\n", - " <-- Site = 17- 18 .. Mmps = 1000 Ndav = 2 E = -75.7284527275 Error = 5.31e-11 FLOPS = 3.02e+09 Tdav = 0.48 T = 2.89\n", - " <-- Site = 16- 17 .. Mmps = 1000 Ndav = 2 E = -75.7284527485 Error = 4.65e-10 FLOPS = 6.55e+09 Tdav = 0.45 T = 3.76\n", - " <-- Site = 15- 16 .. Mmps = 1000 Ndav = 2 E = -75.7284528482 Error = 1.56e-09 FLOPS = 7.72e+09 Tdav = 0.63 T = 3.53\n", - " <-- Site = 14- 15 .. Mmps = 1000 Ndav = 2 E = -75.7284529735 Error = 7.60e-09 FLOPS = 8.70e+09 Tdav = 0.90 T = 5.64\n", - " <-- Site = 13- 14 .. Mmps = 1000 Ndav = 3 E = -75.7284531535 Error = 1.78e-08 FLOPS = 9.14e+09 Tdav = 1.83 T = 10.14\n", - " <-- Site = 12- 13 .. Mmps = 1000 Ndav = 3 E = -75.7284535853 Error = 3.70e-08 FLOPS = 9.41e+09 Tdav = 2.07 T = 13.64\n", - " <-- Site = 11- 12 .. Mmps = 1000 Ndav = 3 E = -75.7284541315 Error = 5.79e-08 FLOPS = 9.41e+09 Tdav = 2.08 T = 12.28\n", - " <-- Site = 10- 11 .. Mmps = 1000 Ndav = 3 E = -75.7284558433 Error = 1.89e-07 FLOPS = 9.22e+09 Tdav = 1.87 T = 5.95\n", - " <-- Site = 9- 10 .. Mmps = 1000 Ndav = 3 E = -75.7284584149 Error = 3.83e-07 FLOPS = 8.98e+09 Tdav = 1.66 T = 6.72\n", - " <-- Site = 8- 9 .. Mmps = 1000 Ndav = 3 E = -75.7284594836 Error = 3.52e-07 FLOPS = 9.64e+09 Tdav = 1.32 T = 4.37\n", - " <-- Site = 7- 8 .. Mmps = 1000 Ndav = 4 E = -75.7284629436 Error = 6.28e-07 FLOPS = 9.67e+09 Tdav = 1.47 T = 4.40\n", - " <-- Site = 6- 7 .. Mmps = 1000 Ndav = 4 E = -75.7284680082 Error = 1.16e-06 FLOPS = 7.89e+09 Tdav = 1.54 T = 4.69\n", - " <-- Site = 5- 6 .. Mmps = 1000 Ndav = 3 E = -75.7284620470 Error = 1.37e-07 FLOPS = 6.81e+09 Tdav = 0.37 T = 1.58\n", - " <-- Site = 4- 5 .. Mmps = 1000 Ndav = 1 E = -75.7284619758 Error = 4.03e-08 FLOPS = 3.56e+09 Tdav = 0.05 T = 0.89\n", - " <-- Site = 3- 4 .. Mmps = 1000 Ndav = 1 E = -75.7284619758 Error = 3.68e-08 FLOPS = 1.81e+09 Tdav = 0.03 T = 0.61\n", - " <-- Site = 2- 3 .. Mmps = 883 Ndav = 1 E = -75.7284619758 Error = 8.66e-20 FLOPS = 5.40e+08 Tdav = 0.02 T = 0.34\n", - " <-- Site = 1- 2 .. Mmps = 115 Ndav = 1 E = -75.7284619758 Error = 1.93e-20 FLOPS = 1.27e+09 Tdav = 0.00 T = 0.21\n", - " <-- Site = 0- 1 .. Mmps = 17 Ndav = 1 E = -75.7284619758 Error = 8.43e-23 FLOPS = 1.41e+08 Tdav = 0.00 T = 0.02\n", - "Time elapsed = 748.668 | E = -75.7284680082 | DE = -9.17e-06 | DW = 1.16e-06\n", - "Time sweep = 84.847 | 138 GFLOP/SWP\n", - " | Dmem = 107 MB (1%) | Imem = 2.93 MB (95%) | Hmem = 2.22 GB | Pmem = 73.8 MB\n", - " | Tread = 1.745 | Twrite = 2.808 | Tfpread = 1.742 | Tfpwrite = 2.802 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 0.98 GB | cpsd = 810 MB\n", - " | Trot = 4.149 | Tctr = 0.018 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 0.011 | Tdiag = 0.176 | Tinfo = 0.381\n", - " | Teff = 50.903 | Tprt = 7.208 | Teig = 17.013 | Tblk = 77.122 | Tmve = 7.514 | Tdm = 1.103 | Tsplt = 0.410 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 769.707 | E = -75.7284677459 | DE = -8.99e-06 | DW = 1.16e-06\n", "\n", "Sweep = 16 | Direction = forward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7284619758 Error = 0.00e+00 FLOPS = 9.13e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7284619758 Error = 0.00e+00 FLOPS = 1.14e+09 Tdav = 0.00 T = 0.13\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7284619758 Error = 0.00e+00 FLOPS = 1.41e+09 Tdav = 0.01 T = 0.20\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7284619758 Error = 0.00e+00 FLOPS = 1.51e+09 Tdav = 0.03 T = 0.41\n", - " --> Site = 4- 5 .. Mmps = 404 Ndav = 1 E = -75.7284619758 Error = 1.01e-20 FLOPS = 3.55e+09 Tdav = 0.05 T = 0.57\n", - " --> Site = 5- 6 .. Mmps = 1000 Ndav = 2 E = -75.7284620462 Error = 6.55e-10 FLOPS = 6.63e+09 Tdav = 0.25 T = 1.04\n", - " --> Site = 6- 7 .. Mmps = 1000 Ndav = 4 E = -75.7284685127 Error = 1.14e-06 FLOPS = 8.78e+09 Tdav = 1.44 T = 3.01\n", - " --> Site = 7- 8 .. Mmps = 1000 Ndav = 4 E = -75.7284662540 Error = 6.85e-07 FLOPS = 9.24e+09 Tdav = 1.61 T = 4.99\n", - " --> Site = 8- 9 .. Mmps = 1000 Ndav = 3 E = -75.7284651946 Error = 3.83e-07 FLOPS = 9.60e+09 Tdav = 1.39 T = 3.81\n", - " --> Site = 9- 10 .. Mmps = 1000 Ndav = 3 E = -75.7284662730 Error = 4.68e-07 FLOPS = 9.81e+09 Tdav = 1.63 T = 4.53\n", - " --> Site = 10- 11 .. Mmps = 1000 Ndav = 3 E = -75.7284651830 Error = 2.09e-07 FLOPS = 9.83e+09 Tdav = 1.90 T = 6.90\n", - " --> Site = 11- 12 .. Mmps = 1000 Ndav = 3 E = -75.7284646096 Error = 4.99e-08 FLOPS = 6.10e+09 Tdav = 3.55 T = 11.81\n", - " --> Site = 12- 13 .. Mmps = 1000 Ndav = 3 E = -75.7284647338 Error = 2.64e-08 FLOPS = 5.97e+09 Tdav = 3.81 T = 13.15\n", - " --> Site = 13- 14 .. Mmps = 1000 Ndav = 3 E = -75.7284648188 Error = 5.86e-09 FLOPS = 9.54e+09 Tdav = 2.21 T = 8.66\n", - " --> Site = 14- 15 .. Mmps = 1000 Ndav = 2 E = -75.7284649039 Error = 5.71e-10 FLOPS = 6.04e+09 Tdav = 1.82 T = 7.93\n", - " --> Site = 15- 16 .. Mmps = 1000 Ndav = 2 E = -75.7284650065 Error = 5.06e-10 FLOPS = 5.47e+09 Tdav = 1.47 T = 4.92\n", - " --> Site = 16- 17 .. Mmps = 965 Ndav = 2 E = -75.7284650514 Error = 5.60e-20 FLOPS = 2.85e+09 Tdav = 2.00 T = 5.68\n", - " --> Site = 17- 18 .. Mmps = 949 Ndav = 2 E = -75.7284650627 Error = 4.61e-20 FLOPS = 4.61e+09 Tdav = 0.70 T = 5.32\n", - " --> Site = 18- 19 .. Mmps = 684 Ndav = 1 E = -75.7284650627 Error = 2.54e-20 FLOPS = 5.58e+09 Tdav = 0.13 T = 2.10\n", - " --> Site = 19- 20 .. Mmps = 403 Ndav = 1 E = -75.7284650627 Error = 2.64e-20 FLOPS = 1.96e+09 Tdav = 0.08 T = 0.93\n", - " --> Site = 20- 21 .. Mmps = 224 Ndav = 1 E = -75.7284650627 Error = 2.20e-20 FLOPS = 8.33e+08 Tdav = 0.03 T = 0.43\n", - " --> Site = 21- 22 .. Mmps = 92 Ndav = 1 E = -75.7284650627 Error = 1.88e-20 FLOPS = 2.18e+08 Tdav = 0.01 T = 0.19\n", - " --> Site = 22- 23 .. Mmps = 33 Ndav = 1 E = -75.7284650627 Error = 1.40e-20 FLOPS = 3.78e+07 Tdav = 0.00 T = 0.07\n", - " --> Site = 23- 24 .. Mmps = 11 Ndav = 1 E = -75.7284650627 Error = 1.12e-20 FLOPS = 5.26e+06 Tdav = 0.00 T = 0.05\n", - " --> Site = 24- 25 .. Mmps = 5 Ndav = 1 E = -75.7284650627 Error = 2.14e-21 FLOPS = 9.01e+05 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 835.738 | E = -75.7284685127 | DE = -5.05e-07 | DW = 1.14e-06\n", - "Time sweep = 87.070 | 160 GFLOP/SWP\n", - " | Dmem = 107 MB (1%) | Imem = 3.00 MB (95%) | Hmem = 2.28 GB | Pmem = 0 B\n", - " | Tread = 3.954 | Twrite = 2.517 | Tfpread = 3.946 | Tfpwrite = 2.511 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 896 MB | cpsd = 718 MB\n", - " | Trot = 5.156 | Tctr = 0.033 | Tint = 0.021 | Tmid = 0.000 | Tdctr = 1.926 | Tdiag = 0.271 | Tinfo = 0.827\n", - " | Teff = 53.002 | Tprt = 0.000 | Teig = 24.142 | Tblk = 78.083 | Tmve = 8.762 | Tdm = 0.018 | Tsplt = 0.401 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 854.210 | E = -75.7284682379 | DE = -4.92e-07 | DW = 1.14e-06\n", "\n", "Sweep = 17 | Direction = backward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7284650627 Error = 0.00e+00 FLOPS = 8.10e+05 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7284650627 Error = 0.00e+00 FLOPS = 9.08e+06 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7284650627 Error = 0.00e+00 FLOPS = 3.66e+07 Tdav = 0.00 T = 0.04\n", - " <-- Site = 21- 22 .. Mmps = 89 Ndav = 1 E = -75.7284650627 Error = 0.00e+00 FLOPS = 2.97e+08 Tdav = 0.01 T = 0.13\n", - " <-- Site = 20- 21 .. Mmps = 222 Ndav = 1 E = -75.7284650627 Error = 6.68e-28 FLOPS = 9.35e+08 Tdav = 0.02 T = 0.27\n", - " <-- Site = 19- 20 .. Mmps = 400 Ndav = 1 E = -75.7284650627 Error = 2.84e-26 FLOPS = 2.17e+09 Tdav = 0.07 T = 0.83\n", - " <-- Site = 18- 19 .. Mmps = 679 Ndav = 1 E = -75.7284650627 Error = 1.69e-25 FLOPS = 3.29e+09 Tdav = 0.21 T = 1.56\n", - " <-- Site = 17- 18 .. Mmps = 943 Ndav = 1 E = -75.7284650627 Error = 7.04e-24 FLOPS = 4.95e+09 Tdav = 0.30 T = 3.83\n", - " <-- Site = 16- 17 .. Mmps = 959 Ndav = 1 E = -75.7284650627 Error = 1.15e-22 FLOPS = 7.94e+09 Tdav = 0.34 T = 2.58\n", - " <-- Site = 15- 16 .. Mmps = 1000 Ndav = 2 E = -75.7284650677 Error = 5.04e-10 FLOPS = 8.99e+09 Tdav = 0.86 T = 3.39\n", - " <-- Site = 14- 15 .. Mmps = 1000 Ndav = 2 E = -75.7284650685 Error = 5.60e-10 FLOPS = 5.87e+09 Tdav = 1.85 T = 5.93\n", - " <-- Site = 13- 14 .. Mmps = 1000 Ndav = 2 E = -75.7284651141 Error = 5.96e-09 FLOPS = 4.60e+09 Tdav = 2.86 T = 10.19\n", - " <-- Site = 12- 13 .. Mmps = 1000 Ndav = 3 E = -75.7284652690 Error = 2.65e-08 FLOPS = 7.07e+09 Tdav = 3.07 T = 15.51\n", - " <-- Site = 11- 12 .. Mmps = 1000 Ndav = 3 E = -75.7284654339 Error = 4.89e-08 FLOPS = 6.89e+09 Tdav = 3.10 T = 14.07\n", - " <-- Site = 10- 11 .. Mmps = 1000 Ndav = 3 E = -75.7284665090 Error = 2.07e-07 FLOPS = 5.51e+09 Tdav = 3.34 T = 9.59\n", - " <-- Site = 9- 10 .. Mmps = 1000 Ndav = 3 E = -75.7284681469 Error = 4.62e-07 FLOPS = 8.53e+09 Tdav = 1.86 T = 5.60\n", - " <-- Site = 8- 9 .. Mmps = 1000 Ndav = 3 E = -75.7284676623 Error = 3.85e-07 FLOPS = 6.74e+09 Tdav = 1.98 T = 6.34\n", - " <-- Site = 7- 8 .. Mmps = 1000 Ndav = 4 E = -75.7284694820 Error = 6.84e-07 FLOPS = 5.84e+09 Tdav = 2.52 T = 4.91\n", - " <-- Site = 6- 7 .. Mmps = 1000 Ndav = 4 E = -75.7284723972 Error = 1.15e-06 FLOPS = 9.10e+09 Tdav = 1.39 T = 3.44\n", - " <-- Site = 5- 6 .. Mmps = 1000 Ndav = 3 E = -75.7284658450 Error = 7.37e-10 FLOPS = 1.52e+09 Tdav = 1.66 T = 4.91\n", - " <-- Site = 4- 5 .. Mmps = 437 Ndav = 1 E = -75.7284658416 Error = 4.49e-19 FLOPS = 1.53e+09 Tdav = 0.13 T = 1.55\n", - " <-- Site = 3- 4 .. Mmps = 189 Ndav = 1 E = -75.7284658416 Error = 4.51e-19 FLOPS = 4.50e+08 Tdav = 0.02 T = 0.30\n", - " <-- Site = 2- 3 .. Mmps = 74 Ndav = 1 E = -75.7284658416 Error = 1.04e-19 FLOPS = 2.30e+08 Tdav = 0.00 T = 0.08\n", - " <-- Site = 1- 2 .. Mmps = 28 Ndav = 1 E = -75.7284658416 Error = 8.32e-21 FLOPS = 6.45e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 0- 1 .. Mmps = 6 Ndav = 1 E = -75.7284658416 Error = 6.27e-34 FLOPS = 9.32e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 931.150 | E = -75.7284723972 | DE = -3.88e-06 | DW = 1.15e-06\n", - "Time sweep = 95.412 | 147 GFLOP/SWP\n", - " | Dmem = 105 MB (1%) | Imem = 3.02 MB (95%) | Hmem = 2.26 GB | Pmem = 0 B\n", - " | Tread = 2.269 | Twrite = 3.318 | Tfpread = 2.266 | Tfpwrite = 3.311 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 897 MB | cpsd = 722 MB\n", - " | Trot = 4.939 | Tctr = 0.012 | Tint = 0.015 | Tmid = 0.000 | Tdctr = 0.020 | Tdiag = 0.276 | Tinfo = 0.579\n", - " | Teff = 59.473 | Tprt = 0.000 | Teig = 25.590 | Tblk = 85.999 | Tmve = 9.108 | Tdm = 0.015 | Tsplt = 0.362 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 934.636 | E = -75.7284724835 | DE = -4.25e-06 | DW = 1.16e-06\n", "\n", "Sweep = 18 | Direction = forward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7284658416 Error = 0.00e+00 FLOPS = 8.92e+06 Tdav = 0.00 T = 0.01\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7284658416 Error = 0.00e+00 FLOPS = 6.21e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7284658416 Error = 0.00e+00 FLOPS = 2.23e+08 Tdav = 0.00 T = 0.05\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7284658416 Error = 0.00e+00 FLOPS = 8.74e+08 Tdav = 0.01 T = 0.18\n", - " --> Site = 4- 5 .. Mmps = 405 Ndav = 1 E = -75.7284658416 Error = 1.19e-20 FLOPS = 3.18e+09 Tdav = 0.06 T = 0.60\n", - " --> Site = 5- 6 .. Mmps = 1000 Ndav = 2 E = -75.7284658452 Error = 6.32e-10 FLOPS = 5.03e+09 Tdav = 0.33 T = 1.18\n", - " --> Site = 6- 7 .. Mmps = 1000 Ndav = 4 E = -75.7284723981 Error = 1.15e-06 FLOPS = 8.18e+09 Tdav = 1.54 T = 3.53\n", - " --> Site = 7- 8 .. Mmps = 1000 Ndav = 4 E = -75.7284698243 Error = 6.88e-07 FLOPS = 7.11e+09 Tdav = 2.07 T = 4.69\n", - " --> Site = 8- 9 .. Mmps = 1000 Ndav = 3 E = -75.7284683321 Error = 3.94e-07 FLOPS = 8.68e+09 Tdav = 1.54 T = 6.06\n", - " --> Site = 9- 10 .. Mmps = 1000 Ndav = 3 E = -75.7284689606 Error = 4.74e-07 FLOPS = 9.20e+09 Tdav = 1.73 T = 4.69\n", - " --> Site = 10- 11 .. Mmps = 1000 Ndav = 3 E = -75.7284674778 Error = 2.13e-07 FLOPS = 5.67e+09 Tdav = 3.25 T = 7.42\n", - " --> Site = 11- 12 .. Mmps = 1000 Ndav = 3 E = -75.7284665021 Error = 5.08e-08 FLOPS = 5.72e+09 Tdav = 3.73 T = 12.72\n", - " --> Site = 12- 13 .. Mmps = 1000 Ndav = 3 E = -75.7284663731 Error = 2.68e-08 FLOPS = 5.04e+09 Tdav = 4.31 T = 16.18\n", - " --> Site = 13- 14 .. Mmps = 1000 Ndav = 2 E = -75.7284662348 Error = 6.14e-09 FLOPS = 7.44e+09 Tdav = 1.77 T = 8.79\n", - " --> Site = 14- 15 .. Mmps = 1000 Ndav = 2 E = -75.7284661970 Error = 6.14e-10 FLOPS = 9.34e+09 Tdav = 1.17 T = 7.99\n", - " --> Site = 15- 16 .. Mmps = 1000 Ndav = 2 E = -75.7284661992 Error = 5.75e-10 FLOPS = 8.94e+09 Tdav = 0.87 T = 3.64\n", - " --> Site = 16- 17 .. Mmps = 966 Ndav = 1 E = -75.7284661940 Error = 3.94e-20 FLOPS = 7.82e+09 Tdav = 0.35 T = 2.77\n", - " --> Site = 17- 18 .. Mmps = 952 Ndav = 1 E = -75.7284661940 Error = 4.83e-20 FLOPS = 3.77e+09 Tdav = 0.39 T = 2.83\n", - " --> Site = 18- 19 .. Mmps = 698 Ndav = 2 E = -75.7284661952 Error = 2.23e-20 FLOPS = 6.20e+09 Tdav = 0.22 T = 2.02\n", - " --> Site = 19- 20 .. Mmps = 407 Ndav = 1 E = -75.7284661952 Error = 2.06e-20 FLOPS = 3.84e+09 Tdav = 0.04 T = 0.66\n", - " --> Site = 20- 21 .. Mmps = 223 Ndav = 1 E = -75.7284661952 Error = 2.13e-20 FLOPS = 1.29e+09 Tdav = 0.02 T = 0.30\n", - " --> Site = 21- 22 .. Mmps = 91 Ndav = 1 E = -75.7284661952 Error = 1.16e-20 FLOPS = 3.92e+08 Tdav = 0.01 T = 0.11\n", - " --> Site = 22- 23 .. Mmps = 32 Ndav = 1 E = -75.7284661952 Error = 1.18e-20 FLOPS = 6.85e+07 Tdav = 0.00 T = 0.05\n", - " --> Site = 23- 24 .. Mmps = 12 Ndav = 1 E = -75.7284661952 Error = 5.50e-23 FLOPS = 1.78e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7284661952 Error = 4.65e-21 FLOPS = 2.44e+05 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 1017.866 | E = -75.7284723981 | DE = -8.96e-10 | DW = 1.15e-06\n", - "Time sweep = 86.715 | 147 GFLOP/SWP\n", - " | Dmem = 105 MB (1%) | Imem = 3.02 MB (95%) | Hmem = 2.26 GB | Pmem = 0 B\n", - " | Tread = 3.990 | Twrite = 2.732 | Tfpread = 3.980 | Tfpwrite = 2.724 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 896 MB | cpsd = 718 MB\n", - " | Trot = 4.553 | Tctr = 0.024 | Tint = 0.013 | Tmid = 0.000 | Tdctr = 2.260 | Tdiag = 0.255 | Tinfo = 0.666\n", - " | Teff = 54.172 | Tprt = 0.000 | Teig = 23.410 | Tblk = 78.356 | Tmve = 8.159 | Tdm = 0.014 | Tsplt = 0.340 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 1019.953 | E = -75.7284724841 | DE = -6.41e-10 | DW = 1.16e-06\n", "\n", "Sweep = 19 | Direction = backward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7284661952 Error = 0.00e+00 FLOPS = 1.20e+06 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7284661952 Error = 0.00e+00 FLOPS = 5.14e+06 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7284661952 Error = 0.00e+00 FLOPS = 6.11e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 21- 22 .. Mmps = 89 Ndav = 1 E = -75.7284661952 Error = 0.00e+00 FLOPS = 4.24e+08 Tdav = 0.01 T = 0.09\n", - " <-- Site = 20- 21 .. Mmps = 222 Ndav = 1 E = -75.7284661952 Error = 9.25e-28 FLOPS = 7.98e+08 Tdav = 0.03 T = 0.19\n", - " <-- Site = 19- 20 .. Mmps = 400 Ndav = 1 E = -75.7284661952 Error = 1.85e-26 FLOPS = 3.90e+09 Tdav = 0.04 T = 0.49\n", - " <-- Site = 18- 19 .. Mmps = 690 Ndav = 1 E = -75.7284661952 Error = 1.57e-25 FLOPS = 5.71e+09 Tdav = 0.12 T = 1.02\n", - " <-- Site = 17- 18 .. Mmps = 942 Ndav = 1 E = -75.7284661952 Error = 1.35e-23 FLOPS = 6.81e+09 Tdav = 0.22 T = 1.63\n", - " <-- Site = 16- 17 .. Mmps = 958 Ndav = 1 E = -75.7284661952 Error = 1.17e-22 FLOPS = 7.94e+09 Tdav = 0.34 T = 2.44\n", - " <-- Site = 15- 16 .. Mmps = 1000 Ndav = 2 E = -75.7284662005 Error = 5.69e-10 FLOPS = 5.67e+09 Tdav = 1.36 T = 3.86\n", - " <-- Site = 14- 15 .. Mmps = 1000 Ndav = 2 E = -75.7284662005 Error = 6.11e-10 FLOPS = 8.45e+09 Tdav = 1.29 T = 6.40\n", - " <-- Site = 13- 14 .. Mmps = 1000 Ndav = 2 E = -75.7284662441 Error = 6.14e-09 FLOPS = 6.92e+09 Tdav = 1.90 T = 7.88\n", - " <-- Site = 12- 13 .. Mmps = 1000 Ndav = 3 E = -75.7284663942 Error = 2.69e-08 FLOPS = 9.20e+09 Tdav = 2.35 T = 12.66\n", - " <-- Site = 11- 12 .. Mmps = 1000 Ndav = 3 E = -75.7284665552 Error = 5.08e-08 FLOPS = 9.57e+09 Tdav = 2.22 T = 11.57\n", - " <-- Site = 10- 11 .. Mmps = 1000 Ndav = 3 E = -75.7284677628 Error = 2.19e-07 FLOPS = 5.71e+09 Tdav = 3.23 T = 6.98\n", - " <-- Site = 9- 10 .. Mmps = 1000 Ndav = 3 E = -75.7284694413 Error = 4.80e-07 FLOPS = 9.48e+09 Tdav = 1.68 T = 4.67\n", - " <-- Site = 8- 9 .. Mmps = 1000 Ndav = 3 E = -75.7284688418 Error = 3.94e-07 FLOPS = 9.44e+09 Tdav = 1.42 T = 3.89\n", - " <-- Site = 7- 8 .. Mmps = 1000 Ndav = 4 E = -75.7284705409 Error = 6.96e-07 FLOPS = 5.87e+09 Tdav = 2.51 T = 5.80\n", - " <-- Site = 6- 7 .. Mmps = 1000 Ndav = 4 E = -75.7284733408 Error = 1.16e-06 FLOPS = 9.27e+09 Tdav = 1.36 T = 2.97\n", - " <-- Site = 5- 6 .. Mmps = 1000 Ndav = 3 E = -75.7284667343 Error = 7.26e-10 FLOPS = 6.80e+09 Tdav = 0.37 T = 1.34\n", - " <-- Site = 4- 5 .. Mmps = 435 Ndav = 1 E = -75.7284667309 Error = 4.64e-19 FLOPS = 3.44e+09 Tdav = 0.06 T = 0.74\n", - " <-- Site = 3- 4 .. Mmps = 192 Ndav = 1 E = -75.7284667309 Error = 3.99e-19 FLOPS = 8.13e+08 Tdav = 0.01 T = 0.24\n", - " <-- Site = 2- 3 .. Mmps = 78 Ndav = 1 E = -75.7284667309 Error = 1.04e-19 FLOPS = 1.97e+08 Tdav = 0.00 T = 0.09\n", - " <-- Site = 1- 2 .. Mmps = 25 Ndav = 1 E = -75.7284667309 Error = 7.94e-21 FLOPS = 5.90e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 0- 1 .. Mmps = 8 Ndav = 1 E = -75.7284667309 Error = 5.79e-21 FLOPS = 8.15e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 1093.091 | E = -75.7284733408 | DE = -9.43e-07 | DW = 1.16e-06\n", - "Time sweep = 75.226 | 147 GFLOP/SWP\n", - " | Dmem = 105 MB (1%) | Imem = 3.02 MB (95%) | Hmem = 2.26 GB | Pmem = 0 B\n", - " | Tread = 1.517 | Twrite = 2.517 | Tfpread = 1.514 | Tfpwrite = 2.511 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 896 MB | cpsd = 722 MB\n", - " | Trot = 4.038 | Tctr = 0.007 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 0.011 | Tdiag = 0.202 | Tinfo = 0.389\n", - " | Teff = 46.668 | Tprt = 0.000 | Teig = 20.515 | Tblk = 67.908 | Tmve = 7.113 | Tdm = 0.013 | Tsplt = 0.324 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 1099.196 | E = -75.7284733044 | DE = -8.20e-07 | DW = 1.17e-06\n", "\n", "\n", "Sweep = 20 | Direction = forward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - " --> Site = 0 .. Mmps = 3 Ndav = 1 E = -75.7284667309 Error = 0.00e+00 FLOPS = 4.25e+05 Tdav = 0.00 T = 0.01\n", - " --> Site = 1 .. Mmps = 10 Ndav = 1 E = -75.7284667309 Error = 0.00e+00 FLOPS = 6.16e+06 Tdav = 0.00 T = 0.01\n", - " --> Site = 2 .. Mmps = 35 Ndav = 1 E = -75.7284667309 Error = 0.00e+00 FLOPS = 2.62e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 3 .. Mmps = 126 Ndav = 1 E = -75.7284667309 Error = 0.00e+00 FLOPS = 4.86e+07 Tdav = 0.01 T = 0.03\n", - " --> Site = 4 .. Mmps = 403 Ndav = 1 E = -75.7284667309 Error = 1.68e-20 FLOPS = 3.98e+08 Tdav = 0.02 T = 0.09\n", - " --> Site = 5 .. Mmps = 1000 Ndav = 2 E = -75.7284667312 Error = 8.28e-18 FLOPS = 3.80e+09 Tdav = 0.08 T = 0.35\n", - " --> Site = 6 .. Mmps = 1000 Ndav = 1 E = -75.7284667312 Error = 2.48e-17 FLOPS = 7.04e+09 Tdav = 0.13 T = 1.05\n", - " --> Site = 7 .. Mmps = 1000 Ndav = 3 E = -75.7284667793 Error = 2.53e-18 FLOPS = 7.88e+09 Tdav = 0.49 T = 1.63\n", - " --> Site = 8 .. Mmps = 1000 Ndav = 3 E = -75.7284668281 Error = 2.74e-18 FLOPS = 4.10e+09 Tdav = 1.16 T = 2.68\n", - " --> Site = 9 .. Mmps = 1000 Ndav = 3 E = -75.7284670566 Error = 1.79e-18 FLOPS = 8.21e+09 Tdav = 0.73 T = 3.37\n", - " --> Site = 10 .. Mmps = 1000 Ndav = 3 E = -75.7284670861 Error = 4.42e-18 FLOPS = 8.34e+09 Tdav = 0.89 T = 2.92\n", - " --> Site = 11 .. Mmps = 1000 Ndav = 3 E = -75.7284671214 Error = 9.78e-18 FLOPS = 8.20e+09 Tdav = 1.08 T = 3.50\n", - " --> Site = 12 .. Mmps = 1000 Ndav = 3 E = -75.7284671478 Error = 9.45e-18 FLOPS = 8.40e+09 Tdav = 1.12 T = 9.37\n", - " --> Site = 13 .. Mmps = 1000 Ndav = 2 E = -75.7284671608 Error = 4.63e-18 FLOPS = 8.47e+09 Tdav = 0.72 T = 4.74\n", - " --> Site = 14 .. Mmps = 1000 Ndav = 2 E = -75.7284671649 Error = 6.37e-18 FLOPS = 4.24e+09 Tdav = 1.18 T = 4.58\n", - " --> Site = 15 .. Mmps = 1000 Ndav = 2 E = -75.7284671670 Error = 3.79e-18 FLOPS = 8.18e+09 Tdav = 0.52 T = 3.44\n", - " --> Site = 16 .. Mmps = 965 Ndav = 2 E = -75.7284671678 Error = 4.74e-20 FLOPS = 7.37e+09 Tdav = 0.40 T = 2.09\n", - " --> Site = 17 .. Mmps = 949 Ndav = 2 E = -75.7284671685 Error = 6.29e-20 FLOPS = 6.86e+09 Tdav = 0.32 T = 1.74\n", - " --> Site = 18 .. Mmps = 693 Ndav = 1 E = -75.7284671685 Error = 2.41e-20 FLOPS = 5.60e+09 Tdav = 0.11 T = 1.16\n", - " --> Site = 19 .. Mmps = 403 Ndav = 1 E = -75.7284671685 Error = 1.63e-20 FLOPS = 3.45e+09 Tdav = 0.04 T = 0.60\n", - " --> Site = 20 .. Mmps = 225 Ndav = 1 E = -75.7284671685 Error = 1.23e-20 FLOPS = 1.64e+09 Tdav = 0.01 T = 0.22\n", - " --> Site = 21 .. Mmps = 91 Ndav = 1 E = -75.7284671685 Error = 5.79e-21 FLOPS = 4.45e+08 Tdav = 0.01 T = 0.11\n", - " --> Site = 22 .. Mmps = 34 Ndav = 1 E = -75.7284671685 Error = 1.25e-20 FLOPS = 6.58e+07 Tdav = 0.00 T = 0.05\n", - " --> Site = 23 .. Mmps = 11 Ndav = 1 E = -75.7284671685 Error = 1.61e-20 FLOPS = 1.81e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 24 .. Mmps = 4 Ndav = 1 E = -75.7284671685 Error = 1.46e-20 FLOPS = 1.61e+06 Tdav = 0.00 T = 0.01\n", - " --> Site = 25 .. Mmps = 2 Ndav = 1 E = -75.7284671685 Error = 4.82e-21 FLOPS = 2.44e+05 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 43.990 | E = -75.7284671685 | DE = 6.17e-06 | DW = 2.48e-17\n", - "Time sweep = 43.990 | 58.4 GFLOP/SWP\n", - " | Dmem = 104 MB (0%) | Imem = 1.80 MB (92%) | Hmem = 1.22 GB | Pmem = 0 B\n", - " | Tread = 3.111 | Twrite = 2.479 | Tfpread = 3.105 | Tfpwrite = 2.473 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 896 MB | cpsd = 717 MB\n", - " | Trot = 4.181 | Tctr = 0.025 | Tint = 0.008 | Tmid = 0.000 | Tdctr = 1.554 | Tdiag = 0.162 | Tinfo = 0.630\n", - " | Teff = 26.797 | Tprt = 0.000 | Teig = 9.012 | Tblk = 36.243 | Tmve = 7.530 | Tdm = 0.010 | Tsplt = 0.298 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 44.519 | E = -75.7284670047 | DE = 6.30e-06 | DW = 4.75e-17\n", "\n", "Sweep = 21 | Direction = backward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - " <-- Site = 25 .. Mmps = 3 Ndav = 1 E = -75.7284671685 Error = 0.00e+00 FLOPS = 2.29e+05 Tdav = 0.00 T = 0.00\n", - " <-- Site = 24 .. Mmps = 10 Ndav = 1 E = -75.7284671685 Error = 0.00e+00 FLOPS = 1.51e+06 Tdav = 0.00 T = 0.00\n", - " <-- Site = 23 .. Mmps = 31 Ndav = 1 E = -75.7284671685 Error = 0.00e+00 FLOPS = 1.34e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22 .. Mmps = 89 Ndav = 1 E = -75.7284671685 Error = 0.00e+00 FLOPS = 5.87e+07 Tdav = 0.00 T = 0.04\n", - " <-- Site = 21 .. Mmps = 222 Ndav = 1 E = -75.7284671685 Error = 3.19e-28 FLOPS = 4.09e+08 Tdav = 0.01 T = 0.08\n", - " <-- Site = 20 .. Mmps = 400 Ndav = 1 E = -75.7284671685 Error = 2.04e-26 FLOPS = 1.64e+09 Tdav = 0.01 T = 0.18\n", - " <-- Site = 19 .. Mmps = 690 Ndav = 1 E = -75.7284671685 Error = 1.73e-25 FLOPS = 3.91e+09 Tdav = 0.04 T = 0.51\n", - " <-- Site = 18 .. Mmps = 942 Ndav = 1 E = -75.7284671685 Error = 8.32e-24 FLOPS = 5.09e+09 Tdav = 0.12 T = 1.10\n", - " <-- Site = 17 .. Mmps = 958 Ndav = 1 E = -75.7284671685 Error = 1.00e-22 FLOPS = 3.66e+09 Tdav = 0.30 T = 2.08\n", - " <-- Site = 16 .. Mmps = 1000 Ndav = 1 E = -75.7284671685 Error = 3.58e-22 FLOPS = 5.66e+09 Tdav = 0.26 T = 3.78\n", - " <-- Site = 15 .. Mmps = 1000 Ndav = 1 E = -75.7284671685 Error = 4.91e-21 FLOPS = 6.77e+09 Tdav = 0.31 T = 2.94\n", - " <-- Site = 14 .. Mmps = 1000 Ndav = 1 E = -75.7284671685 Error = 4.55e-21 FLOPS = 6.82e+09 Tdav = 0.37 T = 4.69\n", - " <-- Site = 13 .. Mmps = 1000 Ndav = 2 E = -75.7284671688 Error = 7.72e-21 FLOPS = 7.34e+09 Tdav = 0.83 T = 9.12\n", - " <-- Site = 12 .. Mmps = 1000 Ndav = 2 E = -75.7284671696 Error = 2.05e-20 FLOPS = 6.30e+09 Tdav = 0.99 T = 12.14\n", - " <-- Site = 11 .. Mmps = 1000 Ndav = 2 E = -75.7284671725 Error = 3.49e-20 FLOPS = 8.28e+09 Tdav = 0.71 T = 8.54\n", - " <-- Site = 10 .. Mmps = 1000 Ndav = 2 E = -75.7284671805 Error = 6.00e-20 FLOPS = 6.34e+09 Tdav = 0.78 T = 5.63\n", - " <-- Site = 9 .. Mmps = 1000 Ndav = 2 E = -75.7284671973 Error = 1.14e-19 FLOPS = 7.27e+09 Tdav = 0.55 T = 3.95\n", - " <-- Site = 8 .. Mmps = 1000 Ndav = 3 E = -75.7284672212 Error = 1.60e-19 FLOPS = 8.03e+09 Tdav = 0.59 T = 3.08\n", - " <-- Site = 7 .. Mmps = 1000 Ndav = 3 E = -75.7284673626 Error = 6.52e-19 FLOPS = 7.91e+09 Tdav = 0.48 T = 2.50\n", - " <-- Site = 6 .. Mmps = 1000 Ndav = 3 E = -75.7284676362 Error = 4.66e-19 FLOPS = 4.44e+09 Tdav = 0.62 T = 3.31\n", - " <-- Site = 5 .. Mmps = 438 Ndav = 2 E = -75.7284676368 Error = 4.54e-19 FLOPS = 3.56e+09 Tdav = 0.08 T = 1.31\n", - " <-- Site = 4 .. Mmps = 194 Ndav = 1 E = -75.7284676368 Error = 3.95e-19 FLOPS = 4.45e+08 Tdav = 0.01 T = 0.58\n", - " <-- Site = 3 .. Mmps = 76 Ndav = 1 E = -75.7284676368 Error = 9.15e-20 FLOPS = 4.70e+07 Tdav = 0.01 T = 0.18\n", - " <-- Site = 2 .. Mmps = 25 Ndav = 1 E = -75.7284676368 Error = 1.24e-20 FLOPS = 1.56e+07 Tdav = 0.00 T = 0.05\n", - " <-- Site = 1 .. Mmps = 7 Ndav = 1 E = -75.7284676368 Error = 6.19e-21 FLOPS = 6.18e+06 Tdav = 0.00 T = 0.02\n", - " <-- Site = 0 .. Mmps = 2 Ndav = 1 E = -75.7284676368 Error = 1.14e-35 FLOPS = 8.94e+04 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 110.063 | E = -75.7284676368 | DE = -4.68e-07 | DW = 6.52e-19\n", - "Time sweep = 66.073 | 43.6 GFLOP/SWP\n", - " | Dmem = 104 MB (0%) | Imem = 1.80 MB (92%) | Hmem = 1.22 GB | Pmem = 0 B\n", - " | Tread = 3.336 | Twrite = 2.575 | Tfpread = 3.332 | Tfpwrite = 2.569 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 896 MB | cpsd = 722 MB\n", - " | Trot = 4.225 | Tctr = 20.991 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 0.018 | Tdiag = 0.183 | Tinfo = 0.556\n", - " | Teff = 28.120 | Tprt = 0.000 | Teig = 7.091 | Tblk = 35.768 | Tmve = 30.092 | Tdm = 0.011 | Tsplt = 0.296 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 113.701 | E = -75.7284673359 | DE = -3.31e-07 | DW = 6.22e-19\n", "\n", "Sweep = 22 | Direction = forward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - " --> Site = 0 .. Mmps = 3 Ndav = 1 E = -75.7284676368 Error = 0.00e+00 FLOPS = 4.49e+05 Tdav = 0.00 T = 0.01\n", - " --> Site = 1 .. Mmps = 10 Ndav = 1 E = -75.7284676368 Error = 0.00e+00 FLOPS = 3.28e+06 Tdav = 0.00 T = 0.01\n", - " --> Site = 2 .. Mmps = 35 Ndav = 1 E = -75.7284676368 Error = 0.00e+00 FLOPS = 1.20e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 3 .. Mmps = 126 Ndav = 1 E = -75.7284676368 Error = 0.00e+00 FLOPS = 4.32e+07 Tdav = 0.01 T = 0.03\n", - " --> Site = 4 .. Mmps = 402 Ndav = 1 E = -75.7284676368 Error = 1.02e-20 FLOPS = 3.64e+08 Tdav = 0.02 T = 0.11\n", - " --> Site = 5 .. Mmps = 1000 Ndav = 1 E = -75.7284676368 Error = 8.95e-18 FLOPS = 3.48e+09 Tdav = 0.04 T = 0.31\n", - " --> Site = 6 .. Mmps = 1000 Ndav = 1 E = -75.7284676368 Error = 4.56e-17 FLOPS = 7.18e+09 Tdav = 0.13 T = 1.04\n", - " --> Site = 7 .. Mmps = 1000 Ndav = 2 E = -75.7284676434 Error = 2.91e-18 FLOPS = 7.52e+09 Tdav = 0.34 T = 1.52\n", - " --> Site = 8 .. Mmps = 1000 Ndav = 3 E = -75.7284676909 Error = 2.29e-18 FLOPS = 7.98e+09 Tdav = 0.60 T = 2.01\n", - " --> Site = 9 .. Mmps = 1000 Ndav = 3 E = -75.7284679962 Error = 2.29e-18 FLOPS = 7.93e+09 Tdav = 0.76 T = 2.49\n", - " --> Site = 10 .. Mmps = 1000 Ndav = 3 E = -75.7284680132 Error = 2.33e-18 FLOPS = 4.77e+09 Tdav = 1.55 T = 4.25\n", - " --> Site = 11 .. Mmps = 1000 Ndav = 3 E = -75.7284680317 Error = 1.06e-18 FLOPS = 8.33e+09 Tdav = 1.07 T = 3.82\n", - " --> Site = 12 .. Mmps = 1000 Ndav = 2 E = -75.7284680439 Error = 3.40e-18 FLOPS = 6.19e+09 Tdav = 1.01 T = 7.55\n", - " --> Site = 13 .. Mmps = 1000 Ndav = 2 E = -75.7284680490 Error = 1.01e-18 FLOPS = 8.54e+09 Tdav = 0.71 T = 6.04\n", - " --> Site = 14 .. Mmps = 1000 Ndav = 2 E = -75.7284680508 Error = 1.08e-17 FLOPS = 8.04e+09 Tdav = 0.63 T = 3.94\n", - " --> Site = 15 .. Mmps = 1000 Ndav = 2 E = -75.7284680522 Error = 8.16e-19 FLOPS = 7.76e+09 Tdav = 0.55 T = 2.47\n", - " --> Site = 16 .. Mmps = 967 Ndav = 2 E = -75.7284680525 Error = 3.19e-20 FLOPS = 4.09e+09 Tdav = 0.73 T = 2.85\n", - " --> Site = 17 .. Mmps = 949 Ndav = 1 E = -75.7284680525 Error = 4.81e-20 FLOPS = 5.45e+09 Tdav = 0.20 T = 2.29\n", - " --> Site = 18 .. Mmps = 698 Ndav = 2 E = -75.7284680526 Error = 2.17e-20 FLOPS = 6.10e+09 Tdav = 0.20 T = 1.31\n", - " --> Site = 19 .. Mmps = 404 Ndav = 1 E = -75.7284680526 Error = 2.90e-20 FLOPS = 3.93e+09 Tdav = 0.04 T = 0.60\n", - " --> Site = 20 .. Mmps = 226 Ndav = 1 E = -75.7284680526 Error = 1.49e-20 FLOPS = 1.48e+09 Tdav = 0.01 T = 0.25\n", - " --> Site = 21 .. Mmps = 91 Ndav = 1 E = -75.7284680526 Error = 2.77e-20 FLOPS = 4.63e+08 Tdav = 0.01 T = 0.11\n", - " --> Site = 22 .. Mmps = 32 Ndav = 1 E = -75.7284680526 Error = 8.16e-21 FLOPS = 6.76e+07 Tdav = 0.00 T = 0.04\n", - " --> Site = 23 .. Mmps = 11 Ndav = 1 E = -75.7284680526 Error = 1.40e-20 FLOPS = 1.77e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 24 .. Mmps = 6 Ndav = 1 E = -75.7284680526 Error = 1.45e-21 FLOPS = 8.99e+05 Tdav = 0.00 T = 0.01\n", - " --> Site = 25 .. Mmps = 2 Ndav = 1 E = -75.7284680526 Error = 4.66e-22 FLOPS = 4.52e+05 Tdav = 0.00 T = 0.02\n", - "Time elapsed = 153.386 | E = -75.7284680526 | DE = -4.16e-07 | DW = 4.56e-17\n", - "Time sweep = 43.324 | 53.8 GFLOP/SWP\n", - " | Dmem = 104 MB (0%) | Imem = 1.80 MB (92%) | Hmem = 1.22 GB | Pmem = 0 B\n", - " | Tread = 3.316 | Twrite = 2.470 | Tfpread = 3.305 | Tfpwrite = 2.464 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 896 MB | cpsd = 717 MB\n", - " | Trot = 4.327 | Tctr = 0.020 | Tint = 0.009 | Tmid = 0.000 | Tdctr = 1.669 | Tdiag = 0.167 | Tinfo = 0.639\n", - " | Teff = 26.414 | Tprt = 0.000 | Teig = 8.592 | Tblk = 35.465 | Tmve = 7.655 | Tdm = 0.010 | Tsplt = 0.319 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 157.729 | E = -75.7284677042 | DE = -3.68e-07 | DW = 4.78e-17\n", "\n", "Sweep = 23 | Direction = backward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - " <-- Site = 25 .. Mmps = 3 Ndav = 1 E = -75.7284680526 Error = 0.00e+00 FLOPS = 3.19e+05 Tdav = 0.00 T = 0.00\n", - " <-- Site = 24 .. Mmps = 10 Ndav = 1 E = -75.7284680526 Error = 0.00e+00 FLOPS = 1.33e+06 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23 .. Mmps = 31 Ndav = 1 E = -75.7284680526 Error = 0.00e+00 FLOPS = 9.64e+06 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22 .. Mmps = 89 Ndav = 1 E = -75.7284680526 Error = 0.00e+00 FLOPS = 6.89e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 21 .. Mmps = 222 Ndav = 1 E = -75.7284680526 Error = 3.23e-28 FLOPS = 4.18e+08 Tdav = 0.01 T = 0.09\n", - " <-- Site = 20 .. Mmps = 400 Ndav = 1 E = -75.7284680526 Error = 2.39e-26 FLOPS = 1.67e+09 Tdav = 0.01 T = 0.18\n", - " <-- Site = 19 .. Mmps = 690 Ndav = 1 E = -75.7284680526 Error = 1.73e-25 FLOPS = 3.84e+09 Tdav = 0.04 T = 0.51\n", - " <-- Site = 18 .. Mmps = 942 Ndav = 1 E = -75.7284680526 Error = 6.12e-24 FLOPS = 5.40e+09 Tdav = 0.11 T = 1.08\n", - " <-- Site = 17 .. Mmps = 958 Ndav = 1 E = -75.7284680526 Error = 9.89e-23 FLOPS = 6.71e+09 Tdav = 0.16 T = 1.67\n", - " <-- Site = 16 .. Mmps = 1000 Ndav = 1 E = -75.7284680526 Error = 3.32e-22 FLOPS = 6.52e+09 Tdav = 0.23 T = 2.49\n", - " <-- Site = 15 .. Mmps = 1000 Ndav = 1 E = -75.7284680526 Error = 7.01e-21 FLOPS = 3.86e+09 Tdav = 0.55 T = 4.13\n", - " <-- Site = 14 .. Mmps = 1000 Ndav = 1 E = -75.7284680526 Error = 4.02e-21 FLOPS = 7.39e+09 Tdav = 0.34 T = 5.01\n", - " <-- Site = 13 .. Mmps = 1000 Ndav = 2 E = -75.7284680528 Error = 8.26e-21 FLOPS = 4.98e+09 Tdav = 1.22 T = 7.31\n", - " <-- Site = 12 .. Mmps = 1000 Ndav = 2 E = -75.7284680533 Error = 2.21e-20 FLOPS = 3.83e+09 Tdav = 1.63 T = 14.46\n", - " <-- Site = 11 .. Mmps = 1000 Ndav = 2 E = -75.7284680548 Error = 2.99e-20 FLOPS = 8.13e+09 Tdav = 0.73 T = 10.17\n", - " <-- Site = 10 .. Mmps = 1000 Ndav = 2 E = -75.7284680591 Error = 7.13e-20 FLOPS = 4.43e+09 Tdav = 1.11 T = 5.06\n", - " <-- Site = 9 .. Mmps = 1000 Ndav = 2 E = -75.7284680703 Error = 1.43e-19 FLOPS = 7.94e+09 Tdav = 0.51 T = 4.15\n", - " <-- Site = 8 .. Mmps = 1000 Ndav = 3 E = -75.7284680948 Error = 2.42e-19 FLOPS = 7.90e+09 Tdav = 0.60 T = 3.12\n", - " <-- Site = 7 .. Mmps = 1000 Ndav = 3 E = -75.7284681918 Error = 6.73e-19 FLOPS = 7.95e+09 Tdav = 0.48 T = 2.52\n", - " <-- Site = 6 .. Mmps = 1000 Ndav = 3 E = -75.7284682831 Error = 4.34e-19 FLOPS = 7.19e+09 Tdav = 0.38 T = 2.39\n", - " <-- Site = 5 .. Mmps = 443 Ndav = 2 E = -75.7284682835 Error = 4.60e-19 FLOPS = 1.81e+09 Tdav = 0.16 T = 1.91\n", - " <-- Site = 4 .. Mmps = 193 Ndav = 1 E = -75.7284682835 Error = 4.45e-19 FLOPS = 2.20e+08 Tdav = 0.03 T = 1.42\n", - " <-- Site = 3 .. Mmps = 74 Ndav = 1 E = -75.7284682835 Error = 1.37e-19 FLOPS = 1.57e+07 Tdav = 0.02 T = 0.35\n", - " <-- Site = 2 .. Mmps = 25 Ndav = 1 E = -75.7284682835 Error = 2.09e-20 FLOPS = 7.61e+06 Tdav = 0.01 T = 0.12\n", - " <-- Site = 1 .. Mmps = 9 Ndav = 1 E = -75.7284682835 Error = 9.93e-22 FLOPS = 3.99e+06 Tdav = 0.00 T = 0.03\n", - " <-- Site = 0 .. Mmps = 3 Ndav = 1 E = -75.7284682835 Error = 4.83e-50 FLOPS = 4.77e+05 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 221.827 | E = -75.7284682835 | DE = -2.31e-07 | DW = 6.73e-19\n", - "Time sweep = 68.440 | 43.6 GFLOP/SWP\n", - " | Dmem = 104 MB (0%) | Imem = 1.80 MB (92%) | Hmem = 1.22 GB | Pmem = 0 B\n", - " | Tread = 3.347 | Twrite = 2.247 | Tfpread = 3.342 | Tfpwrite = 2.241 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 896 MB | cpsd = 722 MB\n", - " | Trot = 3.813 | Tctr = 23.502 | Tint = 0.022 | Tmid = 0.000 | Tdctr = 0.016 | Tdiag = 0.192 | Tinfo = 0.738\n", - " | Teff = 26.783 | Tprt = 0.000 | Teig = 8.336 | Tblk = 35.904 | Tmve = 32.332 | Tdm = 0.011 | Tsplt = 0.367 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 224.673 | E = -75.7284679694 | DE = -2.65e-07 | DW = 5.68e-19\n", "\n", "Sweep = 24 | Direction = forward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - " --> Site = 0 .. Mmps = 3 Ndav = 1 E = -75.7284682835 Error = 0.00e+00 FLOPS = 4.77e+05 Tdav = 0.00 T = 0.01\n", - " --> Site = 1 .. Mmps = 10 Ndav = 1 E = -75.7284682835 Error = 0.00e+00 FLOPS = 3.91e+06 Tdav = 0.00 T = 0.02\n", - " --> Site = 2 .. Mmps = 35 Ndav = 1 E = -75.7284682835 Error = 0.00e+00 FLOPS = 1.80e+06 Tdav = 0.02 T = 0.04\n", - " --> Site = 3 .. Mmps = 126 Ndav = 1 E = -75.7284682835 Error = 0.00e+00 FLOPS = 9.61e+06 Tdav = 0.03 T = 0.11\n", - " --> Site = 4 .. Mmps = 404 Ndav = 1 E = -75.7284682835 Error = 1.25e-20 FLOPS = 1.69e+08 Tdav = 0.04 T = 0.21\n", - " --> Site = 5 .. Mmps = 1000 Ndav = 1 E = -75.7284682835 Error = 1.17e-17 FLOPS = 2.08e+09 Tdav = 0.07 T = 0.38\n", - " --> Site = 6 .. Mmps = 1000 Ndav = 1 E = -75.7284682835 Error = 8.07e-17 FLOPS = 4.12e+09 Tdav = 0.22 T = 1.49\n", - " --> Site = 7 .. Mmps = 1000 Ndav = 2 E = -75.7284682879 Error = 2.06e-18 FLOPS = 7.51e+09 Tdav = 0.34 T = 1.85\n", - " --> Site = 8 .. Mmps = 1000 Ndav = 3 E = -75.7284683099 Error = 2.54e-18 FLOPS = 7.43e+09 Tdav = 0.64 T = 2.26\n", - " --> Site = 9 .. Mmps = 1000 Ndav = 3 E = -75.7284683631 Error = 3.94e-18 FLOPS = 4.29e+09 Tdav = 1.40 T = 3.40\n", - " --> Site = 10 .. Mmps = 1000 Ndav = 2 E = -75.7284683772 Error = 8.18e-18 FLOPS = 3.78e+09 Tdav = 1.30 T = 4.83\n", - " --> Site = 11 .. Mmps = 1000 Ndav = 2 E = -75.7284683915 Error = 1.07e-18 FLOPS = 6.46e+09 Tdav = 0.92 T = 3.53\n", - " --> Site = 12 .. Mmps = 1000 Ndav = 2 E = -75.7284683989 Error = 3.06e-18 FLOPS = 3.83e+09 Tdav = 1.63 T = 9.42\n", - " --> Site = 13 .. Mmps = 1000 Ndav = 2 E = -75.7284684019 Error = 6.21e-18 FLOPS = 7.43e+09 Tdav = 0.81 T = 5.49\n", - " --> Site = 14 .. Mmps = 1000 Ndav = 2 E = -75.7284684030 Error = 9.88e-18 FLOPS = 8.13e+09 Tdav = 0.62 T = 4.80\n", - " --> Site = 15 .. Mmps = 1000 Ndav = 2 E = -75.7284684035 Error = 3.50e-18 FLOPS = 3.92e+09 Tdav = 1.08 T = 3.89\n", - " --> Site = 16 .. Mmps = 966 Ndav = 2 E = -75.7284684037 Error = 4.42e-20 FLOPS = 4.66e+09 Tdav = 0.64 T = 3.19\n", - " --> Site = 17 .. Mmps = 953 Ndav = 2 E = -75.7284684038 Error = 3.15e-20 FLOPS = 4.86e+09 Tdav = 0.45 T = 2.05\n", - " --> Site = 18 .. Mmps = 695 Ndav = 1 E = -75.7284684038 Error = 5.09e-20 FLOPS = 5.11e+09 Tdav = 0.12 T = 1.31\n", - " --> Site = 19 .. Mmps = 404 Ndav = 1 E = -75.7284684038 Error = 2.42e-20 FLOPS = 3.92e+09 Tdav = 0.04 T = 0.64\n", - " --> Site = 20 .. Mmps = 225 Ndav = 1 E = -75.7284684038 Error = 1.97e-20 FLOPS = 1.65e+09 Tdav = 0.01 T = 0.23\n", - " --> Site = 21 .. Mmps = 91 Ndav = 1 E = -75.7284684038 Error = 2.11e-20 FLOPS = 4.53e+08 Tdav = 0.01 T = 0.12\n", - " --> Site = 22 .. Mmps = 33 Ndav = 1 E = -75.7284684038 Error = 6.10e-21 FLOPS = 7.64e+07 Tdav = 0.00 T = 0.07\n", - " --> Site = 23 .. Mmps = 13 Ndav = 1 E = -75.7284684038 Error = 9.67e-21 FLOPS = 1.88e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 24 .. Mmps = 4 Ndav = 1 E = -75.7284684038 Error = 4.92e-21 FLOPS = 1.97e+06 Tdav = 0.00 T = 0.01\n", - " --> Site = 25 .. Mmps = 3 Ndav = 1 E = -75.7284684038 Error = 0.00e+00 FLOPS = 2.20e+05 Tdav = 0.00 T = 0.00\n", - "Time elapsed = 271.525 | E = -75.7284684038 | DE = -1.20e-07 | DW = 8.07e-17\n", - "Time sweep = 49.698 | 49.1 GFLOP/SWP\n", - " | Dmem = 104 MB (0%) | Imem = 1.80 MB (92%) | Hmem = 1.22 GB | Pmem = 0 B\n", - " | Tread = 4.086 | Twrite = 2.738 | Tfpread = 4.080 | Tfpwrite = 2.731 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 896 MB | cpsd = 717 MB\n", - " | Trot = 4.649 | Tctr = 0.035 | Tint = 0.014 | Tmid = 0.000 | Tdctr = 2.168 | Tdiag = 0.214 | Tinfo = 0.873\n", - " | Teff = 29.910 | Tprt = 0.000 | Teig = 10.407 | Tblk = 40.868 | Tmve = 8.504 | Tdm = 0.017 | Tsplt = 0.360 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 268.982 | E = -75.7284681140 | DE = -1.45e-07 | DW = 5.17e-17\n", "\n", "Sweep = 25 | Direction = backward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - " <-- Site = 25 .. Mmps = 3 Ndav = 1 E = -75.7284684038 Error = 0.00e+00 FLOPS = 2.69e+04 Tdav = 0.00 T = 0.01\n", - " <-- Site = 24 .. Mmps = 10 Ndav = 1 E = -75.7284684038 Error = 0.00e+00 FLOPS = 1.58e+06 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23 .. Mmps = 31 Ndav = 1 E = -75.7284684038 Error = 0.00e+00 FLOPS = 5.11e+06 Tdav = 0.00 T = 0.03\n", - " <-- Site = 22 .. Mmps = 89 Ndav = 1 E = -75.7284684038 Error = 0.00e+00 FLOPS = 5.12e+07 Tdav = 0.00 T = 0.04\n", - " <-- Site = 21 .. Mmps = 222 Ndav = 1 E = -75.7284684038 Error = 1.21e-27 FLOPS = 4.27e+08 Tdav = 0.01 T = 0.11\n", - " <-- Site = 20 .. Mmps = 400 Ndav = 1 E = -75.7284684038 Error = 2.29e-26 FLOPS = 1.66e+09 Tdav = 0.01 T = 0.18\n", - " <-- Site = 19 .. Mmps = 690 Ndav = 1 E = -75.7284684038 Error = 1.87e-25 FLOPS = 1.51e+09 Tdav = 0.10 T = 0.65\n", - " <-- Site = 18 .. Mmps = 942 Ndav = 1 E = -75.7284684038 Error = 8.50e-24 FLOPS = 5.18e+09 Tdav = 0.12 T = 1.33\n", - " <-- Site = 17 .. Mmps = 958 Ndav = 1 E = -75.7284684038 Error = 7.87e-23 FLOPS = 3.34e+09 Tdav = 0.33 T = 2.38\n", - " <-- Site = 16 .. Mmps = 1000 Ndav = 1 E = -75.7284684038 Error = 3.44e-22 FLOPS = 6.35e+09 Tdav = 0.23 T = 4.09\n", - " <-- Site = 15 .. Mmps = 1000 Ndav = 1 E = -75.7284684038 Error = 5.11e-21 FLOPS = 4.16e+09 Tdav = 0.51 T = 4.18\n", - " <-- Site = 14 .. Mmps = 1000 Ndav = 1 E = -75.7284684038 Error = 5.03e-21 FLOPS = 2.83e+09 Tdav = 0.89 T = 6.86\n", - " <-- Site = 13 .. Mmps = 1000 Ndav = 1 E = -75.7284684038 Error = 7.10e-21 FLOPS = 5.55e+09 Tdav = 0.55 T = 9.20\n", - " <-- Site = 12 .. Mmps = 1000 Ndav = 2 E = -75.7284684042 Error = 2.25e-20 FLOPS = 7.41e+09 Tdav = 0.84 T = 11.84\n", - " <-- Site = 11 .. Mmps = 1000 Ndav = 2 E = -75.7284684052 Error = 3.86e-20 FLOPS = 8.19e+09 Tdav = 0.72 T = 10.18\n", - " <-- Site = 10 .. Mmps = 1000 Ndav = 2 E = -75.7284684080 Error = 7.19e-20 FLOPS = 8.08e+09 Tdav = 0.61 T = 4.10\n", - " <-- Site = 9 .. Mmps = 1000 Ndav = 2 E = -75.7284684153 Error = 1.04e-19 FLOPS = 7.57e+09 Tdav = 0.53 T = 3.44\n", - " <-- Site = 8 .. Mmps = 1000 Ndav = 2 E = -75.7284684290 Error = 1.77e-19 FLOPS = 3.99e+09 Tdav = 0.79 T = 3.89\n", - " <-- Site = 7 .. Mmps = 1000 Ndav = 3 E = -75.7284684498 Error = 5.29e-19 FLOPS = 8.02e+09 Tdav = 0.48 T = 3.20\n", - " <-- Site = 6 .. Mmps = 1000 Ndav = 3 E = -75.7284684801 Error = 5.25e-19 FLOPS = 7.42e+09 Tdav = 0.37 T = 2.02\n", - " <-- Site = 5 .. Mmps = 437 Ndav = 1 E = -75.7284684801 Error = 4.48e-19 FLOPS = 3.21e+09 Tdav = 0.05 T = 1.01\n", - " <-- Site = 4 .. Mmps = 195 Ndav = 1 E = -75.7284684801 Error = 3.78e-19 FLOPS = 4.53e+08 Tdav = 0.01 T = 0.59\n", - " <-- Site = 3 .. Mmps = 76 Ndav = 1 E = -75.7284684801 Error = 1.10e-19 FLOPS = 5.08e+07 Tdav = 0.01 T = 0.17\n", - " <-- Site = 2 .. Mmps = 24 Ndav = 1 E = -75.7284684801 Error = 3.22e-20 FLOPS = 3.08e+07 Tdav = 0.00 T = 0.05\n", - " <-- Site = 1 .. Mmps = 8 Ndav = 1 E = -75.7284684801 Error = 1.25e-49 FLOPS = 7.09e+06 Tdav = 0.00 T = 0.02\n", - " <-- Site = 0 .. Mmps = 4 Ndav = 1 E = -75.7284684801 Error = 0.00e+00 FLOPS = 5.35e+05 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 341.321 | E = -75.7284684801 | DE = -7.63e-08 | DW = 5.29e-19\n", - "Time sweep = 69.796 | 39.2 GFLOP/SWP\n", - " | Dmem = 104 MB (0%) | Imem = 1.80 MB (92%) | Hmem = 1.22 GB | Pmem = 0 B\n", - " | Tread = 3.721 | Twrite = 2.651 | Tfpread = 3.717 | Tfpwrite = 2.645 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 896 MB | cpsd = 722 MB\n", - " | Trot = 4.341 | Tctr = 23.008 | Tint = 0.015 | Tmid = 0.000 | Tdctr = 0.016 | Tdiag = 0.218 | Tinfo = 0.642\n", - " | Teff = 28.863 | Tprt = 0.000 | Teig = 7.168 | Tblk = 36.876 | Tmve = 32.698 | Tdm = 0.021 | Tsplt = 0.402 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 334.809 | E = -75.7284681905 | DE = -7.64e-08 | DW = 5.74e-19\n", "\n", "Sweep = 26 | Direction = forward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - " --> Site = 0 .. Mmps = 3 Ndav = 1 E = -75.7284684801 Error = 0.00e+00 FLOPS = 5.31e+05 Tdav = 0.00 T = 0.00\n", - " --> Site = 1 .. Mmps = 10 Ndav = 1 E = -75.7284684801 Error = 0.00e+00 FLOPS = 5.61e+06 Tdav = 0.00 T = 0.00\n", - " --> Site = 2 .. Mmps = 35 Ndav = 1 E = -75.7284684801 Error = 0.00e+00 FLOPS = 1.46e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 3 .. Mmps = 126 Ndav = 1 E = -75.7284684801 Error = 0.00e+00 FLOPS = 2.41e+07 Tdav = 0.01 T = 0.04\n", - " --> Site = 4 .. Mmps = 403 Ndav = 1 E = -75.7284684801 Error = 6.40e-21 FLOPS = 4.35e+08 Tdav = 0.02 T = 0.10\n", - " --> Site = 5 .. Mmps = 1000 Ndav = 1 E = -75.7284684801 Error = 2.52e-17 FLOPS = 3.53e+09 Tdav = 0.04 T = 0.32\n", - " --> Site = 6 .. Mmps = 1000 Ndav = 1 E = -75.7284684801 Error = 9.00e-18 FLOPS = 6.54e+09 Tdav = 0.14 T = 0.95\n", - " --> Site = 7 .. Mmps = 1000 Ndav = 2 E = -75.7284684834 Error = 2.89e-18 FLOPS = 7.76e+09 Tdav = 0.33 T = 1.55\n", - " --> Site = 8 .. Mmps = 1000 Ndav = 2 E = -75.7284684939 Error = 2.93e-18 FLOPS = 5.41e+09 Tdav = 0.59 T = 2.09\n", - " --> Site = 9 .. Mmps = 1000 Ndav = 2 E = -75.7284685099 Error = 3.33e-18 FLOPS = 4.97e+09 Tdav = 0.81 T = 3.61\n", - " --> Site = 10 .. Mmps = 1000 Ndav = 2 E = -75.7284685208 Error = 2.84e-18 FLOPS = 7.03e+09 Tdav = 0.70 T = 2.73\n", - " --> Site = 11 .. Mmps = 1000 Ndav = 2 E = -75.7284685305 Error = 3.73e-18 FLOPS = 7.96e+09 Tdav = 0.74 T = 3.10\n", - " --> Site = 12 .. Mmps = 1000 Ndav = 2 E = -75.7284685354 Error = 1.91e-18 FLOPS = 8.18e+09 Tdav = 0.76 T = 9.09\n", - " --> Site = 13 .. Mmps = 1000 Ndav = 2 E = -75.7284685377 Error = 9.74e-19 FLOPS = 8.59e+09 Tdav = 0.70 T = 4.66\n", - " --> Site = 14 .. Mmps = 1000 Ndav = 2 E = -75.7284685384 Error = 7.73e-19 FLOPS = 7.97e+09 Tdav = 0.63 T = 3.93\n", - " --> Site = 15 .. Mmps = 1000 Ndav = 2 E = -75.7284685386 Error = 2.84e-18 FLOPS = 4.82e+09 Tdav = 0.88 T = 3.86\n", - " --> Site = 16 .. Mmps = 966 Ndav = 1 E = -75.7284685386 Error = 4.37e-20 FLOPS = 6.81e+09 Tdav = 0.22 T = 2.17\n", - " --> Site = 17 .. Mmps = 950 Ndav = 1 E = -75.7284685386 Error = 4.02e-20 FLOPS = 6.30e+09 Tdav = 0.17 T = 1.59\n", - " --> Site = 18 .. Mmps = 694 Ndav = 1 E = -75.7284685386 Error = 4.93e-20 FLOPS = 5.54e+09 Tdav = 0.11 T = 1.20\n", - " --> Site = 19 .. Mmps = 405 Ndav = 1 E = -75.7284685386 Error = 1.67e-20 FLOPS = 3.67e+09 Tdav = 0.04 T = 0.62\n", - " --> Site = 20 .. Mmps = 224 Ndav = 1 E = -75.7284685386 Error = 3.71e-20 FLOPS = 1.58e+09 Tdav = 0.01 T = 0.23\n", - " --> Site = 21 .. Mmps = 93 Ndav = 1 E = -75.7284685386 Error = 1.52e-20 FLOPS = 4.57e+08 Tdav = 0.01 T = 0.10\n", - " --> Site = 22 .. Mmps = 34 Ndav = 1 E = -75.7284685386 Error = 6.06e-21 FLOPS = 4.15e+07 Tdav = 0.00 T = 0.05\n", - " --> Site = 23 .. Mmps = 11 Ndav = 1 E = -75.7284685386 Error = 1.56e-20 FLOPS = 1.87e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 24 .. Mmps = 4 Ndav = 1 E = -75.7284685386 Error = 7.53e-21 FLOPS = 4.85e+05 Tdav = 0.00 T = 0.01\n", - " --> Site = 25 .. Mmps = 3 Ndav = 1 E = -75.7284685386 Error = 0.00e+00 FLOPS = 1.21e+05 Tdav = 0.00 T = 0.00\n", - "Time elapsed = 383.545 | E = -75.7284685386 | DE = -5.85e-08 | DW = 2.52e-17\n", - "Time sweep = 42.225 | 43.4 GFLOP/SWP\n", - " | Dmem = 104 MB (0%) | Imem = 1.80 MB (92%) | Hmem = 1.22 GB | Pmem = 0 B\n", - " | Tread = 3.329 | Twrite = 2.584 | Tfpread = 3.322 | Tfpwrite = 2.578 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 896 MB | cpsd = 717 MB\n", - " | Trot = 4.008 | Tctr = 0.019 | Tint = 0.009 | Tmid = 0.000 | Tdctr = 1.611 | Tdiag = 0.169 | Tinfo = 0.618\n", - " | Teff = 27.284 | Tprt = 0.000 | Teig = 6.931 | Tblk = 34.649 | Tmve = 7.380 | Tdm = 0.010 | Tsplt = 0.299 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 378.814 | E = -75.7284682377 | DE = -4.72e-08 | DW = 1.32e-17\n", "\n", "Sweep = 27 | Direction = backward | Bond dimension = 1000 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - " <-- Site = 25 .. Mmps = 3 Ndav = 1 E = -75.7284685386 Error = 0.00e+00 FLOPS = 1.49e+05 Tdav = 0.00 T = 0.00\n", - " <-- Site = 24 .. Mmps = 10 Ndav = 1 E = -75.7284685386 Error = 0.00e+00 FLOPS = 1.01e+06 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23 .. Mmps = 31 Ndav = 1 E = -75.7284685386 Error = 0.00e+00 FLOPS = 1.62e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22 .. Mmps = 89 Ndav = 1 E = -75.7284685386 Error = 0.00e+00 FLOPS = 6.36e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 21 .. Mmps = 222 Ndav = 1 E = -75.7284685386 Error = 1.00e-27 FLOPS = 4.40e+08 Tdav = 0.01 T = 0.08\n", - " <-- Site = 20 .. Mmps = 400 Ndav = 1 E = -75.7284685386 Error = 1.58e-26 FLOPS = 1.60e+09 Tdav = 0.01 T = 0.18\n", - " <-- Site = 19 .. Mmps = 690 Ndav = 1 E = -75.7284685386 Error = 1.68e-25 FLOPS = 3.87e+09 Tdav = 0.04 T = 0.51\n", - " <-- Site = 18 .. Mmps = 942 Ndav = 1 E = -75.7284685386 Error = 7.20e-24 FLOPS = 5.53e+09 Tdav = 0.11 T = 1.57\n", - " <-- Site = 17 .. Mmps = 958 Ndav = 1 E = -75.7284685386 Error = 1.17e-22 FLOPS = 6.52e+09 Tdav = 0.17 T = 1.72\n", - " <-- Site = 16 .. Mmps = 1000 Ndav = 1 E = -75.7284685386 Error = 3.37e-22 FLOPS = 4.18e+09 Tdav = 0.36 T = 3.74\n", - " <-- Site = 15 .. Mmps = 1000 Ndav = 1 E = -75.7284685386 Error = 5.28e-21 FLOPS = 6.98e+09 Tdav = 0.30 T = 3.15\n", - " <-- Site = 14 .. Mmps = 1000 Ndav = 1 E = -75.7284685386 Error = 4.19e-21 FLOPS = 7.41e+09 Tdav = 0.34 T = 4.61\n", - " <-- Site = 13 .. Mmps = 1000 Ndav = 1 E = -75.7284685386 Error = 6.48e-21 FLOPS = 7.34e+09 Tdav = 0.41 T = 8.17\n", - " <-- Site = 12 .. Mmps = 1000 Ndav = 2 E = -75.7284685389 Error = 2.05e-20 FLOPS = 4.64e+09 Tdav = 1.35 T = 10.71\n", - " <-- Site = 11 .. Mmps = 1000 Ndav = 2 E = -75.7284685396 Error = 3.57e-20 FLOPS = 8.39e+09 Tdav = 0.70 T = 9.50\n", - " <-- Site = 10 .. Mmps = 1000 Ndav = 2 E = -75.7284685415 Error = 7.10e-20 FLOPS = 4.20e+09 Tdav = 1.17 T = 4.75\n", - " <-- Site = 9 .. Mmps = 1000 Ndav = 2 E = -75.7284685463 Error = 1.07e-19 FLOPS = 7.97e+09 Tdav = 0.50 T = 4.45\n", - " <-- Site = 8 .. Mmps = 1000 Ndav = 2 E = -75.7284685551 Error = 2.05e-19 FLOPS = 7.93e+09 Tdav = 0.40 T = 2.98\n", - " <-- Site = 7 .. Mmps = 1000 Ndav = 2 E = -75.7284685654 Error = 5.46e-19 FLOPS = 1.67e+09 Tdav = 1.53 T = 5.16\n", - " <-- Site = 6 .. Mmps = 1000 Ndav = 3 E = -75.7284685877 Error = 4.25e-19 FLOPS = 4.65e+09 Tdav = 0.59 T = 5.21\n", - " <-- Site = 5 .. Mmps = 442 Ndav = 1 E = -75.7284685877 Error = 4.30e-19 FLOPS = 3.57e+09 Tdav = 0.04 T = 1.17\n", - " <-- Site = 4 .. Mmps = 192 Ndav = 1 E = -75.7284685877 Error = 4.15e-19 FLOPS = 4.51e+08 Tdav = 0.02 T = 0.59\n", - " <-- Site = 3 .. Mmps = 76 Ndav = 1 E = -75.7284685877 Error = 1.24e-19 FLOPS = 4.80e+07 Tdav = 0.01 T = 0.18\n", - " <-- Site = 2 .. Mmps = 24 Ndav = 1 E = -75.7284685877 Error = 2.38e-20 FLOPS = 2.56e+07 Tdav = 0.00 T = 0.06\n", - " <-- Site = 1 .. Mmps = 9 Ndav = 1 E = -75.7284685877 Error = 3.79e-34 FLOPS = 5.77e+06 Tdav = 0.00 T = 0.02\n", - " <-- Site = 0 .. Mmps = 2 Ndav = 1 E = -75.7284685877 Error = 1.73e-47 FLOPS = 8.08e+05 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 452.390 | E = -75.7284685877 | DE = -4.90e-08 | DW = 5.46e-19\n", - "Time sweep = 68.844 | 38.0 GFLOP/SWP\n", - " | Dmem = 104 MB (0%) | Imem = 1.80 MB (92%) | Hmem = 1.22 GB | Pmem = 0 B\n", - " | Tread = 3.942 | Twrite = 2.441 | Tfpread = 3.921 | Tfpwrite = 2.435 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 896 MB | cpsd = 722 MB\n", - " | Trot = 3.824 | Tctr = 23.436 | Tint = 0.007 | Tmid = 0.000 | Tdctr = 0.012 | Tdiag = 0.189 | Tinfo = 0.754\n", - " | Teff = 27.199 | Tprt = 0.000 | Teig = 8.069 | Tblk = 36.011 | Tmve = 32.585 | Tdm = 0.012 | Tsplt = 0.381 | Tsvd = 0.000 | Torth = 0.000\n", + "Time elapsed = 444.799 | E = -75.7284682709 | DE = -3.32e-08 | DW = 6.42e-19\n", "\n", - "ATTENTION: DMRG is not converged to desired tolerance of 1.000e-08\n", - "DMRG energy (variational) = -75.728468587667081\n" + "ATTENTION: DMRG is not converged to desired tolerance of 1.00e-08\n", + "DMRG energy (variational) = -75.728468270883781\n" ] } - ], - "source": [ - "bond_dims = [250] * 4 + [500] * 4 + [750] * 4 + [1000] * 4\n", - "noises = [1e-4] * 4 + [1e-5] * 12 + [0]\n", - "thrds = [1e-8] * 20\n", - "\n", - "energy = driver.dmrg(mpo, ket, n_sweeps=28, bond_dims=bond_dims, noises=noises,\n", - " thrds=thrds, iprint=2, twosite_to_onesite=20)\n", - "print('DMRG energy (variational) = %20.15f' % energy)" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "rLUKdqQ6d13V" - }, "source": [ "## The Reverse Schedule\n", "\n", "For the reverse schedule, we decrease the bond dimension to make the energy at each bond dimension fully converged. The noise should be zero. The MPS is first changed from the 1-site format to the 2-site format. And the reverse schedule has to be done fully using the 2-site DMRG (since 1-site DMRG with zero noise will generate close-to-zero discarded weights). The energy convergence tolerance is set to zero to prevent early stop.\n", "\n", - "Note that the reverse schedule will destroy the data in the optimized MPS. We can first backup the MPS by copying it to another tag ``KET-ORIG``. If you want to later compute the properties on the optimized MPS, the ``ket_orig`` MPS should be used. If you want to restart a calculation from the MPS (automatically) stored in the scratch foloder, you can load it using its tag (for example, using ``ket = driver.load_mps(tag='KET-ORIG')``." - ] + "Note that the reverse schedule will destroy the data in the optimized MPS. We can first backup the MPS by copying it to another tag ``KET-ORIG``. If you want to later compute the properties on the optimized MPS, the ``ket_orig`` MPS should be used. If you want to restart a calculation from the MPS (automatically) stored in the scratch foloder, you can load it using its tag (for example, using ``ket = driver.load_mps(tag='KET-ORIG')``).\n", + "\n", + "In practice, it is recommended to perform an even number of sweeps for each reverse schedule bond dimension, to prevent DW difference for odd/even sweeps. The first reverse schedule bond dimension should be slightly smaller than the last forward schedule bond dimension, to make sure that the energy obatined in reverse schedule is fully converged. One can also discard the energy from the first bond dimension to ensure this. The last bond dimension in reverse schedule should not be too small, since it is hard to obtain a stable energy of a very low bond dimension MPS." + ], + "metadata": { + "id": "rLUKdqQ6d13V" + } }, { "cell_type": "code", - "execution_count": 5, + "source": [ + "bond_dims = [800] * 4 + [700] * 4 + [600] * 4 + [500] * 4\n", + "noises = [0] * 16\n", + "thrds = [1e-10] * 16\n", + "\n", + "ket_orig = driver.copy_mps(ket, tag='KET-ORIG')\n", + "ket = driver.adjust_mps(ket, dot=2)[0]\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=16, bond_dims=bond_dims, noises=noises,\n", + " tol=0, thrds=thrds, iprint=1)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "dOr3oMovfiS1", - "outputId": "a3d3a79b-1826-4ea9-dbb2-ed05d572147a" + "outputId": "48a81eb2-0bb2-44ee-a76e-f5eedf019521" }, + "execution_count": 4, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "Environment initialization | Nsites = 26 | Center = 0\n", - " INIT-R <-- Site = 23 .. Bmem = 200 B Rmem = 200 B T = 0.00\n", - " INIT-R <-- Site = 22 .. Bmem = 2.47 KB Rmem = 2.47 KB T = 0.00\n", - " INIT-R <-- Site = 21 .. Bmem = 22.6 KB Rmem = 19.5 KB T = 0.00\n", - " INIT-R <-- Site = 20 .. Bmem = 200 KB Rmem = 146 KB T = 0.01\n", - " INIT-R <-- Site = 19 .. Bmem = 2.04 MB Rmem = 1.16 MB T = 0.04\n", - " INIT-R <-- Site = 18 .. Bmem = 16.5 MB Rmem = 4.84 MB T = 0.10\n", - " INIT-R <-- Site = 17 .. Bmem = 67.6 MB Rmem = 18.5 MB T = 0.28\n", - " INIT-R <-- Site = 16 .. Bmem = 248 MB Rmem = 44.2 MB T = 0.69\n", - " INIT-R <-- Site = 15 .. Bmem = 580 MB Rmem = 52.9 MB T = 1.69\n", - " INIT-R <-- Site = 14 .. Bmem = 726 MB Rmem = 70.0 MB T = 2.32\n", - " INIT-R <-- Site = 13 .. Bmem = 957 MB Rmem = 83.6 MB T = 2.71\n", - " INIT-R <-- Site = 12 .. Bmem = 1.10 GB Rmem = 100 MB T = 3.00\n", - " INIT-R <-- Site = 11 .. Bmem = 1.14 GB Rmem = 103 MB T = 3.78\n", - " INIT-R <-- Site = 10 .. Bmem = 1.09 GB Rmem = 98.6 MB T = 7.72\n", - " INIT-R <-- Site = 9 .. Bmem = 961 MB Rmem = 83.0 MB T = 1.87\n", - " INIT-R <-- Site = 8 .. Bmem = 807 MB Rmem = 69.0 MB T = 1.58\n", - " INIT-R <-- Site = 7 .. Bmem = 669 MB Rmem = 55.7 MB T = 1.31\n", - " INIT-R <-- Site = 6 .. Bmem = 541 MB Rmem = 44.9 MB T = 1.12\n", - " INIT-R <-- Site = 5 .. Bmem = 433 MB Rmem = 35.9 MB T = 0.96\n", - " INIT-R <-- Site = 4 .. Bmem = 343 MB Rmem = 25.6 MB T = 0.77\n", - " INIT-R <-- Site = 3 .. Bmem = 244 MB Rmem = 3.84 MB T = 0.85\n", - " INIT-R <-- Site = 2 .. Bmem = 36.3 MB Rmem = 598 KB T = 0.28\n", - " INIT-R <-- Site = 1 .. Bmem = 4.30 MB Rmem = 128 KB T = 0.07\n", - " INIT-R <-- Site = 0 .. Bmem = 750 KB Rmem = 16.2 KB T = 0.02\n", - "Time init sweep = 31.333 | MaxBmem = 1.14 GB | MaxRmem = 103 MB\n", - " | Tread = 0.000 | Twrite = 3.201 | Tfpread = 0.000 | Tfpwrite = 2.716 | data = 896 MB | cpsd = 722 MB | Tasync = 0.000\n", - "\n", "\n", - "Sweep = 0 | Direction = forward | Bond dimension = 800 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7284685877 Error = 0.00e+00 FLOPS = 3.83e+06 Tdav = 0.00 T = 0.00\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7284685877 Error = 0.00e+00 FLOPS = 4.11e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7284685877 Error = 0.00e+00 FLOPS = 1.26e+08 Tdav = 0.00 T = 0.06\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7284685877 Error = 0.00e+00 FLOPS = 4.64e+08 Tdav = 0.02 T = 0.27\n", - " --> Site = 4- 5 .. Mmps = 402 Ndav = 1 E = -75.7284685877 Error = 1.22e-20 FLOPS = 2.27e+09 Tdav = 0.09 T = 1.02\n", - " --> Site = 5- 6 .. Mmps = 800 Ndav = 2 E = -75.7284685910 Error = 1.46e-06 FLOPS = 5.55e+09 Tdav = 0.30 T = 1.49\n", - " --> Site = 6- 7 .. Mmps = 800 Ndav = 4 E = -75.7284662329 Error = 6.90e-06 FLOPS = 8.56e+09 Tdav = 1.11 T = 2.56\n", - " --> Site = 7- 8 .. Mmps = 800 Ndav = 4 E = -75.7284317218 Error = 4.09e-06 FLOPS = 9.26e+09 Tdav = 1.10 T = 2.78\n", - " --> Site = 8- 9 .. Mmps = 800 Ndav = 3 E = -75.7284105328 Error = 1.75e-06 FLOPS = 9.04e+09 Tdav = 0.99 T = 3.04\n", - " --> Site = 9- 10 .. Mmps = 800 Ndav = 3 E = -75.7284020713 Error = 1.71e-06 FLOPS = 5.41e+09 Tdav = 1.92 T = 5.18\n", - " --> Site = 10- 11 .. Mmps = 800 Ndav = 3 E = -75.7283929203 Error = 6.95e-07 FLOPS = 8.73e+09 Tdav = 1.40 T = 4.52\n", - " --> Site = 11- 12 .. Mmps = 800 Ndav = 3 E = -75.7283888488 Error = 1.58e-07 FLOPS = 5.53e+09 Tdav = 2.56 T = 10.51\n", - " --> Site = 12- 13 .. Mmps = 800 Ndav = 3 E = -75.7283879728 Error = 6.46e-08 FLOPS = 8.55e+09 Tdav = 1.67 T = 9.29\n", - " --> Site = 13- 14 .. Mmps = 800 Ndav = 2 E = -75.7283875719 Error = 1.73e-08 FLOPS = 8.50e+09 Tdav = 1.02 T = 7.92\n", - " --> Site = 14- 15 .. Mmps = 800 Ndav = 2 E = -75.7283874520 Error = 6.10e-09 FLOPS = 8.46e+09 Tdav = 0.86 T = 4.25\n", - " --> Site = 15- 16 .. Mmps = 800 Ndav = 2 E = -75.7283874085 Error = 4.35e-09 FLOPS = 6.65e+09 Tdav = 0.76 T = 3.01\n", - " --> Site = 16- 17 .. Mmps = 798 Ndav = 2 E = -75.7283873726 Error = 3.71e-20 FLOPS = 4.88e+09 Tdav = 0.71 T = 3.92\n", - " --> Site = 17- 18 .. Mmps = 758 Ndav = 1 E = -75.7283873726 Error = 4.32e-20 FLOPS = 6.13e+09 Tdav = 0.16 T = 1.55\n", - " --> Site = 18- 19 .. Mmps = 681 Ndav = 1 E = -75.7283873726 Error = 2.73e-20 FLOPS = 5.42e+09 Tdav = 0.08 T = 1.00\n", - " --> Site = 19- 20 .. Mmps = 396 Ndav = 1 E = -75.7283873726 Error = 2.64e-20 FLOPS = 3.67e+09 Tdav = 0.04 T = 0.64\n", - " --> Site = 20- 21 .. Mmps = 215 Ndav = 1 E = -75.7283873726 Error = 1.83e-20 FLOPS = 1.49e+09 Tdav = 0.01 T = 0.25\n", - " --> Site = 21- 22 .. Mmps = 91 Ndav = 1 E = -75.7283873726 Error = 1.39e-20 FLOPS = 3.89e+08 Tdav = 0.01 T = 0.11\n", - " --> Site = 22- 23 .. Mmps = 33 Ndav = 1 E = -75.7283873726 Error = 1.15e-20 FLOPS = 6.34e+07 Tdav = 0.00 T = 0.05\n", - " --> Site = 23- 24 .. Mmps = 12 Ndav = 1 E = -75.7283873726 Error = 1.25e-20 FLOPS = 1.64e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 24- 25 .. Mmps = 5 Ndav = 1 E = -75.7283873726 Error = 5.01e-22 FLOPS = 1.84e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 63.662 | E = -75.7284685910 | DW = 6.90e-06\n", - "Time sweep = 63.662 | 100 GFLOP/SWP\n", - " | Dmem = 105 MB (1%) | Imem = 2.81 MB (94%) | Hmem = 1.84 GB | Pmem = 0 B\n", - " | Tread = 2.844 | Twrite = 1.469 | Tfpread = 2.838 | Tfpwrite = 1.463 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 577 MB | cpsd = 463 MB\n", - " | Trot = 2.427 | Tctr = 0.018 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 1.288 | Tdiag = 0.186 | Tinfo = 0.575\n", - " | Teff = 43.476 | Tprt = 0.000 | Teig = 14.808 | Tblk = 58.855 | Tmve = 4.624 | Tdm = 0.009 | Tsplt = 0.196 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 0 | Direction = forward | Bond dimension = 800 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 75.765 | E = -75.7284682749 | DW = 6.89e-06\n", "\n", - "Sweep = 1 | Direction = backward | Bond dimension = 800 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7283873726 Error = 0.00e+00 FLOPS = 9.08e+05 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7283873726 Error = 0.00e+00 FLOPS = 1.47e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7283873726 Error = 0.00e+00 FLOPS = 6.00e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 21- 22 .. Mmps = 89 Ndav = 1 E = -75.7283873726 Error = 0.00e+00 FLOPS = 3.72e+08 Tdav = 0.01 T = 0.07\n", - " <-- Site = 20- 21 .. Mmps = 213 Ndav = 1 E = -75.7283873726 Error = 2.06e-27 FLOPS = 1.54e+09 Tdav = 0.01 T = 0.17\n", - " <-- Site = 19- 20 .. Mmps = 389 Ndav = 1 E = -75.7283873726 Error = 2.06e-26 FLOPS = 3.24e+09 Tdav = 0.05 T = 0.49\n", - " <-- Site = 18- 19 .. Mmps = 674 Ndav = 1 E = -75.7283873726 Error = 1.97e-25 FLOPS = 4.77e+09 Tdav = 0.09 T = 0.83\n", - " <-- Site = 17- 18 .. Mmps = 751 Ndav = 1 E = -75.7283873726 Error = 3.48e-23 FLOPS = 6.14e+09 Tdav = 0.16 T = 1.47\n", - " <-- Site = 16- 17 .. Mmps = 789 Ndav = 1 E = -75.7283873726 Error = 1.33e-22 FLOPS = 6.65e+09 Tdav = 0.22 T = 1.76\n", - " <-- Site = 15- 16 .. Mmps = 800 Ndav = 2 E = -75.7283874044 Error = 3.67e-09 FLOPS = 4.59e+09 Tdav = 0.97 T = 3.18\n", - " <-- Site = 14- 15 .. Mmps = 800 Ndav = 2 E = -75.7283874026 Error = 3.56e-09 FLOPS = 8.34e+09 Tdav = 0.71 T = 4.43\n", - " <-- Site = 13- 14 .. Mmps = 800 Ndav = 2 E = -75.7283874680 Error = 1.23e-08 FLOPS = 8.11e+09 Tdav = 0.85 T = 5.16\n", - " <-- Site = 12- 13 .. Mmps = 800 Ndav = 3 E = -75.7283877191 Error = 4.86e-08 FLOPS = 7.88e+09 Tdav = 1.39 T = 9.84\n", - " <-- Site = 11- 12 .. Mmps = 800 Ndav = 3 E = -75.7283880685 Error = 1.02e-07 FLOPS = 8.39e+09 Tdav = 1.30 T = 6.92\n", - " <-- Site = 10- 11 .. Mmps = 800 Ndav = 3 E = -75.7283901187 Error = 4.33e-07 FLOPS = 7.77e+09 Tdav = 1.20 T = 5.07\n", - " <-- Site = 9- 10 .. Mmps = 800 Ndav = 4 E = -75.7283933542 Error = 1.00e-06 FLOPS = 8.29e+09 Tdav = 1.26 T = 3.32\n", - " <-- Site = 8- 9 .. Mmps = 800 Ndav = 4 E = -75.7283927746 Error = 8.96e-07 FLOPS = 8.51e+09 Tdav = 1.06 T = 2.82\n", - " <-- Site = 7- 8 .. Mmps = 800 Ndav = 4 E = -75.7283979995 Error = 1.80e-06 FLOPS = 8.69e+09 Tdav = 0.90 T = 2.37\n", - " <-- Site = 6- 7 .. Mmps = 800 Ndav = 5 E = -75.7284030967 Error = 2.48e-06 FLOPS = 4.75e+09 Tdav = 1.89 T = 3.59\n", - " <-- Site = 5- 6 .. Mmps = 800 Ndav = 4 E = -75.7283955903 Error = 1.07e-06 FLOPS = 6.27e+09 Tdav = 0.38 T = 1.43\n", - " <-- Site = 4- 5 .. Mmps = 432 Ndav = 3 E = -75.7283900842 Error = 4.40e-19 FLOPS = 3.21e+09 Tdav = 0.12 T = 0.65\n", - " <-- Site = 3- 4 .. Mmps = 186 Ndav = 1 E = -75.7283900842 Error = 4.32e-19 FLOPS = 8.40e+08 Tdav = 0.01 T = 0.23\n", - " <-- Site = 2- 3 .. Mmps = 72 Ndav = 1 E = -75.7283900842 Error = 1.10e-19 FLOPS = 2.21e+08 Tdav = 0.00 T = 0.09\n", - " <-- Site = 1- 2 .. Mmps = 23 Ndav = 1 E = -75.7283900842 Error = 1.00e-20 FLOPS = 7.40e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 0- 1 .. Mmps = 7 Ndav = 1 E = -75.7283900842 Error = 3.07e-21 FLOPS = 5.48e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 117.826 | E = -75.7284030967 | DE = 6.55e-05 | DW = 2.48e-06\n", - "Time sweep = 54.164 | 84.3 GFLOP/SWP\n", - " | Dmem = 65.9 MB (1%) | Imem = 2.73 MB (95%) | Hmem = 1.42 GB | Pmem = 0 B\n", - " | Tread = 1.121 | Twrite = 1.590 | Tfpread = 1.119 | Tfpwrite = 1.584 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 578 MB | cpsd = 467 MB\n", - " | Trot = 2.542 | Tctr = 0.007 | Tint = 0.005 | Tmid = 0.000 | Tdctr = 0.010 | Tdiag = 0.168 | Tinfo = 0.345\n", - " | Teff = 36.054 | Tprt = 0.000 | Teig = 12.580 | Tblk = 49.379 | Tmve = 4.588 | Tdm = 0.009 | Tsplt = 0.203 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 1 | Direction = backward | Bond dimension = 800 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 138.033 | E = -75.7284033759 | DE = 6.49e-05 | DW = 2.47e-06\n", "\n", - "Sweep = 2 | Direction = forward | Bond dimension = 800 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7283900842 Error = 0.00e+00 FLOPS = 4.69e+06 Tdav = 0.00 T = 0.00\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7283900842 Error = 0.00e+00 FLOPS = 6.27e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7283900842 Error = 0.00e+00 FLOPS = 1.18e+08 Tdav = 0.00 T = 0.05\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7283900842 Error = 0.00e+00 FLOPS = 8.63e+08 Tdav = 0.01 T = 0.16\n", - " --> Site = 4- 5 .. Mmps = 404 Ndav = 1 E = -75.7283900842 Error = 1.81e-20 FLOPS = 3.11e+09 Tdav = 0.04 T = 0.45\n", - " --> Site = 5- 6 .. Mmps = 800 Ndav = 4 E = -75.7283955917 Error = 1.07e-06 FLOPS = 6.05e+09 Tdav = 0.40 T = 1.05\n", - " --> Site = 6- 7 .. Mmps = 800 Ndav = 4 E = -75.7284032327 Error = 2.42e-06 FLOPS = 8.42e+09 Tdav = 0.85 T = 1.98\n", - " --> Site = 7- 8 .. Mmps = 800 Ndav = 4 E = -75.7283981298 Error = 1.47e-06 FLOPS = 8.71e+09 Tdav = 0.87 T = 2.30\n", - " --> Site = 8- 9 .. Mmps = 800 Ndav = 4 E = -75.7283948349 Error = 8.00e-07 FLOPS = 6.46e+09 Tdav = 1.38 T = 3.13\n", - " --> Site = 9- 10 .. Mmps = 800 Ndav = 4 E = -75.7283959009 Error = 9.31e-07 FLOPS = 8.44e+09 Tdav = 1.24 T = 4.63\n", - " --> Site = 10- 11 .. Mmps = 800 Ndav = 3 E = -75.7283931343 Error = 4.14e-07 FLOPS = 8.38e+09 Tdav = 1.12 T = 3.58\n", - " --> Site = 11- 12 .. Mmps = 800 Ndav = 3 E = -75.7283912413 Error = 9.84e-08 FLOPS = 4.46e+09 Tdav = 2.44 T = 8.45\n", - " --> Site = 12- 13 .. Mmps = 800 Ndav = 3 E = -75.7283909382 Error = 4.73e-08 FLOPS = 8.30e+09 Tdav = 1.32 T = 8.36\n", - " --> Site = 13- 14 .. Mmps = 800 Ndav = 2 E = -75.7283907068 Error = 1.21e-08 FLOPS = 7.16e+09 Tdav = 0.96 T = 6.94\n", - " --> Site = 14- 15 .. Mmps = 800 Ndav = 2 E = -75.7283906463 Error = 3.36e-09 FLOPS = 8.23e+09 Tdav = 0.72 T = 3.78\n", - " --> Site = 15- 16 .. Mmps = 800 Ndav = 2 E = -75.7283906503 Error = 3.37e-09 FLOPS = 8.02e+09 Tdav = 0.55 T = 2.62\n", - " --> Site = 16- 17 .. Mmps = 797 Ndav = 1 E = -75.7283906213 Error = 5.61e-20 FLOPS = 6.72e+09 Tdav = 0.22 T = 1.92\n", - " --> Site = 17- 18 .. Mmps = 759 Ndav = 1 E = -75.7283906213 Error = 3.04e-20 FLOPS = 3.23e+09 Tdav = 0.30 T = 1.98\n", - " --> Site = 18- 19 .. Mmps = 680 Ndav = 1 E = -75.7283906213 Error = 3.63e-20 FLOPS = 2.80e+09 Tdav = 0.15 T = 1.72\n", - " --> Site = 19- 20 .. Mmps = 393 Ndav = 1 E = -75.7283906213 Error = 2.03e-20 FLOPS = 2.18e+09 Tdav = 0.07 T = 1.00\n", - " --> Site = 20- 21 .. Mmps = 214 Ndav = 1 E = -75.7283906213 Error = 1.93e-20 FLOPS = 1.45e+09 Tdav = 0.01 T = 0.32\n", - " --> Site = 21- 22 .. Mmps = 91 Ndav = 1 E = -75.7283906213 Error = 1.37e-20 FLOPS = 3.85e+08 Tdav = 0.01 T = 0.11\n", - " --> Site = 22- 23 .. Mmps = 33 Ndav = 1 E = -75.7283906213 Error = 8.40e-21 FLOPS = 7.02e+07 Tdav = 0.00 T = 0.05\n", - " --> Site = 23- 24 .. Mmps = 12 Ndav = 1 E = -75.7283906213 Error = 1.34e-20 FLOPS = 1.62e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7283906213 Error = 4.29e-21 FLOPS = 2.22e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 172.626 | E = -75.7284032327 | DE = -1.36e-07 | DW = 2.42e-06\n", - "Time sweep = 54.800 | 82.0 GFLOP/SWP\n", - " | Dmem = 65.9 MB (1%) | Imem = 2.76 MB (95%) | Hmem = 1.42 GB | Pmem = 0 B\n", - " | Tread = 2.352 | Twrite = 1.633 | Tfpread = 2.346 | Tfpwrite = 1.627 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 578 MB | cpsd = 464 MB\n", - " | Trot = 2.637 | Tctr = 0.022 | Tint = 0.007 | Tmid = 0.000 | Tdctr = 1.298 | Tdiag = 0.177 | Tinfo = 0.656\n", - " | Teff = 36.399 | Tprt = 0.000 | Teig = 12.649 | Tblk = 49.562 | Tmve = 5.047 | Tdm = 0.009 | Tsplt = 0.231 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 2 | Direction = forward | Bond dimension = 800 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 205.532 | E = -75.7284034664 | DE = -9.04e-08 | DW = 2.42e-06\n", "\n", - "Sweep = 3 | Direction = backward | Bond dimension = 800 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7283906213 Error = 0.00e+00 FLOPS = 6.11e+05 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7283906213 Error = 0.00e+00 FLOPS = 1.45e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7283906213 Error = 0.00e+00 FLOPS = 6.33e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 21- 22 .. Mmps = 89 Ndav = 1 E = -75.7283906213 Error = 0.00e+00 FLOPS = 3.87e+08 Tdav = 0.01 T = 0.07\n", - " <-- Site = 20- 21 .. Mmps = 213 Ndav = 1 E = -75.7283906213 Error = 1.38e-27 FLOPS = 1.52e+09 Tdav = 0.01 T = 0.18\n", - " <-- Site = 19- 20 .. Mmps = 389 Ndav = 1 E = -75.7283906213 Error = 2.19e-26 FLOPS = 3.65e+09 Tdav = 0.04 T = 0.48\n", - " <-- Site = 18- 19 .. Mmps = 674 Ndav = 1 E = -75.7283906213 Error = 1.47e-25 FLOPS = 4.84e+09 Tdav = 0.09 T = 0.81\n", - " <-- Site = 17- 18 .. Mmps = 751 Ndav = 1 E = -75.7283906213 Error = 3.08e-23 FLOPS = 6.18e+09 Tdav = 0.15 T = 1.32\n", - " <-- Site = 16- 17 .. Mmps = 789 Ndav = 1 E = -75.7283906213 Error = 1.48e-22 FLOPS = 6.76e+09 Tdav = 0.22 T = 1.71\n", - " <-- Site = 15- 16 .. Mmps = 800 Ndav = 2 E = -75.7283906503 Error = 3.37e-09 FLOPS = 7.88e+09 Tdav = 0.56 T = 2.41\n", - " <-- Site = 14- 15 .. Mmps = 800 Ndav = 2 E = -75.7283906485 Error = 3.31e-09 FLOPS = 4.32e+09 Tdav = 1.36 T = 4.47\n", - " <-- Site = 13- 14 .. Mmps = 800 Ndav = 2 E = -75.7283907124 Error = 1.20e-08 FLOPS = 8.08e+09 Tdav = 0.85 T = 6.05\n", - " <-- Site = 12- 13 .. Mmps = 800 Ndav = 3 E = -75.7283909542 Error = 4.70e-08 FLOPS = 4.70e+09 Tdav = 2.33 T = 9.61\n", - " <-- Site = 11- 12 .. Mmps = 800 Ndav = 3 E = -75.7283912806 Error = 9.78e-08 FLOPS = 8.43e+09 Tdav = 1.29 T = 7.17\n", - " <-- Site = 10- 11 .. Mmps = 800 Ndav = 3 E = -75.7283932242 Error = 4.13e-07 FLOPS = 7.45e+09 Tdav = 1.26 T = 3.67\n", - " <-- Site = 9- 10 .. Mmps = 800 Ndav = 4 E = -75.7283960521 Error = 9.25e-07 FLOPS = 7.10e+09 Tdav = 1.47 T = 4.78\n", - " <-- Site = 8- 9 .. Mmps = 800 Ndav = 4 E = -75.7283951354 Error = 7.95e-07 FLOPS = 8.24e+09 Tdav = 1.08 T = 2.85\n", - " <-- Site = 7- 8 .. Mmps = 800 Ndav = 4 E = -75.7283986481 Error = 1.48e-06 FLOPS = 8.26e+09 Tdav = 0.91 T = 2.39\n", - " <-- Site = 6- 7 .. Mmps = 800 Ndav = 4 E = -75.7284038569 Error = 2.40e-06 FLOPS = 7.96e+09 Tdav = 0.90 T = 2.09\n", - " <-- Site = 5- 6 .. Mmps = 800 Ndav = 4 E = -75.7283962966 Error = 1.05e-06 FLOPS = 5.98e+09 Tdav = 0.40 T = 1.15\n", - " <-- Site = 4- 5 .. Mmps = 444 Ndav = 2 E = -75.7283908939 Error = 4.03e-19 FLOPS = 2.87e+09 Tdav = 0.09 T = 0.62\n", - " <-- Site = 3- 4 .. Mmps = 191 Ndav = 1 E = -75.7283908939 Error = 3.87e-19 FLOPS = 4.59e+08 Tdav = 0.02 T = 0.38\n", - " <-- Site = 2- 3 .. Mmps = 73 Ndav = 1 E = -75.7283908939 Error = 8.64e-20 FLOPS = 1.20e+08 Tdav = 0.00 T = 0.14\n", - " <-- Site = 1- 2 .. Mmps = 28 Ndav = 1 E = -75.7283908939 Error = 1.83e-20 FLOPS = 3.93e+07 Tdav = 0.00 T = 0.05\n", - " <-- Site = 0- 1 .. Mmps = 8 Ndav = 1 E = -75.7283908939 Error = 1.28e-33 FLOPS = 5.18e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 225.302 | E = -75.7284038569 | DE = -6.24e-07 | DW = 2.40e-06\n", - "Time sweep = 52.676 | 82.1 GFLOP/SWP\n", - " | Dmem = 65.9 MB (1%) | Imem = 2.76 MB (95%) | Hmem = 1.42 GB | Pmem = 0 B\n", - " | Tread = 1.026 | Twrite = 1.548 | Tfpread = 1.016 | Tfpwrite = 1.542 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 578 MB | cpsd = 467 MB\n", - " | Trot = 2.784 | Tctr = 0.007 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 0.010 | Tdiag = 0.180 | Tinfo = 0.413\n", - " | Teff = 33.974 | Tprt = 0.000 | Teig = 13.061 | Tblk = 47.629 | Tmve = 4.844 | Tdm = 0.009 | Tsplt = 0.232 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 3 | Direction = backward | Bond dimension = 800 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 310.035 | E = -75.7284040381 | DE = -5.72e-07 | DW = 2.40e-06\n", "\n", - "Sweep = 4 | Direction = forward | Bond dimension = 600 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7283908939 Error = 0.00e+00 FLOPS = 5.05e+06 Tdav = 0.00 T = 0.01\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7283908939 Error = 0.00e+00 FLOPS = 3.80e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7283908939 Error = 0.00e+00 FLOPS = 1.17e+08 Tdav = 0.00 T = 0.08\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7283908939 Error = 0.00e+00 FLOPS = 4.51e+08 Tdav = 0.02 T = 0.31\n", - " --> Site = 4- 5 .. Mmps = 402 Ndav = 1 E = -75.7283908939 Error = 4.06e-21 FLOPS = 1.66e+09 Tdav = 0.08 T = 0.81\n", - " --> Site = 5- 6 .. Mmps = 600 Ndav = 4 E = -75.7283962968 Error = 1.25e-05 FLOPS = 4.10e+09 Tdav = 0.59 T = 1.67\n", - " --> Site = 6- 7 .. Mmps = 600 Ndav = 4 E = -75.7283425075 Error = 1.88e-05 FLOPS = 7.85e+09 Tdav = 0.57 T = 1.66\n", - " --> Site = 7- 8 .. Mmps = 600 Ndav = 4 E = -75.7282514754 Error = 7.84e-06 FLOPS = 7.68e+09 Tdav = 0.61 T = 1.80\n", - " --> Site = 8- 9 .. Mmps = 600 Ndav = 4 E = -75.7282135420 Error = 3.65e-06 FLOPS = 7.43e+09 Tdav = 0.71 T = 2.14\n", - " --> Site = 9- 10 .. Mmps = 600 Ndav = 3 E = -75.7281966933 Error = 3.03e-06 FLOPS = 7.46e+09 Tdav = 0.60 T = 2.25\n", - " --> Site = 10- 11 .. Mmps = 600 Ndav = 3 E = -75.7281812062 Error = 1.23e-06 FLOPS = 6.68e+09 Tdav = 0.79 T = 2.69\n", - " --> Site = 11- 12 .. Mmps = 600 Ndav = 3 E = -75.7281743135 Error = 2.59e-07 FLOPS = 7.36e+09 Tdav = 0.82 T = 7.61\n", - " --> Site = 12- 13 .. Mmps = 600 Ndav = 3 E = -75.7281729334 Error = 1.09e-07 FLOPS = 7.21e+09 Tdav = 0.84 T = 6.16\n", - " --> Site = 13- 14 .. Mmps = 600 Ndav = 2 E = -75.7281722910 Error = 2.64e-08 FLOPS = 6.76e+09 Tdav = 0.55 T = 5.81\n", - " --> Site = 14- 15 .. Mmps = 600 Ndav = 2 E = -75.7281721320 Error = 1.15e-08 FLOPS = 6.53e+09 Tdav = 0.49 T = 2.84\n", - " --> Site = 15- 16 .. Mmps = 600 Ndav = 2 E = -75.7281720639 Error = 6.72e-09 FLOPS = 6.86e+09 Tdav = 0.34 T = 1.87\n", - " --> Site = 16- 17 .. Mmps = 600 Ndav = 2 E = -75.7281720130 Error = 4.23e-12 FLOPS = 6.25e+09 Tdav = 0.24 T = 1.58\n", - " --> Site = 17- 18 .. Mmps = 525 Ndav = 1 E = -75.7281720129 Error = 3.66e-20 FLOPS = 5.35e+09 Tdav = 0.09 T = 1.13\n", - " --> Site = 18- 19 .. Mmps = 461 Ndav = 1 E = -75.7281720129 Error = 3.40e-20 FLOPS = 3.62e+09 Tdav = 0.05 T = 0.74\n", - " --> Site = 19- 20 .. Mmps = 365 Ndav = 1 E = -75.7281720129 Error = 1.93e-20 FLOPS = 2.15e+09 Tdav = 0.03 T = 0.40\n", - " --> Site = 20- 21 .. Mmps = 197 Ndav = 1 E = -75.7281720129 Error = 1.45e-20 FLOPS = 5.29e+08 Tdav = 0.03 T = 0.33\n", - " --> Site = 21- 22 .. Mmps = 94 Ndav = 1 E = -75.7281720129 Error = 8.65e-21 FLOPS = 1.29e+08 Tdav = 0.01 T = 0.18\n", - " --> Site = 22- 23 .. Mmps = 32 Ndav = 1 E = -75.7281720129 Error = 1.71e-20 FLOPS = 3.84e+07 Tdav = 0.00 T = 0.08\n", - " --> Site = 23- 24 .. Mmps = 11 Ndav = 1 E = -75.7281720129 Error = 6.64e-21 FLOPS = 9.62e+06 Tdav = 0.00 T = 0.03\n", - " --> Site = 24- 25 .. Mmps = 4 Ndav = 1 E = -75.7281720129 Error = 6.23e-21 FLOPS = 8.70e+05 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 267.698 | E = -75.7283962968 | DE = 7.56e-06 | DW = 1.88e-05\n", - "Time sweep = 42.396 | 47.0 GFLOP/SWP\n", - " | Dmem = 65.6 MB (1%) | Imem = 2.56 MB (95%) | Hmem = 1.12 GB | Pmem = 0 B\n", - " | Tread = 1.726 | Twrite = 0.838 | Tfpread = 1.718 | Tfpwrite = 0.832 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 333 MB | cpsd = 267 MB\n", - " | Trot = 1.434 | Tctr = 0.013 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 0.613 | Tdiag = 0.138 | Tinfo = 0.564\n", - " | Teff = 31.409 | Tprt = 0.000 | Teig = 7.496 | Tblk = 39.254 | Tmve = 2.943 | Tdm = 0.006 | Tsplt = 0.116 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 4 | Direction = forward | Bond dimension = 700 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 388.303 | E = -75.7283965259 | DE = 7.51e-06 | DW = 8.05e-06\n", "\n", - "Sweep = 5 | Direction = backward | Bond dimension = 600 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7281720129 Error = 0.00e+00 FLOPS = 9.06e+05 Tdav = 0.00 T = 0.00\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7281720129 Error = 0.00e+00 FLOPS = 1.02e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7281720129 Error = 0.00e+00 FLOPS = 3.72e+07 Tdav = 0.00 T = 0.04\n", - " <-- Site = 21- 22 .. Mmps = 89 Ndav = 1 E = -75.7281720129 Error = 0.00e+00 FLOPS = 1.78e+08 Tdav = 0.01 T = 0.12\n", - " <-- Site = 20- 21 .. Mmps = 193 Ndav = 1 E = -75.7281720129 Error = 9.34e-28 FLOPS = 6.50e+08 Tdav = 0.03 T = 0.30\n", - " <-- Site = 19- 20 .. Mmps = 359 Ndav = 1 E = -75.7281720129 Error = 5.34e-25 FLOPS = 1.28e+09 Tdav = 0.05 T = 0.57\n", - " <-- Site = 18- 19 .. Mmps = 456 Ndav = 1 E = -75.7281720129 Error = 1.05e-23 FLOPS = 2.09e+09 Tdav = 0.09 T = 1.01\n", - " <-- Site = 17- 18 .. Mmps = 517 Ndav = 1 E = -75.7281720129 Error = 1.10e-22 FLOPS = 3.96e+09 Tdav = 0.10 T = 1.30\n", - " <-- Site = 16- 17 .. Mmps = 600 Ndav = 1 E = -75.7281720129 Error = 2.73e-22 FLOPS = 5.01e+09 Tdav = 0.12 T = 1.11\n", - " <-- Site = 15- 16 .. Mmps = 600 Ndav = 2 E = -75.7281720628 Error = 6.11e-09 FLOPS = 6.37e+09 Tdav = 0.32 T = 1.53\n", - " <-- Site = 14- 15 .. Mmps = 600 Ndav = 2 E = -75.7281720622 Error = 6.19e-09 FLOPS = 6.52e+09 Tdav = 0.38 T = 2.30\n", - " <-- Site = 13- 14 .. Mmps = 600 Ndav = 2 E = -75.7281721452 Error = 1.78e-08 FLOPS = 6.52e+09 Tdav = 0.45 T = 3.40\n", - " <-- Site = 12- 13 .. Mmps = 600 Ndav = 3 E = -75.7281725525 Error = 7.94e-08 FLOPS = 6.79e+09 Tdav = 0.68 T = 6.91\n", - " <-- Site = 11- 12 .. Mmps = 600 Ndav = 3 E = -75.7281731576 Error = 1.77e-07 FLOPS = 6.77e+09 Tdav = 0.68 T = 4.41\n", - " <-- Site = 10- 11 .. Mmps = 600 Ndav = 3 E = -75.7281764445 Error = 7.35e-07 FLOPS = 6.95e+09 Tdav = 0.57 T = 2.11\n", - " <-- Site = 9- 10 .. Mmps = 600 Ndav = 4 E = -75.7281817996 Error = 1.75e-06 FLOPS = 6.87e+09 Tdav = 0.65 T = 1.94\n", - " <-- Site = 8- 9 .. Mmps = 600 Ndav = 4 E = -75.7281826940 Error = 1.92e-06 FLOPS = 3.98e+09 Tdav = 0.97 T = 2.58\n", - " <-- Site = 7- 8 .. Mmps = 600 Ndav = 4 E = -75.7281883058 Error = 2.93e-06 FLOPS = 4.79e+09 Tdav = 0.70 T = 2.25\n", - " <-- Site = 6- 7 .. Mmps = 600 Ndav = 5 E = -75.7281989947 Error = 4.42e-06 FLOPS = 7.05e+09 Tdav = 0.55 T = 1.32\n", - " <-- Site = 5- 6 .. Mmps = 600 Ndav = 5 E = -75.7282216942 Error = 8.55e-06 FLOPS = 5.51e+09 Tdav = 0.36 T = 0.93\n", - " <-- Site = 4- 5 .. Mmps = 432 Ndav = 4 E = -75.7281797445 Error = 4.62e-19 FLOPS = 1.95e+09 Tdav = 0.17 T = 0.54\n", - " <-- Site = 3- 4 .. Mmps = 187 Ndav = 1 E = -75.7281797445 Error = 3.74e-19 FLOPS = 8.46e+08 Tdav = 0.01 T = 0.22\n", - " <-- Site = 2- 3 .. Mmps = 71 Ndav = 1 E = -75.7281797445 Error = 1.25e-19 FLOPS = 1.96e+08 Tdav = 0.00 T = 0.08\n", - " <-- Site = 1- 2 .. Mmps = 28 Ndav = 1 E = -75.7281797445 Error = 7.95e-21 FLOPS = 5.75e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 0- 1 .. Mmps = 7 Ndav = 1 E = -75.7281797445 Error = 2.66e-22 FLOPS = 9.41e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 302.878 | E = -75.7282216942 | DE = 1.75e-04 | DW = 8.55e-06\n", - "Time sweep = 35.181 | 37.1 GFLOP/SWP\n", - " | Dmem = 37.3 MB (1%) | Imem = 2.42 MB (95%) | Hmem = 825 MB | Pmem = 0 B\n", - " | Tread = 0.669 | Twrite = 0.836 | Tfpread = 0.667 | Tfpwrite = 0.830 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 334 MB | cpsd = 270 MB\n", - " | Trot = 1.437 | Tctr = 0.013 | Tint = 0.008 | Tmid = 0.000 | Tdctr = 0.010 | Tdiag = 0.136 | Tinfo = 0.340\n", - " | Teff = 25.148 | Tprt = 0.000 | Teig = 6.897 | Tblk = 32.320 | Tmve = 2.688 | Tdm = 0.005 | Tsplt = 0.123 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 5 | Direction = backward | Bond dimension = 700 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 435.992 | E = -75.7283294371 | DE = 6.71e-05 | DW = 3.42e-06\n", "\n", - "Sweep = 6 | Direction = forward | Bond dimension = 600 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7281797445 Error = 0.00e+00 FLOPS = 9.66e+06 Tdav = 0.00 T = 0.00\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7281797445 Error = 0.00e+00 FLOPS = 6.98e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7281797445 Error = 0.00e+00 FLOPS = 1.82e+08 Tdav = 0.00 T = 0.04\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7281797445 Error = 0.00e+00 FLOPS = 8.20e+08 Tdav = 0.01 T = 0.16\n", - " --> Site = 4- 5 .. Mmps = 405 Ndav = 1 E = -75.7281797445 Error = 5.56e-21 FLOPS = 2.35e+09 Tdav = 0.04 T = 0.34\n", - " --> Site = 5- 6 .. Mmps = 600 Ndav = 5 E = -75.7282217087 Error = 8.54e-06 FLOPS = 5.50e+09 Tdav = 0.36 T = 0.88\n", - " --> Site = 6- 7 .. Mmps = 600 Ndav = 5 E = -75.7282002735 Error = 4.08e-06 FLOPS = 7.20e+09 Tdav = 0.53 T = 1.30\n", - " --> Site = 7- 8 .. Mmps = 600 Ndav = 4 E = -75.7281922407 Error = 2.42e-06 FLOPS = 7.05e+09 Tdav = 0.46 T = 1.40\n", - " --> Site = 8- 9 .. Mmps = 600 Ndav = 4 E = -75.7281898502 Error = 1.78e-06 FLOPS = 7.09e+09 Tdav = 0.54 T = 1.70\n", - " --> Site = 9- 10 .. Mmps = 600 Ndav = 4 E = -75.7281894835 Error = 1.57e-06 FLOPS = 3.82e+09 Tdav = 1.17 T = 2.81\n", - " --> Site = 10- 11 .. Mmps = 600 Ndav = 3 E = -75.7281849780 Error = 6.77e-07 FLOPS = 6.84e+09 Tdav = 0.57 T = 2.90\n", - " --> Site = 11- 12 .. Mmps = 600 Ndav = 3 E = -75.7281821162 Error = 1.64e-07 FLOPS = 6.87e+09 Tdav = 0.66 T = 4.47\n", - " --> Site = 12- 13 .. Mmps = 600 Ndav = 3 E = -75.7281816369 Error = 7.47e-08 FLOPS = 4.69e+09 Tdav = 0.99 T = 5.59\n", - " --> Site = 13- 14 .. Mmps = 600 Ndav = 2 E = -75.7281812820 Error = 1.65e-08 FLOPS = 6.86e+09 Tdav = 0.42 T = 4.71\n", - " --> Site = 14- 15 .. Mmps = 600 Ndav = 2 E = -75.7281812138 Error = 5.10e-09 FLOPS = 6.15e+09 Tdav = 0.40 T = 2.43\n", - " --> Site = 15- 16 .. Mmps = 600 Ndav = 2 E = -75.7281812272 Error = 5.48e-09 FLOPS = 6.57e+09 Tdav = 0.31 T = 1.60\n", - " --> Site = 16- 17 .. Mmps = 600 Ndav = 2 E = -75.7281811847 Error = 3.38e-13 FLOPS = 6.01e+09 Tdav = 0.21 T = 1.38\n", - " --> Site = 17- 18 .. Mmps = 518 Ndav = 2 E = -75.7281811859 Error = 2.86e-20 FLOPS = 5.36e+09 Tdav = 0.14 T = 1.04\n", - " --> Site = 18- 19 .. Mmps = 455 Ndav = 1 E = -75.7281811859 Error = 2.64e-20 FLOPS = 3.79e+09 Tdav = 0.05 T = 0.66\n", - " --> Site = 19- 20 .. Mmps = 361 Ndav = 1 E = -75.7281811859 Error = 2.54e-20 FLOPS = 2.14e+09 Tdav = 0.03 T = 0.41\n", - " --> Site = 20- 21 .. Mmps = 195 Ndav = 1 E = -75.7281811859 Error = 1.26e-20 FLOPS = 1.28e+09 Tdav = 0.01 T = 0.22\n", - " --> Site = 21- 22 .. Mmps = 90 Ndav = 1 E = -75.7281811859 Error = 2.04e-20 FLOPS = 3.02e+08 Tdav = 0.01 T = 0.11\n", - " --> Site = 22- 23 .. Mmps = 32 Ndav = 1 E = -75.7281811859 Error = 3.03e-21 FLOPS = 6.83e+07 Tdav = 0.00 T = 0.05\n", - " --> Site = 23- 24 .. Mmps = 11 Ndav = 1 E = -75.7281811859 Error = 4.17e-21 FLOPS = 1.73e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 24- 25 .. Mmps = 5 Ndav = 1 E = -75.7281811859 Error = 2.45e-21 FLOPS = 1.56e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 337.327 | E = -75.7282217087 | DE = -1.45e-08 | DW = 8.54e-06\n", - "Time sweep = 34.449 | 37.5 GFLOP/SWP\n", - " | Dmem = 37.4 MB (1%) | Imem = 2.42 MB (95%) | Hmem = 826 MB | Pmem = 0 B\n", - " | Tread = 1.333 | Twrite = 0.889 | Tfpread = 1.324 | Tfpwrite = 0.884 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 333 MB | cpsd = 268 MB\n", - " | Trot = 1.521 | Tctr = 0.018 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 0.688 | Tdiag = 0.125 | Tinfo = 0.524\n", - " | Teff = 24.072 | Tprt = 0.000 | Teig = 6.910 | Tblk = 31.246 | Tmve = 3.011 | Tdm = 0.005 | Tsplt = 0.120 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 6 | Direction = forward | Bond dimension = 700 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 483.591 | E = -75.7283294384 | DE = -1.30e-09 | DW = 3.42e-06\n", "\n", - "Sweep = 7 | Direction = backward | Bond dimension = 600 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7281811859 Error = 0.00e+00 FLOPS = 1.61e+06 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7281811859 Error = 0.00e+00 FLOPS = 1.52e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7281811859 Error = 0.00e+00 FLOPS = 6.40e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 21- 22 .. Mmps = 89 Ndav = 1 E = -75.7281811859 Error = 0.00e+00 FLOPS = 2.89e+08 Tdav = 0.01 T = 0.07\n", - " <-- Site = 20- 21 .. Mmps = 192 Ndav = 1 E = -75.7281811859 Error = 1.80e-27 FLOPS = 1.31e+09 Tdav = 0.01 T = 0.16\n", - " <-- Site = 19- 20 .. Mmps = 357 Ndav = 1 E = -75.7281811859 Error = 1.40e-24 FLOPS = 1.34e+09 Tdav = 0.05 T = 0.40\n", - " <-- Site = 18- 19 .. Mmps = 448 Ndav = 1 E = -75.7281811859 Error = 1.43e-23 FLOPS = 1.73e+09 Tdav = 0.10 T = 1.00\n", - " <-- Site = 17- 18 .. Mmps = 512 Ndav = 1 E = -75.7281811859 Error = 8.47e-23 FLOPS = 2.59e+09 Tdav = 0.15 T = 1.47\n", - " <-- Site = 16- 17 .. Mmps = 600 Ndav = 1 E = -75.7281811859 Error = 3.36e-22 FLOPS = 3.66e+09 Tdav = 0.17 T = 1.58\n", - " <-- Site = 15- 16 .. Mmps = 600 Ndav = 2 E = -75.7281812305 Error = 5.50e-09 FLOPS = 6.49e+09 Tdav = 0.32 T = 1.53\n", - " <-- Site = 14- 15 .. Mmps = 600 Ndav = 2 E = -75.7281812251 Error = 5.11e-09 FLOPS = 6.63e+09 Tdav = 0.37 T = 2.53\n", - " <-- Site = 13- 14 .. Mmps = 600 Ndav = 2 E = -75.7281813020 Error = 1.63e-08 FLOPS = 6.54e+09 Tdav = 0.45 T = 3.30\n", - " <-- Site = 12- 13 .. Mmps = 600 Ndav = 3 E = -75.7281816889 Error = 7.48e-08 FLOPS = 4.52e+09 Tdav = 1.03 T = 6.97\n", - " <-- Site = 11- 12 .. Mmps = 600 Ndav = 3 E = -75.7281822368 Error = 1.65e-07 FLOPS = 6.84e+09 Tdav = 0.67 T = 4.44\n", - " <-- Site = 10- 11 .. Mmps = 600 Ndav = 3 E = -75.7281853180 Error = 6.91e-07 FLOPS = 6.88e+09 Tdav = 0.57 T = 2.14\n", - " <-- Site = 9- 10 .. Mmps = 600 Ndav = 4 E = -75.7281898746 Error = 1.55e-06 FLOPS = 6.68e+09 Tdav = 0.67 T = 1.95\n", - " <-- Site = 8- 9 .. Mmps = 600 Ndav = 4 E = -75.7281906871 Error = 1.77e-06 FLOPS = 5.42e+09 Tdav = 0.71 T = 1.88\n", - " <-- Site = 7- 8 .. Mmps = 600 Ndav = 4 E = -75.7281934996 Error = 2.38e-06 FLOPS = 4.18e+09 Tdav = 0.77 T = 2.44\n", - " <-- Site = 6- 7 .. Mmps = 600 Ndav = 5 E = -75.7282022898 Error = 4.06e-06 FLOPS = 6.93e+09 Tdav = 0.56 T = 1.75\n", - " <-- Site = 5- 6 .. Mmps = 600 Ndav = 5 E = -75.7282233127 Error = 8.41e-06 FLOPS = 5.67e+09 Tdav = 0.35 T = 0.90\n", - " <-- Site = 4- 5 .. Mmps = 439 Ndav = 4 E = -75.7281822001 Error = 4.09e-19 FLOPS = 2.89e+09 Tdav = 0.12 T = 0.53\n", - " <-- Site = 3- 4 .. Mmps = 181 Ndav = 1 E = -75.7281822001 Error = 4.53e-19 FLOPS = 8.62e+08 Tdav = 0.01 T = 0.22\n", - " <-- Site = 2- 3 .. Mmps = 72 Ndav = 1 E = -75.7281822001 Error = 8.00e-20 FLOPS = 1.97e+08 Tdav = 0.00 T = 0.08\n", - " <-- Site = 1- 2 .. Mmps = 25 Ndav = 1 E = -75.7281822001 Error = 1.03e-20 FLOPS = 7.15e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 0- 1 .. Mmps = 8 Ndav = 1 E = -75.7281822001 Error = 9.45e-21 FLOPS = 6.87e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 372.937 | E = -75.7282233127 | DE = -1.60e-06 | DW = 8.41e-06\n", - "Time sweep = 35.610 | 36.8 GFLOP/SWP\n", - " | Dmem = 37.4 MB (1%) | Imem = 2.42 MB (95%) | Hmem = 826 MB | Pmem = 0 B\n", - " | Tread = 0.666 | Twrite = 0.874 | Tfpread = 0.662 | Tfpwrite = 0.869 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 334 MB | cpsd = 270 MB\n", - " | Trot = 1.532 | Tctr = 0.010 | Tint = 0.007 | Tmid = 0.000 | Tdctr = 0.011 | Tdiag = 0.148 | Tinfo = 0.351\n", - " | Teff = 25.024 | Tprt = 0.000 | Teig = 7.071 | Tblk = 32.582 | Tmve = 2.835 | Tdm = 0.005 | Tsplt = 0.134 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 7 | Direction = backward | Bond dimension = 700 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 531.150 | E = -75.7283301970 | DE = -7.59e-07 | DW = 3.40e-06\n", "\n", - "Sweep = 8 | Direction = forward | Bond dimension = 400 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7281822001 Error = 0.00e+00 FLOPS = 7.42e+06 Tdav = 0.00 T = 0.00\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7281822001 Error = 0.00e+00 FLOPS = 6.27e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7281822001 Error = 0.00e+00 FLOPS = 2.01e+08 Tdav = 0.00 T = 0.04\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7281822001 Error = 0.00e+00 FLOPS = 8.60e+08 Tdav = 0.01 T = 0.18\n", - " --> Site = 4- 5 .. Mmps = 400 Ndav = 1 E = -75.7281822001 Error = 2.67e-19 FLOPS = 2.32e+09 Tdav = 0.04 T = 0.35\n", - " --> Site = 5- 6 .. Mmps = 400 Ndav = 5 E = -75.7282233163 Error = 6.23e-05 FLOPS = 5.41e+09 Tdav = 0.37 T = 0.97\n", - " --> Site = 6- 7 .. Mmps = 400 Ndav = 5 E = -75.7279458532 Error = 5.20e-05 FLOPS = 5.63e+09 Tdav = 0.35 T = 1.00\n", - " --> Site = 7- 8 .. Mmps = 400 Ndav = 4 E = -75.7277042426 Error = 1.77e-05 FLOPS = 5.90e+09 Tdav = 0.27 T = 1.01\n", - " --> Site = 8- 9 .. Mmps = 400 Ndav = 4 E = -75.7276276539 Error = 9.13e-06 FLOPS = 5.70e+09 Tdav = 0.33 T = 1.20\n", - " --> Site = 9- 10 .. Mmps = 400 Ndav = 3 E = -75.7275874032 Error = 9.31e-06 FLOPS = 5.70e+09 Tdav = 0.29 T = 1.31\n", - " --> Site = 10- 11 .. Mmps = 400 Ndav = 3 E = -75.7275401558 Error = 3.26e-06 FLOPS = 5.29e+09 Tdav = 0.34 T = 1.52\n", - " --> Site = 11- 12 .. Mmps = 400 Ndav = 3 E = -75.7275230829 Error = 7.76e-07 FLOPS = 5.53e+09 Tdav = 0.37 T = 5.43\n", - " --> Site = 12- 13 .. Mmps = 400 Ndav = 3 E = -75.7275189634 Error = 5.87e-07 FLOPS = 5.53e+09 Tdav = 0.36 T = 3.54\n", - " --> Site = 13- 14 .. Mmps = 400 Ndav = 3 E = -75.7275154479 Error = 1.19e-07 FLOPS = 4.82e+09 Tdav = 0.37 T = 2.51\n", - " --> Site = 14- 15 .. Mmps = 400 Ndav = 2 E = -75.7275146990 Error = 3.96e-08 FLOPS = 5.19e+09 Tdav = 0.19 T = 1.53\n", - " --> Site = 15- 16 .. Mmps = 400 Ndav = 2 E = -75.7275144628 Error = 2.24e-08 FLOPS = 5.11e+09 Tdav = 0.15 T = 1.12\n", - " --> Site = 16- 17 .. Mmps = 400 Ndav = 2 E = -75.7275143056 Error = 8.46e-10 FLOPS = 2.06e+09 Tdav = 0.22 T = 1.52\n", - " --> Site = 17- 18 .. Mmps = 372 Ndav = 2 E = -75.7275143024 Error = 2.92e-20 FLOPS = 2.24e+09 Tdav = 0.12 T = 1.24\n", - " --> Site = 18- 19 .. Mmps = 277 Ndav = 1 E = -75.7275143024 Error = 2.77e-20 FLOPS = 1.24e+09 Tdav = 0.05 T = 0.78\n", - " --> Site = 19- 20 .. Mmps = 208 Ndav = 1 E = -75.7275143024 Error = 2.92e-20 FLOPS = 6.96e+08 Tdav = 0.03 T = 0.38\n", - " --> Site = 20- 21 .. Mmps = 157 Ndav = 1 E = -75.7275143024 Error = 8.79e-21 FLOPS = 4.58e+08 Tdav = 0.01 T = 0.13\n", - " --> Site = 21- 22 .. Mmps = 84 Ndav = 1 E = -75.7275143024 Error = 8.27e-21 FLOPS = 2.31e+08 Tdav = 0.00 T = 0.08\n", - " --> Site = 22- 23 .. Mmps = 33 Ndav = 1 E = -75.7275143024 Error = 1.61e-20 FLOPS = 6.47e+07 Tdav = 0.00 T = 0.04\n", - " --> Site = 23- 24 .. Mmps = 14 Ndav = 1 E = -75.7275143024 Error = 4.06e-22 FLOPS = 1.98e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 24- 25 .. Mmps = 4 Ndav = 1 E = -75.7275143024 Error = 9.09e-21 FLOPS = 2.54e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 399.057 | E = -75.7282233163 | DE = -3.61e-09 | DW = 6.23e-05\n", - "Time sweep = 26.120 | 18.0 GFLOP/SWP\n", - " | Dmem = 37.2 MB (1%) | Imem = 2.42 MB (95%) | Hmem = 600 MB | Pmem = 0 B\n", - " | Tread = 0.922 | Twrite = 0.393 | Tfpread = 0.916 | Tfpwrite = 0.388 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 151 MB | cpsd = 122 MB\n", - " | Trot = 0.829 | Tctr = 0.015 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 0.303 | Tdiag = 0.101 | Tinfo = 0.468\n", - " | Teff = 20.009 | Tprt = 0.000 | Teig = 3.873 | Tblk = 24.158 | Tmve = 1.767 | Tdm = 0.003 | Tsplt = 0.067 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 8 | Direction = forward | Bond dimension = 600 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 574.284 | E = -75.7283301973 | DE = -2.32e-10 | DW = 1.29e-05\n", "\n", - "Sweep = 9 | Direction = backward | Bond dimension = 400 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7275143024 Error = 0.00e+00 FLOPS = 3.54e+05 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7275143024 Error = 0.00e+00 FLOPS = 9.63e+06 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7275143024 Error = 0.00e+00 FLOPS = 5.95e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 21- 22 .. Mmps = 81 Ndav = 1 E = -75.7275143024 Error = 0.00e+00 FLOPS = 2.27e+08 Tdav = 0.00 T = 0.06\n", - " <-- Site = 20- 21 .. Mmps = 153 Ndav = 1 E = -75.7275143024 Error = 2.67e-24 FLOPS = 5.90e+08 Tdav = 0.01 T = 0.10\n", - " <-- Site = 19- 20 .. Mmps = 203 Ndav = 1 E = -75.7275143024 Error = 1.43e-23 FLOPS = 1.24e+09 Tdav = 0.01 T = 0.20\n", - " <-- Site = 18- 19 .. Mmps = 273 Ndav = 1 E = -75.7275143024 Error = 4.87e-23 FLOPS = 2.24e+09 Tdav = 0.02 T = 0.36\n", - " <-- Site = 17- 18 .. Mmps = 364 Ndav = 1 E = -75.7275143024 Error = 1.23e-22 FLOPS = 3.20e+09 Tdav = 0.04 T = 0.48\n", - " <-- Site = 16- 17 .. Mmps = 400 Ndav = 2 E = -75.7275143091 Error = 8.30e-10 FLOPS = 4.29e+09 Tdav = 0.10 T = 0.66\n", - " <-- Site = 15- 16 .. Mmps = 400 Ndav = 2 E = -75.7275144494 Error = 1.97e-08 FLOPS = 4.43e+09 Tdav = 0.13 T = 0.79\n", - " <-- Site = 14- 15 .. Mmps = 400 Ndav = 2 E = -75.7275144573 Error = 2.07e-08 FLOPS = 3.95e+09 Tdav = 0.17 T = 1.21\n", - " <-- Site = 13- 14 .. Mmps = 400 Ndav = 3 E = -75.7275148478 Error = 7.96e-08 FLOPS = 4.61e+09 Tdav = 0.26 T = 1.81\n", - " <-- Site = 12- 13 .. Mmps = 400 Ndav = 3 E = -75.7275168300 Error = 4.10e-07 FLOPS = 4.77e+09 Tdav = 0.29 T = 2.80\n", - " <-- Site = 11- 12 .. Mmps = 400 Ndav = 3 E = -75.7275172337 Error = 4.84e-07 FLOPS = 2.31e+09 Tdav = 0.58 T = 3.35\n", - " <-- Site = 10- 11 .. Mmps = 400 Ndav = 4 E = -75.7275244473 Error = 1.81e-06 FLOPS = 2.97e+09 Tdav = 0.51 T = 1.79\n", - " <-- Site = 9- 10 .. Mmps = 400 Ndav = 4 E = -75.7275410846 Error = 5.19e-06 FLOPS = 4.69e+09 Tdav = 0.29 T = 1.01\n", - " <-- Site = 8- 9 .. Mmps = 400 Ndav = 4 E = -75.7275357935 Error = 4.17e-06 FLOPS = 4.69e+09 Tdav = 0.25 T = 0.87\n", - " <-- Site = 7- 8 .. Mmps = 400 Ndav = 4 E = -75.7275411269 Error = 4.84e-06 FLOPS = 4.80e+09 Tdav = 0.20 T = 0.77\n", - " <-- Site = 6- 7 .. Mmps = 400 Ndav = 5 E = -75.7275690154 Error = 9.59e-06 FLOPS = 4.86e+09 Tdav = 0.24 T = 0.91\n", - " <-- Site = 5- 6 .. Mmps = 400 Ndav = 7 E = -75.7276984767 Error = 3.58e-05 FLOPS = 4.70e+09 Tdav = 0.33 T = 0.73\n", - " <-- Site = 4- 5 .. Mmps = 400 Ndav = 8 E = -75.7275367711 Error = 1.61e-18 FLOPS = 2.07e+09 Tdav = 0.17 T = 0.42\n", - " <-- Site = 3- 4 .. Mmps = 190 Ndav = 1 E = -75.7275367711 Error = 4.00e-19 FLOPS = 7.33e+08 Tdav = 0.01 T = 0.20\n", - " <-- Site = 2- 3 .. Mmps = 76 Ndav = 1 E = -75.7275367711 Error = 1.19e-19 FLOPS = 2.20e+08 Tdav = 0.00 T = 0.08\n", - " <-- Site = 1- 2 .. Mmps = 25 Ndav = 1 E = -75.7275367711 Error = 2.34e-20 FLOPS = 8.39e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 0- 1 .. Mmps = 7 Ndav = 1 E = -75.7275367711 Error = 5.34e-35 FLOPS = 7.93e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 417.950 | E = -75.7276984767 | DE = 5.25e-04 | DW = 3.58e-05\n", - "Time sweep = 18.892 | 12.9 GFLOP/SWP\n", - " | Dmem = 15.9 MB (2%) | Imem = 2.22 MB (95%) | Hmem = 363 MB | Pmem = 0 B\n", - " | Tread = 0.266 | Twrite = 0.355 | Tfpread = 0.264 | Tfpwrite = 0.350 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 152 MB | cpsd = 123 MB\n", - " | Trot = 0.715 | Tctr = 0.008 | Tint = 0.006 | Tmid = 0.000 | Tdctr = 0.010 | Tdiag = 0.096 | Tinfo = 0.232\n", - " | Teff = 13.376 | Tprt = 0.000 | Teig = 3.621 | Tblk = 17.316 | Tmve = 1.346 | Tdm = 0.003 | Tsplt = 0.057 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 9 | Direction = backward | Bond dimension = 600 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 610.012 | E = -75.7282237067 | DE = 1.06e-04 | DW = 8.58e-06\n", "\n", - "Sweep = 10 | Direction = forward | Bond dimension = 400 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7275367711 Error = 0.00e+00 FLOPS = 1.40e+06 Tdav = 0.00 T = 0.01\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7275367711 Error = 0.00e+00 FLOPS = 7.02e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7275367711 Error = 0.00e+00 FLOPS = 2.03e+08 Tdav = 0.00 T = 0.04\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7275367711 Error = 0.00e+00 FLOPS = 7.49e+08 Tdav = 0.01 T = 0.16\n", - " --> Site = 4- 5 .. Mmps = 400 Ndav = 1 E = -75.7275367711 Error = 1.08e-19 FLOPS = 1.85e+09 Tdav = 0.02 T = 0.24\n", - " --> Site = 5- 6 .. Mmps = 400 Ndav = 7 E = -75.7276985924 Error = 3.57e-05 FLOPS = 4.77e+09 Tdav = 0.33 T = 0.72\n", - " --> Site = 6- 7 .. Mmps = 400 Ndav = 5 E = -75.7275766200 Error = 8.80e-06 FLOPS = 4.79e+09 Tdav = 0.24 T = 0.70\n", - " --> Site = 7- 8 .. Mmps = 400 Ndav = 4 E = -75.7275567933 Error = 4.28e-06 FLOPS = 4.98e+09 Tdav = 0.19 T = 0.73\n", - " --> Site = 8- 9 .. Mmps = 400 Ndav = 4 E = -75.7275545325 Error = 3.48e-06 FLOPS = 4.83e+09 Tdav = 0.23 T = 0.87\n", - " --> Site = 9- 10 .. Mmps = 400 Ndav = 4 E = -75.7275602859 Error = 4.40e-06 FLOPS = 4.79e+09 Tdav = 0.27 T = 1.02\n", - " --> Site = 10- 11 .. Mmps = 400 Ndav = 4 E = -75.7275481009 Error = 1.67e-06 FLOPS = 2.46e+09 Tdav = 0.61 T = 1.81\n", - " --> Site = 11- 12 .. Mmps = 400 Ndav = 3 E = -75.7275418616 Error = 4.50e-07 FLOPS = 4.97e+09 Tdav = 0.26 T = 3.32\n", - " --> Site = 12- 13 .. Mmps = 400 Ndav = 3 E = -75.7275416514 Error = 3.60e-07 FLOPS = 4.84e+09 Tdav = 0.27 T = 2.78\n", - " --> Site = 13- 14 .. Mmps = 400 Ndav = 3 E = -75.7275400306 Error = 7.09e-08 FLOPS = 4.57e+09 Tdav = 0.26 T = 2.00\n", - " --> Site = 14- 15 .. Mmps = 400 Ndav = 2 E = -75.7275397222 Error = 1.79e-08 FLOPS = 4.43e+09 Tdav = 0.15 T = 1.23\n", - " --> Site = 15- 16 .. Mmps = 400 Ndav = 2 E = -75.7275397449 Error = 1.56e-08 FLOPS = 4.68e+09 Tdav = 0.12 T = 0.83\n", - " --> Site = 16- 17 .. Mmps = 400 Ndav = 2 E = -75.7275396398 Error = 5.89e-10 FLOPS = 4.25e+09 Tdav = 0.10 T = 0.71\n", - " --> Site = 17- 18 .. Mmps = 364 Ndav = 2 E = -75.7275396364 Error = 3.05e-20 FLOPS = 3.52e+09 Tdav = 0.07 T = 0.57\n", - " --> Site = 18- 19 .. Mmps = 272 Ndav = 1 E = -75.7275396364 Error = 2.00e-20 FLOPS = 2.20e+09 Tdav = 0.02 T = 0.39\n", - " --> Site = 19- 20 .. Mmps = 197 Ndav = 2 E = -75.7275396375 Error = 2.52e-20 FLOPS = 1.31e+09 Tdav = 0.02 T = 0.24\n", - " --> Site = 20- 21 .. Mmps = 143 Ndav = 1 E = -75.7275396375 Error = 1.66e-20 FLOPS = 5.32e+08 Tdav = 0.01 T = 0.18\n", - " --> Site = 21- 22 .. Mmps = 84 Ndav = 1 E = -75.7275396375 Error = 1.31e-20 FLOPS = 1.85e+08 Tdav = 0.00 T = 0.08\n", - " --> Site = 22- 23 .. Mmps = 34 Ndav = 1 E = -75.7275396375 Error = 2.90e-21 FLOPS = 5.52e+07 Tdav = 0.00 T = 0.04\n", - " --> Site = 23- 24 .. Mmps = 13 Ndav = 1 E = -75.7275396375 Error = 6.90e-21 FLOPS = 2.08e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 24- 25 .. Mmps = 4 Ndav = 1 E = -75.7275396375 Error = 1.09e-20 FLOPS = 1.09e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 436.857 | E = -75.7276985924 | DE = -1.16e-07 | DW = 3.57e-05\n", - "Time sweep = 18.907 | 12.5 GFLOP/SWP\n", - " | Dmem = 15.9 MB (2%) | Imem = 2.21 MB (95%) | Hmem = 363 MB | Pmem = 0 B\n", - " | Tread = 0.493 | Twrite = 0.359 | Tfpread = 0.488 | Tfpwrite = 0.354 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 151 MB | cpsd = 121 MB\n", - " | Trot = 0.749 | Tctr = 0.012 | Tint = 0.005 | Tmid = 0.000 | Tdctr = 0.251 | Tdiag = 0.090 | Tinfo = 0.441\n", - " | Teff = 13.725 | Tprt = 0.000 | Teig = 3.201 | Tblk = 17.128 | Tmve = 1.593 | Tdm = 0.003 | Tsplt = 0.054 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 10 | Direction = forward | Bond dimension = 600 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 646.755 | E = -75.7282237089 | DE = -2.27e-09 | DW = 8.58e-06\n", "\n", - "Sweep = 11 | Direction = backward | Bond dimension = 400 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7275396375 Error = 0.00e+00 FLOPS = 1.09e+06 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7275396375 Error = 0.00e+00 FLOPS = 1.07e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7275396375 Error = 0.00e+00 FLOPS = 5.47e+07 Tdav = 0.00 T = 0.04\n", - " <-- Site = 21- 22 .. Mmps = 81 Ndav = 1 E = -75.7275396375 Error = 0.00e+00 FLOPS = 9.56e+07 Tdav = 0.01 T = 0.08\n", - " <-- Site = 20- 21 .. Mmps = 140 Ndav = 1 E = -75.7275396375 Error = 2.54e-24 FLOPS = 2.78e+08 Tdav = 0.01 T = 0.15\n", - " <-- Site = 19- 20 .. Mmps = 192 Ndav = 1 E = -75.7275396375 Error = 1.79e-23 FLOPS = 4.72e+08 Tdav = 0.03 T = 0.34\n", - " <-- Site = 18- 19 .. Mmps = 264 Ndav = 1 E = -75.7275396375 Error = 4.19e-23 FLOPS = 1.06e+09 Tdav = 0.05 T = 0.65\n", - " <-- Site = 17- 18 .. Mmps = 357 Ndav = 1 E = -75.7275396375 Error = 1.35e-22 FLOPS = 1.63e+09 Tdav = 0.07 T = 0.82\n", - " <-- Site = 16- 17 .. Mmps = 400 Ndav = 2 E = -75.7275396422 Error = 5.86e-10 FLOPS = 2.67e+09 Tdav = 0.16 T = 1.06\n", - " <-- Site = 15- 16 .. Mmps = 400 Ndav = 2 E = -75.7275397544 Error = 1.57e-08 FLOPS = 3.86e+09 Tdav = 0.15 T = 1.10\n", - " <-- Site = 14- 15 .. Mmps = 400 Ndav = 2 E = -75.7275397645 Error = 1.81e-08 FLOPS = 4.57e+09 Tdav = 0.15 T = 1.15\n", - " <-- Site = 13- 14 .. Mmps = 400 Ndav = 3 E = -75.7275401142 Error = 7.14e-08 FLOPS = 4.68e+09 Tdav = 0.26 T = 1.77\n", - " <-- Site = 12- 13 .. Mmps = 400 Ndav = 3 E = -75.7275418234 Error = 3.59e-07 FLOPS = 3.90e+09 Tdav = 0.34 T = 2.84\n", - " <-- Site = 11- 12 .. Mmps = 400 Ndav = 3 E = -75.7275422402 Error = 4.48e-07 FLOPS = 4.74e+09 Tdav = 0.28 T = 2.33\n", - " <-- Site = 10- 11 .. Mmps = 400 Ndav = 4 E = -75.7275488713 Error = 1.68e-06 FLOPS = 4.77e+09 Tdav = 0.32 T = 1.13\n", - " <-- Site = 9- 10 .. Mmps = 400 Ndav = 4 E = -75.7275622329 Error = 4.47e-06 FLOPS = 2.89e+09 Tdav = 0.45 T = 1.22\n", - " <-- Site = 8- 9 .. Mmps = 400 Ndav = 4 E = -75.7275567428 Error = 3.49e-06 FLOPS = 2.61e+09 Tdav = 0.43 T = 1.54\n", - " <-- Site = 7- 8 .. Mmps = 400 Ndav = 4 E = -75.7275595205 Error = 4.26e-06 FLOPS = 2.71e+09 Tdav = 0.34 T = 1.29\n", - " <-- Site = 6- 7 .. Mmps = 400 Ndav = 5 E = -75.7275803455 Error = 8.82e-06 FLOPS = 4.83e+09 Tdav = 0.24 T = 0.91\n", - " <-- Site = 5- 6 .. Mmps = 400 Ndav = 7 E = -75.7277012757 Error = 3.54e-05 FLOPS = 4.58e+09 Tdav = 0.34 T = 0.72\n", - " <-- Site = 4- 5 .. Mmps = 400 Ndav = 5 E = -75.7275408266 Error = 1.48e-18 FLOPS = 1.98e+09 Tdav = 0.11 T = 0.35\n", - " <-- Site = 3- 4 .. Mmps = 196 Ndav = 1 E = -75.7275408266 Error = 4.18e-19 FLOPS = 7.58e+08 Tdav = 0.01 T = 0.18\n", - " <-- Site = 2- 3 .. Mmps = 79 Ndav = 1 E = -75.7275408266 Error = 8.46e-20 FLOPS = 2.41e+08 Tdav = 0.00 T = 0.08\n", - " <-- Site = 1- 2 .. Mmps = 25 Ndav = 1 E = -75.7275408266 Error = 1.76e-20 FLOPS = 7.68e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 0- 1 .. Mmps = 7 Ndav = 1 E = -75.7275408266 Error = 3.24e-34 FLOPS = 4.95e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 456.868 | E = -75.7277012757 | DE = -2.68e-06 | DW = 3.54e-05\n", - "Time sweep = 20.011 | 12.6 GFLOP/SWP\n", - " | Dmem = 15.9 MB (2%) | Imem = 2.21 MB (95%) | Hmem = 364 MB | Pmem = 0 B\n", - " | Tread = 0.283 | Twrite = 0.407 | Tfpread = 0.281 | Tfpwrite = 0.402 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 152 MB | cpsd = 123 MB\n", - " | Trot = 0.829 | Tctr = 0.012 | Tint = 0.010 | Tmid = 0.000 | Tdctr = 0.014 | Tdiag = 0.115 | Tinfo = 0.284\n", - " | Teff = 14.352 | Tprt = 0.000 | Teig = 3.748 | Tblk = 18.241 | Tmve = 1.575 | Tdm = 0.003 | Tsplt = 0.064 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 11 | Direction = backward | Bond dimension = 600 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 683.397 | E = -75.7282244369 | DE = -7.28e-07 | DW = 8.41e-06\n", "\n", - "Sweep = 12 | Direction = forward | Bond dimension = 200 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7275408266 Error = 0.00e+00 FLOPS = 3.60e+06 Tdav = 0.00 T = 0.00\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7275408266 Error = 0.00e+00 FLOPS = 6.37e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7275408266 Error = 0.00e+00 FLOPS = 1.27e+08 Tdav = 0.00 T = 0.07\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7275408266 Error = 0.00e+00 FLOPS = 7.59e+08 Tdav = 0.01 T = 0.16\n", - " --> Site = 4- 5 .. Mmps = 200 Ndav = 1 E = -75.7275408266 Error = 2.59e-04 FLOPS = 1.79e+09 Tdav = 0.02 T = 0.26\n", - " --> Site = 5- 6 .. Mmps = 200 Ndav = 6 E = -75.7265754481 Error = 2.90e-04 FLOPS = 3.08e+09 Tdav = 0.14 T = 0.46\n", - " --> Site = 6- 7 .. Mmps = 200 Ndav = 5 E = -75.7254097445 Error = 1.66e-04 FLOPS = 2.54e+09 Tdav = 0.15 T = 0.51\n", - " --> Site = 7- 8 .. Mmps = 200 Ndav = 5 E = -75.7247335396 Error = 4.19e-05 FLOPS = 2.99e+09 Tdav = 0.13 T = 0.53\n", - " --> Site = 8- 9 .. Mmps = 200 Ndav = 4 E = -75.7245712589 Error = 2.67e-05 FLOPS = 3.05e+09 Tdav = 0.13 T = 0.61\n", - " --> Site = 9- 10 .. Mmps = 200 Ndav = 4 E = -75.7244666215 Error = 3.45e-05 FLOPS = 2.71e+09 Tdav = 0.17 T = 0.71\n", - " --> Site = 10- 11 .. Mmps = 200 Ndav = 4 E = -75.7243124192 Error = 1.37e-05 FLOPS = 3.02e+09 Tdav = 0.17 T = 0.77\n", - " --> Site = 11- 12 .. Mmps = 200 Ndav = 3 E = -75.7242471124 Error = 3.68e-06 FLOPS = 2.90e+09 Tdav = 0.15 T = 1.96\n", - " --> Site = 12- 13 .. Mmps = 200 Ndav = 3 E = -75.7242292089 Error = 3.34e-06 FLOPS = 2.86e+09 Tdav = 0.15 T = 1.77\n", - " --> Site = 13- 14 .. Mmps = 200 Ndav = 3 E = -75.7242109307 Error = 1.73e-06 FLOPS = 1.30e+09 Tdav = 0.31 T = 1.85\n", - " --> Site = 14- 15 .. Mmps = 200 Ndav = 3 E = -75.7242009837 Error = 8.90e-07 FLOPS = 1.45e+09 Tdav = 0.22 T = 1.42\n", - " --> Site = 15- 16 .. Mmps = 200 Ndav = 3 E = -75.7241954929 Error = 6.34e-07 FLOPS = 1.59e+09 Tdav = 0.17 T = 0.90\n", - " --> Site = 16- 17 .. Mmps = 200 Ndav = 2 E = -75.7241912042 Error = 4.43e-08 FLOPS = 1.55e+09 Tdav = 0.07 T = 0.57\n", - " --> Site = 17- 18 .. Mmps = 200 Ndav = 2 E = -75.7241908787 Error = 3.75e-09 FLOPS = 1.60e+09 Tdav = 0.04 T = 0.35\n", - " --> Site = 18- 19 .. Mmps = 200 Ndav = 2 E = -75.7241908548 Error = 3.21e-11 FLOPS = 1.17e+09 Tdav = 0.03 T = 0.26\n", - " --> Site = 19- 20 .. Mmps = 158 Ndav = 2 E = -75.7241908559 Error = 2.45e-20 FLOPS = 8.95e+08 Tdav = 0.02 T = 0.20\n", - " --> Site = 20- 21 .. Mmps = 107 Ndav = 1 E = -75.7241908559 Error = 1.33e-20 FLOPS = 4.11e+08 Tdav = 0.01 T = 0.12\n", - " --> Site = 21- 22 .. Mmps = 72 Ndav = 1 E = -75.7241908559 Error = 1.26e-20 FLOPS = 8.83e+07 Tdav = 0.01 T = 0.08\n", - " --> Site = 22- 23 .. Mmps = 32 Ndav = 1 E = -75.7241908559 Error = 8.33e-21 FLOPS = 5.08e+07 Tdav = 0.00 T = 0.03\n", - " --> Site = 23- 24 .. Mmps = 13 Ndav = 1 E = -75.7241908559 Error = 4.40e-21 FLOPS = 1.77e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 24- 25 .. Mmps = 4 Ndav = 1 E = -75.7241908559 Error = 1.04e-20 FLOPS = 1.49e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 470.719 | E = -75.7275408266 | DE = 1.60e-04 | DW = 2.90e-04\n", - "Time sweep = 13.852 | 4.40 GFLOP/SWP\n", - " | Dmem = 15.7 MB (0%) | Imem = 1.83 MB (93%) | Hmem = 227 MB | Pmem = 0 B\n", - " | Tread = 0.342 | Twrite = 0.118 | Tfpread = 0.336 | Tfpwrite = 0.113 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 39.7 MB | cpsd = 32.2 MB\n", - " | Trot = 0.403 | Tctr = 0.011 | Tint = 0.005 | Tmid = 0.000 | Tdctr = 0.084 | Tdiag = 0.080 | Tinfo = 0.403\n", - " | Teff = 10.475 | Tprt = 0.000 | Teig = 2.102 | Tblk = 12.662 | Tmve = 0.970 | Tdm = 0.002 | Tsplt = 0.024 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 12 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 714.398 | E = -75.7282244373 | DE = -3.28e-10 | DW = 2.34e-05\n", "\n", - "Sweep = 13 | Direction = backward | Bond dimension = 200 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7241908559 Error = 0.00e+00 FLOPS = 2.14e+06 Tdav = 0.00 T = 0.01\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7241908559 Error = 0.00e+00 FLOPS = 1.32e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7241908559 Error = 0.00e+00 FLOPS = 4.79e+07 Tdav = 0.00 T = 0.02\n", - " <-- Site = 21- 22 .. Mmps = 69 Ndav = 1 E = -75.7241908559 Error = 1.31e-26 FLOPS = 1.23e+08 Tdav = 0.00 T = 0.05\n", - " <-- Site = 20- 21 .. Mmps = 105 Ndav = 1 E = -75.7241908559 Error = 4.40e-24 FLOPS = 3.94e+08 Tdav = 0.01 T = 0.09\n", - " <-- Site = 19- 20 .. Mmps = 156 Ndav = 1 E = -75.7241908559 Error = 1.45e-23 FLOPS = 7.15e+08 Tdav = 0.01 T = 0.15\n", - " <-- Site = 18- 19 .. Mmps = 200 Ndav = 1 E = -75.7241908559 Error = 9.15e-23 FLOPS = 8.62e+08 Tdav = 0.02 T = 0.22\n", - " <-- Site = 17- 18 .. Mmps = 200 Ndav = 2 E = -75.7241908806 Error = 3.05e-09 FLOPS = 1.00e+09 Tdav = 0.05 T = 0.31\n", - " <-- Site = 16- 17 .. Mmps = 200 Ndav = 2 E = -75.7241910559 Error = 2.62e-08 FLOPS = 1.09e+09 Tdav = 0.06 T = 0.34\n", - " <-- Site = 15- 16 .. Mmps = 200 Ndav = 3 E = -75.7241938654 Error = 4.52e-07 FLOPS = 1.63e+09 Tdav = 0.08 T = 0.39\n", - " <-- Site = 14- 15 .. Mmps = 200 Ndav = 3 E = -75.7241933146 Error = 3.65e-07 FLOPS = 1.78e+09 Tdav = 0.09 T = 0.57\n", - " <-- Site = 13- 14 .. Mmps = 200 Ndav = 3 E = -75.7241956215 Error = 7.29e-07 FLOPS = 1.75e+09 Tdav = 0.10 T = 0.82\n", - " <-- Site = 12- 13 .. Mmps = 200 Ndav = 3 E = -75.7242000104 Error = 1.52e-06 FLOPS = 1.75e+09 Tdav = 0.11 T = 1.27\n", - " <-- Site = 11- 12 .. Mmps = 200 Ndav = 3 E = -75.7241997924 Error = 1.52e-06 FLOPS = 1.73e+09 Tdav = 0.10 T = 1.07\n", - " <-- Site = 10- 11 .. Mmps = 200 Ndav = 4 E = -75.7242209037 Error = 5.85e-06 FLOPS = 1.76e+09 Tdav = 0.12 T = 0.51\n", - " <-- Site = 9- 10 .. Mmps = 200 Ndav = 4 E = -75.7242612578 Error = 1.49e-05 FLOPS = 1.61e+09 Tdav = 0.11 T = 0.46\n", - " <-- Site = 8- 9 .. Mmps = 200 Ndav = 4 E = -75.7242471008 Error = 9.78e-06 FLOPS = 1.34e+09 Tdav = 0.12 T = 0.43\n", - " <-- Site = 7- 8 .. Mmps = 200 Ndav = 5 E = -75.7242724059 Error = 1.47e-05 FLOPS = 1.67e+09 Tdav = 0.10 T = 0.37\n", - " <-- Site = 6- 7 .. Mmps = 200 Ndav = 5 E = -75.7243109568 Error = 2.23e-05 FLOPS = 1.79e+09 Tdav = 0.08 T = 0.30\n", - " <-- Site = 5- 6 .. Mmps = 200 Ndav = 7 E = -75.7246335836 Error = 9.86e-05 FLOPS = 1.70e+09 Tdav = 0.11 T = 0.30\n", - " <-- Site = 4- 5 .. Mmps = 200 Ndav = 10 E = -75.7247007041 Error = 1.06e-04 FLOPS = 9.36e+08 Tdav = 0.16 T = 0.31\n", - " <-- Site = 3- 4 .. Mmps = 185 Ndav = 6 E = -75.7243003976 Error = 3.39e-19 FLOPS = 4.09e+08 Tdav = 0.04 T = 0.13\n", - " <-- Site = 2- 3 .. Mmps = 68 Ndav = 1 E = -75.7243003976 Error = 7.83e-20 FLOPS = 2.00e+08 Tdav = 0.00 T = 0.07\n", - " <-- Site = 1- 2 .. Mmps = 25 Ndav = 1 E = -75.7243003976 Error = 2.13e-20 FLOPS = 5.36e+07 Tdav = 0.00 T = 0.03\n", - " <-- Site = 0- 1 .. Mmps = 7 Ndav = 1 E = -75.7243003976 Error = 7.21e-22 FLOPS = 7.28e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 479.178 | E = -75.7247007041 | DE = 2.84e-03 | DW = 1.06e-04\n", - "Time sweep = 8.458 | 2.04 GFLOP/SWP\n", - " | Dmem = 4.01 MB (2%) | Imem = 1.63 MB (95%) | Hmem = 90.0 MB | Pmem = 0 B\n", - " | Tread = 0.065 | Twrite = 0.105 | Tfpread = 0.063 | Tfpwrite = 0.100 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 40.1 MB | cpsd = 33.0 MB\n", - " | Trot = 0.347 | Tctr = 0.008 | Tint = 0.005 | Tmid = 0.000 | Tdctr = 0.010 | Tdiag = 0.066 | Tinfo = 0.212\n", - " | Teff = 6.007 | Tprt = 0.000 | Teig = 1.469 | Tblk = 7.551 | Tmve = 0.687 | Tdm = 0.002 | Tsplt = 0.022 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 13 | Direction = backward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 741.278 | E = -75.7280407981 | DE = 1.84e-04 | DW = 1.76e-05\n", "\n", - "Sweep = 14 | Direction = forward | Bond dimension = 200 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " --> Site = 0- 1 .. Mmps = 3 Ndav = 1 E = -75.7243003976 Error = 0.00e+00 FLOPS = 6.96e+06 Tdav = 0.00 T = 0.00\n", - " --> Site = 1- 2 .. Mmps = 10 Ndav = 1 E = -75.7243003976 Error = 0.00e+00 FLOPS = 3.01e+07 Tdav = 0.00 T = 0.02\n", - " --> Site = 2- 3 .. Mmps = 35 Ndav = 1 E = -75.7243003976 Error = 0.00e+00 FLOPS = 2.04e+08 Tdav = 0.00 T = 0.05\n", - " --> Site = 3- 4 .. Mmps = 126 Ndav = 1 E = -75.7243003976 Error = 0.00e+00 FLOPS = 2.08e+08 Tdav = 0.01 T = 0.11\n", - " --> Site = 4- 5 .. Mmps = 200 Ndav = 8 E = -75.7247007051 Error = 1.06e-04 FLOPS = 5.13e+08 Tdav = 0.23 T = 0.44\n", - " --> Site = 5- 6 .. Mmps = 200 Ndav = 7 E = -75.7246344435 Error = 8.69e-05 FLOPS = 7.70e+08 Tdav = 0.24 T = 0.61\n", - " --> Site = 6- 7 .. Mmps = 200 Ndav = 5 E = -75.7243761780 Error = 1.83e-05 FLOPS = 8.28e+08 Tdav = 0.17 T = 0.58\n", - " --> Site = 7- 8 .. Mmps = 200 Ndav = 4 E = -75.7243619404 Error = 1.25e-05 FLOPS = 8.32e+08 Tdav = 0.15 T = 0.66\n", - " --> Site = 8- 9 .. Mmps = 200 Ndav = 4 E = -75.7243504843 Error = 7.41e-06 FLOPS = 8.69e+08 Tdav = 0.17 T = 0.70\n", - " --> Site = 9- 10 .. Mmps = 200 Ndav = 4 E = -75.7243733947 Error = 1.07e-05 FLOPS = 9.36e+08 Tdav = 0.19 T = 0.71\n", - " --> Site = 10- 11 .. Mmps = 200 Ndav = 4 E = -75.7243547027 Error = 4.87e-06 FLOPS = 1.62e+09 Tdav = 0.13 T = 0.60\n", - " --> Site = 11- 12 .. Mmps = 200 Ndav = 3 E = -75.7243398344 Error = 1.15e-06 FLOPS = 1.67e+09 Tdav = 0.10 T = 1.10\n", - " --> Site = 12- 13 .. Mmps = 200 Ndav = 3 E = -75.7243430226 Error = 1.22e-06 FLOPS = 1.66e+09 Tdav = 0.11 T = 1.30\n", - " --> Site = 13- 14 .. Mmps = 200 Ndav = 3 E = -75.7243408350 Error = 5.77e-07 FLOPS = 1.74e+09 Tdav = 0.10 T = 0.84\n", - " --> Site = 14- 15 .. Mmps = 200 Ndav = 3 E = -75.7243398668 Error = 2.06e-07 FLOPS = 1.74e+09 Tdav = 0.08 T = 0.60\n", - " --> Site = 15- 16 .. Mmps = 200 Ndav = 3 E = -75.7243413302 Error = 3.19e-07 FLOPS = 1.75e+09 Tdav = 0.07 T = 0.41\n", - " --> Site = 16- 17 .. Mmps = 200 Ndav = 3 E = -75.7243395472 Error = 1.64e-08 FLOPS = 1.45e+09 Tdav = 0.06 T = 0.37\n", - " --> Site = 17- 18 .. Mmps = 200 Ndav = 2 E = -75.7243395234 Error = 1.20e-09 FLOPS = 1.51e+09 Tdav = 0.03 T = 0.30\n", - " --> Site = 18- 19 .. Mmps = 200 Ndav = 2 E = -75.7243395216 Error = 6.35e-12 FLOPS = 1.22e+09 Tdav = 0.02 T = 0.25\n", - " --> Site = 19- 20 .. Mmps = 158 Ndav = 1 E = -75.7243395215 Error = 2.13e-20 FLOPS = 7.61e+08 Tdav = 0.01 T = 0.18\n", - " --> Site = 20- 21 .. Mmps = 107 Ndav = 1 E = -75.7243395215 Error = 8.45e-21 FLOPS = 4.05e+08 Tdav = 0.01 T = 0.11\n", - " --> Site = 21- 22 .. Mmps = 69 Ndav = 1 E = -75.7243395215 Error = 1.44e-20 FLOPS = 1.27e+08 Tdav = 0.00 T = 0.07\n", - " --> Site = 22- 23 .. Mmps = 34 Ndav = 1 E = -75.7243395215 Error = 4.97e-21 FLOPS = 4.41e+07 Tdav = 0.00 T = 0.04\n", - " --> Site = 23- 24 .. Mmps = 14 Ndav = 1 E = -75.7243395215 Error = 3.31e-21 FLOPS = 1.29e+07 Tdav = 0.00 T = 0.01\n", - " --> Site = 24- 25 .. Mmps = 5 Ndav = 1 E = -75.7243395215 Error = 5.02e-22 FLOPS = 2.69e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 489.452 | E = -75.7247007051 | DE = -1.05e-09 | DW = 1.06e-04\n", - "Time sweep = 10.274 | 1.96 GFLOP/SWP\n", - " | Dmem = 4.04 MB (2%) | Imem = 1.63 MB (95%) | Hmem = 90.0 MB | Pmem = 0 B\n", - " | Tread = 0.159 | Twrite = 0.119 | Tfpread = 0.153 | Tfpwrite = 0.114 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 39.9 MB | cpsd = 32.5 MB\n", - " | Trot = 0.434 | Tctr = 0.009 | Tint = 0.007 | Tmid = 0.000 | Tdctr = 0.094 | Tdiag = 0.086 | Tinfo = 0.441\n", - " | Teff = 7.057 | Tprt = 0.000 | Teig = 1.916 | Tblk = 9.053 | Tmve = 1.022 | Tdm = 0.002 | Tsplt = 0.027 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 14 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 768.488 | E = -75.7280408085 | DE = -1.04e-08 | DW = 1.76e-05\n", "\n", - "Sweep = 15 | Direction = backward | Bond dimension = 200 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - " <-- Site = 24- 25 .. Mmps = 3 Ndav = 1 E = -75.7243395215 Error = 0.00e+00 FLOPS = 2.46e+06 Tdav = 0.00 T = 0.00\n", - " <-- Site = 23- 24 .. Mmps = 10 Ndav = 1 E = -75.7243395215 Error = 0.00e+00 FLOPS = 1.71e+07 Tdav = 0.00 T = 0.01\n", - " <-- Site = 22- 23 .. Mmps = 31 Ndav = 1 E = -75.7243395215 Error = 0.00e+00 FLOPS = 4.47e+07 Tdav = 0.00 T = 0.02\n", - " <-- Site = 21- 22 .. Mmps = 67 Ndav = 1 E = -75.7243395215 Error = 2.89e-25 FLOPS = 1.34e+08 Tdav = 0.00 T = 0.05\n", - " <-- Site = 20- 21 .. Mmps = 103 Ndav = 1 E = -75.7243395215 Error = 6.18e-24 FLOPS = 3.74e+08 Tdav = 0.01 T = 0.09\n", - " <-- Site = 19- 20 .. Mmps = 154 Ndav = 1 E = -75.7243395215 Error = 1.44e-23 FLOPS = 7.57e+08 Tdav = 0.01 T = 0.15\n", - " <-- Site = 18- 19 .. Mmps = 200 Ndav = 1 E = -75.7243395215 Error = 5.99e-23 FLOPS = 1.03e+09 Tdav = 0.01 T = 0.21\n", - " <-- Site = 17- 18 .. Mmps = 200 Ndav = 2 E = -75.7243395317 Error = 1.21e-09 FLOPS = 1.46e+09 Tdav = 0.03 T = 0.29\n", - " <-- Site = 16- 17 .. Mmps = 200 Ndav = 2 E = -75.7243396446 Error = 1.64e-08 FLOPS = 1.53e+09 Tdav = 0.04 T = 0.33\n", - " <-- Site = 15- 16 .. Mmps = 200 Ndav = 3 E = -75.7243416600 Error = 3.23e-07 FLOPS = 1.74e+09 Tdav = 0.07 T = 0.38\n", - " <-- Site = 14- 15 .. Mmps = 200 Ndav = 3 E = -75.7243408108 Error = 2.09e-07 FLOPS = 1.73e+09 Tdav = 0.09 T = 0.57\n", - " <-- Site = 13- 14 .. Mmps = 200 Ndav = 3 E = -75.7243429299 Error = 5.74e-07 FLOPS = 1.67e+09 Tdav = 0.11 T = 0.82\n", - " <-- Site = 12- 13 .. Mmps = 200 Ndav = 3 E = -75.7243467823 Error = 1.27e-06 FLOPS = 8.69e+08 Tdav = 0.22 T = 1.48\n", - " <-- Site = 11- 12 .. Mmps = 200 Ndav = 3 E = -75.7243459589 Error = 1.19e-06 FLOPS = 8.65e+08 Tdav = 0.20 T = 2.10\n", - " <-- Site = 10- 11 .. Mmps = 200 Ndav = 4 E = -75.7243649077 Error = 5.12e-06 FLOPS = 9.18e+08 Tdav = 0.23 T = 0.88\n", - " <-- Site = 9- 10 .. Mmps = 200 Ndav = 4 E = -75.7243906929 Error = 1.11e-05 FLOPS = 1.63e+09 Tdav = 0.11 T = 0.55\n", - " <-- Site = 8- 9 .. Mmps = 200 Ndav = 4 E = -75.7243732409 Error = 7.42e-06 FLOPS = 1.76e+09 Tdav = 0.09 T = 0.40\n", - " <-- Site = 7- 8 .. Mmps = 200 Ndav = 4 E = -75.7243925181 Error = 1.31e-05 FLOPS = 1.79e+09 Tdav = 0.07 T = 0.36\n", - " <-- Site = 6- 7 .. Mmps = 200 Ndav = 5 E = -75.7244146125 Error = 1.89e-05 FLOPS = 1.78e+09 Tdav = 0.08 T = 0.32\n", - " <-- Site = 5- 6 .. Mmps = 200 Ndav = 6 E = -75.7246675725 Error = 8.52e-05 FLOPS = 1.75e+09 Tdav = 0.09 T = 0.28\n", - " <-- Site = 4- 5 .. Mmps = 200 Ndav = 7 E = -75.7247335337 Error = 1.03e-04 FLOPS = 1.02e+09 Tdav = 0.10 T = 0.26\n", - " <-- Site = 3- 4 .. Mmps = 181 Ndav = 6 E = -75.7243485733 Error = 2.89e-19 FLOPS = 3.96e+08 Tdav = 0.04 T = 0.14\n", - " <-- Site = 2- 3 .. Mmps = 72 Ndav = 1 E = -75.7243485733 Error = 8.45e-20 FLOPS = 2.15e+08 Tdav = 0.00 T = 0.07\n", - " <-- Site = 1- 2 .. Mmps = 28 Ndav = 1 E = -75.7243485733 Error = 2.83e-21 FLOPS = 4.02e+07 Tdav = 0.00 T = 0.04\n", - " <-- Site = 0- 1 .. Mmps = 8 Ndav = 1 E = -75.7243485733 Error = 2.84e-21 FLOPS = 8.50e+06 Tdav = 0.00 T = 0.01\n", - "Time elapsed = 499.476 | E = -75.7247335337 | DE = -3.28e-05 | DW = 1.03e-04\n", - "Time sweep = 10.024 | 1.90 GFLOP/SWP\n", - " | Dmem = 4.04 MB (2%) | Imem = 1.63 MB (95%) | Hmem = 89.7 MB | Pmem = 0 B\n", - " | Tread = 0.071 | Twrite = 0.117 | Tfpread = 0.069 | Tfpwrite = 0.112 | Tmporead = 0.000 | Tasync = 0.000\n", - " | data = 40.2 MB | cpsd = 33.1 MB\n", - " | Trot = 0.441 | Tctr = 0.014 | Tint = 0.010 | Tmid = 0.000 | Tdctr = 0.010 | Tdiag = 0.075 | Tinfo = 0.228\n", - " | Teff = 7.308 | Tprt = 0.000 | Teig = 1.606 | Tblk = 8.993 | Tmve = 0.826 | Tdm = 0.002 | Tsplt = 0.025 | Tsvd = 0.000 | Torth = 0.000\n", + "Sweep = 15 | Direction = backward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 795.707 | E = -75.7280421420 | DE = -1.33e-06 | DW = 1.74e-05\n", "\n" ] } - ], - "source": [ - "bond_dims = [800] * 4 + [600] * 4 + [400] * 4 + [200] * 4\n", - "noises = [0] * 16\n", - "thrds = [1e-8] * 16\n", - "\n", - "ket_orig = ket.deep_copy('KET-ORIG')\n", - "ket_orig.info.save_data(driver.scratch + \"/%s-mps_info.bin\" % ket_orig.info.tag)\n", - "\n", - "ket = driver.adjust_mps(ket, dot=2)[0]\n", - "energy = driver.dmrg(mpo, ket, n_sweeps=16, bond_dims=bond_dims, noises=noises,\n", - " tol=0, thrds=thrds, iprint=2)" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "93XI4zDZgnHZ" - }, "source": [ "## Energy Extrapolation" - ] + ], + "metadata": { + "id": "93XI4zDZgnHZ" + } }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "51Cdjar2ifvG" - }, "source": [ "We can get the extrapolated energy using linear fitting." - ] + ], + "metadata": { + "id": "51Cdjar2ifvG" + } }, { "cell_type": "code", - "execution_count": 7, + "source": [ + "import scipy.stats\n", + "\n", + "ds, dws, eners = driver.get_dmrg_results()\n", + "print('BOND DIMS = ', ds[3::4])\n", + "print('Discarded Weights = ', dws[3::4])\n", + "print('Energies = ', eners[3::4, 0])\n", + "reg = scipy.stats.linregress(dws[3::4], eners[3::4, 0])\n", + "emin, emax = min(eners[3::4, 0]), max(eners[3::4, 0])\n", + "print('DMRG energy (extrapolated) = %20.15f +/- %15.10f' %\n", + " (reg.intercept, abs(reg.intercept - emin) / 5))" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "kRgOZpp2gv1P", - "outputId": "418cfb1c-4e3f-4f81-8de9-951674eba701" + "outputId": "bfc24b03-e696-4abb-afee-e07efa0f9b72" }, + "execution_count": 5, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "BOND DIMS = [800 600 400 200]\n", - "Discarded Weights = [2.40365736e-06 8.40721063e-06 3.54005596e-05 1.03451119e-04]\n", - "Energies = [-75.72840386 -75.72822331 -75.72770128 -75.72473353]\n", - "DMRG energy (extrapolated) = -75.728636679111119 +/- 0.0000465644\n" + "BOND DIMS = [800 700 600 500]\n", + "Discarded Weights = [2.39910258e-06 3.39687452e-06 8.41354132e-06 1.74228067e-05]\n", + "Energies = [-75.72840404 -75.7283302 -75.72822444 -75.72804214]\n", + "DMRG energy (extrapolated) = -75.728429118584003 +/- 0.0000050161\n" ] } - ], - "source": [ - "import scipy.stats\n", - "\n", - "ds, dws, eners = driver.get_dmrg_results()\n", - "print('BOND DIMS = ', ds[3::4])\n", - "print('Discarded Weights = ', dws[3::4])\n", - "print('Energies = ', eners[3::4, 0])\n", - "reg = scipy.stats.linregress(dws[3::4], eners[3::4, 0])\n", - "emin, emax = min(eners[3::4, 0]), max(eners[3::4, 0])\n", - "print('DMRG energy (extrapolated) = %20.15f +/- %15.10f' %\n", - " (reg.intercept, abs(reg.intercept - emin) / 5))" ] }, { - "attachments": {}, "cell_type": "markdown", + "source": [ + "Finally, we plot the energy extrapolation.\n", + "\n", + "If you see a non-linear behavior, for example, the actual energy at larger bond dimension is higher than the linear fitting, it can be a signal of local minima. One may need to use increase the largest bond dimension used in the forward sweep, change the orbital ordering, or use a stricter Davidson convergence threshold (such as 1E-10)." + ], "metadata": { "id": "bx4acBALijEc" - }, - "source": [ - "Finally, we plot the energy extrapolation." - ] + } }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 503 - }, - "id": "03Zq1W_VinsW", - "outputId": "486cbd59-7b5c-4956-c58b-1ed50275eedc" - }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "import matplotlib.pyplot as plt\n", "from matplotlib import ticker\n", @@ -1869,21 +396,28 @@ "plt.xlabel(\"Largest Discarded Weight\")\n", "plt.ylabel(\"Sweep Energy (Hartree)\")\n", "plt.subplots_adjust(left=0.17, bottom=0.1, right=0.95, top=0.95)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 503 + }, + "id": "03Zq1W_VinsW", + "outputId": "f4298084-4f66-4065-f951-36f160a2131e" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } ] } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - }, - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} + ] +} \ No newline at end of file diff --git a/docs/source/tutorial/greens-function.ipynb b/docs/source/tutorial/greens-function.ipynb new file mode 100644 index 00000000..4a6d395e --- /dev/null +++ b/docs/source/tutorial/greens-function.ipynb @@ -0,0 +1,1042 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Green's Function and TD-DMRG\n", + "\n", + "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/block-hczhai/block2-preview/blob/master/docs/source/tutorial/greens-function.ipynb)" + ], + "metadata": { + "id": "ctuEMhLVU0O5" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install block2==0.5.2rc13 -qq --progress-bar off --extra-index-url=https://block-hczhai.github.io/block2-preview/pypi/\n", + "!pip install pyscf==2.3.0 -qq --progress-bar off" + ], + "metadata": { + "id": "zlAQvp7RmKRP" + }, + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "In the following example, we calculate the electron removal (IP) part of one-particle Green's function for Hydrogen chain ($\\mathrm{H_6}$) in the minimal basis:\n", + "\n", + "$$\n", + " G_{ij}^-(\\omega) = \\langle \\Psi_0 | a_j^\\dagger \\frac{1}{\\omega + \\hat{H}_0 - E_0 + i \\eta} a_i |\\Psi_0\\rangle\n", + "$$\n", + "\n", + "where $|\\Psi_0\\rangle$ is the ground state, $i = j = 2$ (counting from zero), $\\eta = 0.005$.\n", + "\n", + "The Green's function can be computed using DMRG in either the frequency domain (dynamical DMRG) or the time domain (time-dependent DMRG).\n", + "\n", + "## Dynamical DMRG\n", + "\n", + "We first solve the response equation to find the Green's function in the frequency domain.\n", + "\n", + "Note that the return value of ``driver.greens_function`` method is the state:\n", + "\n", + "$$|X_i\\rangle := \\frac{1}{\\omega + \\hat{H}_0 - E_0 + i \\eta} a_i |\\Psi_0\\rangle\n", + "$$\n", + "\n", + "Therefore, to get the value for Green's function with $i\\neq j$, one can simply use ``driver.expectation`` to compute the dot product of $|X_i\\rangle$ with some other $a_j|\\Psi_0\\rangle$.\n", + "\n", + "In the ``SU2`` mode:" + ], + "metadata": { + "id": "IqlreH0DVTV2" + } + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "from pyblock2._pyscf.ao2mo import integrals as itg\n", + "from pyblock2.driver.core import DMRGDriver, SymmetryTypes\n", + "from pyscf import gto, scf, lo\n", + "\n", + "BOHR = 0.52917721092\n", + "R = 1.8 * BOHR\n", + "N = 6\n", + "\n", + "mol = gto.M(atom=[['H', (i * R, 0, 0)] for i in range(N)], basis=\"sto6g\", symmetry=\"c1\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "\n", + "mf.mo_coeff = lo.orth.lowdin(mol.intor('cint1e_ovlp_sph'))\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf, ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "bond_dims = [150] * 4 + [200] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + "thrds = [1e-10] * 8\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, integral_cutoff=1E-8, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"KET\", bond_dim=150, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('Ground state energy = %20.15f' % energy)\n", + "\n", + "isite = 2\n", + "mpo.const_e -= energy\n", + "eta = 0.005\n", + "\n", + "dmpo = driver.get_site_mpo(op='D', site_index=isite, iprint=0)\n", + "dket = driver.get_random_mps(tag=\"DKET\", bond_dim=200, center=ket.center, left_vacuum=dmpo.left_vacuum)\n", + "driver.multiply(dket, dmpo, ket, n_sweeps=10, bond_dims=[200], thrds=[1E-10] * 10, iprint=1)\n", + "\n", + "freqs = np.arange(-0.8, -0.2, 0.01)\n", + "gfmat = np.zeros((len(freqs), ), dtype=complex)\n", + "for iw, freq in enumerate(freqs):\n", + " bra = driver.copy_mps(dket, tag=\"BRA\") # initial guess\n", + " gfmat[iw] = driver.greens_function(bra, mpo, dmpo, ket, freq, eta, n_sweeps=6,\n", + " bra_bond_dims=[200], ket_bond_dims=[200], thrds=[1E-6] * 10, iprint=0)\n", + " print(\"FREQ = %8.2f GF[%d,%d] = %12.6f + %12.6f i\" % (freq, isite, isite, gfmat[iw].real, gfmat[iw].imag))\n", + "\n", + "ldos = -1 / np.pi * gfmat.imag\n", + "\n", + "import matplotlib.pyplot as plt\n", + "plt.grid(which='major', axis='both', alpha=0.5)\n", + "plt.plot(freqs, ldos, linestyle='-', marker='o', markersize=4, mfc='white', mec=\"#7FB685\", color=\"#7FB685\")\n", + "plt.xlabel(\"Frequency $\\\\omega$\")\n", + "plt.ylabel(\"LDOS\")\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "oucBiDNpW_AZ", + "outputId": "a46e8955-2378-462a-f639-e9d0d3394bba" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "integral symmetrize error = 0.0\n", + "integral cutoff error = 0.0\n", + "mpo terms = 863\n", + "\n", + "Build MPO | Nsites = 6 | Nterms = 863 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 6 .. Mmpo = 13 DW = 0.00e+00 NNZ = 13 SPT = 0.0000 Tmvc = 0.000 T = 0.008\n", + " Site = 1 / 6 .. Mmpo = 34 DW = 0.00e+00 NNZ = 100 SPT = 0.7738 Tmvc = 0.000 T = 0.004\n", + " Site = 2 / 6 .. Mmpo = 56 DW = 0.00e+00 NNZ = 185 SPT = 0.9028 Tmvc = 0.000 T = 0.004\n", + " Site = 3 / 6 .. Mmpo = 34 DW = 0.00e+00 NNZ = 419 SPT = 0.7799 Tmvc = 0.001 T = 0.004\n", + " Site = 4 / 6 .. Mmpo = 14 DW = 0.00e+00 NNZ = 105 SPT = 0.7794 Tmvc = 0.000 T = 0.003\n", + " Site = 5 / 6 .. Mmpo = 1 DW = 0.00e+00 NNZ = 14 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", + "Ttotal = 0.027 Tmvc-total = 0.002 MPO bond dimension = 56 MaxDW = 0.00e+00\n", + "NNZ = 836 SIZE = 4753 SPT = 0.8241\n", + "\n", + "Rank = 0 Ttotal = 0.057 MPO method = FastBipartite bond dimension = 56 NNZ = 836 SIZE = 4753 SPT = 0.8241\n", + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.061 | E = -3.2667431000 | DW = 1.41e-20\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.105 | E = -3.2667431000 | DE = 7.11e-15 | DW = 9.98e-21\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.148 | E = -3.2667431000 | DE = 0.00e+00 | DW = 1.25e-20\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.197 | E = -3.2667431000 | DE = -1.78e-15 | DW = 1.88e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.238 | E = -3.2667431000 | DE = 1.78e-15 | DW = 1.13e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.280 | E = -3.2667431000 | DE = 1.78e-15 | DW = 1.19e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.319 | E = -3.2667431000 | DE = -1.78e-15 | DW = 9.42e-21\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.365 | E = -3.2667431000 | DE = -1.78e-15 | DW = 2.01e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 200 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 0.400 | E = -3.2667431000 | DE = 3.55e-15 | DW = 1.53e-20\n", + "\n", + "Ground state energy = -3.266743099950662\n", + "\n", + "Sweep = 0 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.018 | F = 0.9962046481 | DW = 5.23e-25\n", + "\n", + "Sweep = 1 | Direction = forward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.038 | F = 0.9970609307 | DF = 8.56e-04 | DW = 8.99e-25\n", + "\n", + "Sweep = 2 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.059 | F = 0.9970609307 | DF = 4.44e-16 | DW = 6.59e-25\n", + "\n", + "Sweep = 3 | Direction = forward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.079 | F = 0.9970609307 | DF = -3.33e-16 | DW = 3.32e-25\n", + "\n", + "Sweep = 4 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.101 | F = 0.9970609307 | DF = -3.33e-16 | DW = 3.88e-25\n", + "\n", + "FREQ = -0.80 GF[2,2] = -2.858060 + -0.132949 i\n", + "FREQ = -0.79 GF[2,2] = -3.127639 + -0.137862 i\n", + "FREQ = -0.78 GF[2,2] = -3.410730 + -0.146788 i\n", + "FREQ = -0.77 GF[2,2] = -3.716042 + -0.159910 i\n", + "FREQ = -0.76 GF[2,2] = -4.052436 + -0.177910 i\n", + "FREQ = -0.75 GF[2,2] = -4.429247 + -0.202036 i\n", + "FREQ = -0.74 GF[2,2] = -4.862689 + -0.234242 i\n", + "FREQ = -0.73 GF[2,2] = -5.370446 + -0.277828 i\n", + "FREQ = -0.72 GF[2,2] = -5.979802 + -0.338034 i\n", + "FREQ = -0.71 GF[2,2] = -6.730787 + -0.424057 i\n", + "FREQ = -0.70 GF[2,2] = -7.689106 + -0.552665 i\n", + "FREQ = -0.69 GF[2,2] = -8.964426 + -0.757635 i\n", + "FREQ = -0.68 GF[2,2] = -10.763740 + -1.118686 i\n", + "FREQ = -0.67 GF[2,2] = -13.510429 + -1.904433 i\n", + "FREQ = -0.66 GF[2,2] = -17.418881 + -3.612921 i\n", + "FREQ = -0.65 GF[2,2] = -26.296063 + -7.892317 i\n", + "FREQ = -0.64 GF[2,2] = -44.979411 + -35.247680 i\n", + "FREQ = -0.63 GF[2,2] = 41.659891 + -56.954077 i\n", + "FREQ = -0.62 GF[2,2] = 27.132451 + -10.471813 i\n", + "FREQ = -0.61 GF[2,2] = 16.312481 + -3.861684 i\n", + "FREQ = -0.60 GF[2,2] = 11.092739 + -2.003940 i\n", + "FREQ = -0.59 GF[2,2] = 8.036382 + -1.254680 i\n", + "FREQ = -0.58 GF[2,2] = 5.972372 + -0.893065 i\n", + "FREQ = -0.57 GF[2,2] = 4.418047 + -0.708471 i\n", + "FREQ = -0.56 GF[2,2] = 3.108176 + -0.629033 i\n", + "FREQ = -0.55 GF[2,2] = 1.874834 + -0.643365 i\n", + "FREQ = -0.54 GF[2,2] = 0.501622 + -0.805649 i\n", + "FREQ = -0.53 GF[2,2] = -1.428740 + -1.392787 i\n", + "FREQ = -0.52 GF[2,2] = -5.038213 + -4.367329 i\n", + "FREQ = -0.51 GF[2,2] = 5.385607 + -16.985511 i\n", + "FREQ = -0.50 GF[2,2] = 8.132057 + -3.176944 i\n", + "FREQ = -0.49 GF[2,2] = 5.112053 + -1.122502 i\n", + "FREQ = -0.48 GF[2,2] = 3.547000 + -0.626599 i\n", + "FREQ = -0.47 GF[2,2] = 2.530196 + -0.443406 i\n", + "FREQ = -0.46 GF[2,2] = 1.745955 + -0.363108 i\n", + "FREQ = -0.45 GF[2,2] = 1.066544 + -0.329559 i\n", + "FREQ = -0.44 GF[2,2] = 0.421145 + -0.324585 i\n", + "FREQ = -0.43 GF[2,2] = -0.234970 + -0.342450 i\n", + "FREQ = -0.42 GF[2,2] = -0.955736 + -0.386035 i\n", + "FREQ = -0.41 GF[2,2] = -1.792136 + -0.464805 i\n", + "FREQ = -0.40 GF[2,2] = -2.833594 + -0.601140 i\n", + "FREQ = -0.39 GF[2,2] = -4.230434 + -0.846750 i\n", + "FREQ = -0.38 GF[2,2] = -6.289553 + -1.335939 i\n", + "FREQ = -0.37 GF[2,2] = -9.737590 + -2.501588 i\n", + "FREQ = -0.36 GF[2,2] = -16.688375 + -6.387690 i\n", + "FREQ = -0.35 GF[2,2] = -29.656382 + -31.528685 i\n", + "FREQ = -0.34 GF[2,2] = 34.225016 + -32.546412 i\n", + "FREQ = -0.33 GF[2,2] = 21.430321 + -6.498027 i\n", + "FREQ = -0.32 GF[2,2] = 14.419157 + -2.511719 i\n", + "FREQ = -0.31 GF[2,2] = 10.986939 + -1.318801 i\n", + "FREQ = -0.30 GF[2,2] = 8.980094 + -0.814240 i\n", + "FREQ = -0.29 GF[2,2] = 7.662527 + -0.555185 i\n", + "FREQ = -0.28 GF[2,2] = 6.728338 + -0.404730 i\n", + "FREQ = -0.27 GF[2,2] = 6.027647 + -0.309463 i\n", + "FREQ = -0.26 GF[2,2] = 5.481284 + -0.245307 i\n", + "FREQ = -0.25 GF[2,2] = 5.041000 + -0.199912 i\n", + "FREQ = -0.24 GF[2,2] = 4.677884 + -0.166589 i\n", + "FREQ = -0.23 GF[2,2] = 4.372155 + -0.141336 i\n", + "FREQ = -0.22 GF[2,2] = 4.110743 + -0.121720 i\n", + "FREQ = -0.21 GF[2,2] = 3.883890 + -0.106156 i\n", + "FREQ = -0.20 GF[2,2] = 3.685138 + -0.093570 i\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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u1cURVHs6OgQc3NzxTlz5oh79+4VjUaj+Nvf/lYUBEH87LPPtHoag8LXvpKUlpaKgiCI//jHPwa7yZryp79eeOEFMTExUfzggw/E0tJS8dFHHxWjo6OH9AwUUfS9r4xGo/jUU0+J+/fvF8vLy8VPPvlEHD9+vDh37lytnsKg8fd92BvCYBaYKPreVyaTSXzmmWfE/fv3iydPnhS//PJLccmSJeKIESPEmpoarZ7GoPC1r5qamsSCggLx/PPPF41Go9NyFEotGcAASGX19fXismXLxPj4eDExMVG8/fbbndaoKS8vFwGIX3zxhXzdiRMnxOuuu05MS0sTY2NjxalTp/abFj8U+dNXoiiKq1evFrOzs0WbzTbILdaWv/1VVFQkjho1SoyNjRULCwvFnTt3DnLLB5+vfVVZWSnOnTtXHDFihGgwGMTc3FzxoYceCot1gPx9XfUWLgGQr311+vRpcfHixWJaWpoYGRkpjho1SvzBD34glpSUaPQMBo+vffXFF1+IAFz+lZeXK9ImQRRFUbkBNSIiIqLgx1lgREREFHYYABEREVHYYQBEREREYYcBEBEREYUdBkBEREQUdhgAERERUdhhAERERERhhwEQERERhR0GQERERBR2GAARERFR2GEARESKuO222yAIQr8/o9GoddOIiPqJ0LoBRDR0XHXVVXjrrbecrktNTe13XEdHB6KiogarWURE/TADRESKMRgMyMjIcPrT6/WYP38+Vq5ciQceeAApKSm48sorAQB2ux1FRUUYN24cYmJiMG3aNHz44YdO52xpacHy5csRHx+PzMxM/O53v8P8+fPxwAMPyMeMHTsWL774otP9pk+fjieffNLrx5k/fz5+8pOf4Gc/+xlGjBiBjIwM+f4Su92OZ599Frm5uTAYDBg9ejR+9atfYd26dUhOTobVanU6/pprrsGtt97qsc/uvfdeXHrppS5vGzVqFH796197vD8R+YcBEBENirfffhtRUVH48ssv8dprrwEAioqKsG7dOrz22ms4evQofvrTn+KWW27B9u3b5fs99NBD2L59Oz755BP861//wrZt23DgwAGfHtubx5HaGBcXh7179+LZZ5/FU089hc2bN8u3r169Gr/+9a/x2GOP4dixY3j33XeRnp6OG2+8ETabDZ9++ql87NmzZ/HZZ5/hjjvucNuuo0eP4o9//COeffZZl7dPmjQJhw4d8um5EpGXRCIiBaxYsULU6/ViXFyc/HfDDTeIoiiK8+bNE2fMmOF0fHt7uxgbGysWFxc7XX/nnXeKy5YtE0VRFJubm8WoqChxw4YN8u319fViTEyMeP/998vXjRkzRnzhhReczjNt2jTxiSee8OpxpDZeeumlTsfMmjVLfPjhh0VRFEWz2SwaDAbxjTfecPn87733XnHx4sXy5d/97nfi+PHjRbvd7vJ4UXT0WUFBgdvbb7rpJnHevHlubyci/7EGiIgUs2DBArz66qvy5bi4OPnfM2fOdDrWaDSitbUVl19+udP1HR0dmDFjBgDAZDKho6MDBQUF8u0jRoxAfn6+123y5nEkU6dOdbqcmZmJs2fPAgC++eYbWK1WLFy40OXj3H333Zg1axZOnz6NkSNHYu3atXJhuCtdXV346KOP8Nhjj8nX/ehHP8JFF12EO++8EwDQ3NyMmJgYr58rEXmPARARKSYuLg65ublub+vNYrEAAD777DOMHDnS6TaDweDT4+p0Ooii6HRdZ2enz48TGRnpdFkQBNjtdgAYMBCZMWMGpk2bhnXr1uGKK67A0aNH8dlnn7k93mQyobm5Geeffz4AR33RBx984BRg/ec//8HSpUs9Pi4R+YcBEBFpYvLkyTAYDKisrMS8efNcHpOTk4PIyEjs3bsXo0ePBgCcO3cOJ06ccLpPamoqqqqq5Mtmsxnl5eVeP4438vLyEBMTgy1btuCuu+5yecxdd92FF198EadPn8aiRYuQnZ3t9nyNjY0AgPj4eADAP//5T5w7dw7R0dEAgD179uD06dO49tpr/W4zEbnHAIiINJGQkIAHH3wQP/3pT2G323HppZeiqakJX375JRITE7FixQrEx8fjzjvvxEMPPYTk5GSkpaXhF7/4BXQ65/kbl112GdauXYslS5Zg2LBhePzxx6HX671+HG9ER0fj4Ycfxs9+9jNERUXhkksuQW1tLY4ePSoPWf3gBz/Agw8+iDfeeAPr1q3zeL4xY8ZAEASsX78ecXFxePDBB/Hd734Xn3zyCbKzs/HjH/8YixYtcjtDjIgCwwCIiDTz9NNPIzU1FUVFRSgrK8OwYcNwwQUX4Oc//7l8zHPPPQeLxYIlS5YgISEB//M//4Ompian86xevRrl5eX43ve+h6SkJDz99NNyBsjbx/HGY489hoiICDz++OM4c+YMMjMz8eMf/1i+PSkpCddffz0+++wzXHPNNR7PlZGRgV/96lf49a9/jb/+9a945plnMHPmTFx99dV4//33sWTJErzyyis+tY+IvCeIfQfOiYiC3Pz58zF9+vR+a/8Eg4ULF2LKlCn4wx/+oHVTiMgDZoCIiBRw7tw5bNu2Ddu2bWPmhigEMAAiIlLAjBkzcO7cOfzmN7/xaZo+EWmDQ2BEREQUdrgVBhEREYUdBkBEREQUdhgAERERUdhhAERERERhhwEQERERhR0GQERERBR2GAARERFR2GEARERERGGHARARERGFHQZAREREFHb+P3S6fQ8c4OoxAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "In the ``SZ`` mode:" + ], + "metadata": { + "id": "8SP4zRQCW-pH" + } + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "from pyblock2._pyscf.ao2mo import integrals as itg\n", + "from pyblock2.driver.core import DMRGDriver, SymmetryTypes\n", + "from pyscf import gto, scf, lo\n", + "\n", + "BOHR = 0.52917721092\n", + "R = 1.8 * BOHR\n", + "N = 6\n", + "\n", + "mol = gto.M(atom=[['H', (i * R, 0, 0)] for i in range(N)], basis=\"sto6g\", symmetry=\"c1\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "\n", + "mf.mo_coeff = lo.orth.lowdin(mol.intor('cint1e_ovlp_sph'))\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf, ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "bond_dims = [150] * 4 + [200] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + "thrds = [1e-10] * 8\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, integral_cutoff=1E-8, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"KET\", bond_dim=150, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('Ground state energy = %20.15f' % energy)\n", + "\n", + "isite = 2\n", + "mpo.const_e -= energy\n", + "eta = 0.005\n", + "\n", + "dmpo = driver.get_site_mpo(op='d', site_index=isite, iprint=0) # only alpha spin\n", + "dket = driver.get_random_mps(tag=\"DKET\", bond_dim=200, center=ket.center, target=dmpo.op.q_label + ket.info.target)\n", + "driver.multiply(dket, dmpo, ket, n_sweeps=10, bond_dims=[200], thrds=[1E-10] * 10, iprint=1)\n", + "\n", + "freqs = np.arange(-0.8, -0.2, 0.01)\n", + "gfmat = np.zeros((len(freqs), ), dtype=complex)\n", + "for iw, freq in enumerate(freqs):\n", + " bra = driver.copy_mps(dket, tag=\"BRA\") # initial guess\n", + " gfmat[iw] = driver.greens_function(bra, mpo, dmpo, ket, freq, eta, n_sweeps=6,\n", + " bra_bond_dims=[200], ket_bond_dims=[200], thrds=[1E-6] * 10, iprint=0)\n", + " print(\"FREQ = %8.2f GF[%d,%d] = %12.6f + %12.6f i\" % (freq, isite, isite, gfmat[iw].real, gfmat[iw].imag))\n", + "\n", + "ldos = -2 / np.pi * gfmat.imag # account for both spin\n", + "\n", + "import matplotlib.pyplot as plt\n", + "plt.grid(which='major', axis='both', alpha=0.5)\n", + "plt.plot(freqs, ldos, linestyle='-', marker='o', markersize=4, mfc='white', mec=\"#7FB685\", color=\"#7FB685\")\n", + "plt.xlabel(\"Frequency $\\\\omega$\")\n", + "plt.ylabel(\"LDOS\")\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "j54bhPXwXWwi", + "outputId": "1cddb32f-2edb-4095-cc5c-4267c513f21f" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "integral symmetrize error = 0.0\n", + "integral cutoff error = 0.0\n", + "mpo terms = 2286\n", + "\n", + "Build MPO | Nsites = 6 | Nterms = 2286 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 6 .. Mmpo = 26 DW = 0.00e+00 NNZ = 26 SPT = 0.0000 Tmvc = 0.001 T = 0.008\n", + " Site = 1 / 6 .. Mmpo = 66 DW = 0.00e+00 NNZ = 243 SPT = 0.8584 Tmvc = 0.001 T = 0.011\n", + " Site = 2 / 6 .. Mmpo = 110 DW = 0.00e+00 NNZ = 459 SPT = 0.9368 Tmvc = 0.002 T = 0.009\n", + " Site = 3 / 6 .. Mmpo = 66 DW = 0.00e+00 NNZ = 1147 SPT = 0.8420 Tmvc = 0.001 T = 0.016\n", + " Site = 4 / 6 .. Mmpo = 26 DW = 0.00e+00 NNZ = 243 SPT = 0.8584 Tmvc = 0.000 T = 0.006\n", + " Site = 5 / 6 .. Mmpo = 1 DW = 0.00e+00 NNZ = 26 SPT = 0.0000 Tmvc = 0.000 T = 0.008\n", + "Ttotal = 0.057 Tmvc-total = 0.005 MPO bond dimension = 110 MaxDW = 0.00e+00\n", + "NNZ = 2144 SIZE = 18004 SPT = 0.8809\n", + "\n", + "Rank = 0 Ttotal = 0.097 MPO method = FastBipartite bond dimension = 110 NNZ = 2144 SIZE = 18004 SPT = 0.8809\n", + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.168 | E = -3.2667431000 | DW = 1.33e-20\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.305 | E = -3.2667431000 | DE = -7.11e-15 | DW = 1.29e-20\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.432 | E = -3.2667431000 | DE = 0.00e+00 | DW = 2.12e-20\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.557 | E = -3.2667431000 | DE = 3.55e-15 | DW = 1.89e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.678 | E = -3.2667431000 | DE = -1.78e-15 | DW = 1.98e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.811 | E = -3.2667431000 | DE = -5.33e-15 | DW = 3.57e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.935 | E = -3.2667431000 | DE = 0.00e+00 | DW = 1.87e-20\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.070 | E = -3.2667431000 | DE = 7.11e-15 | DW = 1.72e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 200 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 1.172 | E = -3.2667431000 | DE = -5.33e-15 | DW = 4.35e-20\n", + "\n", + "Ground state energy = -3.266743099973319\n", + "\n", + "Sweep = 0 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.019 | F = 0.6660221816 | DW = 9.82e-26\n", + "\n", + "Sweep = 1 | Direction = forward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.042 | F = 0.7050281723 | DF = 3.90e-02 | DW = 1.70e-24\n", + "\n", + "Sweep = 2 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.063 | F = 0.7050281723 | DF = 6.66e-16 | DW = 2.63e-25\n", + "\n", + "Sweep = 3 | Direction = forward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.084 | F = 0.7050281723 | DF = 3.33e-16 | DW = 1.94e-24\n", + "\n", + "Sweep = 4 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.105 | F = 0.7050281723 | DF = 1.11e-16 | DW = 8.09e-25\n", + "\n", + "FREQ = -0.80 GF[2,2] = -1.429314 + -0.066472 i\n", + "FREQ = -0.79 GF[2,2] = -1.563695 + -0.068960 i\n", + "FREQ = -0.78 GF[2,2] = -1.705301 + -0.073389 i\n", + "FREQ = -0.77 GF[2,2] = -1.857857 + -0.079957 i\n", + "FREQ = -0.76 GF[2,2] = -2.026014 + -0.088950 i\n", + "FREQ = -0.75 GF[2,2] = -2.215113 + -0.101005 i\n", + "FREQ = -0.74 GF[2,2] = -2.431836 + -0.117119 i\n", + "FREQ = -0.73 GF[2,2] = -2.685052 + -0.138881 i\n", + "FREQ = -0.72 GF[2,2] = -2.989529 + -0.168989 i\n", + "FREQ = -0.71 GF[2,2] = -3.364958 + -0.212001 i\n", + "FREQ = -0.70 GF[2,2] = -3.843595 + -0.276232 i\n", + "FREQ = -0.69 GF[2,2] = -4.481702 + -0.378669 i\n", + "FREQ = -0.68 GF[2,2] = -5.379774 + -0.559234 i\n", + "FREQ = -0.67 GF[2,2] = -6.754026 + -0.952219 i\n", + "FREQ = -0.66 GF[2,2] = -8.711280 + -1.806963 i\n", + "FREQ = -0.65 GF[2,2] = -13.147719 + -3.946547 i\n", + "FREQ = -0.64 GF[2,2] = -22.488537 + -17.623137 i\n", + "FREQ = -0.63 GF[2,2] = 20.830470 + -28.478123 i\n", + "FREQ = -0.62 GF[2,2] = 13.568650 + -5.237022 i\n", + "FREQ = -0.61 GF[2,2] = 8.158524 + -1.931326 i\n", + "FREQ = -0.60 GF[2,2] = 5.546668 + -1.001994 i\n", + "FREQ = -0.59 GF[2,2] = 4.015779 + -0.627121 i\n", + "FREQ = -0.58 GF[2,2] = 2.986254 + -0.446332 i\n", + "FREQ = -0.57 GF[2,2] = 2.206705 + -0.354016 i\n", + "FREQ = -0.56 GF[2,2] = 1.553827 + -0.314387 i\n", + "FREQ = -0.55 GF[2,2] = 0.934667 + -0.321487 i\n", + "FREQ = -0.54 GF[2,2] = 0.247498 + -0.402597 i\n", + "FREQ = -0.53 GF[2,2] = -0.716559 + -0.696260 i\n", + "FREQ = -0.52 GF[2,2] = -2.517667 + -2.183247 i\n", + "FREQ = -0.51 GF[2,2] = 2.694685 + -8.495055 i\n", + "FREQ = -0.50 GF[2,2] = 4.068420 + -1.589597 i\n", + "FREQ = -0.49 GF[2,2] = 2.556421 + -0.561628 i\n", + "FREQ = -0.48 GF[2,2] = 1.776438 + -0.313770 i\n", + "FREQ = -0.47 GF[2,2] = 1.266039 + -0.222005 i\n", + "FREQ = -0.46 GF[2,2] = 0.873240 + -0.181737 i\n", + "FREQ = -0.45 GF[2,2] = 0.533170 + -0.164892 i\n", + "FREQ = -0.44 GF[2,2] = 0.210275 + -0.162307 i\n", + "FREQ = -0.43 GF[2,2] = -0.119248 + -0.171350 i\n", + "FREQ = -0.42 GF[2,2] = -0.478803 + -0.193119 i\n", + "FREQ = -0.41 GF[2,2] = -0.898305 + -0.232404 i\n", + "FREQ = -0.40 GF[2,2] = -1.418566 + -0.300549 i\n", + "FREQ = -0.39 GF[2,2] = -2.115432 + -0.423477 i\n", + "FREQ = -0.38 GF[2,2] = -3.145615 + -0.668038 i\n", + "FREQ = -0.37 GF[2,2] = -4.871226 + -1.251034 i\n", + "FREQ = -0.36 GF[2,2] = -8.345991 + -3.194131 i\n", + "FREQ = -0.35 GF[2,2] = -14.828832 + -15.765406 i\n", + "FREQ = -0.34 GF[2,2] = 17.111094 + -16.271567 i\n", + "FREQ = -0.33 GF[2,2] = 10.713170 + -3.248626 i\n", + "FREQ = -0.32 GF[2,2] = 7.207938 + -1.255671 i\n", + "FREQ = -0.31 GF[2,2] = 5.490817 + -0.659108 i\n", + "FREQ = -0.30 GF[2,2] = 4.488220 + -0.406981 i\n", + "FREQ = -0.29 GF[2,2] = 3.829440 + -0.277473 i\n", + "FREQ = -0.28 GF[2,2] = 3.362384 + -0.202273 i\n", + "FREQ = -0.27 GF[2,2] = 3.011931 + -0.154637 i\n", + "FREQ = -0.26 GF[2,2] = 2.738941 + -0.122582 i\n", + "FREQ = -0.25 GF[2,2] = 2.518611 + -0.099880 i\n", + "FREQ = -0.24 GF[2,2] = 2.336457 + -0.083188 i\n", + "FREQ = -0.23 GF[2,2] = 2.183385 + -0.070557 i\n", + "FREQ = -0.22 GF[2,2] = 2.053131 + -0.060779 i\n", + "FREQ = -0.21 GF[2,2] = 1.939693 + -0.052990 i\n", + "FREQ = -0.20 GF[2,2] = 1.840458 + -0.046715 i\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGzCAYAAADHdKgcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABjNUlEQVR4nO3deXxU1d0/8M+dSTLZA9kTCBCSEBZlETGCsgkutKVuVaRVcMPWR55qebRK64a2ptVWbR8XrK0iPhVFq+ivVltk1wCCgLIIZCYJEUhCFpLJJGSSzNzfH8m9k0lmJrPcmzuT+bxfr7xezMydO2cOs3zne77nHEEURRFEREREYUSndQOIiIiIBhoDICIiIgo7DICIiIgo7DAAIiIiorDDAIiIiIjCDgMgIiIiCjsMgIiIiCjsRGjdgGBkt9tx+vRpJCQkQBAErZtDREREXhBFEc3NzcjOzoZO5znHwwDIhdOnTyMnJ0frZhAREZEfvvvuOwwfPtzjMQyAXEhISADQ1YGJiYmKnttms8FkMiEvLw96vV7Rcw827Cvvsa+8x77yHvvKe+wr76nZV2azGTk5OfL3uCcMgFyQhr0SExNVCYDi4+ORmJjIN0k/2FfeY195j33lPfaV99hX3huIvvKmfIVF0ERERBR2GAARERFR2GEARERERGGHARARERGFHQZAREREFHYYABEREVHYYQBEREREYYcBEBEREYUdBkBEREQUdhgAERERUdhhAERERERhh3uBEQ2AI9VHscNUgrqWeqTGpWBm3gyMzxyrdbOIiMIWM0BEKjtSfRTr97+P2KgYzC2YhdioGKzf/z6OVB/VumlERGGLARCRynaYSpCXmoubL7wJM3KLcPOFN2F0Si52mEq0bhoRUdhiAESksrqWeuSljoYgCAAAQRCQnzYadS31GreMiCh8MQAiUllqXApMdWUQRREAIIoijLVlSI1L0bhlREThi0XQRCqbmTcD6/e/j7V71qEgLQ/GWhPK6iuwaMr1WjeNiChsMQNEpLLxmWNx45TrUHn2O2w8uhl1LfVYNOV6jMss1LppRERhiwEQ0QAYl1EIu2iHCBEXDJ/M4IeISGMMgIgGQLutQ64B6rTbNG4NERExACIaANZOq/xvm71Tw5YQERHAAIhoQLR1tMn/ZgaIiEh7mgZA27dvx8KFC5GdnQ1BELBhwwan2wVBcPn3zDPPuD3n448/3uf4sWO55QBpyzkDxACIiEhrmgZALS0tmDRpEl588UWXt1dVVTn9vfbaaxAEAddf73n68IQJE5zu9/nnn6vRfCKvWTvb5X93cgiMiEhzmq4DtGDBAixYsMDt7ZmZmU6XP/zwQ8ydOxejR4/2eN6IiIg+9yXSUlunYwiMGSAiIu2FzEKINTU1+Pjjj/HGG2/0e2xpaSmys7MRHR2N6dOno7i4GCNGjHB7vNVqhdXqGKIwm80AAJvNBptN2S8rm80Gu92u+HkHo8HUV+faz8n/7rB18nWlIfaV99hX3mNfeU/NvvLlnCETAL3xxhtISEjAdddd5/G4oqIirFmzBoWFhaiqqsKqVaswc+ZMHDp0CAkJCS7vU1xcjFWrVvW53mQyIT4+XpH2S+x2OxoaGmA0GqHTsQbdk8HUV6eaTsn/braYUVpaquj5B1NfqY195T32lffYV95Ts68sFovXxwqitDiJxgRBwAcffIBrrrnG5e1jx47F5Zdfjv/93//16byNjY0YOXIknn32Wdxxxx0uj3GVAcrJyUFDQwMSExN9erz+2Gw2GI1G5OfnQ6/XK3ruwWYw9dUW43Z8XrYTADBq6AjcMm2xoucfTH2lNvaV99hX3mNfeU/NvjKbzUhOTkZTU1O/398hkQHasWMHjh07hnfeecfn+w4ZMgRjxoyB0Wh0e4zBYIDBYOhzvV6vV+WFrNPpVDv3YDNY+qrd1iH/2yba+brSGPvKe+wr77GvvKdWX/lyvpDI0/3tb3/D1KlTMWnSJJ/va7FYYDKZkJWVpULLiLzTcxo8Z4EREWlP0wDIYrHgwIEDOHDgAACgvLwcBw4cQGVlpXyM2WzGu+++izvvvNPlOebNm4cXXnhBvnz//fdj27ZtqKioQElJCa699lro9XosXqzskAORL9o6uA4QEVEw0XQIbO/evZg7d658ecWKFQCApUuXYs2aNQCAt99+G6Ioug1gTCYT6urq5MsnT57E4sWLUV9fj7S0NFx66aXYtWsX0tLS1HsiRP2wdnIlaCKiYKJpADRnzhz0V4N911134a677nJ7e0VFhdPlt99+W4mmESmqjXuBEREFlZCoASIKddaOnjVAzAAREWmNARDRAGjjXmBEREGFARCRykRR5CwwIqIgwwCISGUd9k7YRbt8mRkgIiLtMQAiUlnP+h8AECHCZre7OZqIiAYCAyAilUk7wesFxwqlnAlGRKQtBkBEKpPqf+IMsfJ1nAlGRKQtBkBEKpNWgY6JjIEAAQDrgIiItMYAiEhlUgbIEGGAXtc1DMaZYERE2mIARKQyaQ2g6AgDInRdi68zA0REpC0GQEQqkzNAkT0zQAyAiIi0xACISGVtHV2zwLoyQF0BEGeBERFpiwEQkcocNUDR0HcPgTEDRESkLQZARCpzrgFiBoiIKBgwACJSGWuAiIiCDwMgIpVJ6wBxFhgRUfBgAESkMq4DREQUfBgAEalMrgGK7FkDxAwQEZGWGAARqczaPQ2+KwMkzQJjBoiISEsMgIhUJIpij1lg0XIGiEXQRETaYgBEpKJOeyfsoh2Acw0Qh8CIiLTFAIhIRVL2BwCiIqLkWWAcAiMi0hYDICIVWTscM8B0gsAMEBFRkGAARKSinqtAA2ANEBFRkGAARKSinqtAA5BngXErDCIibTEAIlJRz53gAWaAiIiCBQMgIhX13AkeAGuAiIiCBAMgIhX1rQHiLDAiomDAAIhIRX1rgJgBIiIKBgyAiFTUcyd4gDVARETBggEQkYp67gQPcBYYEVGwYABEpKK2Ts4CIyIKRgyAiFTkqAHiLDAiomDCAIhIRX1rgDgLjIgoGDAAIlJR3xogZoCIiIKBpgHQ9u3bsXDhQmRnZ0MQBGzYsMHp9ltvvRWCIDj9XXXVVf2e98UXX8SoUaMQHR2NoqIifPnllyo9AyLP5HWAIlkDREQUTDQNgFpaWjBp0iS8+OKLbo+56qqrUFVVJf+tW7fO4znfeecdrFixAo899hj27duHSZMm4corr8SZM2eUbj5Rv3ruBg9wFhgRUbCI0PLBFyxYgAULFng8xmAwIDMz0+tzPvvss1i2bBluu+02AMDq1avx8ccf47XXXsNDDz0UUHuJfNFh64RN7Mr0cBYYEVFw0TQA8sbWrVuRnp6OoUOH4rLLLsNvfvMbpKSkuDy2vb0dX331FVauXClfp9PpMH/+fOzcudPtY1itVlitVvmy2WwGANhsNthsyn5R2Ww22O12xc87GIV6X7VaW+V/RwgRsNlsECAA6KoBUvJ5hXpfDST2lffYV95jX3lPzb7y5ZxBHQBdddVVuO6665CbmwuTyYRf/epXWLBgAXbu3Am9Xt/n+Lq6OthsNmRkZDhdn5GRgaNHj7p9nOLiYqxatarP9SaTCfHx8YE/kR7sdjsaGhpgNBqh07EG3ZNQ7ytzRzMAIFKIgNFoBAC0dHYFRZ22DpSWlir2WKHeVwOJfeU99pX32FfeU7OvLBaL18cGdQB00003yf8+//zzMXHiROTl5WHr1q2YN2+eYo+zcuVKrFixQr5sNpuRk5ODvLw8JCYmKvY4QFd0ajQakZ+f7zKII4dQ76vTTVXASSDGEIOCggIAQIu1BfgOsENEfn4+BEFQ5LFCva8GEvvKe+wr77GvvKdmX0kjON4I6gCot9GjRyM1NRVGo9FlAJSamgq9Xo+amhqn62tqajzWERkMBhgMhj7X6/V6VV7IOp1OtXMPNqHcV+32DgBAdES03P6oyCj5dlEAIhR8XqHcVwONfeU99pX32FfeU6uvfDlfSOXpTp48ifr6emRlZbm8PSoqClOnTsWmTZvk6+x2OzZt2oTp06cPVDOJAPTdCR5wzAIDOBOMiEhLmgZAFosFBw4cwIEDBwAA5eXlOHDgACorK2GxWPDAAw9g165dqKiowKZNm3D11VcjPz8fV155pXyOefPm4YUXXpAvr1ixAq+++ireeOMNfPvtt7j77rvR0tIizwojGii9V4EGHAshApwJRkSkJU2HwPbu3Yu5c+fKl6U6nKVLl+Lll1/GN998gzfeeAONjY3Izs7GFVdcgSeffNJpuMpkMqGurk6+vGjRItTW1uLRRx9FdXU1Jk+ejE8//bRPYTSR2nqvAg0AOkGATtDBLtq5GjQRkYY0DYDmzJkDURTd3v7vf/+733NUVFT0uW758uVYvnx5IE0jCljvneAlEboItNvauR8YEZGGQqoGiCiU9N4JXsL9wIiItMcAiEglrmqAAK4GTUQUDBgAEanEVQ0QwP3AiIiCAQMgIpXIO8EzA0REFHQYABGpxNU6QABrgIiIggEDICKVuK8B6hoC4ywwIiLtMAAiUom1exq8IYKzwIiIgg0DICKVyDVAkawBIiIKNgyAiFTQaeuUMzycBUZEFHwYABGpQMr+AIAhIsrpNmaAiIi0xwCISAXSDLAofRR0gvPbjDVARETaYwBEpAJ39T8AZ4EREQUDBkBEKrB2SDPA+gZAzAAREWmPARCRChyrQEf3uY01QERE2mMARKQCd6tAA5wFRkQUDBgAEanA3SrQADNARETBgAEQkQrc7QQPsAaIiCgYMAAiUoG7neABzgIjIgoGDICIVOC5BogZICIirTEAIlJBW/c0eNYAEREFJwZARCpw1AD1nQbPWWBERNpjAESkAs81QMwAERFpjQEQkQpYA0REFNwYABGpwPM6QJwFRkSkNQZARCrgOkBERMGNARCRwjrtNjm743o3eNYAERFpjQEQkcKkneABdxkgzgIjItIaAyAihUkzwKL0UdAJfd9izAAREWmPARCRwjzV/wCsASIiCgYMgIgUJq8B5KL+B+AsMCKiYMAAiEhh1g5mgIiIgh0DICKFeVoFGnDUAIkQYbPbB6xdRETkwACISGHWzq5ZYK5WgQYcs8AAzgQjItIKAyAihXlaBRpwZIAAzgQjItIKAyAihXnaCR6A09R41gEREWmDARCRwvqrARIEgTPBiIg0pmkAtH37dixcuBDZ2dkQBAEbNmyQb+vo6MCDDz6I888/H3FxccjOzsaSJUtw+vRpj+d8/PHHIQiC09/YsWNVfiZEDp52gpdEyKtBMwNERKQFTQOglpYWTJo0CS+++GKf21pbW7Fv3z488sgj2LdvH95//30cO3YMP/zhD/s974QJE1BVVSX/ff7552o0n8glaz8ZIMAxFZ41QERE2ojo/xD1LFiwAAsWLHB5W1JSEjZu3Oh03QsvvICLLroIlZWVGDFihNvzRkREIDMz0+t2WK1WWK1W+bLZbAYA2Gw22GzKfkHZbDbY7XbFzzsYhWpftXXvBRapi3TbdqkQuqOzXZHnF6p9pQX2lffYV95jX3lPzb7y5ZyaBkC+ampqgiAIGDJkiMfjSktLkZ2djejoaEyfPh3FxcUeA6bi4mKsWrWqz/Umkwnx8fGBNtuJ3W5HQ0MDjEYjdDqWYHkSqn3V3GoBANRV10LX5PoYe2fX+j8VlRVoibYE/Jih2ldaYF95j33lPfaV99TsK4vF+8/TkAmA2tra8OCDD2Lx4sVITEx0e1xRURHWrFmDwsJCVFVVYdWqVZg5cyYOHTqEhIQEl/dZuXIlVqxYIV82m83IyclBXl6ex8fyh81mg9FoRH5+PvR6ff93CGOh2lf20/8BAOSNykNmYobLY6Jrt6PZYkFWdhZyU0YF/Jih2ldaYF95j33lPfaV99TsK2kExxshEQB1dHTgxhtvhCiKePnllz0e23NIbeLEiSgqKsLIkSOxfv163HHHHS7vYzAYYDD0rdfQ6/WqvJB1Op1q5x5sQrGvpBqgWEOs23ZLRdB2iIo9t1DsK62wr7zHvvIe+8p7avWVL+cL+gBICn5OnDiBzZs3+5yRGTJkCMaMGQOj0ahSC4kcbHYbOmwdANzvBQZwFhgRkdaCeqBSCn5KS0vx2WefISUlxedzWCwWmEwmZGVlqdBCImdS9gfwHAA5ZoFxHSAiIi1oGgBZLBYcOHAABw4cAACUl5fjwIEDqKysREdHB370ox9h7969+Pvf/w6bzYbq6mpUV1ejvb1dPse8efPwwgsvyJfvv/9+bNu2DRUVFSgpKcG1114LvV6PxYsXD/TTozAkLYIYqY+E3kNxXwR3hCci0pSmQ2B79+7F3Llz5ctSIfLSpUvx+OOP46OPPgIATJ482el+W7ZswZw5cwB0zdSqq6uTbzt58iQWL16M+vp6pKWl4dJLL8WuXbuQlpam7pMhAmDtZx8wiV5eCZoBEBGRFjQNgObMmQNRFN3e7uk2SUVFhdPlt99+O9BmEfmtTd4HzHMA5MgAcQiMiEgLQV0DRBRq5FWgI11vhCrhStBERNpiAESkIO8zQJwFRkSkJQZARAqydm+D0X8NEGeBERFpiQEQkYLavNgJHuAsMCIirTEAIlKQNzvBA5wFRkSkNQZARAriLDAiotDAAIhIQd6vA8RZYEREWmIARKQgRw2Q52nwnAVGRKQtBkBECvK+BoizwIiItMQAiEhBbd3T4L2vAWIGiIhICwyAiBTEWWBERKGBARCRgnxfB4hDYEREWmAARKQQm92ODlsHAM4CIyIKdgyAiBRy8PQhCIIAAQLW7lmHI9VH3R7LWWBERNpiAESkgCPVR7Hh4D+RmzwSl4+9DHFRsVi//323QRBngRERaYsBEJECdphKkJeSi1umLcaM3CLcfOFNGJ2Six2mEpfHcxYYEZG2GAARKaCupR55aaMhCAIAQBAE5KeNRl1LvcvjOQuMiEhbDICIFJAalwJjbRlEUQQAiKIIY20ZUuNSXB7PWWBERNqK0LoBRIPBzLwZWL//fazdsw4FaXkw1pahrL4ci6Zc7/J4zgIjItIWAyAiBYzPHItpIy7AV98dwImGSmQkpGPRlOsxLrPQ5fGcBUZEpC0GQEQKSY1LgV20Y0LWONww+VqPx0oZIJtogyiKcu0QERENDNYAESmkvXsRxCh9VL/HSjVAALNARERaYABEpJB2WzsA7wIgaRYYwDogIiItMAAiUkh7Z3cAFBHZ77F6pwwQZ4IREQ00BkBECvFlCEwnCNAJXW8/ZoCIiAYeAyAihcgZIH3/GSCAM8GIiLTEAIhIIXINUET/GSCA+4EREWmJARCRQhwZIO8CIO4HRkSkHQZARAqRa4C8zgBxPzAiIq1wIUQihTimwXtbA8T9wIiUdKT6KHaYSlDXUo/UuBTMzJuB8ZljtW4WBSlmgIgU0t7p/SwwgPuBESnpSPVRrN//PmKjYjC3YBZio2Kwfv/7OFJ9VOumUZBiAESkEF+LoDkLjEg5O0wlyEvJxc0X3oQZuUW4+cKbMDolFztMJVo3jYIUAyAiBYii6NNK0ABngREpqc5Sh7y00fK+eoIgID9tNOpa6jVuGQUrBkBECui0d21qCni3EjTAWWBESjndVA0RgLHWJL8PRVGEsbYMqXEp2jaOghaLoIkUIGV/ACDSyyJozgIjCtzXpw7i/x36BJ32TpTVV2DtnnUoSMuDsdaEsvoKLJpyvdZNpCClaQZo+/btWLhwIbKzsyEIAjZs2OB0uyiKePTRR5GVlYWYmBjMnz8fpaWl/Z73xRdfxKhRoxAdHY2ioiJ8+eWXKj0Doi7SGkARugh5i4v+cBYYke+OVB/FK1+8ht/+5xn8YdOf8ME3/w+d9k4UpOXhmokLcab5DDYe3Yy6lnosmnI9xmUWat1kClKaBkAtLS2YNGkSXnzxRZe3P/300/jzn/+M1atXY/fu3YiLi8OVV16JtrY2t+d85513sGLFCjz22GPYt28fJk2ahCuvvBJnzpxR62kQ+VwADXAWGJGv5JlekV0zvdIT0gAA4zPGYvHUGzF52Pk4L2s8RIiYmH0+gx/ySNMAaMGCBfjNb36Da6+9ts9toiji+eefx8MPP4yrr74aEydOxNq1a3H69Ok+maKenn32WSxbtgy33XYbxo8fj9WrVyM2Nhavvfaais+Ewp2vU+ABzgIj8pU802ta10yvW6YtxuiUUTh7rhG67uJn6UdIu82qZVMpBARtDVB5eTmqq6sxf/58+bqkpCQUFRVh586duOmmm/rcp729HV999RVWrlwpX6fT6TB//nzs3LnT7WNZrVZYrY43i9lsBgDYbDbYbMp+OdlsNtjtdsXPOxiFUl+1dXRlJaP0kV63Vxoq67B1BPwcQ6mvtMa+8l6w9VWdpR5zx8zqNdMrD1uOb5fbGKnrqsGzdlgHtN3B1lfBTM2+8uWcQRsAVVdXAwAyMjKcrs/IyJBv662urg42m83lfY4edb8YVnFxMVatWtXnepPJhPj4eF+b7pHdbkdDQwOMRiN0Ok7C8ySU+upky2kAgK3D5lWdGgBYzM0AgNq6WpTavbuPO6HUV1pjX3kv2PoqITIOxtoyTB91EQRB6J7pZUJCZLz8vmsyNwIA6hsbvH4vKiHY+iqYqdlXFovF62ODNgAaSCtXrsSKFSvky2azGTk5OcjLy0NiYqKij2Wz2WA0GpGfnw+9Xq/ouQebUOqrtqp24AyQFJ+IgoICr+5zQjwJmE1IHOL9fdwJpb7SGvvKe8HWV52Jdrz39YY+M71umHQtCjK63kOtp9rwVf3XMMQYAn5f+SLY+iqYqdlX0giONxQJgLZt24aWlhZMnz4dQ4cOVeKUyMzMBADU1NQgKytLvr6mpgaTJ092eZ/U1FTo9XrU1NQ4XV9TUyOfzxWDwQCDwdDner1er8oLWafTqXbuwSZU+kpazDAqIsrrtkrT5e2wK/L8QqWvggH7ynvB1FfnZY/H8VojDlUdwYmGSmQkpPeZ6RUdFQ2ga3PigW5zMPVVsFOrr3w5n0+5p9///vd45JFH5MuiKOKqq67C3Llz8YMf/ADjxo3D4cOHfTmlW7m5ucjMzMSmTZvk68xmM3bv3o3p06e7vE9UVBSmTp3qdB+73Y5Nmza5vQ+REuSd4H0oguYsMCLfDYlJgl20Y2rOZPz0ktv7zPSS3oM91+YicsWnAOidd97BeeedJ19+7733sH37duzYsQN1dXW48MILXdbSuGOxWHDgwAEcOHAAQFfh84EDB1BZWQlBEHDffffhN7/5DT766CMcPHgQS5YsQXZ2Nq655hr5HPPmzcMLL7wgX16xYgVeffVVvPHGG/j2229x9913o6WlBbfddpsvT5XIJ9I6QL5Mg+csMCLfWeX3Wt+sPQAYut+D0nFE7vg0BFZeXo6JEyfKl//1r3/hRz/6ES655BIAwMMPP4wbbrjB6/Pt3bsXc+fOlS9LdThLly7FmjVr8Mtf/hItLS2466670NjYiEsvvRSffvopoqOj5fuYTCbU1dXJlxctWoTa2lo8+uijqK6uxuTJk/Hpp5/2KYwmUpKv+4AB3AuMyB/Se83g5r3mmAbPAIg88ykA6uzsdKqV2blzJ+677z75cnZ2tlMw0p85c+bI+7a4IggCnnjiCTzxxBNuj6moqOhz3fLly7F8+XKv20EUKDkD5OU2GAD3AiPyh7Wza8kSd9lWeQiMGSDqh09DYHl5edi+fTsAoLKyEsePH8esWbPk20+ePImUFG48R+FHrgHyaSVo7gVG5CspsDG4C4C6r++0d8Jmtw9Yuyj0+JQBuueee7B8+XLs2LEDu3btwvTp0zF+/Hj59s2bN2PKlCmKN5Io2DmGwPzJAHEIjMhb1n6Gm3sOjbXb2hGji3Z5HJFPGaBly5bhz3/+MxoaGjBr1iz84x//cLr99OnTuP322xVtIFEocAyBcRYYkZocGSDXRdB6nV5eZZ3DYOSJz+sA3X777W6DnJdeeingBhGFIn+GwDgLjMh31n5mXAqCgKiIKLR1tLEQmjzyayHEU6dO4R//+AeOHz8OACgsLMR1112HYcOGKdo4olDhTxE0Z4ER+U6eBebhx0aUvjsAYgaIPPA5AHrppZewYsUKtLe3y9tEmM1mPPDAA3j22WfxX//1X4o3kijY+ZcB4iwwIl95M9wsrwXEDBB54FMN0Mcff4yf//znWL58OU6dOoXGxkY0Njbi1KlT+K//+i/ce++9+Ne//qVWW4mCln/rAHEWGJEvbHa7nDHtLwMEsAaIPPMpA/TMM8/goYcewm9+8xun67OysvDss88iNjYWTz/9NL73ve8p2kiiYOffStCcBUbki3abVf63u5Wgu25jAET98ykDtG/fPtxyyy1ub7/llluwb9++gBtFFErsouNXqX81QMwAEXlDKoDWC3r5B4Qr3A+MvOFTAGSz2RAZ6f4DPjIyEjYbP8wpvLR3dsj/9mUIjLPAiHzjbaaV+4GRN3wKgCZMmIAPP/zQ7e0bNmzAhAkTAm4UUSiRfmUKgiBndbzBWWBEvrH2swq0RMrEMgNEnvi8EvTdd98Ng8GAu+66CxER3UWcnZ145ZVX8PDDD3MtIAo7PQugBUHw+n5SCl8URdhFu7x4GxG5Jr/X+guAuuuDWANEnvgUAC1duhQHDx7E8uXLsXLlSuTl5UEURZSVlcFiseDnP/85br31VpWaShScpCEwX4a/AMcsMKCrDihKzwCIyBNpI1SD3n0BNMAMEHnH53WA/vCHP+BHP/oR1q1bh9LSUgDA7NmzcdNNN+Hiiy9WvIFEwc7xq9T7AmgATkWcNnsn4EMBNVE48r4GqCtAYg0QeeLXStAXX3wxgx2ibv7sAwbAaciLM8GI+mf1YhVowPFjRFqglMgVvwKg0tJSfPjhh6ioqIAgCBg9ejSuvvpqjB49Wun2EQW9Dj9WgQa6iqYjdBHotHdyJhiRF7z9seFYCNHq8TgKbz4HQMXFxXj00Udht9uRnp4OURRRW1uLBx98EE899RTuv/9+NdpJFLT8WQVaotfp0Wnv5EwwIi/0txGqRF4IkRkg8sCnqsstW7bg4Ycfxq9//WvU1dWhqqoK1dXVqK2txUMPPYSHHnoI27dvV6utREHJUZfgew2PVAfUyfWziPolrQTd3xCYQS+tA8QMELnnUwZo9erVuPPOO/H44487XZ+cnIwnnngC1dXVePnllzFr1iwl20gU1OSNUP3KAEmLITIDRNQfq7dDYPJWGMwAkXs+ZYC+/PLLfrfC2LVrV8CNIgolgQyBRXA7DCKvtXu7EGIEt8Kg/vkUANXU1GDUqFFub8/NzUV1dXWgbSIKKYEMgem5ISqR1xw1QP2tA+TYDFUURdXbRaHJpwCora0NUVHuI+/IyEi0tzPipvASyBCYtB8YM0BE/ZMyOoZ+3mtShkiEiA7+uCA3fJ4F9te//hXx8fEub2tubg64QUShxjE1N5AMEAMgov5IRc39zQKL7BEgtXe2+/XepMHPpwBoxIgRePXVVz0eM3LkyIAaRBRqvN2fyJUIbohK5DUp29pfDZBOEBCpj0SHraPrB4ohbiCaRyHGpwCooqLC4+0nT57EE088EUh7iEKOvytBAz1ngTEDRNQfX95rUfqorgCIhdDkhqK7L9bX1+Nvf/ubkqckCnrtfq4EDXAWGJEv5M1Q+ymC7jpGWguIARC5xu2niQLkmAbPWWBEaum0dcIu2gF492NDngnGDBC5wQCIKEDSYmucBUakHmuPQMarIbAIx1R4IlcYABEFKJAiaM4CI/KOFMhE6CKg1/X/1cXFEKk/PhVBX3fddR5vb2xsDKQtRCFHFEWFVoLmEBiRJ1YvV4GWOPYDYwBErvkUACUlJfV7+5IlSwJqEFEo6bTb5JVm/VsJmrPAiLwhbYTa3yrQEmaAqD8+BUCvv/66Wu0gCkk9P1wj/SiC5iwwIu/IGSAvM609t8MgcoU1QEQB6FmXoBN8fztxFhiRdxx77nkZAHVnZJkBIncYABEFIJACaICzwIi85XsNkMHpfkS9MQAiCkAgU+ABzgIj8pajBsjHDBADIHKDARBRABwZIP82W+QsMCLvOGqAvC2C7jqOQ2DkTtAHQKNGjYIgCH3+7rnnHpfHr1mzps+x0dHRA9xqCheBTIEHOAuMyFs+1wDppQxQh2ptotDm0ywwLezZswc2m+PL4dChQ7j88stxww03uL1PYmIijh07Jl8WBEHVNlL46ghwCIyzwIi8Y/VxyxlpvzBr99AZUW9BHwClpaU5Xf7d736HvLw8zJ492+19BEFAZmam149htVphtTreJGazGQBgs9mcgi8l2Gw22O12xc87GIVCX7V1dL1uIvWRfrVTQFdw3mnvDOh5hkJfBQv2lfeCqa+s0ntN5917LULo+nHR3tk+IO0Ppr4Kdmr2lS/nDPoAqKf29nb83//9H1asWOExq2OxWDBy5EjY7XZccMEFeOqppzBhwgS3xxcXF2PVqlV9rjeZTIiPj1ek7RK73Y6GhgYYjUbovFjOPZyFQl+dbjoNALC2tqG0tNTn+59pOQMAaGm1+HV/SSj0VbBgX3kvmPqqoakBANDU0IjSzv7fK43tTQCAc9ZzAb23vBVMfRXs1Owri8Xi9bEhFQBt2LABjY2NuPXWW90eU1hYiNdeew0TJ05EU1MT/vCHP2DGjBk4fPgwhg8f7vI+K1euxIoVK+TLZrMZOTk5yMvLQ2JioqLPwWazwWg0Ij8/H3q9XtFzDzah0FenTTVAA5AyJAUFBQU+31+o0wNndiEiKtKv+0tCoa+CBfvKe8HUV7uavgJageHZw1GQ1f97pfFcEz49tQk22AN6b3krmPoq2KnZV9IIjjdCKgD629/+hgULFiA7O9vtMdOnT8f06dPlyzNmzMC4cePwyiuv4Mknn3R5H4PBAIOh78wCvV6vygtZp9Opdu7BJtj7Spq9ZYg0+NVGafaYzW4L+DkGe18FE/aV94Klr6QJB9GR0V61JSaqa/JLp70TEASvNlANVLD0VShQq698OV/IBEAnTpzAZ599hvfff9+n+0VGRmLKlCkwGo0qtYzCmTwzxY9tMADOAiPyVruPCyH2nJjQbmtHjI6zgclZyAxUvv7660hPT8f3v/99n+5ns9lw8OBBZGVlqdQyCmfttu5ZYH6vBM1ZYETecKy55d06QBF6x/Y0XAyRXAmJAMhut+P111/H0qVLERHhnLRasmQJVq5cKV9+4okn8J///AdlZWXYt28fbr75Zpw4cQJ33nnnQDebwkC7j1Nze+NeYETe8XUzVIA7wpNnITEE9tlnn6GyshK33357n9sqKyudqsjPnj2LZcuWobq6GkOHDsXUqVNRUlKC8ePHD2STKUw4hsC4FxiRWkRR9HkhRKArWGrraON+YORSSARAV1xxBURRdHnb1q1bnS4/99xzeO655wagVUSBD4FxLzCi/nXYOyGi6zvA2xoggBkg8iwkhsCIglWgQ2BSDZBNtLkN8onCXXunY6HaSF+GwLqPZQ0QucIAiCgA8m7wfmeAHElYZoGIXLP2GGrW+bC1kZwBYgBELjAAIgpAoJuhShkggHVARO74U/8DOIbLrBwCIxcYABEFwN8PZolzBogzwYhckQIYX+p/AA6BkWcMgIj8ZBft8krQ/tYA6QRBXquEGSAi1/ydbckiaPKEARCRn6T6H8C3wszeOBOMyDNrdxG0rxkgAzNA5AEDICI/Sb8qBUFwquXxlWMtIA6BEbni6yrQkijWAJEHDICI/NSzAFrwYWZKb8wAEXnmzyrQAGuAyDMGQER+kqfABzD8BXA/MKL++DvZgNPgyRMGQER+cqTl/SuAlnA/MCLP/J0FZmARNHnAAIjIT4HuAybhfmBEnkkrQfs8C6z7eO4FRq4wACLyU0eA+4BJWANE5Jk10CEwZoDIBQZARH4KdBVoiaMGiENgRK5I2VYuhEhKYgBE5CdHYWagNUBdQ2DMABG5ZvXzx4ajBqijnyMpHDEAIvKT9KHKWWBE6nJkgHxcB6hHBkgURcXbRaGNARCRnxxDYJwFRqSmQGuARIjo4PuLemEAROSnQDdClXAWGJFn0o8NXxdCjOzx40SaSUYkYQBE5CelhsA4C4zIM39/bOgEoccwGOuAyBkDICI/OdYBCmwIjLPAiNyzi6IjA+RHtlWapMD9wKg3BkBEfnKsBB1oBqh7FpjIDBBRbx09AhdfN0MFgCh91304FZ56YwBE5CflVoLmLDAid6QCaAECIrt/LPhCygBxMUTqjQEQkZ/aFV8JmkNgRL31rP8RBMHn+xu4GCK5wQCIyE9KTYPnLDAi9/zdCFUi/UDhfmDUGwMgIj9Js0o4C4xIPf5uhCrhfmDkDgMgIj8pVQTNWWBE7ln9XAVawv3AyB0GQER+EHtMzQ08A8S9wIjcCXTBUQMzQOQGAyAiP3TabfLeQpGKrQPEAIiot4BrgPSsASLXGAAR+aHdaW0SpXaD5xAYUW+BLjfBGiByx/dFFYhI/lCO0EVAJwT2O4IZIGUdqT6KHaYS1LXUIzUuBTPzZmB85litm0V+snYXQQeaAWINEPXGDBCRH5QqgAY4C0xJR6qPYv3+9xEbFYO5BbMQGxWD9fvfx5Hqo1o3jfzkeK/5VwTNGiByhwEQkR+UmgIP9FwHiENggdphKkFeSi5uvvAmzMgtws0X3oTRKbnYYSrRumnkJ3kWmL9DYKwBIjcYABH5wfGrNLD6H4AZICXVtdQjL220vGKwIAjITxuNupZ6jVtG/nLMAvPvvcYaIHKHARCRHzpsSmaAWAOklNS4FBhrTfIMPVEUYawtQ2pcisYtI39Z5eUmuA4QKYtF0ER+UGojVICzwJQ0M28G1u9/H2v3rENBWh6MtWUoqy/HoinXa9008lN7gEXQcg0QAyDqhQEQkR+UHAJjBkg54zPHIjYyBicaKlHRcAKZCRlYNOV6jMss1Lpp5CdrgAshynuBcQiMegnqIbDHH38cgiA4/Y0d63k667vvvouxY8ciOjoa559/Pv71r38NUGspnLQrOATGGiDl2EURbZ1W2EU79IIed824jcFPiJPea4FOg7fZbXyPkZOgDoAAYMKECaiqqpL/Pv/8c7fHlpSUYPHixbjjjjuwf/9+XHPNNbjmmmtw6NChAWwxhQPHEJgSGSDOAlPKufZW2EU7gK7+lNaQodDl2AzVzxqgHoETC6Gpp6APgCIiIpCZmSn/paamuj32T3/6E6666io88MADGDduHJ588klccMEFeOGFFwawxRQO1FgHSBRF+cub/NNstThdtrS3aNQSUopjM1T/3msROj30Qtd7TFq+gggIgRqg0tJSZGdnIzo6GtOnT0dxcTFGjBjh8tidO3dixYoVTtddeeWV2LBhg8fHsFqtsFodvxTNZjMAwGazwWZTNmVqs9lgt9sVP+9gFMx9Ze3oer1E6CICbp8gOv7d3tHu195iwdxXA6mptcnpsrm1GUOjhzhdx77yntZ9Zbfb5cxohKD3ux1REZE412HDufZziI+KU7KJMq37KpSo2Ve+nDOoA6CioiKsWbMGhYWFqKqqwqpVqzBz5kwcOnQICQkJfY6vrq5GRkaG03UZGRmorq72+DjFxcVYtWpVn+tNJhPi4+MDexK92O12NDQ0wGg0QqcL+gScpoK5r+rOdq0rYz5rRmlpaUDnsvXI+hwvPe5XXVEw99VAKmuucLpsrDSivb7N6Tr2lfe07queQ1aVFZVyJsdXgtjVdlOFCY2Gs4q0rTet+yqUqNlXFoul/4O6BXUAtGDBAvnfEydORFFREUaOHIn169fjjjvuUOxxVq5c6ZQ5MpvNyMnJQV5eHhITExV7HKArOjUajcjPz4de79+bOVwEc1/tbzkItADZGdkoyCkI6FyiKAIVXf8emTsS8Qbfg+5g7quBVF1WC9Q5LickJ6JghPP/D/vKe1r3VVObGagEdIIOY8f4v59b3JntaO1sRUZWBnJTRinXwB607qtQomZfSSM43gjqAKi3IUOGYMyYMTAajS5vz8zMRE1NjdN1NTU1yMzM9Hheg8EAg6FvgZ1er1flhazT6VQ792ATrH0lLYQYHWlQpG16nR42uw2iAL/PF6x9NZB61/y0drS67A/2lfe07Ctp+MsQEdj7zBDZ9fneKdpUfR58XXlPrb7y5XwhlaezWCwwmUzIyspyefv06dOxadMmp+s2btyI6dOnD0TzKIzI0+AVKIIGOBNMKc1tXenvBEPXELnFyiLoUKbUZANptib3A6OegjoAuv/++7Ft2zZUVFSgpKQE1157LfR6PRYvXgwAWLJkCVauXCkff++99+LTTz/FH//4Rxw9ehSPP/449u7di+XLl2v1FGiQkj+YFZgGD3AtIKU0W5sBAFmJXbWADIBCW6AboUq4Hxi5EtQB0MmTJ7F48WIUFhbixhtvREpKCnbt2oW0tDQAQGVlJaqqquTjZ8yYgbfeegt/+ctfMGnSJLz33nvYsGEDzjvvPK2eAg1S8m7wimWAuBq0Eizd0+CzkrqGvVs4DT6ktQe4CrSE+4GRK0FdA/T22297vH3r1q19rrvhhhtwww03qNQioi6ODJAyARD3AwucXRTldYAy5QyQ9zNCKPhI21f4uwaQxMAMELkQ1BkgomCl1C9TCTNAgWttb5F3gc9ISAfQNQQmXUehx7EKtDIZINYAUU8MgIh8ZBcdi7P5s2ihK6wBCpxUAB1viENidxG0XbTjXEebp7tREHOsAu3fNhgS1gCRKwyAiHzUczl9pYbAOAsscNLwV4IhARH6CERHRAPgMFgoU24WGGuAqC8GQEQ+kj6UBUGQh64CxQxQ4KQASFpIMt7QteUBC6FDV6D7gEnkGiAGQNQDAyAiH/UsgBYEQZFzsgYocM1tXVPgE6K7AqC47gCIU+FDl1xrp9A0eCuHwKgHBkBEPpKnwCs0/AVwFpgSHENgzhkgBkChyyoVQXMIjFTAAIjIR466BGUKoAFmgJTQswYIgLzrd+/tMSh0SO81LoRIamAAROQjpdLyPbEGKHC9h8CkWqAWZoBCllWh5SYMzACRCwyAiHzUofA+YABngSnB4nYIjLPAQlW7wtPguQ4Q9cQAiMhHSq8CDTADFCi7aJdrfaQhsLgo1gCFOqXeaz2HwLgwJkkYABH5yLEKNGuAgkWLtRUiRAgQEGeIBeAYAmMNUOhSahp8zwBKyuASMQAi8lG7jbPAgo20C3y8IQ46QSf/G+haB8jOX/0hSaktZ3qu2M5CaJIwACLykSMtzwxQsJC2wUiITpCvi4vqygSJoohz7a2atIv812m3wSZ2vR8CzQDpBIH7gVEfDICIfKT0RqgAa4AC1XsVaKCrT2MjYwBwGCwUSRuhAkCUPrAiaKBnHRCHwKgLAyAiH6kxBMZZYIGRhsASegRAAFeDDmVSpiZCFwG9LvCvKsdiiNZ+jqRwwQCIyEeOdYCUGwJjBigwvVeBlsiF0AyAQo5SG6FKDMwAUS8MgIh8pPQHM8AaoEC5qgECeqwGzbWAQo48A0yhTKv0g8XKDBB1YwBE5CN1VoLmLLBAuBsC447woUvpWruo7sUUpb38iBgAEfmoXZWVoJkBCkTvVaAlHAILXVKmJtAZYBJp3a52GzNA1IUBEJGP1JgGzxog/9nsPVaBjmYR9GDhGGoOfAYYABj0zACRMwZARD6SPkA5Cyw4SMNbgiAgtrvmR+LYEZ41QKFG8Rqg7gyQlQshUjcGQEQ+UqMI+mTjaQiCgDPNZ/DKF6/hSPVRxc492Mm7wBvioRMEp9vimQEKWYrXAHFHeOqFARCRD0RRlAOgSIWGwI5UH8U24w7kJo/E/MLLEBsVg/X732cQ5CVXiyBKpACotb0VNrt9QNtFgZEyNcrVADk2RCUCGAAR+aTTbpN3k1ZqCGyHqQR5Kbm4ZdpizMgtws0X3oTRKbnYYSpR5PyDnWMNoIQ+t8VGxUJAV1aoldthhBRpwUKl3mcGZoCoFwZARD7o+etRqd3g61rqkZc2GkL38I0gCMhPG426lnpFzj/YyUNg0X0zQDpBh9juPcG4HUZocewEr0wRtJQB4l5gJGEAROSD9h7L80u7jgcqNS4FproyObMkiiKMtWVIjUtR5PyDnbtVoCWOOiAWQocSpWvtOARGvTEAIvKBGgXQM/NmwFRXjjf3rENJ+W68uWcdyurLMSvvEsUeYzDzNgBqYSF0SLEqvOAoi6CptwitG0AUStSYAj8+cyxunHIdPv12I8rrTyA6MhqLplyPcZmFij3GYGZxsw2GhIshhqb2TmWLoA3MAFEvzAAR+cCRAVJuEUSgKwi6+vwfQISImMhoBj8+cLcNhiSOawGFJMWHwPSsASJnDICIfNBhUz4DJMlMzAAANLSeRVsHl+v3hs1uQ0v37K7+a4CYAQolyi+EyAwQOWMAROQDNTZClcRFxSKxexinprlG8fMPRlJQoxN0iOme7dUbh8BCk1oLIdrsNm45QwAYABH5RK0hMElmYiYAoMrMAMgb0vBXvItVoCXx3YERd4QPHaIowmqTNkNVdho8wCwQdWEAROSDdhWHwAAgq3sYrMpcrcr5B5v+ZoABzACFok57p+ILjkbo9NALXZsOsw6IAAZARD5xDIGpkwHK6s4AVTMD5JVmeQaY+wBI2hH+XMc5dHLoIyT0DFCUXHJCrgNiAERgAETkEzXWAepJKoSutdSh08ad4fvjmAHmego8AMRExsiLVnItoNAgBSiR+ki3Q5v+YCE09RTUAVBxcTGmTZuGhIQEpKen45prrsGxY8c83mfNmjUQBMHpLzo6eoBaTIOdmkXQAJAUnYiYyBjYRTvOWGpVeYzBRM4AeRgC0wkC4rgdRkhReiNUCfcDo56COgDatm0b7rnnHuzatQsbN25ER0cHrrjiCrS0eP4QS0xMRFVVlfx34sSJAWoxDWZHqo/iSPVRCBCw7+TXquzWLghCjzogDoP1R64B8jAEBjjqgJgBCg2OjVCVKYCWyPuBMQNECPKVoD/99FOny2vWrEF6ejq++uorzJo1y+39BEFAZmam2s2jMHKk+ijW738fo1NGIT8tD8baMqzf/z5unHIdxmeOVfSxMhMzUVZfwUJoL1g87ATfE/cDCy1WhVeBlji2w+hQ9LwUmoI6AOqtqakJAJCcnOzxOIvFgpEjR8Jut+OCCy7AU089hQkTJrg93mq1wmp1LDxnNpsBADabDTabskWTNpsNdrtd8fMORsHUV9uNXyAvJRc3T7sJgiBg+qiL8OaeddhhKkFhWoGij5URnwYAqGqq9vq5B1NfDSRpJ/jYyFiPzz02Mrb7eEvY9pU/tOqrto42AF2TDZR87MjuyQttHW38bNeQmn3lyzlDJgCy2+247777cMkll+C8885ze1xhYSFee+01TJw4EU1NTfjDH/6AGTNm4PDhwxg+fLjL+xQXF2PVqlV9rjeZTIiP95xa95XdbkdDQwOMRiN0uqAegdRcMPVVnaUOEwvnQOguyBQEAflpedh8bCtKS0sVfSxre9eHf7W5BseOH/eqCDSY+mqg2EQbWjvOAQBqT9XArG90e2x7S9cPnJNnTsHYYQy7vvKXVq+r75q/AwB0tHUo+v6ytna9t05Xn0ZpGz/btaJmX1ks3md5QyYAuueee3Do0CF8/vnnHo+bPn06pk+fLl+eMWMGxo0bh1deeQVPPvmky/usXLkSK1askC+bzWbk5OQgLy8PiYmJyjyBbjabDUajEfn5+dDr9Yqee7AJpr5KrUuFsbYM00ddBEEQIIoijLUmpCWkoaBA2QyQXbRjY/VWdNg6kJydjLT41H7vE0x9NVAazzUBFYBe0GNC4QQ5OHWl4UQTvm06jsiYSOTn54ddX/lLq9dV/YlGoA4YmjRU0feXsbMcFZZKJA5NREG+su/bcHwP+kvNvpJGcLwREgHQ8uXL8c9//hPbt293m8VxJzIyElOmTIHRaHR7jMFggMHQt9hOr9er8kLW6XSqnXuwCZa+mpV/Cdbvfx9r96xDQXcNUFl9BRZNuV7xtumhR2ZCBr5rPIkzllpkJmV4db9g6auB0trRtQdYfHQ8IiI8f5QlxnTVCLW0t0Cv14ddXwVCi76S9tyLjjQo+riGyK4ZwR32Tn62a0ytvvLlfEGdpxNFEcuXL8cHH3yAzZs3Izc31+dz2Gw2HDx4EFlZWSq0kMLFuIxCxEbG4ERDJTYf34ZzHeewaMr1qu3aLq0HVMU9wdzyZhVoSby8IzxngYUCx3pbCs8C664B4jR4AoI8A3TPPffgrbfewocffoiEhARUV3fNiklKSkJMTAwAYMmSJRg2bBiKi4sBAE888QQuvvhi5Ofno7GxEc888wxOnDiBO++8U7PnQaHvjKUWrR3nEKGLwC/n/0K1laAl0lT4as4Ec8uXACiOO8KHFKV3gpcYuBAi9RDUGaCXX34ZTU1NmDNnDrKysuS/d955Rz6msrISVVVV8uWzZ89i2bJlGDduHL73ve/BbDajpKQE48eP1+Ip0CBx/EzXEGpuyijVgx/AsSVGlblG3hOJnDm2wfA8BR5wrANk7bRyhe0QoPRO8JI6SwMEQcCR6qN45YvXVFnLi0JHUGeAvPng37p1q9Pl5557Ds8995xKLaJwJQVAY9LzB+Tx0hLSoBN0aOtoQ+O5JgyNHTIgjxtKHNtg9J8Bio4wQC/oYRNtHAYLckeqj6K0zgQBAr48sRdDYpIUWWvrSPVR7P1un7yWl6lOvbW8KDQEdQaIKBi0tLfiu8aTAIAxaQMTAEXo9EjvXg+IG6O65s02GBJBEOTFELkadPCSFhzNTszE5WMvQ3JsMtbvf1+RTM0OUwlGp+TilmmLMSO3CDdfeBNGp+Rih6lEgZZTKGIARNQPY60JAJCRkI6kGGWXRfBELoRmHZBL8irQXgyBAT3qgJgBClo7TCXIS3UEKbdMUy5IqWupR37a6F5reY1GXUt9wOem0MQAiKgfAz38JclK6qoDYgbINV+KoIEe+4ExAApadS31yEtVJ0hJjUuBqbZMLq3oWsurDKlxKQGfm0ITAyAiD2x2G4x1ZQCAMQpvedGfLGaA3OqwdeJc9yrQ8V4HQJwJFuxS41JgVClImZk3A6b6cry5Zx1KynfjzT3rUFZfjll5lwR8bgpNDICIPKg8+x2snVbERsVi2JCBXUsqI6ErAGq2Wvil3Ys0/KXX6RHTvbhdf6S1gJgBCl4z82agrL4ca+Ug5W3FgpTxmWNx45TrYG5rxsajm3Gi4Tv8aNI1qq3lRcGPARCRB9LwV0FaHnTCwL5dDBFRSInr2viXw2DOHDPAEjxugdETM0DBb/iQYQCAEw2V2KLCgqPjM8fiv2behThDHGyiTfFp9hRagnoaPJHWjnUHQIXpAzv8JclKzER9SwOqzNXITxutSRuCkWMNIO83tIzrmQGKU6VZFKBva44BALKTsnDn9KWqPIZOEDAuYwz2VO7DtzXHBry2j4IHM0BEbtS11KOhtQE6QYfRKb5vw6KETHlFaGaAevK1ABpw1AoxAxS8vu2e7q72ujzjMroySsdqjsMu2lV9LApeDICI3JCGv0Ylj0B0pLJ7EnnLsSI0C6F78i8AkjJAraq0iQJjsVpwouE7AOoHQCOTRyA6MhqtHedQ2f2YFH4YABG5odX0956kDFBD61m0dVg1a0ewaW5z1AB5SwqA2m3t6LBzO4xgc7TmOESIyE7KwpCYJFUfS6/Ty8Pa0rAbhR8GQEQunOtoQ+XZrl+GAz39vae4qFgkRnctvljDneFlcgbIhxqgKH0UIrv3cWuztanSLvKftNrz+IyB2ZZCGgb7tuY499sLUwyAiFww1ZXBLtqRGpeC5LihmrbFsR4QAyCg64vyZOMpCBCw3fiF19skCIIgF0JbbcymBZPW9laUN5wAgAGblp6XmotIfSTMbWac5hBzWGIARORCMAx/SbglhoO0V1TOkGG4fOxlGBKT5NNeUdIw2DlmgILK0ZpSiKKIzIQMeekHtUXqI1GQlgcA+Laaw2DhiAEQUS920Y7S7v2/BmrzU0+kQmjOBOveK6rnhpY+7hUlBUBtzAAFlSM1AzP7qzdpGOwo64DCEgMgol5ONp7GuY5ziI6IRs7Q4Vo3BxZrCwRBwJnmWqz+/G+K7Iwdqupa6pEXwIaW0mrQrAEKHuc6zqGsrhzAwA1/SQrS8qEX9KhrqUetpW5AH5u0xwCIqAdpiEWAAEEQcOxMqebt+efhT5CbPBKXj70McVGxPg35DDYpcckw1pr83itKWguIGaDgceyMEXbRjrT4VKTFpw7oY0dHGpCbOgoAh8HCEQMgom5S8JMen4rLx16GrMRMzYONHaYS5KX6P+Qz2IwaOgJl9RV+7xUVZ2AGKNgM1OKH7jhmgzEACjcMgIi69a4vuSUIgo26lnrkpfo/5DPYnGw6DQCos9RjS+l2n/eKimcAFFTaOqww1pUB0C4AKkwvgAABVeZqNJ5r0qQNpA0GQETdAq0vUUNqXApMdWVOQz6ltSakxA7MTJlgcqqpCicbT0En6HDXJbfh11c8gJ9ecrtPdSN1ljoIgoAGayNe3bkmbIcSg0VprRE2uw0pcclIj0/TpA3xhjiM6K714zBYeGEARNTNEBEVUH2JGmbmzYCprhxv7nkbJeW7sXbPOpTXVyA+Ovx28/zyxF4AwISscT5tgSE5Un0Um45vYz1VEDnSY/hL+uGhBSmI5myw8MIAiAhd6/5YrC0oq6/Am37Wl6hhfOZY3DjlOpzrOIctpdthPmcGABhry+SZM+HAYm3BodNHAABFI6f5dY5Ap9CTsto72+XlJgZq9Wd3xnbXAZ04+x0s3auM0+DHAIjCXtM5Mz745v8BAArS8nCuo82v+hK1jM8ci59ecjt+fcUD+O/ZP8OFIy4AAGw4+DHaOsKjluWr7/bDJtowLCkbw4dk+3WOYBziDGeltSZ02jsxNGaIvNinVobEJMnrbWk985MGToTWDSDSks1uxz++3oBzHeeQlZiJRVOuR4Q+uN8WVxReBlNdOc62nsUn327EtRMXat0kVdnsNuyt3AcAKBp5od/nkeqppo+6CIIgdA9xmjQd4gxXXcs7fAoBAjrsnfi25phmRdCSlLhkVDfX4OPD/8beyv2YmTdD8zaRupgBorC21bgdlWdPIkofhR9Nvibogx8AiIqIwrUTfwAA+PrUwUE/fffbmmNotloQFxWH8Vnj/D6Po55qnVxPVVZfEVBQRb6TlpvISszA5WMvQ0Z8mua1WEeqj+JQ1RHkJo/E/MK5iI2M0bxNpD4GQBS2THXlcv3HD8//3oDtQaSEEUNzcEnuxQCA/3foE7RYWzRukXp2V3QVP184YgoidHq/z+Oop2rD5mNbcbLxFICuug8aODtMX2B0yqigqsVyvd7WKNaHDXLB/3OXSEFHqo9ih6kEdZY62NE122tqzhSclzVe45b5bm7BLJTWmnDGUouXS/6Kjs4OpNalYlb+JYMmdX+6qRrfNZ6ETtDhwpwLAj7f+MyxKEwrQGlpKaJTY7Bmz9+x/+TXmDzsfIxMHqFAi8mTDlsnapprMb9wbp9arC2l2zVrV11LPeZmz+rVpjxsOa5dm0h9zABR2JBS77GRMZg7ZjZGDs0BAIwK0S++CH0EJg07H0DXhqmXFc4ZdFO75anvmeOQEO371HdPcoYOxwXDJwMA/nn4U3TabYqen5y1dVjx973vQIQYdMtNuFtvS6fThc1Eg3DEAIjChjQN+uZpN3Wv9LwYo1NGoaR8t9ZN89uhqiMY3Wdq9+BI3bdYW3Cw6jAA4CKV6nTmF85BbGQMai112FX+pSqPQV3LGLzx5d9R0XACekHfvdzE20Gz3ETv9bbe7F5vy9ppxRtfvjWoh5jDGQMgChu1ljoX06DzQnoadF1LPfJdPKczllrYQjSjcaT6KF754jU8u/UF2EU7hsYO8Xvqe39io2Jxxdh5AICtxh0429qoyuOEs7OtjXht11pUmasRGxWL2y9e4rS2VTAsN9F7va1zHW24vPAyxEbGoMpcjdd3/x/Mbc2atY/UwRogGvSazpnx6bcbYRNtMNaaek2D1jb1HihXU7tLa00QRTte/vyvmJA5DsdrjahrqUdqXErQT+2VhinzUnIxb8wcGGtNKKuvUHWa9KRh52P/qW9woqES/zryb/x46o2arko8GEi1drWWOgBAp70TSTFJuGXaTUiNS0F2UmbQvQ7HZ47t06Yx6fl4c8861LXUY/UXf0NcVCwazzWFxHuJ+scAiAYdudC5pR4xkTFobW9Fp70TAgR5pef8tLyu1ZTry7FoyvVaN9lvM/NmYP3+93s8JxPK6ysQpY9CXUs9tpk+x+iUUZhbMAumujKs3/8+bpxyXdB+cPccphQEAdNHXYQ396zDDlOJam0WBAE/mHAVXv78ryitNeHP216Gpb2FX3J+koLY0Sm5uGzMbDmInZU3I+R+bKTFp+L2i5fgryVrYGlvQWZCOqYMnxQS7yXqHwMgGlR6ZhDmFszq+vBtMyMlLgU3TrkW9S0N2GEqwZbS7UiNS9E89R4oKXW/w1SCzce2Ii0hDYumXI9RKSPwwva/ICMhDbdMW+wUTGwt3SF/aPcMFrX+wm9us+BMcy3mFc7pOxtH5RlCafGpGJs+BkdqjmJo7BBMGzmVX3L9cPXayU7KwidHNnZPc3cOYvdW7sfUnClaN9tnQ2KSEGeIRbqL99J20xd8bYQwBkAUclx98OanjkZ5wwl8fPhTjE4Z1SeDcK6jDRkJ6chISB90H1g9p3YXFBRAr+9aK6fd1o78tLw+wcTGo5vx520vIzkuGcZakxws9v7CVzM46nnuITFJiDfEo7LhO9hh12yYsqH1rLw+zUBln0KV/EMjNRdzs2fBWNv12gEAAQKm51404EGsmhpaGzFp2ESX76WPD/8bQ2OH4JtTh1BnqRt0S1EMZgyAKCgdqT6K7cYv+nyg9M3wdH3w6qCDHXYIEFx+6Yfyh6+/3G39IAgCGlrP4uy5RpfB4sZjm3H2XBM2Ht0kf8G5yoZ4CpA83Xbw9BH84+sNGN0zS1dfAQBIiU3RbJiyvrUBE4f1XQvms2Nb8M3pwxAgoKR8V1BkywaCu/egzW7HltLtGJ2Si5svdLx21u5ZhxMNlYjUR8JY2/t1Nzhr7QQB2FP5FQBgdMooXFY4B6Za394rpB1BlBY+IJnZbEZSUhKampqQmJio6LltNlufX+qDlb9fkD2DnLy00TDVlsFUX46J2efBWFuGzMR0+Ve6KIryB29idAI6bB3ISMiQ0++iKOLNPW/jXMc5/PSS27XsDlW5el31rMXITxstBxPXTvwhovSRePfAB5hfOBczcovk85SU78bGo5sBAchNHunUz2/uWYczzbWYOmIKms6ZceDUN33OPSO3CKIoYmfFl31uS4lNQbvNCkt7i8tzm9uasXzWT/u8NmblXaLoMKW79+ArX7yG2KgY+Uvd8do6AXv3x6T0nKTXpBIBYaACeVx3t/d+D0r/h8mxQ2Fua4bNbsPlYy/r89rZfHwbrpv0Q5evu1Aebnb3Xpqdfym+PPEVshIz+nwmnW6qwgXDJ0EURew6scfxeVZXBlNd+YBkWoOVmt+Dvnx/MwByYbAFQGp8QHpzm5Qiz0t1ftMDcBngXDB8MuIMsfiq8oDbIEcURbcfvL++4gF8W3Ns0H34esPd68pTMPHKF68hNjJGzgBJgcipptNo7+xw2c8bj26GCBGCIPQJYuT/I4hub7OLXVk6V+feUrodv77iAU37ytVrZ0LmOBw7U4oRQ4f3eU6nGk9jTHo+7KIdR6qP9nlNO73eXbwXAg2evHqf9brt2okLMTJ5BI5UH8V/jm7q83zT49Nw9lwjcoYMc/t/qBd0GJk8olcQ6/ihoXYQqwV3z+m3/3kGcwtm+fReeXPPOtS3NOC8rAn4onyn2+DI1eMOxOe32hgA+eDFF1/EM888g+rqakyaNAn/+7//i4suusjt8e+++y4eeeQRVFRUoKCgAL///e/xve99z+vHUysAckopxzuPE2saiLj5YO5z3+4P9R+e933YRRv+efjTPh/4F428EKlxyfjctBOp8alOmZi1e9bhZOMpiKLo8sukvy/Iz45tQVxUHNJ6nbd3hmcwfvj2x58PFHdf+IumXI/tpi9cBke1ljoUZozBvu8OuMwefXZsCwC4vG3z8a24regWfHToX4iPiut17oHL0nnqKyW/5NbuWYfKhu8gCEKf1/ube9ahuvkMxmaMgbnNDGNtWZ//h57v4d63jU0fg6GxQ3Dw9GGkJ6T3ej90ZR9EiBiWlO3+feYpiHX7Q2Mr7r50GarNZ/DugfD7oeGKq8zhm3vWoaH1LMak52Nv5X6fMq1r96xDVVMV8tJGo62jDaa68j79PG/MHEToIvDvo595zCz5+9kPqBt4ufseVMKgCoDeeecdLFmyBKtXr0ZRURGef/55vPvuuzh27BjS09P7HF9SUoJZs2ahuLgYP/jBD/DWW2/h97//Pfbt24fzzjvPq8dUIwBy92Vz0YipENE1jtz7tguGT0ZmYgaqzNXYf/LrPrdL+1dJqwH3vK0gLQ9DY4fgcNW3yEhI7/PhW2WuhigC2UmZfd58JxtPITYqFi3WFreBir+/8jce3QwAbgOcqTmTcaymtE/wJH1BStO++cHrzN9fVO6+8D0FR+MyC9186Hf9HwFwe5uUHdDy/9CfvnL3Jdd4rglTc6Zg0/Gt7r/k4Pr1rmY2rb/H1ev0sIk2XF7Y9/ZNx7diSHQShsQkeQxSw/GHhiuO1/MoeSmKsvoK5/eKix8TVeYaWDutbl83/r42vjv7HeIM8Whtb+2TxZMeV4DQJ8ve9QOnHheNnIpaSx2+OX2oz3v04pHTIAiC0xC39ON3Tv5MjEoZicqz32Hz8W19fhxfOXY+dIKAT77d6DJTqlQQNKgCoKKiIkybNg0vvPACAMButyMnJwf//d//jYceeqjP8YsWLUJLSwv++c9/ytddfPHFmDx5MlavXu3yMaxWK6xWq3zZbDYjJycHDQ0NigVAr+5cg9io2D4ZEa8+5DT4gBQh+h3EFKYX4ERDJTITM/v8Mm06Z4YgCEiKTuzzgXCuow13XrwU39Ycw3tfb+jzgXLDpGsxNmMMvq05hi/Kd6HOUo/U+BRcmjsdYzPGKPL/FKpsNhuMRiPy8/MVSyl76mdP/0ciRI//f/2dW23+9FV/r8lXd65BXFRsn9d0s9UCURSRGJ3Y571QZ6nHBTmTscNUgnmFc/oGIt3ZtHkuviA3HduCi0ZOw8Gqw0iPT+tz7obWsxAgYGjs0D63tbafw7Lpt7pt87mONlySe3G//4fk8G3NMXxetlPOaswcPcOr98qOshKX/wcNrWdx0Yip2HR8m8vXxsZjmwFR+c9vRYJyH+/b87NfCWazGcnJyV4FQEE9C6y9vR1fffUVVq5cKV+n0+kwf/587Ny50+V9du7ciRUrVjhdd+WVV2LDhg1uH6e4uBirVq3qc73JZEJ8vDIbMNZZ6nBZr/VNCtLycKKh0uXMJem2nNhhOHWuyu3tnu47YchYlDWfcDGt2ITYiBgIEFzM1jAhITIeRWlTsbv2K5e3DzUMASC6vG1IVBImxU5AsjgEX5zZ7bRAX1l9BS5NL4IIuL2ttLQUEdDhkvQifNt4DJsatiIpMgGXphdBbxZQau66fXbKDECaVGIGSs2livw/hSq73Y6GhgYYjUbodMrscOOpn+X/o6bj2NywFYlRifL/ESC4va3n/bX6P/Snrzw931JzKfJiRvn1es+0pSEpKsHleykpKgnu3mdJUUkYKQyDLsn9uft7n3lqc4TZ83uQnEVAh1nJ09GABiQnJ0PX67Xu7rXj6f8guX2I29fG0KghcPfaSIxKwEUpF2BXnevP79iIGHlD2t63GfRRyIrJxImW7zx858DlbRX1J5AQGQ9LR4vb2+Hivvlpedh8bCtKS5V5XVksFq+PDeoM0OnTpzFs2DCUlJRg+vTp8vW//OUvsW3bNuze3XcTy6ioKLzxxhtYvHixfN1LL72EVatWoaamxuXjDFQGyN2vLVEU3d5258VLA7pvIL/U1fyV700GQI2sxmDFvvKeWn3l7+tdy/dZf7fzdeU9f/tKrddGIPfV6vtKCb5kgBgAuaBuDVDfcWIRoseaCE81E/3dV3psd2P1/Y3jB3LfQIXTkgGBYl95Lxj7Ssv3mSfB2FfBSq2+0uLzO5DvHO/u67peSgmDpgaovb0dsbGxeO+993DNNdfI1y9duhSNjY348MMP+9xnxIgRWLFiBe677z75usceewwbNmzA119/7dXjqjkLbIepBLXNtUhLSAuZQEQr/PD1HvvKe+wr77GvvDfY+krtwMvV96ASfPn+DuoaoKioKEydOhWbNm2SAyC73Y5NmzZh+fLlLu8zffp0bNq0ySkA2rhxo1MGSSvutiyQbvNUBe/p9v7uS0RE5ItAvnP6u6+778GBFtQBEACsWLECS5cuxYUXXoiLLroIzz//PFpaWnDbbbcBAJYsWYJhw4ahuLgYAHDvvfdi9uzZ+OMf/4jvf//7ePvtt7F371785S9/0fJpEBERURAJ+gBo0aJFqK2txaOPPorq6mpMnjwZn376KTIyMgAAlZWVTjM5ZsyYgbfeegsPP/wwfvWrX6GgoAAbNmzweg0gIiIiGvyCPgACgOXLl7sd8tq6dWuf62644QbccMMNKreKiIiIQpUyC4YQERERhRAGQERERBR2GAARERFR2GEARERERGGHARARERGFHQZAREREFHYYABEREVHYYQBEREREYSckFkIcaNL+sGazWfFz22w2WCwWmM3mQbFhnprYV95jX3mPfeU99pX32FfeU7OvpO9tb/Z5ZwDkQnNzMwAgJydH45YQERGRr5qbm5GUlOTxGEH0JkwKM3a7HadPn0ZCQgIEQVD03GazGTk5Ofjuu++QmJio6LkHG/aV99hX3mNfeY995T32lffU7CtRFNHc3Izs7GynfUJdYQbIBZ1Oh+HDh6v6GImJiXyTeIl95T32lffYV95jX3mPfeU9tfqqv8yPhEXQREREFHYYABEREVHYYQA0wAwGAx577DEYDAatmxL02FfeY195j33lPfaV99hX3guWvmIRNBEREYUdZoCIiIgo7DAAIiIiorDDAIiIiIjCDgMgIiIiCjsMgFTW0NCAn/zkJ0hMTMSQIUNwxx13wGKxeLxPdXU1brnlFmRmZiIuLg4XXHAB/vGPfwxQi7Xja19VVFRAEASXf+++++4Atlwb/ry2AGDnzp247LLLEBcXh8TERMyaNQvnzp0bgBZrx5++mjNnTp/X1c9+9rMBarF2/H1dAV2r8C5YsACCIGDDhg3qNjQI+NNXP/3pT5GXl4eYmBikpaXh6quvxtGjRweoxdrxta8aGhrw3//93ygsLERMTAxGjBiBn//852hqalKuUSKp6qqrrhInTZok7tq1S9yxY4eYn58vLl682ON9Lr/8cnHatGni7t27RZPJJD755JOiTqcT9+3bN0Ct1oavfdXZ2SlWVVU5/a1atUqMj48Xm5ubB7Dl2vDntVVSUiImJiaKxcXF4qFDh8SjR4+K77zzjtjW1jZArdaGP301e/ZscdmyZU6vr6ampgFqsXb86SvJs88+Ky5YsEAEIH7wwQfqNjQI+NNXr7zyirht2zaxvLxc/Oqrr8SFCxeKOTk5Ymdn5wC1Whu+9tXBgwfF6667Tvzoo49Eo9Eobtq0SSwoKBCvv/56xdrEAEhFR44cEQGIe/bska/75JNPREEQxFOnTrm9X1xcnLh27Vqn65KTk8VXX31VtbZqzd++6m3y5Mni7bffrkYTg4q//VVUVCQ+/PDDA9HEoOFvX82ePVu89957B6CFwSOQ9+H+/fvFYcOGiVVVVWERACn1mfX111+LAESj0ahGM4OCUn21fv16MSoqSuzo6FCkXRwCU9HOnTsxZMgQXHjhhfJ18+fPh06nw+7du93eb8aMGXjnnXfQ0NAAu92Ot99+G21tbZgzZ84AtFob/vZVT1999RUOHDiAO+64Q61mBg1/+uvMmTPYvXs30tPTMWPGDGRkZGD27Nn4/PPPB6rZmgjktfX3v/8dqampOO+887By5Uq0traq3VxN+dtXra2t+PGPf4wXX3wRmZmZA9FUzSnxmdXS0oLXX38dubm5yMnJUaupmlOirwCgqakJiYmJiIhQZhtTBkAqqq6uRnp6utN1ERERSE5ORnV1tdv7rV+/Hh0dHUhJSYHBYMBPf/pTfPDBB8jPz1e7yZrxt696+tvf/oZx48ZhxowZajQxqPjTX2VlZQCAxx9/HMuWLcOnn36KCy64APPmzUNpaanqbdaKv6+tH//4x/i///s/bNmyBStXrsSbb76Jm2++We3masrfvvrFL36BGTNm4Oqrr1a7iUEjkM+sl156CfHx8YiPj8cnn3yCjRs3IioqSs3makqJz/e6ujo8+eSTuOuuuxRrFwMgPzz00ENui2+lv0CK2h555BE0Njbis88+w969e7FixQrceOONOHjwoILPYmCo3VeSc+fO4a233gr57I+a/WW32wF0FWHedtttmDJlCp577jkUFhbitddeU/JpDAi1X1t33XUXrrzySpx//vn4yU9+grVr1+KDDz6AyWRS8FkMDDX76qOPPsLmzZvx/PPPK9tojQzEZ9ZPfvIT7N+/H9u2bcOYMWNw4403oq2tTaFnMHAG6vPdbDbj+9//PsaPH4/HH3888IZ3UyaPFGb+53/+B7feeqvHY0aPHo3MzEycOXPG6frOzk40NDS4TRObTCa88MILOHToECZMmAAAmDRpEnbs2IEXX3wRq1evVuQ5DBQ1+6qn9957D62trViyZEkgzdWcmv2VlZUFABg/frzT9ePGjUNlZaX/jdbIQL22JEVFRQAAo9GIvLw8n9urJTX7avPmzTCZTBgyZIjT9ddffz1mzpyJrVu3BtDygTcQr6ukpCQkJSWhoKAAF198MYYOHYoPPvgAixcvDrT5A2og+qq5uRlXXXUVEhIS8MEHHyAyMjLQZjsoUklELkmFX3v37pWv+/e//+2x8Oubb74RAYhHjhxxuv6KK64Qly1bpmp7teRPX/U0e/ZsRWcHBDt/+stut4vZ2dl9iqAnT54srly5UtX2ainQ15bk888/FwGIX3/9tRrNDAr+9FVVVZV48OBBpz8A4p/+9CexrKxs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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Time-Dependent DMRG\n", + "\n", + "Here we use real time TD-DMRG and Fast Fourier Transform (FFT) to calculate the Green's function.\n", + "\n", + "This is obtained from a Fourier transform from time domain to frequency domain:\n", + "\n", + "$$\n", + " G_{ij}(t) = - i \\langle \\Psi_0 | a_j^\\dagger \\mathrm{e}^{-i (\\hat{H}_0 - E_0 ) t} a_i |\\Psi_0\\rangle \\\\\n", + " G_{ij}(\\omega) = \\int_{-\\infty}^{\\infty} \\mathrm{d} t \\mathrm{e}^{-i \\omega t} G_{ij}(t) \\mathrm{e}^{- \\eta t}\n", + "$$\n", + "\n", + "where $\\mathrm{e}^{- \\eta t}$ is a broading factor.\n", + "\n", + "In the ``SU2`` mode:" + ], + "metadata": { + "id": "U9vVZiCMXh7U" + } + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "iIApuO0PUuSP", + "outputId": "301d6a4c-ab64-452c-980b-b97fdfdc0f27" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "integral symmetrize error = 0.0\n", + "integral cutoff error = 0.0\n", + "mpo terms = 863\n", + "\n", + "Build MPO | Nsites = 6 | Nterms = 863 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 6 .. Mmpo = 13 DW = 0.00e+00 NNZ = 13 SPT = 0.0000 Tmvc = 0.000 T = 0.014\n", + " Site = 1 / 6 .. Mmpo = 34 DW = 0.00e+00 NNZ = 100 SPT = 0.7738 Tmvc = 0.000 T = 0.008\n", + " Site = 2 / 6 .. Mmpo = 56 DW = 0.00e+00 NNZ = 185 SPT = 0.9028 Tmvc = 0.000 T = 0.008\n", + " Site = 3 / 6 .. Mmpo = 34 DW = 0.00e+00 NNZ = 419 SPT = 0.7799 Tmvc = 0.000 T = 0.016\n", + " Site = 4 / 6 .. Mmpo = 14 DW = 0.00e+00 NNZ = 105 SPT = 0.7794 Tmvc = 0.000 T = 0.013\n", + " Site = 5 / 6 .. Mmpo = 1 DW = 0.00e+00 NNZ = 14 SPT = 0.0000 Tmvc = 0.001 T = 0.027\n", + "Ttotal = 0.087 Tmvc-total = 0.002 MPO bond dimension = 56 MaxDW = 0.00e+00\n", + "NNZ = 836 SIZE = 4753 SPT = 0.8241\n", + "\n", + "Rank = 0 Ttotal = 0.190 MPO method = FastBipartite bond dimension = 56 NNZ = 836 SIZE = 4753 SPT = 0.8241\n", + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.138 | E = -3.2667431000 | DW = 5.73e-21\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.227 | E = -3.2667431000 | DE = 4.09e-14 | DW = 1.64e-20\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.327 | E = -3.2667431000 | DE = 0.00e+00 | DW = 9.52e-21\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.428 | E = -3.2667431000 | DE = -1.78e-15 | DW = 1.55e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.521 | E = -3.2667431000 | DE = -1.78e-15 | DW = 6.12e-21\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.634 | E = -3.2667431000 | DE = -3.55e-15 | DW = 2.47e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.781 | E = -3.2667431000 | DE = 7.11e-15 | DW = 7.01e-21\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.876 | E = -3.2667431000 | DE = 1.78e-15 | DW = 1.12e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 200 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 0.997 | E = -3.2667431000 | DE = 1.78e-15 | DW = 1.93e-20\n", + "\n", + "Ground state energy = -3.266743099951065\n", + "\n", + "Sweep = 0 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.057 | F = (0.9960879032,0.0000000000) | DW = 3.05e-25\n", + "\n", + "Sweep = 1 | Direction = forward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.120 | F = (0.9970594762,0.0000000000) | DF = (9.72e-04,0.00e+00) | DW = 9.73e-25\n", + "\n", + "Sweep = 2 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.168 | F = (0.9970594762,0.0000000000) | DF = (4.44e-16,0.00e+00) | DW = 1.57e-25\n", + "\n", + "Sweep = 3 | Direction = forward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.213 | F = (0.9970594762,0.0000000000) | DF = (-5.55e-16,0.00e+00) | DW = 3.36e-25\n", + "\n", + "Sweep = 4 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.262 | F = (0.9970594762,0.0000000000) | DF = (2.22e-16,0.00e+00) | DW = 1.04e-24\n", + "\n", + "it = 0 ( 0.0 %)\n", + "it = 25 ( 1.0 %)\n", + "it = 50 ( 2.0 %)\n", + "it = 75 ( 3.0 %)\n", + "it = 100 ( 4.0 %)\n", + "it = 125 ( 5.0 %)\n", + "it = 150 ( 6.0 %)\n", + "it = 175 ( 7.0 %)\n", + "it = 200 ( 8.0 %)\n", + "it = 225 ( 9.0 %)\n", + "it = 250 (10.0 %)\n", + "it = 275 (11.0 %)\n", + "it = 300 (12.0 %)\n", + "it = 325 (13.0 %)\n", + "it = 350 (14.0 %)\n", + "it = 375 (15.0 %)\n", + "it = 400 (16.0 %)\n", + "it = 425 (17.0 %)\n", + "it = 450 (18.0 %)\n", + "it = 475 (19.0 %)\n", + "it = 500 (20.0 %)\n", + "it = 525 (21.0 %)\n", + "it = 550 (22.0 %)\n", + "it = 575 (23.0 %)\n", + "it = 600 (24.0 %)\n", + "it = 625 (25.0 %)\n", + "it = 650 (26.0 %)\n", + "it = 675 (27.0 %)\n", + "it = 700 (28.0 %)\n", + "it = 725 (29.0 %)\n", + "it = 750 (30.0 %)\n", + "it = 775 (31.0 %)\n", + "it = 800 (32.0 %)\n", + "it = 825 (33.0 %)\n", + "it = 850 (34.0 %)\n", + "it = 875 (35.0 %)\n", + "it = 900 (36.0 %)\n", + "it = 925 (37.0 %)\n", + "it = 950 (38.0 %)\n", + "it = 975 (39.0 %)\n", + "it = 1000 (40.0 %)\n", + "it = 1025 (41.0 %)\n", + "it = 1050 (42.0 %)\n", + "it = 1075 (43.0 %)\n", + "it = 1100 (44.0 %)\n", + "it = 1125 (45.0 %)\n", + "it = 1150 (46.0 %)\n", + "it = 1175 (47.0 %)\n", + "it = 1200 (48.0 %)\n", + "it = 1225 (49.0 %)\n", + "it = 1250 (50.0 %)\n", + "it = 1275 (51.0 %)\n", + "it = 1300 (52.0 %)\n", + "it = 1325 (53.0 %)\n", + "it = 1350 (54.0 %)\n", + "it = 1375 (55.0 %)\n", + "it = 1400 (56.0 %)\n", + "it = 1425 (57.0 %)\n", + "it = 1450 (58.0 %)\n", + "it = 1475 (59.0 %)\n", + "it = 1500 (60.0 %)\n", + "it = 1525 (61.0 %)\n", + "it = 1550 (62.0 %)\n", + "it = 1575 (63.0 %)\n", + "it = 1600 (64.0 %)\n", + "it = 1625 (65.0 %)\n", + "it = 1650 (66.0 %)\n", + "it = 1675 (67.0 %)\n", + "it = 1700 (68.0 %)\n", + "it = 1725 (69.0 %)\n", + "it = 1750 (70.0 %)\n", + "it = 1775 (71.0 %)\n", + "it = 1800 (72.0 %)\n", + "it = 1825 (73.0 %)\n", + "it = 1850 (74.0 %)\n", + "it = 1875 (75.0 %)\n", + "it = 1900 (76.0 %)\n", + "it = 1925 (77.0 %)\n", + "it = 1950 (78.0 %)\n", + "it = 1975 (79.0 %)\n", + "it = 2000 (80.0 %)\n", + "it = 2025 (81.0 %)\n", + "it = 2050 (82.0 %)\n", + "it = 2075 (83.0 %)\n", + "it = 2100 (84.0 %)\n", + "it = 2125 (85.0 %)\n", + "it = 2150 (86.0 %)\n", + "it = 2175 (87.0 %)\n", + "it = 2200 (88.0 %)\n", + "it = 2225 (89.0 %)\n", + "it = 2250 (90.0 %)\n", + "it = 2275 (91.0 %)\n", + "it = 2300 (92.0 %)\n", + "it = 2325 (93.0 %)\n", + "it = 2350 (94.0 %)\n", + "it = 2375 (95.0 %)\n", + "it = 2400 (96.0 %)\n", + "it = 2425 (97.0 %)\n", + "it = 2450 (98.0 %)\n", + "it = 2475 (99.0 %)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ], + "source": [ + "import numpy as np\n", + "from pyblock2._pyscf.ao2mo import integrals as itg\n", + "from pyblock2.driver.core import DMRGDriver, SymmetryTypes\n", + "from pyscf import gto, scf, lo\n", + "\n", + "BOHR = 0.52917721092\n", + "R = 1.8 * BOHR\n", + "N = 6\n", + "\n", + "mol = gto.M(atom=[['H', (i * R, 0, 0)] for i in range(N)], basis=\"sto6g\", symmetry=\"c1\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "\n", + "mf.mo_coeff = lo.orth.lowdin(mol.intor('cint1e_ovlp_sph'))\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf, ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2 | SymmetryTypes.CPX, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "bond_dims = [150] * 4 + [200] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + "thrds = [1e-10] * 8\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, integral_cutoff=1E-8, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"KET\", bond_dim=150, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('Ground state energy = %20.15f' % energy)\n", + "\n", + "isite = 2\n", + "mpo.const_e -= energy\n", + "eta = 0.005\n", + "\n", + "dmpo = driver.get_site_mpo(op='D', site_index=isite, iprint=0)\n", + "dket = driver.get_random_mps(tag=\"DKET\", bond_dim=200, center=ket.center, left_vacuum=dmpo.left_vacuum)\n", + "driver.multiply(dket, dmpo, ket, n_sweeps=10, bond_dims=[200], thrds=[1E-10] * 10, iprint=1)\n", + "\n", + "impo = driver.get_identity_mpo()\n", + "dbra = driver.copy_mps(dket, tag='DBRA')\n", + "\n", + "dt = 0.2\n", + "t = 500.0\n", + "nstep = int(t / dt)\n", + "rtgf = np.zeros((nstep, ), dtype=complex)\n", + "rtgf[0] = driver.expectation(dket, impo, dket)\n", + "for it in range(nstep - 1):\n", + " if it % (nstep // 100) == 0:\n", + " print(\"it = %5d (%4.1f %%)\" % (it, it * 100 / nstep))\n", + " dbra = driver.td_dmrg(mpo, dbra, -dt * 1j, -dt * 1j, final_mps_tag='DBRA', hermitian=True, bond_dims=[200], iprint=0)\n", + " rtgf[it + 1] = driver.expectation(dbra, impo, dket)\n", + "\n", + "def gf_fft(eta, dt, rtgf, npts):\n", + " frq = np.fft.fftfreq(npts, dt)\n", + " frq = np.fft.fftshift(frq) * 2.0 * np.pi\n", + " fftinp = -1j * rtgf * np.exp(-eta * dt * np.arange(0, npts))\n", + " return frq, np.fft.fftshift(np.fft.fft(fftinp)) * dt\n", + "\n", + "frq, frq_gf = gf_fft(eta, dt, rtgf, len(rtgf))\n", + "frq_gf = frq_gf[(frq >= -0.8) & (frq < -0.2)]\n", + "frq = frq[(frq >= -0.8) & (frq < -0.2)]\n", + "\n", + "ldos = -1 / np.pi * frq_gf.imag\n", + "\n", + "import matplotlib.pyplot as plt\n", + "plt.grid(which='major', axis='both', alpha=0.5)\n", + "plt.plot(frq, ldos, linestyle='-', marker='o', markersize=4, mfc='white', mec=\"#7FB685\", color=\"#7FB685\")\n", + "plt.xlabel(\"Frequency $\\\\omega$\")\n", + "plt.ylabel(\"LDOS\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "source": [ + "In the ``SZ`` mode:" + ], + "metadata": { + "id": "Y8PJt9kuYT3o" + } + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "from pyblock2._pyscf.ao2mo import integrals as itg\n", + "from pyblock2.driver.core import DMRGDriver, SymmetryTypes\n", + "from pyscf import gto, scf, lo\n", + "\n", + "BOHR = 0.52917721092\n", + "R = 1.8 * BOHR\n", + "N = 6\n", + "\n", + "mol = gto.M(atom=[['H', (i * R, 0, 0)] for i in range(N)], basis=\"sto6g\", symmetry=\"c1\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "\n", + "mf.mo_coeff = lo.orth.lowdin(mol.intor('cint1e_ovlp_sph'))\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf, ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ | SymmetryTypes.CPX, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "bond_dims = [150] * 4 + [200] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + "thrds = [1e-10] * 8\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, integral_cutoff=1E-8, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"KET\", bond_dim=150, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('Ground state energy = %20.15f' % energy)\n", + "\n", + "isite = 2\n", + "mpo.const_e -= energy\n", + "eta = 0.005\n", + "\n", + "dmpo = driver.get_site_mpo(op='d', site_index=isite, iprint=0) # only alpha spin\n", + "dket = driver.get_random_mps(tag=\"DKET\", bond_dim=200, center=ket.center, target=dmpo.op.q_label + ket.info.target)\n", + "driver.multiply(dket, dmpo, ket, n_sweeps=10, bond_dims=[200], thrds=[1E-10] * 10, iprint=1)\n", + "\n", + "impo = driver.get_identity_mpo()\n", + "dbra = driver.copy_mps(dket, tag='DBRA')\n", + "\n", + "dt = 0.2\n", + "t = 500.0\n", + "nstep = int(t / dt)\n", + "rtgf = np.zeros((nstep, ), dtype=complex)\n", + "rtgf[0] = driver.expectation(dket, impo, dket)\n", + "for it in range(nstep - 1):\n", + " if it % (nstep // 100) == 0:\n", + " print(\"it = %5d (%4.1f %%)\" % (it, it * 100 / nstep))\n", + " dbra = driver.td_dmrg(mpo, dbra, -dt * 1j, -dt * 1j, final_mps_tag='DBRA', hermitian=True, bond_dims=[200], iprint=0)\n", + " rtgf[it + 1] = driver.expectation(dbra, impo, dket)\n", + "\n", + "def gf_fft(eta, dt, rtgf, npts):\n", + " frq = np.fft.fftfreq(npts, dt)\n", + " frq = np.fft.fftshift(frq) * 2.0 * np.pi\n", + " fftinp = -1j * rtgf * np.exp(-eta * dt * np.arange(0, npts))\n", + " return frq, np.fft.fftshift(np.fft.fft(fftinp)) * dt\n", + "\n", + "frq, frq_gf = gf_fft(eta, dt, rtgf, len(rtgf))\n", + "frq_gf = frq_gf[(frq >= -0.8) & (frq < -0.2)]\n", + "frq = frq[(frq >= -0.8) & (frq < -0.2)]\n", + "\n", + "ldos = -2 / np.pi * frq_gf.imag\n", + "\n", + "import matplotlib.pyplot as plt\n", + "plt.grid(which='major', axis='both', alpha=0.5)\n", + "plt.plot(frq, ldos, linestyle='-', marker='o', markersize=4, mfc='white', mec=\"#7FB685\", color=\"#7FB685\")\n", + "plt.xlabel(\"Frequency $\\\\omega$\")\n", + "plt.ylabel(\"LDOS\")\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "xD9qDnvtYUyv", + "outputId": "90677109-c9ea-4175-ed8b-1e94a54eb35a" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "integral symmetrize error = 0.0\n", + "integral cutoff error = 0.0\n", + "mpo terms = 2286\n", + "\n", + "Build MPO | Nsites = 6 | Nterms = 2286 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 6 .. Mmpo = 26 DW = 0.00e+00 NNZ = 26 SPT = 0.0000 Tmvc = 0.001 T = 0.016\n", + " Site = 1 / 6 .. Mmpo = 66 DW = 0.00e+00 NNZ = 243 SPT = 0.8584 Tmvc = 0.001 T = 0.016\n", + " Site = 2 / 6 .. Mmpo = 110 DW = 0.00e+00 NNZ = 459 SPT = 0.9368 Tmvc = 0.001 T = 0.014\n", + " Site = 3 / 6 .. Mmpo = 66 DW = 0.00e+00 NNZ = 1147 SPT = 0.8420 Tmvc = 0.001 T = 0.013\n", + " Site = 4 / 6 .. Mmpo = 26 DW = 0.00e+00 NNZ = 243 SPT = 0.8584 Tmvc = 0.000 T = 0.004\n", + " Site = 5 / 6 .. Mmpo = 1 DW = 0.00e+00 NNZ = 26 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", + "Ttotal = 0.066 Tmvc-total = 0.004 MPO bond dimension = 110 MaxDW = 0.00e+00\n", + "NNZ = 2144 SIZE = 18004 SPT = 0.8809\n", + "\n", + "Rank = 0 Ttotal = 0.124 MPO method = FastBipartite bond dimension = 110 NNZ = 2144 SIZE = 18004 SPT = 0.8809\n", + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.230 | E = -3.2667431000 | DW = 7.12e-17\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.413 | E = -3.2667431000 | DE = -1.78e-15 | DW = 6.71e-17\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.563 | E = -3.2667431000 | DE = 3.55e-15 | DW = 6.86e-17\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 150 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.770 | E = -3.2667431000 | DE = 0.00e+00 | DW = 7.22e-17\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.951 | E = -3.2667431000 | DE = -3.55e-15 | DW = 1.68e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.109 | E = -3.2667431000 | DE = 0.00e+00 | DW = 2.60e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.261 | E = -3.2667431000 | DE = 0.00e+00 | DW = 1.87e-20\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 200 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.415 | E = -3.2667431000 | DE = 0.00e+00 | DW = 3.66e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 200 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 1.526 | E = -3.2667431000 | DE = -1.78e-15 | DW = 5.13e-20\n", + "\n", + "Ground state energy = -3.266743099950349\n", + "\n", + "Sweep = 0 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.022 | F = (0.6266622731,0.0000000000) | DW = 7.22e-25\n", + "\n", + "Sweep = 1 | Direction = forward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.051 | F = (0.7050283557,0.0000000000) | DF = (7.84e-02,0.00e+00) | DW = 9.91e-25\n", + "\n", + "Sweep = 2 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.076 | F = (0.7050283557,0.0000000000) | DF = (4.44e-16,0.00e+00) | DW = 7.16e-25\n", + "\n", + "Sweep = 3 | Direction = forward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.112 | F = (0.7050283557,0.0000000000) | DF = (-1.11e-16,0.00e+00) | DW = 1.77e-24\n", + "\n", + "Sweep = 4 | Direction = backward | BRA bond dimension = 200 | Noise = 0.00e+00\n", + "Time elapsed = 0.148 | F = (0.7050283557,0.0000000000) | DF = (-1.11e-16,0.00e+00) | DW = 7.19e-25\n", + "\n", + "it = 0 ( 0.0 %)\n", + "it = 25 ( 1.0 %)\n", + "it = 50 ( 2.0 %)\n", + "it = 75 ( 3.0 %)\n", + "it = 100 ( 4.0 %)\n", + "it = 125 ( 5.0 %)\n", + "it = 150 ( 6.0 %)\n", + "it = 175 ( 7.0 %)\n", + "it = 200 ( 8.0 %)\n", + "it = 225 ( 9.0 %)\n", + "it = 250 (10.0 %)\n", + "it = 275 (11.0 %)\n", + "it = 300 (12.0 %)\n", + "it = 325 (13.0 %)\n", + "it = 350 (14.0 %)\n", + "it = 375 (15.0 %)\n", + "it = 400 (16.0 %)\n", + "it = 425 (17.0 %)\n", + "it = 450 (18.0 %)\n", + "it = 475 (19.0 %)\n", + "it = 500 (20.0 %)\n", + "it = 525 (21.0 %)\n", + "it = 550 (22.0 %)\n", + "it = 575 (23.0 %)\n", + "it = 600 (24.0 %)\n", + "it = 625 (25.0 %)\n", + "it = 650 (26.0 %)\n", + "it = 675 (27.0 %)\n", + "it = 700 (28.0 %)\n", + "it = 725 (29.0 %)\n", + "it = 750 (30.0 %)\n", + "it = 775 (31.0 %)\n", + "it = 800 (32.0 %)\n", + "it = 825 (33.0 %)\n", + "it = 850 (34.0 %)\n", + "it = 875 (35.0 %)\n", + "it = 900 (36.0 %)\n", + "it = 925 (37.0 %)\n", + "it = 950 (38.0 %)\n", + "it = 975 (39.0 %)\n", + "it = 1000 (40.0 %)\n", + "it = 1025 (41.0 %)\n", + "it = 1050 (42.0 %)\n", + "it = 1075 (43.0 %)\n", + "it = 1100 (44.0 %)\n", + "it = 1125 (45.0 %)\n", + "it = 1150 (46.0 %)\n", + "it = 1175 (47.0 %)\n", + "it = 1200 (48.0 %)\n", + "it = 1225 (49.0 %)\n", + "it = 1250 (50.0 %)\n", + "it = 1275 (51.0 %)\n", + "it = 1300 (52.0 %)\n", + "it = 1325 (53.0 %)\n", + "it = 1350 (54.0 %)\n", + "it = 1375 (55.0 %)\n", + "it = 1400 (56.0 %)\n", + "it = 1425 (57.0 %)\n", + "it = 1450 (58.0 %)\n", + "it = 1475 (59.0 %)\n", + "it = 1500 (60.0 %)\n", + "it = 1525 (61.0 %)\n", + "it = 1550 (62.0 %)\n", + "it = 1575 (63.0 %)\n", + "it = 1600 (64.0 %)\n", + "it = 1625 (65.0 %)\n", + "it = 1650 (66.0 %)\n", + "it = 1675 (67.0 %)\n", + "it = 1700 (68.0 %)\n", + "it = 1725 (69.0 %)\n", + "it = 1750 (70.0 %)\n", + "it = 1775 (71.0 %)\n", + "it = 1800 (72.0 %)\n", + "it = 1825 (73.0 %)\n", + "it = 1850 (74.0 %)\n", + "it = 1875 (75.0 %)\n", + "it = 1900 (76.0 %)\n", + "it = 1925 (77.0 %)\n", + "it = 1950 (78.0 %)\n", + "it = 1975 (79.0 %)\n", + "it = 2000 (80.0 %)\n", + "it = 2025 (81.0 %)\n", + "it = 2050 (82.0 %)\n", + "it = 2075 (83.0 %)\n", + "it = 2100 (84.0 %)\n", + "it = 2125 (85.0 %)\n", + "it = 2150 (86.0 %)\n", + "it = 2175 (87.0 %)\n", + "it = 2200 (88.0 %)\n", + "it = 2225 (89.0 %)\n", + "it = 2250 (90.0 %)\n", + "it = 2275 (91.0 %)\n", + "it = 2300 (92.0 %)\n", + "it = 2325 (93.0 %)\n", + "it = 2350 (94.0 %)\n", + "it = 2375 (95.0 %)\n", + "it = 2400 (96.0 %)\n", + "it = 2425 (97.0 %)\n", + "it = 2450 (98.0 %)\n", + "it = 2475 (99.0 %)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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96C9vX34jZFpgEsuuUSePn26vHXrVnnTpk1yZWWlfN111w16zoUXXijPmjVL3rZtm2yz2eTHH39cNhgM8q5du2LU6vgJt788Ho984sSJPv8effRROTMzU+7o6Ihhy+Mjkutry5YtcnZ2trxixQp579698v79++XXX39d7unpiVGr4yuSPps/f758++2397nO2tvbY9Ti+IqkvxTPPPOMvHjxYhmA/Oabb0a3oToSSZ+98MIL8oYNG+Ta2lp5586d8pIlS+SysjLZ4/HEqNXxE25/ffHFF/IVV1whv/POO7LVapU/+ugjuaqqSr7yyiuH3RYGMv3s27dPBiBv375dve2f//ynLAiCXFdXF/S8jIwMedWqVX1uy8vLk1988cWotVUPIu2v/s444wz51ltvjUYTdSXS/po9e7b84IMPxqKJuhNpn82fP1/+/ve/H4MW6stw3pO7d++Wx4wZI584cSKpAhmtPsc+++wzGYBstVqj0Uzd0Kq/1qxZI5vNZtntdg+rPZxa6ufTTz9Fbm4uZs6cqd62aNEiGAwGbNu2Leh5c+bMweuvv46WlhZIkoTXXnsNPT09WLBgQQxaHT+R9pe/nTt3Ys+ePbjtttui1UzdiKS/GhoasG3bNhQVFWHOnDkYPXo05s+fj08++SRWzY6r4Vxj//d//4eCggKceuqpWL58Obq6uqLd3LiLtL+6urrwrW99C88++yyKi4tj0VTd0OJzrLOzE3/84x9RXl6OsrKyaDVVF7ToLwBob29HdnY2TKbhbfvIQKaf+vp6FBUV9bnNZDIhLy8P9fX1Qc9bs2YN3G438vPzYbFYcMcdd+DNN99EZWVltJscV5H2l78//OEPmDJlCubMmRONJupKJP1VU1MDAHjkkUdw++2347333sOZZ56JCy64ANXV1VFvc7xFeo1961vfwp///GesX78ey5cvxyuvvIIbbrgh2s2Nu0j76wc/+AHmzJmDyy67LNpN1J3hfI797ne/Q2ZmJjIzM/HPf/4TH374IcxmczSbG3dafO43NTXh8ccfx3e+851htydpApkHHnggaIKp8m84SVoPPfQQ2tra8K9//Qs7duzAsmXLcPXVV+OLL77Q8FXETrT7S9Hd3Y1XX3014UdjotlfkiQB8CYW3nLLLZgxYwZ+/etfY9KkSXjppZe0fBkxFe1r7Dvf+Q4uvvhinHba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\n" + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/docs/source/tutorial/heisenberg.ipynb b/docs/source/tutorial/heisenberg.ipynb index fffd45e3..072df6ff 100644 --- a/docs/source/tutorial/heisenberg.ipynb +++ b/docs/source/tutorial/heisenberg.ipynb @@ -1,16 +1,29 @@ { + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, "cells": [ { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "1L3j_iDngtG_" - }, "source": [ "# Heisenberg Model\n", "\n", "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/block-hczhai/block2-preview/blob/master/docs/source/tutorial/heisenberg.ipynb)" - ] + ], + "metadata": { + "id": "1L3j_iDngtG_" + } }, { "cell_type": "code", @@ -20,15 +33,11 @@ }, "outputs": [], "source": [ - "!pip install block2==0.5.1 -qq --progress-bar off" + "!pip install block2==0.5.2rc13 -qq --progress-bar off --extra-index-url=https://block-hczhai.github.io/block2-preview/pypi/" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "kCcbGRlYg0eS" - }, "source": [ "## Introduction\n", "\n", @@ -37,14 +46,13 @@ "First, we have to define the \"site-spin\" of the model. The parameter ``heis_twos`` represents two times the spin in each site. Namely, for $S = 1/2$ Heisenberg model, ``heis_twos = 1``, for $S = 1$ Heisenberg model, ``heis_twos = 2``, etc. Note that arbitrary non-negative half-integer and integer $S$ can be supported in ``block2``.\n", "\n", "Second, we can solve the model using the SU2 symmetry (``SU2`` mode) or U1 symmetry (``SGB`` mode). The SU2 symmetry can be more efficient (for large ``S``) and can generate states with well-defined total spin symmetry, but requires some additional rearrangement of the Hamiltonian terms." - ] + ], + "metadata": { + "id": "kCcbGRlYg0eS" + } }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "eeJ-l24EiRPE" - }, "source": [ "## The ``SGB`` Mode\n", "\n", @@ -55,48 +63,13 @@ "$$\n", "\n", "We can solve this model using the following code:" - ] + ], + "metadata": { + "id": "eeJ-l24EiRPE" + } }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Pu9I8YCwgwvz", - "outputId": "51d295e1-8cbb-49d9-b8ae-c8bc44b854b8" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", - "Time elapsed = 20.955 | E = -43.9659949576 | DW = 4.08e-10\n", - "\n", - "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", - "Time elapsed = 27.779 | E = -44.1247730561 | DE = -1.59e-01 | DW = 4.39e-13\n", - "\n", - "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", - "Time elapsed = 32.813 | E = -44.1277373578 | DE = -2.96e-03 | DW = 4.40e-13\n", - "\n", - "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", - "Time elapsed = 36.135 | E = -44.1277373579 | DE = -4.16e-12 | DW = 8.90e-14\n", - "\n", - "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-06 | Dav threshold = 1.00e-08\n", - "Time elapsed = 48.790 | E = -44.1277398916 | DE = -2.53e-06 | DW = 3.06e-17\n", - "\n", - "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-06 | Dav threshold = 1.00e-08\n", - "Time elapsed = 62.993 | E = -44.1277398916 | DE = -7.18e-13 | DW = 3.64e-17\n", - "\n", - "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - "Time elapsed = 75.033 | E = -44.1277398916 | DE = 0.00e+00 | DW = 1.10e-20\n", - "\n", - "DMRG energy = -44.127739891617388\n" - ] - } - ], "source": [ "import numpy as np\n", "from pyblock2.driver.core import DMRGDriver, SymmetryTypes\n", @@ -132,14 +105,49 @@ "\n", "energies = run_dmrg(driver, heis_mpo)\n", "print('DMRG energy = %20.15f' % energies)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Pu9I8YCwgwvz", + "outputId": "54bdc8df-48bb-4758-cf4b-be18087b0fc8" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", + "Time elapsed = 32.844 | E = -44.1201487994 | DW = 1.12e-09\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", + "Time elapsed = 38.582 | E = -44.1277383773 | DE = -7.59e-03 | DW = 1.21e-13\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", + "Time elapsed = 41.882 | E = -44.1277383773 | DE = -4.01e-12 | DW = 7.28e-14\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", + "Time elapsed = 44.918 | E = -44.1277383773 | DE = -1.34e-12 | DW = 2.79e-14\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-06 | Dav threshold = 1.00e-08\n", + "Time elapsed = 60.141 | E = -44.1277398826 | DE = -1.51e-06 | DW = 4.18e-17\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-06 | Dav threshold = 1.00e-08\n", + "Time elapsed = 79.821 | E = -44.1277398826 | DE = -1.92e-13 | DW = 3.84e-17\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", + "Time elapsed = 94.075 | E = -44.1277398826 | DE = -1.35e-13 | DW = 1.61e-20\n", + "\n", + "DMRG energy = -44.127739882610513\n" + ] + } ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "OqDTHLmNlbsG" - }, "source": [ "## The ``SU2`` Mode\n", "\n", @@ -159,32 +167,41 @@ "=-\\frac{2}{\\sqrt{3}}\n", "\\begin{pmatrix} \\frac{1}{2} S^+_p S^-_q + \\frac{1}{2} S^-_p S^+_q + S^z_p S^z_q \\end{pmatrix}^{[0]}\n", "$$" - ] + ], + "metadata": { + "id": "OqDTHLmNlbsG" + } }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "nlNrFNUvon5h" - }, "source": [ "Note that in the above calculation, we have used the following CG factors:" - ] + ], + "metadata": { + "id": "nlNrFNUvon5h" + } }, { "cell_type": "code", - "execution_count": 2, + "source": [ + "from block2 import SU2CG\n", + "print(' = ', SU2CG().cg(2, 2, 0, 2, -2, 0))\n", + "print(' = ', SU2CG().cg(2, 2, 0, -2, 2, 0))\n", + "print(' = ', SU2CG().cg(2, 2, 0, 0, 0, 0))\n", + "print(1 / 3 ** 0.5)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "wSNAL3Tyj-xX", - "outputId": "8c2e446a-8872-4f6f-871f-cb3d37e6b977" + "outputId": "848b6ac6-eb70-4b00-c3c1-33696b048ec3" }, + "execution_count": 3, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ " = 0.5773502691896257\n", " = 0.5773502691896257\n", @@ -192,21 +209,10 @@ "0.5773502691896258\n" ] } - ], - "source": [ - "from block2 import SU2CG\n", - "print(' = ', SU2CG().cg(2, 2, 0, 2, -2, 0))\n", - "print(' = ', SU2CG().cg(2, 2, 0, -2, 2, 0))\n", - "print(' = ', SU2CG().cg(2, 2, 0, 0, 0, 0))\n", - "print(1 / 3 ** 0.5)" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "GsBGJzT7oyTA" - }, "source": [ "So the Hamiltonian in ``SU2`` notation is\n", "\n", @@ -215,96 +221,70 @@ "$$\n", "\n", "We can solve this model using the following code:" - ] + ], + "metadata": { + "id": "GsBGJzT7oyTA" + } }, { "cell_type": "code", - "execution_count": 3, + "source": [ + "import numpy as np\n", + "from pyblock2.driver.core import DMRGDriver, SymmetryTypes\n", + "\n", + "L = 100\n", + "heis_twos = 1\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", + "driver.initialize_system(n_sites=L, heis_twos=heis_twos, spin=0)\n", + "\n", + "b = driver.expr_builder()\n", + "for i in range(L - 1):\n", + " b.add_term(\"(T+T)0\", [i, i + 1], -np.sqrt(3) / 2)\n", + "heis_mpo = driver.get_mpo(b.finalize(adjust_order=False), iprint=0)\n", + "\n", + "energies = run_dmrg(driver, heis_mpo)\n", + "print('DMRG energy = %20.15f' % energies)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_RjfaHzIoDmA", - "outputId": "d48b6afb-3112-4488-bb41-2de918f04c17" + "outputId": "371be8d4-392b-47f9-90a3-3592dbe40849" }, + "execution_count": 5, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ + "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", - "Time elapsed = 49.375 | E = -44.1251114602 | DW = 7.77e-12\n", + "Time elapsed = 48.587 | E = -44.1275743858 | DW = 7.23e-12\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", - "Time elapsed = 55.857 | E = -44.1277396028 | DE = -2.63e-03 | DW = 1.11e-14\n", + "Time elapsed = 53.973 | E = -44.1277393752 | DE = -1.65e-04 | DW = 6.90e-14\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", - "Time elapsed = 60.109 | E = -44.1277396028 | DE = 7.11e-15 | DW = 8.25e-16\n", + "Time elapsed = 59.107 | E = -44.1277393752 | DE = -3.84e-13 | DW = 3.59e-16\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-05 | Dav threshold = 1.00e-06\n", - "Time elapsed = 64.354 | E = -44.1277396028 | DE = -1.21e-13 | DW = 5.93e-16\n", + "Time elapsed = 63.144 | E = -44.1277393752 | DE = -1.28e-13 | DW = 8.81e-17\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-06 | Dav threshold = 1.00e-08\n", - "Time elapsed = 75.095 | E = -44.1277398862 | DE = -2.83e-07 | DW = 1.41e-19\n", + "Time elapsed = 75.269 | E = -44.1277398850 | DE = -5.10e-07 | DW = 3.06e-22\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-06 | Dav threshold = 1.00e-08\n", - "Time elapsed = 89.951 | E = -44.1277398862 | DE = -1.71e-13 | DW = 4.88e-20\n", + "Time elapsed = 94.287 | E = -44.1277398850 | DE = -1.99e-13 | DW = 6.38e-23\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-08\n", - "Time elapsed = 98.810 | E = -44.1277398862 | DE = -6.39e-14 | DW = 2.12e-23\n", + "Time elapsed = 103.865 | E = -44.1277398850 | DE = 0.00e+00 | DW = 1.42e-23\n", "\n", - "DMRG energy = -44.127739886233790\n" + "DMRG energy = -44.127739885005937\n" ] } - ], - "source": [ - "import numpy as np\n", - "from pyblock2.driver.core import DMRGDriver, SymmetryTypes\n", - "\n", - "L = 100\n", - "heis_twos = 1\n", - "\n", - "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", - "driver.initialize_system(n_sites=L, heis_twos=heis_twos, spin=0)\n", - "\n", - "b = driver.expr_builder()\n", - "for i in range(L - 1):\n", - " b.add_term(\"(T+T)0\", [i, i + 1], -np.sqrt(3) / 2)\n", - "heis_mpo = driver.get_mpo(b.finalize(), iprint=0)\n", - "\n", - "energies = run_dmrg(driver, heis_mpo)\n", - "print('DMRG energy = %20.15f' % energies)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "xa6zGA3JpryN" - }, - "outputs": [], - "source": [] } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "base", - "language": "python", - "name": "python3" - }, - "language_info": { - "name": "python", - "version": "3.7.4 (default, Aug 13 2019, 20:35:49) \n[GCC 7.3.0]" - }, - "vscode": { - "interpreter": { - "hash": "27e05368924b5fa5d1b4676765ee251cffbbae96bfd5fe75f3294f22031a42f3" - } - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} + ] +} \ No newline at end of file diff --git a/docs/source/tutorial/hubbard.ipynb b/docs/source/tutorial/hubbard.ipynb index d18fefe4..def3df3f 100644 --- a/docs/source/tutorial/hubbard.ipynb +++ b/docs/source/tutorial/hubbard.ipynb @@ -1,16 +1,29 @@ { + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, "cells": [ { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "ki7Tat4qfyPx" - }, "source": [ "# Hubbard Model\n", "\n", "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/block-hczhai/block2-preview/blob/master/docs/source/tutorial/hubbard.ipynb)" - ] + ], + "metadata": { + "id": "ki7Tat4qfyPx" + } }, { "cell_type": "code", @@ -20,15 +33,11 @@ }, "outputs": [], "source": [ - "!pip install block2==0.5.1 -qq --progress-bar off" + "!pip install block2==0.5.2rc13 -qq --progress-bar off --extra-index-url=https://block-hczhai.github.io/block2-preview/pypi/" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "HjJOLXzGXGOc" - }, "source": [ "## Introduction\n", "\n", @@ -44,37 +53,39 @@ "\n", "4. If we label states using only $N$, we can also transform the Fermionic Hamiltonian to qubit Hamiltonian using JW transformation and then do DMRG on qubits without considering the fermion statistics. This symmetry mode is activated using ``symm_type=SymmetryTypes.SGB`` (general spin bosonic). This mode has the worst efficiency (most of the time the efficiency of ``SGF`` and ``SGB`` should be the same), but it may show a clearer connection to other JW-based methods.\n", "\n", - "Next, we will explain the settings of the Hubbard Hamiltonian in each of the modes (1) (2) (3) and (4)." - ] + "5. For 2D Hubbard model with only nearest-neighbor interactions, the particle number is also a pseudo-spin (particle-hole) $\\mathrm{SU(2)}$ symmetry. If we label states using $(N, S_z)$, the symmetry group is $\\mathrm{SU(2)\\times U(1)}$. This symmetry mode is activated using ``symm_type=SymmetryTypes.SAnyPHSU2``.\n", + "\n", + "6. For 2D Hubbard model with only nearest-neighbor interactions, we can use the spin and pseudo-psin symmetries simultaneously. If we label states using $(N, S)$, the symmetry group is $\\mathrm{SU(2)\\times SU(2)~/~Z_2} = \\mathrm{SO(4)}$. This symmetry mode is activated using ``symm_type=SymmetryTypes.SAnySO4``.\n", + "\n", + "Next, we will explain the settings of the Hubbard Hamiltonian in each of the modes (1) (2) (3) (4) (5) and (6)." + ], + "metadata": { + "id": "HjJOLXzGXGOc" + } }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "id": "-v78LLKHvBiG" - }, - "outputs": [], "source": [ "import numpy as np\n", "from pyblock2.driver.core import DMRGDriver, SymmetryTypes" - ] + ], + "metadata": { + "id": "-v78LLKHvBiG" + }, + "execution_count": 2, + "outputs": [] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "3_rdRS9L3QCG" - }, "source": [ "## The ``SZ`` Mode" - ] + ], + "metadata": { + "id": "3_rdRS9L3QCG" + } }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "VUYR8aGgu7Qy" - }, "source": [ "### Initialization\n", "\n", @@ -85,15 +96,13 @@ "- ``n_sites`` is the number of sites $L$ (or length of the lattice). Here each site has four local states: $|0\\rangle, |\\alpha\\rangle, |\\beta\\rangle$, and $|\\alpha\\beta\\rangle$.\n", "- ``n_elec`` is the number of electrons $N$ in the target wavefunction. For half-filling Hubbard model, we should have ``n_elec == n_sites``.\n", "- ``spin`` is two times the total spin $2S$ (in ``SU2`` mode) or two times the projected spin $2S_z$ (in ``SZ`` mode) quantum number of the target wavefunction. Since we want the final wavefunction to have a equal number of alpha and beta electrons (namely, 4 alpha and 4 beta electrons for $N=8$), this number is set to zero here. Note that $2S_z = N_{\\alpha} - N_{\\beta}$." - ] + ], + "metadata": { + "id": "VUYR8aGgu7Qy" + } }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "id": "ca3hzzjHxr2M" - }, - "outputs": [], "source": [ "L = 8\n", "N = 8\n", @@ -101,14 +110,15 @@ "\n", "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ, n_threads=4)\n", "driver.initialize_system(n_sites=L, n_elec=N, spin=TWOSZ)" - ] + ], + "metadata": { + "id": "ca3hzzjHxr2M" + }, + "execution_count": 3, + "outputs": [] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "x60jrJR_xw3B" - }, "source": [ "### Build Hamiltonian\n", "\n", @@ -143,78 +153,70 @@ "```\n", "\n", "``b.finalize`` will do some necessary operator reordering and simplification and ``driver.get_mpo`` will create an optimal MPO for the given Hamiltonian. So we can set the MPO for the above Hubbard Hamiltonian using the following:" - ] + ], + "metadata": { + "id": "x60jrJR_xw3B" + } }, { "cell_type": "code", - "execution_count": 5, + "source": [ + "t = 1\n", + "U = 2\n", + "\n", + "b = driver.expr_builder()\n", + "\n", + "# hopping term\n", + "b.add_term(\"cd\", np.array([[[i, i + 1], [i + 1, i]] for i in range(L - 1)]).flatten(), -t)\n", + "b.add_term(\"CD\", np.array([[[i, i + 1], [i + 1, i]] for i in range(L - 1)]).flatten(), -t)\n", + "\n", + "# onsite term\n", + "b.add_term(\"cdCD\", np.array([[i, ] * 4 for i in range(L)]).flatten(), U)\n", + "\n", + "mpo = driver.get_mpo(b.finalize(), iprint=2)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4fXOSM5l193w", - "outputId": "cd1bfa9d-7d80-480d-f16c-e8d14be75277" + "outputId": "883c495f-0c54-4792-9814-0603c2f57f4c" }, + "execution_count": 4, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "\n", "Build MPO | Nsites = 8 | Nterms = 36 | Algorithm = FastBIP | Cutoff = 1.00e-14\n", - " Site = 0 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 6 SPT = 0.0000 Tmvc = 0.000 T = 0.009\n", - " Site = 1 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 11 SPT = 0.6944 Tmvc = 0.000 T = 0.004\n", - " Site = 2 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 11 SPT = 0.6944 Tmvc = 0.000 T = 0.003\n", - " Site = 3 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 11 SPT = 0.6944 Tmvc = 0.000 T = 0.003\n", - " Site = 4 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 11 SPT = 0.6944 Tmvc = 0.000 T = 0.003\n", + " Site = 0 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 6 SPT = 0.0000 Tmvc = 0.000 T = 0.004\n", + " Site = 1 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 11 SPT = 0.6944 Tmvc = 0.000 T = 0.002\n", + " Site = 2 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 11 SPT = 0.6944 Tmvc = 0.000 T = 0.002\n", + " Site = 3 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 11 SPT = 0.6944 Tmvc = 0.000 T = 0.002\n", + " Site = 4 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 11 SPT = 0.6944 Tmvc = 0.000 T = 0.002\n", " Site = 5 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 11 SPT = 0.6944 Tmvc = 0.000 T = 0.002\n", " Site = 6 / 8 .. Mmpo = 6 DW = 0.00e+00 NNZ = 11 SPT = 0.6944 Tmvc = 0.000 T = 0.002\n", - " Site = 7 / 8 .. Mmpo = 1 DW = 0.00e+00 NNZ = 6 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", - "Ttotal = 0.029 Tmvc-total = 0.000 MPO bond dimension = 6 MaxDW = 0.00e+00\n", + " Site = 7 / 8 .. Mmpo = 1 DW = 0.00e+00 NNZ = 6 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", + "Ttotal = 0.019 Tmvc-total = 0.000 MPO bond dimension = 6 MaxDW = 0.00e+00\n", "NNZ = 78 SIZE = 228 SPT = 0.6579\n", "\n", - "Rank = 0 Ttotal = 0.073 MPO method = FastBipartite bond dimension = 6 NNZ = 78 SIZE = 228 SPT = 0.6579\n" + "Rank = 0 Ttotal = 0.047 MPO method = FastBipartite bond dimension = 6 NNZ = 78 SIZE = 228 SPT = 0.6579\n" ] } - ], - "source": [ - "t = 1\n", - "U = 2\n", - "\n", - "b = driver.expr_builder()\n", - "\n", - "# hopping term\n", - "b.add_term(\"cd\",\n", - " np.array([[[i, i + 1], [i + 1, i]] for i in range(L - 1)]).ravel(),\n", - " [-t] * 2 * (L - 1))\n", - "b.add_term(\"CD\",\n", - " np.array([[[i, i + 1], [i + 1, i]] for i in range(L - 1)]).ravel(),\n", - " [-t] * 2 * (L - 1))\n", - "\n", - "# onsite term\n", - "b.add_term(\"cdCD\",\n", - " np.array([[i, ] * 4 for i in range(L)]).ravel(),\n", - " [U] * L)\n", - "\n", - "mpo = driver.get_mpo(b.finalize(), iprint=2)" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "AJ1GBac-aPol" - }, "source": [ "Note that the above method should allow the user to define arbitrary second-quantized fermionic (particle-number conserving) Hamiltonians (with possibly long-range and high-order terms)." - ] + ], + "metadata": { + "id": "AJ1GBac-aPol" + } }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "s4dZ6xZ03iCv" - }, "source": [ "### Run DMRG\n", "\n", @@ -242,130 +244,118 @@ "- ``thrds`` is a list of real numbers indicating the Davidson algorithm convergence threshold for each sweep.\n", "- ``cutoff`` is a real number. Singular values below this number will be discarded during the optimization. Setting this to zero will not discard any small singular value in the MPS unless the MPS bond dimension becomes higher than the set value.\n", "- ``iprint`` can be 0 (quiet), 1 (print energy after each sweep), or 2 (print energy after each iteration in each sweep)." - ] + ], + "metadata": { + "id": "s4dZ6xZ03iCv" + } }, { "cell_type": "code", - "execution_count": 6, + "source": [ + "def run_dmrg(driver, mpo):\n", + " ket = driver.get_random_mps(tag=\"KET\", bond_dim=250, nroots=1)\n", + " bond_dims = [250] * 4 + [500] * 4\n", + " noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + " thrds = [1e-10] * 8\n", + " return driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, cutoff=0, iprint=1)\n", + "\n", + "energies = run_dmrg(driver, mpo)\n", + "print('DMRG energy = %20.15f' % energies)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "bjBJUrPy8p9m", - "outputId": "28299f32-6577-461e-9cf8-5cee51c18623" + "outputId": "0f967700-73f6-4d66-d438-b07cba1399e7" }, + "execution_count": 5, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.199 | E = -6.2256341447 | DW = 1.70e-16\n", + "Time elapsed = 0.288 | E = -6.2256341447 | DW = 5.89e-16\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.274 | E = -6.2256341447 | DE = 2.31e-14 | DW = 3.87e-16\n", + "Time elapsed = 0.403 | E = -6.2256341447 | DE = 2.22e-14 | DW = 7.51e-16\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.361 | E = -6.2256341447 | DE = -5.33e-15 | DW = 7.28e-17\n", + "Time elapsed = 0.519 | E = -6.2256341447 | DE = -7.99e-15 | DW = 1.19e-16\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.439 | E = -6.2256341447 | DE = -8.88e-16 | DW = 1.18e-16\n", + "Time elapsed = 0.636 | E = -6.2256341447 | DE = 8.88e-16 | DW = 1.18e-16\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.587 | E = -6.2256341447 | DE = -5.33e-15 | DW = 6.93e-29\n", + "Time elapsed = 0.868 | E = -6.2256341447 | DE = 5.33e-15 | DW = 9.04e-29\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.743 | E = -6.2256341447 | DE = -8.88e-16 | DW = 9.10e-29\n", + "Time elapsed = 1.130 | E = -6.2256341447 | DE = -1.78e-15 | DW = 1.10e-28\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.903 | E = -6.2256341447 | DE = 1.78e-15 | DW = 1.10e-28\n", + "Time elapsed = 1.382 | E = -6.2256341447 | DE = -8.88e-16 | DW = 1.27e-28\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.051 | E = -6.2256341447 | DE = -1.78e-15 | DW = 6.46e-29\n", + "Time elapsed = 1.619 | E = -6.2256341447 | DE = 8.88e-16 | DW = 1.32e-28\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - "Time elapsed = 1.188 | E = -6.2256341447 | DE = 3.55e-15 | DW = 3.44e-51\n", + "Time elapsed = 1.844 | E = -6.2256341447 | DE = 2.66e-15 | DW = 2.76e-51\n", "\n", - "DMRG energy = -6.225634144671325\n" + "DMRG energy = -6.225634144662398\n" ] } - ], - "source": [ - "def run_dmrg(driver, mpo):\n", - " ket = driver.get_random_mps(tag=\"KET\", bond_dim=250, nroots=1)\n", - " bond_dims = [250] * 4 + [500] * 4\n", - " noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", - " thrds = [1e-10] * 8\n", - " return driver.dmrg(\n", - " mpo,\n", - " ket,\n", - " n_sweeps=20,\n", - " bond_dims=bond_dims,\n", - " noises=noises,\n", - " thrds=thrds,\n", - " cutoff=0,\n", - " iprint=1,\n", - " )\n", - "\n", - "energies = run_dmrg(driver, mpo)\n", - "print('DMRG energy = %20.15f' % energies)" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "8uKQQeJlZtti" - }, "source": [ "Note that in the outputs, ``DE`` represents the energy difference between two sweeps. ``DW`` is the maximal discarded weight (sum of discarded eigenvalues of the density matrix) during the current sweep.\n", "\n", "The remaining part of this docuementation introduces some other alternative symmetry to solve the same problem." - ] + ], + "metadata": { + "id": "8uKQQeJlZtti" + } }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "DWoHm_ih9gis" - }, "source": [ "## The ``SU2`` Mode" - ] + ], + "metadata": { + "id": "DWoHm_ih9gis" + } }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "3KGJFlwq9r4w" - }, "source": [ "### Initialization\n", "\n", "In this section, we try to solve the same problem using the SU(2) symmetry, which has a lower computational cost. Now ``spin`` represents the total spin (instead of the projected spin)." - ] + ], + "metadata": { + "id": "3KGJFlwq9r4w" + } }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "id": "0rKSaqeU-CFv" - }, - "outputs": [], "source": [ "TWOS = 0\n", "\n", "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", "driver.initialize_system(n_sites=L, n_elec=N, spin=TWOS)" - ] + ], + "metadata": { + "id": "0rKSaqeU-CFv" + }, + "execution_count": 6, + "outputs": [] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "5DReJJK2-K9B" - }, "source": [ "### Build Hamiltonian\n", "\n", @@ -407,7 +397,7 @@ "\n", "$$\n", "\\hat{H}^{[0]} = -\\sqrt{2} \\ t\\sum_{\\langle i j \\rangle} \\big(a_i^\\dagger\\big)^{[1/2]} \\otimes_{[0]} \\big(a_j\\big)^{[1/2]}\n", - "+ U \\sum_i \n", + "+ U \\sum_i\n", "\\bigg( \\big(a_i^\\dagger\\big)^{[1/2]} \\otimes_{[1/2]}\n", "\\Big( \\big(a_i^\\dagger\\big)^{[1/2]} \\otimes_{[0]} \\big(a_i\\big)^{[1/2]} \\Big)\n", "\\bigg) \\otimes_{[0]} \\big(a_i\\big)^{[1/2]}\n", @@ -416,161 +406,154 @@ "Next, we have to introduce a string notation to represent the above formula. We can use ``C`` and ``D`` for $a^\\dagger$ and $a$, repsectively. Then we use ``+`` to connect operators (namely, ``+`` represents the tensor product). We use ``()`` to indicate the coupling (associative) order. We add a number (2 times the total spin) after each ``)`` to indicate the resulting spin number of the tensor product. So, for example, ``(C+D)0`` represents the singlet product between $a^\\dagger$ and $a$, and ``(C+D)2`` represents the triplet product.\n", "\n", "As a result, we can set the MPO for the above SU(2) Hubbard Hamiltonian using the following:" - ] + ], + "metadata": { + "id": "5DReJJK2-K9B" + } }, { "cell_type": "code", - "execution_count": 8, + "source": [ + "t = 1\n", + "U = 2\n", + "\n", + "b = driver.expr_builder()\n", + "\n", + "# hopping term\n", + "b.add_term(\"(C+D)0\", np.array([[[i, i + 1], [i + 1, i]] for i in range(L - 1)]).flatten(),\n", + " np.sqrt(2) * -t)\n", + "\n", + "# onsite term\n", + "b.add_term(\"((C+(C+D)0)1+D)0\", np.array([[i, ] * 4 for i in range(L)]).flatten(), U)\n", + "\n", + "mpo = driver.get_mpo(b.finalize(), iprint=2)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sKlutOJYGy_q", - "outputId": "81658c93-a6e2-496e-9f60-340fd7ae98be" + "outputId": "37cf5587-b71b-4140-df16-9ff9465856af" }, + "execution_count": 7, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "\n", "Build MPO | Nsites = 8 | Nterms = 30 | Algorithm = FastBIP | Cutoff = 1.00e-14\n", - " Site = 0 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.004\n", - " Site = 1 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.003\n", - " Site = 2 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.004\n", - " Site = 3 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.003\n", - " Site = 4 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.003\n", - " Site = 5 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.003\n", - " Site = 6 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.003\n", - " Site = 7 / 8 .. Mmpo = 1 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", - "Ttotal = 0.024 Tmvc-total = 0.000 MPO bond dimension = 4 MaxDW = 0.00e+00\n", + " Site = 0 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", + " Site = 1 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.002\n", + " Site = 2 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.003\n", + " Site = 3 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.001 T = 0.004\n", + " Site = 4 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.002\n", + " Site = 5 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.002\n", + " Site = 6 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.002\n", + " Site = 7 / 8 .. Mmpo = 1 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", + "Ttotal = 0.020 Tmvc-total = 0.001 MPO bond dimension = 4 MaxDW = 0.00e+00\n", "NNZ = 50 SIZE = 104 SPT = 0.5192\n", "\n", - "Rank = 0 Ttotal = 0.055 MPO method = FastBipartite bond dimension = 4 NNZ = 50 SIZE = 104 SPT = 0.5192\n" + "Rank = 0 Ttotal = 0.045 MPO method = FastBipartite bond dimension = 4 NNZ = 50 SIZE = 104 SPT = 0.5192\n" ] } - ], - "source": [ - "t = 1\n", - "U = 2\n", - "\n", - "b = driver.expr_builder()\n", - "\n", - "# hopping term\n", - "b.add_term(\"(C+D)0\",\n", - " np.array([[[i, i + 1], [i + 1, i]] for i in range(L - 1)]).ravel(),\n", - " [np.sqrt(2) * -t] * 2 * (L - 1))\n", - "\n", - "# onsite term\n", - "b.add_term(\"((C+(C+D)0)1+D)0\",\n", - " np.array([[i, ] * 4 for i in range(L)]).ravel(),\n", - " [U] * L)\n", - "\n", - "mpo = driver.get_mpo(b.finalize(), iprint=2)" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "71Ty0u59HT7_" - }, "source": [ "### Run DMRG\n", "\n", "Finally, we can run DMRG as normal:" - ] + ], + "metadata": { + "id": "71Ty0u59HT7_" + } }, { "cell_type": "code", - "execution_count": 9, + "source": [ + "energies = run_dmrg(driver, mpo)\n", + "print('DMRG energy = %20.15f' % energies)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Oqzk4hY4HPhS", - "outputId": "6adf6691-94f7-49cb-a842-3eac7fe40f2f" + "outputId": "dbf7cf5b-0b67-4519-c42e-4da9693ed2d8" }, + "execution_count": 8, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.125 | E = -6.2256341447 | DW = 3.52e-31\n", + "Time elapsed = 0.122 | E = -6.2256341447 | DW = 1.62e-31\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.189 | E = -6.2256341447 | DE = -1.78e-15 | DW = 8.69e-33\n", + "Time elapsed = 0.193 | E = -6.2256341447 | DE = -1.78e-15 | DW = 1.34e-31\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.255 | E = -6.2256341447 | DE = 0.00e+00 | DW = 1.45e-31\n", + "Time elapsed = 0.259 | E = -6.2256341447 | DE = 8.88e-16 | DW = 2.12e-32\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.322 | E = -6.2256341447 | DE = 5.33e-15 | DW = 4.43e-31\n", + "Time elapsed = 0.325 | E = -6.2256341447 | DE = 1.78e-15 | DW = 2.46e-31\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.397 | E = -6.2256341447 | DE = -5.33e-15 | DW = 0.00e+00\n", + "Time elapsed = 0.396 | E = -6.2256341447 | DE = -7.99e-15 | DW = 0.00e+00\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.472 | E = -6.2256341447 | DE = 0.00e+00 | DW = 0.00e+00\n", + "Time elapsed = 0.466 | E = -6.2256341447 | DE = 1.78e-15 | DW = 0.00e+00\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.550 | E = -6.2256341447 | DE = 1.78e-15 | DW = 0.00e+00\n", + "Time elapsed = 0.587 | E = -6.2256341447 | DE = 4.44e-15 | DW = 0.00e+00\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.622 | E = -6.2256341447 | DE = -1.78e-15 | DW = 0.00e+00\n", + "Time elapsed = 0.703 | E = -6.2256341447 | DE = -5.33e-15 | DW = 0.00e+00\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - "Time elapsed = 0.683 | E = -6.2256341447 | DE = 2.66e-15 | DW = 0.00e+00\n", + "Time elapsed = 0.796 | E = -6.2256341447 | DE = 1.78e-15 | DW = 0.00e+00\n", "\n", - "DMRG energy = -6.225634144673484\n" + "DMRG energy = -6.225634144676156\n" ] } - ], - "source": [ - "energies = run_dmrg(driver, mpo)\n", - "print('DMRG energy = %20.15f' % energies)" ] }, { - "attachments": {}, "cell_type": "markdown", + "source": [ + "### The ``SGF`` Mode" + ], "metadata": { "id": "FkgLZyzycGN3" - }, - "source": [ - "## The ``SGF`` Mode" - ] + } }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "hySkK1UAcN-R" - }, "source": [ "In this section, we try to solve the same Hubbard problem using only particle number symmetry. The number of sites will now be the number of spin orbitals (which is equal to the number of qubits used in the next section), which is two times the number of the original (spatial) sites." - ] + ], + "metadata": { + "id": "hySkK1UAcN-R" + } }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "id": "6sabcKopcnIN" - }, - "outputs": [], "source": [ "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SGF, n_threads=4)\n", "driver.initialize_system(n_sites=L * 2, n_elec=N, heis_twos=1)" - ] + ], + "metadata": { + "id": "6sabcKopcnIN" + }, + "execution_count": 9, + "outputs": [] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "9UU_Z-QKcu4j" - }, "source": [ "### Build Hamiltonian\n", "\n", @@ -586,173 +569,165 @@ "We use characters ``C`` and ``D`` to represent $a^\\dagger$ and $a$, respectively.\n", "\n", "So we can set the MPO for the above Hubbard Hamiltonian using the following:" - ] + ], + "metadata": { + "id": "9UU_Z-QKcu4j" + } }, { "cell_type": "code", - "execution_count": 11, + "source": [ + "t = 1\n", + "U = 2\n", + "\n", + "b = driver.expr_builder()\n", + "\n", + "# hopping term\n", + "b.add_term(\"CD\", np.array([[[i, i + 2], [i + 2, i]] for i in range(2 * (L - 1))]).flatten(), -t)\n", + "\n", + "# onsite term\n", + "b.add_term(\"CDCD\", np.array([[2 * i, 2 * i, 2 * i + 1, 2 * i + 1] for i in range(L)]).flatten(), U)\n", + "\n", + "mpo = driver.get_mpo(b.finalize(), iprint=2)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "jE7L6nP-cu4k", - "outputId": "2a4a904f-ab77-4213-cdbd-da7e9d2b9b26" + "outputId": "4c6d1061-1aa0-450b-dee5-ae2a89f66440", + "id": "jE7L6nP-cu4k" }, + "execution_count": 10, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "\n", "Build MPO | Nsites = 16 | Nterms = 36 | Algorithm = FastBIP | Cutoff = 1.00e-14\n", " Site = 0 / 16 .. Mmpo = 4 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.004\n", - " Site = 1 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 6 SPT = 0.7500 Tmvc = 0.000 T = 0.003\n", + " Site = 1 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 6 SPT = 0.7500 Tmvc = 0.000 T = 0.004\n", " Site = 2 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 3 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 4 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 5 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 6 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 7 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 8 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 9 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 10 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 11 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 12 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 13 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 14 / 16 .. Mmpo = 4 DW = 0.00e+00 NNZ = 6 SPT = 0.7500 Tmvc = 0.000 T = 0.003\n", - " Site = 15 / 16 .. Mmpo = 1 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", - "Ttotal = 0.046 Tmvc-total = 0.000 MPO bond dimension = 7 MaxDW = 0.00e+00\n", + " Site = 3 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.004\n", + " Site = 4 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 5 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 6 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 7 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.006\n", + " Site = 8 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 9 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 10 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 11 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 12 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 13 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 14 / 16 .. Mmpo = 4 DW = 0.00e+00 NNZ = 6 SPT = 0.7500 Tmvc = 0.000 T = 0.002\n", + " Site = 15 / 16 .. Mmpo = 1 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", + "Ttotal = 0.044 Tmvc-total = 0.000 MPO bond dimension = 7 MaxDW = 0.00e+00\n", "NNZ = 128 SIZE = 560 SPT = 0.7714\n", "\n", - "Rank = 0 Ttotal = 0.103 MPO method = FastBipartite bond dimension = 7 NNZ = 128 SIZE = 560 SPT = 0.7714\n" + "Rank = 0 Ttotal = 0.095 MPO method = FastBipartite bond dimension = 7 NNZ = 128 SIZE = 560 SPT = 0.7714\n" ] } - ], - "source": [ - "t = 1\n", - "U = 2\n", - "\n", - "b = driver.expr_builder()\n", - "\n", - "# hopping term\n", - "b.add_term(\"CD\",\n", - " np.array([[[i, i + 2], [i + 2, i]] for i in range(2 * (L - 1))]).ravel(),\n", - " [-t] * 4 * (L - 1))\n", - "\n", - "# onsite term\n", - "b.add_term(\"CDCD\",\n", - " np.array([[2 * i, 2 * i, 2 * i + 1, 2 * i + 1] for i in range(L)]).ravel(),\n", - " [U] * L)\n", - "\n", - "mpo = driver.get_mpo(b.finalize(), iprint=2)" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "p9gWG9gvfIxO" - }, "source": [ "### Run DMRG\n", "\n", "Finally, we can run DMRG as normal:" - ] + ], + "metadata": { + "id": "p9gWG9gvfIxO" + } }, { "cell_type": "code", - "execution_count": 12, + "source": [ + "energies = run_dmrg(driver, mpo)\n", + "print('DMRG energy = %20.15f' % energies)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "0rbo_EqhfIxP", - "outputId": "389da42b-5d6f-4862-ffb0-d410e68562f1" + "outputId": "fcffefa3-b5e9-471b-ecac-6f43e3798f76", + "id": "0rbo_EqhfIxP" }, + "execution_count": 11, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.200 | E = -6.2256341447 | DW = 2.46e-15\n", + "Time elapsed = 0.921 | E = -6.2256341447 | DW = 2.51e-15\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.370 | E = -6.2256341447 | DE = -3.55e-15 | DW = 2.70e-15\n", + "Time elapsed = 1.099 | E = -6.2256341447 | DE = -8.88e-15 | DW = 2.67e-15\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.546 | E = -6.2256341447 | DE = 2.66e-15 | DW = 2.28e-15\n", + "Time elapsed = 1.272 | E = -6.2256341447 | DE = 1.78e-15 | DW = 2.33e-15\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.722 | E = -6.2256341447 | DE = 8.88e-16 | DW = 2.40e-15\n", + "Time elapsed = 1.444 | E = -6.2256341447 | DE = 1.07e-14 | DW = 2.38e-15\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.144 | E = -6.2256341447 | DE = -1.24e-14 | DW = 1.86e-32\n", + "Time elapsed = 1.853 | E = -6.2256341447 | DE = -8.88e-16 | DW = 9.93e-33\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.559 | E = -6.2256341447 | DE = 0.00e+00 | DW = 1.64e-31\n", + "Time elapsed = 2.250 | E = -6.2256341447 | DE = -1.78e-15 | DW = 4.03e-32\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 3.042 | E = -6.2256341447 | DE = 5.33e-15 | DW = 1.46e-32\n", + "Time elapsed = 2.697 | E = -6.2256341447 | DE = -8.88e-16 | DW = 1.85e-32\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 3.453 | E = -6.2256341447 | DE = 0.00e+00 | DW = 4.23e-32\n", + "Time elapsed = 3.094 | E = -6.2256341447 | DE = -1.78e-15 | DW = 5.42e-32\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - "Time elapsed = 3.706 | E = -6.2256341447 | DE = 7.11e-15 | DW = 0.00e+00\n", + "Time elapsed = 3.330 | E = -6.2256341447 | DE = 3.55e-15 | DW = 0.00e+00\n", "\n", - "DMRG energy = -6.225634144661109\n" + "DMRG energy = -6.225634144669716\n" ] } - ], - "source": [ - "energies = run_dmrg(driver, mpo)\n", - "print('DMRG energy = %20.15f' % energies)" ] }, { - "attachments": {}, "cell_type": "markdown", + "source": [ + "### The ``SGB`` Mode" + ], "metadata": { "id": "7rkyLy3fH_0M" - }, - "source": [ - "## The ``SGB`` Mode" - ] + } }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "wEnSNpEsIFa3" - }, "source": [ "### Initialization\n", "\n", "In this section, we try to solve the same Hubbard problem by first transfroming the model into a qubit (spin) model. The number of sites will now be the number of qubits (spins), which is two times the number of the original sites.\n", "\n", "The parameter ``heis_twos`` represents two times the spin in each site. Namely, for $S = 1/2$ Heisenberg model, ``heis_twos = 1``, for $S = 1$ Heisenberg model, ``heis_twos = 2``, etc." - ] + ], + "metadata": { + "id": "wEnSNpEsIFa3" + } }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "id": "xPhvnE1YIrV4" - }, - "outputs": [], "source": [ "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SGB, n_threads=4)\n", "driver.initialize_system(n_sites=L * 2, n_elec=N, heis_twos=1)" - ] + ], + "metadata": { + "id": "xPhvnE1YIrV4" + }, + "execution_count": 12, + "outputs": [] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "hoL5hrKwJSNY" - }, "source": [ "### Build Hamiltonian\n", "\n", @@ -769,154 +744,403 @@ "We use charactors ``P`` (plus), ``M`` (minus), and ``Z`` to represent operators $S^+$, $S^-$ and $\\frac{1}{2}S^z$, respectively. Note that we assume $S^z|\\alpha\\rangle = 1\\cdot |\\alpha\\rangle$ and $S^z|\\beta\\rangle = -1\\cdot |\\beta\\rangle$ here.\n", "\n", "So we can set the MPO for the above Hubbard Hamiltonian using the following:" - ] + ], + "metadata": { + "id": "hoL5hrKwJSNY" + } }, { "cell_type": "code", - "execution_count": 14, + "source": [ + "t = 1\n", + "U = 2\n", + "\n", + "b = driver.expr_builder()\n", + "\n", + "# hopping term\n", + "b.add_term(\"PZZM\",\n", + " np.array([[i, i, i + 1, i + 2] for i in range(2 * (L - 1))]).flatten(),\n", + " [-t * 4] * 2 * (L - 1))\n", + "b.add_term(\"MZZP\",\n", + " np.array([[i, i, i + 1, i + 2] for i in range(2 * (L - 1))]).flatten(),\n", + " [+t * 4] * 2 * (L - 1))\n", + "\n", + "# onsite term\n", + "b.add_term(\"PMPM\",\n", + " np.array([[i, i] for i in range(2 * L)]).flatten(),\n", + " [U] * 2 * L)\n", + "\n", + "mpo = driver.get_mpo(b.finalize(), iprint=2)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "w0zirVdML0I0", - "outputId": "ccc0bd44-6176-48e0-bd4f-5bc6f8fdac30" + "outputId": "608fef64-a2c5-4eef-d9e7-b94eef53ba39" }, + "execution_count": 13, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "\n", "Build MPO | Nsites = 16 | Nterms = 36 | Algorithm = FastBIP | Cutoff = 1.00e-14\n", - " Site = 0 / 16 .. Mmpo = 4 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", + " Site = 0 / 16 .. Mmpo = 4 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", " Site = 1 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 6 SPT = 0.7500 Tmvc = 0.000 T = 0.003\n", " Site = 2 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 3 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", + " Site = 3 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", " Site = 4 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", - " Site = 5 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 5 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", " Site = 6 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", - " Site = 7 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 8 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 9 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", + " Site = 7 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 8 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.004\n", + " Site = 9 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", " Site = 10 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 11 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", - " Site = 12 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.003\n", + " Site = 11 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", + " Site = 12 / 16 .. Mmpo = 7 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", " Site = 13 / 16 .. Mmpo = 6 DW = 0.00e+00 NNZ = 9 SPT = 0.7857 Tmvc = 0.000 T = 0.002\n", - " Site = 14 / 16 .. Mmpo = 4 DW = 0.00e+00 NNZ = 6 SPT = 0.7500 Tmvc = 0.000 T = 0.006\n", + " Site = 14 / 16 .. Mmpo = 4 DW = 0.00e+00 NNZ = 6 SPT = 0.7500 Tmvc = 0.000 T = 0.002\n", " Site = 15 / 16 .. Mmpo = 1 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", - "Ttotal = 0.046 Tmvc-total = 0.000 MPO bond dimension = 7 MaxDW = 0.00e+00\n", + "Ttotal = 0.040 Tmvc-total = 0.000 MPO bond dimension = 7 MaxDW = 0.00e+00\n", "NNZ = 128 SIZE = 560 SPT = 0.7714\n", "\n", - "Rank = 0 Ttotal = 0.101 MPO method = FastBipartite bond dimension = 7 NNZ = 128 SIZE = 560 SPT = 0.7714\n" + "Rank = 0 Ttotal = 0.087 MPO method = FastBipartite bond dimension = 7 NNZ = 128 SIZE = 560 SPT = 0.7714\n" ] } - ], - "source": [ - "t = 1\n", - "U = 2\n", - "\n", - "b = driver.expr_builder()\n", - "\n", - "# hopping term\n", - "b.add_term(\"PZZM\",\n", - " np.array([[i, i, i + 1, i + 2] for i in range(2 * (L - 1))]).ravel(),\n", - " [-t * 4] * 2 * (L - 1))\n", - "b.add_term(\"MZZP\",\n", - " np.array([[i, i, i + 1, i + 2] for i in range(2 * (L - 1))]).ravel(),\n", - " [+t * 4] * 2 * (L - 1))\n", - "\n", - "# onsite term\n", - "b.add_term(\"PMPM\",\n", - " np.array([[i, i] for i in range(2 * L)]).ravel(),\n", - " [U] * 2 * L)\n", - "\n", - "mpo = driver.get_mpo(b.finalize(), iprint=2)" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "fYBbYs5FMoUG" - }, "source": [ "### Run DMRG\n", "\n", "Finally, we can run DMRG as normal:" - ] + ], + "metadata": { + "id": "fYBbYs5FMoUG" + } }, { "cell_type": "code", - "execution_count": 15, + "source": [ + "energies = run_dmrg(driver, mpo)\n", + "print('DMRG energy = %20.15f' % energies)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "MIji5JjoMoUV", - "outputId": "afaab972-9cc5-4b0e-aae7-6fd3d66e11a9" + "outputId": "b3ed5f03-1587-4697-cc4c-0a66579fc6dc", + "id": "MIji5JjoMoUV" }, + "execution_count": 14, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.163 | E = -6.2256341447 | DW = 4.30e-15\n", + "Time elapsed = 0.925 | E = -6.2256341447 | DW = 4.38e-15\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.322 | E = -6.2256341447 | DE = -9.77e-15 | DW = 4.27e-15\n", + "Time elapsed = 1.078 | E = -6.2256341447 | DE = 2.13e-14 | DW = 4.26e-15\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.492 | E = -6.2256341447 | DE = 7.99e-15 | DW = 4.18e-15\n", + "Time elapsed = 1.236 | E = -6.2256341447 | DE = 0.00e+00 | DW = 4.25e-15\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.649 | E = -6.2256341447 | DE = 3.55e-15 | DW = 3.98e-15\n", + "Time elapsed = 1.432 | E = -6.2256341447 | DE = 5.33e-15 | DW = 3.95e-15\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.027 | E = -6.2256341447 | DE = 2.66e-15 | DW = 2.85e-32\n", + "Time elapsed = 1.785 | E = -6.2256341447 | DE = 0.00e+00 | DW = 2.54e-32\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.396 | E = -6.2256341447 | DE = 8.88e-16 | DW = 2.47e-32\n", + "Time elapsed = 2.172 | E = -6.2256341447 | DE = 4.44e-15 | DW = 7.02e-32\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.778 | E = -6.2256341447 | DE = -5.33e-15 | DW = 2.01e-32\n", + "Time elapsed = 2.570 | E = -6.2256341447 | DE = 0.00e+00 | DW = 1.86e-32\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 3.155 | E = -6.2256341447 | DE = 1.78e-15 | DW = 2.01e-32\n", + "Time elapsed = 2.929 | E = -6.2256341447 | DE = 1.78e-15 | DW = 5.74e-32\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - "Time elapsed = 3.394 | E = -6.2256341447 | DE = 3.55e-15 | DW = 0.00e+00\n", + "Time elapsed = 3.157 | E = -6.2256341447 | DE = -3.55e-15 | DW = 0.00e+00\n", "\n", - "DMRG energy = -6.225634144668975\n" + "DMRG energy = -6.225634144672112\n" ] } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### The ``PHSU2`` Mode\n", + "\n", + "Let\n", + "\n", + "$$\n", + " \\big( E_p \\big)^{[1/2]} := \\begin{pmatrix} a^\\dagger_{p,\\uparrow} \\\\ (-1)^p a_{p,\\downarrow} \\end{pmatrix}^{[1/2]}\n", + " \\quad \\big( F_p \\big)^{[1/2]} := \\begin{pmatrix} -(-1)^p a^\\dagger_{p,\\downarrow} \\\\ a_{p,\\uparrow} \\end{pmatrix}^{[1/2]}\n", + "$$\n", + "\n", + "We have (assuming $p$ and $q$ differ by 1)\n", + "\n", + "$$\n", + " \\big( E_p \\big)^{[1/2]} \\otimes_{[0]} \\big( F_q \\big)^{[1/2]}\n", + " = \\begin{pmatrix} a^\\dagger_{p,\\uparrow} \\\\ (-1)^p a_{p,\\downarrow} \\end{pmatrix}^{[1/2]}\n", + " \\otimes_{[0]} \\begin{pmatrix} -(-1)^q a^\\dagger_{q,\\downarrow} \\\\ a_{q,\\uparrow} \\end{pmatrix}^{[1/2]} \\\\\n", + " = \\frac{1}{\\sqrt{2}} \\left( a^\\dagger_{p,\\uparrow} a_{q,\\uparrow} - a_{p,\\downarrow} a^\\dagger_{q,\\downarrow} \\right)\n", + " = \\frac{1}{\\sqrt{2}} \\left( a^\\dagger_{p,\\uparrow} a_{q,\\uparrow} + a^\\dagger_{q,\\downarrow} a_{p,\\downarrow} \\right) \\\\\n", + "$$\n", + "\n", + "So\n", + "\n", + "$$\n", + " \\big( E_p \\big)^{[1/2]} \\otimes_{[0]} \\big( F_{p+1} \\big)^{[1/2]} + \\big( E_{p+1} \\big)^{[1/2]} \\otimes_{[0]} \\big( F_p \\big)^{[1/2]} \\\\\n", + " =\\frac{1}{\\sqrt{2}} \\left( a^\\dagger_{p,\\uparrow} a_{p+1,\\uparrow} + a^\\dagger_{p+1,\\downarrow} a_{p,\\downarrow} \\right)\n", + " + \\frac{1}{\\sqrt{2}} \\left( a^\\dagger_{p+1,\\uparrow} a_{p,\\uparrow} + a^\\dagger_{p,\\downarrow} a_{p+1,\\downarrow} \\right) \\\\\n", + " =\\frac{1}{\\sqrt{2}} \\left( a^\\dagger_{p,\\uparrow} a_{p+1,\\uparrow} + a^\\dagger_{p,\\downarrow} a_{p+1,\\downarrow}\n", + " + a^\\dagger_{p+1,\\uparrow} a_{p,\\uparrow} + a^\\dagger_{p+1,\\downarrow} a_{p,\\downarrow} \\right) \\\\\n", + " =\\frac{1}{\\sqrt{2}} \\sum_\\sigma \\left( a^\\dagger_{p,\\sigma} a_{p+1,\\sigma} + \\mathrm{H.c.} \\right)\n", + "$$\n", + "\n", + "$$\n", + " -t \\sum_{\\langle i,j \\rangle, \\sigma} \\left( c_{i,\\sigma}^\\dagger c_{j,\\sigma} + \\mathrm{H.c.} \\right)\n", + " = -\\sqrt{2} t \\sum_{\\langle i,j \\rangle} \\left[\n", + " \\big( E_i \\big)^{[1/2]} \\otimes_{[0]} \\big( F_{j} \\big)^{[1/2]} + \\big( E_{j} \\big)^{[1/2]} \\otimes_{[0]} \\big( F_i \\big)^{[1/2]}\n", + " \\right]\n", + "$$\n", + "\n", + "Now consider the onsite term\n", + "\n", + "$$\n", + " \\big( E_p \\big)^{[1/2]} \\otimes_{[0]} \\big( F_p \\big)^{[1/2]}\n", + " = \\begin{pmatrix} a^\\dagger_{p,\\uparrow} \\\\ (-1)^p a_{p,\\downarrow} \\end{pmatrix}^{[1/2]}\n", + " \\otimes_{[0]} \\begin{pmatrix} -(-1)^p a^\\dagger_{p,\\downarrow} \\\\ a_{p,\\uparrow} \\end{pmatrix}^{[1/2]} \\\\\n", + " = \\frac{1}{\\sqrt{2}} \\left( a^\\dagger_{p,\\uparrow} a_{p,\\uparrow} + a_{p,\\downarrow} a^\\dagger_{p,\\downarrow} \\right)\n", + " = \\frac{1}{\\sqrt{2}} \\left( a^\\dagger_{p,\\uparrow} a_{p,\\uparrow} - a^\\dagger_{p,\\downarrow} a_{p,\\downarrow} + 1\\right) \\\\\n", + " \\big( E_p \\big)^{[1/2]} \\otimes_{[0]} \\big( E_p \\big)^{[1/2]}\n", + " = \\begin{pmatrix} a^\\dagger_{p,\\uparrow} \\\\ (-1)^p a_{p,\\downarrow} \\end{pmatrix}^{[1/2]}\n", + " \\otimes_{[0]} \\begin{pmatrix} a^\\dagger_{p,\\uparrow} \\\\ (-1)^p a_{p,\\downarrow} \\end{pmatrix}^{[1/2]} \\\\\n", + " = \\frac{1}{\\sqrt{2}} \\left( (-1)^p a^\\dagger_{p,\\uparrow} a_{p,\\downarrow} -(-1)^p a_{p,\\downarrow} a^\\dagger_{p,\\uparrow} \\right)\n", + " = (-1)^p \\sqrt{2} a^\\dagger_{p,\\uparrow} a_{p,\\downarrow} \\\\\n", + " \\big( F_p \\big)^{[1/2]} \\otimes_{[0]} \\big( F_p \\big)^{[1/2]}\n", + " = \\begin{pmatrix} -(-1)^p a^\\dagger_{p,\\downarrow} \\\\ a_{p,\\uparrow} \\end{pmatrix}^{[1/2]}\n", + " \\otimes_{[0]} \\begin{pmatrix} -(-1)^p a^\\dagger_{p,\\downarrow} \\\\ a_{p,\\uparrow} \\end{pmatrix}^{[1/2]} \\\\\n", + " = \\frac{1}{\\sqrt{2}} \\left( -(-1)^p a^\\dagger_{p,\\downarrow} a_{p,\\uparrow} +(-1)^p a_{p,\\uparrow} \\right)\n", + " = -(-1)^p \\sqrt{2} a^\\dagger_{p,\\downarrow} a_{p,\\uparrow}\n", + "$$\n", + "\n", + "So the product of above terms\n", + "\n", + "$$\n", + " \\left( \\big( E_p \\big)^{[1/2]} \\otimes_{[0]} \\big( E_p \\big)^{[1/2]} \\right) \\otimes_{[0]} \\left( \\big( F_p \\big)^{[1/2]} \\otimes_{[0]} \\big( F_p \\big)^{[1/2]} \\right)\\\\\n", + " = -2 a^\\dagger_{p,\\uparrow} a_{p,\\downarrow} a^\\dagger_{p,\\downarrow} a_{p,\\uparrow}\n", + " = -2 a^\\dagger_{p,\\uparrow} a_{p,\\uparrow} a_{p,\\downarrow} a^\\dagger_{p,\\downarrow}\n", + " = 2 a^\\dagger_{p,\\uparrow} a_{p,\\uparrow} a^\\dagger_{p,\\downarrow} a_{p,\\downarrow} -2 a^\\dagger_{p,\\uparrow} a_{p,\\uparrow}\n", + " = 2 n_{p\\uparrow} n_{p\\downarrow} - 2 n_{p\\uparrow}\n", + "$$" ], + "metadata": { + "id": "eBfoaTZHXt-U" + } + }, + { + "cell_type": "code", "source": [ - "energies = run_dmrg(driver, mpo)\n", + "t = 1\n", + "U = 2\n", + "n_elec = L\n", + "\n", + "driver = DMRGDriver(scratch='./tmp', symm_type=SymmetryTypes.SAnyPHSU2, n_threads=4)\n", + "driver.initialize_system(n_sites=L, n_elec=n_elec, spin=0)\n", + "\n", + "b = driver.expr_builder()\n", + "b.add_term(\"(E+F)0\", [g for i in range(L - 1) for g in [i, i + 1]], 2 ** 0.5)\n", + "b.add_term(\"(F+E)0\", [g for i in range(L - 1) for g in [i, i + 1]], 2 ** 0.5)\n", + "b.add_term(\"((E+E)0+(F+F)0)0\", np.array([i for i in range(L) for _ in range(4)]), 0.5 * U)\n", + "b.add_const(n_elec * U / 2)\n", + "mpo = driver.get_mpo(b.finalize(adjust_order=False), iprint=2)\n", + "\n", + "ket = driver.get_random_mps(tag=\"KET\", bond_dim=250, nroots=1)\n", + "bond_dims = [250] * 4 + [500] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + "thrds = [1e-10] * 8\n", + "energies = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises, thrds=thrds, iprint=1)\n", "print('DMRG energy = %20.15f' % energies)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "afuUeJ2G7mCi", + "outputId": "c708351e-abd4-4b14-b372-c33c564f34b8" + }, + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Build MPO | Nsites = 8 | Nterms = 22 | Algorithm = FastBIP | Cutoff = 1.00e-14\n", + " Site = 0 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.005\n", + " Site = 1 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.003\n", + " Site = 2 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.003\n", + " Site = 3 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.005\n", + " Site = 4 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.005\n", + " Site = 5 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.003\n", + " Site = 6 / 8 .. Mmpo = 4 DW = 0.00e+00 NNZ = 7 SPT = 0.5625 Tmvc = 0.000 T = 0.003\n", + " Site = 7 / 8 .. Mmpo = 1 DW = 0.00e+00 NNZ = 4 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", + "Ttotal = 0.028 Tmvc-total = 0.000 MPO bond dimension = 4 MaxDW = 0.00e+00\n", + "NNZ = 50 SIZE = 104 SPT = 0.5192\n", + "\n", + "Rank = 0 Ttotal = 0.069 MPO method = FastBipartite bond dimension = 4 NNZ = 50 SIZE = 104 SPT = 0.5192\n", + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.144 | E = -6.2256341447 | DW = 2.13e-20\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.187 | E = -6.2256341447 | DE = 4.26e-14 | DW = 2.06e-20\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.232 | E = -6.2256341447 | DE = -8.88e-15 | DW = 1.49e-20\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.274 | E = -6.2256341447 | DE = 1.78e-15 | DW = 2.86e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.317 | E = -6.2256341447 | DE = -3.55e-15 | DW = 1.51e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.359 | E = -6.2256341447 | DE = 0.00e+00 | DW = 1.15e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.402 | E = -6.2256341447 | DE = 1.78e-15 | DW = 1.96e-20\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.444 | E = -6.2256341447 | DE = 7.11e-15 | DW = 1.37e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 0.478 | E = -6.2256341447 | DE = -2.84e-14 | DW = 1.94e-20\n", + "\n", + "DMRG energy = -6.225634144668852\n" + ] + } ] - } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "base", - "language": "python", - "name": "python3" }, - "language_info": { - "name": "python", - "version": "3.7.4 (default, Aug 13 2019, 20:35:49) \n[GCC 7.3.0]" - }, - "vscode": { - "interpreter": { - "hash": "27e05368924b5fa5d1b4676765ee251cffbbae96bfd5fe75f3294f22031a42f3" + { + "cell_type": "markdown", + "source": [ + "### The ``SO4`` Mode\n", + "\n", + "Similarly, we can consider the $\\mathrm{SU(2) \\times SU(2)}$ operator $G$, where the row\n", + "represents the pseudo spin symmetry and the column represents the spin symmetry.\n", + "\n", + "$$\n", + " \\big( G_p \\big)^{[1/2,1/2]} := \\begin{pmatrix}\n", + " a^\\dagger_{p,\\uparrow} & a^\\dagger_{p,\\downarrow} \\\\\n", + " (-1)^p a_{p,\\downarrow} & -(-1)^p a_{p,\\uparrow}\n", + " \\end{pmatrix}^{[1/2,1/2]}\n", + "$$\n", + "\n", + "So the components can be represented as\n", + "\n", + "$$\n", + " \\begin{pmatrix} [1/2,1/2] & [1/2,-1/2] \\\\ [-1/2,1/2] & [-1/2,-1/2] \\end{pmatrix}^{[1/2,1/2]}\n", + "$$" + ], + "metadata": { + "id": "bUV37vzvi0tn" } + }, + { + "cell_type": "code", + "source": [ + "t = 1\n", + "U = 2\n", + "n_elec = L\n", + "\n", + "driver = DMRGDriver(scratch='./tmp', symm_type=SymmetryTypes.SAnySO4, n_threads=4)\n", + "driver.initialize_system(n_sites=L, n_elec=n_elec, spin=0)\n", + "\n", + "b = driver.expr_builder()\n", + "b.add_term(\"(G[1,1]+G[1,1])[0,0]\",\n", + " [g for i in range(L - 1) for g in [i, i + 1]], [2.0 if i % 2 == 0 else -2.0 for i in range(L - 1)])\n", + "b.add_term(\"((G[1,1]+G[1,1])[0,2]+(G[1,1]+G[1,1])[0,2])[0,0]\",\n", + " np.array([i for i in range(L) for _ in range(4)]), U / (2 * 3 ** 0.5))\n", + "b.add_const(n_elec * U / 2)\n", + "mpo = driver.get_mpo(b.finalize(adjust_order=False), iprint=2)\n", + "\n", + "ket = driver.get_random_mps(tag=\"KET\", bond_dim=250, nroots=1)\n", + "bond_dims = [250] * 4 + [500] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + "thrds = [1e-10] * 8\n", + "energies = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises, thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energies)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "FH6xLlfPXs-_", + "outputId": "99058179-d59e-4c3d-e551-e99df53c33fc" + }, + "execution_count": 16, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Build MPO | Nsites = 8 | Nterms = 15 | Algorithm = FastBIP | Cutoff = 1.00e-14\n", + " Site = 0 / 8 .. Mmpo = 3 DW = 0.00e+00 NNZ = 3 SPT = 0.0000 Tmvc = 0.000 T = 0.004\n", + " Site = 1 / 8 .. Mmpo = 3 DW = 0.00e+00 NNZ = 5 SPT = 0.4444 Tmvc = 0.000 T = 0.003\n", + " Site = 2 / 8 .. Mmpo = 3 DW = 0.00e+00 NNZ = 5 SPT = 0.4444 Tmvc = 0.000 T = 0.003\n", + " Site = 3 / 8 .. Mmpo = 3 DW = 0.00e+00 NNZ = 5 SPT = 0.4444 Tmvc = 0.000 T = 0.003\n", + " Site = 4 / 8 .. Mmpo = 3 DW = 0.00e+00 NNZ = 5 SPT = 0.4444 Tmvc = 0.000 T = 0.003\n", + " Site = 5 / 8 .. Mmpo = 3 DW = 0.00e+00 NNZ = 5 SPT = 0.4444 Tmvc = 0.000 T = 0.003\n", + " Site = 6 / 8 .. Mmpo = 3 DW = 0.00e+00 NNZ = 5 SPT = 0.4444 Tmvc = 0.000 T = 0.003\n", + " Site = 7 / 8 .. Mmpo = 1 DW = 0.00e+00 NNZ = 3 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", + "Ttotal = 0.022 Tmvc-total = 0.000 MPO bond dimension = 3 MaxDW = 0.00e+00\n", + "NNZ = 36 SIZE = 60 SPT = 0.4000\n", + "\n", + "Rank = 0 Ttotal = 0.047 MPO method = FastBipartite bond dimension = 3 NNZ = 36 SIZE = 60 SPT = 0.4000\n", + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.066 | E = -6.2256341447 | DW = 1.22e-20\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.113 | E = -6.2256341447 | DE = 3.02e-14 | DW = 2.80e-21\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.159 | E = -6.2256341447 | DE = -3.55e-15 | DW = 7.31e-21\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.192 | E = -6.2256341447 | DE = 8.88e-15 | DW = 9.99e-21\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.229 | E = -6.2256341447 | DE = -1.95e-14 | DW = 1.22e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.261 | E = -6.2256341447 | DE = -1.78e-15 | DW = 5.33e-21\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.295 | E = -6.2256341447 | DE = 3.55e-15 | DW = 8.67e-21\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.333 | E = -6.2256341447 | DE = -1.78e-15 | DW = 7.17e-21\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 0.367 | E = -6.2256341447 | DE = -1.78e-15 | DW = 1.25e-20\n", + "\n", + "DMRG energy = -6.225634144673016\n" + ] + } + ] } - }, - "nbformat": 4, - "nbformat_minor": 0 -} + ] +} \ No newline at end of file diff --git a/docs/source/tutorial/qc-hamiltonians.ipynb b/docs/source/tutorial/qc-hamiltonians.ipynb index b5215b91..6734245f 100644 --- a/docs/source/tutorial/qc-hamiltonians.ipynb +++ b/docs/source/tutorial/qc-hamiltonians.ipynb @@ -1,16 +1,30 @@ { + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, "cells": [ { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "f1v7ZIHNvg7D" - }, "source": [ "# Quantum Chemistry Hamiltonians\n", "\n", "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/block-hczhai/block2-preview/blob/master/docs/source/tutorial/qc-hamiltonians.ipynb)" - ] + ], + "metadata": { + "id": "f1v7ZIHNvg7D" + } }, { "cell_type": "code", @@ -20,22 +34,18 @@ }, "outputs": [], "source": [ - "!pip install block2==0.5.2rc5 -qq --progress-bar off --extra-index-url=https://block-hczhai.github.io/block2-preview/pypi/\n", - "!pip install pyscf==2.1.1 -qq --progress-bar off" + "!pip install block2==0.5.2rc13 -qq --progress-bar off --extra-index-url=https://block-hczhai.github.io/block2-preview/pypi/\n", + "!pip install pyscf==2.3.0 -qq --progress-bar off" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "QbsjgwANwd-C" - }, "source": [ "## Introduction\n", "\n", "In this tutorial we explain how to perform quantum chemistry DMRG using the python interface of ``block2``.\n", "\n", - "The quantum chemistry Hamiltonian in its second quantized form has to be defined in a set of orbitals, such as the Hartree-Fock (or Density Functional Theory) orbitals. The symmetry that can be used in the DMRG calculation thus has a dependence on the symmetry of the Hartree-Fock orbitals.\n", + "The quantum chemistry Hamiltonian in its second quantized form has to be defined in a set of orbitals, such as the Hartree-Fock (or Density Functional Theory) orbitals. The symmetry that can be used in the DMRG calculation is thus has a dependence on the symmetry of the Hartree-Fock orbitals.\n", "\n", "1. For spin-restricted Hartree-Fock (RHF) orbitals, we can perform spin-adapted DMRG (``SU2`` mode in ``block2``) or non-spin-adapted DMRG with any lower symmetries (``SZ`` or ``SGF``).\n", "\n", @@ -45,28 +55,29 @@ "\n", "4. For relativistic Dirac Hartree-Fock (DHF) orbitals, we can perform DMRG in complex spin-orbitals (``SGFCPX`` mode in ``block2``).\n", "\n", - "Next, we will explain how to set up the integrals and perform DMRG in each of the modes (1) (2) (3) and (4). The quantum chemistry integrals will be generated using ``pyscf`` and transformed using funtions defined in ``pyblock2._pyscf.ao2mo``.\n" - ] + "5. For atom and diatomic molecules, we can perform spin-adapted/non-spin-adapted/spin-orbital DMRG (``SAnySU2LZ/SAnySZLZ/SAnySGFLZ`` modes in ``block2``) with the $L_z$ symmetry.\n", + "\n", + "Next, we will explain how to set up the integrals and perform DMRG in each of the modes (1) (2) (3) (4) and (5). The quantum chemistry integrals will be generated using ``pyscf`` and transformed using funtions defined in ``pyblock2._pyscf.ao2mo``.\n" + ], + "metadata": { + "id": "QbsjgwANwd-C" + } }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "id": "aEtzPUucyvCg" - }, - "outputs": [], "source": [ "import numpy as np\n", "from pyblock2._pyscf.ao2mo import integrals as itg\n", "from pyblock2.driver.core import DMRGDriver, SymmetryTypes" - ] + ], + "metadata": { + "id": "aEtzPUucyvCg" + }, + "execution_count": 2, + "outputs": [] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "kzFc7fBTyuQ_" - }, "source": [ "## Spin-Restricted Integrals\n", "\n", @@ -75,369 +86,421 @@ "For medium to large scale DMRG calculations, it is highly recommended to use a scratch space with high IO speed rather than the ``./tmp`` used in the following example. One also needs to set a suitable ``stack_mem`` in the ``DMRGDriver`` constructor to set the memory used for storing renormalized operators (in bytes). The default is ``stack_mem=int(1024**3)`` (1 GB). For medium scale calculations 10 to 30 GB might be required.\n", "\n", "For the meaning of DMRG parameters, please have a look at the [Hubbard - Run DMRG](https://block2.readthedocs.io/en/latest/tutorial/hubbard.html#Run-DMRG) page." - ] + ], + "metadata": { + "id": "kzFc7fBTyuQ_" + } }, { "cell_type": "code", - "execution_count": 3, + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "bond_dims = [250] * 4 + [500] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + "thrds = [1e-10] * 8\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)\n", + "\n", + "pdm1 = driver.get_1pdm(ket)\n", + "pdm2 = driver.get_2pdm(ket).transpose(0, 3, 1, 2)\n", + "print('Energy from pdms = %20.15f' % (np.einsum('ij,ij->', pdm1, h1e)\n", + " + 0.5 * np.einsum('ijkl,ijkl->', pdm2, driver.unpack_g2e(g2e)) + ecore))\n", + "\n", + "impo = driver.get_identity_mpo()\n", + "expt = driver.expectation(ket, mpo, ket) / driver.expectation(ket, impo, ket)\n", + "print('Energy from expectation = %20.15f' % expt)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6t5RHG5hvv8V", - "outputId": "1522dc01-87e4-44cb-a3e1-512116e076d2" + "outputId": "42b89155-6079-4149-8a2b-6e7515463070" }, + "execution_count": 3, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "integral symmetrize error = 6.220297364062989e-14\n", + "integral symmetrize error = 5.977257773040786e-14\n", "integral cutoff error = 0.0\n", - "mpo terms = 972\n", - "\n", - "Build MPO | Nsites = 10 | Nterms = 972 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", - " Site = 0 / 10 .. Mmpo = 13 DW = 0.00e+00 NNZ = 13 SPT = 0.0000 Tmvc = 0.000 T = 0.009\n", - " Site = 1 / 10 .. Mmpo = 34 DW = 0.00e+00 NNZ = 59 SPT = 0.8665 Tmvc = 0.001 T = 0.009\n", - " Site = 2 / 10 .. Mmpo = 56 DW = 0.00e+00 NNZ = 117 SPT = 0.9386 Tmvc = 0.000 T = 0.009\n", - " Site = 3 / 10 .. Mmpo = 70 DW = 0.00e+00 NNZ = 363 SPT = 0.9074 Tmvc = 0.001 T = 0.009\n", - " Site = 4 / 10 .. Mmpo = 80 DW = 0.00e+00 NNZ = 217 SPT = 0.9613 Tmvc = 0.000 T = 0.007\n", - " Site = 5 / 10 .. Mmpo = 94 DW = 0.00e+00 NNZ = 201 SPT = 0.9733 Tmvc = 0.000 T = 0.008\n", - " Site = 6 / 10 .. Mmpo = 54 DW = 0.00e+00 NNZ = 169 SPT = 0.9667 Tmvc = 0.000 T = 0.007\n", - " Site = 7 / 10 .. Mmpo = 30 DW = 0.00e+00 NNZ = 73 SPT = 0.9549 Tmvc = 0.000 T = 0.006\n", - " Site = 8 / 10 .. Mmpo = 13 DW = 0.00e+00 NNZ = 41 SPT = 0.8949 Tmvc = 0.000 T = 0.008\n", - " Site = 9 / 10 .. Mmpo = 1 DW = 0.00e+00 NNZ = 13 SPT = 0.0000 Tmvc = 0.000 T = 0.006\n", - "Ttotal = 0.078 Tmvc-total = 0.004 MPO bond dimension = 94 MaxDW = 0.00e+00\n", - "NNZ = 1266 SIZE = 26498 SPT = 0.9522\n", - "\n", - "Rank = 0 Ttotal = 0.154 MPO method = FastBipartite bond dimension = 94 NNZ = 1266 SIZE = 26498 SPT = 0.9522\n", + "mpo terms = 1030\n", + "\n", + "Build MPO | Nsites = 10 | Nterms = 1030 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 10 .. Mmpo = 13 DW = 0.00e+00 NNZ = 13 SPT = 0.0000 Tmvc = 0.000 T = 0.010\n", + " Site = 1 / 10 .. Mmpo = 34 DW = 0.00e+00 NNZ = 63 SPT = 0.8575 Tmvc = 0.000 T = 0.009\n", + " Site = 2 / 10 .. Mmpo = 56 DW = 0.00e+00 NNZ = 121 SPT = 0.9364 Tmvc = 0.000 T = 0.009\n", + " Site = 3 / 10 .. Mmpo = 74 DW = 0.00e+00 NNZ = 373 SPT = 0.9100 Tmvc = 0.000 T = 0.010\n", + " Site = 4 / 10 .. Mmpo = 80 DW = 0.00e+00 NNZ = 269 SPT = 0.9546 Tmvc = 0.000 T = 0.007\n", + " Site = 5 / 10 .. Mmpo = 94 DW = 0.00e+00 NNZ = 169 SPT = 0.9775 Tmvc = 0.000 T = 0.009\n", + " Site = 6 / 10 .. Mmpo = 54 DW = 0.00e+00 NNZ = 181 SPT = 0.9643 Tmvc = 0.000 T = 0.004\n", + " Site = 7 / 10 .. Mmpo = 30 DW = 0.00e+00 NNZ = 73 SPT = 0.9549 Tmvc = 0.000 T = 0.007\n", + " Site = 8 / 10 .. Mmpo = 14 DW = 0.00e+00 NNZ = 41 SPT = 0.9024 Tmvc = 0.000 T = 0.006\n", + " Site = 9 / 10 .. Mmpo = 1 DW = 0.00e+00 NNZ = 14 SPT = 0.0000 Tmvc = 0.000 T = 0.010\n", + "Ttotal = 0.082 Tmvc-total = 0.003 MPO bond dimension = 94 MaxDW = 0.00e+00\n", + "NNZ = 1317 SIZE = 27073 SPT = 0.9514\n", + "\n", + "Rank = 0 Ttotal = 0.197 MPO method = FastBipartite bond dimension = 94 NNZ = 1317 SIZE = 27073 SPT = 0.9514\n", "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.107 | E = -107.6541224475 | DW = 1.87e-10\n", + "Time elapsed = 1.239 | E = -107.6541224475 | DW = 1.87e-10\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.640 | E = -107.6541224475 | DE = -1.07e-11 | DW = 4.78e-20\n", + "Time elapsed = 1.842 | E = -107.6541224475 | DE = -5.40e-12 | DW = 5.66e-20\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.154 | E = -107.6541224475 | DE = 2.84e-14 | DW = 1.87e-10\n", + "Time elapsed = 2.663 | E = -107.6541224475 | DE = 0.00e+00 | DW = 1.87e-10\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.552 | E = -107.6541224475 | DE = -1.17e-12 | DW = 5.48e-20\n", + "Time elapsed = 3.203 | E = -107.6541224475 | DE = -7.96e-13 | DW = 5.72e-20\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 3.113 | E = -107.6541224475 | DE = -2.84e-14 | DW = 2.86e-20\n", + "Time elapsed = 3.918 | E = -107.6541224475 | DE = -2.84e-14 | DW = 1.92e-20\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 3.668 | E = -107.6541224475 | DE = 0.00e+00 | DW = 4.95e-20\n", + "Time elapsed = 4.457 | E = -107.6541224475 | DE = 0.00e+00 | DW = 5.42e-20\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 4.254 | E = -107.6541224475 | DE = -2.84e-14 | DW = 3.20e-20\n", + "Time elapsed = 5.188 | E = -107.6541224475 | DE = 0.00e+00 | DW = 3.01e-20\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 4.842 | E = -107.6541224475 | DE = 8.53e-14 | DW = 6.54e-20\n", + "Time elapsed = 5.683 | E = -107.6541224475 | DE = -2.84e-14 | DW = 5.57e-20\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - "Time elapsed = 5.168 | E = -107.6541224475 | DE = 0.00e+00 | DW = 2.97e-20\n", + "Time elapsed = 6.061 | E = -107.6541224475 | DE = 2.84e-14 | DW = 2.64e-20\n", "\n", - "DMRG energy = -107.654122447523932\n", - "Energy from pdms = -107.654122447523847\n" + "DMRG energy = -107.654122447524443\n", + "Energy from pdms = -107.654122447524387\n", + "Energy from expectation = -107.654122447524344\n" ] } - ], - "source": [ - "from pyscf import gto, scf\n", - "\n", - "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", - "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", - "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", - " ncore=0, ncas=None, g2e_symm=8)\n", - "\n", - "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", - "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", - "\n", - "bond_dims = [250] * 4 + [500] * 4\n", - "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", - "thrds = [1e-10] * 8\n", - "\n", - "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=1)\n", - "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", - "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", - " thrds=thrds, iprint=1)\n", - "print('DMRG energy = %20.15f' % energy)\n", - "\n", - "pdm1 = driver.get_1pdm(ket)\n", - "pdm2 = driver.get_2pdm(ket).transpose(0, 3, 1, 2)\n", - "print('Energy from pdms = %20.15f' % (np.einsum('ij,ij->', pdm1, h1e)\n", - " + 0.5 * np.einsum('ijkl,ijkl->', pdm2, driver.unpack_g2e(g2e)) + ecore))" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "ErrotOt42zbM" - }, "source": [ "We can also run non-spin-adapted DMRG (``SZ`` mode) using the restricted integrals." - ] + ], + "metadata": { + "id": "ErrotOt42zbM" + } }, { "cell_type": "code", - "execution_count": 4, + "source": [ + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "rUIaHYBZ2gBZ", - "outputId": "b1b03796-8b79-4ecc-e02e-576dfda4d912" + "outputId": "51c4247a-aa65-43e7-b52a-303a7d20648a" }, + "execution_count": 4, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "integral symmetrize error = 9.016818189452533e-14\n", + "integral symmetrize error = 7.512924107430347e-14\n", "integral cutoff error = 0.0\n", "mpo terms = 2778\n", "\n", "Build MPO | Nsites = 10 | Nterms = 2778 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", - " Site = 0 / 10 .. Mmpo = 26 DW = 0.00e+00 NNZ = 26 SPT = 0.0000 Tmvc = 0.001 T = 0.009\n", - " Site = 1 / 10 .. Mmpo = 66 DW = 0.00e+00 NNZ = 143 SPT = 0.9167 Tmvc = 0.001 T = 0.007\n", - " Site = 2 / 10 .. Mmpo = 110 DW = 0.00e+00 NNZ = 283 SPT = 0.9610 Tmvc = 0.001 T = 0.015\n", - " Site = 3 / 10 .. Mmpo = 138 DW = 0.00e+00 NNZ = 1023 SPT = 0.9326 Tmvc = 0.002 T = 0.015\n", - " Site = 4 / 10 .. Mmpo = 158 DW = 0.00e+00 NNZ = 535 SPT = 0.9755 Tmvc = 0.001 T = 0.011\n", - " Site = 5 / 10 .. Mmpo = 186 DW = 0.00e+00 NNZ = 463 SPT = 0.9842 Tmvc = 0.001 T = 0.011\n", - " Site = 6 / 10 .. Mmpo = 106 DW = 0.00e+00 NNZ = 415 SPT = 0.9790 Tmvc = 0.000 T = 0.006\n", - " Site = 7 / 10 .. Mmpo = 58 DW = 0.00e+00 NNZ = 163 SPT = 0.9735 Tmvc = 0.000 T = 0.004\n", - " Site = 8 / 10 .. Mmpo = 26 DW = 0.00e+00 NNZ = 87 SPT = 0.9423 Tmvc = 0.000 T = 0.004\n", + " Site = 0 / 10 .. Mmpo = 26 DW = 0.00e+00 NNZ = 26 SPT = 0.0000 Tmvc = 0.001 T = 0.005\n", + " Site = 1 / 10 .. Mmpo = 66 DW = 0.00e+00 NNZ = 143 SPT = 0.9167 Tmvc = 0.001 T = 0.006\n", + " Site = 2 / 10 .. Mmpo = 110 DW = 0.00e+00 NNZ = 283 SPT = 0.9610 Tmvc = 0.001 T = 0.008\n", + " Site = 3 / 10 .. Mmpo = 138 DW = 0.00e+00 NNZ = 1023 SPT = 0.9326 Tmvc = 0.004 T = 0.013\n", + " Site = 4 / 10 .. Mmpo = 158 DW = 0.00e+00 NNZ = 535 SPT = 0.9755 Tmvc = 0.001 T = 0.010\n", + " Site = 5 / 10 .. Mmpo = 186 DW = 0.00e+00 NNZ = 463 SPT = 0.9842 Tmvc = 0.001 T = 0.010\n", + " Site = 6 / 10 .. Mmpo = 106 DW = 0.00e+00 NNZ = 415 SPT = 0.9790 Tmvc = 0.000 T = 0.010\n", + " Site = 7 / 10 .. Mmpo = 58 DW = 0.00e+00 NNZ = 163 SPT = 0.9735 Tmvc = 0.000 T = 0.025\n", + " Site = 8 / 10 .. Mmpo = 26 DW = 0.00e+00 NNZ = 87 SPT = 0.9423 Tmvc = 0.000 T = 0.010\n", " Site = 9 / 10 .. Mmpo = 1 DW = 0.00e+00 NNZ = 26 SPT = 0.0000 Tmvc = 0.000 T = 0.005\n", - "Ttotal = 0.087 Tmvc-total = 0.008 MPO bond dimension = 186 MaxDW = 0.00e+00\n", + "Ttotal = 0.103 Tmvc-total = 0.009 MPO bond dimension = 186 MaxDW = 0.00e+00\n", "NNZ = 3164 SIZE = 102772 SPT = 0.9692\n", "\n", - "Rank = 0 Ttotal = 0.130 MPO method = FastBipartite bond dimension = 186 NNZ = 3164 SIZE = 102772 SPT = 0.9692\n", + "Rank = 0 Ttotal = 0.178 MPO method = FastBipartite bond dimension = 186 NNZ = 3164 SIZE = 102772 SPT = 0.9692\n", "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.831 | E = -107.6541224475 | DW = 4.14e-08\n", + "Time elapsed = 1.281 | E = -107.6541224475 | DW = 4.14e-08\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.323 | E = -107.6541224475 | DE = -4.46e-12 | DW = 5.27e-09\n", + "Time elapsed = 2.089 | E = -107.6541224475 | DE = -1.31e-11 | DW = 5.10e-09\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.792 | E = -107.6541224475 | DE = -1.02e-12 | DW = 4.14e-08\n", + "Time elapsed = 2.909 | E = -107.6541224475 | DE = -1.42e-12 | DW = 4.14e-08\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.389 | E = -107.6541224475 | DE = 1.42e-12 | DW = 5.36e-09\n", + "Time elapsed = 4.136 | E = -107.6541224475 | DE = 1.42e-12 | DW = 5.19e-09\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 3.364 | E = -107.6541224475 | DE = -1.11e-12 | DW = 3.60e-11\n", + "Time elapsed = 5.572 | E = -107.6541224475 | DE = -1.17e-12 | DW = 3.60e-11\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 4.355 | E = -107.6541224475 | DE = 9.09e-13 | DW = 1.51e-19\n", + "Time elapsed = 6.850 | E = -107.6541224475 | DE = 9.95e-13 | DW = 1.60e-19\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 5.296 | E = -107.6541224475 | DE = 2.84e-14 | DW = 3.60e-11\n", + "Time elapsed = 7.709 | E = -107.6541224475 | DE = 0.00e+00 | DW = 3.60e-11\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 6.108 | E = -107.6541224475 | DE = -1.14e-12 | DW = 1.68e-19\n", + "Time elapsed = 8.581 | E = -107.6541224475 | DE = -1.25e-12 | DW = 1.60e-19\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - "Time elapsed = 6.506 | E = -107.6541224475 | DE = -2.84e-14 | DW = 8.66e-20\n", + "Time elapsed = 9.169 | E = -107.6541224475 | DE = -2.84e-14 | DW = 5.07e-20\n", "\n", - "DMRG energy = -107.654122447524529\n" + "DMRG energy = -107.654122447524500\n" ] } - ], - "source": [ - "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ, n_threads=4)\n", - "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", - "\n", - "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=1)\n", - "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", - "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", - " thrds=thrds, iprint=1)\n", - "print('DMRG energy = %20.15f' % energy)" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "jeeDGMB83AaU" - }, "source": [ "We can also run DMRG in spin orbitals (``SGF`` mode) using the restricted integrals, which will be much slower (for more realistic systems)." - ] + ], + "metadata": { + "id": "jeeDGMB83AaU" + } }, { "cell_type": "code", - "execution_count": 5, + "source": [ + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SGF, n_threads=4)\n", + "\n", + "driver.n_sites = ncas\n", + "g2e = driver.unpack_g2e(g2e)\n", + "orb_sym = [orb_sym[i // 2] for i in range(len(orb_sym) * 2)]\n", + "n_sites = ncas * 2\n", + "\n", + "driver.initialize_system(n_sites=n_sites, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "yM1JgseK26_K", - "outputId": "6455262f-f130-4142-91a2-a4d2a288bf91" + "outputId": "31bbbd40-2cce-42d7-d331-900a132adc33" }, + "execution_count": 5, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "integral symmetrize error = 9.016818189452533e-14\n", + "integral symmetrize error = 7.512924107430346e-14\n", "integral cutoff error = 0.0\n", "mpo terms = 2438\n", "\n", "Build MPO | Nsites = 20 | Nterms = 2438 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", - " Site = 0 / 20 .. Mmpo = 7 DW = 0.00e+00 NNZ = 7 SPT = 0.0000 Tmvc = 0.000 T = 0.010\n", - " Site = 1 / 20 .. Mmpo = 20 DW = 0.00e+00 NNZ = 19 SPT = 0.8643 Tmvc = 0.001 T = 0.009\n", - " Site = 2 / 20 .. Mmpo = 45 DW = 0.00e+00 NNZ = 45 SPT = 0.9500 Tmvc = 0.002 T = 0.008\n", - " Site = 3 / 20 .. Mmpo = 62 DW = 0.00e+00 NNZ = 131 SPT = 0.9530 Tmvc = 0.001 T = 0.010\n", - " Site = 4 / 20 .. Mmpo = 81 DW = 0.00e+00 NNZ = 159 SPT = 0.9683 Tmvc = 0.001 T = 0.008\n", - " Site = 5 / 20 .. Mmpo = 104 DW = 0.00e+00 NNZ = 203 SPT = 0.9759 Tmvc = 0.001 T = 0.007\n", - " Site = 6 / 20 .. Mmpo = 125 DW = 0.00e+00 NNZ = 265 SPT = 0.9796 Tmvc = 0.002 T = 0.008\n", - " Site = 7 / 20 .. Mmpo = 126 DW = 0.00e+00 NNZ = 974 SPT = 0.9382 Tmvc = 0.001 T = 0.009\n", - " Site = 8 / 20 .. Mmpo = 151 DW = 0.00e+00 NNZ = 188 SPT = 0.9901 Tmvc = 0.001 T = 0.006\n", - " Site = 9 / 20 .. Mmpo = 148 DW = 0.00e+00 NNZ = 344 SPT = 0.9846 Tmvc = 0.001 T = 0.010\n", - " Site = 10 / 20 .. Mmpo = 177 DW = 0.00e+00 NNZ = 246 SPT = 0.9906 Tmvc = 0.001 T = 0.006\n", + " Site = 0 / 20 .. Mmpo = 7 DW = 0.00e+00 NNZ = 7 SPT = 0.0000 Tmvc = 0.000 T = 0.005\n", + " Site = 1 / 20 .. Mmpo = 20 DW = 0.00e+00 NNZ = 19 SPT = 0.8643 Tmvc = 0.001 T = 0.006\n", + " Site = 2 / 20 .. Mmpo = 45 DW = 0.00e+00 NNZ = 45 SPT = 0.9500 Tmvc = 0.001 T = 0.005\n", + " Site = 3 / 20 .. Mmpo = 62 DW = 0.00e+00 NNZ = 131 SPT = 0.9530 Tmvc = 0.001 T = 0.005\n", + " Site = 4 / 20 .. Mmpo = 81 DW = 0.00e+00 NNZ = 159 SPT = 0.9683 Tmvc = 0.001 T = 0.005\n", + " Site = 5 / 20 .. Mmpo = 104 DW = 0.00e+00 NNZ = 203 SPT = 0.9759 Tmvc = 0.001 T = 0.006\n", + " Site = 6 / 20 .. Mmpo = 125 DW = 0.00e+00 NNZ = 265 SPT = 0.9796 Tmvc = 0.001 T = 0.006\n", + " Site = 7 / 20 .. Mmpo = 126 DW = 0.00e+00 NNZ = 974 SPT = 0.9382 Tmvc = 0.001 T = 0.008\n", + " Site = 8 / 20 .. Mmpo = 151 DW = 0.00e+00 NNZ = 188 SPT = 0.9901 Tmvc = 0.001 T = 0.010\n", + " Site = 9 / 20 .. Mmpo = 148 DW = 0.00e+00 NNZ = 344 SPT = 0.9846 Tmvc = 0.001 T = 0.037\n", + " Site = 10 / 20 .. Mmpo = 177 DW = 0.00e+00 NNZ = 246 SPT = 0.9906 Tmvc = 0.001 T = 0.007\n", " Site = 11 / 20 .. Mmpo = 178 DW = 0.00e+00 NNZ = 402 SPT = 0.9872 Tmvc = 0.001 T = 0.006\n", - " Site = 12 / 20 .. Mmpo = 147 DW = 0.00e+00 NNZ = 306 SPT = 0.9883 Tmvc = 0.000 T = 0.006\n", - " Site = 13 / 20 .. Mmpo = 100 DW = 0.00e+00 NNZ = 242 SPT = 0.9835 Tmvc = 0.000 T = 0.009\n", - " Site = 14 / 20 .. Mmpo = 77 DW = 0.00e+00 NNZ = 150 SPT = 0.9805 Tmvc = 0.000 T = 0.006\n", - " Site = 15 / 20 .. Mmpo = 54 DW = 0.00e+00 NNZ = 94 SPT = 0.9774 Tmvc = 0.000 T = 0.004\n", - " Site = 16 / 20 .. Mmpo = 39 DW = 0.00e+00 NNZ = 82 SPT = 0.9611 Tmvc = 0.000 T = 0.008\n", + " Site = 12 / 20 .. Mmpo = 147 DW = 0.00e+00 NNZ = 306 SPT = 0.9883 Tmvc = 0.001 T = 0.005\n", + " Site = 13 / 20 .. Mmpo = 100 DW = 0.00e+00 NNZ = 242 SPT = 0.9835 Tmvc = 0.000 T = 0.004\n", + " Site = 14 / 20 .. Mmpo = 77 DW = 0.00e+00 NNZ = 150 SPT = 0.9805 Tmvc = 0.000 T = 0.004\n", + " Site = 15 / 20 .. Mmpo = 54 DW = 0.00e+00 NNZ = 94 SPT = 0.9774 Tmvc = 0.000 T = 0.003\n", + " Site = 16 / 20 .. Mmpo = 39 DW = 0.00e+00 NNZ = 82 SPT = 0.9611 Tmvc = 0.000 T = 0.003\n", " Site = 17 / 20 .. Mmpo = 20 DW = 0.00e+00 NNZ = 50 SPT = 0.9359 Tmvc = 0.000 T = 0.004\n", - " Site = 18 / 20 .. Mmpo = 7 DW = 0.00e+00 NNZ = 20 SPT = 0.8571 Tmvc = 0.000 T = 0.003\n", - " Site = 19 / 20 .. Mmpo = 1 DW = 0.00e+00 NNZ = 7 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", - "Ttotal = 0.140 Tmvc-total = 0.014 MPO bond dimension = 178 MaxDW = 0.00e+00\n", + " Site = 18 / 20 .. Mmpo = 7 DW = 0.00e+00 NNZ = 20 SPT = 0.8571 Tmvc = 0.000 T = 0.002\n", + " Site = 19 / 20 .. Mmpo = 1 DW = 0.00e+00 NNZ = 7 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", + "Ttotal = 0.134 Tmvc-total = 0.012 MPO bond dimension = 178 MaxDW = 0.00e+00\n", "NNZ = 3934 SIZE = 200866 SPT = 0.9804\n", "\n", - "Rank = 0 Ttotal = 0.204 MPO method = FastBipartite bond dimension = 178 NNZ = 3934 SIZE = 200866 SPT = 0.9804\n", + "Rank = 0 Ttotal = 0.186 MPO method = FastBipartite bond dimension = 178 NNZ = 3934 SIZE = 200866 SPT = 0.9804\n", "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.935 | E = -107.6541214061 | DW = 7.63e-08\n", + "Time elapsed = 0.861 | E = -107.6541216205 | DW = 7.62e-08\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.649 | E = -107.6541223348 | DE = -9.29e-07 | DW = 6.45e-08\n", + "Time elapsed = 1.471 | E = -107.6541223420 | DE = -7.21e-07 | DW = 6.45e-08\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.289 | E = -107.6541224347 | DE = -9.99e-08 | DW = 7.64e-08\n", + "Time elapsed = 2.030 | E = -107.6541224347 | DE = -9.27e-08 | DW = 7.64e-08\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.976 | E = -107.6541224347 | DE = 7.39e-13 | DW = 6.15e-08\n", + "Time elapsed = 2.597 | E = -107.6541224347 | DE = 8.81e-13 | DW = 6.15e-08\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 3.938 | E = -107.6541224379 | DE = -3.18e-09 | DW = 6.46e-11\n", + "Time elapsed = 3.707 | E = -107.6541224379 | DE = -3.17e-09 | DW = 6.46e-11\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 4.837 | E = -107.6541224379 | DE = -3.39e-11 | DW = 6.30e-20\n", + "Time elapsed = 5.003 | E = -107.6541224379 | DE = -3.37e-11 | DW = 7.34e-20\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 5.788 | E = -107.6541224379 | DE = 0.00e+00 | DW = 6.46e-11\n", + "Time elapsed = 6.306 | E = -107.6541224379 | DE = 0.00e+00 | DW = 6.46e-11\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 7.237 | E = -107.6541224379 | DE = 6.82e-13 | DW = 7.32e-20\n", + "Time elapsed = 7.088 | E = -107.6541224379 | DE = 7.11e-13 | DW = 7.10e-20\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - "Time elapsed = 8.093 | E = -107.6541224379 | DE = 2.84e-14 | DW = 6.78e-20\n", + "Time elapsed = 7.514 | E = -107.6541224379 | DE = 2.84e-14 | DW = 8.86e-20\n", "\n", - "DMRG energy = -107.654122437940956\n" + "DMRG energy = -107.654122437940984\n" ] } - ], - "source": [ - "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SGF, n_threads=4)\n", - "\n", - "g2e = driver.unpack_g2e(g2e, n_sites=ncas)\n", - "orb_sym = [orb_sym[i // 2] for i in range(len(orb_sym) * 2)]\n", - "n_sites = ncas * 2\n", - "\n", - "driver.initialize_system(n_sites=n_sites, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", - "\n", - "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=1)\n", - "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", - "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", - " thrds=thrds, iprint=1)\n", - "print('DMRG energy = %20.15f' % energy)" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "-auHBxs_5KpK" - }, "source": [ - "## The ``SZ`` Mode\n", + "## Read and Write FCIDUMP Files\n", "\n", - "Here we use the ``get_uhf_integrals`` function to get the integrals." - ] + "Instead of generating integrals (``h1e`` and ``g2e``) using ``pyscf``, we can also read these integrals from a FCIDUMP file (which can be generated using any of many other quantum chemistry packages) then perform DMRG. Additionally, we also provide methods to write the FCIDUMP file using the data in the ``h1e`` and ``g2e`` arrays.\n", + "\n", + "After invoking ``driver.read_fcidump``, the integrals and target state infomation can be obtained from ``driver.h1e``, ``driver.g2e``, ``driver.n_sites``, etc." + ], + "metadata": { + "id": "Tv12wxAZ-__F" + } }, { "cell_type": "code", - "execution_count": 6, + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", + "\n", + "# write integrals to file\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "driver.write_fcidump(h1e, g2e, ecore, filename='N2.STO3G.FCIDUMP', h1e_symm=True, pg='d2h')\n", + "\n", + "# read integrals from file\n", + "driver.read_fcidump(filename='N2.STO3G.FCIDUMP', pg='d2h')\n", + "driver.initialize_system(n_sites=driver.n_sites, n_elec=driver.n_elec,\n", + " spin=driver.spin, orb_sym=driver.orb_sym)\n", + "\n", + "bond_dims = [250] * 4 + [500] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + "thrds = [1e-10] * 8\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=driver.h1e, g2e=driver.g2e, ecore=driver.ecore, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "dQ_84lHJ3Zbw", - "outputId": "e368e46b-bb36-4536-b23e-cdd2944b35ef" + "id": "iPFRxRzO9MQe", + "outputId": "f1675633-7e1f-4ba5-a90f-05ebd44865db" }, + "execution_count": 6, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "integral symmetrize error = 1.6638583155958613e-13\n", + "symmetrize error = 2.3300000000000018e-14\n", + "integral symmetrize error = 0.0\n", "integral cutoff error = 0.0\n", - "mpo terms = 2778\n", - "\n", - "Build MPO | Nsites = 10 | Nterms = 2778 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", - " Site = 0 / 10 .. Mmpo = 26 DW = 0.00e+00 NNZ = 26 SPT = 0.0000 Tmvc = 0.002 T = 0.009\n", - " Site = 1 / 10 .. Mmpo = 66 DW = 0.00e+00 NNZ = 143 SPT = 0.9167 Tmvc = 0.001 T = 0.015\n", - " Site = 2 / 10 .. Mmpo = 110 DW = 0.00e+00 NNZ = 283 SPT = 0.9610 Tmvc = 0.002 T = 0.014\n", - " Site = 3 / 10 .. Mmpo = 138 DW = 0.00e+00 NNZ = 1023 SPT = 0.9326 Tmvc = 0.001 T = 0.012\n", - " Site = 4 / 10 .. Mmpo = 158 DW = 0.00e+00 NNZ = 535 SPT = 0.9755 Tmvc = 0.001 T = 0.011\n", - " Site = 5 / 10 .. Mmpo = 186 DW = 0.00e+00 NNZ = 463 SPT = 0.9842 Tmvc = 0.001 T = 0.008\n", - " Site = 6 / 10 .. Mmpo = 106 DW = 0.00e+00 NNZ = 415 SPT = 0.9790 Tmvc = 0.001 T = 0.007\n", - " Site = 7 / 10 .. Mmpo = 58 DW = 0.00e+00 NNZ = 163 SPT = 0.9735 Tmvc = 0.000 T = 0.004\n", - " Site = 8 / 10 .. Mmpo = 26 DW = 0.00e+00 NNZ = 87 SPT = 0.9423 Tmvc = 0.000 T = 0.003\n", - " Site = 9 / 10 .. Mmpo = 1 DW = 0.00e+00 NNZ = 26 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", - "Ttotal = 0.086 Tmvc-total = 0.009 MPO bond dimension = 186 MaxDW = 0.00e+00\n", - "NNZ = 3164 SIZE = 102772 SPT = 0.9692\n", - "\n", - "Rank = 0 Ttotal = 0.126 MPO method = FastBipartite bond dimension = 186 NNZ = 3164 SIZE = 102772 SPT = 0.9692\n", + "mpo terms = 1030\n", + "\n", + "Build MPO | Nsites = 10 | Nterms = 1030 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 10 .. Mmpo = 13 DW = 0.00e+00 NNZ = 13 SPT = 0.0000 Tmvc = 0.000 T = 0.011\n", + " Site = 1 / 10 .. Mmpo = 34 DW = 0.00e+00 NNZ = 63 SPT = 0.8575 Tmvc = 0.000 T = 0.018\n", + " Site = 2 / 10 .. Mmpo = 56 DW = 0.00e+00 NNZ = 121 SPT = 0.9364 Tmvc = 0.000 T = 0.032\n", + " Site = 3 / 10 .. Mmpo = 74 DW = 0.00e+00 NNZ = 373 SPT = 0.9100 Tmvc = 0.001 T = 0.007\n", + " Site = 4 / 10 .. Mmpo = 80 DW = 0.00e+00 NNZ = 269 SPT = 0.9546 Tmvc = 0.000 T = 0.004\n", + " Site = 5 / 10 .. Mmpo = 94 DW = 0.00e+00 NNZ = 169 SPT = 0.9775 Tmvc = 0.000 T = 0.012\n", + " Site = 6 / 10 .. Mmpo = 54 DW = 0.00e+00 NNZ = 181 SPT = 0.9643 Tmvc = 0.000 T = 0.004\n", + " Site = 7 / 10 .. Mmpo = 30 DW = 0.00e+00 NNZ = 73 SPT = 0.9549 Tmvc = 0.000 T = 0.007\n", + " Site = 8 / 10 .. Mmpo = 14 DW = 0.00e+00 NNZ = 41 SPT = 0.9024 Tmvc = 0.000 T = 0.004\n", + " Site = 9 / 10 .. Mmpo = 1 DW = 0.00e+00 NNZ = 14 SPT = 0.0000 Tmvc = 0.000 T = 0.004\n", + "Ttotal = 0.103 Tmvc-total = 0.003 MPO bond dimension = 94 MaxDW = 0.00e+00\n", + "NNZ = 1317 SIZE = 27073 SPT = 0.9514\n", + "\n", + "Rank = 0 Ttotal = 0.171 MPO method = FastBipartite bond dimension = 94 NNZ = 1317 SIZE = 27073 SPT = 0.9514\n", "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.823 | E = -107.6541224475 | DW = 4.14e-08\n", + "Time elapsed = 0.556 | E = -107.6541224475 | DW = 1.87e-10\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.336 | E = -107.6541224475 | DE = -1.26e-11 | DW = 5.18e-09\n", + "Time elapsed = 0.903 | E = -107.6541224475 | DE = -3.52e-12 | DW = 4.66e-20\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.794 | E = -107.6541224475 | DE = -9.66e-13 | DW = 4.14e-08\n", + "Time elapsed = 1.295 | E = -107.6541224475 | DE = -2.84e-14 | DW = 1.87e-10\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.282 | E = -107.6541224475 | DE = 1.22e-12 | DW = 5.37e-09\n", + "Time elapsed = 1.686 | E = -107.6541224475 | DE = -5.97e-13 | DW = 5.90e-20\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.835 | E = -107.6541224475 | DE = -9.95e-13 | DW = 3.60e-11\n", + "Time elapsed = 2.136 | E = -107.6541224475 | DE = -5.68e-14 | DW = 2.02e-20\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 3.405 | E = -107.6541224475 | DE = 9.09e-13 | DW = 1.69e-19\n", + "Time elapsed = 2.523 | E = -107.6541224475 | DE = 0.00e+00 | DW = 4.86e-20\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 3.992 | E = -107.6541224475 | DE = 2.84e-14 | DW = 3.60e-11\n", + "Time elapsed = 2.946 | E = -107.6541224475 | DE = 2.84e-14 | DW = 3.08e-20\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 4.568 | E = -107.6541224475 | DE = -1.22e-12 | DW = 1.63e-19\n", + "Time elapsed = 3.342 | E = -107.6541224475 | DE = -2.84e-14 | DW = 5.58e-20\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - "Time elapsed = 4.956 | E = -107.6541224475 | DE = -2.84e-14 | DW = 9.42e-20\n", + "Time elapsed = 3.607 | E = -107.6541224475 | DE = 0.00e+00 | DW = 2.33e-20\n", "\n", - "DMRG energy = -107.654122447524443\n" + "DMRG energy = -107.654122447524614\n" ] } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## The ``SZ`` Mode\n", + "\n", + "Here we use ``get_uhf_integrals`` function to get the integrals." ], + "metadata": { + "id": "-auHBxs_5KpK" + } + }, + { + "cell_type": "code", "source": [ "from pyscf import gto, scf\n", "\n", @@ -454,96 +517,85 @@ "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", " thrds=thrds, iprint=1)\n", "print('DMRG energy = %20.15f' % energy)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "xBptlc0J5m7x" - }, - "source": [ - "## The ``SGF`` Mode\n", - "\n", - "Here we use the ``get_ghf_integrals`` function to get the integrals." - ] - }, - { - "cell_type": "code", - "execution_count": 7, + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "4aRS3PNz5iCK", - "outputId": "795bdff5-b6aa-4215-f44e-3f905bf1111c" + "id": "dQ_84lHJ3Zbw", + "outputId": "15c0188e-5949-4520-d54b-299f88651a0c" }, + "execution_count": 7, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "integral symmetrize error = 2.195446592452528e-13\n", + "integral symmetrize error = 1.5366482610151817e-13\n", "integral cutoff error = 0.0\n", - "mpo terms = 5948\n", - "\n", - "Build MPO | Nsites = 20 | Nterms = 5948 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", - " Site = 0 / 20 .. Mmpo = 7 DW = 0.00e+00 NNZ = 7 SPT = 0.0000 Tmvc = 0.001 T = 0.024\n", - " Site = 1 / 20 .. Mmpo = 20 DW = 0.00e+00 NNZ = 19 SPT = 0.8643 Tmvc = 0.003 T = 0.016\n", - " Site = 2 / 20 .. Mmpo = 47 DW = 0.00e+00 NNZ = 49 SPT = 0.9479 Tmvc = 0.003 T = 0.012\n", - " Site = 3 / 20 .. Mmpo = 62 DW = 0.00e+00 NNZ = 251 SPT = 0.9139 Tmvc = 0.003 T = 0.015\n", - " Site = 4 / 20 .. Mmpo = 81 DW = 0.00e+00 NNZ = 269 SPT = 0.9464 Tmvc = 0.003 T = 0.015\n", - " Site = 5 / 20 .. Mmpo = 104 DW = 0.00e+00 NNZ = 355 SPT = 0.9579 Tmvc = 0.003 T = 0.013\n", - " Site = 6 / 20 .. Mmpo = 129 DW = 0.00e+00 NNZ = 563 SPT = 0.9580 Tmvc = 0.004 T = 0.021\n", - " Site = 7 / 20 .. Mmpo = 126 DW = 0.00e+00 NNZ = 2316 SPT = 0.8575 Tmvc = 0.002 T = 0.021\n", - " Site = 8 / 20 .. Mmpo = 155 DW = 0.00e+00 NNZ = 214 SPT = 0.9890 Tmvc = 0.004 T = 0.027\n", - " Site = 9 / 20 .. Mmpo = 148 DW = 0.00e+00 NNZ = 708 SPT = 0.9691 Tmvc = 0.003 T = 0.013\n", - " Site = 10 / 20 .. Mmpo = 181 DW = 0.00e+00 NNZ = 398 SPT = 0.9851 Tmvc = 0.001 T = 0.021\n", - " Site = 11 / 20 .. Mmpo = 178 DW = 0.00e+00 NNZ = 718 SPT = 0.9777 Tmvc = 0.004 T = 0.023\n", - " Site = 12 / 20 .. Mmpo = 147 DW = 0.00e+00 NNZ = 496 SPT = 0.9810 Tmvc = 0.001 T = 0.031\n", - " Site = 13 / 20 .. Mmpo = 100 DW = 0.00e+00 NNZ = 410 SPT = 0.9721 Tmvc = 0.001 T = 0.006\n", - " Site = 14 / 20 .. Mmpo = 77 DW = 0.00e+00 NNZ = 254 SPT = 0.9670 Tmvc = 0.000 T = 0.005\n", - " Site = 15 / 20 .. Mmpo = 54 DW = 0.00e+00 NNZ = 118 SPT = 0.9716 Tmvc = 0.001 T = 0.004\n", - " Site = 16 / 20 .. Mmpo = 39 DW = 0.00e+00 NNZ = 124 SPT = 0.9411 Tmvc = 0.000 T = 0.004\n", - " Site = 17 / 20 .. Mmpo = 20 DW = 0.00e+00 NNZ = 74 SPT = 0.9051 Tmvc = 0.000 T = 0.003\n", - " Site = 18 / 20 .. Mmpo = 7 DW = 0.00e+00 NNZ = 20 SPT = 0.8571 Tmvc = 0.000 T = 0.003\n", - " Site = 19 / 20 .. Mmpo = 1 DW = 0.00e+00 NNZ = 7 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", - "Ttotal = 0.282 Tmvc-total = 0.037 MPO bond dimension = 181 MaxDW = 0.00e+00\n", - "NNZ = 7370 SIZE = 204350 SPT = 0.9639\n", - "\n", - "Rank = 0 Ttotal = 0.397 MPO method = FastBipartite bond dimension = 181 NNZ = 7370 SIZE = 204350 SPT = 0.9639\n", + "mpo terms = 2778\n", + "\n", + "Build MPO | Nsites = 10 | Nterms = 2778 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 10 .. Mmpo = 26 DW = 0.00e+00 NNZ = 26 SPT = 0.0000 Tmvc = 0.001 T = 0.018\n", + " Site = 1 / 10 .. Mmpo = 66 DW = 0.00e+00 NNZ = 143 SPT = 0.9167 Tmvc = 0.001 T = 0.014\n", + " Site = 2 / 10 .. Mmpo = 110 DW = 0.00e+00 NNZ = 283 SPT = 0.9610 Tmvc = 0.001 T = 0.012\n", + " Site = 3 / 10 .. Mmpo = 138 DW = 0.00e+00 NNZ = 1023 SPT = 0.9326 Tmvc = 0.002 T = 0.015\n", + " Site = 4 / 10 .. Mmpo = 158 DW = 0.00e+00 NNZ = 535 SPT = 0.9755 Tmvc = 0.001 T = 0.012\n", + " Site = 5 / 10 .. Mmpo = 186 DW = 0.00e+00 NNZ = 463 SPT = 0.9842 Tmvc = 0.001 T = 0.007\n", + " Site = 6 / 10 .. Mmpo = 106 DW = 0.00e+00 NNZ = 415 SPT = 0.9790 Tmvc = 0.000 T = 0.006\n", + " Site = 7 / 10 .. Mmpo = 58 DW = 0.00e+00 NNZ = 163 SPT = 0.9735 Tmvc = 0.000 T = 0.004\n", + " Site = 8 / 10 .. Mmpo = 26 DW = 0.00e+00 NNZ = 87 SPT = 0.9423 Tmvc = 0.000 T = 0.003\n", + " Site = 9 / 10 .. Mmpo = 1 DW = 0.00e+00 NNZ = 26 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", + "Ttotal = 0.093 Tmvc-total = 0.007 MPO bond dimension = 186 MaxDW = 0.00e+00\n", + "NNZ = 3164 SIZE = 102772 SPT = 0.9692\n", + "\n", + "Rank = 0 Ttotal = 0.141 MPO method = FastBipartite bond dimension = 186 NNZ = 3164 SIZE = 102772 SPT = 0.9692\n", "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.170 | E = -107.6541220534 | DW = 7.49e-08\n", + "Time elapsed = 0.783 | E = -107.6541224475 | DW = 4.14e-08\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 4.014 | E = -107.6541223446 | DE = -2.91e-07 | DW = 6.92e-08\n", + "Time elapsed = 1.233 | E = -107.6541224475 | DE = -1.78e-11 | DW = 5.23e-09\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 5.890 | E = -107.6541224348 | DE = -9.02e-08 | DW = 7.50e-08\n", + "Time elapsed = 1.662 | E = -107.6541224475 | DE = -1.19e-12 | DW = 4.14e-08\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 7.570 | E = -107.6541224348 | DE = 7.96e-13 | DW = 6.60e-08\n", + "Time elapsed = 2.104 | E = -107.6541224475 | DE = 1.28e-12 | DW = 5.02e-09\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 9.612 | E = -107.6541224379 | DE = -3.16e-09 | DW = 6.35e-11\n", + "Time elapsed = 2.629 | E = -107.6541224475 | DE = -6.82e-13 | DW = 3.61e-11\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 11.483 | E = -107.6541224379 | DE = 4.26e-13 | DW = 7.23e-20\n", + "Time elapsed = 3.139 | E = -107.6541224475 | DE = 8.53e-13 | DW = 1.92e-19\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 13.573 | E = -107.6541224379 | DE = 0.00e+00 | DW = 6.35e-11\n", + "Time elapsed = 3.672 | E = -107.6541224475 | DE = 0.00e+00 | DW = 3.60e-11\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 15.436 | E = -107.6541224379 | DE = -2.47e-12 | DW = 7.77e-20\n", + "Time elapsed = 4.173 | E = -107.6541224475 | DE = -1.68e-12 | DW = 2.25e-19\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - "Time elapsed = 16.106 | E = -107.6541224379 | DE = -2.84e-14 | DW = 6.27e-20\n", + "Time elapsed = 4.529 | E = -107.6541224475 | DE = 2.84e-14 | DW = 7.36e-20\n", "\n", - "DMRG energy = -107.654122437941297\n" + "DMRG energy = -107.654122447524529\n" ] } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## The ``SGF`` Mode\n", + "\n", + "Here we use ``get_ghf_integrals`` function to get the integrals." ], + "metadata": { + "id": "xBptlc0J5m7x" + } + }, + { + "cell_type": "code", "source": [ "from pyscf import gto, scf\n", "\n", @@ -560,96 +612,204 @@ "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", " thrds=thrds, iprint=1)\n", "print('DMRG energy = %20.15f' % energy)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4aRS3PNz5iCK", + "outputId": "5be98ef4-5317-4af5-de6f-a52896f3d48c" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "integral symmetrize error = 2.1082787907764326e-13\n", + "integral cutoff error = 0.0\n", + "mpo terms = 5914\n", + "\n", + "Build MPO | Nsites = 20 | Nterms = 5914 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 20 .. Mmpo = 7 DW = 0.00e+00 NNZ = 7 SPT = 0.0000 Tmvc = 0.001 T = 0.007\n", + " Site = 1 / 20 .. Mmpo = 20 DW = 0.00e+00 NNZ = 19 SPT = 0.8643 Tmvc = 0.001 T = 0.009\n", + " Site = 2 / 20 .. Mmpo = 47 DW = 0.00e+00 NNZ = 49 SPT = 0.9479 Tmvc = 0.002 T = 0.010\n", + " Site = 3 / 20 .. Mmpo = 62 DW = 0.00e+00 NNZ = 251 SPT = 0.9139 Tmvc = 0.002 T = 0.013\n", + " Site = 4 / 20 .. Mmpo = 81 DW = 0.00e+00 NNZ = 273 SPT = 0.9456 Tmvc = 0.004 T = 0.019\n", + " Site = 5 / 20 .. Mmpo = 104 DW = 0.00e+00 NNZ = 357 SPT = 0.9576 Tmvc = 0.003 T = 0.013\n", + " Site = 6 / 20 .. Mmpo = 129 DW = 0.00e+00 NNZ = 563 SPT = 0.9580 Tmvc = 0.001 T = 0.012\n", + " Site = 7 / 20 .. Mmpo = 126 DW = 0.00e+00 NNZ = 2318 SPT = 0.8574 Tmvc = 0.001 T = 0.014\n", + " Site = 8 / 20 .. Mmpo = 155 DW = 0.00e+00 NNZ = 208 SPT = 0.9893 Tmvc = 0.002 T = 0.012\n", + " Site = 9 / 20 .. Mmpo = 148 DW = 0.00e+00 NNZ = 686 SPT = 0.9701 Tmvc = 0.001 T = 0.014\n", + " Site = 10 / 20 .. Mmpo = 181 DW = 0.00e+00 NNZ = 388 SPT = 0.9855 Tmvc = 0.001 T = 0.010\n", + " Site = 11 / 20 .. Mmpo = 178 DW = 0.00e+00 NNZ = 720 SPT = 0.9777 Tmvc = 0.001 T = 0.011\n", + " Site = 12 / 20 .. Mmpo = 147 DW = 0.00e+00 NNZ = 496 SPT = 0.9810 Tmvc = 0.001 T = 0.006\n", + " Site = 13 / 20 .. Mmpo = 100 DW = 0.00e+00 NNZ = 412 SPT = 0.9720 Tmvc = 0.000 T = 0.004\n", + " Site = 14 / 20 .. Mmpo = 77 DW = 0.00e+00 NNZ = 234 SPT = 0.9696 Tmvc = 0.000 T = 0.005\n", + " Site = 15 / 20 .. Mmpo = 54 DW = 0.00e+00 NNZ = 118 SPT = 0.9716 Tmvc = 0.000 T = 0.003\n", + " Site = 16 / 20 .. Mmpo = 39 DW = 0.00e+00 NNZ = 124 SPT = 0.9411 Tmvc = 0.000 T = 0.003\n", + " Site = 17 / 20 .. Mmpo = 20 DW = 0.00e+00 NNZ = 76 SPT = 0.9026 Tmvc = 0.000 T = 0.004\n", + " Site = 18 / 20 .. Mmpo = 7 DW = 0.00e+00 NNZ = 22 SPT = 0.8429 Tmvc = 0.000 T = 0.003\n", + " Site = 19 / 20 .. Mmpo = 1 DW = 0.00e+00 NNZ = 7 SPT = 0.0000 Tmvc = 0.000 T = 0.003\n", + "Ttotal = 0.176 Tmvc-total = 0.023 MPO bond dimension = 181 MaxDW = 0.00e+00\n", + "NNZ = 7328 SIZE = 204350 SPT = 0.9641\n", + "\n", + "Rank = 0 Ttotal = 0.269 MPO method = FastBipartite bond dimension = 181 NNZ = 7328 SIZE = 204350 SPT = 0.9641\n", + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.012 | E = -107.6541220013 | DW = 8.06e-08\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.754 | E = -107.6541223288 | DE = -3.27e-07 | DW = 7.52e-08\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.474 | E = -107.6541224307 | DE = -1.02e-07 | DW = 8.06e-08\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.210 | E = -107.6541224307 | DE = 1.14e-12 | DW = 6.96e-08\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 4.149 | E = -107.6541224313 | DE = -5.22e-10 | DW = 8.65e-11\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 5.121 | E = -107.6541224313 | DE = 1.65e-12 | DW = 7.88e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 6.140 | E = -107.6541224313 | DE = -5.68e-14 | DW = 8.65e-11\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 7.097 | E = -107.6541224313 | DE = -2.47e-12 | DW = 7.25e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 7.676 | E = -107.6541224313 | DE = 0.00e+00 | DW = 8.25e-20\n", + "\n", + "DMRG energy = -107.654122431266543\n" + ] + } ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "yM7OGJQV556O" - }, "source": [ - "## Relativistic DMRG\n", + "## The ``SGB`` Mode\n", "\n", - "For relativistic DMRG, we use the ``get_dhf_integrals`` function to get the integrals. We use the ``SGFCPX`` Mode in ``block2`` to execute DMRG. Note that the integrals, MPO, and MPS will all contain complex numbers in this mode." - ] + "In this section, we try to solve the problem by first transfroming the model into a qubit (spin) model. The code will automatically use Jordan-Wigner transform to change the fermionic operators in the Hamiltonian into spin operators, before constructing the MPO.\n", + "\n", + "To use the ``SGB`` mode for ab initio systems, remember to add the ``heis_twos=1`` parameter (indicating the 1/2 spin at each site) in ``driver.initialize_system``." + ], + "metadata": { + "id": "R_uMrwZk_eY9" + } }, { "cell_type": "code", - "execution_count": 8, + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.GHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_ghf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SGB, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym, heis_twos=1)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "16tFcwdw50gU", - "outputId": "f9f4d570-d26b-4fa9-8050-44d3455c9ce2" + "id": "4YxKU9N-_xom", + "outputId": "2c2bc416-4f57-45a5-9f97-6325140f46ac" }, + "execution_count": 9, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "integral symmetrize error = 0.0\n", - "integral cutoff error = 2.9170571933900254e-20\n", - "mpo terms = 26566\n", - "\n", - "Build MPO | Nsites = 20 | Nterms = 26566 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", - " Site = 0 / 20 .. Mmpo = 9 DW = 0.00e+00 NNZ = 9 SPT = 0.0000 Tmvc = 0.003 T = 0.013\n", - " Site = 1 / 20 .. Mmpo = 28 DW = 0.00e+00 NNZ = 23 SPT = 0.9087 Tmvc = 0.003 T = 0.018\n", - " Site = 2 / 20 .. Mmpo = 63 DW = 0.00e+00 NNZ = 320 SPT = 0.8186 Tmvc = 0.006 T = 0.026\n", - " Site = 3 / 20 .. Mmpo = 78 DW = 0.00e+00 NNZ = 440 SPT = 0.9105 Tmvc = 0.005 T = 0.024\n", - " Site = 4 / 20 .. Mmpo = 97 DW = 0.00e+00 NNZ = 605 SPT = 0.9200 Tmvc = 0.005 T = 0.025\n", - " Site = 5 / 20 .. Mmpo = 120 DW = 0.00e+00 NNZ = 728 SPT = 0.9375 Tmvc = 0.007 T = 0.029\n", - " Site = 6 / 20 .. Mmpo = 147 DW = 0.00e+00 NNZ = 992 SPT = 0.9438 Tmvc = 0.012 T = 0.041\n", - " Site = 7 / 20 .. Mmpo = 178 DW = 0.00e+00 NNZ = 1163 SPT = 0.9556 Tmvc = 0.008 T = 0.033\n", - " Site = 8 / 20 .. Mmpo = 213 DW = 0.00e+00 NNZ = 1971 SPT = 0.9480 Tmvc = 0.007 T = 0.031\n", - " Site = 9 / 20 .. Mmpo = 252 DW = 0.00e+00 NNZ = 2107 SPT = 0.9607 Tmvc = 0.007 T = 0.025\n", - " Site = 10 / 20 .. Mmpo = 213 DW = 0.00e+00 NNZ = 11022 SPT = 0.7947 Tmvc = 0.012 T = 0.055\n", - " Site = 11 / 20 .. Mmpo = 178 DW = 0.00e+00 NNZ = 1717 SPT = 0.9547 Tmvc = 0.003 T = 0.018\n", - " Site = 12 / 20 .. Mmpo = 147 DW = 0.00e+00 NNZ = 1641 SPT = 0.9373 Tmvc = 0.002 T = 0.015\n", - " Site = 13 / 20 .. Mmpo = 120 DW = 0.00e+00 NNZ = 1197 SPT = 0.9321 Tmvc = 0.002 T = 0.014\n", - " Site = 14 / 20 .. Mmpo = 97 DW = 0.00e+00 NNZ = 859 SPT = 0.9262 Tmvc = 0.002 T = 0.011\n", - " Site = 15 / 20 .. Mmpo = 78 DW = 0.00e+00 NNZ = 682 SPT = 0.9099 Tmvc = 0.001 T = 0.008\n", - " Site = 16 / 20 .. Mmpo = 63 DW = 0.00e+00 NNZ = 328 SPT = 0.9333 Tmvc = 0.001 T = 0.006\n", - " Site = 17 / 20 .. Mmpo = 28 DW = 0.00e+00 NNZ = 238 SPT = 0.8651 Tmvc = 0.000 T = 0.004\n", - " Site = 18 / 20 .. Mmpo = 9 DW = 0.00e+00 NNZ = 34 SPT = 0.8651 Tmvc = 0.000 T = 0.003\n", - " Site = 19 / 20 .. Mmpo = 1 DW = 0.00e+00 NNZ = 9 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", - "Ttotal = 0.403 Tmvc-total = 0.086 MPO bond dimension = 252 MaxDW = 0.00e+00\n", - "NNZ = 26085 SIZE = 323082 SPT = 0.9193\n", + "integral symmetrize error = 2.140864794887064e-13\n", + "integral cutoff error = 0.0\n", + "mpo terms = 5984\n", "\n", - "Rank = 0 Ttotal = 0.500 MPO method = FastBipartite bond dimension = 252 NNZ = 26085 SIZE = 323082 SPT = 0.9193\n", + "Build MPO | Nsites = 20 | Nterms = 5984 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 20 .. Mmpo = 7 DW = 0.00e+00 NNZ = 7 SPT = 0.0000 Tmvc = 0.001 T = 0.006\n", + " Site = 1 / 20 .. Mmpo = 20 DW = 0.00e+00 NNZ = 19 SPT = 0.8643 Tmvc = 0.001 T = 0.009\n", + " Site = 2 / 20 .. Mmpo = 47 DW = 0.00e+00 NNZ = 49 SPT = 0.9479 Tmvc = 0.002 T = 0.011\n", + " Site = 3 / 20 .. Mmpo = 62 DW = 0.00e+00 NNZ = 251 SPT = 0.9139 Tmvc = 0.002 T = 0.014\n", + " Site = 4 / 20 .. Mmpo = 81 DW = 0.00e+00 NNZ = 273 SPT = 0.9456 Tmvc = 0.002 T = 0.014\n", + " Site = 5 / 20 .. Mmpo = 104 DW = 0.00e+00 NNZ = 357 SPT = 0.9576 Tmvc = 0.002 T = 0.014\n", + " Site = 6 / 20 .. Mmpo = 129 DW = 0.00e+00 NNZ = 563 SPT = 0.9580 Tmvc = 0.002 T = 0.016\n", + " Site = 7 / 20 .. Mmpo = 126 DW = 0.00e+00 NNZ = 2316 SPT = 0.8575 Tmvc = 0.002 T = 0.015\n", + " Site = 8 / 20 .. Mmpo = 155 DW = 0.00e+00 NNZ = 214 SPT = 0.9890 Tmvc = 0.001 T = 0.008\n", + " Site = 9 / 20 .. Mmpo = 148 DW = 0.00e+00 NNZ = 710 SPT = 0.9690 Tmvc = 0.001 T = 0.012\n", + " Site = 10 / 20 .. Mmpo = 181 DW = 0.00e+00 NNZ = 398 SPT = 0.9851 Tmvc = 0.001 T = 0.013\n", + " Site = 11 / 20 .. Mmpo = 178 DW = 0.00e+00 NNZ = 720 SPT = 0.9777 Tmvc = 0.001 T = 0.013\n", + " Site = 12 / 20 .. Mmpo = 147 DW = 0.00e+00 NNZ = 496 SPT = 0.9810 Tmvc = 0.001 T = 0.007\n", + " Site = 13 / 20 .. Mmpo = 100 DW = 0.00e+00 NNZ = 412 SPT = 0.9720 Tmvc = 0.000 T = 0.005\n", + " Site = 14 / 20 .. Mmpo = 77 DW = 0.00e+00 NNZ = 254 SPT = 0.9670 Tmvc = 0.000 T = 0.006\n", + " Site = 15 / 20 .. Mmpo = 54 DW = 0.00e+00 NNZ = 120 SPT = 0.9711 Tmvc = 0.000 T = 0.004\n", + " Site = 16 / 20 .. Mmpo = 39 DW = 0.00e+00 NNZ = 124 SPT = 0.9411 Tmvc = 0.000 T = 0.003\n", + " Site = 17 / 20 .. Mmpo = 20 DW = 0.00e+00 NNZ = 76 SPT = 0.9026 Tmvc = 0.000 T = 0.003\n", + " Site = 18 / 20 .. Mmpo = 7 DW = 0.00e+00 NNZ = 22 SPT = 0.8429 Tmvc = 0.000 T = 0.002\n", + " Site = 19 / 20 .. Mmpo = 1 DW = 0.00e+00 NNZ = 7 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", + "Ttotal = 0.177 Tmvc-total = 0.018 MPO bond dimension = 181 MaxDW = 0.00e+00\n", + "NNZ = 7388 SIZE = 204350 SPT = 0.9638\n", + "\n", + "Rank = 0 Ttotal = 0.249 MPO method = FastBipartite bond dimension = 181 NNZ = 7388 SIZE = 204350 SPT = 0.9638\n", "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 27.037 | E = -107.6929206223 | DW = 6.66e-10\n", + "Time elapsed = 1.079 | E = -107.6541211530 | DW = 6.36e-08\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 39.215 | E = -107.6929209453 | DE = -3.23e-07 | DW = 7.27e-10\n", + "Time elapsed = 1.838 | E = -107.6541223677 | DE = -1.21e-06 | DW = 5.89e-08\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 49.219 | E = -107.6929209492 | DE = -3.91e-09 | DW = 2.32e-10\n", + "Time elapsed = 2.571 | E = -107.6541224370 | DE = -6.93e-08 | DW = 6.35e-08\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 57.774 | E = -107.6929209492 | DE = -3.98e-13 | DW = 7.32e-10\n", + "Time elapsed = 3.284 | E = -107.6541224370 | DE = 4.26e-13 | DW = 5.71e-08\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 75.576 | E = -107.6929209492 | DE = -5.12e-13 | DW = 6.34e-20\n", + "Time elapsed = 4.581 | E = -107.6541224379 | DE = -9.81e-10 | DW = 9.19e-11\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 91.974 | E = -107.6929209492 | DE = 2.84e-14 | DW = 1.05e-19\n", + "Time elapsed = 6.311 | E = -107.6541224379 | DE = 1.96e-12 | DW = 6.93e-20\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 112.150 | E = -107.6929209492 | DE = -2.84e-14 | DW = 7.11e-20\n", + "Time elapsed = 7.757 | E = -107.6541224379 | DE = -5.68e-14 | DW = 9.19e-11\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 130.356 | E = -107.6929209492 | DE = -2.84e-14 | DW = 1.12e-19\n", + "Time elapsed = 8.724 | E = -107.6541224379 | DE = -1.88e-12 | DW = 7.39e-20\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - "Time elapsed = 138.078 | E = -107.6929209492 | DE = 2.84e-14 | DW = 7.25e-20\n", + "Time elapsed = 9.323 | E = -107.6541224379 | DE = -2.84e-14 | DW = 8.26e-20\n", "\n", - "DMRG energy = -107.692920949169959\n" + "DMRG energy = -107.654122437940899\n" ] } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Relativistic DMRG\n", + "\n", + "For relativistic DMRG, we use ``get_dhf_integrals`` function to get the integrals. We use the ``SGFCPX`` Mode in ``block2`` to execute DMRG. Note that the integrals, MPO, and MPS will all contain complex numbers in this mode.\n", + "\n", + "The ``symm_type`` parameter ``SymmetryTypes.SGFCPX`` can also be written as ``SymmetryTypes.SGF | SymmetryTypes.CPX``." ], + "metadata": { + "id": "yM7OGJQV556O" + } + }, + { + "cell_type": "code", "source": [ "from pyscf import gto, scf\n", "\n", @@ -666,229 +826,619 @@ "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", " thrds=thrds, iprint=1)\n", "print('DMRG energy = %20.15f' % energy)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "r8wd-wIq7pKV" - }, - "source": [ - "## Expectation and N-Particle Density Matrix" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "Q2jepYQu7vOW" - }, - "source": [ - "Once the optimized MPS is obtained, we can compute the expectation value on it, including its norm, the energy expectation, $\\langle S^2 \\rangle$, N-particle density matrix, or any operator that can be constructed as an MPO.\n", - "\n", - "In this example, we compute the triplet state." - ] - }, - { - "cell_type": "code", - "execution_count": 9, + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "sYihDUiI6mTn", - "outputId": "838d06c0-f8d4-4cc6-c181-32b9561c5df9" + "id": "16tFcwdw50gU", + "outputId": "747910db-d6fd-4239-a496-7b7495fd8d6e" }, + "execution_count": 10, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ + "integral symmetrize error = 0.0\n", + "integral cutoff error = 1.5501285354427146e-20\n", + "mpo terms = 44346\n", + "\n", + "Build MPO | Nsites = 20 | Nterms = 44346 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 20 .. Mmpo = 9 DW = 0.00e+00 NNZ = 9 SPT = 0.0000 Tmvc = 0.004 T = 0.017\n", + " Site = 1 / 20 .. Mmpo = 28 DW = 0.00e+00 NNZ = 23 SPT = 0.9087 Tmvc = 0.005 T = 0.025\n", + " Site = 2 / 20 .. Mmpo = 63 DW = 0.00e+00 NNZ = 404 SPT = 0.7710 Tmvc = 0.006 T = 0.023\n", + " Site = 3 / 20 .. Mmpo = 78 DW = 0.00e+00 NNZ = 592 SPT = 0.8795 Tmvc = 0.006 T = 0.028\n", + " Site = 4 / 20 .. Mmpo = 97 DW = 0.00e+00 NNZ = 932 SPT = 0.8768 Tmvc = 0.010 T = 0.035\n", + " Site = 5 / 20 .. Mmpo = 120 DW = 0.00e+00 NNZ = 1315 SPT = 0.8870 Tmvc = 0.008 T = 0.030\n", + " Site = 6 / 20 .. Mmpo = 147 DW = 0.00e+00 NNZ = 1722 SPT = 0.9024 Tmvc = 0.008 T = 0.033\n", + " Site = 7 / 20 .. Mmpo = 178 DW = 0.00e+00 NNZ = 2142 SPT = 0.9181 Tmvc = 0.012 T = 0.038\n", + " Site = 8 / 20 .. Mmpo = 213 DW = 0.00e+00 NNZ = 2597 SPT = 0.9315 Tmvc = 0.009 T = 0.038\n", + " Site = 9 / 20 .. Mmpo = 252 DW = 0.00e+00 NNZ = 2985 SPT = 0.9444 Tmvc = 0.011 T = 0.040\n", + " Site = 10 / 20 .. Mmpo = 213 DW = 0.00e+00 NNZ = 17958 SPT = 0.6654 Tmvc = 0.014 T = 0.068\n", + " Site = 11 / 20 .. Mmpo = 178 DW = 0.00e+00 NNZ = 2590 SPT = 0.9317 Tmvc = 0.003 T = 0.020\n", + " Site = 12 / 20 .. Mmpo = 147 DW = 0.00e+00 NNZ = 2184 SPT = 0.9165 Tmvc = 0.003 T = 0.016\n", + " Site = 13 / 20 .. Mmpo = 120 DW = 0.00e+00 NNZ = 1783 SPT = 0.8989 Tmvc = 0.002 T = 0.019\n", + " Site = 14 / 20 .. Mmpo = 97 DW = 0.00e+00 NNZ = 1397 SPT = 0.8800 Tmvc = 0.002 T = 0.013\n", + " Site = 15 / 20 .. Mmpo = 78 DW = 0.00e+00 NNZ = 1008 SPT = 0.8668 Tmvc = 0.001 T = 0.010\n", + " Site = 16 / 20 .. Mmpo = 63 DW = 0.00e+00 NNZ = 653 SPT = 0.8671 Tmvc = 0.001 T = 0.010\n", + " Site = 17 / 20 .. Mmpo = 28 DW = 0.00e+00 NNZ = 494 SPT = 0.7200 Tmvc = 0.001 T = 0.007\n", + " Site = 18 / 20 .. Mmpo = 9 DW = 0.00e+00 NNZ = 26 SPT = 0.8968 Tmvc = 0.000 T = 0.003\n", + " Site = 19 / 20 .. Mmpo = 1 DW = 0.00e+00 NNZ = 9 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", + "Ttotal = 0.475 Tmvc-total = 0.105 MPO bond dimension = 252 MaxDW = 0.00e+00\n", + "NNZ = 40823 SIZE = 323082 SPT = 0.8736\n", + "\n", + "Rank = 0 Ttotal = 0.567 MPO method = FastBipartite bond dimension = 252 NNZ = 40823 SIZE = 323082 SPT = 0.8736\n", "\n", "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.632 | E = -106.9391328597 | DW = 3.38e-10\n", + "Time elapsed = 23.177 | E = -107.6929206929 | DW = 4.40e-10\n", "\n", "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 0.963 | E = -106.9391328597 | DE = -4.92e-12 | DW = 8.92e-19\n", + "Time elapsed = 35.078 | E = -107.6929209450 | DE = -2.52e-07 | DW = 8.35e-10\n", "\n", "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.267 | E = -106.9391328597 | DE = 0.00e+00 | DW = 3.38e-10\n", + "Time elapsed = 45.366 | E = -107.6929209492 | DE = -4.14e-09 | DW = 2.09e-10\n", "\n", "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.599 | E = -106.9391328597 | DE = 1.71e-13 | DW = 1.20e-18\n", + "Time elapsed = 53.524 | E = -107.6929209492 | DE = -3.41e-13 | DW = 8.36e-10\n", "\n", "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 1.964 | E = -106.9391328597 | DE = 0.00e+00 | DW = 1.12e-16\n", + "Time elapsed = 71.358 | E = -107.6929209492 | DE = -4.26e-13 | DW = 6.57e-20\n", "\n", "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.288 | E = -106.9391328597 | DE = 8.53e-14 | DW = 1.23e-19\n", + "Time elapsed = 86.911 | E = -107.6929209492 | DE = 2.84e-14 | DW = 1.18e-19\n", "\n", "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.664 | E = -106.9391328597 | DE = 2.84e-14 | DW = 1.12e-16\n", + "Time elapsed = 103.723 | E = -107.6929209492 | DE = 2.84e-14 | DW = 7.77e-20\n", "\n", "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", - "Time elapsed = 2.984 | E = -106.9391328597 | DE = -2.84e-14 | DW = 1.23e-19\n", + "Time elapsed = 119.169 | E = -107.6929209492 | DE = -2.84e-14 | DW = 1.19e-19\n", "\n", "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", - "Time elapsed = 3.236 | E = -106.9391328597 | DE = 0.00e+00 | DW = 1.72e-20\n", + "Time elapsed = 128.099 | E = -107.6929209492 | DE = 2.84e-14 | DW = 8.33e-20\n", "\n", - "DMRG energy = -106.939132859666685\n", - "Norm = 0.999999999999999\n", - "Energy expectation = -106.939132859666685\n", - " expectation = 2.000000000000000\n" + "DMRG energy = -107.692920949170755\n" ] } - ], - "source": [ - "from pyscf import gto, scf\n", - "\n", - "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", - "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", - "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", - " ncore=0, ncas=None, g2e_symm=8)\n", - "\n", - "spin = 2\n", - "\n", - "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", - "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", - "\n", - "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", - "\n", - "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", - "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", - " thrds=thrds, iprint=1)\n", - "print('DMRG energy = %20.15f' % energy)\n", - "\n", - "impo = driver.get_identity_mpo()\n", - "\n", - "norm = driver.expectation(ket, impo, ket)\n", - "ener = driver.expectation(ket, mpo, ket)\n", - "\n", - "print('Norm = %20.15f' % norm)\n", - "print('Energy expectation = %20.15f' % (ener / norm))\n", - "\n", - "# [ in spin-adapted mode this is always S(S+1) ]\n", - "ssq_mpo = driver.get_spin_square_mpo(iprint=0)\n", - "ssq = driver.expectation(ket, ssq_mpo, ket)\n", - "print(' expectation = %20.15f' % (ssq / norm))" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "5uw83pUS9hkY" - }, "source": [ - "We can also evaluate expectation of arbitray operator such as the occupancy in the first orbital\n", + "## The ``LZ`` Mode\n", "\n", - "$$\n", - "\\hat{N}_0 = a^\\dagger_{0\\alpha} a_{0\\alpha} + a^\\dagger_{0\\beta} a_{0\\beta}\n", - "= \\sqrt{2} \\big(a_0^\\dagger\\big)^{[1/2]} \\otimes_{[0]} \\big(a_0\\big)^{[1/2]}\n", - "$$\n", + "For diatomic molecules, we can set symmetry ``dooh`` in ``pyscf``, and then use ``itg.lz_symm_adaptation`` to adapt the atomic orbitals for the ``LZ`` symmetry before running Hartree-Fock. Then we can use the ``LZ`` modes in ``block2`` to perform DMRG.\n", "\n", - "For the usage of ``add_term`` function, please have a look at the [Hubbard - Build Hamiltonian (SZ)](https://block2.readthedocs.io/en/latest/tutorial/hubbard.html#Build-Hamiltonian) and [Hubbard - Build Hamiltonian (SU2)](https://block2.readthedocs.io/en/latest/tutorial/hubbard.html#id2) page." - ] + "The ``LZ`` mode can be combined with ``SU2``, ``SZ`` or ``SGF`` spin symmetries, and the ``SAny`` prefix in ``SymmetryTypes``. To activate the ``SAny`` prefix, the ``block2`` code needs to be compiled with the ``-DUSE_SANY=ON`` option (this option is ON by default in the ``pip`` precompiled binaries). Optionally, when ``-DUSE_SANY=ON``, one can also set ``-DUSE_SG=OFF -DUSE_SU2SZ=OFF`` to disable the normal ``SU2/SZ/SGF`` modes. One can use ``SymmetryTypes.SAnySU2/SymmetryTypes.SAnySZ/SymmetryTypes.SAnySGF`` instead for normal symmetries (with some limitations) when ``-DUSE_SG=OFF -DUSE_SU2SZ=OFF`` is used.\n", + "\n", + "With ``SU2`` (spin-adapted DMRG):" + ], + "metadata": { + "id": "xZEMwvUYrfXT" + } }, { "cell_type": "code", - "execution_count": 10, + "source": [ + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"dooh\", verbose=0)\n", + "mol.symm_orb, z_irrep, g_irrep = itg.lz_symm_adaptation(mol)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym_z = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=1, irrep_id=z_irrep)\n", + "print(orb_sym_z)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SAnySU2LZ, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym_z, pg_irrep=0)\n", + "\n", + "bond_dims = [250] * 4 + [500] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + "thrds = [1e-10] * 8\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "gRqEzZnK8d8h", - "outputId": "ca75dee6-d7b3-4fec-d561-ef8c35ef96c3" + "id": "r_QeMxLzvcD8", + "outputId": "7ee79743-45fd-4226-ecca-b5466f0316f3" }, + "execution_count": 11, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "N0 expectation = 1.999995824360303\n" + "[ 0 0 0 0 -1 1 0 1 -1 0]\n", + "integral symmetrize error = 2.0562981879479644e-15\n", + "integral cutoff error = 0.0\n", + "mpo terms = 1881\n", + "\n", + "Build MPO | Nsites = 10 | Nterms = 1881 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 10 .. Mmpo = 14 DW = 0.00e+00 NNZ = 14 SPT = 0.0000 Tmvc = 0.001 T = 0.031\n", + " Site = 1 / 10 .. Mmpo = 34 DW = 0.00e+00 NNZ = 107 SPT = 0.7752 Tmvc = 0.001 T = 0.054\n", + " Site = 2 / 10 .. Mmpo = 56 DW = 0.00e+00 NNZ = 189 SPT = 0.9007 Tmvc = 0.001 T = 0.063\n", + " Site = 3 / 10 .. Mmpo = 66 DW = 0.00e+00 NNZ = 822 SPT = 0.7776 Tmvc = 0.001 T = 0.063\n", + " Site = 4 / 10 .. Mmpo = 88 DW = 0.00e+00 NNZ = 154 SPT = 0.9735 Tmvc = 0.000 T = 0.033\n", + " Site = 5 / 10 .. Mmpo = 94 DW = 0.00e+00 NNZ = 318 SPT = 0.9616 Tmvc = 0.000 T = 0.031\n", + " Site = 6 / 10 .. Mmpo = 64 DW = 0.00e+00 NNZ = 236 SPT = 0.9608 Tmvc = 0.000 T = 0.023\n", + " Site = 7 / 10 .. Mmpo = 40 DW = 0.00e+00 NNZ = 145 SPT = 0.9434 Tmvc = 0.000 T = 0.016\n", + " Site = 8 / 10 .. Mmpo = 14 DW = 0.00e+00 NNZ = 49 SPT = 0.9125 Tmvc = 0.000 T = 0.009\n", + " Site = 9 / 10 .. Mmpo = 1 DW = 0.00e+00 NNZ = 14 SPT = 0.0000 Tmvc = 0.000 T = 0.007\n", + "Ttotal = 0.332 Tmvc-total = 0.005 MPO bond dimension = 94 MaxDW = 0.00e+00\n", + "NNZ = 2048 SIZE = 29320 SPT = 0.9302\n", + "\n", + "Rank = 0 Ttotal = 0.402 MPO method = FastBipartite bond dimension = 94 NNZ = 2048 SIZE = 29320 SPT = 0.9302\n", + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.679 | E = -107.6541224475 | DW = 2.06e-10\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.030 | E = -107.6541224475 | DE = 1.19e-12 | DW = 2.77e-20\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.383 | E = -107.6541224475 | DE = -2.84e-14 | DW = 2.06e-10\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.721 | E = -107.6541224475 | DE = -8.67e-12 | DW = 3.29e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.225 | E = -107.6541224475 | DE = -2.84e-14 | DW = 4.20e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.894 | E = -107.6541224475 | DE = 5.68e-14 | DW = 2.00e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.682 | E = -107.6541224475 | DE = -2.84e-14 | DW = 4.90e-20\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 4.379 | E = -107.6541224475 | DE = 0.00e+00 | DW = 1.69e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 4.809 | E = -107.6541224475 | DE = 2.84e-14 | DW = 3.21e-20\n", + "\n", + "DMRG energy = -107.654122447523761\n" ] } - ], - "source": [ - "b = driver.expr_builder()\n", - "b.add_term(\"(C+D)0\", [0, 0], np.sqrt(2))\n", - "n_mpo = driver.get_mpo(b.finalize(), iprint=0)\n", - "\n", - "n_0 = driver.expectation(ket, n_mpo, ket)\n", - "print('N0 expectation = %20.15f' % (n_0 / norm))" ] }, { - "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "axO7Quw3-L9v" - }, "source": [ - "We can then verify this number using 1PDM:" - ] + "With ``SZ`` (non-spin-adapted DMRG):" + ], + "metadata": { + "id": "s2TkncgDvl6v" + } }, { "cell_type": "code", - "execution_count": 11, + "source": [ + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"dooh\", verbose=0)\n", + "mol.symm_orb, z_irrep, g_irrep = itg.lz_symm_adaptation(mol)\n", + "mf = scf.UHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym_z = itg.get_uhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=1, irrep_id=z_irrep)\n", + "print(orb_sym_z)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SAnySZLZ, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym_z, pg_irrep=0)\n", + "\n", + "bond_dims = [250] * 4 + [500] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + "thrds = [1e-10] * 8\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "AiPieq3Z-JrA", - "outputId": "53bd72d6-c410-4497-8521-cf808a3a90c0" + "id": "wTX3hBE1vniu", + "outputId": "11a55e49-7674-4ef3-b5e9-55749a7a84da" }, + "execution_count": 12, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "N0 expectation from 1pdm = 1.999995824360300\n" + "[ 0 0 0 0 -1 1 0 1 -1 0]\n", + "integral symmetrize error = 8.030340066584701e-15\n", + "integral cutoff error = 0.0\n", + "mpo terms = 5231\n", + "\n", + "Build MPO | Nsites = 10 | Nterms = 5231 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 10 .. Mmpo = 30 DW = 0.00e+00 NNZ = 30 SPT = 0.0000 Tmvc = 0.002 T = 0.080\n", + " Site = 1 / 10 .. Mmpo = 66 DW = 0.00e+00 NNZ = 271 SPT = 0.8631 Tmvc = 0.001 T = 0.135\n", + " Site = 2 / 10 .. Mmpo = 110 DW = 0.00e+00 NNZ = 480 SPT = 0.9339 Tmvc = 0.001 T = 0.136\n", + " Site = 3 / 10 .. Mmpo = 124 DW = 0.00e+00 NNZ = 2273 SPT = 0.8334 Tmvc = 0.001 T = 0.135\n", + " Site = 4 / 10 .. Mmpo = 171 DW = 0.00e+00 NNZ = 363 SPT = 0.9829 Tmvc = 0.001 T = 0.066\n", + " Site = 5 / 10 .. Mmpo = 186 DW = 0.00e+00 NNZ = 811 SPT = 0.9745 Tmvc = 0.001 T = 0.072\n", + " Site = 6 / 10 .. Mmpo = 126 DW = 0.00e+00 NNZ = 583 SPT = 0.9751 Tmvc = 0.001 T = 0.045\n", + " Site = 7 / 10 .. Mmpo = 82 DW = 0.00e+00 NNZ = 263 SPT = 0.9745 Tmvc = 0.000 T = 0.024\n", + " Site = 8 / 10 .. Mmpo = 30 DW = 0.00e+00 NNZ = 182 SPT = 0.9260 Tmvc = 0.000 T = 0.020\n", + " Site = 9 / 10 .. Mmpo = 1 DW = 0.00e+00 NNZ = 30 SPT = 0.0000 Tmvc = 0.000 T = 0.009\n", + "Ttotal = 0.722 Tmvc-total = 0.009 MPO bond dimension = 186 MaxDW = 0.00e+00\n", + "NNZ = 5286 SIZE = 112178 SPT = 0.9529\n", + "\n", + "Rank = 0 Ttotal = 0.773 MPO method = FastBipartite bond dimension = 186 NNZ = 5286 SIZE = 112178 SPT = 0.9529\n", + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.157 | E = -107.6541224475 | DW = 3.14e-08\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.836 | E = -107.6541224475 | DE = -1.13e-11 | DW = 3.32e-08\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.477 | E = -107.6541224455 | DE = 2.05e-09 | DW = 3.14e-08\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.168 | E = -107.6541224455 | DE = -2.27e-13 | DW = 3.27e-08\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.974 | E = -107.6541224455 | DE = -1.42e-13 | DW = 3.08e-11\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 4.811 | E = -107.6541224455 | DE = 2.84e-14 | DW = 1.35e-19\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 6.270 | E = -107.6541224455 | DE = -2.84e-14 | DW = 3.08e-11\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 7.758 | E = -107.6541224455 | DE = 2.56e-13 | DW = 1.55e-19\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 8.655 | E = -107.6541224455 | DE = -2.84e-14 | DW = 9.59e-20\n", + "\n", + "DMRG energy = -107.654122445468332\n" ] } + ] + }, + { + "cell_type": "markdown", + "source": [ + "With ``SGF`` (spin-orbital DMRG):" ], + "metadata": { + "id": "Xvb_7dJKvwBo" + } + }, + { + "cell_type": "code", "source": [ - "pdm1 = driver.get_1pdm(ket)\n", - "print('N0 expectation from 1pdm = %20.15f' % pdm1[0, 0])" + "from pyscf.scf.ghf_symm import GHF\n", + "from pyscf import symm, lib\n", + "from pyscf.scf import hf_symm\n", + "import scipy.linalg\n", + "import numpy as np\n", + "\n", + "# fix pyscf 2.3.0 bug in ghf_symm for complex orbtials\n", + "def ghf_eig(self, h, s, symm_orb=None, irrep_id=None):\n", + " if symm_orb is None or irrep_id is None:\n", + " mol = self.mol\n", + " symm_orb = mol.symm_orb\n", + " irrep_id = mol.irrep_id\n", + " nirrep = len(symm_orb)\n", + " symm_orb = [scipy.linalg.block_diag(c, c) for c in symm_orb]\n", + " h = symm.symmetrize_matrix(h, symm_orb)\n", + " s = symm.symmetrize_matrix(s, symm_orb)\n", + " cs = []\n", + " es = []\n", + " orbsym = []\n", + " for ir in range(nirrep):\n", + " e, c = self._eigh(h[ir], s[ir])\n", + " cs.append(c)\n", + " es.append(e)\n", + " orbsym.append([irrep_id[ir]] * e.size)\n", + " e = np.hstack(es)\n", + " c = hf_symm.so2ao_mo_coeff(symm_orb, cs)\n", + " c = lib.tag_array(c, orbsym=np.hstack(orbsym))\n", + " return e, c\n", + "\n", + "GHF.eig = ghf_eig\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"dooh\", verbose=0)\n", + "mol.symm_orb, z_irrep, g_irrep = itg.lz_symm_adaptation(mol)\n", + "mf = scf.GHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym_z = itg.get_ghf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=1, irrep_id=z_irrep)\n", + "print(orb_sym_z)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SAnySGFLZ, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym_z, pg_irrep=0)\n", + "\n", + "bond_dims = [250] * 4 + [500] * 4\n", + "noises = [1e-4] * 4 + [1e-5] * 4 + [0]\n", + "thrds = [1e-10] * 8\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=1)\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "h-v3TPOjv0JX", + "outputId": "4277a6f6-c33f-4f52-a752-4e5434fddcb7" + }, + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[ 0 0 0 0 0 0 0 0 -1 -1 1 1 0 0 1 1 -1 -1 0 0]\n", + "integral symmetrize error = 9.305335353847714e-15\n", + "integral cutoff error = 5.457899320407648e-20\n", + "mpo terms = 12773\n", + "\n", + "Build MPO | Nsites = 20 | Nterms = 12773 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 20 .. Mmpo = 9 DW = 0.00e+00 NNZ = 9 SPT = 0.0000 Tmvc = 0.002 T = 0.098\n", + " Site = 1 / 20 .. Mmpo = 28 DW = 0.00e+00 NNZ = 25 SPT = 0.9008 Tmvc = 0.002 T = 0.170\n", + " Site = 2 / 20 .. Mmpo = 47 DW = 0.00e+00 NNZ = 309 SPT = 0.7652 Tmvc = 0.004 T = 0.245\n", + " Site = 3 / 20 .. Mmpo = 62 DW = 0.00e+00 NNZ = 357 SPT = 0.8775 Tmvc = 0.003 T = 0.264\n", + " Site = 4 / 20 .. Mmpo = 81 DW = 0.00e+00 NNZ = 514 SPT = 0.8977 Tmvc = 0.003 T = 0.280\n", + " Site = 5 / 20 .. Mmpo = 104 DW = 0.00e+00 NNZ = 667 SPT = 0.9208 Tmvc = 0.003 T = 0.308\n", + " Site = 6 / 20 .. Mmpo = 129 DW = 0.00e+00 NNZ = 2106 SPT = 0.8430 Tmvc = 0.003 T = 0.299\n", + " Site = 7 / 20 .. Mmpo = 118 DW = 0.00e+00 NNZ = 3960 SPT = 0.7399 Tmvc = 0.003 T = 0.249\n", + " Site = 8 / 20 .. Mmpo = 153 DW = 0.00e+00 NNZ = 250 SPT = 0.9862 Tmvc = 0.001 T = 0.127\n", + " Site = 9 / 20 .. Mmpo = 164 DW = 0.00e+00 NNZ = 690 SPT = 0.9725 Tmvc = 0.001 T = 0.134\n", + " Site = 10 / 20 .. Mmpo = 185 DW = 0.00e+00 NNZ = 1223 SPT = 0.9597 Tmvc = 0.002 T = 0.131\n", + " Site = 11 / 20 .. Mmpo = 178 DW = 0.00e+00 NNZ = 910 SPT = 0.9724 Tmvc = 0.001 T = 0.101\n", + " Site = 12 / 20 .. Mmpo = 147 DW = 0.00e+00 NNZ = 814 SPT = 0.9689 Tmvc = 0.001 T = 0.077\n", + " Site = 13 / 20 .. Mmpo = 120 DW = 0.00e+00 NNZ = 632 SPT = 0.9642 Tmvc = 0.001 T = 0.052\n", + " Site = 14 / 20 .. Mmpo = 97 DW = 0.00e+00 NNZ = 383 SPT = 0.9671 Tmvc = 0.001 T = 0.040\n", + " Site = 15 / 20 .. Mmpo = 78 DW = 0.00e+00 NNZ = 249 SPT = 0.9671 Tmvc = 0.000 T = 0.038\n", + " Site = 16 / 20 .. Mmpo = 57 DW = 0.00e+00 NNZ = 382 SPT = 0.9141 Tmvc = 0.000 T = 0.022\n", + " Site = 17 / 20 .. Mmpo = 28 DW = 0.00e+00 NNZ = 91 SPT = 0.9430 Tmvc = 0.000 T = 0.009\n", + " Site = 18 / 20 .. Mmpo = 9 DW = 0.00e+00 NNZ = 28 SPT = 0.8889 Tmvc = 0.000 T = 0.011\n", + " Site = 19 / 20 .. Mmpo = 1 DW = 0.00e+00 NNZ = 9 SPT = 0.0000 Tmvc = 0.000 T = 0.004\n", + "Ttotal = 2.660 Tmvc-total = 0.031 MPO bond dimension = 185 MaxDW = 0.00e+00\n", + "NNZ = 13608 SIZE = 222306 SPT = 0.9388\n", + "\n", + "Rank = 0 Ttotal = 2.764 MPO method = FastBipartite bond dimension = 185 NNZ = 13608 SIZE = 222306 SPT = 0.9388\n", + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.655 | E = -107.6541219864 | DW = 1.34e-08\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.673 | E = -107.6541222928 | DE = -3.06e-07 | DW = 4.92e-08\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 5.224 | E = -107.6541224418 | DE = -1.49e-07 | DW = 1.33e-08\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 6.259 | E = -107.6541224418 | DE = -1.02e-12 | DW = 4.94e-08\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 7.849 | E = -107.6541224449 | DE = -3.13e-09 | DW = 6.76e-12\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 9.282 | E = -107.6541224455 | DE = -5.68e-10 | DW = 5.49e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 10.873 | E = -107.6541224455 | DE = 5.68e-14 | DW = 6.76e-12\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 12.297 | E = -107.6541224455 | DE = 2.84e-14 | DW = 6.04e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 13.165 | E = -107.6541224455 | DE = 2.84e-14 | DW = 7.22e-20\n", + "\n", + "DMRG energy = -107.654122445469270\n" + ] + } ] }, { - "attachments": {}, "cell_type": "markdown", + "source": [ + "## Expectation and N-Particle Density Matrices" + ], "metadata": { - "id": "xdFhzPE7-rb6" + "id": "r8wd-wIq7pKV" + } + }, + { + "cell_type": "markdown", + "source": [ + "Once the optimized MPS is obtained, we can compute the expectation value on it, including its norm, the energy expectation, $\\langle S^2 \\rangle$, N-particle density matrix, or any operator that can be constructed as an MPO.\n", + "\n", + "In this example, we compute the triplet state." + ], + "metadata": { + "id": "Q2jepYQu7vOW" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "spin = 2\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)\n", + "\n", + "impo = driver.get_identity_mpo()\n", + "\n", + "norm = driver.expectation(ket, impo, ket)\n", + "ener = driver.expectation(ket, mpo, ket)\n", + "\n", + "print('Norm = %20.15f' % norm)\n", + "print('Energy expectation = %20.15f' % (ener / norm))\n", + "\n", + "# [ in spin-adapted mode this is always S(S+1) ]\n", + "ssq_mpo = driver.get_spin_square_mpo(iprint=0)\n", + "ssq = driver.expectation(ket, ssq_mpo, ket)\n", + "print(' expectation = %20.15f' % (ssq / norm))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "sYihDUiI6mTn", + "outputId": "f5c207d9-c177-4bcb-df29-03d10a134b54" }, + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.557 | E = -106.9391328597 | DW = 3.38e-10\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.833 | E = -106.9391328597 | DE = -3.24e-12 | DW = 9.75e-19\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.130 | E = -106.9391328597 | DE = 2.84e-14 | DW = 3.38e-10\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.421 | E = -106.9391328597 | DE = 1.71e-13 | DW = 1.52e-18\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.755 | E = -106.9391328597 | DE = 0.00e+00 | DW = 1.12e-16\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.063 | E = -106.9391328597 | DE = 5.68e-14 | DW = 1.40e-19\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.402 | E = -106.9391328597 | DE = 0.00e+00 | DW = 1.12e-16\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.709 | E = -106.9391328597 | DE = 0.00e+00 | DW = 1.38e-19\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 2.933 | E = -106.9391328597 | DE = 0.00e+00 | DW = 3.39e-20\n", + "\n", + "DMRG energy = -106.939132859666600\n", + "Norm = 1.000000000000000\n", + "Energy expectation = -106.939132859666614\n", + " expectation = 2.000000000000000\n" + ] + } + ] + }, + { + "cell_type": "markdown", "source": [ - "We can compute the 3PDM and compare the result with the FCI 3PDM. Note that in ``pyscf`` the 3PDM is defined as \n", + "We can also evaluate expectation of arbitray operator such as the occupancy in the first orbital\n", "\n", "$$\n", - "\\mathrm{DM}_{ijklmn} := \\langle E_{ij} E_{kl} E_{mn} \\rangle\n", - "$$\n", + "\\hat{N}_0 = a^\\dagger_{0\\alpha} a_{0\\alpha} + a^\\dagger_{0\\beta} a_{0\\beta}\n", + "= \\sqrt{2} \\big(a_0^\\dagger\\big)^{[1/2]} \\otimes_{[0]} \\big(a_0\\big)^{[1/2]}\n", + "$$" + ], + "metadata": { + "id": "5uw83pUS9hkY" + } + }, + { + "cell_type": "code", + "source": [ + "b = driver.expr_builder()\n", + "b.add_term(\"(C+D)0\", [0, 0], np.sqrt(2))\n", + "n_mpo = driver.get_mpo(b.finalize(), iprint=0)\n", "\n", - "So we have to use the same convention in ``block2`` by setting the ``npdm_expr`` parameter in ``block2`` to ``((C+D)0+((C+D)0+(C+D)0)0)0``.\n" + "n_0 = driver.expectation(ket, n_mpo, ket)\n", + "print('N0 expectation = %20.15f' % (n_0 / norm))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "gRqEzZnK8d8h", + "outputId": "ad42a465-fc27-4ba2-b1d9-52fdec3a164c" + }, + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "N0 expectation = 1.999995824361892\n" + ] + } ] }, + { + "cell_type": "markdown", + "source": [ + "We can then verify this number using 1PDM:" + ], + "metadata": { + "id": "axO7Quw3-L9v" + } + }, { "cell_type": "code", - "execution_count": 12, + "source": [ + "pdm1 = driver.get_1pdm(ket)\n", + "print('N0 expectation from 1pdm = %20.15f' % pdm1[0, 0])" + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "NIxjfBJP-byp", - "outputId": "0e54f9f8-5b73-478e-c76b-762dfacbe955" + "id": "AiPieq3Z-JrA", + "outputId": "f1bc42fc-8892-4380-ffaa-8a16980faf9b" }, + "execution_count": 16, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "[-106.93913286 -106.85412245 -106.70055113]\n", - "diff = 8.328760079421614e-06\n" + "N0 expectation from 1pdm = 1.999995824361892\n" ] } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We can compute the 3PDM and compare the result with the FCI 3PDM. Note that in ``pyscf`` the 3PDM is defined as\n", + "\n", + "$$\n", + "\\mathrm{DM}_{ijklmn} := \\langle E_{ij} E_{kl} E_{mn} \\rangle\n", + "$$\n", + "\n", + "So we have to use the same convention in ``block2`` by setting the ``npdm_expr`` parameter in ``block2`` to ``((C+D)0+((C+D)0+(C+D)0)0)0``.\n" ], + "metadata": { + "id": "xdFhzPE7-rb6" + } + }, + { + "cell_type": "code", "source": [ "pdm3_b2 = driver.get_3pdm(ket, iprint=0, npdm_expr=\"((C+D)0+((C+D)0+(C+D)0)0)0\")\n", "\n", @@ -900,21 +1450,1244 @@ "pdm3_fci = fci.rdm.make_dm123('FCI3pdm_kern_sf', mx.ci[0], mx.ci[0], ncas, n_elec)[2]\n", "\n", "print('diff = ', np.linalg.norm(pdm3_fci - pdm3_b2))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "NIxjfBJP-byp", + "outputId": "ab007aea-f900-4655-8e29-69dec7ff35cd" + }, + "execution_count": 17, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[-106.93913286 -106.85412245 -106.70055113]\n", + "diff = 4.622993128790701e-06\n" + ] + } ] - } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" }, - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} + { + "cell_type": "markdown", + "source": [ + "## Extract CSF and Determinant Coefficients\n", + "\n", + "We can extract CSF (or determinant) coefficients from the spin-adapted MPS (or the non-spin-adapted MPS). The algorithm can compute all CSF or determinant with the absolute value of the coefficient above a threshold (called ``cutoff``). The square of coefficient is the probability (weight) of the CSF or determinant.\n", + "\n", + "Extracting CSF coefficients from spin-adapted MPS in the ``SU2`` mode:" + ], + "metadata": { + "id": "j5ywJ3n9xaQx" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)\n", + "\n", + "csfs, coeffs = driver.get_csf_coefficients(ket, cutoff=0.05, iprint=1)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wlUvVFbTxUxt", + "outputId": "eccfad81-b7e8-4184-f61e-19222ad56b2d" + }, + "execution_count": 18, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.639 | E = -107.6541224475 | DW = 1.87e-10\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.016 | E = -107.6541224475 | DE = -3.38e-12 | DW = 3.81e-20\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.407 | E = -107.6541224475 | DE = 5.68e-14 | DW = 1.87e-10\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.777 | E = -107.6541224475 | DE = -5.68e-13 | DW = 4.69e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.209 | E = -107.6541224475 | DE = 0.00e+00 | DW = 1.73e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.604 | E = -107.6541224475 | DE = 2.84e-14 | DW = 5.35e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.011 | E = -107.6541224475 | DE = 0.00e+00 | DW = 1.66e-20\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.376 | E = -107.6541224475 | DE = 0.00e+00 | DW = 5.98e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 3.647 | E = -107.6541224475 | DE = 2.84e-14 | DW = 5.56e-20\n", + "\n", + "DMRG energy = -107.654122447524614\n", + "dtrie finished 0.01697694599999977\n", + "Number of CSF = 9 (cutoff = 0.05)\n", + "Sum of weights of included CSF = 0.984368811359554\n", + "\n", + "CSF 0 2222222000 = 0.957506528669401\n", + "CSF 1 2222202200 = -0.131287867807394\n", + "CSF 2 2222022020 = -0.131287794595557\n", + "CSF 3 2222+-2+-0 = 0.118594301088608\n", + "CSF 4 2222++2--0 = -0.084968224982022\n", + "CSF 5 2220222020 = -0.054710635444627\n", + "CSF 6 2220222200 = -0.054710465272207\n", + "CSF 7 2222+2+0-- = 0.053881241407894\n", + "CSF 8 22222++-0- = 0.053881215166769\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Extracting determinant coefficients from spin-adapted MPS in the ``SZ`` mode:" + ], + "metadata": { + "id": "Xo2eVRUfy7xE" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.UHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_uhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)\n", + "\n", + "csfs, coeffs = driver.get_csf_coefficients(ket, cutoff=0.05, iprint=1)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JEGGNKwBy0Rj", + "outputId": "f51b236b-eb13-4bdf-e103-5400f7ff29a9" + }, + "execution_count": 19, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.373 | E = -107.6541224475 | DW = 4.14e-08\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.089 | E = -107.6541224475 | DE = -2.07e-12 | DW = 5.05e-09\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.609 | E = -107.6541224475 | DE = -1.34e-12 | DW = 4.14e-08\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.051 | E = -107.6541224475 | DE = 1.28e-12 | DW = 5.21e-09\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.572 | E = -107.6541224475 | DE = -9.95e-13 | DW = 3.60e-11\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 4.085 | E = -107.6541224475 | DE = 8.81e-13 | DW = 1.37e-19\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 4.625 | E = -107.6541224475 | DE = 2.84e-14 | DW = 3.60e-11\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 5.142 | E = -107.6541224475 | DE = -1.28e-12 | DW = 1.52e-19\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 5.505 | E = -107.6541224475 | DE = 0.00e+00 | DW = 8.34e-20\n", + "\n", + "DMRG energy = -107.654122447524443\n", + "dtrie finished 0.02674672699998837\n", + "Number of DET = 7 (cutoff = 0.05)\n", + "Sum of weights of included DET = 0.971331638354918\n", + "\n", + "DET 0 2222222000 = 0.957506568620143\n", + "DET 1 2222022020 = -0.131287835040785\n", + "DET 2 2222202200 = -0.131287814797523\n", + "DET 3 2222ab2ab0 = 0.083825279692261\n", + "DET 4 2222ba2ba0 = 0.083825279691480\n", + "DET 5 2220222200 = -0.054710476471258\n", + "DET 6 2220222020 = -0.054710439530678\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Construct MPS from CSFs or Determinants\n", + "\n", + "If we know important CSFs or determinants in the state and their coefficients, we can also use this information to construct MPS, and this can be used as an initial guess and further optimized. Note that this initial guess can generate very good initial energies, but if the given CSFs have many doubly occupied and empty orbitals, the MPS will very likely optimize to a local minima.\n", + "\n", + "In the ``SU2`` mode:" + ], + "metadata": { + "id": "NhiNjmry-D8D" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)\n", + "\n", + "csfs, coeffs = driver.get_csf_coefficients(ket, cutoff=0.05, iprint=1)\n", + "\n", + "mps = driver.get_mps_from_csf_coefficients(csfs, coeffs, tag=\"CMPS\", dot=2)\n", + "impo = driver.get_identity_mpo()\n", + "print(driver.expectation(mps, impo, mps))\n", + "print(driver.expectation(mps, mpo, mps) / driver.expectation(mps, impo, mps))\n", + "\n", + "energy = driver.dmrg(mpo, mps, n_sweeps=5, bond_dims=[500] * 5, noises=[1E-5],\n", + " thrds=[1E-10] * 5, iprint=1)\n", + "print('Ground state energy = %20.15f' % energy)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Xu_MA3r3Mb5g", + "outputId": "fa80d736-d770-4e5c-e0cf-e711dcdee6f2" + }, + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.496 | E = -107.6541224475 | DW = 1.87e-10\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.733 | E = -107.6541224475 | DE = -1.24e-11 | DW = 4.89e-20\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.990 | E = -107.6541224475 | DE = 2.84e-14 | DW = 1.87e-10\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.208 | E = -107.6541224475 | DE = -1.36e-12 | DW = 3.97e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.488 | E = -107.6541224475 | DE = 0.00e+00 | DW = 1.48e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.713 | E = -107.6541224475 | DE = -2.84e-14 | DW = 6.11e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.974 | E = -107.6541224475 | DE = 5.68e-14 | DW = 2.41e-20\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.209 | E = -107.6541224475 | DE = -2.84e-14 | DW = 6.14e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 2.482 | E = -107.6541224475 | DE = 5.68e-14 | DW = 2.91e-20\n", + "\n", + "DMRG energy = -107.654122447524358\n", + "dtrie finished 0.016507582999963688\n", + "Number of CSF = 9 (cutoff = 0.05)\n", + "Sum of weights of included CSF = 0.984368809657036\n", + "\n", + "CSF 0 2222222000 = 0.957506521875127\n", + "CSF 1 2222202200 = -0.131287813613834\n", + "CSF 2 2222022020 = -0.131287676854091\n", + "CSF 3 2222+-2+-0 = 0.118594392287595\n", + "CSF 4 2222++2--0 = -0.084968279487231\n", + "CSF 5 2220222020 = -0.054710673444202\n", + "CSF 6 2220222200 = -0.054710596031681\n", + "CSF 7 2222+2+0-- = 0.053881289057939\n", + "CSF 8 22222++-0- = 0.053881233355398\n", + "0.9843688096570361\n", + "-107.6155366353171\n", + "\n", + "Sweep = 0 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.054 | E = -107.6285084535 | DW = 3.52e-21\n", + "\n", + "Sweep = 1 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.109 | E = -107.6288109091 | DE = -3.02e-04 | DW = 9.04e-21\n", + "\n", + "Sweep = 2 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.164 | E = -107.6289019710 | DE = -9.11e-05 | DW = 4.57e-21\n", + "\n", + "Sweep = 3 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.217 | E = -107.6289019713 | DE = -3.35e-10 | DW = 2.07e-20\n", + "\n", + "Ground state energy = -107.628901971339317\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "In the ``SZ`` mode:" + ], + "metadata": { + "id": "zCHMLB2kOGOY" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.UHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_uhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)\n", + "\n", + "dets, coeffs = driver.get_csf_coefficients(ket, cutoff=0.05, iprint=1)\n", + "\n", + "mps = driver.get_mps_from_csf_coefficients(dets, coeffs, tag=\"CMPS\", dot=2)\n", + "impo = driver.get_identity_mpo()\n", + "print(driver.expectation(mps, impo, mps))\n", + "print(driver.expectation(mps, mpo, mps) / driver.expectation(mps, impo, mps))\n", + "\n", + "energy = driver.dmrg(mpo, mps, n_sweeps=5, bond_dims=[500] * 5, noises=[1E-5],\n", + " thrds=[1E-10] * 5, iprint=1)\n", + "print('Ground state energy = %20.15f' % energy)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "MGIr2B15OHoq", + "outputId": "054476e8-8c98-490b-ba23-9592c9f8b0ad" + }, + "execution_count": 21, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.809 | E = -107.6541224475 | DW = 4.14e-08\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.294 | E = -107.6541224475 | DE = -5.80e-12 | DW = 5.17e-09\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.713 | E = -107.6541224475 | DE = -9.38e-13 | DW = 4.15e-08\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.170 | E = -107.6541224475 | DE = 1.36e-12 | DW = 5.37e-09\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.687 | E = -107.6541224475 | DE = -1.36e-12 | DW = 3.60e-11\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.212 | E = -107.6541224475 | DE = 1.05e-12 | DW = 1.85e-19\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.737 | E = -107.6541224475 | DE = -2.84e-14 | DW = 3.60e-11\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 4.252 | E = -107.6541224475 | DE = -1.14e-12 | DW = 1.77e-19\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 4.598 | E = -107.6541224475 | DE = 0.00e+00 | DW = 8.68e-20\n", + "\n", + "DMRG energy = -107.654122447524529\n", + "dtrie finished 0.03569589099998893\n", + "Number of DET = 7 (cutoff = 0.05)\n", + "Sum of weights of included DET = 0.971331637808218\n", + "\n", + "DET 0 2222222000 = -0.957506566009713\n", + "DET 1 2222022020 = 0.131287836810967\n", + "DET 2 2222202200 = 0.131287818787713\n", + "DET 3 2222ab2ab0 = -0.083825284176507\n", + "DET 4 2222ba2ba0 = -0.083825284073794\n", + "DET 5 2220222200 = 0.054710477807739\n", + "DET 6 2220222020 = 0.054710451475846\n", + "0.971331637808218\n", + "-107.59447325662364\n", + "\n", + "Sweep = 0 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.047 | E = -107.6101211360 | DW = 6.22e-21\n", + "\n", + "Sweep = 1 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.104 | E = -107.6102787809 | DE = -1.58e-04 | DW = 8.84e-21\n", + "\n", + "Sweep = 2 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.163 | E = -107.6104759466 | DE = -1.97e-04 | DW = 1.22e-20\n", + "\n", + "Sweep = 3 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.218 | E = -107.6104759470 | DE = -4.45e-10 | DW = 1.18e-20\n", + "\n", + "Ground state energy = -107.610475947024796\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## MPS Initial Guess from Occupancies\n", + "\n", + "We can also construct the MPS using an estimate of the occupancy information at each site from a cheaper method (such as CCSD). We can use this information to construct the initial quantum number distribution in the MPS.\n", + "\n", + "Note that this initial guess can generate very good energies in the first few sweeps, but if the given occupancies have many doubly occupied and empty orbitals, the MPS will very likely optimize to a local minima. One can shift the occupancies into the equal probability occupancies (for example, setting ``bias=0.4`` in the example below) to randomize the initial guess.\n", + "\n", + "In the ``SU2`` mode:" + ], + "metadata": { + "id": "lKczQwpW-KzH" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf, cc\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "bias = 0.1 # make it more random\n", + "occs = np.diag(cc.CCSD(mf).run().make_rdm1())\n", + "occs = occs + bias * (occs < 1) - bias * (occs > 1)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, occs=occs, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "89CYdAQERbng", + "outputId": "e5467ea7-8556-4cf0-ca29-382f2bec616e" + }, + "execution_count": 22, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.044 | E = -107.5033999317 | DW = 2.59e-21\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.135 | E = -107.5830591524 | DE = -7.97e-02 | DW = 3.51e-21\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.217 | E = -107.5836402922 | DE = -5.81e-04 | DW = 9.17e-21\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.294 | E = -107.5867932578 | DE = -3.15e-03 | DW = 1.12e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.371 | E = -107.5868061724 | DE = -1.29e-05 | DW = 1.17e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.443 | E = -107.5868152464 | DE = -9.07e-06 | DW = 1.23e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.517 | E = -107.5868152464 | DE = -5.68e-14 | DW = 1.45e-20\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.589 | E = -107.5868152464 | DE = 2.84e-14 | DW = 8.04e-21\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 0.655 | E = -107.5868152464 | DE = 2.84e-14 | DW = 1.69e-20\n", + "\n", + "DMRG energy = -107.586815246376730\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "In the ``SZ`` mode:" + ], + "metadata": { + "id": "MBBhzM1DRlEC" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf, cc\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.UHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_uhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "bias = 0.1 # make it more random\n", + "occs = np.diag(np.sum(cc.UCCSD(mf).run().make_rdm1(), axis=0))\n", + "occs = occs + bias * (occs < 1) - bias * (occs > 1)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, occs=occs, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "EFggxZINRmky", + "outputId": "2f628385-bc32-4746-8221-3c89711c57a9" + }, + "execution_count": 23, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.097 | E = -107.5033999316 | DW = 3.37e-21\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.267 | E = -107.5830606948 | DE = -7.97e-02 | DW = 7.61e-21\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.376 | E = -107.5836402307 | DE = -5.80e-04 | DW = 1.27e-20\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.505 | E = -107.5867932582 | DE = -3.15e-03 | DW = 1.21e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.624 | E = -107.5868061673 | DE = -1.29e-05 | DW = 1.84e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.847 | E = -107.5868152464 | DE = -9.08e-06 | DW = 1.03e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.008 | E = -107.5868152464 | DE = 0.00e+00 | DW = 1.88e-20\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.132 | E = -107.5868152464 | DE = 0.00e+00 | DW = 1.76e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 1.218 | E = -107.5868152464 | DE = 0.00e+00 | DW = 1.33e-20\n", + "\n", + "DMRG energy = -107.586815246376730\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "In the ``SGF`` mode:" + ], + "metadata": { + "id": "QEmsn2bvSDPv" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf, cc\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.GHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_ghf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "bias = 0.25 # make it more random\n", + "occs = np.sum(cc.GCCSD(mf).run().make_rdm1(), axis=0)\n", + "occs = occs + bias * (occs < 0.5) - bias * (occs > 0.5)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SGF, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, occs=occs, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5ov6ybDJSEqY", + "outputId": "97325ac1-7c03-467e-8051-de10f7802d13" + }, + "execution_count": 24, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.853 | E = -107.6538893531 | DW = 2.24e-08\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.548 | E = -107.6539226742 | DE = -3.33e-05 | DW = 8.93e-09\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.168 | E = -107.6539462697 | DE = -2.36e-05 | DW = 5.04e-08\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.808 | E = -107.6539506829 | DE = -4.41e-06 | DW = 1.95e-08\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.596 | E = -107.6539506829 | DE = 3.24e-12 | DW = 1.84e-11\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 4.386 | E = -107.6539506829 | DE = -4.12e-12 | DW = 5.67e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 5.236 | E = -107.6539506829 | DE = -2.84e-14 | DW = 1.84e-11\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 6.014 | E = -107.6539506829 | DE = 2.05e-12 | DW = 4.05e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 6.497 | E = -107.6539506829 | DE = 0.00e+00 | DW = 7.66e-20\n", + "\n", + "DMRG energy = -107.653950682884570\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Change from SU2 MPS to SZ MPS\n", + "\n", + "We can also transform the spin-adapted MPS generated in the ``SU2`` mode to the non-spin-adapted MPS, which can be used in the ``SZ`` mode. After obtaining the non-spin-adapted MPS, one need to redo ``driver.initialize_system``, ``driver.get_qc_mpo``, etc. to make sure every object is now represented in the ``SZ`` mode, then you can operate on the ``SZ`` non-spin-adapted MPS.\n", + "\n", + "In the following example, we first compute the spin-adapted MPS, then translate it into the non-spin-adapted MPS to extract the determinant coefficients." + ], + "metadata": { + "id": "pHzJ0eA09yM3" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)\n", + "\n", + "csfs, coeffs = driver.get_csf_coefficients(ket, cutoff=0.05, iprint=1)\n", + "zket = driver.mps_change_to_sz(ket, \"ZKET\")\n", + "\n", + "driver.symm_type = SymmetryTypes.SZ\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "impo = driver.get_identity_mpo()\n", + "print(driver.expectation(zket, mpo, zket) / driver.expectation(zket, impo, zket))\n", + "csfs, vals = driver.get_csf_coefficients(zket, cutoff=0.05, iprint=1)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "bshiEyU9TIcg", + "outputId": "7d23f0e3-a348-422a-c3f1-53c48d0500c0" + }, + "execution_count": 25, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.902 | E = -107.6541224475 | DW = 1.87e-10\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.281 | E = -107.6541224475 | DE = -2.87e-12 | DW = 4.49e-20\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.682 | E = -107.6541224475 | DE = -2.84e-14 | DW = 1.87e-10\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.068 | E = -107.6541224475 | DE = -5.12e-13 | DW = 5.07e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.610 | E = -107.6541224475 | DE = -5.68e-14 | DW = 2.62e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.019 | E = -107.6541224475 | DE = 2.84e-14 | DW = 4.59e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.435 | E = -107.6541224475 | DE = 2.84e-14 | DW = 2.01e-20\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.808 | E = -107.6541224475 | DE = -5.68e-14 | DW = 3.69e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 4.095 | E = -107.6541224475 | DE = 2.84e-14 | DW = 3.68e-20\n", + "\n", + "DMRG energy = -107.654122447524671\n", + "dtrie finished 0.026360811000017748\n", + "Number of CSF = 9 (cutoff = 0.05)\n", + "Sum of weights of included CSF = 0.984368806039259\n", + "\n", + "CSF 0 2222222000 = -0.957506495595307\n", + "CSF 1 2222022020 = 0.131287987564377\n", + "CSF 2 2222202200 = 0.131287965813458\n", + "CSF 3 2222+-2+-0 = -0.118594461577159\n", + "CSF 4 2222++2--0 = 0.084967942537817\n", + "CSF 5 2220222020 = 0.054710523921704\n", + "CSF 6 2220222200 = 0.054710517406346\n", + "CSF 7 2222+2+0-- = -0.053881222618422\n", + "CSF 8 22222++-0- = -0.053881215803966\n", + "-107.65412244752456\n", + "dtrie finished 0.0680388100000755\n", + "Number of DET = 7 (cutoff = 0.05)\n", + "Sum of weights of included DET = 0.971331619872548\n", + "\n", + "DET 0 2222222000 = -0.957506495595307\n", + "DET 1 2222022020 = 0.131287987564377\n", + "DET 2 2222202200 = 0.131287965813458\n", + "DET 3 2222ab2ab0 = -0.083825363036928\n", + "DET 4 2222ba2ba0 = -0.083825363036928\n", + "DET 5 2220222020 = 0.054710523921704\n", + "DET 6 2220222200 = 0.054710517406346\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Change between Real and Complex MPS\n", + "\n", + "We can also change between the MPS with complex numbers and the MPS with real numbers. For complex MPS to real MPS, the imaginary part will be discarded (and the norm of the transformed MPS may decrease). This may be useful when you do a ground state calculation in the real domain and then do the real time evolution in the complex domain.\n", + "\n", + "From real to complex:" + ], + "metadata": { + "id": "DI9giYpoVAl4" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "impo = driver.get_identity_mpo()\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)\n", + "\n", + "print(driver.expectation(ket, impo, ket))\n", + "print(driver.expectation(ket, mpo, ket) / driver.expectation(ket, impo, ket))\n", + "zket = driver.mps_change_complex(ket, \"ZKET\")\n", + "\n", + "driver.symm_type = driver.symm_type ^ SymmetryTypes.CPX\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "impo = driver.get_identity_mpo()\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, integral_cutoff=1E-8, iprint=1)\n", + "print(driver.expectation(zket, impo, zket))\n", + "print(driver.expectation(zket, mpo, zket) / driver.expectation(zket, impo, zket))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "POXO7BS5TjuT", + "outputId": "73ad27dd-0f5a-4c88-d55e-fba1c85b4416" + }, + "execution_count": 26, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.804 | E = -107.6541224475 | DW = 1.87e-10\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.144 | E = -107.6541224475 | DE = -3.95e-12 | DW = 4.49e-20\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.379 | E = -107.6541224475 | DE = 0.00e+00 | DW = 1.87e-10\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.601 | E = -107.6541224475 | DE = -7.67e-13 | DW = 5.89e-20\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.868 | E = -107.6541224475 | DE = -2.84e-14 | DW = 2.31e-20\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.110 | E = -107.6541224475 | DE = -2.84e-14 | DW = 6.59e-20\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.366 | E = -107.6541224475 | DE = 0.00e+00 | DW = 8.80e-21\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.606 | E = -107.6541224475 | DE = -5.68e-14 | DW = 6.06e-20\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 2.780 | E = -107.6541224475 | DE = 2.84e-14 | DW = 4.42e-20\n", + "\n", + "DMRG energy = -107.654122447524671\n", + "1.0\n", + "-107.65412244752456\n", + "integral symmetrize error = 1.76819336753967e-14\n", + "integral cutoff error = 0.0\n", + "mpo terms = 1030\n", + "\n", + "Build MPO | Nsites = 10 | Nterms = 1030 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 10 .. Mmpo = 13 DW = 0.00e+00 NNZ = 13 SPT = 0.0000 Tmvc = 0.001 T = 0.007\n", + " Site = 1 / 10 .. Mmpo = 34 DW = 0.00e+00 NNZ = 63 SPT = 0.8575 Tmvc = 0.001 T = 0.005\n", + " Site = 2 / 10 .. Mmpo = 56 DW = 0.00e+00 NNZ = 121 SPT = 0.9364 Tmvc = 0.000 T = 0.006\n", + " Site = 3 / 10 .. Mmpo = 74 DW = 0.00e+00 NNZ = 373 SPT = 0.9100 Tmvc = 0.000 T = 0.006\n", + " Site = 4 / 10 .. Mmpo = 80 DW = 0.00e+00 NNZ = 269 SPT = 0.9546 Tmvc = 0.000 T = 0.007\n", + " Site = 5 / 10 .. Mmpo = 94 DW = 0.00e+00 NNZ = 169 SPT = 0.9775 Tmvc = 0.000 T = 0.005\n", + " Site = 6 / 10 .. Mmpo = 54 DW = 0.00e+00 NNZ = 181 SPT = 0.9643 Tmvc = 0.000 T = 0.008\n", + " Site = 7 / 10 .. Mmpo = 30 DW = 0.00e+00 NNZ = 73 SPT = 0.9549 Tmvc = 0.000 T = 0.003\n", + " Site = 8 / 10 .. Mmpo = 14 DW = 0.00e+00 NNZ = 41 SPT = 0.9024 Tmvc = 0.000 T = 0.004\n", + " Site = 9 / 10 .. Mmpo = 1 DW = 0.00e+00 NNZ = 14 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", + "Ttotal = 0.054 Tmvc-total = 0.003 MPO bond dimension = 94 MaxDW = 0.00e+00\n", + "NNZ = 1317 SIZE = 27073 SPT = 0.9514\n", + "\n", + "Rank = 0 Ttotal = 0.108 MPO method = FastBipartite bond dimension = 94 NNZ = 1317 SIZE = 27073 SPT = 0.9514\n", + "(0.9999999999999999+0j)\n", + "(-107.65412244752457+0j)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "From complex to real:" + ], + "metadata": { + "id": "8lXIUcWqUYvQ" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SU2 | SymmetryTypes.CPX, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "impo = driver.get_identity_mpo()\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)\n", + "\n", + "print(driver.expectation(ket, impo, ket))\n", + "print(driver.expectation(ket, mpo, ket) / driver.expectation(ket, impo, ket))\n", + "rket = driver.mps_change_complex(ket, \"rket\")\n", + "\n", + "driver.symm_type = driver.symm_type ^ SymmetryTypes.CPX\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "impo = driver.get_identity_mpo()\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, integral_cutoff=1E-8, iprint=1)\n", + "print(driver.expectation(rket, impo, rket))\n", + "print(driver.expectation(rket, mpo, rket) / driver.expectation(rket, impo, rket))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "J5F8UhOzUaoQ", + "outputId": "3d4f9f89-6402-43da-b44b-3979ea522ffa" + }, + "execution_count": 27, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.189 | E = -107.6541224475 | DW = 1.87e-10\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.240 | E = -107.6541224475 | DE = -1.41e-11 | DW = 2.95e-19\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.105 | E = -107.6541224475 | DE = -2.84e-14 | DW = 1.87e-10\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.655 | E = -107.6541224475 | DE = -2.05e-12 | DW = 1.13e-19\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 4.299 | E = -107.6541224475 | DE = 0.00e+00 | DW = 1.31e-19\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 4.784 | E = -107.6541224475 | DE = -2.84e-14 | DW = 1.06e-19\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 5.305 | E = -107.6541224475 | DE = 5.68e-14 | DW = 1.24e-19\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 5.770 | E = -107.6541224475 | DE = -5.68e-14 | DW = 1.04e-19\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 6.086 | E = -107.6541224475 | DE = 0.00e+00 | DW = 4.25e-20\n", + "\n", + "DMRG energy = -107.654122447523960\n", + "(1.0000000000000002-7.905175135209388e-18j)\n", + "(-107.6541224475238-8.610748230937272e-16j)\n", + "integral symmetrize error = 1.6922854083945986e-14\n", + "integral cutoff error = 0.0\n", + "mpo terms = 1030\n", + "\n", + "Build MPO | Nsites = 10 | Nterms = 1030 | Algorithm = FastBIP | Cutoff = 1.00e-20\n", + " Site = 0 / 10 .. Mmpo = 13 DW = 0.00e+00 NNZ = 13 SPT = 0.0000 Tmvc = 0.000 T = 0.004\n", + " Site = 1 / 10 .. Mmpo = 34 DW = 0.00e+00 NNZ = 63 SPT = 0.8575 Tmvc = 0.001 T = 0.004\n", + " Site = 2 / 10 .. Mmpo = 56 DW = 0.00e+00 NNZ = 121 SPT = 0.9364 Tmvc = 0.000 T = 0.004\n", + " Site = 3 / 10 .. Mmpo = 74 DW = 0.00e+00 NNZ = 373 SPT = 0.9100 Tmvc = 0.000 T = 0.005\n", + " Site = 4 / 10 .. Mmpo = 80 DW = 0.00e+00 NNZ = 269 SPT = 0.9546 Tmvc = 0.000 T = 0.004\n", + " Site = 5 / 10 .. Mmpo = 94 DW = 0.00e+00 NNZ = 169 SPT = 0.9775 Tmvc = 0.000 T = 0.004\n", + " Site = 6 / 10 .. Mmpo = 54 DW = 0.00e+00 NNZ = 181 SPT = 0.9643 Tmvc = 0.000 T = 0.003\n", + " Site = 7 / 10 .. Mmpo = 30 DW = 0.00e+00 NNZ = 73 SPT = 0.9549 Tmvc = 0.000 T = 0.003\n", + " Site = 8 / 10 .. Mmpo = 14 DW = 0.00e+00 NNZ = 41 SPT = 0.9024 Tmvc = 0.000 T = 0.002\n", + " Site = 9 / 10 .. Mmpo = 1 DW = 0.00e+00 NNZ = 14 SPT = 0.0000 Tmvc = 0.000 T = 0.002\n", + "Ttotal = 0.036 Tmvc-total = 0.003 MPO bond dimension = 94 MaxDW = 0.00e+00\n", + "NNZ = 1317 SIZE = 27073 SPT = 0.9514\n", + "\n", + "Rank = 0 Ttotal = 0.064 MPO method = FastBipartite bond dimension = 94 NNZ = 1317 SIZE = 27073 SPT = 0.9514\n", + "0.9626534962131837\n", + "-107.65412244752437\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## MPS Bipartite Entanglement\n", + "\n", + "We can get the the bipartite entanglement $S_k=-\\sum_i \\Lambda_k^2 \\log \\Lambda_k^2$ at each virtual bond (at site $k$) in MPS in the ``SZ`` mode, where $\\Lambda_k$ are singular values in the bond at site $k$." + ], + "metadata": { + "id": "HL8LI5zk0B4V" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "\n", + "ket = driver.get_random_mps(tag=\"GS\", bond_dim=250, nroots=1)\n", + "energy = driver.dmrg(mpo, ket, n_sweeps=20, bond_dims=bond_dims, noises=noises,\n", + " thrds=thrds, iprint=1)\n", + "print('DMRG energy = %20.15f' % energy)\n", + "\n", + "bip_ent = driver.get_bipartite_entanglement()\n", + "\n", + "import matplotlib.pyplot as plt\n", + "plt.plot(np.arange(len(bip_ent)), bip_ent, linestyle='-', marker='o',\n", + " mfc='white', mec=\"#7FB685\", color=\"#7FB685\")\n", + "plt.xlabel(\"site index $k$\")\n", + "plt.ylabel(\"bipartite entanglement $S_k$\")\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 968 + }, + "id": "sk-lJfw0zBlV", + "outputId": "a9d54b06-209d-4b59-fcb8-a4437be9090b" + }, + "execution_count": 28, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 0.769 | E = -107.6541224475 | DW = 4.14e-08\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.254 | E = -107.6541224475 | DE = -1.43e-11 | DW = 5.08e-09\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 1.670 | E = -107.6541224475 | DE = -5.12e-13 | DW = 4.14e-08\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 250 | Noise = 1.00e-04 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.130 | E = -107.6541224475 | DE = 1.31e-12 | DW = 5.21e-09\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.655 | E = -107.6541224475 | DE = -1.14e-12 | DW = 3.60e-11\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.189 | E = -107.6541224475 | DE = 9.38e-13 | DW = 1.75e-19\n", + "\n", + "Sweep = 6 | Direction = forward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.722 | E = -107.6541224475 | DE = 2.84e-14 | DW = 3.60e-11\n", + "\n", + "Sweep = 7 | Direction = backward | Bond dimension = 500 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 4.245 | E = -107.6541224475 | DE = -1.22e-12 | DW = 1.54e-19\n", + "\n", + "Sweep = 8 | Direction = forward | Bond dimension = 500 | Noise = 0.00e+00 | Dav threshold = 1.00e-09\n", + "Time elapsed = 4.595 | E = -107.6541224475 | DE = 2.84e-14 | DW = 7.71e-20\n", + "\n", + "DMRG energy = -107.654122447524443\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Orbital Entropy and Mutual Information\n", + "\n", + "For the optimized MPS in the ``SZ`` mode, we can compute the 1- and 2- orbital density matrices and mutual information for pairs of orbitals." + ], + "metadata": { + "id": "G31uZ79j2jgo" + } + }, + { + "cell_type": "code", + "source": [ + "odm1 = driver.get_orbital_entropies(ket, orb_type=1)\n", + "odm2 = driver.get_orbital_entropies(ket, orb_type=2)\n", + "minfo = 0.5 * (odm1[:, None] + odm1[None, :] - odm2) * (1 - np.identity(len(odm1)))\n", + "\n", + "import matplotlib.pyplot as plt\n", + "plt.matshow(minfo)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 455 + }, + "id": "I9tuVN4o2auM", + "outputId": "d990c72a-2b88-4cc6-92fd-39f1d85f4e4d" + }, + "execution_count": 29, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 29 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Excited States\n", + "\n", + "To obtain the excited states and their energies, we can perform DMRG for a state-averged MPS, optionally followed by a state-specific refinement." + ], + "metadata": { + "id": "reC2RWqDOihl" + } + }, + { + "cell_type": "code", + "source": [ + "from pyscf import gto, scf\n", + "\n", + "mol = gto.M(atom=\"N 0 0 0; N 0 0 1.1\", basis=\"sto3g\", symmetry=\"d2h\", verbose=0)\n", + "mf = scf.RHF(mol).run(conv_tol=1E-14)\n", + "ncas, n_elec, spin, ecore, h1e, g2e, orb_sym = itg.get_rhf_integrals(mf,\n", + " ncore=0, ncas=None, g2e_symm=8)\n", + "\n", + "driver = DMRGDriver(scratch=\"./tmp\", symm_type=SymmetryTypes.SZ, n_threads=4)\n", + "driver.initialize_system(n_sites=ncas, n_elec=n_elec, spin=spin, orb_sym=orb_sym)\n", + "\n", + "mpo = driver.get_qc_mpo(h1e=h1e, g2e=g2e, ecore=ecore, iprint=0)\n", + "\n", + "ket = driver.get_random_mps(tag=\"KET\", bond_dim=100, nroots=3)\n", + "energies = driver.dmrg(mpo, ket, n_sweeps=10, bond_dims=[100], noises=[1e-5] * 4 + [0],\n", + " thrds=[1e-10] * 8, iprint=1)\n", + "print('State-averaged MPS energies = [%s]' % \" \".join(\"%20.15f\" % x for x in energies))\n", + "\n", + "kets = [driver.split_mps(ket, ir, tag=\"KET-%d\" % ir) for ir in range(ket.nroots)]\n", + "for ir in range(ket.nroots):\n", + " energy = driver.dmrg(mpo, kets[ir], n_sweeps=10, bond_dims=[200], noises=[1e-5] * 4 + [0],\n", + " thrds=[1e-10] * 8, iprint=0, proj_weights=[5.0] * ir, proj_mpss=kets[:ir])\n", + " print('State-specific MPS E[%d] = %20.15f' % (ir, energy))" + ], + "metadata": { + "id": "A2BXFBnJ3baF", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "afe6a20f-eb6c-4c6e-ec50-05466717c8be" + }, + "execution_count": 30, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Sweep = 0 | Direction = forward | Bond dimension = 100 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 2.037 | E[ 3] = -107.6541193407 -107.0314407783 -106.9595996333 | DW = 8.51e-05\n", + "\n", + "Sweep = 1 | Direction = backward | Bond dimension = 100 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 3.220 | E[ 3] = -107.6541193407 -107.0314407783 -106.9595996332 | DE = 7.11e-12 | DW = 1.62e-04\n", + "\n", + "Sweep = 2 | Direction = forward | Bond dimension = 100 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 4.616 | E[ 3] = -107.6541138874 -107.0314486179 -106.9594564026 | DE = 1.43e-04 | DW = 7.20e-05\n", + "\n", + "Sweep = 3 | Direction = backward | Bond dimension = 100 | Noise = 1.00e-05 | Dav threshold = 1.00e-10\n", + "Time elapsed = 5.853 | E[ 3] = -107.6541138874 -107.0314486178 -106.9594564026 | DE = -3.97e-11 | DW = 1.47e-04\n", + "\n", + "Sweep = 4 | Direction = forward | Bond dimension = 100 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 6.621 | E[ 3] = -107.6540972369 -107.0314487271 -106.9594391421 | DE = 1.73e-05 | DW = 6.81e-05\n", + "\n", + "Sweep = 5 | Direction = backward | Bond dimension = 100 | Noise = 0.00e+00 | Dav threshold = 1.00e-10\n", + "Time elapsed = 7.410 | E[ 3] = -107.6540972369 -107.0314487271 -106.9594391422 | DE = -1.72e-11 | DW = 1.43e-04\n", + "\n", + "State-averaged MPS energies = [-107.654097236905088 -107.031448727142006 -106.959439142163390]\n", + "State-specific MPS E[0] = -107.654122447496988\n", + "State-specific MPS E[1] = -107.031449471612873\n", + "State-specific MPS E[2] = -106.959626154678844\n" + ] + } + ] + } + ] +} \ No newline at end of file