diff --git a/jarvis-tools-notebooks/ThreeBodyTB_julia.ipynb b/jarvis-tools-notebooks/ThreeBodyTB_julia.ipynb
new file mode 100644
index 0000000..243953d
--- /dev/null
+++ b/jarvis-tools-notebooks/ThreeBodyTB_julia.ipynb
@@ -0,0 +1,930 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "provenance": [],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "display_name": "Julia",
+ "language": "julia",
+ "name": "julia"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia"
+ },
+ "gpuClass": "standard"
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "**Example of how to run\n",
+ "`ThreeBodyTB` using julia. First we have to 1) install julia, 2) reload the page, and 3) then install `ThreeBodyTB`, which takes a while. Once things are installed, commands work reasonably quickly the second time they are run, as the machine code is cached.**"
+ ],
+ "metadata": {
+ "id": "97SaN_JotbwT"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "tQ1r1bbb0yBv"
+ },
+ "source": [
+ "# _Colab Notebook Template_\n",
+ "\n",
+ "## Instructions\n",
+ "1. Work on a copy of this notebook: _File_ > _Save a copy in Drive_ (you will need a Google account). Alternatively, you can download the notebook using _File_ > _Download .ipynb_, then upload it to [Colab](https://colab.research.google.com/).\n",
+ "2. If you need a GPU: _Runtime_ > _Change runtime type_ > _Harware accelerator_ = _GPU_.\n",
+ "3. Execute the following cell (click on it and press Ctrl+Enter) to install Julia, IJulia and other packages (if needed, update `JULIA_VERSION` and the other parameters). This takes a couple of minutes.\n",
+ "4. Reload this page (press Ctrl+R, or ⌘+R, or the F5 key) and continue to the next section.\n",
+ "\n",
+ "_Notes_:\n",
+ "* If your Colab Runtime gets reset (e.g., due to inactivity), repeat steps 2, 3 and 4.\n",
+ "* After installation, if you want to change the Julia version or activate/deactivate the GPU, you will need to reset the Runtime: _Runtime_ > _Factory reset runtime_ and repeat steps 3 and 4."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "GIeFXS0F0zww",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 87
+ },
+ "outputId": "abaa110b-79a1-42b2-dc17-77797044f060"
+ },
+ "source": [
+ "%%shell\n",
+ "set -e\n",
+ "\n",
+ "#---------------------------------------------------#\n",
+ "JULIA_VERSION=\"1.9.2\" # any version ≥ 0.7.0\n",
+ "JULIA_PACKAGES=\"IJulia BenchmarkTools\"\n",
+ "JULIA_PACKAGES_IF_GPU=\"CUDA\" # or CuArrays for older Julia versions\n",
+ "JULIA_NUM_THREADS=2\n",
+ "#---------------------------------------------------#\n",
+ "\n",
+ "if [ -z `which julia` ]; then\n",
+ " # Install Julia\n",
+ " JULIA_VER=`cut -d '.' -f -2 <<< \"$JULIA_VERSION\"`\n",
+ " echo \"Installing Julia $JULIA_VERSION on the current Colab Runtime...\"\n",
+ " BASE_URL=\"https://julialang-s3.julialang.org/bin/linux/x64\"\n",
+ " URL=\"$BASE_URL/$JULIA_VER/julia-$JULIA_VERSION-linux-x86_64.tar.gz\"\n",
+ " wget -nv $URL -O /tmp/julia.tar.gz # -nv means \"not verbose\"\n",
+ " tar -x -f /tmp/julia.tar.gz -C /usr/local --strip-components 1\n",
+ " rm /tmp/julia.tar.gz\n",
+ "\n",
+ " # Install Packages\n",
+ " nvidia-smi -L &> /dev/null && export GPU=1 || export GPU=0\n",
+ " if [ $GPU -eq 1 ]; then\n",
+ " JULIA_PACKAGES=\"$JULIA_PACKAGES $JULIA_PACKAGES_IF_GPU\"\n",
+ " fi\n",
+ " for PKG in `echo $JULIA_PACKAGES`; do\n",
+ " echo \"Installing Julia package $PKG...\"\n",
+ " julia -e 'using Pkg; pkg\"add '$PKG'; precompile;\"' &> /dev/null\n",
+ " done\n",
+ "\n",
+ " # Install kernel and rename it to \"julia\"\n",
+ " echo \"Installing IJulia kernel...\"\n",
+ " julia -e 'using IJulia; IJulia.installkernel(\"julia\", env=Dict(\n",
+ " \"JULIA_NUM_THREADS\"=>\"'\"$JULIA_NUM_THREADS\"'\"))'\n",
+ " KERNEL_DIR=`julia -e \"using IJulia; print(IJulia.kerneldir())\"`\n",
+ " KERNEL_NAME=`ls -d \"$KERNEL_DIR\"/julia*`\n",
+ " mv -f $KERNEL_NAME \"$KERNEL_DIR\"/julia\n",
+ "\n",
+ " echo ''\n",
+ " echo \"Successfully installed `julia -v`!\"\n",
+ " echo \"Please reload this page (press Ctrl+R, ⌘+R, or the F5 key) then\"\n",
+ " echo \"jump to the 'Checking the Installation' section.\"\n",
+ "fi"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " Unrecognized magic \u001b[36m%%shell\u001b[39m.\n",
+ "\n",
+ " Julia does not use the IPython \u001b[36m%magic\u001b[39m syntax. To interact with the IJulia\n",
+ " kernel, use \u001b[36mIJulia.somefunction(...)\u001b[39m, for example. Julia macros, string\n",
+ " macros, and functions can be used to accomplish most of the other\n",
+ " functionalities of IPython magics."
+ ],
+ "text/markdown": "Unrecognized magic `%%shell`.\n\nJulia does not use the IPython `%magic` syntax. To interact with the IJulia kernel, use `IJulia.somefunction(...)`, for example. Julia macros, string macros, and functions can be used to accomplish most of the other functionalities of IPython magics.\n",
+ "text/latex": "Unrecognized magic \\texttt{\\%\\%shell}.\n\nJulia does not use the IPython \\texttt{\\%magic} syntax. To interact with the IJulia kernel, use \\texttt{IJulia.somefunction(...)}, for example. Julia macros, string macros, and functions can be used to accomplish most of the other functionalities of IPython magics.\n\n"
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "-OS3Ac017T1i"
+ },
+ "source": [
+ "# Checking the Installation\n",
+ "The `versioninfo()` function should print your Julia version and some other info about the system:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "EEzvvzCl1i0F",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "f7fc91da-65bd-4c00-c758-82ea99aa7ec3"
+ },
+ "source": [
+ "versioninfo()"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Julia Version 1.8.2\n",
+ "Commit 36034abf260 (2022-09-29 15:21 UTC)\n",
+ "Platform Info:\n",
+ " OS: Linux (x86_64-linux-gnu)\n",
+ " CPU: 2 × Intel(R) Xeon(R) CPU @ 2.20GHz\n",
+ " WORD_SIZE: 64\n",
+ " LIBM: libopenlibm\n",
+ " LLVM: libLLVM-13.0.1 (ORCJIT, broadwell)\n",
+ " Threads: 2 on 2 virtual cores\n",
+ "Environment:\n",
+ " LD_LIBRARY_PATH = /usr/local/nvidia/lib:/usr/local/nvidia/lib64\n",
+ " JULIA_NUM_THREADS = 2\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#ThreeBodyTB"
+ ],
+ "metadata": {
+ "id": "_-wGWHCunq9o"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "**Load the ThreeBodyTB code. Unfortunately this takes a while the first time, as many other packages must be downloaded for our fresh installation.**"
+ ],
+ "metadata": {
+ "id": "Z74ozMcAnvr_"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "using Pkg\n",
+ "Pkg.add(url = \"https://github.com/usnistgov/ThreeBodyTB.jl\", rev = \"develop3\")\n",
+ "using ThreeBodyTB\n",
+ "using Plots"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "YjM_qq54lCcs",
+ "outputId": "8ef2a5ed-23c5-4506-8afe-bb0a3abd85c6"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m git-repo `https://github.com/usnistgov/ThreeBodyTB.jl`\n",
+ "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.8/Project.toml`\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.8/Manifest.toml`\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "**Define an AlAs primitive unit cell (zincblende structure).**"
+ ],
+ "metadata": {
+ "id": "CkBWVGsymuU5"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "A = [0 2.73 2.73; 2.73 0 2.73; 2.73 2.73 0] #angstrom lattice vectors\n",
+ "pos = [0 0 0; 0.25 0.25 0.25] #crystal coordinates\n",
+ "atoms = [\"Al\", \"P\"] #strings or symbols are fine\n",
+ "c = makecrys(A, pos, atoms)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "n2fIIVknkwmY",
+ "outputId": "4374a6c3-ead7-4b5c-98cb-55057018e2a1"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "Units: Å\n",
+ "\n",
+ "A1= 0.00000 2.73000 2.73000\n",
+ "A2= 2.73000 0.00000 2.73000\n",
+ "A3= 2.73000 2.73000 0.00000\n",
+ "\n",
+ "Al 0.00000 0.00000 0.00000\n",
+ "P 0.25000 0.25000 0.25000\n"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 42
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "**Create a 2x2x2 supercell, use the simple plotter for fun.**"
+ ],
+ "metadata": {
+ "id": "UPU6PAFWmj9P"
+ }
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "XciCcMAJOT3_",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 456
+ },
+ "outputId": "d10c65b6-f6c0-484c-f400-0b2277757752"
+ },
+ "source": [
+ "c222 = c * [2,2,2]\n",
+ "plot(c222)"
+ ],
+ "execution_count": 44,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "s P blue\n",
+ "s Al orange\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/svg+xml": "\n\n"
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "**Calculate energy of AlAs**"
+ ],
+ "metadata": {
+ "id": "NJpcC-mam7wW"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "energy, tbc, flag = scf_energy(c);"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "HaB30AFVltGM",
+ "outputId": "7209e4df-6733-4b06-bba3-531279b94fff"
+ },
+ "execution_count": 45,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "\n",
+ " 0.008080 seconds (64.86 k allocations: 2.263 MiB)\n",
+ "DO CLASSICAL true\n",
+ "\n",
+ "START SCF ----------------\n",
+ "SCF CALC 0001 energy -11.02359198 \n",
+ "SCF CALC 0002 energy -11.02321829 en_diff: 3.736900E-04 dq_diff: 1.744166E+00 mix: 1.000000E+00 \n",
+ "SCF CALC 0003 energy -11.02244087 en_diff: 7.774142E-04 dq_diff: 1.665710E+00 mix: 1.000000E+00 \n",
+ "SCF CALC 0004 energy -10.90581647 en_diff: 1.166244E-01 dq_diff: 2.711302E-03 mix: 1.000000E+00 \n",
+ "SCF CALC 0005 energy -10.90558098 en_diff: 2.354937E-04 dq_diff: 8.664067E-04 mix: 1.000000E+00 \n",
+ "\n",
+ "YES convergence in 5 iters, energy -10.905580977225343 eV \n",
+ "END SCF ------------------\n",
+ "\n",
+ "ΔQ = [-0.82, 0.82]\n",
+ "\n",
+ "scf_energy success, done\n",
+ "\n",
+ "Formation energy: -0.717 eV/atom\n",
+ "\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "**The `tbc` object contains information on the SCF Hamiltonian, band structure, etc, for plotting purposes, etc.**"
+ ],
+ "metadata": {
+ "id": "yeEs6hHbn_5P"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "tbc"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "VxnUjEvLn_Iv",
+ "outputId": "33846bf6-b97d-482a-ec59-7a93abaeaf22"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "\n",
+ "tb_crys object \n",
+ "\n",
+ "Units: Å\n",
+ "\n",
+ "A1= 0.00000 2.73000 2.73000\n",
+ "A2= 2.73000 0.00000 2.73000\n",
+ "A3= 2.73000 2.73000 0.00000\n",
+ "\n",
+ "Al 0.00000 0.00000 0.00000\n",
+ "P 0.25000 0.25000 0.25000\n",
+ "\n",
+ "\n",
+ "nelec: 8.0; nspin (hoppings): 1\n",
+ "within_fit: true ; scf: true; scfspin: false\n",
+ "calculated energy: -10.906 eV\n",
+ "formation energy: -0.717 eV\n",
+ "charges : [-0.82, 0.82]\n",
+ "\n",
+ "\n",
+ "tight binding real space object; nwan = 8, nr = 99, nonorth = true, scf = true, scfmagnetic = false, nspin = 1\n",
+ "\n",
+ "\n",
+ "\n"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 27
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "efermi : -1.458 eV\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "**Now we can plot the band structure and DOS**"
+ ],
+ "metadata": {
+ "id": "MjvaXMvNrMRS"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "tbc_new, plot_object = plot_bandstr_dos(tbc);"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 875
+ },
+ "id": "7MzdWNMbl4uD",
+ "outputId": "bf236d20-9049-4345-cb2d-5e80cfda0354"
+ },
+ "execution_count": 46,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Symmetry info\n",
+ "Space group # 216 F-43m F -4 2 3\n",
+ "Point group -43m\n",
+ "spg 216 F-43m F\n",
+ "7.296 7.296 7.296 | 60.0 60.0 60.0\n",
+ "centering F true\n",
+ "align fermi -0.10712655296178408 -------------------------\n",
+ "no display\n",
+ "grid [16, 16, 16]\n",
+ "dos fermi -0.10620771246645189 xxxxxxxxxxxxx---------------\n",
+ "nspin 1\n",
+ "Projection type: atomic\n",
+ "PROJ\n",
+ "(\"P\", [5, 6, 7, 8], 4)\n",
+ "(\"Al\", [1, 2, 3, 4], 4)\n",
+ "proj_inds [5, 6, 7, 8]\n",
+ "proj_inds [1, 2, 3, 4]\n",
+ "(4096, 8, 2, 1)\n",
+ "Int DOS 7.999997037813593\n",
+ "Int DOS occ 3.999999964331952\n",
+ "Int pDOS occ 1 : 2.7964786418386187\n",
+ "Int pDOS occ 2 : 1.2035213224933339\n",
+ "Int pDOS all 1 : 3.999999090482648\n",
+ "Int pDOS all 2 : 3.999997947330942\n",
+ "DOS flit range (-14.523154815030251, 10.86007830775062)\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/svg+xml": "\n