{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "3940d46e-719c-4b82-87da-b80773263e1f",
   "metadata": {},
   "source": [
    "# Distributed mesh simulations\n",
    "\n",
    "<div class=\"admonition note\">\n",
    "**Topics**: Distributed mesh solver, Local mesh elements, distributed data saving.\n",
    "</div>\n",
    "\n",
    "Althouth the `'TetOpSplit'` solver runs simulations in parallel, the mesh is still fully loaded in each of the MPI processes. This can become a limiting factor when larger meshes are used. Since STEPS 4.0, a new solver, `'DistTetOpSplit'` was added to tackle this issue. This solver loads the mesh in a distributed way, meaning that each MPI process only loads the part of the mesh that it will simulate.\n",
    "\n",
    "For more details about the performace of the `'DistTetOpSplit'` distributed mesh solver, please check the following paper:\n",
    "\n",
    "Weiliang Chen, Tristan Carel, Omar Awile, Nicola Cantarutti, Giacomo Castiglioni, Alessandro Cattabiani, Baudouin Del Marmol, Iain Hepburn, James G King, Christos Kotsalos, Pramod Kumbhar, Jules Lallouette, Samuel Melchior, Felix Schürmann, Erik De Schutter (2022). **STEPS 4.0: Fast and memory-efficient molecular simulations of neurons at the nanoscale**. Front. Neuroinform. Volume 16. https://doi.org/10.3389/fninf.2022.883742.\n",
    "\n",
    "\n",
    "## Converting parallel simulations to distributed\n",
    "\n",
    "Changing from the `'TetOpSplit'` parallel solver to the `'DistTetOpSplit'` distributed solver requires a few extra changes to STEPS python scripts.\n",
    "To show these changes, we will use a slightly modified version of the stochastic calcium burst model introduced previously. We will not go through the entire script but we will focus instead on the parts that are relevant to distributed simulations.\n",
    "\n",
    "The script that we will use in this chapter can be downloaded [here](https://github.com/CNS-OIST/STEPS_Example/tree/master/user_manual/source/API_2/scripts/STEPS_Tutorial_Distributed.py):\n",
    "```python\n",
    "import steps.interface\n",
    "\n",
    "from steps.geom import *\n",
    "from steps.model import *\n",
    "from steps.rng import *\n",
    "from steps.saving import *\n",
    "from steps.sim import *\n",
    "from steps.utils import *\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n",
    "\n",
    "###########################################################\n",
    "# Simulation Parameters\n",
    "###########################################################\n",
    "\n",
    "ENDT = 0.06\n",
    "\n",
    "DT =  2.0e-5\n",
    "\n",
    "EF_DT = 5.0e-6\n",
    "\n",
    "SEED = 1234\n",
    "\n",
    "###########################################################\n",
    "# Model Parameters\n",
    "###########################################################\n",
    "\n",
    "TEMPERATURE = 34.0 + 273.15\n",
    "Q10 = 3\n",
    "\n",
    "FARADAY = 96485.3365     # C/mol\n",
    "R = 8.3144621            # J/mol K\n",
    "AVOGADRO = 6.02214129e23 # /mol\n",
    "\n",
    "Qt = Q10 ** ((TEMPERATURE - (23 + 273.15)) / 10)\n",
    "Qt_mslo = Q10 ** ((TEMPERATURE - (25 + 273.15))/10)\n",
    "\n",
    "#######################################\n",
    "# Membrane Parameters\n",
    "#######################################\n",
    "\n",
    "init_pot = Parameter(-60, 'mV', Description='Initial membrane potential')\n",
    "Ra = Parameter(235.7*1.0e-2, 'ohm m', Description='Bulk resistivity')\n",
    "Cm = 0.64e-2\n",
    "memb_capac_proximal = Parameter(1.2*Cm, 'F m^-2', Description='Smooth membrane capacitance')\n",
    "memb_capac_spiny = Parameter(5.3*Cm, 'F m^-2', Description='Spiny membrane capacitance')\n",
    "\n",
    "#######################################\n",
    "# CaP channels parameters\n",
    "#######################################\n",
    "\n",
    "CaP_P = Parameter(2.5e-2, 'um^3 s^-1', Description='CaP single channel permeability')\n",
    "CaP_ro = Parameter(38, 'um^-2', Description='CaP channels density')\n",
    "\n",
    "# Reaction rates\n",
    "\n",
    "vhalfm = -29.458 # mV\n",
    "cvm = 8.429      # mV\n",
    "\n",
    "def minf_cap(mV):\n",
    "    vhalfm = -29.458\n",
    "    cvm = 8.429\n",
    "    return 1 / (1 + np.exp(-(mV - vhalfm) / cvm))\n",
    "\n",
    "def tau_cap(mV):\n",
    "    if mV >= -40:\n",
    "        return 0.2702 + 1.1622 * np.exp(-(mV + 26.798) ** 2 / 164.19)\n",
    "    else:\n",
    "        return 0.6923 * np.exp(mV / 1089.372)\n",
    "\n",
    "alpha_cap = VDepRate.Create(\n",
    "    lambda V: (minf_cap(V * 1e3) / tau_cap(V * 1e3)) * Qt * 1e3\n",
    ")\n",
    "beta_cap = VDepRate.Create(\n",
    "    lambda V: (1 - minf_cap(V * 1e3)) / tau_cap(V * 1e3) * Qt * 1e3\n",
    ")\n",
    "\n",
    "# Initial conditions\n",
    "CaP_p = [0.92402, 0.073988, 0.0019748, 1.7569e-05]\n",
    "\n",
    "#######################################\n",
    "# CaT channels parameters\n",
    "#######################################\n",
    "\n",
    "CaT_P = Parameter(1.65e-2, 'um^3 s^-1', Description='CaT single channel permeability')\n",
    "CaT_ro = Parameter(1.9636, 'um^-2', Description='CaT channels density')\n",
    "\n",
    "# Reaction rates\n",
    "\n",
    "def minf_cat(mV):\n",
    "    vhalfm = -52\n",
    "    cvm = -5\n",
    "    return 1 / (1 + np.exp((mV - vhalfm) / cvm))\n",
    "\n",
    "def taum_cat(mV):\n",
    "    if mV > -90:\n",
    "        return 1 + 1 / (np.exp((mV + 40) / 9) + np.exp(-(mV + 102) / 18))\n",
    "    else:\n",
    "        return 1\n",
    "\n",
    "def hinf_cat(mV):\n",
    "    vhalfh = -72\n",
    "    cvh = 7\n",
    "    return 1 / (1 + np.exp((mV - vhalfh) / cvh))\n",
    "\n",
    "def tauh_cat(mV):\n",
    "    return (15 + 1 / (np.exp((mV + 32) / 7)))\n",
    "\n",
    "alpham_cat = VDepRate.Create(lambda V: minf_cat(V * 1e3) / taum_cat(V * 1e3) * 1e3)\n",
    "betam_cat = VDepRate.Create(lambda V: (1 - minf_cat(V * 1e3)) / taum_cat(V * 1e3) * 1e3)\n",
    "\n",
    "alphah_cat = VDepRate.Create(lambda V: hinf_cat(V * 1e3) / tauh_cat(V * 1e3) * 1e3)\n",
    "betah_cat = VDepRate.Create(lambda V: (1 - hinf_cat(V * 1e3)) / tauh_cat(V * 1e3) * 1e3)\n",
    "\n",
    "# Initial conditions\n",
    "CaT_p = [\n",
    "    [0.58661, 0.23687, 0.023912],   # h0\n",
    "    [0.10564, 0.042658, 0.0043063], # h1\n",
    "]\n",
    "\n",
    "#######################################\n",
    "# BK channels parameters\n",
    "#######################################\n",
    "\n",
    "BK_G = Parameter(210, 'pS', Description='BK single channel conductance')\n",
    "BK_ro = Parameter(1.5 * 2.0238, 'um^-2', Description='BK channels density')\n",
    "BK_rev = Parameter(-77, 'mV', Description='BK channel reversal potential')\n",
    "\n",
    "# Reaction rates\n",
    "\n",
    "#Units (1)\n",
    "Qo = 0.73\n",
    "Qc = -0.67\n",
    "\n",
    "#Units (/s)\n",
    "pf0 = 2.39\n",
    "pf1 = 5.4918\n",
    "pf2 = 24.6205\n",
    "pf3 = 142.4546\n",
    "pf4 = 211.0220\n",
    "\n",
    "pb0 = 3936\n",
    "pb1 = 687.3251\n",
    "pb2 = 234.5875\n",
    "pb3 = 103.2204\n",
    "pb4 = 11.6581\n",
    "\n",
    "#Units(/M)\n",
    "k1 = 1.0e6\n",
    "\n",
    "#Units(/s)\n",
    "onoffrate = 1.0e3\n",
    "\n",
    "L0 = 1806\n",
    "\n",
    "#Units (M)\n",
    "Kc = 8.63e-6\n",
    "Ko = 0.6563e-6\n",
    "\n",
    "BK_f = k1*onoffrate*Qt_mslo\n",
    "BKo_b = Ko*k1*onoffrate*Qt_mslo\n",
    "BKc_b = Kc*k1*onoffrate*Qt_mslo\n",
    "\n",
    "BK_f0 = VDepRate.Create(\n",
    "    lambda V: pf0 * Qt_mslo * (np.exp((Qo * FARADAY * V) / (R * TEMPERATURE)))\n",
    ")\n",
    "BK_f1 = VDepRate.Create(\n",
    "    lambda V: pf1 * Qt_mslo * (np.exp((Qo * FARADAY * V) / (R * TEMPERATURE)))\n",
    ")\n",
    "BK_f2 = VDepRate.Create(\n",
    "    lambda V: pf2 * Qt_mslo * (np.exp((Qo * FARADAY * V) / (R * TEMPERATURE)))\n",
    ")\n",
    "BK_f3 = VDepRate.Create(\n",
    "    lambda V: pf3 * Qt_mslo * (np.exp((Qo * FARADAY * V) / (R * TEMPERATURE)))\n",
    ")\n",
    "BK_f4 = VDepRate.Create(\n",
    "    lambda V: pf4 * Qt_mslo * (np.exp((Qo * FARADAY * V) / (R * TEMPERATURE)))\n",
    ")\n",
    "BK_oc_f = [BK_f0, BK_f1, BK_f2, BK_f3, BK_f4]\n",
    "\n",
    "BK_b0 = VDepRate.Create(\n",
    "    lambda V: pb0 * Qt_mslo * (np.exp((Qc * FARADAY * V) / (R * TEMPERATURE)))\n",
    ")\n",
    "BK_b1 = VDepRate.Create(\n",
    "    lambda V: pb1 * Qt_mslo * (np.exp((Qc * FARADAY * V) / (R * TEMPERATURE)))\n",
    ")\n",
    "BK_b2 = VDepRate.Create(\n",
    "    lambda V: pb2 * Qt_mslo * (np.exp((Qc * FARADAY * V) / (R * TEMPERATURE)))\n",
    ")\n",
    "BK_b3 = VDepRate.Create(\n",
    "    lambda V: pb3 * Qt_mslo * (np.exp((Qc * FARADAY * V) / (R * TEMPERATURE)))\n",
    ")\n",
    "BK_b4 = VDepRate.Create(\n",
    "    lambda V: pb4 * Qt_mslo * (np.exp((Qc * FARADAY * V) / (R * TEMPERATURE)))\n",
    ")\n",
    "BK_oc_b = [BK_b0, BK_b1, BK_b2, BK_b3, BK_b4]\n",
    "\n",
    "# Initial conditions\n",
    "BK_p = [\n",
    "    [0.99997,    4.3619e-07, 4.1713e-09, 4.4449e-11, 6.3132e-14],\n",
    "    [2.5202e-05, 1.1765e-06, 6.6148e-08, 2.4392e-09, 4.0981e-11],\n",
    "]\n",
    "\n",
    "#######################################\n",
    "# SK channels parameters\n",
    "#######################################\n",
    "\n",
    "SK_G = Parameter(10, 'pS', Description='SK single channel conductance')\n",
    "SK_ro = Parameter(0.31, 'um^-2', Description='SK channels density')\n",
    "SK_rev = Parameter(-77, 'mV', Description='SK channel reversal potential')\n",
    "\n",
    "# Reaction rates\n",
    "\n",
    "#Units (/s)\n",
    "invc1 = 80\n",
    "invc2 = 80\n",
    "invc3 = 200\n",
    "\n",
    "invo1 = 1000\n",
    "invo2 = 100\n",
    "\n",
    "diro1 = 160\n",
    "diro2 = 1200\n",
    "\n",
    "#Units ( /s M)\n",
    "\n",
    "dirc2 = 200e6\n",
    "dirc3 = 160e6\n",
    "dirc4 = 80e6\n",
    "\n",
    "invc1_t = invc1*Qt\n",
    "invc2_t = invc2*Qt\n",
    "invc3_t = invc3*Qt\n",
    "\n",
    "invo1_t = invo1*Qt\n",
    "invo2_t = invo2*Qt\n",
    "\n",
    "diro1_t = diro1*Qt\n",
    "diro2_t = diro2*Qt\n",
    "\n",
    "dirc2_t = dirc2*Qt/3.0\n",
    "dirc3_t = dirc3*Qt/3.0\n",
    "dirc4_t = dirc4*Qt/3.0\n",
    "\n",
    "# Intital conditions\n",
    "SK_C1_p= 0.96256\n",
    "SK_C2_p= 0.036096\n",
    "SK_C3_p= 0.0010829\n",
    "SK_C4_p= 6.4973e-06\n",
    "\n",
    "SK_O1_p= 0.00017326\n",
    "SK_O2_p= 7.7967e-05\n",
    "\n",
    "#######################################\n",
    "# AMPA channels parameters\n",
    "#######################################\n",
    "\n",
    "AMPA_G = Parameter(7, 'pS', Description=\"AMPA channel conductance\")\n",
    "AMPA_Ro = Parameter(20, 'um^-2', Description=\"AMPA channek density\")\n",
    "AMPA_rev = Parameter(0, 'mV', Description=\"AMPA channel reversal potential\")\n",
    "\n",
    "#Units (/s M)\n",
    "\n",
    "rb = 13e6\n",
    "\n",
    "#Units (/s)\n",
    "\n",
    "ru1 = 0.0059e3\n",
    "ru2 = 86e3\n",
    "ro = 2.7e3\n",
    "rc = 0.2e3\n",
    "rd = 0.9e3\n",
    "rr = 0.064e3\n",
    "\n",
    "# Glutamate transient\n",
    "\n",
    "# Units (s)\n",
    "\n",
    "glut_start = 5e-3\n",
    "\n",
    "# Units (M), Reference (Rudolph et al. 2011)\n",
    "def Glut(t):\n",
    "    if t >= 0:\n",
    "        return 12e-3 * (0.86 * np.exp(-t / 0.4e-3) + 0.14 * np.exp(-t / 4.2e-3))\n",
    "    else:\n",
    "        return 0\n",
    "\n",
    "#######################################\n",
    "# Leak channels parameters\n",
    "#######################################\n",
    "\n",
    "L_G = Parameter(0.4, 'pS', Description='Leak single channel conductance')\n",
    "L_ro_proximal = Parameter(0.25, 'um^-2', Description='Proximal leak channels density')\n",
    "L_ro_spiny = Parameter(1, 'um^-2', Description='Proximal leak channels density')\n",
    "L_rev = Parameter(-61, 'mV', Description='Leak channel reversal potential')\n",
    "\n",
    "#######################################\n",
    "# Ca pump channels parameters\n",
    "#######################################\n",
    "\n",
    "P_ro = Parameter(6.022141, 'um^-2', Description='Ca2+ pump density')\n",
    "\n",
    "# Reaction rates\n",
    "\n",
    "P_f = 3e9\n",
    "P_b = 1.75e4\n",
    "P_k = 7.255e4\n",
    "\n",
    "#######################################\n",
    "# Calcium buffering parameters\n",
    "#######################################\n",
    "\n",
    "# Ca concentrations\n",
    "\n",
    "Ca_oconc = 2e-3\n",
    "Ca_iconc = 45e-9\n",
    "\n",
    "# Mg concentrations\n",
    "\n",
    "Mg_conc = 590e-6\n",
    "\n",
    "# Buffer concentrations\n",
    "\n",
    "iCBsf_conc = 27.704e-6\n",
    "iCBCaf_conc = 2.6372e-6\n",
    "iCBsCa_conc= 1.5148e-6\n",
    "iCBCaCa_conc= 0.14420e-6\n",
    "\n",
    "CBsf_conc= 110.82e-6\n",
    "CBCaf_conc= 10.549e-6\n",
    "CBsCa_conc= 6.0595e-6\n",
    "CBCaCa_conc= 0.57682e-6\n",
    "\n",
    "PV_conc= 3.2066e-6\n",
    "PVCa_conc= 16.252e-6\n",
    "PVMg_conc= 60.541e-6\n",
    "\n",
    "# Diffusion constants\n",
    "\n",
    "DCST = 0.223e-9 # Ca\n",
    "DCB = 0.028e-9  # Calbindin (CB)\n",
    "DPV = 0.043e-9  # Parvalbumin (PV)\n",
    "\n",
    "# Reaction rates\n",
    "\n",
    "CBf_f_kcst = 4.35e7\n",
    "CBf_b_kcst = 35.8\n",
    "\n",
    "CBs_f_kcst = 0.55e7\n",
    "CBs_b_kcst = 2.6\n",
    "\n",
    "PVca_f = 10.7e7\n",
    "PVca_b = 0.95\n",
    "\n",
    "PVmg_f_kcst = 0.8e6\n",
    "PVmg_b_kcst = 25\n",
    "\n",
    "###########################################################\n",
    "# Mesh Parameters\n",
    "###########################################################\n",
    "\n",
    "mesh_file = '../meshes/caburst_dist/split_256/CNG_segmented_2_split_256'\n",
    "\n",
    "# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n",
    "\n",
    "###########################################################\n",
    "# Biochemical model\n",
    "###########################################################\n",
    "\n",
    "mdl = Model()\n",
    "with mdl:\n",
    "    # Species\n",
    "    Pump, CaPump, PV, PVMg, PVCa, Mg = Species.Create()\n",
    "    Ca = Species.Create(valence=2)\n",
    "\n",
    "    # Calbindin\n",
    "    CBs, CBf, CBsCa, CBfCa, CBmob, CBimmob = SubUnitState.Create()\n",
    "    CBsSU, CBfSU, CBmobSU = SubUnit.Create(\n",
    "        [CBs, CBsCa], [CBf, CBfCa], [CBmob, CBimmob]\n",
    "    )\n",
    "    CB = Complex.Create([CBsSU, CBfSU, CBmobSU], statesAsSpecies=True)\n",
    "\n",
    "    # Channels\n",
    "    CaPc, CaPo = SubUnitState.Create()\n",
    "    CaP_SU = SubUnit.Create([CaPc, CaPo])\n",
    "    CaPchan = Channel.Create([CaP_SU, CaP_SU, CaP_SU])\n",
    "\n",
    "    BK, BKCa, BKopen, BKclose = SubUnitState.Create()\n",
    "    BKCaSU = SubUnit.Create([BK, BKCa])\n",
    "    BKocSU = SubUnit.Create([BKopen, BKclose])\n",
    "    BKchan = Channel.Create([BKCaSU, BKCaSU, BKCaSU, BKCaSU, BKocSU])\n",
    "\n",
    "    SK_C1, SK_C2, SK_C3, SK_C4, SK_O1, SK_O2 = SubUnitState.Create()\n",
    "    SKchan = Channel.Create([SK_C1, SK_C2, SK_C3, SK_C4, SK_O1, SK_O2])\n",
    "\n",
    "    AMPA_C, AMPA_C1, AMPA_C2, AMPA_D1, AMPA_D2, AMPA_O = SubUnitState.Create()\n",
    "    AMPA = Channel.Create([AMPA_C, AMPA_C1, AMPA_C2, AMPA_D1, AMPA_D2, AMPA_O])\n",
    "\n",
    "    Leak = SubUnitState.Create()\n",
    "    L = Channel.Create([Leak])\n",
    "    \n",
    "    r = ReactionManager()\n",
    "\n",
    "    vsys = VolumeSystem.Create()\n",
    "    with vsys:\n",
    "        # PVCa\n",
    "        PV + Ca <r[1]> PVCa\n",
    "        r[1].K = PVca_f, PVca_b\n",
    "\n",
    "        # PVMg\n",
    "        PV + Mg <r[1]> PVMg\n",
    "        r[1].K = PVmg_f_kcst, PVmg_b_kcst\n",
    "\n",
    "        with CB[...]:\n",
    "            # Fast binding\n",
    "            CBf + Ca <r[1]> CBfCa\n",
    "            r[1].K = CBf_f_kcst, CBf_b_kcst\n",
    "\n",
    "            # Slow binding\n",
    "            CBs + Ca <r[1]> CBsCa\n",
    "            r[1].K = CBs_f_kcst, CBs_b_kcst\n",
    "\n",
    "        diff_Ca   = Diffusion.Create(Ca, DCST)\n",
    "        diff_CB   = Diffusion.Create(CB[:, :, CBmob], DCB)\n",
    "        diff_PV   = Diffusion.Create(PV, DPV)\n",
    "        diff_PVCa = Diffusion.Create(PVCa, DPV)\n",
    "        diff_PVMg = Diffusion.Create(PVMg, DPV)\n",
    "\n",
    "    ssys = SurfaceSystem.Create()\n",
    "    with ssys:\n",
    "        # Ca Pump\n",
    "        Pump.s + Ca.i <r[1]> CaPump.s >r[2]> Pump.s\n",
    "        r[1].K = P_f, P_b\n",
    "        r[2].K = P_k\n",
    "    \n",
    "        # CaP channel\n",
    "        with CaPchan[...]:\n",
    "            CaPc.s <r[1]> CaPo.s\n",
    "            r[1].K = VDepRate(alpha_cap), VDepRate(beta_cap)\n",
    "        OC_CaP = GHKCurr.Create(\n",
    "            CaPchan[CaPo, CaPo, CaPo], Ca, CaP_P,\n",
    "            computeflux=True, virtual_oconc=Ca_oconc\n",
    "        )\n",
    "    \n",
    "        # BK channel\n",
    "        with BKchan[..., BKclose]:\n",
    "            BK.s + Ca.i <r[1]> BKCa.s\n",
    "            r[1].K = BK_f, BKc_b\n",
    "\n",
    "        with BKchan[..., BKopen]:\n",
    "            BK.s + Ca.i <r[1]> BKCa.s\n",
    "            r[1].K = BK_f, BKo_b\n",
    "\n",
    "        with BKchan[...]:\n",
    "            BKclose.s <r[1]> BKopen.s\n",
    "            r[1].K = (\n",
    "                CompDepRate(lambda s: BK_oc_f[s.Count(BKCa)], [BKchan]),\n",
    "                CompDepRate(lambda s: BK_oc_b[s.Count(BKCa)], [BKchan])\n",
    "            )\n",
    "        OC_BK = OhmicCurr.Create(BKchan[..., BKopen], BK_G, BK_rev)\n",
    "\n",
    "        # SK channel\n",
    "        with SKchan[...]:\n",
    "            ((SK_C1.s + Ca.i <r[1]> SK_C2.s)\\\n",
    "                      + Ca.i <r[2]> SK_C3.s)\\\n",
    "                      + Ca.i <r[3]> SK_C4.s\n",
    "            r[1].K = dirc2_t, invc1_t\n",
    "            r[2].K = dirc3_t, invc2_t\n",
    "            r[3].K = dirc4_t, invc3_t\n",
    "            \n",
    "            SK_C3.s <r[1]> SK_O1.s\n",
    "            SK_C4.s <r[2]> SK_O2.s\n",
    "            r[1].K = diro1_t, invo1_t\n",
    "            r[2].K = diro2_t, invo2_t\n",
    "        OC_SK = OhmicCurr.Create(SKchan[SK_O1|SK_O2], SK_G, SK_rev)\n",
    "\n",
    "        # AMPA channel\n",
    "        with AMPA[...]:\n",
    "            AMPA_C.s <r['A1']> AMPA_C1.s <r['A2']> AMPA_C2.s <r[3]> AMPA_O.s\n",
    "            r['A1'].K = 0, ru1\n",
    "            r['A2'].K = 0, ru2\n",
    "            r[3].K = ro, rc\n",
    "\n",
    "            AMPA_C1.s <r[1]> AMPA_D1.s\n",
    "            AMPA_C2.s <r[2]> AMPA_D2.s\n",
    "            r[1].K = rd, rr\n",
    "            r[2].K = rd, rr\n",
    "        OC_AMPAR1 = OhmicCurr.Create(AMPA[AMPA_O], AMPA_G, AMPA_rev)\n",
    "\n",
    "        # Leak current channel\n",
    "        OC_L = OhmicCurr.Create(L[Leak], L_G, L_rev)\n",
    "    \n",
    "###########################################################\n",
    "# Mesh and compartmentalization\n",
    "###########################################################\n",
    "\n",
    "mesh = DistMesh(mesh_file, 1e-6)\n",
    "\n",
    "with mesh.asLocal(owned=False):\n",
    "    cyto = Compartment.Create(mesh.tets, vsys)\n",
    "    cyto.Conductivity = 1 / Ra\n",
    "\n",
    "    smoothTets = mesh.tetGroups['smooth']\n",
    "    spinyTets = mesh.tetGroups['spiny']\n",
    "\n",
    "    smooth = Patch.Create(smoothTets.surface & mesh.surface, cyto, None, ssys)\n",
    "    spiny = Patch.Create(spinyTets.surface & mesh.surface, cyto, None, ssys)\n",
    "\n",
    "    memb_smooth = Membrane.Create([smooth], capacitance=memb_capac_proximal)\n",
    "    memb_spiny = Membrane.Create([spiny], capacitance=memb_capac_spiny)\n",
    "\n",
    "###########################################################\n",
    "# Simulation\n",
    "###########################################################\n",
    "\n",
    "rng = RNG('mt19937', 512, SEED)\n",
    "\n",
    "sim = Simulation(\n",
    "    'DistTetOpSplit', mdl, mesh, rng,\n",
    "    searchMethod=NextEventSearchMethod.GIBSON_BRUCK\n",
    ")\n",
    "\n",
    "rs = ResultSelector(sim)\n",
    "\n",
    "with mesh.asLocal():\n",
    "    Pots = rs.VERTS(mesh.surface.verts).V\n",
    "    CaConc = rs.TETS().Ca.Conc\n",
    "    CaConc.metaData['Vols'] = [tet.Vol for tet in mesh.tets]\n",
    "    Currents = rs.TRIS(mesh.surface).OC_CaP.I\n",
    "\n",
    "sim.toSave(Pots, CaConc, Currents, dt=DT)\n",
    "\n",
    "with XDMFHandler('DistCaburst') as hdf:\n",
    "    sim.toDB(hdf, 'CaBurstSim')\n",
    "\n",
    "    sim.newRun()\n",
    "\n",
    "    # Set temperature for ghk reactions\n",
    "    sim.Temp = TEMPERATURE + 273.15\n",
    "\n",
    "    # Setting initial conditions\n",
    "    simPatches = [sim.smooth, sim.spiny]\n",
    "    smoothArea = Parameter(smooth.Area, 'm^2')\n",
    "    spinyArea = Parameter(spiny.Area, 'm^2')\n",
    "    for patch, area in zip(simPatches, [smoothArea, spinyArea]):\n",
    "        patch.Pump.Count = round(P_ro * area)\n",
    "\n",
    "        for s in CaPchan[...]:\n",
    "            patch.LIST(s).Count = round(CaP_ro*area*CaP_p[s.Count(CaPo)])\n",
    "\n",
    "        for s in BKchan[...]:\n",
    "            isOpen, nbCa = s.Count(BKopen), s.Count(BKCa)\n",
    "            patch.LIST(s).Count = round(BK_ro*area*BK_p[isOpen][nbCa])\n",
    "\n",
    "        patch.SKchan[SK_C1].Count = round(SK_ro*area*SK_C1_p)\n",
    "        patch.SKchan[SK_C2].Count = round(SK_ro*area*SK_C2_p)\n",
    "        patch.SKchan[SK_C3].Count = round(SK_ro*area*SK_C3_p)\n",
    "        patch.SKchan[SK_C4].Count = round(SK_ro*area*SK_C4_p)\n",
    "        patch.SKchan[SK_O1].Count = round(SK_ro*area*SK_O1_p)\n",
    "        patch.SKchan[SK_O2].Count = round(SK_ro*area*SK_O2_p)\n",
    "\n",
    "    sim.spiny.L[Leak].Count = round(L_ro_spiny * spinyArea)\n",
    "    sim.smooth.L[Leak].Count = round(L_ro_proximal * smoothArea)\n",
    "\n",
    "    sim.smooth.AMPA[AMPA_C].Count = round(AMPA_Ro * smoothArea)\n",
    "\n",
    "    sim.cyto.Ca.Conc = Ca_iconc\n",
    "    sim.cyto.Mg.Conc = Mg_conc\n",
    "\n",
    "    sim.cyto.CB[CBs,   CBf,   CBimmob].Conc = iCBsf_conc\n",
    "    sim.cyto.CB[CBsCa, CBf,   CBimmob].Conc = iCBCaf_conc\n",
    "    sim.cyto.CB[CBs,   CBfCa, CBimmob].Conc = iCBsCa_conc\n",
    "    sim.cyto.CB[CBsCa, CBfCa, CBimmob].Conc = iCBCaCa_conc\n",
    "\n",
    "    sim.cyto.CB[CBs,   CBf,   CBmob].Conc = CBsf_conc\n",
    "    sim.cyto.CB[CBsCa, CBf,   CBmob].Conc = CBCaf_conc\n",
    "    sim.cyto.CB[CBs,   CBfCa, CBmob].Conc = CBsCa_conc\n",
    "    sim.cyto.CB[CBsCa, CBfCa, CBmob].Conc = CBCaCa_conc\n",
    "\n",
    "    sim.cyto.PV.Conc = PV_conc\n",
    "    sim.cyto.PVCa.Conc = PVCa_conc\n",
    "    sim.cyto.PVMg.Conc = PVMg_conc\n",
    "\n",
    "    sim.EfieldDT = EF_DT\n",
    "\n",
    "    sim.ALL(Membrane).Potential = init_pot\n",
    "\n",
    "    for t in np.arange(0, ENDT, DT):\n",
    "        if MPI.rank == 0:\n",
    "            print(f'Run timestep {t}')\n",
    "        # Update AMPA receptors reaction rate\n",
    "        sim.smooth.A1['fwd'].K = rb * Glut(t - glut_start)\n",
    "        sim.smooth.A2['fwd'].K = rb * Glut(t - glut_start)\n",
    "\n",
    "        sim.run(t)\n",
    "```\n",
    "\n",
    "The biochemical model declaration does not involve anything specific to the distributed mesh solver and is thus identical for parallel or even serial simulations. In this chapter, we will mainly focus on the differences related to geometry declaration.\n",
    "\n",
    "## Mesh partionioning and loading\n",
    "\n",
    "In this chapter, we will use the following reconstructed mesh of a Purkinje cell dendritic tree:\n",
    "\n",
    "<img src=\"images/distributed_full_mesh.png\"/>\n",
    "\n",
    "The mesh can be downloaded [here](https://github.com/CNS-OIST/STEPS_Example/tree/master/user_manual/source/API_2/meshes/caburst_dist/CNG_segmented_2.msh) and visualized with [Gmsh](http://gmsh.info/).\n",
    "Note that the mesh tetrahedrons are classified and annotated into two components, representing smooth dendrite (orange) and spiny dendrite (green). These annotations will then be used in STEPS for creating corresponding patches.\n",
    "\n",
    "Distributed meshes are created in the python script with [Distmesh](API_geom.rst#steps.API_2.geom.DistMesh), a different class from the one that was used for parallel simulations (`TetMesh`). In contrast to `TetMesh`, that could load meshes from a variety of file formats, distributed meshes can only be created from meshes saved to the [Gmsh](http://gmsh.info/) format.\n",
    "However, while `TetMeshes` required an additional partitioning step in the python script, `DistMesh` can automatically be partitioned upon mesh creation:\n",
    "\n",
    "```python\n",
    "mesh = DistMesh('path/to/mesh_file.msh, scale=1e-6)\n",
    "```\n",
    "\n",
    "The above line loads and distributes the mesh. Like for `TetMesh`, it also takes a `scale` parameter to rescale the dimensions to meters, if needed.\n",
    "\n",
    "Although the automatic partitioning is convenient, it can often lead to sub-optimal partitions in which spatially close but disconnected parts of the mesh are grouped in the same partition. In addition, the mesh has to be fully loaded by one MPI rank before being distributed, which can be an issue in cases where the mesh is too big to fully fit in memory. As we saw in the [parallel simulations](STEPS_Tutorial_MPI.ipynb) chapter, it is usually better to pre-partition meshes with dedicated partitioning software like [Metis](http://glaros.dtc.umn.edu/gkhome/metis/metis/overview).\n",
    "\n",
    "In this chapter, we will thus pre-partition the mesh from the [Gmsh](http://gmsh.info/) software but save each partition to a separate file, so that, when loaded into STEPS, each MPI rank will only load its part of the mesh in memory.\n",
    "\n",
    "Once the mesh is loaded in Gmsh, it can be partitioned with Modules $\\rightarrow$ Mesh $\\rightarrow$ Partition, which opens the following dialog:\n",
    "\n",
    "<img src=\"images/distributed_metis_partitioning.png\"/>\n",
    "\n",
    "We will split it into 256 partitions using Metis. After the partitioning is complete, we can see the partitions that METIS created:\n",
    "\n",
    "<img src=\"images/distributed_partitioned_mesh.png\"/>\n",
    "\n",
    "Each color represents a different partition. We then export the mesh with File $\\rightarrow$ Export..., select a destination folder and a file name ending with the .msh extension. We then make sure that \"Save one file per partition\" is checked in the following dialog:\n",
    "\n",
    "<img src=\"images/distributed_export_split.png\"/>\n",
    "\n",
    "This splits the mesh into 256 distinct files suffixed with `_1.msh`, `_2.msh`, etc. The corresponding files can be downloaded from [here](https://github.com/CNS-OIST/STEPS_Example/tree/master/user_manual/source/API_2/meshes/caburst_dist/split_256/)\n",
    "\n",
    "In STEPS, the mesh is then loaded with e.g.:\n",
    "```python\n",
    "mesh = Distmesh('path/to/mesh_prefix', scale=1e-6)\n",
    "```\n",
    "We only give the part of the path that is common to all split mesh files (excluding the underscore before the partition number) and STEPS will automatically load `path/to/mesh_prefix_1.msh` in rank 0, `path/to/mesh_prefix_2.msh` in rank 1, etc. This is the method that we use in the script that we take as example in this chapter:\n",
    "\n",
    "```python\n",
    "###########################################################\n",
    "# Mesh Parameters\n",
    "###########################################################\n",
    "\n",
    "mesh_file = '../meshes/caburst_dist/split_256/CNG_segmented_2_split_256'\n",
    "\n",
    "#...\n",
    "\n",
    "###########################################################\n",
    "# Mesh and compartmentalization\n",
    "###########################################################\n",
    "\n",
    "mesh = DistMesh(mesh_file, 1e-6)\n",
    "\n",
    "#...\n",
    "```\n",
    "\n",
    "## Local and global element lists\n",
    "\n",
    "Each MPI rank loads the part of the mesh that corresponds to its partition. The elements (tetrahedrons, triangles, vertices) can then be refered to by two types of indices: a **global** index that uniquely identifies the element accross all MPI ranks; and a **local** index that is specific to each MPI rank. The following schematic shows a mesh split in two partitions along with the global (top part) and local (bottom part) indices of elements. For simplicity, we represent triangles intead of tetrahedrons but the same ideas apply to tetrahedral meshes.\n",
    "\n",
    "<img src=\"images/distributed_partition_schematic.png\"/>\n",
    "\n",
    "The green tetrahedrons are owned by rank 0 and the blue tetrahedrons by rank 1. The thicker red line represents the boundary between the two partitions. Note that in addition to the elements that are owned by an MPI rank (represented in darker colors and solid borders), each MPI rank also contains a shell of non-owned (or \"ghost\") elements (represented in lighter colors and dashed borders) at the partition boundary. These non-owned elements share vertices with owned elements but are owned by a different MPI rank. These non-owned elements are required for synchronizing diffusion events across partition boundaries.\n",
    "\n",
    "As can be seen on the schematic, the global and local indices are in general different and it is thus important to keep track of whether a list of elements contains indices that are global or local to the MPI rank. By default, to ensure compatibility with code written for non-distributed `TetMesh` meshes, all element lists are created as global lists. We can thus create the `GlobalLst` list that is represented on the top part of the schematic (solid yellow borders) with:\n",
    "```python\n",
    "with mesh:\n",
    "    GlobalLst = TetList([45, 40, 46, 52, 38, 37])\n",
    "```\n",
    "The indices that we give are the global element indices, and both rank 0 and rank 1 hold the same list that refers to the same elements.\n",
    "\n",
    "To specify that a list is created from local indices, all lists of elements can be given an additional `local` keyword parameter. So we can declare the `LocalLst` list that is represented on the bottom part of the schematic (solid pink borders) with:\n",
    "```python\n",
    "with mesh:\n",
    "    LocalLst = TetList([0, 1, 2, 3], local=True)\n",
    "```\n",
    "Note that although both ranks execute the same code and display the same value of `LocalLst.indices`, the list refers to different mesh elements in rank 0 and rank 1. \n",
    "\n",
    "### Local / global conversions\n",
    "\n",
    "We can convert the local list to its global counterpart with `localLst.toGlobal()`:\n",
    "\n",
    "| Variable | Rank 0  | Rank 1 |\n",
    "|---|---|---|\n",
    "| `LocalLst.indices` | `[0, 1, 2, 3]` |`[0, 1, 2, 3]`|\n",
    "| `LocalLst.toGlobal().indices` | `[4, 5, 9, 19]` |`[0, 1, 2, 3]`|\n",
    "\n",
    "Although the local and global indices of some elements (like `localLst` in rank 1 here) can be identical, global and local indices are in general different.\n",
    "\n",
    "Converting a local list to global is always guaranteed to return a list that has the same number of elements. However, the reverse conversion from global to local, done with e.g. `GlobalLst.toLocal()`, will discard the elements that are not owned by the MPI rank in which the conversion occurs. The corresponding local lists are shown in the bottom part of the schematic (solid orange border).\n",
    "\n",
    "If the `toLocal` method is given an `owned=False` keyword parameter, the returned list will also include elements that are local to the MPI rank but which are not owned by it. These lists are represented with dashed brown borders on the schematic.\n",
    "\n",
    "| Variable | Rank 0  | Rank 1 |\n",
    "|---|---|---|\n",
    "| `GlobalLst.indices` | `[45, 40, 46, 52, 38, 37]` |`[45, 40, 46, 52, 38, 37]`|\n",
    "| `GlobalLst.toLocal().indices` | `[20, 16, 21]` |`[28, 23, 22]`|\n",
    "| `GlobalLst.toLocal(owned=False).indices` | `[20, 16, 21, 63, 59]` |`[58, 60, 28, 23, 22]`|\n",
    "\n",
    "Depending on whether we include non-owned elements (`owned=False`), the number of elements in local lists can be different. In general, we only need to consider non-owned elements when declaring compartments or patches from local lists of elements. In that case, non-owned elements are necessary so that each MPI rank can know whether diffusion can occur to the elements in other MPI ranks.\n",
    "\n",
    "Since the `toLocal` method can change the number of elements in the list, when the elements are shared across several MPI ranks, we cannot recover the original global list by calling `toGlobal`. `GlobalLst.toLocal()` basically distributes its elements to the MPI ranks that owned them. We can however recover the original list with the [combineWithOperator](API_geom.rst#steps.API_2.geom.RefList.combineWithOperator) method:\n",
    "\n",
    "```python\n",
    "import operator\n",
    "\n",
    "with mesh:\n",
    "    lst = TetList([45, 40, 46, 52, 38, 37])\n",
    "    lst_local = lst.toLocal()\n",
    "    \n",
    "    lst_local_global = lst_local.toGlobal()\n",
    "    lst_merge = lst_local.combineWithOperator(operator.or_)\n",
    "```\n",
    "This code results in the following values:\n",
    "    \n",
    "| Variable | Rank 0  | Rank 1 |\n",
    "|---|---|---|\n",
    "| `lst.indices` | `[45, 40, 46, 52, 38, 37]` |`[45, 40, 46, 52, 38, 37]`|\n",
    "| `lst_local.indices` | `[20, 16, 21]` |`[28, 23, 22]`|\n",
    "| `lst_local_global.indices` | `[45, 40, 46]` |`[52, 38, 37]`|\n",
    "| `lst_merge.indices` | `[45, 40, 46, 52, 38, 37]` |`[45, 40, 46, 52, 38, 37]`|\n",
    "\n",
    "Calling the `combineWithOperator` method allows us to recover the original global list. This method takes a binary operator that should combine two lists into a merged list, this operator gets repeatedly applied to create the merged list.\n",
    "Any function that takes two global lists and returns a global list can be given to `combineWithOperator` but most of the time, it is easier to use one of the binary operator functions in the [operator](https://docs.python.org/3/library/operator.html) python package. Here we use `operator.or_`, which corresponds to the `|` operator that we would normally use to combine lists (see the [corresponding chapter](STEPS_Tutorial_Diffusion.ipynb)).\n",
    "\n",
    "In order to determine whether a given element list is local, one can call the [isLocal](API_geom.rst#steps.API_2.geom.RefList.isLocal) method.\n",
    "\n",
    "### Using the mesh locally\n",
    "\n",
    "Element lists that are directly accessed through the mesh or its components (compartments, patches, membranes, etc.) are global lists by default. To avoid the MPI synchronization necessary to obtain these global lists, it is possible to use the [asLocal](API_geom.rst#steps.API_2.geom.DistMesh.asLocal) method with the following syntax:\n",
    "\n",
    "```python\n",
    "with mesh.asLocal():\n",
    "    localTets = mesh.tets\n",
    "```\n",
    "\n",
    "As long as we are in the `with mesh.asLocal():` block, mesh properties will be local by default. The same thing applies to mesh components like compartments, etc. Note that `with mesh.asLocal():` does not change whether lists created in the block will be global or local, the `local` keyword argument should still be provided to all lists that are explicitely created, and global lists can still be used in a `with mesh.asLocal():` block.\n",
    "\n",
    "Like for `toLocal`, the `asLocal` method can take an `owned` keyword argument that defaults to `True` so the above code only considers owned elements. To consider non-owned elements as well, one would write:\n",
    "\n",
    "```python\n",
    "with mesh.asLocal(owned=False):\n",
    "    allLocalTets = mesh.tets\n",
    "```\n",
    "\n",
    "This is usually not needed, except when declaring compartments or patches from lists of local elements. As we saw earlier, non-owned elements are necessary for diffusion and since diffusions operate within compartments / patches, each MPI rank needs to know whether its non-owned elements are part of the same compartment / patch as its owned elements.\n",
    "\n",
    "Finally, when using distributed meshes, it is advisable to use `with mesh.asGlobal():` instead of `with mesh:`. They have the same effect since the mesh is in global mode by default, but the former makes it clearer which parts of the code use the mesh globally.\n",
    "\n",
    "## Physical group tags\n",
    "\n",
    "The gmsh file format allows the creation of [physical group](http://gmsh.info/doc/texinfo/gmsh.html#Elementary-entities-vs-physical-groups) tags in the mesh file. Physical groups have a unique integer identifier in the mesh but can also be given a name. The mesh that we use in this chapter has two physical groups: `spiny` and `smooth` corresponding respectively to tetrahedrons from the spiny dendrites and to tetrahedrons of the smooth dendrites (displayed in green and orange earlier).\n",
    "\n",
    "In a STEPS script, we can get a list of elements that are tagged with e.g.:\n",
    "```python\n",
    "with mesh:\n",
    "    smoothTets = mesh.tetGroups['smooth']\n",
    "```\n",
    "As we saw in the previous section, this would return a global list of all tetrahedrons that are tagged with the 'smooth' tag. If we want only the local tetrahedrons (including non-owned tetrahedrons) we would use:\n",
    "```python\n",
    "with mesh.asLocal(owned=False):\n",
    "    localSmoothTets = mesh.tetGroups['smooth']\n",
    "```\n",
    "\n",
    "There are three `DistMesh` properties that allow access to tagged elements:\n",
    "\n",
    "- [tetGroups](API_geom.rst#steps.API_2.geom.DistMesh.tetGroups) that gives access to tagged tetrahedrons\n",
    "- [triGroups](API_geom.rst#steps.API_2.geom.DistMesh.triGroups) that gives access to tagged triangles\n",
    "- [vertGroups](API_geom.rst#steps.API_2.geom.DistMesh.vertGroups) that gives access to tagged vertices\n",
    "\n",
    "We will not use `triGroups` or `vertGroups` in this chapter but they work in the same way as `tetGroups`.\n",
    "\n",
    "## Creating compartments and patches\n",
    "\n",
    "### Compartments\n",
    "\n",
    "Going back to our main example, we first create the `cyto` compartment. This compartment will contain all the tetrahedrons in the mesh and will thus be created from the `mesh.tets` list. We could declare it as we would in a `'TetOpSplit'` simulation, using global indices:\n",
    "```python\n",
    "with mesh:\n",
    "    cyto = Compartment.Create(mesh.tets, vsys)\n",
    "    # ...\n",
    "```\n",
    "The issue with this code, however, is that all MPI ranks will hold `mesh.tets`, the full list of tetrahedrons in the whole mesh. Since the goal of a distributed simulation is to have each MPI rank only consider tetrahedrons that are in its partition, it is preferable to create the compartment from lists of local tetrahedrons.\n",
    "\n",
    "We thus use the `mesh.asLocal(owned=False)` syntax we saw in the previous section:\n",
    "\n",
    "```python\n",
    "with mesh.asLocal(owned=False):\n",
    "    cyto = Compartment.Create(mesh.tets, vsys)\n",
    "    cyto.Conductivity = 1 / Ra\n",
    "```\n",
    "\n",
    "Since we are in a `with mesh.asLocal(owned=False):` block, `mesh.tets` returns a local list incuding non-owned elements.\n",
    "\n",
    "With the `'Tetexact'` and `'TetOpSplit'` solvers, the volume **resistivity** `Ra` (in Ohm.m) is set for the membrane object **after** simulation creation (by calling e.g. `sim.membrane.VolRes = Ra`, see [the calcium burst chapter](STEPS_Tutorial_CaBurst.ipynb#Initialization)). The `'DistTetOpSplit'` distributed solver instead requires setting the volume **conductivity** (in S/m) of compartments **before** the simulation. We thus set the [Conductivity](API_geom.rst#steps.API_2.geom.Compartment.Conductivity) property to the reciprocal of the resistivity `Ra`. Note that we could also give the `conductivity` keyword argument upon creation of the compartment: `cyto = Compartment.Create(mesh.tets, vsys, conductivity=1 / Ra)`.\n",
    "If the keyword argument is not supplied and the `Conductivity` property not set, its value defaults to 0.\n",
    "\n",
    "### Patches\n",
    "\n",
    "We want to create two patches that correspond to the spiny and smooth parts of the mesh surface. Since the tags in the mesh files are associated with tetrahedrons and not triangles, we first need to get the local lists of `'spiny'` and `'smooth'` tetrahedrons. We then compute the surface of these local lists and intersect it with the surface of the mesh:\n",
    "\n",
    "```python\n",
    "with mesh.asLocal(owned=False):\n",
    "    #...\n",
    "    \n",
    "    smoothTets = mesh.tetGroups['smooth']\n",
    "    spinyTets = mesh.tetGroups['spiny']\n",
    "\n",
    "    smooth = Patch.Create(smoothTets.surface & mesh.surface, cyto, None, ssys)\n",
    "    spiny = Patch.Create(spinyTets.surface & mesh.surface, cyto, None, ssys)\n",
    "```\n",
    "\n",
    "The patch creation is exactly the same as for `'Tetexact'` or `'TetOpSplit'` simulations, we provide the list of elements (here a local list that also includes non-owned elements), the inner compartment (`cyto`), the outer compartment (which is absent here) and the associated surface system.\n",
    "\n",
    "The local list of triangles that is given is obtained by first computing the surface of the list of local tetrahedrons (in red and purple in the figure below) with e.g. `smoothTets.surface` (see the documentation of the [surface](API_geom.rst#steps.API_2.geom.TetList.surface) property). We then compute the intersection between this surface and the surface of the mesh to get rid of the internal surface that corresponds to the partition boundaries (the red part). The resulting surface is represented in purple in the figure below:\n",
    "\n",
    "<img src=\"images/distributed_patch_creation.png\"/>\n",
    "\n",
    "### Direct creation from physical group tags\n",
    "\n",
    "Although we do not do it in our main example, it is also possible to create a compartment or patch directly from a physical group tag. For example, if all tetrahedrons in our mesh were tagged with the `'cyto'` physical group tag, we could have created the `cyto` compartment with:\n",
    "\n",
    "```python\n",
    "with mesh:\n",
    "    cyto = Compartment.Create(vsys)\n",
    "```\n",
    "\n",
    "In that case, we do not need to supply a list of tetrahedrons so we also do not need to use `mesh.asLocal(owned=False):`. The same thing could have been done for the patches if the mesh contained `smooth` and `spiny` tags for triangles instead of tetrahedrons. We could then directly create the patches like so:\n",
    "\n",
    "```python\n",
    "with mesh:\n",
    "    smooth = Patch.Create(cyto, None, ssys)\n",
    "    spiny = Patch.Create(cyto, None, ssys)\n",
    "```\n",
    "\n",
    "### Membranes\n",
    "\n",
    "Finally, we create the smooth and spiny membranes with:\n",
    "\n",
    "```python\n",
    "with mesh.asLocal(owned=False):\n",
    "    #...\n",
    "    \n",
    "    memb_smooth = Membrane.Create([smooth], capacitance=memb_capac_proximal)\n",
    "    memb_spiny = Membrane.Create([spiny], capacitance=memb_capac_spiny)\n",
    "```\n",
    "\n",
    "Note that, in contrast with membrane creation for the `TetOpSplit` solver, we need to create one membrane per patch and give the membrane capacitance before the simulation. Alternatively, we could have set the membrane capacitance with the [Capacitance](API_geom.rst#steps.API_2.geom.Membrane.Capacitance) property:\n",
    "\n",
    "```python\n",
    "with mesh.asLocal(owned=False):\n",
    "    #...\n",
    "    \n",
    "    memb_smooth = Membrane.Create([smooth])\n",
    "    memb_spiny = Membrane.Create([spiny])\n",
    "    \n",
    "    memb_smooth.Capacitance = memb_capac_proximal\n",
    "    memb_spiny.Capacitance = memb_capac_spiny\n",
    "```\n",
    "\n",
    "## Distributed mesh simulation\n",
    "\n",
    "As mentionned before, we will use the distributed `'DistTetOpSplit'` solver, so the simulation object is created like so:\n",
    "\n",
    "```python\n",
    "###########################################################\n",
    "# Simulation\n",
    "###########################################################\n",
    "\n",
    "rng = RNG('mt19937', 512, SEED)\n",
    "\n",
    "sim = Simulation(\n",
    "    'DistTetOpSplit', mdl, mesh, rng,\n",
    "    searchMethod=NextEventSearchMethod.GIBSON_BRUCK\n",
    ")\n",
    "```\n",
    "\n",
    "The main difference from `'Tetexact'` or `'TetOpSplit'` is that we do not need to provide the Efield flag that determines whether membrane potential should be computed (see [corresponding chapter](STEPS_Tutorial_Efield.ipynb#Simulation-and-data-saving); and we do not need to provide a partition object (see [corresponding chapter](STEPS_Tutorial_MPI.ipynb#Using-parallel-solvers). In addition, we set the `searchMethod` keyword argument to the [Gibson Bruck](https://scholar.google.com/scholar_lookup?author=M.+A.+Gibson&author=J.+Bruck+&publication_year=2000&title=Efficient+exact+stochastic+simulation+of+chemical+systems+with+many+species+and+many+channels&journal=J.+Phys.+Chem.+A&volume=9&pages=104) method. \n",
    "Although a different [direct](API_sim.rst#steps.API_2.sim.NextEventSearchMethod.DIRECT) method is also implemented, we currently recommend to always explicitely use the Gibson Bruck method when using `'DistTetOpSplit'`.\n",
    "\n",
    "### Data saving\n",
    "\n",
    "We then declare the data that should be saved:\n",
    "\n",
    "```python\n",
    "with mesh.asLocal():\n",
    "    Pots = rs.VERTS(mesh.surface.verts).V\n",
    "    CaConc = rs.TETS().Ca.Conc\n",
    "    CaConc.metaData['Vols'] = [tet.Vol for tet in mesh.tets]\n",
    "    Currents = rs.TRIS(mesh.surface).OC_CaP.I\n",
    "\n",
    "sim.toSave(Pots, CaConc, Currents, dt=DT)\n",
    "```\n",
    "\n",
    "Since we are using a distributed solver, the data to be saved should also preferentially be local to avoid the creation of global element lists. We thus declare the result selectors inside a `with mesh.asLocal():` block so that `mesh.surface.verts` and `mesh.surface` return local lists of elements.\n",
    "We save the membrane potential over all mesh surface vertices, the calcium concentration in all tetrahedrons, and the calcium GHK currents over all surface triangles.\n",
    "Note that we also record the volume of each tetrahedrons in the `CaConc` metadata (see [corresponding section](STEPS_Tutorial_Diffusion.ipynb#Metadata-saving)) so that we can later recover the quantities of `Ca` in each tetrahedron.\n",
    "\n",
    "We then use the `XDMFHandler` database class that we introduced in a [previous chapter](STEPS_Tutorial_DataSaving.ipynb):\n",
    "\n",
    "```python\n",
    "with XDMFHandler('DistCaburst') as hdf:\n",
    "    sim.toDB(hdf, 'CaBurstSim')\n",
    "\n",
    "    sim.newRun()\n",
    "\n",
    "    # Initial state setting...\n",
    "    # Run loop...\n",
    "```\n",
    "\n",
    "The `XDMFHandler` class is necessary to take advantage of distributed data saving. Instead of creating a single HDF5 file along with its associated XDMF file, it will create one HDF5 and XDMF file per MPI rank as well as a global XDMF file that contains references to the partitions' XDMF files:\n",
    "\n",
    "<img src=\"images/distributed_data_saving_schematic.png\"/>\n",
    "\n",
    "### Running the simulation\n",
    "\n",
    "We run the simulation in the same way as for parallel simulations:\n",
    "```bash\n",
    "mpirun -n 256 python3 STEPS_Tutorial_Distributed.py\n",
    "```\n",
    "\n",
    "Note that, for technical reasons, the number of ranks must be a power of 2. The full simulation is most likely too big to be run on a personnal computer and should instead be run on a computing cluster.\n",
    "\n",
    "However, since the mesh is distributed, it is possible to run the simulation for a smaller subpart of the mesh. We can for example run it on the first 4 mesh parts with:\n",
    "```bash\n",
    "mpirun -n 4 python3 STEPS_Tutorial_Distributed.py\n",
    "```\n",
    "Since only 4 out of the 256 parts are loaded, this can definitely be run on a personnal computer. Note that the results we would obtain from such a simulation are not necessarily biologically relevant since we are changing the ratio of smooth to spiny dendrite surface.\n",
    "\n",
    "## Data visualization\n",
    "\n",
    "The saved data can be visualized in [Paraview](https://www.paraview.org/) as presented in the [data recording and analysis chapter](STEPS_Tutorial_DataSaving.ipynb) by opening the `CaBurstSim_Run0_Full.xmf` file. The data for each MPI rank can also be loaded separately by opening e.g. `CaBurstSim_Run0_rank0.xmf`.\n",
    "Paraview usage is however beyond the scope of this chapter and interested readers should consult the [Paraview user guide](https://docs.paraview.org/en/latest/).\n",
    "\n",
    "As an illustration, here is an example of visualization of intracellular calcium concentrations in a simulation that was run using only the first 4 parts of the mesh (as shown in the previous section):\n",
    "<div class=\"ParaviewFrameWrapper\">\n",
    "<iframe src=\"https://kitware.github.io/paraview-glance/app?name=Distributed_subpart_Ca.vtkjs&url=https://raw.githubusercontent.com/CNS-OIST/STEPS_Example/master/user_manual/source/data/Distributed_subpart_Ca.vtkjs\" class=\"ParaviewFrame\" id=\"Glance_1\" style=\"display:none;\">\n",
    "</iframe>\n",
    "<script type=\"text/javascript\" language=\"javascript\">\n",
    "    setTimeout(function() {document.getElementById(\"Glance_1\").style.display = \"block\";}, 2000);\n",
    "</script>\n",
    "</div>\n",
    "The simulation can be played by opening the menu, switching to the \"GLOBAL\" tab, and clicking on the Play button.\n",
    "\n",
    "Here are examples of Paraview usage and figures made with the data from the full mesh simulation and 3D snapshots of membrane potential and tetrahedron calcium concentration at 8ms:\n",
    "<img src=\"images/distributed_data_visualization.png\"/>\n",
    "\n",
    "<div class=\"ParaviewFrameWrapper\">\n",
    "<iframe src=\"https://kitware.github.io/paraview-glance/app?name=Distributed_full_MembPot_8ms.vtkjs&url=https://raw.githubusercontent.com/CNS-OIST/STEPS_Example/master/user_manual/source/data/Distributed_full_MembPot_8ms.vtkjs\" class=\"ParaviewFrame\" id=\"Glance_2\" style=\"display:none;\">\n",
    "</iframe>\n",
    "<script type=\"text/javascript\" language=\"javascript\">\n",
    "    setTimeout(function() {document.getElementById(\"Glance_2\").style.display = \"block\";}, 2000);\n",
    "</script>\n",
    "</div>\n",
    "\n",
    "<div class=\"ParaviewFrameWrapper\">\n",
    "<iframe src=\"https://kitware.github.io/paraview-glance/app?name=Distributed_full_Ca_8ms.vtkjs&url=https://raw.githubusercontent.com/CNS-OIST/STEPS_Example/master/user_manual/source/data/Distributed_full_Ca_8ms.vtkjs\" class=\"ParaviewFrame\" id=\"Glance_3\" style=\"display:none;\">\n",
    "</iframe>\n",
    "<script type=\"text/javascript\" language=\"javascript\">\n",
    "    setTimeout(function() {document.getElementById(\"Glance_3\").style.display = \"block\";}, 2000);\n",
    "</script>\n",
    "</div>\n",
    "\n",
    "## Data loading in python\n",
    "\n",
    "The data that we recorded can also be loaded in python with the `HDF5Handler` class. STEPS will automatically open the individual `.h5` files corresponding to each MPI rank and the results will be accessible as if everything was saved in a single file.\n",
    "\n",
    "For example, we can plot average values with:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1da3ac2a-7c4f-45d9-9643-7ff88093abd4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import steps.interface\n",
    "\n",
    "from steps.saving import *\n",
    "\n",
    "from matplotlib import pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "with HDF5Handler('scripts/DistCaburst') as hdf:\n",
    "    Pots, CaConc, Currents = hdf['CaBurstSim'].results\n",
    "    \n",
    "    plt.figure(figsize=(10,7))\n",
    "    plt.plot(Pots.time[-1], 1e3 * np.mean(Pots.data[-1], axis=1))\n",
    "    plt.xlabel('Time [s]')\n",
    "    plt.ylabel('Membrane Potential [mV]')\n",
    "    plt.show()\n",
    "    \n",
    "    plt.figure(figsize=(10,7))\n",
    "    vols = CaConc.metaData['Vols']\n",
    "    mols = CaConc.data[-1] * vols\n",
    "    plt.plot(Pots.time[-1], 1e6 * np.sum(mols, axis=1) / sum(vols))\n",
    "    plt.xlabel('Time [s]')\n",
    "    plt.ylabel('Intracellular calcium concentration [uM]')\n",
    "    plt.show()\n",
    "    \n",
    "    plt.figure(figsize=(10,7))\n",
    "    plt.plot(Pots.time[-1], 1e9 * np.sum(Currents.data[-1], axis=1))\n",
    "    plt.xlabel('Time [s]')\n",
    "    plt.ylabel('CaP current [nA]')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1ac8f7b-06c5-4ced-a19a-755af2864d92",
   "metadata": {},
   "source": [
    "The data for these plots has been obtained using the restricted 4 rank run that we discussed previously."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}