From 894715bad3686d8d4eae04af5c55943cd05f52f2 Mon Sep 17 00:00:00 2001 From: Steph McCallum Date: Wed, 7 Oct 2026 13:45:43 -0600 Subject: [PATCH 01/12] restructuring --- README.md | 56 +- codecov.yml | 11 - environment-dev.yml | 16 - environment.yml | 12 - phantomwalk/examples/1-bead-spring-dpd.ipynb | 3035 ----------------- .../7-flowerMD-bead-spring-phantomwalk.ipynb | 314 ++ phantomwalk/lib/__init__.py | 0 phantomwalk/lib/create_system_dpd.py | 329 -- phantomwalk/lib/dpd_utils.py | 296 -- phantomwalk/lib/gpu/create_system_dpd.py | 332 -- phantomwalk/lib/gpu/dpd_utils.py | 307 -- phantomwalk/signac/init.py | 52 + phantomwalk/signac/project.py | 116 + phantomwalk/signac/templates/borah.sh | 20 + phantomwalk/signac/templates/fry.sh | 23 + phantomwalk/signac/templates/script.sh | 4 + phantomwalk/tests/__init__.py | 0 phantomwalk/tests/test_create_system_dpd.py | 46 - phantomwalk/tests/test_dpd_utils.py | 62 - pyproject.toml | 30 - 20 files changed, 531 insertions(+), 4530 deletions(-) delete mode 100644 codecov.yml delete mode 100644 environment-dev.yml delete mode 100644 environment.yml delete mode 100644 phantomwalk/examples/1-bead-spring-dpd.ipynb create mode 100644 phantomwalk/examples/7-flowerMD-bead-spring-phantomwalk.ipynb delete mode 100644 phantomwalk/lib/__init__.py delete mode 100644 phantomwalk/lib/create_system_dpd.py delete mode 100644 phantomwalk/lib/dpd_utils.py delete mode 100644 phantomwalk/lib/gpu/create_system_dpd.py delete mode 100644 phantomwalk/lib/gpu/dpd_utils.py create mode 100644 phantomwalk/signac/init.py create mode 100644 phantomwalk/signac/project.py create mode 100755 phantomwalk/signac/templates/borah.sh create mode 100755 phantomwalk/signac/templates/fry.sh create mode 100755 phantomwalk/signac/templates/script.sh delete mode 100644 phantomwalk/tests/__init__.py delete mode 100644 phantomwalk/tests/test_create_system_dpd.py delete mode 100644 phantomwalk/tests/test_dpd_utils.py delete mode 100644 pyproject.toml diff --git a/README.md b/README.md index c68bf76..2294395 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,6 @@ # PhantomWalk -Polymer system initialization workflow that utilizes a random walk and dissipative particle dynamics as a soft push potential. +This repository has supporting data and examples for the PhantomWalk workflow that is implemented in flowerMD. PhantomWalk is a polymer system initialization workflow that utilizes a random walk and dissipative particle dynamics as a soft push potential. ## Environment -Build a software environment using the `environment.yml` file and the command ```conda env create -f environment.yml``` - -## Examples -1 - Run a dpd simulation and check the bond lengths and inter-particle distances. -2 - Run a dpd simulation with an energy stabilization cutoff. Write out simulation to trajectory file. -3 - Run a dpd simulation with option for angles and dihedrals. Write out to trajectory file. Start a Lennard-Jones WCA simulation with optional angles and dihedrals. -4 - Replace the random walk in the DPD workflow with mbuild self-avoiding random walk. -5 - Run DPD on a rigid body model used for anisotropic coarse-graining. Based on flowerMD classes. - -## Installation - -First, clone the PhantomWalk repository: - -``` sh -git clone git@github.com:cmelab/PhantomWalk -cd PhantomWalk -``` - -Set up & activate the conda environment shipped with PhantomWalk: - -``` sh -conda env create -f ./environment.yml -conda activate phantomwalk -``` - -Install PhantomWalk into the environment with `pip`: - -``` sh -python -m pip install -e . -``` - -### Development Environment - -If PhantomWalk is being installed for development purposes, the dev environment -should be used instead, which provides packages necessary for [testing](#tests). - -``` sh -conda env create -f ./environment-dev.yml -conda activate -``` - -## Tests - -Before running tests, ensure you have activated the [PhantomWalk dev environment](#development-environment). - -PhantomWalk tests can be run by invoking `pytest` in the PhantomWalk repo: - -``` sh -pytest -``` - -See the [pytest documentation](https://docs.pytest.org/en/latest/contents.html) -for more details on how `pytest` works and how to use it. +Build a software environment using the `environment-dev.yml' file and instructions in flowerMD[https://github.com/cmelab/flowerMD]. \ No newline at end of file diff --git a/codecov.yml b/codecov.yml deleted file mode 100644 index bf310a6..0000000 --- a/codecov.yml +++ /dev/null @@ -1,11 +0,0 @@ -comment: - layout: "reach, diff, flags, files" - behavior: default - require_changes: false # if true: only post the comment if coverage changes - require_base: no # [yes :: must have a base report to post] - require_head: yes # [yes :: must have a head report to post] - branches: # branch names that can post comment - - "main" -ignore: - - "phantomwalk/tests" - - "phantomwalk/examples" diff --git a/environment-dev.yml b/environment-dev.yml deleted file mode 100644 index 944d446..0000000 --- a/environment-dev.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: phantomwalk-dev -channels: - - conda-forge -dependencies: - - freud >=3.4 - - gsd >=3.0 - - hoomd>=5.0,!=5.3.0 - - numpy >=2.0 - - python >=3.10, <3.13 - - cmeutils >=1.3 - - jupyter - - pytest - - pytest-cov - - pip - - pip: - - build diff --git a/environment.yml b/environment.yml deleted file mode 100644 index 544ae59..0000000 --- a/environment.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: phantomwalk -channels: - - conda-forge -dependencies: - - freud >=3.4 - - gsd >=3.0 - - hoomd>=5.0,!=5.3.0 - - numpy >=2.0 - - python >=3.10, <3.13 - - cmeutils >=1.3 - - jupyter - - pip diff --git a/phantomwalk/examples/1-bead-spring-dpd.ipynb b/phantomwalk/examples/1-bead-spring-dpd.ipynb deleted file mode 100644 index 8e66b08..0000000 --- a/phantomwalk/examples/1-bead-spring-dpd.ipynb +++ /dev/null @@ -1,3035 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "9ba5e733", - "metadata": {}, - "source": [ - "# Initializing polymer systems using a DPD potential\n", - "## Overview:\n", - "This notebook demonstrates how to run a molecular dynamics simulation of linear bead-spring polymers in the HOOMD-blue simulation engine, using the DPD potential on a random walk packed polymer box. This simulation achieves an intial frame to start a dense polymer melt simulation with another forcefield." - ] - }, - { - "cell_type": "markdown", - "id": "11b0d64f-69fb-477d-8902-89c37b2a3f0d", - "metadata": {}, - "source": [ - "## Imports\n", - "The cell below includes imports directly from the code in this repository (ensure your system path matches where the source code exists), and packages from conda for visualization and analysis." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "88429372", - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "import os\n", - "sys.path.append('../lib/')\n", - "import create_system_dpd\n", - "from create_system_dpd import create_polymer_system_dpd, ejfire, fastfire\n", - "import matplotlib\n", - "import numpy as np \n", - "import gsd, gsd.hoomd \n", - "import hoomd \n", - "import time\n", - "import freud\n", - "import matplotlib_inline\n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline\n", - "matplotlib.style.use(\"ggplot\")\n", - "matplotlib_inline.backend_inline.set_matplotlib_formats(\"svg\")\n", - "import warnings\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "markdown", - "id": "8ea85e94-0911-463c-8f11-4196f836eddc", - "metadata": {}, - "source": [ - "## Step by Step Guide to Core Functions\n", - "\n", - "### Step 1: Call core function\n", - "This DPD MD simulation can be ran in a one line python call of `create_polymer_system_dpd()`. To this function, you pass your system parameters, length and number of polymer chains, density, along with DPD simulation parameters. This function primarily intializes the HOOMD simulation object and assigns the forcefield parameters. It contains a simulation loop that runs the MD simulation until an energy cutoff criteria is reached. We currently have this returning total simulation time, but the particle positions or the last hoomd frame can also be passed back.\n", - "\n", - "### Step 1.1 Random Walk and Frame\n", - "The `create_polymer_system_dpd()` first calls the `initialize_snapshot_rand_walk` function. This function takes the linear topology and generates random positions for the chains in a random walk configuration, with periodic boundary conditions considered. It then initializes a hoomd frame with these coordinates and bead-spring parameters. \n", - "\n", - "### Step 1.2 Writers\n", - "HOOMD GSD writers and log writers can be initialized by passing the correct arguments to `create_polymer_system_dpd()`. Passing `write=True` will trigger file writing. File names and write frequencies can also be changed by passing the correct keyword parameters.\n", - "\n", - "### Step 1.3 Simulation Cutoff\n", - "The simulation runs until `simulation_energy_end` is satisfied. This calculation is based on closest sphere packings and fraction of number density to the densest possible number density of 1.414." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "62050dc2-fe73-4d06-8490-32aa8e86daed", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "N= 40000 :\n" - ] - } - ], - "source": [ - "nruns = 5\n", - "density=[0.2,0.8,0.85,1.0,1.1,1.2,1.3,1.4] #number density. 1.4 is close-packed, so things get weird above it!\n", - "npoly=40\n", - "nmono=1000\n", - "A=250000 #inter-particle repulsion A and bond-stiffness k seem to work well if they're about the same magnitude\n", - "k=250000\n", - "dt=0.001 #step sizes larger than 0.002 seem hard to keep numerically stable\n", - "gamma = 1500 #drag terms larger than 1200 seem to blow up\n", - "r_cut=1.01 #smaller r_cut means smaller neighbor lists, means faster, but larger helps push particles further apart\n", - "bond_l = 1.0 #bond length\n", - "N=npoly*nmono\n", - "print(\"N=\",N,\":\")\n", - "for d in density:\n", - " times = []\n", - " rs = []\n", - " for i in range(nruns):\n", - " seed = np.random.randint(50000)\n", - " last_frame, closest, s, e_cut = fastfire(\n", - " bond_l=bond_l,\n", - " num_pol=npoly,\n", - " num_mon=nmono,\n", - " kT=1.0, #For this paper, keep kT const\n", - " sim_seed=seed,\n", - " np_seed=seed,\n", - " sim_steps_incr=100,\n", - " gsd_file_name='trajectory.gsd',\n", - " gsd_write_freq=50,\n", - " log_file_name='log.txt',\n", - " log_write_freq=10,\n", - " density=d,\n", - " write = True,\n", - " \n", - " dt=dt,\n", - " r_cut=r_cut,\n", - " A=A,\n", - " k=k,\n", - " gamma=gamma,\n", - " )\n", - " times.append(s)\n", - " rs.append(closest)\n", - " #print(\"\\t{:.2f}s, r = {:.2f} \".format(s,closest))\n", - " print(\"density={:.2f}: {:.2f} ({:.2f})s , r = {:.2f} ({:.2f})\".format(d,np.average(times),np.std(times), np.average(rs), np.std(rs)))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "31c44f45-e350-431e-bb38-a8ec845aceae", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2026-08-04T14:47:11.105264\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.10.9, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "rdf_data = np.genfromtxt(\"rdf.csv\", delimiter=\",\")\n", - "plt.plot(rdf_data[:, 0], rdf_data[:, 1])\n", - "plt.title(\"Radial Distribution Function (of the last run)\")\n", - "plt.xlabel(\"$r$\")\n", - "plt.ylabel(\"$g(r)$\")\n", - "plt.show()\n", - "#print(rdf_data)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "5f279783-91f5-4560-8d38-c8be52c09443", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total steps 7200\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2026-08-04T14:47:11.155066\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.10.9, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "slice_idx = 10\n", - "short_idx= None\n", - "\n", - "log = np.genfromtxt(\"log.txt\", names=True)\n", - "pe = log[\"mdcomputeThermodynamicQuantitiespotential_energy\"]\n", - "pairs = log[\"mdpairDPDenergy\"]\n", - "print(\"Total steps\",len(pe)*100+100)\n", - "x_values = range(slice_idx, len(pe[:short_idx]))\n", - "plt.plot(x_values,(pe[slice_idx:short_idx] - pairs[slice_idx:short_idx])/N, label=\"bond energy\")\n", - "plt.plot(x_values,pairs[slice_idx:short_idx]/N, label=\"DPD pair energy\")\n", - "plt.hlines(e_cut,xmin=slice_idx,xmax=len(pairs[:short_idx]),color=\"blue\",linestyle=\"--\",label=\"Calculated Pair Energy Cutoff\")\n", - "plt.title(\"Energy vs Time (of the last run)\")\n", - "plt.xlabel(\"Frame (time/log_freq)\")\n", - "plt.ylabel(\"Energy/N\")\n", - "plt.legend()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "59980585-3703-42c8-8c71-81e76eefcbb3", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "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.12.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/phantomwalk/examples/7-flowerMD-bead-spring-phantomwalk.ipynb b/phantomwalk/examples/7-flowerMD-bead-spring-phantomwalk.ipynb new file mode 100644 index 0000000..b812f56 --- /dev/null +++ b/phantomwalk/examples/7-flowerMD-bead-spring-phantomwalk.ipynb @@ -0,0 +1,314 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Test notebook for DPD functionality" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "is_executing": true + } + }, + "outputs": [], + "source": [ + "import warnings\n", + "import time\n", + "\n", + "warnings.filterwarnings(\"ignore\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "pycharm": { + "is_executing": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mbuild time: 2.945217375003267\n" + ] + } + ], + "source": [ + "from flowermd.library import LJChain\n", + "\n", + "start_time = time.perf_counter()\n", + "molecules = LJChain(\n", + " num_mols=[20],\n", + " lengths=[500],\n", + " bead_sequence=[\"_A\"],\n", + " bead_mass={\"_A\": 1.0},\n", + " bond_lengths={\"_A-_A\": 1.0},\n", + " identify_connections=False,\n", + ")\n", + "mbuild_time = time.perf_counter()\n", + "print(\"mbuild time:\", mbuild_time - start_time)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "molecules.identify_connections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## New Random Walk System Class" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "set()" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "molecules.dihedral_types" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(10000, 3)\n" + ] + } + ], + "source": [ + "from flowermd.library import RandomWalk\n", + "import unyt as u\n", + "\n", + "ref_length = 1.0 * u.Unit(\"nm\")\n", + "ref_mass = 1.0 * u.Unit(\"g/mol\")\n", + "ref_energy = 1.0 * u.Unit(\"kcal / mol\")\n", + "ref_values_dict = {\"length\": ref_length, \"mass\": ref_mass, \"energy\": ref_energy}\n", + "\n", + "system = RandomWalk(\n", + " molecules=molecules,\n", + " density=1.4 * u.Unit(\"nm**-3\"),\n", + " bond_length=1.0,\n", + " buffer=0.5,\n", + " base_units=ref_values_dict,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## DPD Forcefield class" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "from flowermd.library.forcefields import DPD" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "A = 250000\n", + "gamma = 1500\n", + "kT = 1.0\n", + "r_cut = 1.01\n", + "bond_k = 250000\n", + "bond_r0 = 1.0\n", + "dpd_ff = DPD(\n", + " A=A, gamma=gamma, kT=kT, r_cut=r_cut, bond_k=bond_k, bond_r0=bond_r0\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Forcefield class" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 75 of 500; TPS: 148.42; ETA: 0.0 minutes\n", + "Step 150 of 500; TPS: 194.26; ETA: 0.0 minutes\n", + "Step 225 of 500; TPS: 222.68; ETA: 0.0 minutes\n", + "Step 300 of 500; TPS: 251.14; ETA: 0.0 minutes\n", + "Step 375 of 500; TPS: 276.89; ETA: 0.0 minutes\n", + "Step 450 of 500; TPS: 300.76; ETA: 0.0 minutes\n", + "Step 25 of 100; TPS: 862.87; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.8557499647140503\n", + "Total time: 5.54019899998093\n" + ] + } + ], + "source": [ + "from flowermd.library import PhantomWalk\n", + "\n", + "sim = PhantomWalk(\n", + " initial_state=system.hoomd_snapshot,\n", + " forcefield=dpd_ff.hoomd_forces,\n", + " gsd_write_freq=100,\n", + " log_write_freq=50,\n", + " n_steps_dpd=500,\n", + " n_steps_fire=100,\n", + ")\n", + "end_time = time.perf_counter()\n", + "print(\"Total time:\", end_time - start_time)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import hoomd\n", + "\n", + "for writer in sim.operations.writers:\n", + " if isinstance(writer, hoomd.write.GSD):\n", + " writer.flush()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "gmso ff time: 11.914976875006687\n" + ] + } + ], + "source": [ + "## option to use gmso parameterization from FF xml.\n", + "from flowermd.library.forcefields import Bead_Spring_DPD\n", + "\n", + "gmso_start = time.perf_counter()\n", + "system.apply_forcefield(\n", + " force_field=Bead_Spring_DPD(),\n", + " r_cut=1.01,\n", + " kT=1.0,\n", + " speedup_by_molgraph=True,\n", + " speedup_by_moltag=False,\n", + ")\n", + "gmso_end = time.perf_counter()\n", + "print(\"gmso ff time:\", gmso_end - gmso_start)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.hoomd_forcefield" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.12.14" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/phantomwalk/lib/__init__.py b/phantomwalk/lib/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/phantomwalk/lib/create_system_dpd.py b/phantomwalk/lib/create_system_dpd.py deleted file mode 100644 index 925bd0c..0000000 --- a/phantomwalk/lib/create_system_dpd.py +++ /dev/null @@ -1,329 +0,0 @@ -import numpy as np -import hoomd -import time - -#from dpd_utils import initialize_snapshot_rand_walk,add_hoomd_writers -from phantomwalk.lib.dpd_utils import initialize_snapshot_rand_walk,add_hoomd_writers - - -def get_close(rdf): - ''' - Find closest separation between two particles from first nonzero bin of the rdf - - returns value of the bin center with the nonzero rdf - ''' - b =(rdf.rdf !=0).argmax() - return rdf.bin_centers[b] - -def create_polymer_system_dpd( - num_pol, - num_mon, - density, - A=50000, - k=50000, - bond_l=1.0, - r_cut=1.01, - kT=1.0, - gamma=1200, - dt=0.001, - sim_seed=1234, - np_seed=1234, - sim_steps_incr=100, - loop_timeout=60, - min_pair_dist=0.80, - energy_scaling= 1, - bond_tolerance = 0.05, - write=True, - gsd_file_name='trajectory.gsd', - gsd_write_freq=10, - log_file_name='log.txt', - log_write_freq=10 -): - ''' - Initialize a polymer system in a cubic box using a random walk and a HOOMD simulation with DPD forces. - - ---------- - Parameters - ---------- - num_pol : int, required - number of polymers in system - num_mon : int, required - length of polymers in system - density : float, required - number density to initalize the system - A : float, default 50000 - DPD force parameter - k : int, default 50000 - spring constant for harmonic bonds - bond_l : float, default 1.0 - harmonic bond rest length - r_cut : float, default 1.01 - cutoff pair distance for neighbor list - kT : float, default 1.0 - temperature of thermostat - gamma : float, default 1200 - DPD drag parameter (mass/time) - dt : float, default 0.001 - timestep for HOOMD simulation - sim_seed : int, default 1234 - seed for the HOOMD simulation state - np_seed : int, default 1234 - seed for random number generator in random walk - sim_steps_incr : int, default, 100 - the number of steps to run in a loop before checking simulation end criteria - loop_timeout : int, default 60 - seconds time out to manually end the simulation before it reaches the cutoff, meant to prevent large file creation - min_pair_dist : float, default 0.8 - run until no two particles are within this distance - energy_scaling : float, default 1 - scaling factor to manually adjust per-particle energy cutoff stop criteria - Fractions (0.5, 0.2) will lower the threshold (longer sims), and large numbers (10,15) will shorten simulations. - write : bool, True - trigger for writing out gsd and log files - gsd_file_name : str, default 'trajectory.gsd' - the file that the gsd trajectory data will be saved to - gsd_write_freq : int, default 10 - Period to write simulation data to the gsd file. - log_file_name : str, default 'log.txt' - the file that the .txt log file will be saved to - log_write_freq : int, default 10 - Period to write simulation data to the log file. - - ------- - Returns - ------- - - snapshot : HOOMD frame - last frame from the DPD simulation - time : float - execution time of the DPD workflow, build + simulation wall time - - ''' - start_time = time.perf_counter() - frame = initialize_snapshot_rand_walk( - num_mon=num_mon, - num_pol=num_pol, - bond_length=bond_l, - density=density, - seed=np_seed - ) - - build_stop = time.perf_counter() - harmonic = hoomd.md.bond.Harmonic() - harmonic.params["b"] = dict(r0=bond_l, k=k) - integrator = hoomd.md.Integrator(dt=dt) - integrator.forces.append(harmonic) - simulation = hoomd.Simulation(device=hoomd.device.auto_select(), seed=sim_seed) - simulation.operations.integrator = integrator - simulation.create_state_from_snapshot(frame) - const_vol = hoomd.md.methods.ConstantVolume(filter=hoomd.filter.All()) - integrator.methods.append(const_vol) - nlist = hoomd.md.nlist.Cell(buffer=0.4,exclusions=['bond']) - simulation.operations.nlist = nlist - DPD = hoomd.md.pair.DPD(nlist, default_r_cut=r_cut, kT=kT) - DPD.params[('A', 'A')] = dict(A=A, gamma=gamma) - integrator.forces.append(DPD) - - N = num_mon*num_pol - maxPerParticle = A*( (min_pair_dist*min_pair_dist)/(2*r_cut) - min_pair_dist + r_cut/2) - maxPerParticle *= density*density*energy_scaling - maxPerBond = k*bond_tolerance*bond_tolerance/2 - #print("max per particle= {:.2f}, max per bond= {:.2f}".format(maxPerParticle, maxPerBond)) - - if write: - rdf,thermo = add_hoomd_writers( simulation, gsd_file_name, gsd_write_freq, log_file_name,log_write_freq ) - - simulation.run(1) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - - while DPD.energy/N > maxPerParticle: - check_time = time.perf_counter() - if (check_time-start_time) > loop_timeout: - print("Simulation timed out in energy") - return simulation.state.get_snapshot(), get_close(rdf), loop_timeout - simulation.run(sim_steps_incr) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - - while harmonic.energy/frame.bonds.N > maxPerBond: - check_time = time.perf_counter() - if (check_time-start_time) > loop_timeout: - print("Simulation timed out in bond energy") - return simulation.state.get_snapshot(), get_close(rdf), loop_timeout - simulation.run(sim_steps_incr) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - - closest = get_close(rdf) - while closest < min_pair_dist: - check_time = time.perf_counter() - if (check_time-start_time) > loop_timeout: - print("Simulation timed out in rdf polish") - return simulation.state.get_snapshot(), get_close(rdf), loop_timeout - simulation.run(sim_steps_incr) - closest = get_close(rdf) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - - end_time = time.perf_counter() - total_time = end_time - start_time - np.savetxt( "rdf.csv", np.vstack((rdf.bin_centers, rdf.rdf)).T, delimiter=",", header="r, g(r)") - return simulation.state.get_snapshot(), closest, total_time, maxPerParticle - -def ejfire( - num_pol, - num_mon, - density, - A=50000, - k=50000, - bond_l=1.0, - r_cut=1.01, - kT=1.0, - gamma=1200, - dt=0.001, - sim_seed=1234, - np_seed=1234, - sim_steps_incr=100, - loop_timeout=60, - min_pair_dist=0.80, - energy_scaling= 1, - bond_tolerance = 0.05, - write=True, - gsd_file_name='trajectory.gsd', - gsd_write_freq=10, - log_file_name='log.txt', - log_write_freq=10 -): - start_time = time.perf_counter() - frame = initialize_snapshot_rand_walk( - num_mon=num_mon, - num_pol=num_pol, - bond_length=bond_l, - density=density, - seed=np_seed - ) - - build_stop = time.perf_counter() - harmonic = hoomd.md.bond.Harmonic() - harmonic.params["b"] = dict(r0=bond_l, k=k) - integrator = hoomd.md.Integrator(dt=dt) - integrator.forces.append(harmonic) - simulation = hoomd.Simulation(device=hoomd.device.auto_select(), seed=sim_seed) - simulation.operations.integrator = integrator - simulation.create_state_from_snapshot(frame) - const_vol = hoomd.md.methods.ConstantVolume(filter=hoomd.filter.All()) - integrator.methods.append(const_vol) - nlist = hoomd.md.nlist.Cell(buffer=0.4,exclusions=['bond']) - simulation.operations.nlist = nlist - DPD = hoomd.md.pair.DPD(nlist, default_r_cut=r_cut, kT=kT) - DPD.params[('A', 'A')] = dict(A=A, gamma=gamma) - integrator.forces.append(DPD) - - fire = hoomd.md.minimize.FIRE(dt=dt,force_tol=1e-2, angmom_tol=1000, energy_tol=1e-2) - fire.methods.append(const_vol) - fire.forces.append(DPD) - fire.forces.append(harmonic) - - N = num_mon*num_pol - - if write: - rdf,thermo = add_hoomd_writers( simulation, gsd_file_name, gsd_write_freq, log_file_name,log_write_freq ) - - simulation.run(1) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - simulation.run(500) - simulation.operations.integrator = fire - while not (fire.converged): - check_time = time.perf_counter() - if (check_time-start_time) > loop_timeout: - print("Simulation timed out in FIRE") - return simulation.state.get_snapshot(), get_close(rdf), loop_timeout, 0.0 - simulation.run(sim_steps_incr) - closest = get_close(rdf) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - closest = get_close(rdf) - end_time = time.perf_counter() - total_time = end_time - start_time - np.savetxt( "rdf.csv", np.vstack((rdf.bin_centers, rdf.rdf)).T, delimiter=",", header="r, g(r)") - return simulation.state.get_snapshot(), closest, total_time, 0.0 - - - - - - - - - -def fastfire( - num_pol, - num_mon, - density, - A=250000, - k=250000, - bond_l=1.0, - r_cut=1.01, - kT=1.0, - gamma=1500, - dt=0.001, - sim_seed=1234, - np_seed=1234, - sim_steps_incr=100, - loop_timeout=60, - write=True, - gsd_file_name='trajectory.gsd', - gsd_write_freq=10, - log_file_name='log.txt', - log_write_freq=10 -): - start_time = time.perf_counter() - frame = initialize_snapshot_rand_walk( - num_mon=num_mon, - num_pol=num_pol, - bond_length=bond_l, - density=density, - seed=np_seed - ) - - build_stop = time.perf_counter() - harmonic = hoomd.md.bond.Harmonic() - harmonic.params["b"] = dict(r0=bond_l, k=k) - integrator = hoomd.md.Integrator(dt=dt) - integrator.forces.append(harmonic) - simulation = hoomd.Simulation(device=hoomd.device.auto_select(), seed=sim_seed) - simulation.operations.integrator = integrator - simulation.create_state_from_snapshot(frame) - const_vol = hoomd.md.methods.ConstantVolume(filter=hoomd.filter.All()) - integrator.methods.append(const_vol) - nlist = hoomd.md.nlist.Cell(buffer=0.4,exclusions=['bond']) - simulation.operations.nlist = nlist - DPD = hoomd.md.pair.DPD(nlist, default_r_cut=r_cut, kT=kT) - DPD.params[('A', 'A')] = dict(A=A, gamma=gamma) - integrator.forces.append(DPD) - - fire = hoomd.md.minimize.FIRE(dt=dt,force_tol=1e-1, angmom_tol=1000, energy_tol=1e-1) - fire.methods.append(const_vol) - fire.forces.append(DPD) - fire.forces.append(harmonic) - if write: - rdf,thermo = add_hoomd_writers( simulation, gsd_file_name, gsd_write_freq, log_file_name,log_write_freq ) - simulation.run(500) - simulation.operations.integrator = fire - simulation.run(200) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - closest = get_close(rdf) - end_time = time.perf_counter() - total_time = end_time - start_time - np.savetxt( "rdf.csv", np.vstack((rdf.bin_centers, rdf.rdf)).T, delimiter=",", header="r, g(r)") - return simulation.state.get_snapshot(), closest, total_time, 0.0 diff --git a/phantomwalk/lib/dpd_utils.py b/phantomwalk/lib/dpd_utils.py deleted file mode 100644 index ce27992..0000000 --- a/phantomwalk/lib/dpd_utils.py +++ /dev/null @@ -1,296 +0,0 @@ -import numpy as np -import freud -import gsd, gsd.hoomd -import hoomd - -def initialize_snapshot_rand_walk(num_pol, num_mon, density, bond_length=1.0, seed=1234): - ''' - Create a HOOMD snapshot of a cubic box with the number density given by input parameters. Configure particles using a random walk. - - ''' - rng = np.random.default_rng(seed) - N = num_pol * num_mon - L = np.cbrt(N / density) - positions = np.empty((N, 3)) - starts = rng.uniform(0, L, size=(num_pol, 3)) - thetas = rng.uniform(0,2*np.pi,size=(num_pol,num_mon-1)) - phis = np.arccos(rng.uniform(-1,1,size=(num_pol,num_mon-1))) - x = np.sin(phis)*np.cos(thetas) - y = np.sin(phis)*np.sin(thetas) - z = np.cos(phis) - deltas = np.stack([x,y,z],axis=2) * bond_length - displacements = np.cumsum(deltas, axis=1) - positions_view = positions.reshape(num_pol, num_mon, 3) - positions_view[:, 0, :] = starts - positions_view[:, 1:, :] = starts[:, None, :] + displacements - positions %= L - positions -= L/2 #TODO: use box in flowerMD - indices = np.arange(N).reshape(num_pol, num_mon) - bonds = np.column_stack([ - indices[:, :-1].ravel(), - indices[:, 1:].ravel() - ]) - frame = gsd.hoomd.Frame() - frame.particles.types = ['A'] - frame.particles.N = N - frame.particles.position = positions - frame.bonds.N = len(bonds) - frame.bonds.group = bonds - frame.bonds.types = ['b'] - frame.configuration.box = [L,L,L,0,0,0] - return frame - -def add_hoomd_writers( - sim, - gsd_file_name="trajectory.gsd", - gsd_write_freq=10, - log_file_name="log.txt", - log_write_freq=10 -): - """Add GSD trajectory and log writers to a HOOMD simulation. - - This function creates: - - a GSD trajectory writer for particle configurations - - a table logger for thermodynamic and force quantities - - thermodynamic compute operations for system properties - - Parameters - ---------- - sim : hoomd.Simulation - HOOMD simulation object to which writers and - computes will be attached. - gsd_file_name : str, default 'trajectory.gsd' - the file that the gsd trajectory data will be saved to - gsd_write_freq : int, default 10 - Period to write simulation data to the gsd file. - log_file_name : str, default 'log.txt' - the file that the .txt log file will be saved to - log_write_freq : int, default 10 - Period to write simulation data to the log file. - - Returns - ------- - None - This function modifies the simulation object in place - and does not return a value. - - """ - - class FreudRDFCalc(hoomd.custom.Action): - """Compute RDF periodically as the simulation progresses.""" - - def __init__(self, sim, rdf): - self._sim = sim - self._rdf = rdf - - def act(self, timestep): - snap = self._sim.state.get_snapshot() - self._rdf.compute(system=snap, reset=True) - - rdf = freud.density.RDF(bins=100, r_max=2.0) - rdf_calc = FreudRDFCalc(sim, rdf) - - - gsd_logger = hoomd.logging.Logger( - categories=["scalar", "string", "sequence"] - ) - logger = hoomd.logging.Logger(categories=["scalar", "string"]) - gsd_logger.add(sim, quantities=["timestep", "tps"]) - logger.add(sim, quantities=["timestep", "tps"]) - thermo_props = hoomd.md.compute.ThermodynamicQuantities(filter=hoomd.filter.All()) - sim.operations.computes.append(thermo_props) - log_quantities = [ - "kinetic_temperature", - "potential_energy", - "kinetic_energy", - "volume", - "pressure", - "pressure_tensor", - ] - gsd_logger.add(thermo_props, quantities=log_quantities) - logger.add(thermo_props, quantities=log_quantities) - - for f in sim.operations.integrator.forces: - logger.add(f, quantities=["energy"]) - gsd_logger.add(f, quantities=["energy"]) - - gsd_trigger = hoomd.trigger.Or([ - hoomd.trigger.Before(2), - hoomd.trigger.Periodic(int(gsd_write_freq))]) - - gsd_writer = hoomd.write.GSD( - filename=gsd_file_name, - trigger=gsd_trigger, - mode="wb", - dynamic=["momentum", "property"], - filter=hoomd.filter.All(), - logger=gsd_logger, - ) - gsd_writer.maximum_write_buffer_size = 64 * 1024 * 1024 - log_trigger = hoomd.trigger.Or([ - hoomd.trigger.Before(2), - hoomd.trigger.Periodic(int(log_write_freq))]) - - table_file = hoomd.write.Table( - output=open(log_file_name, mode="w", newline="\n"), - trigger=log_trigger, - logger=logger, - max_header_len=None, - ) - - rdf_action = hoomd.write.CustomWriter(action=rdf_calc, trigger=log_trigger) - sim.operations.writers.append(rdf_action) - - sim.operations.writers.append(gsd_writer) - sim.operations.writers.append(table_file) - return rdf, thermo_props - -def run_lj_simulation( - dpd_final_frame, - random_seed=25, - dt=0.0005, - lj_epsilon=1.0, - lj_sigma=1.0, - lj_r_cut=2.5, - fene_k=30, - fene_r0=1.01, - fene_epsilon=1.0, - fene_sigma=1.0, - fene_delta=0.05, - angle_k=3.0, - angle_t0=1.0, - dihedral_k=3.0, - dihedral_d=-1, - dihedral_n=3, - dihedral_phi0=0 -): - """Run an LJ + FENE + angle + dihedral equilibration simulation in HOOMD-blue. - - Parameters - ---------- - dpd_final_frame : gsd.hoomd.Frame - Initial configuration used to start the LJ simulation. - - random_seed : int, optional, default 24 - Random seed for reproducibility. - - dt : float, optional, default 0.001 - Integration timestep. - - lj_epsilon : float, optional, default 1.0 - Lennard-Jones interaction strength. - - lj_sigma : float, optional, default 1.0 - Lennard-Jones particle size parameter. - - lj_r_cut : float, optional, default 1.2 - Lennard-Jones cutoff radius. - - fene_k : float, optional, default 30 - FENE bond spring constant. - - fene_r0 : float, optional, default 1.05 - FENE maximum bond extension parameter. - - fene_epsilon : float, optional, default 1.0 - FENE-WCA epsilon parameter. - - fene_sigma : float, optional, default 1.0 - FENE-WCA sigma parameter. - - fene_delta : float, optional, default 0 - FENE potential shift parameter. - - angle_k : float, optional, default 3.0 - Harmonic angle force constant. - - angle_t0 : float, optional, default 1.0 - Equilibrium bond angle (radians). - - dihedral_k : float, optional, default 3.0 - Dihedral force constant. - - dihedral_d : int, optional, default -1 - Dihedral sign parameter. - - dihedral_n : int, optional, default 3 - Dihedral periodicity. - - dihedral_phi0 : float, optional, default 0 - Dihedral phase offset (radians). - - Returns - ------- - hoomd.Simulation - HOOMD simulation object after short equilibration run. - """ - - forces = [] - - # Pair force (LJ) - nlist = hoomd.md.nlist.Cell(buffer=0.40, exclusions=["bond"]) - lj = hoomd.md.pair.LJ(nlist=nlist) - lj.params[('A', 'A')] = dict(epsilon=lj_epsilon, sigma=lj_sigma) - lj.r_cut[('A', 'A')] = lj_r_cut - forces.append(lj) - - # FENE bonds - fene_bond = hoomd.md.bond.FENEWCA() - fene_bond.params['b'] = dict( - k=fene_k, - r0=fene_r0, - epsilon=fene_epsilon, - sigma=fene_sigma, - delta=fene_delta, - ) - forces.append(fene_bond) - - ''' TODO add angles and dihedrals back into frame generation - # Angle potential - harmonic_angle = hoomd.md.angle.Harmonic() - harmonic_angle.params["A-A-A"] = dict(k=angle_k, t0=angle_t0) - forces.append(harmonic_angle) - - # Dihedral potential - dihedral = hoomd.md.dihedral.Periodic() - dihedral.params["A-A-A-A"] = dict( - k=dihedral_k, - d=dihedral_d, - n=dihedral_n, - phi0=dihedral_phi0 - ) - forces.append(dihedral) - ''' - - # Integrator - integrator_lj = hoomd.md.Integrator(dt=dt) - integrator_lj.forces = forces - - integrator_lj.methods.append( - hoomd.md.methods.ConstantVolume(filter=hoomd.filter.All()) - ) - - # Simulation - LJ_sim = hoomd.Simulation( - device=hoomd.device.auto_select(), - seed=random_seed - ) - - LJ_sim.create_state_from_snapshot(snapshot=dpd_final_frame) - LJ_sim.operations.integrator = integrator_lj - - # Use your shared writer setup - add_hoomd_writers(sim=LJ_sim) - - # Run short equilibration - LJ_sim.run(0) - LJ_sim.run(100) - - # Flush outputs - for writer in LJ_sim.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - - print("LJ simulation finished.") - - return LJ_sim diff --git a/phantomwalk/lib/gpu/create_system_dpd.py b/phantomwalk/lib/gpu/create_system_dpd.py deleted file mode 100644 index 466521a..0000000 --- a/phantomwalk/lib/gpu/create_system_dpd.py +++ /dev/null @@ -1,332 +0,0 @@ -import numpy as np -import hoomd -import time -import os - -#from dpd_utils import initialize_snapshot_rand_walk,add_hoomd_writers -from phantomwalk.lib.gpu.dpd_utils import initialize_snapshot_rand_walk,add_hoomd_writers,compute_rdf - - -def get_close(rdf): - ''' - Find closest separation between two particles from first nonzero bin of the rdf - - returns value of the bin center with the nonzero rdf - ''' - b =(rdf.rdf !=0).argmax() - return rdf.bin_centers[b] - -def create_polymer_system_dpd( - num_pol, - num_mon, - density, - A=50000, - k=50000, - bond_l=1.0, - r_cut=1.01, - kT=1.0, - gamma=1200, - dt=0.001, - sim_seed=1234, - np_seed=1234, - sim_steps_incr=100, - loop_timeout=60, - min_pair_dist=0.80, - energy_scaling= 1, - bond_tolerance = 0.05, - write=True, - gsd_file_name=None, - gsd_write_freq=10, - log_file_name='log.txt', - log_write_freq=10 -): - ''' - Initialize a polymer system in a cubic box using a random walk and a HOOMD simulation with DPD forces. - - ---------- - Parameters - ---------- - num_pol : int, required - number of polymers in system - num_mon : int, required - length of polymers in system - density : float, required - number density to initalize the system - A : float, default 50000 - DPD force parameter - k : int, default 50000 - spring constant for harmonic bonds - bond_l : float, default 1.0 - harmonic bond rest length - r_cut : float, default 1.01 - cutoff pair distance for neighbor list - kT : float, default 1.0 - temperature of thermostat - gamma : float, default 1200 - DPD drag parameter (mass/time) - dt : float, default 0.001 - timestep for HOOMD simulation - sim_seed : int, default 1234 - seed for the HOOMD simulation state - np_seed : int, default 1234 - seed for random number generator in random walk - sim_steps_incr : int, default, 100 - the number of steps to run in a loop before checking simulation end criteria - loop_timeout : int, default 60 - seconds time out to manually end the simulation before it reaches the cutoff, meant to prevent large file creation - min_pair_dist : float, default 0.8 - run until no two particles are within this distance - energy_scaling : float, default 1 - scaling factor to manually adjust per-particle energy cutoff stop criteria - Fractions (0.5, 0.2) will lower the threshold (longer sims), and large numbers (10,15) will shorten simulations. - write : bool, True - trigger for writing out gsd and log files - gsd_file_name : str, default 'trajectory.gsd' - the file that the gsd trajectory data will be saved to - gsd_write_freq : int, default 10 - Period to write simulation data to the gsd file. - log_file_name : str, default 'log.txt' - the file that the .txt log file will be saved to - log_write_freq : int, default 10 - Period to write simulation data to the log file. - - ------- - Returns - ------- - - snapshot : HOOMD frame - last frame from the DPD simulation - time : float - execution time of the DPD workflow, build + simulation wall time - - ''' - start_time = time.perf_counter() - frame = initialize_snapshot_rand_walk( - num_mon=num_mon, - num_pol=num_pol, - bond_length=bond_l, - density=density, - seed=np_seed - ) - - build_stop = time.perf_counter() - harmonic = hoomd.md.bond.Harmonic() - harmonic.params["b"] = dict(r0=bond_l, k=k) - integrator = hoomd.md.Integrator(dt=dt) - integrator.forces.append(harmonic) - simulation = hoomd.Simulation(device=hoomd.device.auto_select(), seed=sim_seed) - simulation.operations.integrator = integrator - simulation.create_state_from_snapshot(frame) - const_vol = hoomd.md.methods.ConstantVolume(filter=hoomd.filter.All()) - integrator.methods.append(const_vol) - nlist = hoomd.md.nlist.Cell(buffer=0.4,exclusions=['bond']) - simulation.operations.nlist = nlist - DPD = hoomd.md.pair.DPD(nlist, default_r_cut=r_cut, kT=kT) - DPD.params[('A', 'A')] = dict(A=A, gamma=gamma) - integrator.forces.append(DPD) - - N = num_mon*num_pol - maxPerParticle = A*( (min_pair_dist*min_pair_dist)/(2*r_cut) - min_pair_dist + r_cut/2) - maxPerParticle *= density*density*energy_scaling - maxPerBond = k*bond_tolerance*bond_tolerance/2 - #print("max per particle= {:.2f}, max per bond= {:.2f}".format(maxPerParticle, maxPerBond)) - - if write: - rdf,thermo = add_hoomd_writers( simulation, gsd_file_name, gsd_write_freq, log_file_name,log_write_freq ) - - simulation.run(1) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - - while DPD.energy/N > maxPerParticle: - check_time = time.perf_counter() - if (check_time-start_time) > loop_timeout: - print("Simulation timed out in energy") - return simulation.state.get_snapshot(), get_close(rdf), loop_timeout - simulation.run(sim_steps_incr) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - - while harmonic.energy/frame.bonds.N > maxPerBond: - check_time = time.perf_counter() - if (check_time-start_time) > loop_timeout: - print("Simulation timed out in bond energy") - return simulation.state.get_snapshot(), get_close(rdf), loop_timeout - simulation.run(sim_steps_incr) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - - closest = get_close(rdf) - while closest < min_pair_dist: - check_time = time.perf_counter() - if (check_time-start_time) > loop_timeout: - print("Simulation timed out in rdf polish") - return simulation.state.get_snapshot(), get_close(rdf), loop_timeout - simulation.run(sim_steps_incr) - closest = get_close(rdf) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - - end_time = time.perf_counter() - total_time = end_time - start_time - np.savetxt( "rdf.csv", np.vstack((rdf.bin_centers, rdf.rdf)).T, delimiter=",", header="r, g(r)") - return simulation.state.get_snapshot(), closest, total_time, maxPerParticle - -def ejfire( - num_pol, - num_mon, - density, - A=50000, - k=50000, - bond_l=1.0, - r_cut=1.01, - kT=1.0, - gamma=1200, - dt=0.001, - sim_seed=1234, - np_seed=1234, - sim_steps_incr=100, - loop_timeout=60, - min_pair_dist=0.80, - energy_scaling= 1, - bond_tolerance = 0.05, - write=True, - gsd_file_name='trajectory.gsd', - gsd_write_freq=10, - log_file_name='log.txt', - log_write_freq=10 -): - start_time = time.perf_counter() - frame = initialize_snapshot_rand_walk( - num_mon=num_mon, - num_pol=num_pol, - bond_length=bond_l, - density=density, - seed=np_seed - ) - - build_stop = time.perf_counter() - harmonic = hoomd.md.bond.Harmonic() - harmonic.params["b"] = dict(r0=bond_l, k=k) - integrator = hoomd.md.Integrator(dt=dt) - integrator.forces.append(harmonic) - simulation = hoomd.Simulation(device=hoomd.device.auto_select(), seed=sim_seed) - simulation.operations.integrator = integrator - simulation.create_state_from_snapshot(frame) - const_vol = hoomd.md.methods.ConstantVolume(filter=hoomd.filter.All()) - integrator.methods.append(const_vol) - nlist = hoomd.md.nlist.Cell(buffer=0.4,exclusions=['bond']) - simulation.operations.nlist = nlist - DPD = hoomd.md.pair.DPD(nlist, default_r_cut=r_cut, kT=kT) - DPD.params[('A', 'A')] = dict(A=A, gamma=gamma) - integrator.forces.append(DPD) - - fire = hoomd.md.minimize.FIRE(dt=dt,force_tol=1e-2, angmom_tol=1000, energy_tol=1e-2) - fire.methods.append(const_vol) - fire.forces.append(DPD) - fire.forces.append(harmonic) - - N = num_mon*num_pol - - if write: - rdf,thermo = add_hoomd_writers( simulation, gsd_file_name, gsd_write_freq, log_file_name,log_write_freq ) - - simulation.run(1) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - simulation.run(500) - simulation.operations.integrator = fire - while not (fire.converged): - check_time = time.perf_counter() - if (check_time-start_time) > loop_timeout: - print("Simulation timed out in FIRE") - return simulation.state.get_snapshot(), get_close(rdf), loop_timeout, 0.0 - simulation.run(sim_steps_incr) - closest = get_close(rdf) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - closest = get_close(rdf) - end_time = time.perf_counter() - total_time = end_time - start_time - np.savetxt( "rdf.csv", np.vstack((rdf.bin_centers, rdf.rdf)).T, delimiter=",", header="r, g(r)") - return simulation.state.get_snapshot(), closest, total_time, 0.0 - - - - - - - - - -def fastfire( - num_pol, - num_mon, - density, - A=250000, - k=250000, - bond_l=1.0, - r_cut=1.01, - kT=1.0, - gamma=1500, - dt=0.001, - sim_seed=1234, - np_seed=1234, - sim_steps_incr=100, - loop_timeout=60, - write=True, - gsd_file_name=None, - gsd_write_freq=10, - log_file_name='log.txt', - log_write_freq=10 -): - start_time = time.perf_counter() - frame = initialize_snapshot_rand_walk( - num_mon=num_mon, - num_pol=num_pol, - bond_length=bond_l, - density=density, - seed=np_seed - ) - - build_stop = time.perf_counter() - harmonic = hoomd.md.bond.Harmonic() - harmonic.params["b"] = dict(r0=bond_l, k=k) - integrator = hoomd.md.Integrator(dt=dt) - integrator.forces.append(harmonic) - simulation = hoomd.Simulation(device=hoomd.device.auto_select(), seed=sim_seed) - simulation.operations.integrator = integrator - simulation.create_state_from_snapshot(frame) - const_vol = hoomd.md.methods.ConstantVolume(filter=hoomd.filter.All()) - integrator.methods.append(const_vol) - nlist = hoomd.md.nlist.Cell(buffer=0.4,exclusions=['bond']) - simulation.operations.nlist = nlist - DPD = hoomd.md.pair.DPD(nlist, default_r_cut=r_cut, kT=kT) - DPD.params[('A', 'A')] = dict(A=A, gamma=gamma) - integrator.forces.append(DPD) - - fire = hoomd.md.minimize.FIRE(dt=dt,force_tol=1e-1, angmom_tol=1000, energy_tol=1e-1) - fire.methods.append(const_vol) - fire.forces.append(DPD) - fire.forces.append(harmonic) - if write: - thermo = add_hoomd_writers(sim=simulation, gsd_file_name=gsd_file_name, gsd_write_freq=gsd_write_freq, log_file_name=log_file_name,log_write_freq=log_write_freq ) - simulation.run(500) - simulation.operations.integrator = fire - simulation.run(200) - for writer in simulation.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - rdf = compute_rdf(simulation, bins=100, r_max=1.0) - closest = get_close(rdf) - end_time = time.perf_counter() - del simulation - total_time = end_time - start_time - np.savetxt( "rdf.csv", np.vstack((rdf.bin_centers, rdf.rdf)).T, delimiter=",", header="r, g(r)") - return closest, total_time, 0.0 diff --git a/phantomwalk/lib/gpu/dpd_utils.py b/phantomwalk/lib/gpu/dpd_utils.py deleted file mode 100644 index 9b9c983..0000000 --- a/phantomwalk/lib/gpu/dpd_utils.py +++ /dev/null @@ -1,307 +0,0 @@ -import numpy as np -import freud -import gsd, gsd.hoomd -import hoomd - -def initialize_snapshot_rand_walk(num_pol, num_mon, density, bond_length=1.0, seed=1234): - ''' - Create a HOOMD snapshot of a cubic box with the number density given by input parameters. Configure particles using a random walk. - - ''' - rng = np.random.default_rng(seed) - N = num_pol * num_mon - L = np.cbrt(N / density) - positions = np.empty((N, 3)) - starts = rng.uniform(0, L, size=(num_pol, 3)) - thetas = rng.uniform(0,2*np.pi,size=(num_pol,num_mon-1)) - phis = np.arccos(rng.uniform(-1,1,size=(num_pol,num_mon-1))) - x = np.sin(phis)*np.cos(thetas) - y = np.sin(phis)*np.sin(thetas) - z = np.cos(phis) - deltas = np.stack([x,y,z],axis=2) * bond_length - displacements = np.cumsum(deltas, axis=1) - positions_view = positions.reshape(num_pol, num_mon, 3) - positions_view[:, 0, :] = starts - positions_view[:, 1:, :] = starts[:, None, :] + displacements - positions %= L - positions -= L/2 #TODO: use box in flowerMD - indices = np.arange(N).reshape(num_pol, num_mon) - bonds = np.column_stack([ - indices[:, :-1].ravel(), - indices[:, 1:].ravel() - ]) - frame = gsd.hoomd.Frame() - frame.particles.types = ['A'] - frame.particles.N = N - frame.particles.position = positions - frame.bonds.N = len(bonds) - frame.bonds.group = bonds - frame.bonds.types = ['b'] - frame.configuration.box = [L,L,L,0,0,0] - return frame - -def compute_rdf(sim, bins=100, r_max=1.0): - """Compute the RDF once from the simulation's current state. - - Parameters - ---------- - sim : hoomd.Simulation - HOOMD simulation object to compute the RDF from. - bins : int, default 100 - Number of bins for the RDF histogram. - r_max : float, default 1.0 - Maximum radius for the RDF calculation. - - Returns - ------- - freud.density.RDF - The computed RDF object (access `.rdf` and `.bin_centers` - for the results). - """ - rdf = freud.density.RDF(bins=bins, r_max=r_max) - snap = sim.state.get_snapshot() - rdf.compute(system=snap, reset=True) - return rdf - -def add_hoomd_writers( - sim, - log_file_name="log.txt", - log_write_freq=10, - gsd_file_name=None, - gsd_write_freq=10, -): - """Add a table logger, thermodynamic computes, and (optionally) a GSD - trajectory writer to a HOOMD simulation. - - This function creates: - - a table logger for thermodynamic and force quantities - - thermodynamic compute operations for system properties - - a GSD trajectory writer, only if `gsd_file_name` is provided - - Parameters - ---------- - sim : hoomd.Simulation - HOOMD simulation object to which writers and - computes will be attached. - log_file_name : str, default 'log.txt' - the file that the .txt log file will be saved to - log_write_freq : int, default 10 - Period to write simulation data to the log file. - gsd_file_name : str or None, default None - If provided, the file that GSD trajectory data will be saved to. - If None (default), no GSD writer is created. - gsd_write_freq : int, default 10 - Period to write simulation data to the gsd file - (only used if `gsd_file_name` is provided). - - Returns - ------- - hoomd.md.compute.ThermodynamicQuantities - The thermodynamic compute object attached to the simulation. - """ - logger = hoomd.logging.Logger(categories=["scalar", "string"]) - logger.add(sim, quantities=["timestep", "tps"]) - - thermo_props = hoomd.md.compute.ThermodynamicQuantities(filter=hoomd.filter.All()) - sim.operations.computes.append(thermo_props) - - log_quantities = [ - "kinetic_temperature", - "potential_energy", - "kinetic_energy", - "volume", - "pressure", - "pressure_tensor", - ] - logger.add(thermo_props, quantities=log_quantities) - - for f in sim.operations.integrator.forces: - logger.add(f, quantities=["energy"]) - - log_trigger = hoomd.trigger.Or([ - hoomd.trigger.Before(2), - hoomd.trigger.Periodic(int(log_write_freq)), - ]) - - table_file = hoomd.write.Table( - output=open(log_file_name, mode="w", newline="\n"), - trigger=log_trigger, - logger=logger, - max_header_len=None, - ) - sim.operations.writers.append(table_file) - - if gsd_file_name is not None: - gsd_logger = hoomd.logging.Logger(categories=["scalar", "string", "sequence"]) - gsd_logger.add(sim, quantities=["timestep", "tps"]) - gsd_logger.add(thermo_props, quantities=log_quantities) - for f in sim.operations.integrator.forces: - gsd_logger.add(f, quantities=["energy"]) - - gsd_trigger = hoomd.trigger.Or([ - hoomd.trigger.Before(2), - hoomd.trigger.Periodic(int(gsd_write_freq)), - ]) - - gsd_writer = hoomd.write.GSD( - filename=gsd_file_name, - trigger=gsd_trigger, - mode="wb", - dynamic=["momentum", "property"], - filter=hoomd.filter.All(), - logger=gsd_logger, - ) - gsd_writer.maximum_write_buffer_size = 64 * 1024 * 1024 - sim.operations.writers.append(gsd_writer) - - return thermo_props - -def run_lj_simulation( - dpd_final_frame, - random_seed=25, - dt=0.0005, - lj_epsilon=1.0, - lj_sigma=1.0, - lj_r_cut=2.5, - fene_k=30, - fene_r0=1.01, - fene_epsilon=1.0, - fene_sigma=1.0, - fene_delta=0.05, - angle_k=3.0, - angle_t0=1.0, - dihedral_k=3.0, - dihedral_d=-1, - dihedral_n=3, - dihedral_phi0=0 -): - """Run an LJ + FENE + angle + dihedral equilibration simulation in HOOMD-blue. - - Parameters - ---------- - dpd_final_frame : gsd.hoomd.Frame - Initial configuration used to start the LJ simulation. - - random_seed : int, optional, default 24 - Random seed for reproducibility. - - dt : float, optional, default 0.001 - Integration timestep. - - lj_epsilon : float, optional, default 1.0 - Lennard-Jones interaction strength. - - lj_sigma : float, optional, default 1.0 - Lennard-Jones particle size parameter. - - lj_r_cut : float, optional, default 1.2 - Lennard-Jones cutoff radius. - - fene_k : float, optional, default 30 - FENE bond spring constant. - - fene_r0 : float, optional, default 1.05 - FENE maximum bond extension parameter. - - fene_epsilon : float, optional, default 1.0 - FENE-WCA epsilon parameter. - - fene_sigma : float, optional, default 1.0 - FENE-WCA sigma parameter. - - fene_delta : float, optional, default 0 - FENE potential shift parameter. - - angle_k : float, optional, default 3.0 - Harmonic angle force constant. - - angle_t0 : float, optional, default 1.0 - Equilibrium bond angle (radians). - - dihedral_k : float, optional, default 3.0 - Dihedral force constant. - - dihedral_d : int, optional, default -1 - Dihedral sign parameter. - - dihedral_n : int, optional, default 3 - Dihedral periodicity. - - dihedral_phi0 : float, optional, default 0 - Dihedral phase offset (radians). - - Returns - ------- - hoomd.Simulation - HOOMD simulation object after short equilibration run. - """ - - forces = [] - - # Pair force (LJ) - nlist = hoomd.md.nlist.Cell(buffer=0.40, exclusions=["bond"]) - lj = hoomd.md.pair.LJ(nlist=nlist) - lj.params[('A', 'A')] = dict(epsilon=lj_epsilon, sigma=lj_sigma) - lj.r_cut[('A', 'A')] = lj_r_cut - forces.append(lj) - - # FENE bonds - fene_bond = hoomd.md.bond.FENEWCA() - fene_bond.params['b'] = dict( - k=fene_k, - r0=fene_r0, - epsilon=fene_epsilon, - sigma=fene_sigma, - delta=fene_delta, - ) - forces.append(fene_bond) - - ''' TODO add angles and dihedrals back into frame generation - # Angle potential - harmonic_angle = hoomd.md.angle.Harmonic() - harmonic_angle.params["A-A-A"] = dict(k=angle_k, t0=angle_t0) - forces.append(harmonic_angle) - - # Dihedral potential - dihedral = hoomd.md.dihedral.Periodic() - dihedral.params["A-A-A-A"] = dict( - k=dihedral_k, - d=dihedral_d, - n=dihedral_n, - phi0=dihedral_phi0 - ) - forces.append(dihedral) - ''' - - # Integrator - integrator_lj = hoomd.md.Integrator(dt=dt) - integrator_lj.forces = forces - - integrator_lj.methods.append( - hoomd.md.methods.ConstantVolume(filter=hoomd.filter.All()) - ) - - # Simulation - LJ_sim = hoomd.Simulation( - device=hoomd.device.auto_select(), - seed=random_seed - ) - - LJ_sim.create_state_from_snapshot(snapshot=dpd_final_frame) - LJ_sim.operations.integrator = integrator_lj - - # Use your shared writer setup - add_hoomd_writers(sim=LJ_sim) - - # Run short equilibration - LJ_sim.run(0) - LJ_sim.run(100) - - # Flush outputs - for writer in LJ_sim.operations.writers: - if hasattr(writer, "flush"): - writer.flush() - - print("LJ simulation finished.") - - return LJ_sim diff --git a/phantomwalk/signac/init.py b/phantomwalk/signac/init.py new file mode 100644 index 0000000..66fceaa --- /dev/null +++ b/phantomwalk/signac/init.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +"""Initialize the project's data space. + +Iterates over all defined state points and initializes +the associated job workspace directories. +The result of running this file is the creation of a signac workspace: + - signac.rc file containing the project name + - signac_statepoints.json summary for the entire workspace + - workspace/ directory that contains a sub-directory of every individual statepoint + - signac_statepoints.json within each individual statepoint sub-directory. + +""" + +import signac +import flow +import logging +from collections import OrderedDict +from itertools import product + + +def get_parameters(): + '''''' + parameters = OrderedDict() + parameters["num_mols"] = [100,500,1000,2500,5000,10000,25000,50000,100000] + parameters["lengths"] = [500] + parameters["density"] = [0.85] + parameters["bond_k"]=[15000,20000,25000] + parameters["bond_r0"]=[1.0] + parameters["r_cut"]=[1.01] + parameters["A"]=[1000,5000] + parameters["gamma"]=[800,1000,2000] + parameters["seed"]=[15,35,60,125,240] + + + return list(parameters.keys()), list(product(*parameters.values())) + + +def main(): + project = signac.init_project() + param_names, param_combinations = get_parameters() + # Create workspace of jobs + for params in param_combinations: + statepoint = dict(zip(param_names, params)) + job = project.open_job(statepoint) + job.init() + job.doc.setdefault("sampled", False) + job.doc.setdefault("runs", 0) + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + main() diff --git a/phantomwalk/signac/project.py b/phantomwalk/signac/project.py new file mode 100644 index 0000000..9991ac8 --- /dev/null +++ b/phantomwalk/signac/project.py @@ -0,0 +1,116 @@ +"""Define the project's workflow logic and operation functions. + +Execute this script directly from the command line, to view your project's +status, execute operations and submit them to a cluster. See also: + + $ python src/project.py --help +""" +import signac +import pickle +from flow import FlowProject, directives +from flow.environment import DefaultSlurmEnvironment +import os + + +class DPD(FlowProject): + pass + + +class Borah(DefaultSlurmEnvironment): + hostname_pattern = "borah" + template = "borah.sh" + + @classmethod + def add_args(cls, parser): + parser.add_argument( + "--partition", + default="shortgpu-v100", + help="Specify the partition to submit to." + ) + + +class Fry(DefaultSlurmEnvironment): + hostname_pattern = "fry" + template = "fry.sh" + + @classmethod + def add_args(cls, parser): + parser.add_argument( + "--partition", + default= "batch", + help="Specify the partition to submit to." + ) + +@DPD.operation( + directives={"ngpu": 1, "ncpu": 16, "executable": "python -u"}, name="run" +) +def run(job): + """Run initial single-chain simulation.""" + import warnings + warnings.filterwarnings("ignore") + from flowermd.library import LJChain + from flowermd.library import RandomWalk + import unyt as u + import time + import hoomd + + from flowermd.library.forcefields import DPD + from flowermd.library import PhantomWalk + + with job: + print("------------------------------------") + print("JOB ID NUMBER:") + print(job.id) + print("------------------------------------") + + start_time = time.perf_counter() + molecules = LJChain( + num_mols=job.sp.num_mols, + lengths=job.sp.lengths, + bead_sequence=["_A"], + bead_mass={"_A": 1.0}, + bond_lengths={"_A-_A": 1.0}, + identify_connections=False, + ) + mbuild_time = time.perf_counter() + job.doc.mbuild_time = mbuild_time - start_time + ref_length = 1.0 * u.Unit("nm") + ref_mass = 1.0 * u.Unit("g/mol") + ref_energy = 1.0 * u.Unit("kcal / mol") + ref_values_dict = {"length": ref_length, "mass": ref_mass, "energy": ref_energy} + + system = RandomWalk( + molecules=molecules, + density=job.sp.density * u.Unit("nm**-3"), + bond_length=job.sp.bond_r0, + buffer=0.5, + base_units=ref_values_dict, + seed=job.sp.seed, + ) + + dpd_ff = DPD( + A=job.sp.A, + gamma=job.sp.gamma, + kT=1.0, + r_cut=job.sp.r_cut, + bond_k=job.sp.bond_k, + bond_r0=job.sp.bond_r0 + ) + + sim = PhantomWalk( + initial_state=system.hoomd_snapshot, + forcefield=dpd_ff.hoomd_forces, + gsd_write_freq=1000, + log_write_freq=50, + n_steps_dpd=500, + n_steps_fire=100, + seed=job.sp.seed, + ) + end_time = time.perf_counter() + for writer in sim.operations.writers: + writer.flush() + job.doc.time = end_time - start_time + job.doc.particle_separation = sim.particle_separation + +if __name__ == "__main__": + DPD(environment=Fry).main() diff --git a/phantomwalk/signac/templates/borah.sh b/phantomwalk/signac/templates/borah.sh new file mode 100755 index 0000000..a428ff7 --- /dev/null +++ b/phantomwalk/signac/templates/borah.sh @@ -0,0 +1,20 @@ +{% extends "base_script.sh" %} +{% block header %} +{% set gpus = operations|map(attribute='directives.ngpu')|sum %} +#!/bin/bash +#SBATCH --job-name="{{ id }}" +{% if partition %} +#SBATCH --partition={{ partition }} +{% endif %} +#SBATCH -t {{ 96|format_timedelta }} +{% if gpus %} +#SBATCH --gres gpu:{{ gpus }} +{% endif %} +{% if job_output %} +#SBATCH --output={{ job_output }} +#SBATCH --error={{ job_output }} +{% endif %} +{% block tasks %} +#SBATCH --ntasks={{ np_global }} +{% endblock %} +{% endblock %} diff --git a/phantomwalk/signac/templates/fry.sh b/phantomwalk/signac/templates/fry.sh new file mode 100755 index 0000000..79c1af4 --- /dev/null +++ b/phantomwalk/signac/templates/fry.sh @@ -0,0 +1,23 @@ +{% extends "base_script.sh" %} +{% block header %} +{% set gpus = operations|map(attribute='directives.ngpu')|sum %} +{% set cpus = operations|map(attribute='directives.ncpu')|sum %} +#!/bin/bash +#SBATCH --job-name="{{ id }}" +{% if partition %} +#SBATCH --partition={{ partition }} +{% endif %} +{% if walltime %} +#SBATCH -t {{ 48|format_timedelta }} +{% endif %} +{% if gpus %} +#SBATCH --gres gpu:{{ gpus }} +{% endif %} +{% if job_output %} +#SBATCH --output={{ job_output }} +#SBATCH --error={{ job_output }} +{% endif %} +{% block tasks %} +#SBATCH --ntasks={{ np_global }} +{% endblock %} +{% endblock %} diff --git a/phantomwalk/signac/templates/script.sh b/phantomwalk/signac/templates/script.sh new file mode 100755 index 0000000..f4c003a --- /dev/null +++ b/phantomwalk/signac/templates/script.sh @@ -0,0 +1,4 @@ +{% extends base_script %} +{% block project_header %} +{{ super() }} +{% endblock %} diff --git a/phantomwalk/tests/__init__.py b/phantomwalk/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/phantomwalk/tests/test_create_system_dpd.py b/phantomwalk/tests/test_create_system_dpd.py deleted file mode 100644 index e4635cf..0000000 --- a/phantomwalk/tests/test_create_system_dpd.py +++ /dev/null @@ -1,46 +0,0 @@ -import pytest -import datetime -import os -from contextlib import suppress - -import phantomwalk.lib.create_system_dpd as dpd - -# helper to not have several repetitive try/catch blocks for cleanup -def rm_files(*files): - for fl in files: - try: - os.remove(fl) - except: - pass - -def test_creation(): - loop_timeout = 60 - snap, closest, time, e_cut = dpd.create_polymer_system_dpd(num_pol=5, num_mon=10, density=0.5, loop_timeout = loop_timeout) - assert time < loop_timeout - -def test_custom_log_files(): - # remove files that might've been output by other tests so that file loading - # can fail if it's wrong - rm_files('log.txt', 'trajectory.gsd', 'rdf.csv') - - time_string = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S") - gsd_file_name = f"{time_string}.gsd" - log_file_name = f"{time_string}.txt" - rdf_file_name = f"rdf.csv" - - s = dpd.create_polymer_system_dpd( - num_pol=5, - num_mon=10, - density=0.5, - gsd_file_name=gsd_file_name, - log_file_name=log_file_name - ) - - gsd_exists = os.path.isfile(gsd_file_name) - log_exists = os.path.isfile(log_file_name) - rdf_exists = os.path.isfile(rdf_file_name) - - # clean up after ourselves - rm_files(gsd_file_name, log_file_name, rdf_file_name) - - assert gsd_exists and log_exists diff --git a/phantomwalk/tests/test_dpd_utils.py b/phantomwalk/tests/test_dpd_utils.py deleted file mode 100644 index ed80fd2..0000000 --- a/phantomwalk/tests/test_dpd_utils.py +++ /dev/null @@ -1,62 +0,0 @@ -import pytest -import numpy as np -import gsd.hoomd - -from phantomwalk.lib.dpd_utils import initialize_snapshot_rand_walk - -@pytest.fixture -def frame(): - return initialize_snapshot_rand_walk(num_pol=5, num_mon=10,density=0.8) -''' TODO: update code for non-cubic boxes and update this section -def test_box_is_cubic(frame): - box = default_frame.configuration.box - assert box[0] == box[1] == box[2] - -def test_box_tilt_factors_zero(frame): - box = default_frame.configuration.box - assert box[3] == box[4] == box[5] == 0 -''' - -def test_box_volume_matches_density(): - num_pol, num_mon, density = 10, 20, 0.85 - frame = initialize_snapshot_rand_walk(num_pol, num_mon, density=density) - L = frame.configuration.box[0] - computed_density = (num_pol * num_mon) / (L**3) - assert computed_density == pytest.approx(density, rel=1e-5) - -def test_positions_inside_box(frame): - L = frame.configuration.box[0] - pos = frame.particles.position - assert np.all(pos >= -L / 2) - assert np.all(pos < L / 2) - -def test_bond_count(frame): - num_pol, num_mon = 5, 10 - assert frame.bonds.N == num_pol * (num_mon - 1) - -#TODO add counts for angles and dihedrals -#TODO add code and tests for non-linear and polydisperse systems - -def test_seed_reproducibility(): - f1 = initialize_snapshot_rand_walk(num_pol=3, num_mon=5, density=0.8, seed=99) - f2 = initialize_snapshot_rand_walk(num_pol=3, num_mon=5, density=0.8, seed=99) - np.testing.assert_array_equal(f1.particles.position, f2.particles.position) - -def test_different_seeds_give_different_positions(): - f1 = initialize_snapshot_rand_walk(num_pol=3, num_mon=5, density=0.8, seed=1) - f2 = initialize_snapshot_rand_walk(num_pol=3, num_mon=5, density=0.8, seed=2) - assert not np.allclose(f1.particles.position, f2.particles.position) - -def test_bond_lengths_are_correct(): - """With per-step PBC wrapping, raw distances should equal bond_length directly.""" - bond_length = 1.0 - frame = initialize_snapshot_rand_walk(num_pol=5, num_mon=10, density=0.8, bond_length=bond_length) - pos = frame.particles.position - L = frame.configuration.box[0] - - for a, b in frame.bonds.group: - dr = pos[b] - pos[a] - dr -= L * np.round(dr / L) # minimum image - dist = np.linalg.norm(dr) - - assert 0.95 <= dist <= 1.1 diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index fbd46e3..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,30 +0,0 @@ -[build-system] -requires = ["setuptools >= 77.0.3"] -build-backend = "setuptools.build_meta" - -[project] -name = "phantomwalk" -description = "Polymer system initialization workflow that utilizes a random walk and dissipative particle dynamics as a soft push potential." -readme = "README.md" -license = { text = "GPLv3" } -classifiers=[ - "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", - "Programming Language :: Python", - "Programming Language :: Python :: 3", -] -urls = {Homepage = "https://github.com/cmelab/PhantomWalk"} -requires-python = ">=3.10" -dynamic = ["version"] - -[tool.setuptools] -include-package-data = false - -[tool.setuptools.packages.find] -where = ["."] -include = ["phantomwalk*"] -exclude = ["tests*"] - -[tool.setuptools.package-data] -phantomwalk = [ - "src/**" -] From a5900cc77b6c1a1b575388d5203fe043ffe4777e Mon Sep 17 00:00:00 2001 From: Steph McCallum Date: Thu, 29 Oct 2026 10:28:36 -0600 Subject: [PATCH 02/12] creating paper directory --- .../7-flowerMD-bead-spring-phantomwalk.ipynb | 79 +++++++++---- phantomwalk/paper/figures/README.md | 1 + phantomwalk/signac/init.py | 14 ++- phantomwalk/signac/project.py | 111 +++++++++++------- 4 files changed, 129 insertions(+), 76 deletions(-) create mode 100644 phantomwalk/paper/figures/README.md diff --git a/phantomwalk/examples/7-flowerMD-bead-spring-phantomwalk.ipynb b/phantomwalk/examples/7-flowerMD-bead-spring-phantomwalk.ipynb index b812f56..a52e295 100644 --- a/phantomwalk/examples/7-flowerMD-bead-spring-phantomwalk.ipynb +++ b/phantomwalk/examples/7-flowerMD-bead-spring-phantomwalk.ipynb @@ -40,7 +40,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "mbuild time: 2.945217375003267\n" + "mbuild time: 0.0032745000207796693\n" ] } ], @@ -49,8 +49,8 @@ "\n", "start_time = time.perf_counter()\n", "molecules = LJChain(\n", - " num_mols=[20],\n", - " lengths=[500],\n", + " num_mols=[108],\n", + " lengths=[1],\n", " bead_sequence=[\"_A\"],\n", " bead_mass={\"_A\": 1.0},\n", " bond_lengths={\"_A-_A\": 1.0},\n", @@ -118,7 +118,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "(10000, 3)\n" + "(108, 3)\n" ] } ], @@ -140,6 +140,26 @@ ")" ] }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Box: Lx=4.256950, Ly=4.256950, Lz=4.256950, xy=0.000000, xz=0.000000, yz=0.000000, " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.box" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -149,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -158,7 +178,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -182,7 +202,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -190,15 +210,23 @@ "output_type": "stream", "text": [ "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 75 of 500; TPS: 148.42; ETA: 0.0 minutes\n", - "Step 150 of 500; TPS: 194.26; ETA: 0.0 minutes\n", - "Step 225 of 500; TPS: 222.68; ETA: 0.0 minutes\n", - "Step 300 of 500; TPS: 251.14; ETA: 0.0 minutes\n", - "Step 375 of 500; TPS: 276.89; ETA: 0.0 minutes\n", - "Step 450 of 500; TPS: 300.76; ETA: 0.0 minutes\n", - "Step 25 of 100; TPS: 862.87; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 0.8557499647140503\n", - "Total time: 5.54019899998093\n" + "Step 75 of 1000; TPS: 801.48; ETA: 0.0 minutes\n", + "Step 150 of 1000; TPS: 1553.63; ETA: 0.0 minutes\n", + "Step 225 of 1000; TPS: 2276.89; ETA: 0.0 minutes\n", + "Step 300 of 1000; TPS: 2977.28; ETA: 0.0 minutes\n", + "Step 375 of 1000; TPS: 3666.94; ETA: 0.0 minutes\n", + "Step 450 of 1000; TPS: 4348.2; ETA: 0.0 minutes\n", + "Step 525 of 1000; TPS: 5011.02; ETA: 0.0 minutes\n", + "Step 600 of 1000; TPS: 5663.42; ETA: 0.0 minutes\n", + "Step 675 of 1000; TPS: 6315.14; ETA: 0.0 minutes\n", + "Step 750 of 1000; TPS: 6953.72; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 7576.45; ETA: 0.0 minutes\n", + "Step 900 of 1000; TPS: 8201.2; ETA: 0.0 minutes\n", + "Step 975 of 1000; TPS: 8823.85; ETA: 0.0 minutes\n", + "Step 50 of 200; TPS: 59031.88; ETA: 0.0 minutes\n", + "Step 125 of 200; TPS: 71592.21; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.9397499561309814\n", + "Total time: 0.23596433294005692\n" ] } ], @@ -210,8 +238,8 @@ " forcefield=dpd_ff.hoomd_forces,\n", " gsd_write_freq=100,\n", " log_write_freq=50,\n", - " n_steps_dpd=500,\n", - " n_steps_fire=100,\n", + " n_steps_dpd=1000,\n", + " n_steps_fire=200,\n", ")\n", "end_time = time.perf_counter()\n", "print(\"Total time:\", end_time - start_time)" @@ -219,7 +247,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -232,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": { "scrolled": true }, @@ -241,7 +269,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "gmso ff time: 11.914976875006687\n" + "gmso ff time: 0.09323504206258804\n" ] } ], @@ -263,17 +291,16 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[,\n", - " ]" + "[]" ] }, - "execution_count": 11, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -306,7 +333,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.14" + "version": "3.12.15" } }, "nbformat": 4, diff --git a/phantomwalk/paper/figures/README.md b/phantomwalk/paper/figures/README.md new file mode 100644 index 0000000..4d32fbe --- /dev/null +++ b/phantomwalk/paper/figures/README.md @@ -0,0 +1 @@ +Use this directory for notebooks or data related to paper figures! Please make the environment to run the notebooks clear! diff --git a/phantomwalk/signac/init.py b/phantomwalk/signac/init.py index 66fceaa..d52a914 100644 --- a/phantomwalk/signac/init.py +++ b/phantomwalk/signac/init.py @@ -21,15 +21,15 @@ def get_parameters(): '''''' parameters = OrderedDict() - parameters["num_mols"] = [100,500,1000,2500,5000,10000,25000,50000,100000] + parameters["num_mols"] = [100,200,300] parameters["lengths"] = [500] - parameters["density"] = [0.85] - parameters["bond_k"]=[15000,20000,25000] + parameters["density"] = [(0.85,1.0,1.1,1.125,1.15,1.175,1.2,1.3,1.4)] + parameters["bond_k"]=[100000,250000,500000] parameters["bond_r0"]=[1.0] parameters["r_cut"]=[1.01] - parameters["A"]=[1000,5000] - parameters["gamma"]=[800,1000,2000] - parameters["seed"]=[15,35,60,125,240] + parameters["A"]=[100000,250000,500000] + parameters["gamma"]=[1500,2500] + parameters["seed"]=[(15,35,60)] return list(parameters.keys()), list(product(*parameters.values())) @@ -45,6 +45,8 @@ def main(): job.init() job.doc.setdefault("sampled", False) job.doc.setdefault("runs", 0) + job.doc.setdefault("score",[]) + job.doc.setdefault("ref_values_dict", {}) if __name__ == "__main__": diff --git a/phantomwalk/signac/project.py b/phantomwalk/signac/project.py index 9991ac8..66229c2 100644 --- a/phantomwalk/signac/project.py +++ b/phantomwalk/signac/project.py @@ -53,6 +53,7 @@ def run(job): import unyt as u import time import hoomd + import numpy as np from flowermd.library.forcefields import DPD from flowermd.library import PhantomWalk @@ -62,55 +63,77 @@ def run(job): print("JOB ID NUMBER:") print(job.id) print("------------------------------------") - - start_time = time.perf_counter() - molecules = LJChain( - num_mols=job.sp.num_mols, - lengths=job.sp.lengths, - bead_sequence=["_A"], - bead_mass={"_A": 1.0}, - bond_lengths={"_A-_A": 1.0}, - identify_connections=False, - ) - mbuild_time = time.perf_counter() - job.doc.mbuild_time = mbuild_time - start_time + ref_length = 1.0 * u.Unit("nm") ref_mass = 1.0 * u.Unit("g/mol") ref_energy = 1.0 * u.Unit("kcal / mol") ref_values_dict = {"length": ref_length, "mass": ref_mass, "energy": ref_energy} + + job.doc.ref_values = ref_values_dict - system = RandomWalk( - molecules=molecules, - density=job.sp.density * u.Unit("nm**-3"), - bond_length=job.sp.bond_r0, - buffer=0.5, - base_units=ref_values_dict, - seed=job.sp.seed, - ) - - dpd_ff = DPD( - A=job.sp.A, - gamma=job.sp.gamma, - kT=1.0, - r_cut=job.sp.r_cut, - bond_k=job.sp.bond_k, - bond_r0=job.sp.bond_r0 - ) + for d in job.sp.density: + times = [] + closest = [] + all_succeeded = True + for s in job.sp.seed: + start_time = time.perf_counter() + molecules = LJChain( + num_mols=job.sp.num_mols, + lengths=job.sp.lengths, + bead_sequence=["_A"], + bead_mass={"_A": 1.0}, + bond_lengths={"_A-_A": 1.0}, + identify_connections=False, + ) + mbuild_time = time.perf_counter() + print("mbuild time:", mbuild_time - start_time) + + system = RandomWalk( + molecules=molecules, + density=d * u.Unit("nm**-3"), + bond_length=1.0, + base_units=ref_values_dict, + seed=s, + ) + + nlist = hoomd.md.nlist.Cell(buffer=0.2, exclusions=["bond"]) + gmso_start = time.perf_counter() + system.apply_forcefield( + force_field=Bead_Spring_DPD(), + r_cut=job.sp.r_cut, + kT=job.sp.kT, + speedup_by_molgraph=True, + speedup_by_moltag=False, + nlist=nlist + ) + gmso_end = time.perf_counter() + print("gmso ff time:", gmso_end - gmso_start) - sim = PhantomWalk( - initial_state=system.hoomd_snapshot, - forcefield=dpd_ff.hoomd_forces, - gsd_write_freq=1000, - log_write_freq=50, - n_steps_dpd=500, - n_steps_fire=100, - seed=job.sp.seed, - ) - end_time = time.perf_counter() - for writer in sim.operations.writers: - writer.flush() - job.doc.time = end_time - start_time - job.doc.particle_separation = sim.particle_separation + try: + sim = PhantomWalk( + initial_state=system.hoomd_snapshot, + forcefield=system.hoomd_forcefield, + gsd_write_freq=job.sp.gsd_write_freq, + log_write_freq=job.sp.log_write_freq, + n_steps_dpd=job.sp.dpd_steps, + n_steps_fire=job.sp.fire_steps, + write_at_start=job.sp.write_start, + seed=s, + ) + end_time = time.perf_counter() + print("Total time:", end_time - start_time) + times.append(end_time-start_time) + closest.append(sim.particle_separation) + except RuntimeError: + all_succeeded=False + print("This data set failed.") + + if all_succeeded and times: + score = [d, np.mean(times), np.std(times), + np.mean(closest), np.std(closest), True] + else: + score = [d, np.nan, np.nan, np.nan, np.nan, False] + job.doc.score.append(score) if __name__ == "__main__": - DPD(environment=Fry).main() + DPD().main() From 5fc8177666059e274e5985808e3324c4085c629c Mon Sep 17 00:00:00 2001 From: charliegiu Date: Thu, 29 Oct 2026 12:46:20 -0600 Subject: [PATCH 03/12] inital forces figures --- phantomwalk/paper/figures/forces.ipynb | 1536 ++++++++++++++++++++++++ phantomwalk/paper/figures/forces.svg | 1454 ++++++++++++++++++++++ 2 files changed, 2990 insertions(+) create mode 100644 phantomwalk/paper/figures/forces.ipynb create mode 100644 phantomwalk/paper/figures/forces.svg diff --git a/phantomwalk/paper/figures/forces.ipynb b/phantomwalk/paper/figures/forces.ipynb new file mode 100644 index 0000000..0da0b41 --- /dev/null +++ b/phantomwalk/paper/figures/forces.ipynb @@ -0,0 +1,1536 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 72, + "id": "6b3d4454-eea3-4559-88e0-2b5ce732f262", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib\n", + "import matplotlib_inline\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "matplotlib.style.use(\"default\")\n", + "matplotlib_inline.backend_inline.set_matplotlib_formats(\"svg\")\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "1f6e0fee-aca0-4cb1-916d-02c1cb640f62", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2026-10-28T18:37:50.247250\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.11.2, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "A = 250000\n", + "gamma = 250000\n", + "r_cut = 1.01\n", + "x = np.linspace(0, r_cut, 100)\n", + "fig, ax = plt.subplots()\n", + "ax.plot(x, A*(1-(x/r_cut)), label=r\"$F_C=A\\left(1-\\frac{r_{ij}}{r_{cut}}\\right)$\")\n", + "ax.plot(x, gamma*(1-(x/r_cut))**2, linestyle=\"dotted\", label=r\"$F_D=\\gamma\\left(1-\\frac{r_{ij}}{r_{cut}}\\right)^2$\")\n", + "ax.set_title(fr\"$\\gamma = {gamma}$, $A = {A}$, $r_{{cut}} = {r_cut}$\",fontsize=12)\n", + "plt.suptitle(\"DPD Conservative and Dissipative Forces\", fontsize=12)\n", + "ax.legend(fontsize=12)\n", + "plt.xlabel(r\"$r_{ij}$\", fontsize=12)\n", + "plt.savefig(\"forces.svg\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "58866546-ec5f-4e41-b188-a9490a7994ed", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.12.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/phantomwalk/paper/figures/forces.svg b/phantomwalk/paper/figures/forces.svg new file mode 100644 index 0000000..09af1c7 --- /dev/null +++ b/phantomwalk/paper/figures/forces.svg @@ -0,0 +1,1454 @@ + + + + + + + + 2026-10-28T18:37:50.108671 + image/svg+xml + + + Matplotlib v3.11.2, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e48b27732bea713548dd0c435889977e176a085a Mon Sep 17 00:00:00 2001 From: charliegiu Date: Thu, 29 Oct 2026 13:29:40 -0600 Subject: [PATCH 04/12] swap figure from dissipative to bonded force --- phantomwalk/paper/figures/forces.ipynb | 879 +++++++++++++------------ phantomwalk/paper/figures/forces.svg | 867 ++++++++++++------------ 2 files changed, 904 insertions(+), 842 deletions(-) diff --git a/phantomwalk/paper/figures/forces.ipynb b/phantomwalk/paper/figures/forces.ipynb index 0da0b41..a5aebc0 100644 --- a/phantomwalk/paper/figures/forces.ipynb +++ b/phantomwalk/paper/figures/forces.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 72, + "execution_count": 1, "id": "6b3d4454-eea3-4559-88e0-2b5ce732f262", "metadata": {}, "outputs": [], @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 2, "id": "1f6e0fee-aca0-4cb1-916d-02c1cb640f62", "metadata": {}, "outputs": [ @@ -33,7 +33,7 @@ " \n", " \n", " \n", - " 2026-10-28T18:37:50.247250\n", + " 2026-10-29T13:29:07.533254\n", " image/svg+xml\n", " \n", " \n", @@ -68,12 +68,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -118,7 +118,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -159,7 +159,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -195,7 +195,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -242,7 +242,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -298,7 +298,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -392,12 +392,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -410,7 +410,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -454,7 +454,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -472,7 +472,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -490,7 +490,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -508,7 +508,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -625,110 +625,110 @@ "L 386.703595 290.888727 \n", "L 389.982934 293.332364 \n", "L 393.262273 295.776 \n", - "\" clip-path=\"url(#p771e3145e2)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n", + "\" clip-path=\"url(#p5a7c727f1b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", @@ -1090,8 +1157,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", " \n", + " \n", " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1490,14 +1521,14 @@ ], "source": [ "A = 250000\n", - "gamma = 250000\n", + "k_b = 250000\n", "r_cut = 1.01\n", "x = np.linspace(0, r_cut, 100)\n", "fig, ax = plt.subplots()\n", "ax.plot(x, A*(1-(x/r_cut)), label=r\"$F_C=A\\left(1-\\frac{r_{ij}}{r_{cut}}\\right)$\")\n", - "ax.plot(x, gamma*(1-(x/r_cut))**2, linestyle=\"dotted\", label=r\"$F_D=\\gamma\\left(1-\\frac{r_{ij}}{r_{cut}}\\right)^2$\")\n", - "ax.set_title(fr\"$\\gamma = {gamma}$, $A = {A}$, $r_{{cut}} = {r_cut}$\",fontsize=12)\n", - "plt.suptitle(\"DPD Conservative and Dissipative Forces\", fontsize=12)\n", + "ax.plot(x, 0.5*k_b*(1-x)**2, linestyle=\"dotted\", label=r\"$F_B=\\frac{1}{2}k_b(1-r_{ij})^2$\")\n", + "ax.set_title(fr\"$k_b = {k_b}$, $A = {A}$, $r_{{cut}} = {r_cut}$\",fontsize=12)\n", + "plt.suptitle(r\"DPD Non-Bonded ($F_C$) and Bonded ($F_B$) Forces\", fontsize=12)\n", "ax.legend(fontsize=12)\n", "plt.xlabel(r\"$r_{ij}$\", fontsize=12)\n", "plt.savefig(\"forces.svg\")" diff --git a/phantomwalk/paper/figures/forces.svg b/phantomwalk/paper/figures/forces.svg index 09af1c7..d8ef77b 100644 --- a/phantomwalk/paper/figures/forces.svg +++ b/phantomwalk/paper/figures/forces.svg @@ -6,7 +6,7 @@ - 2026-10-28T18:37:50.108671 + 2026-10-29T13:29:07.280008 image/svg+xml @@ -41,12 +41,12 @@ z - - + @@ -91,7 +91,7 @@ z - + @@ -132,7 +132,7 @@ z - + @@ -168,7 +168,7 @@ z - + @@ -215,7 +215,7 @@ z - + @@ -271,7 +271,7 @@ z - + @@ -365,12 +365,12 @@ z - - + @@ -383,7 +383,7 @@ L -3.5 0 - + @@ -427,7 +427,7 @@ z - + @@ -445,7 +445,7 @@ z - + @@ -463,7 +463,7 @@ z - + @@ -481,7 +481,7 @@ z - + @@ -598,110 +598,110 @@ L 388.649256 288.157091 L 391.928595 290.600727 L 395.207934 293.044364 L 398.487273 295.488 -" clip-path="url(#p56360c77bf)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> +" clip-path="url(#p65163e417b)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + - - - + + - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -1063,8 +1130,8 @@ z - - + + - - + + - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + From 8ef1605e938c023053ccfef6b29b1f9174175257 Mon Sep 17 00:00:00 2001 From: Steph McCallum Date: Fri, 30 Oct 2026 12:34:12 -0600 Subject: [PATCH 05/12] signac signac signac --- phantomwalk/conda-envs/environment-signac.yml | 41 +++++ phantomwalk/conda-envs/environment.yml | 36 ++++ .../signac/dpd_class_workspace/init.py | 47 ++++++ .../signac/dpd_class_workspace/project.py | 154 ++++++++++++++++++ .../xml_workspace/xml_project_init.py.md | 61 +++++++ .../xml_workspace/xml_project_project.py.md | 151 +++++++++++++++++ 6 files changed, 490 insertions(+) create mode 100644 phantomwalk/conda-envs/environment-signac.yml create mode 100644 phantomwalk/conda-envs/environment.yml create mode 100644 phantomwalk/signac/dpd_class_workspace/init.py create mode 100644 phantomwalk/signac/dpd_class_workspace/project.py create mode 100644 phantomwalk/signac/xml_workspace/xml_project_init.py.md create mode 100644 phantomwalk/signac/xml_workspace/xml_project_project.py.md diff --git a/phantomwalk/conda-envs/environment-signac.yml b/phantomwalk/conda-envs/environment-signac.yml new file mode 100644 index 0000000..1149d50 --- /dev/null +++ b/phantomwalk/conda-envs/environment-signac.yml @@ -0,0 +1,41 @@ +name: phantomwalk-signac +channels: + - conda-forge + - defaults +dependencies: + # Basic Python dependencies + # - python>=3.12 + - python>=3.11,<3.14 + - pip + - jupyterlab + + # Mathematics and scientific computing + - numpy>=2.0 + - scipy>=1.16.0 # required to allow use of RigidTransform + - sympy + + # Visualization + - matplotlib + - py3Dmol + + # Chemistry + - rdkit + - periodictable + - openbabel>=3 + + # Molecular Dynamics toolkits + ## HOOMD + - hoomd>=5.0,!=5.3.0 + - gsd>=3.0,<5 + - freud + - fresnel + - cmeutils>=1.3 + - grits >=0.6.0 + + - signac=2.1.0 + + - pip: + - "flowermd @ git+https://github.com/cmelab/flowerMD.git" # experimental DPD functionality not yet in FlowerMD conda releases + - "gmso @ git+https://github.com/mosdef-hub/gmso.git" + - "mbuild @ git+https://github.com/mosdef-hub/mbuild.git@develop" + - "signac-flow @ git+https://github.com/glotzerlab/signac-flow.git@61fe01b" diff --git a/phantomwalk/conda-envs/environment.yml b/phantomwalk/conda-envs/environment.yml new file mode 100644 index 0000000..cc0c0dc --- /dev/null +++ b/phantomwalk/conda-envs/environment.yml @@ -0,0 +1,36 @@ +name: phantomwalk-signac +channels: + - conda-forge + - defaults +dependencies: + # Basic Python dependencies + # - python>=3.12 + - python + - pip + - jupyterlab + + # Mathematics and scientific computing + - numpy + - scipy>=1.16.0 # required to allow use of RigidTransform + - sympy + + # Visualization + - matplotlib + - py3Dmol + + # Chemistry + - rdkit + - periodictable + - openbabel>=3 + + # Molecular Dynamics toolkits + ## HOOMD + - hoomd + - gsd>=3.0 + - freud + - fresnel + + - pip: + - flowermd @ git+https://github.com/cmelab/flowerMD.git # experimental DPD functionality not yet in FlowerMD conda releases + - gmso @ git+git@github.com:mosdef-hub/gmso.git + - mbuild @ git+git@github.com:mosdef-hub/mbuild.git@develop diff --git a/phantomwalk/signac/dpd_class_workspace/init.py b/phantomwalk/signac/dpd_class_workspace/init.py new file mode 100644 index 0000000..44b3805 --- /dev/null +++ b/phantomwalk/signac/dpd_class_workspace/init.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +"""Initialize the data space for the flowermd.library.DPD forcefield project. + +Here A/gamma/bond_k/bond_r0 ARE real constructor kwargs for the DPD class, +so the sweep is functionally meaningful (unlike the xml_project sibling). +""" + +import signac +import logging +from collections import OrderedDict +from itertools import product + + +def get_parameters(): + parameters = OrderedDict() + parameters["num_mols"] = [10] + parameters["lengths"] = [5] + parameters["density"] = [(0.85, 1.0, 1.1, 1.125, 1.15, 1.175, 1.2, 1.3, 1.4)] + parameters["bond_k"] = [250000] + parameters["bond_r0"] = [1.0] + parameters["r_cut"] = [1.01] + parameters["A"] = [250000] + parameters["gamma"] = [1500] + parameters["kT"] = [1.0] + parameters["seed"] = [(15, 35, 60)] + + return list(parameters.keys()), list(product(*parameters.values())) + + +def main(): + project = signac.init_project() + param_names, param_combinations = get_parameters() + + for params in param_combinations: + statepoint = dict(zip(param_names, params)) + job = project.open_job(statepoint) + job.init() + job.doc.setdefault("sampled", False) + job.doc.setdefault("runs", 0) + job.doc.setdefault("score", []) + job.doc.setdefault("ref_values", {}) + job.doc.setdefault("forcefield_type", "DPD_class") + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + main() diff --git a/phantomwalk/signac/dpd_class_workspace/project.py b/phantomwalk/signac/dpd_class_workspace/project.py new file mode 100644 index 0000000..56fa669 --- /dev/null +++ b/phantomwalk/signac/dpd_class_workspace/project.py @@ -0,0 +1,154 @@ +"""Workflow for the flowermd.library.DPD (BaseHOOMDForcefield) signac project.""" +from flow import FlowProject +from flow.environment import DefaultSlurmEnvironment + + +class ProjectDPD(FlowProject): + pass + + +class Borah(DefaultSlurmEnvironment): + hostname_pattern = "borah" + template = "borah.sh" + + @classmethod + def add_args(cls, parser): + parser.add_argument( + "--partition", default="shortgpu-v100", + help="Specify the partition to submit to." + ) + + +class Fry(DefaultSlurmEnvironment): + hostname_pattern = "fry" + template = "fry.sh" + + @classmethod + def add_args(cls, parser): + parser.add_argument( + "--partition", default="batch", + help="Specify the partition to submit to." + ) + + +GSD_WRITE_FREQ = 1000 +LOG_WRITE_FREQ = 100 +DPD_STEPS = 500 +FIRE_STEPS = 100 +WRITE_AT_START = False +NLIST_BUFFER = 0.2 + + +@ProjectDPD.post(lambda job: job.doc.sampled) +@ProjectDPD.operation( + directives={"ngpu": 1, "ncpu": 16, "executable": "python -u"}, name="run" +) +def run(job): + """Run sweep using the flowermd.library.DPD forcefield class. + + DPD.__init__ builds its own `hoomd.md.pair.DPD` complete with its own + nlist internally (self.nlist(buffer=self.nlist_buffer, exclusions= + ["bond"])). Since the pair force + nlist are already fully built inside + the DPD object, we do NOT build/pass a separate nlist into + apply_forcefield here. + + ASSUMPTION TO VERIFY: `system.apply_forcefield` needs to recognize a + `BaseHOOMDForcefield` instance and pass its `.hoomd_forces` straight + into `system.hoomd_forcefield` without re-deriving r_cut/kT from GMSO. + If your actual `apply_forcefield` signature requires r_cut/kT/nlist + even for a BaseHOOMDForcefield object, add them back in -- confirm + against flowermd/base/system.py. + """ + import warnings + warnings.filterwarnings("ignore") + import time + import hoomd + import numpy as np + import flowermd + import unyt as u + from flowermd.library import LJChain, RandomWalk, PhantomWalk, DPD + + with job: + print("------------------------------------") + print("JOB ID NUMBER:", job.id) + print("------------------------------------") + + ref_values_dict = { + "length": 1.0 * u.Unit("nm"), + "mass": 1.0 * u.Unit("g/mol"), + "energy": 1.0 * u.Unit("kcal / mol"), + } + job.doc.ref_values = ref_values_dict + job.doc.forcefield_type = "DPD_class" + + for d in job.sp.density: + times = [] + closest = [] + all_succeeded = True + for s in job.sp.seed: + start_time = time.perf_counter() + molecules = LJChain( + num_mols=[job.sp.num_mols], + lengths=[job.sp.lengths], + bead_sequence=["_A"], + bead_mass={"_A": 1.0}, + bond_lengths={"_A-_A": 1.0}, + identify_connections=False, + ) + print("mbuild time:", time.perf_counter() - start_time) + job.doc.mbuild_time = (time.perf_counter() - start_time) + + system = RandomWalk( + molecules=molecules, + density=d * u.Unit("nm**-3"), + bond_length=job.sp.bond_r0, + base_units=ref_values_dict, + seed=s, + ) + + forcefield = DPD( + A=job.sp.A, + gamma=job.sp.gamma, + kT=job.sp.kT, + r_cut=job.sp.r_cut, + bond_k=job.sp.bond_k, + bond_r0=job.sp.bond_r0, + # angle_k / angle_theta0 left as None -- bead-spring + # LJChain has no angles, matching your + # include_angles=False convention elsewhere. + nlist=hoomd.md.nlist.Cell, + nlist_buffer=NLIST_BUFFER, + ) + + try: + sim = PhantomWalk( + initial_state=system.hoomd_snapshot, + forcefield=forcefield.hoomd_forces, + gsd_write_freq=GSD_WRITE_FREQ, + log_write_freq=LOG_WRITE_FREQ, + n_steps_dpd=DPD_STEPS, + n_steps_fire=FIRE_STEPS, + write_at_start=WRITE_AT_START, + seed=s, + ) + end_time = time.perf_counter() + print("Total time:", end_time - start_time) + times.append(end_time - start_time) + closest.append(sim.particle_separation) + except RuntimeError: + all_succeeded = False + print("This data set failed.") + + if all_succeeded and times: + score = [d, np.mean(times), np.std(times), + np.mean(closest), np.std(closest), True] + else: + score = [d, np.nan, np.nan, np.nan, np.nan, False] + job.doc.score.append(score) + + job.doc.runs += 1 + job.doc.sampled = True + + +if __name__ == "__main__": + ProjectDPD().main() diff --git a/phantomwalk/signac/xml_workspace/xml_project_init.py.md b/phantomwalk/signac/xml_workspace/xml_project_init.py.md new file mode 100644 index 0000000..5a4a687 --- /dev/null +++ b/phantomwalk/signac/xml_workspace/xml_project_init.py.md @@ -0,0 +1,61 @@ +```python +#!/usr/bin/env python +"""Initialize the data space for the XML-forcefield (Bead_Spring_DPD) project. + +NOTE: Bead_Spring_DPD() is a fixed GMSO XML forcefield with no constructor +kwargs, so A/gamma/bond_k/bond_r0 are NOT swept as statepoint parameters +here -- they have no effect on Bead_Spring_DPD(). Fixed reference values are +recorded once per job in job.doc.requested_dpd_params purely for +cross-referencing against dpd_project (flowermd.library.DPD), where these +same values ARE swept and ARE functionally applied. +""" + +import signac +import logging +from collections import OrderedDict +from itertools import product + +# Fixed, non-swept values recorded for reference only (see note above). +# These match the XML's built-in parameters -- update to whatever +# Bead_Spring_DPD's XML actually defines if different. +RECORDED_DPD_PARAMS = { + "A": 100000, + "gamma": 1500, + "bond_k": 100000, + "bond_r0": 1.0, +} + + +def get_parameters(): + parameters = OrderedDict() + parameters["num_mols"] = [100, 200, 300] + parameters["lengths"] = [500] + parameters["density"] = [(0.85, 1.0, 1.1, 1.125, 1.15, 1.175, 1.2, 1.3, 1.4)] + parameters["r_cut"] = [1.01] + parameters["kT"] = [1.0] + parameters["seed"] = [(15, 35, 60)] + + return list(parameters.keys()), list(product(*parameters.values())) + + +def main(): + project = signac.init_project() + param_names, param_combinations = get_parameters() + + for params in param_combinations: + statepoint = dict(zip(param_names, params)) + job = project.open_job(statepoint) + job.init() + job.doc.setdefault("sampled", False) + job.doc.setdefault("runs", 0) + job.doc.setdefault("score", []) + job.doc.setdefault("ref_values", {}) + job.doc.setdefault("forcefield_type", "Bead_Spring_DPD_xml") + # Not part of the statepoint -- recorded only, not applied. + job.doc.setdefault("requested_dpd_params", dict(RECORDED_DPD_PARAMS)) + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + main() +``` diff --git a/phantomwalk/signac/xml_workspace/xml_project_project.py.md b/phantomwalk/signac/xml_workspace/xml_project_project.py.md new file mode 100644 index 0000000..54370fc --- /dev/null +++ b/phantomwalk/signac/xml_workspace/xml_project_project.py.md @@ -0,0 +1,151 @@ +```python +"""Workflow for the XML-forcefield (Bead_Spring_DPD) signac project.""" +from flow import FlowProject +from flow.environment import DefaultSlurmEnvironment + + +class ProjectXML(FlowProject): + pass + + +class Borah(DefaultSlurmEnvironment): + hostname_pattern = "borah" + template = "borah.sh" + + @classmethod + def add_args(cls, parser): + parser.add_argument( + "--partition", default="shortgpu-v100", + help="Specify the partition to submit to." + ) + + +class Fry(DefaultSlurmEnvironment): + hostname_pattern = "fry" + template = "fry.sh" + + @classmethod + def add_args(cls, parser): + parser.add_argument( + "--partition", default="batch", + help="Specify the partition to submit to." + ) + + +GSD_WRITE_FREQ = 1000 +LOG_WRITE_FREQ = 100 +DPD_STEPS = 500 +FIRE_STEPS = 100 +WRITE_AT_START = False +NLIST_BUFFER = 0.2 + +# A/gamma/bond_k/bond_r0 are not statepoint parameters in this project -- +# Bead_Spring_DPD() is a fixed GMSO XML and ignores them. bond_r0 is still +# needed as the RandomWalk bond_length; use the same fixed value recorded +# in job.doc.requested_dpd_params (see init.py). +FIXED_BOND_R0 = 1.0 + + +@ProjectXML.post(lambda job: job.doc.sampled) +@ProjectXML.operation( + directives={"ngpu": 1, "ncpu": 16, "executable": "python -u"}, name="run" +) +def run(job): + """Run sweep using the fixed Bead_Spring_DPD GMSO XML forcefield.""" + import warnings + warnings.filterwarnings("ignore") + import time + import hoomd + import numpy as np + import unyt as u + from flowermd.library import LJChain, RandomWalk, PhantomWalk + from flowermd.library.forcefields import Bead_Spring_DPD + + with job: + print("------------------------------------") + print("JOB ID NUMBER:", job.id) + print("------------------------------------") + + ref_values_dict = { + "length": 1.0 * u.Unit("nm"), + "mass": 1.0 * u.Unit("g/mol"), + "energy": 1.0 * u.Unit("kcal / mol"), + } + job.doc.ref_values = ref_values_dict + job.doc.forcefield_type = "Bead_Spring_DPD_xml" + # Already set by init.py; re-affirmed here in case this job was + # created before requested_dpd_params was added. + job.doc.setdefault("requested_dpd_params", { + "A": 100000, "gamma": 1500, + "bond_k": 100000, "bond_r0": FIXED_BOND_R0, + }) + + for d in job.sp.density: + times = [] + closest = [] + all_succeeded = True + for s in job.sp.seed: + start_time = time.perf_counter() + molecules = LJChain( + num_mols=[job.sp.num_mols], + lengths=[job.sp.lengths], + bead_sequence=["_A"], + bead_mass={"_A": 1.0}, + bond_lengths={"_A-_A": 1.0}, + identify_connections=False, + ) + print("mbuild time:", time.perf_counter() - start_time) + + system = RandomWalk( + molecules=molecules, + density=d * u.Unit("nm**-3"), + bond_length=FIXED_BOND_R0, + base_units=ref_values_dict, + seed=s, + ) + + nlist = hoomd.md.nlist.Cell(buffer=NLIST_BUFFER, exclusions=["bond"]) + gmso_start = time.perf_counter() + system.apply_forcefield( + force_field=Bead_Spring_DPD(), + r_cut=job.sp.r_cut, + kT=job.sp.kT, + speedup_by_molgraph=True, + speedup_by_moltag=False, + nlist=nlist, + ) + print("gmso ff time:", time.perf_counter() - gmso_start) + + try: + sim = PhantomWalk( + initial_state=system.hoomd_snapshot, + forcefield=system.hoomd_forcefield, + gsd_write_freq=GSD_WRITE_FREQ, + log_write_freq=LOG_WRITE_FREQ, + n_steps_dpd=DPD_STEPS, + n_steps_fire=FIRE_STEPS, + write_at_start=WRITE_AT_START, + seed=s, + ) + end_time = time.perf_counter() + print("Total time:", end_time - start_time) + times.append(end_time - start_time) + closest.append(sim.particle_separation) + except RuntimeError: + all_succeeded = False + print("This data set failed.") + + if all_succeeded and times: + score = [d, np.mean(times), np.std(times), + np.mean(closest), np.std(closest), True] + else: + score = [d, np.nan, np.nan, np.nan, np.nan, False] + job.doc.score.append(score) + + job.doc.runs += 1 + job.doc.sampled = True + + +if __name__ == "__main__": + ProjectXML().main() +``` From f0b2a1fba990b0413e48309be2a585b02b6dbc36 Mon Sep 17 00:00:00 2001 From: Steph McCallum Date: Sun, 1 Nov 2026 14:15:10 -0700 Subject: [PATCH 06/12] more signac --- .../{xml_project_init.py.md => init.py} | 23 ++++--------------- .../{xml_project_project.py.md => project.py} | 5 ++-- 2 files changed, 6 insertions(+), 22 deletions(-) rename phantomwalk/signac/xml_workspace/{xml_project_init.py.md => init.py} (67%) rename phantomwalk/signac/xml_workspace/{xml_project_project.py.md => project.py} (97%) diff --git a/phantomwalk/signac/xml_workspace/xml_project_init.py.md b/phantomwalk/signac/xml_workspace/init.py similarity index 67% rename from phantomwalk/signac/xml_workspace/xml_project_init.py.md rename to phantomwalk/signac/xml_workspace/init.py index 5a4a687..7682634 100644 --- a/phantomwalk/signac/xml_workspace/xml_project_init.py.md +++ b/phantomwalk/signac/xml_workspace/init.py @@ -1,4 +1,3 @@ -```python #!/usr/bin/env python """Initialize the data space for the XML-forcefield (Bead_Spring_DPD) project. @@ -15,25 +14,14 @@ from collections import OrderedDict from itertools import product -# Fixed, non-swept values recorded for reference only (see note above). -# These match the XML's built-in parameters -- update to whatever -# Bead_Spring_DPD's XML actually defines if different. -RECORDED_DPD_PARAMS = { - "A": 100000, - "gamma": 1500, - "bond_k": 100000, - "bond_r0": 1.0, -} - - def get_parameters(): parameters = OrderedDict() - parameters["num_mols"] = [100, 200, 300] - parameters["lengths"] = [500] - parameters["density"] = [(0.85, 1.0, 1.1, 1.125, 1.15, 1.175, 1.2, 1.3, 1.4)] + parameters["num_mols"] = [100] + parameters["lengths"] = [5] + parameters["density"] = [(0.85, 1.125, 1.15, 1.175, 1.2, 1.3, 1.4)] parameters["r_cut"] = [1.01] parameters["kT"] = [1.0] - parameters["seed"] = [(15, 35, 60)] + parameters["seed"] = [(15,20)] return list(parameters.keys()), list(product(*parameters.values())) @@ -51,11 +39,8 @@ def main(): job.doc.setdefault("score", []) job.doc.setdefault("ref_values", {}) job.doc.setdefault("forcefield_type", "Bead_Spring_DPD_xml") - # Not part of the statepoint -- recorded only, not applied. - job.doc.setdefault("requested_dpd_params", dict(RECORDED_DPD_PARAMS)) if __name__ == "__main__": logging.basicConfig(level=logging.INFO) main() -``` diff --git a/phantomwalk/signac/xml_workspace/xml_project_project.py.md b/phantomwalk/signac/xml_workspace/project.py similarity index 97% rename from phantomwalk/signac/xml_workspace/xml_project_project.py.md rename to phantomwalk/signac/xml_workspace/project.py index 54370fc..d4e8aa5 100644 --- a/phantomwalk/signac/xml_workspace/xml_project_project.py.md +++ b/phantomwalk/signac/xml_workspace/project.py @@ -1,4 +1,3 @@ -```python """Workflow for the XML-forcefield (Bead_Spring_DPD) signac project.""" from flow import FlowProject from flow.environment import DefaultSlurmEnvironment @@ -45,7 +44,6 @@ def add_args(cls, parser): # in job.doc.requested_dpd_params (see init.py). FIXED_BOND_R0 = 1.0 - @ProjectXML.post(lambda job: job.doc.sampled) @ProjectXML.operation( directives={"ngpu": 1, "ncpu": 16, "executable": "python -u"}, name="run" @@ -142,10 +140,11 @@ def run(job): score = [d, np.nan, np.nan, np.nan, np.nan, False] job.doc.score.append(score) + job.doc.bond_params = system.gmso_system.bond_types + job.doc.dpd_params = system.gmso_system.pairpotential_types job.doc.runs += 1 job.doc.sampled = True if __name__ == "__main__": ProjectXML().main() -``` From ef01a77212769cb5680126f199559172267417e8 Mon Sep 17 00:00:00 2001 From: Steph McCallum Date: Sun, 1 Nov 2026 15:07:51 -0700 Subject: [PATCH 07/12] polishing and matching gmso units --- phantomwalk/examples/signac-graphs.ipynb | 305 ++++++++++++++++++ .../signac/dpd_class_workspace/init.py | 2 +- .../signac/dpd_class_workspace/project.py | 4 +- phantomwalk/signac/xml_workspace/init.py | 4 +- phantomwalk/signac/xml_workspace/project.py | 7 +- 5 files changed, 314 insertions(+), 8 deletions(-) create mode 100644 phantomwalk/examples/signac-graphs.ipynb diff --git a/phantomwalk/examples/signac-graphs.ipynb b/phantomwalk/examples/signac-graphs.ipynb new file mode 100644 index 0000000..4752510 --- /dev/null +++ b/phantomwalk/examples/signac-graphs.ipynb @@ -0,0 +1,305 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "7ae2e7e3-a3f1-45e2-b31c-d7eb2e949738", + "metadata": {}, + "outputs": [], + "source": [ + "import signac\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib as mpl" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d8c7d8c6-0378-4fe1-9846-5593f2494313", + "metadata": {}, + "outputs": [], + "source": [ + "mpl.rcParams.update({\n", + " \"figure.dpi\": 150,\n", + " \"font.size\": 11,\n", + " \"font.family\": \"serif\",\n", + " \"axes.linewidth\": 1.0,\n", + " \"axes.labelsize\": 12,\n", + " \"axes.titlesize\": 12,\n", + " \"xtick.direction\": \"in\",\n", + " \"ytick.direction\": \"in\",\n", + " \"xtick.top\": True,\n", + " \"ytick.right\": True,\n", + " \"legend.frameon\": False,\n", + " \"errorbar.capsize\": 3,\n", + "})" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b3791a8f-441a-45e8-a921-50b7613535da", + "metadata": {}, + "outputs": [], + "source": [ + "class_project = signac.get_project(\"../signac/dpd_class_workspace/\")\n", + "xml_project = signac.get_project(\"../signac/xml_workspace/\") # adjust root= if needed" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9e9b12a0-ef5e-49ff-bb2e-217eba428226", + "metadata": {}, + "outputs": [], + "source": [ + "class_data = {}\n", + "xml_data = {}\n", + "\n", + "for job in class_project:\n", + " N = job.sp.num_mols * job.sp.lengths # adjust to your actual state point key for system size\n", + " scores = job.document.get(\"score\", [])\n", + " for entry in scores:\n", + " density, mean_t, std_t, mean_c, std_c, *rest = entry\n", + " success = rest[0] if rest else not (\n", + " np.isnan(mean_t) or mean_t == 0 or mean_c == 0\n", + " )\n", + " if not success:\n", + " continue # drop any (N, density) set where a run failed\n", + " class_data.setdefault(N, []).append((density, mean_t, std_t, mean_c, std_c))\n", + "\n", + "for job in xml_project:\n", + " N = job.sp.num_mols * job.sp.lengths # adjust to your actual state point key for system size\n", + " scores = job.document.get(\"score\", [])\n", + " for entry in scores:\n", + " density, mean_t, std_t, mean_c, std_c, *rest = entry\n", + " success = rest[0] if rest else not (\n", + " np.isnan(mean_t) or mean_t == 0 or mean_c == 0\n", + " )\n", + " if not success:\n", + " continue # drop any (N, density) set where a run failed\n", + " xml_data.setdefault(N, []).append((density, mean_t, std_t, mean_c, std_c))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "4db86fbd-a712-49bc-946e-631848642c1c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{500: [(0.85, 0.4599772500805557, 0.053789875004440546, 1.002750039100647, 0.0), (1.125, 0.382768583483994, 0.001353124505840242, 1.002750039100647, 0.0), (1.15, 0.3845535625005141, 0.00185135449282825, 0.9922499656677246, 0.0), (1.175, 0.41883914556819946, 0.03540214546956122, 0.9869999885559082, 0.005249977111816406), (1.2, 0.43076437496347353, 0.04825320799136534, 0.9764999747276306, 0.005250036716461182), (1.3, 0.38796068698866293, 0.0015198960318230093, 0.9239999949932098, 0.005250006914138794), (1.4, 0.43076127051608637, 0.026907229505013674, 0.8819999694824219, 0.005249977111816406)], 50: [(0.85, 0.23461695847800002, 0.04342750058276579, 1.002750039100647, 0.0), (1.125, 0.17552156245801598, 0.0003093545092269778, 1.002750039100647, 0.0), (1.15, 0.17066033347509801, 0.0018502085004001856, 0.9922499656677246, 0.0), (1.175, 0.16932945797452703, 0.0007855829899199307, 0.9922499656677246, 0.0), (1.2, 0.1687654999550432, 0.0022555419709533453, 0.9869999885559082, 0.005249977111816406), (1.3, 0.16757712553953752, 5.791644798591733e-05, 0.934499979019165, 0.005249977111816406), (1.4, 0.16884727054275572, 0.0014186875196173787, 0.8819999694824219, 0.005249977111816406)]}\n" + ] + } + ], + "source": [ + "print(xml_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "be368a9d-dc10-472f-996b-bb24e80f2c62", + "metadata": {}, + "outputs": [], + "source": [ + "for N in class_data:\n", + " class_data[N] = sorted(class_data[N], key=lambda row: row[0])\n", + "\n", + "system_sizes = sorted(class_data.keys())\n", + "cmap = plt.get_cmap(\"viridis\")\n", + "colors = {N: cmap(i / max(1, len(system_sizes) - 1)) for i, N in enumerate(system_sizes)}\n", + "markers = [\"o\", \"s\", \"^\", \"D\", \"v\", \"P\", \"X\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "4d25a552-57f1-46f7-aad0-8f3cdcc242a6", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "<>:28: SyntaxWarning: invalid escape sequence '\\s'\n", + "<>:28: SyntaxWarning: invalid escape sequence '\\s'\n", + "/var/folders/jr/8265_v612wxg_7hntt0sy_780000gn/T/ipykernel_11535/2176846660.py:28: SyntaxWarning: invalid escape sequence '\\s'\n", + " axes[1].set_ylabel(\"Closest particle distance $(\\sigma)$\")\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABe0AAALNCAYAAACyKUrSAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvgI3uAAAAAAlwSFlzAAAXEgAAFxIBZ5/SUgABAABJREFUeJzs3Qd4U2UXB/D/7Z5QVkFQEBmi7L0FZIg4EBAFQUAQGeJAcPspLhTEjYgCCgiCgGwVBdmITEGGMkSUIatldK/c7zlvmpC2SZs0aXuT/n/PEzLuyM19k/Lec889r6brug4iIiIiIiIiIiIiIipyfkW9AUREREREREREREREZMagPRERERERERERERGRQTBoT0RERERERERERERkEAzaExEREREREREREREZBIP2REREREREREREREQGwaA9EREREREREREREZFBMGhPRERERERERERERGQQDNoTERERERERERERERkEg/ZERERERERERERERAbBoD0RERERERERERERkUEwaE9EREREREREREREZBAM2hMRERERERERERERGQSD9kREREREREREREREBsGgPRERERERERERERGRQTBoT0RERERERERERERkEAzaExEREREREREREREZBIP2REREREREREREREQGwaA9EREREREREREREZFBBBT1BhARERH5iqSEZJfmDw0PKbBtISoKuinRpfk1v7AC2xYiIiIiIm+l6bquF/VGEBEREfmCzn69XZp/tWlhgW0LUVEwnanp0vx+FQ4X2LYQEREREXkrlschIiIiIiIiIiIiIjIIZtoTERERFWB5nBdufxP7N/+JOm1qYfwPL2aZxvI4VBzK4+ixQ4D0XUBAY2ilZ2SZxvI4REREREQ5saY9ERERkYfYC8L7+ftZ740epD9w4ACOHDlifR4eHo7OnTs7nP+vv/7Cvn37crxet25dVKtWDUayYsUKZGRkOJweGhqK2267Lc/17N+/HydPnkSpUqXQoEEDBAcHe3hLvZu9ILyu+WdO9Dd8kJ6/gYL9DfD3Q0REROQcBu2JiIiISNmxYweWLl2Ks2fP4tdff1Wvff311+jbt6/dPXTw4EHMnDkTly5dwoYNG9C+fXuULFkSQ4YMMVzQvnfv3khJSXE4vVKlSioQ6ci6deswfPhwXLhwAY0bN8axY8cQGxuLl156CaNH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e0kdI0eOVIkHb7/9tlpOtumRRx7BtddeqwKDjsyfP199DumXSy1tOekg3ytZh/Tt5Lt45513Zjm2sZD9IgFO6etL//Dw4cMqiPnhhx/ixhtvVCeT5GSGI7b7Wj6X9Edvv/12jBkzxtqHs7Sju+/lrLy+vykpKao9ZL/K70H647IdcqVLpUqV8NJLL6mTDwXx23JEtsmyv+wFdy3khMiECRM88p1zl+yzVq1aqTaV76CcoNywYQOaNm2KmTNn5rm8O995d9ohv/srr++VM583v21MxZgMREtEVJycOHFC/vdWt6+++srhfO3atVPzREZG6leuXMl1PUeOHMkxPS0tzTp906ZNdt+jdevWavr111+vjxs3Lsu05cuXq2mBgYH68ePHXX5/e+/z+uuv57kdEydOzDJNlpFpZcqU0Xv16qUvW7bMOs1kMul9+/ZV07t372533bKd11xzjZpnypQpWabt2bNH7d+goCB948aNuisuX76sh4eH212vxalTp3R/f399xowZ1tekLaOjo9Wyx44dyzK/PC9XrpxaZ1xcnO5JO3bs0ENCQtT2rFy5Msu033//Xa9evboeHBys3nvJkiUe34/5/a65s79y+9458/2VNg4LC3OqjadPn253OhERUWGqVq2a3q9fP/VY+n+W/+smTZpkd37pW3Xq1Ek9lv8PLfPPmzfP4Xu8+OKLap6OHTvmOr1SpUr6HXfcoaekpFin/fvvv3pUVJSaPnfuXLfXL9svfV4L6YdYPsMjjzyiP/XUU1mWnTp1qpomfYvk5GSH+1DmmTZtWr76tQW9fbnp2rWrWn7BggVZXo+Pj7ceW6xYsSLLNNm+Dh06qGkPPPCAnp6ebp128eJFvV69emrahAkT7L6n9MFluvQje/furaempmZZd58+fdT0li1bZtkXQvqcMq1Hjx5ZlsvIyNCfe+45Na158+bqeW77WuapWrWqarshQ4aoZVu0aJGlHd19r7y+F858f2339ciRI7O8l2yTZV/JfiyI31Zu2rRpo5a97777HM5z88036w8++KDb3zl3SR/9hhtuUOuWtrN16dIlvUmTJnrFihXV9CeeeCLH8u5+591ph/zur7z+Ljrz/WzVqpVTbdy/f3+H06l4YdCeiIodZ4L2EuSV6Zqm6Z9//nme63E3aC+dmuydaHHttdeq6R9//LHL75+foP11112X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flsdKE2YMCHPZY8cOYL+/fujUaNGalDc/BzEyRUDI0aMUBn3kyZNciloL5n6jjL7KXeWkx0ygDCD9sbENjI+tpF3YDsZH9uoeLeRvVKPkpgiV2USEREREZH384mgvdR5l5IvEjiXmvOOBn6VLHlRtmxZj7yvlNyRwPm9996Ljz76KNdSN+K///5T9eulvr4E/EuUKJHv95aMe3Hq1CmcOHEC1113nVPLyUEjA875Z9l/3IfGxTYyPraRd2A7GR/byPgKs43YNyEiIiIi8h0+MRCtlL2x1JWXILY9Z86csV42fNNNN3nsvaU8jZATArnVhZf379Chg6q5v27dOpQrV86t97UN+F+8eNGtdRERERERERERERGRMfhE0F60a9fOOlisPXv37lX3kuV+4403Or1eKamTW41QyeC3cDTfuXPncOutt6qBZdeuXZsl01+Wlxr52clrtuvOzjZQL5ddExEREREREREREZH385mg/QMPPKDu16xZ43DwV9GnTx9VSsdZVapUwZtvvulwuuUkgaxTBqW1N5hsx44dERwcjJ9//jlHgH3UqFG46667cizXo0cP9O7d2+H7btu2Td1ff/31qFSpktOfh4iIiIiIiIiIiIiMy2eC9lJ6pkuXLvjrr7+wbNmyHIHzr776SpWUee6553Ise/jwYVUT/tprr8WhQ4dyTP/666+RmJiY4/WMjAxrQL9Xr145AvIxMTEqYC++++47Ve9eyujY3mQdjkhW/r///pvjdanb/+mnn6rHzz77bC57hYiIiIiIiIiIiIi8ic8E7YUE5qX0zaBBg7Bo0SJVQmbXrl244447VIB84cKFqFChQo7lvv/+e5w8eVLVw1+5cmWOQb3+/PNPVd5mxYoVatDXK1euYMuWLWpQ2T179qBZs2aYOnVqjrI6nTt3xu+//65q3Us2fGhoaI7b9OnT7X4WeV95H1mHbLe876VLl9SVBO3bt1fB/CeeeALDhw/38F4kIiIiIiIiIiIioqISAB8SHR2tgvQTJ07EuHHj8PDDD6NkyZIqyD1r1izUqlXL7nLdu3fHtGnT1OOePXtmmbZ7924VyF+1ahVefvll/PfffyrrvnTp0qhXrx5mzpyJ/v37w9/fP8tyEmA/ePCgKovjzEC62c2dO1e9p7z3hAkT1AkFeV8ZwLZ58+Z47733rHX8iYiocOimnFdd5Ubz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PREREREREREReY3QiNKofsviQn1PCciP6zHRblkhIa/LdAbuicgTGLQnIiIiIiIiIiKv4h9oHpTWFWkpqfkuiSPjAJhMuVeYlukyn8xPROQODkRLREREREREREQ+792HP0Xlm2u6vNzR3/52mGGfncwn4wVIuSEiovxi0J6IiIiIiIiIiHzelqU7sHbe7gJ/n63LdzBoT0RuYXkcIiIiIiIiIiIiD4m/lMh9SURuYaY9ERERERERERH5vDEfB6BtvymAX5RLy73R531sWbLd6fkjosLysXVERFcx056IiIiIiIiIiHxeu2574HepE/ySJsDf7ywCAgOcurXu3syl92l5d9MC+wxEVDwwaE9ERERERERE5OOSEpJz3EwZJjVN7rNP81l6IpA4C/r5TjBdGgs97Y88F2l3X0uULBvp1Oplvna9W3pgQ4moOGN5HCIiIiIiIiIiH3d35IMOp+3f/GeO6atNC+FzoqYCibOB1F8AZADJy6HLLagttPCHgaAW0DQtx2JBIUEYM2MkxvWYCJNJd7h6zU9T88n8RETuYKY9ERERERERERH5PC2oBfxKz4RWZgkQcsfVsFjqJugXB0KP6QU96Xvoerp1GV3XoZsS0eKOm/HasscRfV0YgkMz7N7a926g5pNliIjcwUx7IiIiIiIiIiIftzzuqxyvSXA5NiYWpcuUtpthbmhaKLToPdanaSmp2LR4O9bO+kAF3TUtALcOfBJtezZDYHBm5rsWar4LrA0t6n3o6U9BT/wSSFwEIBlI3w/98pNA/HVA+GAgtKfsJOjnGqjlmjYGvtqW20bth35upnm7NA5GS0T5x6A9EREREREREZGPCw0PsRu0D0kOVtO8LWivttcmMB4UGoaO/bqg8jWvodrN5/DXwWjUuLVL7usIuA5aiZehR4wCEudCT/gK0C8BGSegX3kViPsICOtTCJ+GiCgrlschIiIiIiIiIqJiS/MrDS3iMWjRG6BFvgz4X2ueoF8EEj51eX3H9//r+Y0komKFQXsiIiIiIiIiIir2NCm5E94fWtmfoJV8Hwiona99MmvcN8V+XxKRexi0JyIiIiIiIiIiyiT18LXQO6CVWQxEfebyftn5417sXX+A+5OI8o1BeyIiIiIiIiIiIjt187Wg5vnaL9Oe/UqNGUBElB8M2hMREREREREREXnQoR1/YePCrdynRJQvDNoTERERERERERF5SMmyker+ixe/RlpqGvcrEbmMQXsiIiIiIiIiIiIP6fNsD3V/+q+z+O7zNdyvROQyBu2JiIiIiIiIiMjrJMXH5rgBpsypJjvTCkfXIR1QsVp59Xju64uQcCWx0N6biHxDAHzU2bNnceLECURFRaFatWpq8BB3JSQk4NixY+pe1lu9enUEBAQUyjYVxOchIiIiIiIiIvJWwfEtcrxW7WbL/QUg+/SIw4WyXQGBgXjojb54s+8HuHT+Cha9uwIDX72/UN6biHyDz2Xa7927F23btkXVqlXxyCOPoFWrVrj++usxc+bMfK3vn3/+wbhx49C0aVMVML/nnnswbNgwNGnSRD0fOnQozp8/X2Db5OnPQ0REREREREREBeuW3i1Rs0k19XjReysQe+YidzkRFc9M+x07dqB9+/aoUaMG/vrrL1xzzTVITU3Fk08+iYceeginT5/GCy+84NI6V6xYgVdffRV16tTBvn37UKtWLfW6ZNvLeqdPn45NmzZh586diIiI8Og2FcTnISIiIiIiIiLyBSkRv7o0f2h+3kQLzf19dBMCEx+En/4XdIQjNexbhGih8NM0DJ3QH093fBXJCSn46tWFeOLTR/KzBURUDPlMpn1aWhr69euHxMREfPXVVyrALYKCgvDhhx+qUjYvvfQS9uzZk6/1z5o1yxqwF+Hh4ZgyZYp6n0OHDmHOnDke3aaC/jxERERERERERN4sNKK0S7f8kPLEua43siz8o54zz4sEBGOetaRxgw510LRrA/X4++k/48ShUx789ETky3wmaL9gwQIcOXIELVq0QN26dbNMCwwMxKBBg6DrOsaPH+/SeitWrIiuXbuiUaNGOabJemvXrq0eS617T25TQX0eIiIiIiIiIiLyoKBbgKDM+vmJX0NP/9c66eG3+6sgvinDhC9enMfdTkTFK2i/aNEidS/13+1p166duv/uu++QlJTk9Hp79uyJH374weH0kydPqvuaNWt6dJsK6vMQEREREREREZHnSFBeixyb+SwNevwH1mk31KuCTg/eoh5vXrwNB7ce4q4nouITtN+2bZu6v/HGG+1Ot7wu5WYOHDjgkfdcuXKlKo0jNecfeOABj25TUXweIiIiIiIiIiJynRZYDwi53fwkeSX0tP3WaYNeux+BwYHq8bRn56jKCUREPh+0l0Fh//vvP/W4QoUKducpW7YsAgLM4+4ePnw43++zbt06zJ07F0OGDFE15/v27YstW7YgLCzMY9tUWJ+HiIiIiIiIiIg8Q4t4CoA5VqPHvWMNzkdXLod7RnVVj/dv/hO/rtzFXU5EuTL/JfFyly9ftj7OHjy3vVQpJCQE8fHxWeZ3hQTS//e//6l1/Pnnn7jjjjvQo0cPFUD35DYV5Odp0qQJ/PxynqvZv//qGWCyT/6ztdzImNhGxufrbeQrn8vX28kXsI2KdxvVqVMnx2smk8nj70NERESu0QKqQA/rAyTOAVK3AqlbgOA2alqf53vghxlrEX8pATOen4tmtzeEf4A/dzER+W7QPjU11frYkn1ujwzgmn1+V1SvXh2bN29WjyVY/tprr6F3797o0qUL5s2bh9KlS3tkmwry82RkZNg9eIyJiXF6HcWV7LcrV66ox5aR4MlY2EbG54ttFJmeBvlrnJaWhjgf+Vvqi+3ka9hGxbuNpD+XHYP2RERExqCFPwo9aQmgJ6hsewS1gqb5oUTpSPR9vocqj/PPwZP4adZ63D6kY1FvLhEZlE8E7cPDw62PU1JSHM6XnJys7iMiItx+T1nHxIkTcfz4cSxcuBAjRozAN99845FtKsjPs3v37izrJ+dZTnaUKVOGQSyDYhsZny+2kR4bKGNNqROpZUqXgS/wxXbyNWyj4t1Gf/zxR47XpLxiZGSkR9+HiIiIXKf5lwHCH4Ye/yGQ/geQvAII7a6mdR/VFUs//gHnT8Zg1ivfoEPfNggJC+ZuJiLfDNpLhntQUJDKOL948aLdeST4nZSUlGud+Px45JFHVNBebp988om1VI4721SQn0eNaM4ATL5Z9h/3oXGxjYzP19rI9tolX/lMvthOvohtZHyF2Ub8rRIRERlI2ENA4teA6Tz0uA+AkK7QtGAEhwZj4Gv3Y9LgKYg5fRFLPvxeZd8TEfnkQLT+/v646aab1OMTJ07Yncf2dXt1QPOrRo0a1myqQ4cOeWSbivLzEBERERERERFR/ml+YdAiHjM/MZ0CEudap3V68BZUrVtZPZ4/YQkuXzCX0yMi8rmgvejcubO637Nnj93pv/32mzXIXqVKFafXu337dpw9e9bhdNtMeMmO99Q2FdTnISIiIiIiIiKiAhZ6L+BfVT3U46dCN12xJmoOeaufepx4JQlfv7mYTUFEvhu0HzRoEPz8/LBq1Sqkp6fnmL58+XJ1P3jwYIeZ6/ay2u+++268++67Dt93x44d6j4kJAS1a9f22Da5+3mIiIiIiNwl5Ro3b96M119/Hb1790b79u3VVZ5NmzbFHXfcgeHDh2POnDk4deoUdzYREZENTQuAFvmU+Yl+CXrCZ9ZpzW5viPrtzTGk5VNW4b+/HSeLElHx5DNBewmYDx06FOfPn8fHH3+cZdrBgwfVILHVqlXD448/nmNZORCRaXLbuHFjjumzZs3CyZMnc7weGxuLcePGqcejRo1CWFiYx7bJnWWJiIiIiNwhV3sOGzZMDaTbtm1bvPzyy1i0aBE2bNiAAwcOYOfOnfj+++/x2Wef4cEHH8S1116LJk2aYMaMGUhMTOTOJyIiEsFdgMCG5n2RMBt6xhnrWDRDJ/RXj9PTMjDr5W+4v4jI9waitfjoo49UKZunn35a3Xfs2BHHjh3Dq6++qg4kvvvuuxyBdctBSVpamrXszC233GKdJoO87t27F40aNcKIESPQoEEDlCxZEvv27cP777+P06dPq8Fo33rrLY9uk7vLEhERERG5SoLxY8eOVcF5CwksyHhL1atXR+nSpdUtKSkJMTExOHfunOo/X758Gbt27cLDDz+MMWPGqP6r3MvVqERERMWVGig+8mnosQ8ASIEe/xG0kuPVtBubVke7+1piw4Kt+HnuJtz71F2o3tBcToeISNNlBFUfs2LFCnz77bcqO14C7HIZ70MPPYSIiAi788tBhiVjXbLaS5QokWW6HIhImRoJmP/3338qe0gOVurVq4devXrlKIvjiW3y1LIiISHBOm98fDzCw8OdWo6ykp+KHJxKxpn6j5cMh21kfL7YRqaY/kDadiCwGfzKzIEv8MV28jVsI+Mr7DZyt78n4zSNHj0as2fPVtseFRWlyuHce++9aN68ueqDOiLzy5Wga9euxVdffWUtH1m5cmWVhNK9e3c3P51vYd/cc/i30PjYRsbHNiocposjgJSfVcELrcwKaIE11Ounjv6HITePRkZ6Bhp1rocJP/6PbeSF+DvyDnoh9s890d/zyaA9ZcUDA8/gH2HjYxsZny+2EYP2VBR88bfka7wtaL9+/Xp06NABtWrVwksvvaSC9cHBwfnalkOHDqkrUr/44gu0atVKrZs811Z0Ff8WGh/byPjYRoW0n9OPQr9wpxw9AMEd4Ffqan37j0dNx/IpP6rHb//4Ehp3rs828jL8HXkH3cuC9j5T056Klm5KdOlGRERERMZRtmxZNY6T1Kvv169fvgP24sYbb8TUqVNV8F6y9YmIiIo7LaA6ENrL/CRlHfRU81Vpov/LvREaYS4nN/25uTCZTEW1mURkID5V056Kjn6ugUvzaxUOF9i2EBEREZFr6tSpo26eVLVqVTz66KNsCiIiIomDRDwGPWkFgGTocROB0gtUtm+p6JLoPfZuzB63AEd/+xvr5m1Bx35tuc+Iijlm2hMRERERkV0dO3bEkCFD8Oeff3IPERERuUHzrwCEDzQ/SdsLpJhL4oh7n7oTpcqbx4+Z+b95SE1J474mKuYYtCeP0KL35LghoLF5YkDjnNOIiIiIyPD27NmjatPv37+/qDeFiIjI62nhjwBalHqsx70HXTcH50MjQvHgK/epx2eOn8fKT38q0u0koqLH8jjkEZpfWI7XdM0/c6K/3elEREREZPwBuywDaH3zzTc4ePAg0tLScM0116Bp06bq5u+f2ecjIiKiXGl+kUDESOhx44GM40DSQiDsATXt9iG3YvEHK3Hy8H+Y++a3uO2h9ggvycHKiYorBu2JiIiIiChXgwcPtgbwbZUpU0ZNe+aZZ9RgtkRERJQHCdInzgYyTkKPnwyEdIfmF46AwAAMHt8Pr907CVdi4jB/wjIMGW8O6BNR8cPyOEREREREZJclUG+5L1GiBKpUqYKwMPNVlDExMXjnnXdQq1YtfPfdd9yLREREedC0IGgRo81PTBeAxC+s01p3r4ObmldTj5d8+B3OnzgJXU8E9CR1r5uy3ojIdzFoT0REREREubrpppuwadMmXLp0CcePH0dCQoIqlfP222/juuuuU8H77t27Y+nSpdyTREREeQm5AwiorR7qCTOgZ1wwv36+IYY8Zx6gNiUpFW/d/zBe734PJvQaqu5/+qQDUv5tCP1cA3UjIt/FoD0REREREdllybD/9ttv0aZNG2ialiWQ/+yzz+Lw4cMYNmwYMjIyMHDgQJw+fZp7k4iIKBea5gctcmzmf7aJ0BMmW6fVbZ6AGxskqMf7fo3E5u+isGez+X7SE5XRv8nN+PWnEty/RD6OQXsiIiIiIrJ/sODnpwadlQC9IyEhIZg6dSr69++PK1euqHI5RERElDstuDUQ1Mb8JHEB9PTj0KL34NdtX+Lw7xEOl7scG4BXB9+g5iMi38WgPRERERER2RUZGYn09HSn9s6kSZPg7++PJUuWcG8SERE5wZptj3Toce8hLTUA7w2dAd2Uc/B3WyaTruZLTU7lfibyUQzaExERERGRXTfccAPOnz+PAwcO5LmHypcvjxo1auCff/5BYqJnBsc7cuSIKrlTsWJFldEv2/PUU08hNjY23+tMS0vDlClTVLmfqKgotd5q1arh8ccfx9mzZ3NdNjU1FR988AFatWqllg0MDES5cuXQpUsXzJ8/P9/bRERExZMWeDMQcrf5Scoq/LJ4Oi5fiHNqWZlvw8KtBbuBRFRkGLQnIiIiIiK7OnbsqO5Hjx6tatbnRYLaQgaqddfGjRvRsGFD7N+/HytXrlSBeinDM2/ePNSvX1+dHHCVlO9p164dRo0apQLthw4dwsWLF/Hxxx+rKwTq1Kmj3s+e+Ph4FeiXfVGlShVs27YNly9fxvfff68+b9++fdGvXz+3PzcRERUvWsSTAALV45Ih06TIvdPLbl2+owC3jIiKEoP2RERERERk19ChQ1GiRAmsXr0anTt3zjVQvmPHDhw7dkxln5cuXdqtPXrp0iX06tVLDXwrAftGjRohLCxMBdolaH/y5En07t3bOlCusx555BFs3boVTzzxBF5++WV1dUBoaCi6deumgvYxMTHo0aOH9eRD9vI/8hnlhMGcOXNw4403qm1q2rQpli1bhpIlS+Lrr79Wj4mIiJylBVwLhJlP+tZvlYBmHZ3LtBfxlzxzZRsRGQ+D9kRERE6QwJBuSsxxg56Zeapn5JzuYjCJiMhoJKj91VdfqUD8unXrULt2bQwYMEAFuE+fPq1KzUj5nFmzZuGuu+5Sy7Rv317VtnfHu+++iwsXLqBPnz5qIFxbsv4GDRqoALor9fOPHz+OBQsWqMfDhw/PMb1JkyZo3rw5jh49ipkzZ+aY/vPPP6t7OXmR/fOVLVtWLW87HxERkbO0iBFS4F49HvzCf/Dzc+44IiIqjDuZyEcxaE9EROQMPQn6uQY5bkjfZZ6evivnND2J+5aIvN7dd9+NH3/8UZWEkTIwEsTv2bMnKlWqhKCgIERHR2PQoEGqHnxAQABee+01t99TMtYtAXJ7LK/PnTvX6XVu3rxZnUyVGvY1a9a0O0/jxo3Vvb369JKR7wzJviciInKF5lcKWvgj6nHVm5LRqfdFp5ZreXdT7mgiH8WgPRERERER5apDhw44ePAgJk+erALbUrYmu+uvv16VsmnRooVbe1NK30iZHSE15u2REjVi06ZNTq9XSt9Ygur2tl9IiRuxc+fOHFdLyckLIaWCTCZTjnXv2rVLrfeOO+5wepuIiIiswgdC18qrhwOePoOgkKz/1+T4P6tsJNr1bskdSOSjGLQnIiIiIqI8SbD70UcfVQFtKV0j5XJmz56tMu9/+eUXHDlyBLfddpvbe/KPP/6wPpZsfnsqVqyo7qU0jyUYn5eoqCh1LwPPSlkfe2R9Ii4uzvrYYuTIkeq2d+9eVSLo8OHDSExMVPtD6uDL4/fffx9t27Z18pMSERFdpWkh8It8XD0uVzEN9wy5kOvuGTNjJIJCgrgLiXxUQFFvABEREREReRcZaFZqyxeE2NhY6+OIiAi780RGmuv+CgnalylTJs/1NmvWTN1LBr2cGKhXr16Oef7880/r48uXL6vSPxZ+fn745JNP0LVrV4wePVoNRGshtfC3bNlirWvvLJlf1pvd/v37XVpPsR5vJvNGxsQ2Mj62kXGov2XBXQC/GYDpGPo8dhZrF0ch7pL9cWJMGQnqyi9HV49R4eHvqHi3Ux07V4ZmvyozPxi0JyIiIiIiw5CMdSHBbEcD2kot/ezz5+Wmm27CrbfeirVr16rg+2effZZl+p49e7KU28keBJHs+2HDhmHevHkYM2YMHn/8cTVIrlxh8NJLL6nAvdy/8sordgPx9mRkZNg9cHT26oHiTvbdlStX1GMGrYyJbWR8bCMD0ZNQOqOj9Wl4CRPm7rp69VlOQ/HPkWWILFOuUDaPHOPvqHi3U0ZGRo7XGLQnIiIiIiK3SSkYCZBLBr0nSeZ6rVq1XFrGMuCrHOzIQZC9wH1qamq+Bn798ssv0a5dO0ybNg3XXnutCsKXKFFCDVIrj6VWvpS/EfK6rf79+2P58uXo27cvJk2aZH395ptvxqJFi1TmvgzCGxgYqIL3zti9ezfCw8Od3n7KynLCQ660YNDemNhGxsc2Mg5dTwTOubbMwvEr8PTMpwtqk8hJ/B0V73b6w6a0o0VCQkKWK0Pzg5n2RERERETF3IEDB9C9e3c89dRTqvRL9oC1qzZs2KAC1xJwX79+vUvL2pa6iY+Ptw4Omz3r3d78ealcubIaMFaC7l9//TXefPNNBAQEoHbt2nj66afRqFEjlTEvgfSyZctalzt06JAK2Isnnngix3ols/6xxx7D8OHD8e677+L55593eJWALTlgZLDZPZZ9yP1oXGwj42MbGYSuwdWiHRsX/YqW3bejbc/mBbRR5Cz+jryDVkj9Bk+snwPREhEREREVc1LmJTg4GOPGjcN1112HoUOHqlIxrtT8PHv2rBqIVQLfUu9estft1Y13poyNxalTp+zOc/r0aXVfrlw5l4L2Qq4mGD9+vMqKSk5OVicGtm3bpgLuZ86cUfNIxr1tiRtL9r2wrWVvq2bNmur+0qVL+Oeff1zaJiIiovz6aOQ0XL5gLvlBRL6DmfZERERERMWcBKKlNruUd5k8eTKmT5+ubjIQq2Sey61atWoq4F2qVCkV7Ja66xKol8z1X3/9VWXrW+p3StD7vffeUzXkXSVla6pWrYq///5bDcgq5Wey+/3339V927Zt4UmW4Pw999zjVraUszXtiYiI3HXp3GVMfvwLvPj1k9yZRD6EQXsiIiIiIlJlaKS0y6hRo9RArVL//dy5c1ixYoW65UUC2x07dsSIESPQo0cPtwLXDzzwgCpds2bNGtx33305pq9evdo6nyvks+3cuVOdZLBn8eLFqv7ogAEDHGb/S6kcOYmR3eHDh9W9LF+pUiWXtouIiCg/WtzZGBsW7sH6+Vtwy70tWSaHyIcwBYTcJpdN66bEHDfomaMn6xk5p7twqTURERERFR7Jcpea71KaZsGCBapsjGS72wvCS9b9nXfeqeaXYLYE2Xv16uV2prnU1peyN/Pnz7eWrLHYuHEjfvvtNzRu3Bg9e/bMseyyZcvUFQGdOnXKMmCt7eCvksWf3ezZs7Fnzx689dZbKF++fJZpderUQbNmzdTjDz/8MMeycoWBXKFgGbBWBqMlIiIqaCM/fAiRpSPUY5bJIfItDNqT+/Qk6Oca5LghfZd5evqunNP0JO55IiIiIgMLCQlB79698emnn6rSNxIAl3I4Bw8eVEHvhIQExMbGqiz8MWPGoEaNGh57bwm6L1q0CBkZGeqkgATTk5KS1EmBPn36qEx2mW6vbI1cIXDx4kX8/PPP2LdvX47paWlp6sTC9u3bVZkfqT//+uuvY9iwYfjf//6HRx991O42zZkzR5XumTdvnhq09sSJE2pdsj9kP0kpnxYtWmDChAke2w9ERES5KRUdhVEfDb5aJuexGdxhRD6CQXsiIiJnaKHQovcApedcfS1sIBDQOPNJZlal/81qPjWvFsp9S0Q+w9/fX9W4l1Ix119/PcLCwgr0/WQwW8mol/e7/fbbERUVpQbIlXI5UntetsGegQMHqnmlVE/dunWzTHvjjTfUSQiZLnXr5V7q4ktpm3Xr1qma/o7ISQmppf/qq6+qeWvXro3Q0FC1vNT3nzJliroKQMrjEBERFZYOfdug9T1N1eP13/yCTd/aLwFHRN5F01mnxOdJFlREhPlyqfj4eISHh3t0/arcjWTPu0AFtPwK9kDP0+SnIgdkcqm2q4ORUeFgGxmfL7SR6dKTQPL3algYrdxa6JfGAmnbAb+KgOm0mkcrsxRaYM6BE72FL7STr2MbGV9ht1FB9/fIc9hWnsO/hcbHNjI+tpFxuBNbiT1zEQ/XeQpxsfGIKlcC0/a/h6hyJQtsWykr/o68g16I/XNP9PeYaU9EROQkPeMUkPyj+UlIN2j+FWz+Ry0n3WbzfEkLuE+JiIiIiKhQlK5QCqM+HqIeXzp/hWVyiHwAg/ZERERO0hNmATAPsq2Fm2tHWmnBQFAb8+Ok5dA5dgcRERERERWSDn1ao3UP86DpGxZsxcZFW7nvibwYg/ZERERO0E1xQNJC85OgFnbL32hh92fOHA8k/cD9SkRERERELo2hlf1mHUPLX0rnZJa88b8BiN6VZQwtKffxxJShiCxtLsnx8aPTcen8Ze59Ii/FoD0VCT3+Q+ipv0HXTWwBIvIOUvJGT1APtbCH7M8T3AHwK6seskQOERERERE5S4LuUp8++w2av3kGvyBokcPMjzOOQUtZn6Mud6nyUVnK5Hw8agYbgMhLMWhPRSPxS+ix90M/3xqmyy9AT/6ZpSSIyLB0PS2zNE5mVktwO7vzaVogENrT/CRtN/S0I4W4lURERERE5NPC+l1NEor/GLqenmuZnI0Lt2LDQpbJIfJGDNpT0TLFAEmLoF8aAf1sc5gujoCeuBB6xgW2DBEZR/IqwHRGPdTCH4KmOf7vUwu9z/pYt5TTISIiIiIicpMmJXTCHzE/yTiuxtLKOY+5TE6JMpHq+eRRLJND5I0YtKeiUXY1tBKvm0tJIDjzxWQg5WfoV140Z+DH3Ac9/jPo6Ueh6zpbioiKhPz90RO+MD/xKw2E3pPr/FpAZSCopflJ0lLoekohbCURERERERULYX0Bv2j1UE+YrK4Kzo5lcoi8H4P2VCQ0v3JqwEa/Up9Bi94GLWoKENrLHBBTdCBtD/T4d6Ff6Ab9QmeYrrwFPXW73cu/iIgKTOp2IP2A+W9XWD9omuVEI/LOttcvAck/sXGIiIiIiMgj5HhEixhhfpJxEkhabHe+9ve3QpuezdVjlskh8j4M2lORU4OrhHSCX8m3oJXbAq30fCB8qLlutEXGv5l18PtDP9cSpktjoSevgm6KL8pNJ6JiQE/MzLKXq4KkhqQzQjoDWpR5eRnAlojIR6Snp2P37t346quvsGjRIvVafHw80tJyZvkRERFRAQntDfhdox7q8VOg66l2y+Q8/snD1jI5Hz86DRfPXWaTEHkJBu3JfVJTLXpPjhsCGpunBzTOOU0Ltb8qzR9aUCP4RT4Nv3KroJX9EVrks0Bgk6tfV/0ykLwc+qXHoZ9rDlPsEOiJc6FnmOtNExF5ip5+DEhZZ34Seg8069VAudO0ICC0h/lJ6jbo6cfZKETk9cH6CRMm4LrrrkPjxo0xYMAATJ48WU3buXMnqlSpgk8++aSoN5OIiKhYkOMNLWKk+YnpP8DBWFpSJuexyUPU48sX4vDxqOmFuZlE5AYG7cltcvZWZctnu0Hzz5zBP+d0TXNu3QFVoYUPgV+Zr6FF/wKt5AQguIvUqMicIw1I3QT9yqvQz98C04Ue5hHU0w6yDj4RuU1PmHn171H4IJeW1cJ6X10PB6QlIi+WmpqKbt264bnnnsOZMzmTJCpWrIgSJUpg1KhReP3114tkG4mIiIqd0J6A/7XqoR7/KXQ92e5s7e5rhba9zGVyNi36FRsW/FKom0lE+cOgPXkNyXDVQnvAr9Rkcx38UtOA0D7WAViU9APmoH3MPdDPt4dJgvkpW+xeKkZElBvdFAskLTE/Ce4ALaCaa3+zAqpnXiUkA9J+y79DROS13n77baxevRo1atTAa6+9hu+//x6fffaZdXrNmjXx559/4p133lFB+5MnTxbp9hIREXkr3ZSY4wY9I3NiRrbX06CFjzJPM50DEufbXackTT72yVCULJtZJmfUdJbJIfICDNqT9w68EtwOfiVfg1ZuI7Qy3wLhjwIBN16dSS4Rk7I5Fx8yl9G59AT0pOXQTazhRkROSPwaQIr5b07Y4Pz9rQrLHJBWTgCkrOVuJyKvo+u6Knvz0EMP4eDBg/jf//6H22+/XQXqsxs7dizuvPNOzJo1q0i2lYiIyNvp5xrkuCF9l3li+q6c00LvBvyrmpdN+MwczLejVHRJPDb54atlch6dxuoERAbHoD15PU3zgxZYF36RT8Cv7ApoZddCi3wJCGolBfXNM+kJQPIP0C+PhX6uBUyxA1TZCz3936LefCIyIF1PUWNlKAG1gaBm+VtRSFdAK2FeZyIHpCUi73PkyBGkpKRgypQpCAjI7FflokePHmoZIiIiKniaFgAtwpJtHwMkSeKRfbf0bnm1TM6321gmh8jg8u55E3kZLeBaIGAAtPAB0E1XgJSN0CXDNWUDoMcByABSf4We+isQNx56QE0g+FZowR2BwLrqJAARFXNJy8ydXlXLfrDT43Bkp2kh0CX7JXEOkLoFevoJaAHXeXhjiYgKzoULF3DTTTchJCTEqfmjo6Px33//sUmIiIjyQYvek+M1HTpiY2JRukxpaLBzXBLSDUj4FEg/Cj3+c1VGWPOLcFgm5/cNBzMHpZ2B+u1rq8Fqich4GJ0kn6b5lYAWeif8ot6DFr0VWqmZQNgAwK/S1ZnSDwMJU6HH9oZ+vi1Ml1+CnrzO4SAuROTbdN0EPeFL8xO/CuZseTdoofdb1gw9aZH7G0hEVIjCw8Nx+vRpp+c/evQoSpYsWaDbRERE5Ks0v7CcNy1MDirUffZpahnNH1rEY+YV6JeAxK8crt+2TM6VmDh89Oh0lskhMiifzLRPTExUg2WdOHECUVFRaNeuHa677jq3annu27cP+/fvV9lGgYGBqFq1Klq3bo3ISPNAHvZ8++23+Pvvv516j3vuuQfVq1fP8tpHH32E1NTUXA+iRowY4cInKd40LQgIbgUtuBX0yBeB9EOqxrSe8jOQts88k+k8kLQAetIC9Z+iHtTanIEf3B7wK13UH4GICkPqRiDjL/VQCx8ITQt0a3Va4I3QA+sDaXvNA9JGPKYuYyUi8gZSu/78+fNq4Nlhw4bl2QefPHkyBg0aVGjbR0RERACCbzOP8Zd+CHrCF0BYf2h+9uNV7e5rhQ2LtmLTol+xebG5TE77+1tzNxIZjM9FDWbPno3HHnsM1157rQrWHzt2TB04PPzww/jggw+cvrTXYtSoUVi6dKnKMGrfvj1uvPFGFbhfu3atqu/51FNP4ZVXXoG/v3+OZadNm4Yff/zRqfeRy46zB+1feOEFJCQkOFymfPnyDNrnkyp1EVhL3bSIkdAzzgAp680B/JStErUD9CQgZQ30lDWyBBDYECGmFtDT74QWmLWtiMh3qE6u0MKB0N4eWacWeh90CdqbzplLdYV09Mh6iYgKWmhoKHr37q36nL/++qu6b9y4cY4El82bN6uBaKXv3bdvXzYMERFRIVJlfiOegH5pJKBfVlcOa5GPO5xfsu1/X3+AZXKIDMyngvZff/01Bg4cqAbAWrhwoTWQPn36dAwdOhSXLl3C/PnzXVqnLCs2bNiAtm3bWl8/e/YsunXrhtdff109luwje+rXr49OnTo5XP8333yDuLg4dULAnj59+qBSJZtSLjZKlDAPbkju0/wrAGF9oIX1gW5KAFI3Q0+WOvjrzJeXQQfSdiMMu4GYKTDJ6OxSBz/kViCwkbocjYi8n552UI15oYT2ViW2PELqTMaNV4Niy5U8GoP2RORFxo8fr65inTlzprqFhYWhbNmyiI2NRZ06dfDvv/+q/qx46623ULly5aLeZCIiouJHqgQE1AHS9wOJM6GHD4DmF+W4TM4nQ/HG/e9Zy+S8vHBMvsfyIiLP85mgvQTkJcNeStd8+umnWTLfJcv+iy++UAHyfv364a677nJp3ZJRZBuwt2S5f/LJJ2jZsiU+//xzPP7446hdu3aOZVu0aIFJkybZXa9caiyXEMulxlLqxp5HH30Ubdq0cWl7yT2aXzgQchu0kNug6xkqWG8O4P8MZBw3z5TxN5A4A3riDECLgh7cwRzAD2pjXp6IvDvLHn7QZPwLD5G/C3rInUDSNyrTXq7uUScLiYi8gCSQyFWm9957Lw4cOKDK4EigXshzERAQgNdeew3PPfdcEW8tERFR8aQC7pGPQ7/4CKDHq2MbLfIph/O3690SGxe1xMaFW1WZnPXf/IIOfVgmh8gofGYg2lmzZqlsn44dO6qAenYSrBfvv/++S+sdPXq0yt63p1mzZggODrZm4mfXuXNnFdTPLYtfSuywLr1xqQFdgprCr8Sz0Mr+iEv+84CIsSq7XpXMEZKJn7wE+qXHoJ9rBlPsw9AT50PPOFvUm09ELlBlspK/Nz+RE3cB13p0/2lhlgFpTQAHpCUiL1OrVi3s3btXJcEMGDBA9XEbNmyILl26qFKRR44cwfPPP1/Um0lERFS8BbUDAhuYHyfOhm6KzXX2xyYPQVQ589XFkx+bgYtnpdIAERmBz2TaL1u2zJrZbk+rVq3U/caNG3Hx4kWUKlXKqfXKJb6O+Pn5qRr5Eng3mUw5po8ZM8bhshkZGaqkzq233qoOgsg7mLQq0MIbQYt4BHpGzNU6+KlbzDXwkaYGsdRlIEsJAgbUMZfBUJep3chLzYgMTE/8CkC6eqyFDfb4+rXAOtADbgbSD0JPXASEj2BpLSLyKnIl63333aduREREZNBse6ltf/EhOcCBHj8NWolnHc4fVU7K5DyM1+8zl8n5cOQ0vLJoLGMXRAbgM5n2v/32m7q/4YYb7E63vC7B8n379nnkPSWz//Lly9ase1esXLkS//zzD0aOHJnnvLt27cKcOXPw0UcfYe7cuSqTiYqe5l8GWlgv+JWaAi16G7Soz4DQ+wC/cldnSt8PPf5D6DF3Qz9/K0xXXoee8gt0Pa0oN52IstFN8UBi5pgngY2hBdUvkH2khWUGukynzSf7iIiIiIiIPCmoFRDYxPw4cS70jPO5zn7LvS3R7j5zlYgtS7Zj3XwepxAZgZ+v1LOXm4iOjrY7T8mSJREUFKQe//333x55XxnsVsjlwa4G7aUevtQH7d69e67zSSbT8OHD8eOPP+Lw4cP4+OOPUbNmTVUG6NixY25tP3mOpoVAC+kAv5JvQCu3CVrphUD4cCCg5tWZTKeAxK+gXxwE/VwLmC6Nhp60ErrpCpuCqKglfQvo5kEUtXDPZ9lbhdwFaKHqoZ64oODeh4jIg06fPo358+erm9S2z+73339Xg9WePcvSgEREREbIttcin8x8lgw94fM8lxn1cdYyObFnLhbwVhJRsSiPExdnDrQIKVfjiExLTU3NMn9+JSUlqQFmZZ1S5sYVEnxfs2aNqv8pg3Y58sQTT+Duu+9G8+bNs7w+e/ZsVWdfThZs374dVapUcfq9mzRposr6ZLd//34UJF3X4e3kM1huudOAwHrQAusBEaOhp58AUtcCyT8DaTvleg9zcDD5O+jJ36mfoR7UFAi+Vd00f8/W0S5OnG8jKipGbCNdTwcSZpqf+FeBHtRBXsznuvJYTosAgm8HkhcDKWthSj8Hzd/m6hyDMGI7UVZso+LdRnXq1Mnxmr1SjZ4ydepUvP766+px+/btVXnH7Fefvvjii/jggw/www8/oHHjxgW2LURERJQ3LagZ9KAWQOqvQOI86OFDoPlXcKpMTlxsPD6SMjnfPs0yOURFyCeC9s4eDFmC1Z44eHr66adx9OhRzJgxA3Xr1nVp2SlTpqiaoEOHDs11vjfffNPu6zL4l5TXkUx/2Y4FC5zP1pTyQPY+f0xMDDwtMj0NgVLlPS0NcQWw/sIm++3KlStX68Q5LQzAneqm+V9BoP4rAvVN6t4PCeYa2qlbzbe4N5GG6kjT2iDVrw0yUAvQfOKCGIO3ERXnNgo0rUWkXAkDIEG/Fymxlwr0b12AfhtKYLH67SfGzkGy3wAYjRHbibJiGxXvNpL+XGEG7WXsqNKlS6ug/D333JNjeps2bVTfVBJSunbtqhJUnB0/ioiIiAqGFvEk9Ng+AFKhJ0yFVmKcU2VyNizYii1Ld2DdvM249YG2bB6iIuITQfvIyEjr4+Tk5Fyz47PPnx9ywCLlbd5++20MHuxaGYXExETMmjVLHfBUrFgx39tw7733qqD98uXL1ecKDTWXW8jL7t27ER4ejsKgxwaqcVkDAwNRpnQZeDvLyY4yZcq4cfAt+6EqgL7Q9VQgdYfKtoUMZmv6T80RgKMI0I8iNGMm4BcNSNavDGQb1AKaFuzBT+R7PNNGVJzaSG3PxYWAxLq0KISXfRARmeVrCupvna63A2JqABlHEKZ9j7DST0Az2Mk5o7UT5cQ2Kt5t9Mcff+R4LSEhwe0+rqO+q5S/Wbduncqyt0euHL3jjjtU+Ua5qlOuCpUrRomIiKjoaEGNoAe1BVI3AYkLoYcPheZfKc8yOXvXHcCl81cw+fEv0ODWOihdgSfiiXw2aC8HLRJMl1IyBXHwHxUVpQ5SpOzNhQsX7M4THx+PlJQU9bhy5cr5fq+ZM2fiqaeeUpcIP/us4xG4HZGBZKX+vjMD0ObGMrCufCYZ0LZWrVrO1zYrpACMbT6/rwR9LPvPE59HBeBD2qibrv8PSP9DBfB1KaOTfsA8k+kckPSN+aaFQQ9qAy1Eyui0h+ZX2v0P5IM82UZUDNoobTf0tL3mx2F94ecnV8YU7N86mUcPuw963JtAxr/Q0rZDCzYP/GQkhmonsottZHyF2UYF9R6nTp3Cdddd5zBgb0v6+qNGjVIBfgbtiYiIip4W8Tj02E1y4AM9fgq0kvYrOtiWyXl8ylC81vtdlskhKmIeT+2TAaikZMwDDzyABg0aqAFgpRRMWFiYupfn8rpM/+KLL3Du3DmPHKTUq1dPPT5+/LjdeSyDz8q8rpazsfjqq68wZMgQVbbmpZdeytc6JEP/pptuQocOHeCpAzPWHPZ+6oA+8GZoEaPgV3YJtHIbzZeuyVlxVXhDjVoJpPwE/fJz0M+1ginmAegJM6Cne2ZgZaLiSE/4IvNRILSw/oX3xqEyCLl5cHRdTsoVId2UmPMmf2/0JHWffRoRFS/nz59HpUq5Z+XZuv7661WNeyIiIip6WlB98/h5Imkx9PR/81ymba8WaH9/K/XYUiaHiLw40/7EiRN44YUXVH11Gew1t9qee/fuVbd58+YhKCgIffr0UYHwa6/N/wCccknuli1bsGPHDrvTZcBWIYO6livn+qB/sq0PPfSQ2s7nnnsuyzQZVPby5cvo1atXruuQ7ZPP/dFHH+X5fkuWLFEnOm677Ta70//991/r5ciS/US+RQ0QE/YAtLAHoJvigdTN5gz8lA2ALvW2TWpQW10Gto2bAN3/BiCkIzT5zziwATTNv6g/ApHh6en/AClrzE9C7y7UAWE1vyjoIV2B5OVA8mroptgiu3pGP9fA7utqa85lvZJAaBUOF8ZmEZFBlChRQvXznSXzylWwREREZKBseynLiwzo8Z9Ai5qQ5zJSJmePlMk5d5llcoi8OWj/zTff4OGHH1YlaCRjuGbNmqhdu7aq2S4BcrlUVmr9yiB9UiZHMnZOnz6NAwcO4MiRI6rupQSpJUO/d+/e+doGS0D9p59+UgF0yejPvo3i0UcfdTjAlpxUsDe4lpyIePDBBzF+/Hg888wzOaYvWrRIZfjnFbSXLHupJz9w4MA8P4/sC7kKwVHQXrZXdOnSBREREShqdrMv9cxB0vSMHNO1fJSgKK40vwggpCu0kK7Q9XRzOQ8VwP9ZldZQMo4BCcegJ0wD/EpDD+5gDuAHtea+JnJAT5xpLW6jhT1U6PtJkxI5ErSXgvhJS4Fw18ZIISIqDNKvl9KOcsWp9Ifzqn8vySn9+vVj4xARERmEXNWvB98GpPwIJC+Dnj4MWoC55LIjJcuWMJfJuXeSKpPz4YhpGLf4aZbOJPKmoL0MqioBc7kU9q233lIDpFaoUMHp5c+cOaOC3u+99x7uv/9+NajqgAEDXN4OeU8J2j/55JMYO3Yspk2bliXAvXr1ajU4lr2DCBnQ9b777lOP58+fr7bD4ttvv1XLSEkbPz8/TJo0Kcfykj2f/SSBvbJBsq5BgwapjCVnyFUD06dPVydEbP3www+YM2eOWs8777wDI3CUqamk78oxnZma+aNpAUBQM2hBzaDrzwEZfwHJP5vPmqftMQcgTbFA0rfQk75V5Tf04FbQZCBbCeT7R+fznYl8i266pC4PVYLaQgusWfgbEdgU8K8KZPwNPXEBEPZQkXSCtWj525GVHjtE/e1GQGNopWcU+jZRtsFM9aQcu0SXv/eZJYygZ/veaKE8oCKPsVwVO3jwYDUA7tChQ1G1atUs88gYS5I4I+UjDx8+jL59+7IFiIiIDESLeAx6yk/qqn09fjK0qPfyXKZtz+Zo36c11s/fgl+W7cDarzejYz8p4UtEhg/aS7B62LBheOSRR/D+++8jNDQ0X8F2GbBKasWPHj1arU9q3ltq1LtCBrySoP/LL7+Mo0eP4tZbb8WxY8fU4K933nmnCnTbC4hIVpCFLG8h9TjloCM9PR379+/H008/7fC9HWXEW8hJBCkb5OwAtO3atcPOnTvVgZFkNrVo0UINtiuvrVixQl3JIIPi3nzzzU6tj3yP+i4HVAciqkOLGAY94wKQss4cwE/ZAiAZQCqQsh56ynq1jB5YLzOA3xEIqMGgDhVfifOsgVCtiDLc1W84rDf0uInmq2XSdgFBTQp/O+xc+aRbSmxp/rxap6hJYN7VEkZyIkbjFW3kOW+88QZWrVqlEnTkVqZMGVxzzTWqTGNcXBz++ecf1V8WMr1KlSrc/URERAYiSUp6SDcg+Tt109NGQAuskedyoz4ajD1r96syOZ88PgMNbq2DMteUKpRtJiruNN2NUUy7deumMm2k7IunSPkaKTXz3Xff5XsdUnpn+fLlOHnypMqAb9++PZo2bepw/oyMDHz++efqsZyAkAFzhRyEvPrqq069Z61atXJkxNuSkxqShZS9Hn5upGkk2/7gwYM4deqUOrkg5YakLn/Lli2dXk9CQoK1hI6UMJISPZ7m6uCE3lgeR9ojJiZGHagWRTasK3QJRqb8Al1K6KSsA0wxOWfyvxYI7pRZRqcxNC1zwFsv5k1tVJyzg2NjYlG6TGloKJrsYF1PhX6+A2A6DwTcCK3Mcrfe1xTTH0jbDgQ2g1+ZOa5tS0YM9PO3mEvkhHSHX5Qxrp5y5zORZ6kBgHO7ms0OCdp74/+zvqaw/08q6P6eZND37NlTlbe0RwL4r732Gp5//nmPvq8vKoy+eXHBvp/xsY2Mj21UfNpIT/8L+oU7zGPkBXeFX6m8x1sUm5dsw6u9zFUnWt7dBK8ueYbH2wXURuQ77ZTggf6eW0F78g48MCjef4R1XQat3ZsZwF8LpB/NOZNWAghul5mFf4u5jr4X8tY28kVGDjTqiYuhXzGfQNVKvg0ttGeRBrhNl54Akn8AEAwtejM0v9zLrRUGBu2Nw8i/JSpeQXtLoouUtZTkGrmqVcaqkoQSSSaREpBSLpOM0VbFBft+xsc2Mj62UfFqI9Olp1Vde6GVWarq3TvjzQc+UGVyxLOzH0On/pJ4RAXRRlRwdC8L2ntkIFoiMi5N8wOCGkILaghEjoWe/o8axFZPljr4O81n2fUrQPIK6MkrpNA2dKmbLxn4IR2h+Vcs6o9A5NH/pPXEL81P/KKBkDuLfO9qoTIgrQTtU4Ck5UB47gM9EhEVFbkaVcZ+sh3/iYiIiLyHFjEKevJKORUPPf5jaKU+dWo52zI5U574Ag071mWZHKIC5lfQb0BExqIFVFE1vCUjWIveCq3kO+rSOGiWs35pQOoW6HGvQz/fHqYL3WGK+xB62n5zyRMib5a6BUg/pB5qYf2haUFFvUVAUEtzuSpVvnwBf2d09QSTZNmbznKPkFe5cuWKKu1IRERExowHILSH+Ykk86Xtc2q5kmVL4IlPh6rHcRcT8MHwz3jcQlTACizTXurSW9heKiuD18oAVf/++y8aNWqkBo2Njo4uqM0golxofqWA0O7QQrurOt9I3QY9Wcro/AxYAkXpf6ibnvAJ4FceenBHaCFSB7+FMQKeRC7QE74wP9BCgbA+xrkaJrQ39Pj3zScU0n4HguoX6dgD0DOs9znGLCmksQe8na6nAKY4QI8DTFcAPT7zsbx2Bbop63M13Tp/5j0y8vfeF7pB9y8H+JUF/Mqoe03dlwH8r74mpdHYluRpu3fvxrhx47B+/XruXCIiIgPSwkdCT5ISOWnQ4z6EVnq6U8u16dEcHfq2xrp5W/Dril1YM2cjOj/YrsC3l6i4KpCg/c6dO7MM/GrJzv3jjz9UzcukJHOAYOvWrfjpp5+wa9cuREZGFsSmEJGTVAA+uC204LbQ9VeA9INXA/gSuBcSyE/6GnrS1yozXw9qaw7gB7eH5hfFfU2GpqcdAlI3m5+E9jTWdza0FxAvA0FlQE/6BlohBe0lYJ9rvfT0XTmmS710aL5dL13X0zKD59kC65bnehx0SyDebmD+ivmqpaJiOm2+2bB/nVQgdL/SNsF9c1DfHOC3eU09LgVN8y+kD0BGlZqair/++gtxcXEwmUx252GWPRERkbFpAddCD70XSJoHpG6EnvqbuZyuE0Z9NESVybl4VsrkfIlGneqxTA6RNwXtFy9erDK3hg4dil69ellff+WVV1TAvlSpUmqwqrNnz2LevHmYPHkynn/++YLYFCLKB5V5GVgbWmBtIPJx6BmngeS15sFsU7ebg1F6ApCyCnrKKqlyCz2wcWYAv6P5kjsqdsxZ2xLYPA89/V8YjbWWPTRoYYNgJJp/NPTg9uaTZMnfQ498wWsHhDbE4Nu2wXM7gXXdXiDeMo+62bn6wOM0c1kyGQjcL1IKjAJ+JQAtEpC21yKhaSWga8FA3BuurTq4G6BfkhGFAdMFwHTRPH5JDmnmk7HZSvDYD/D7QZers7IE8stcDfD7Zw3080os3yKDZ40ZMwazZ89Wg8/mpV07Zt0REREZmRYxAnrSInO2fbxk2890arkSZSLxxKePYFzPdxB/yVwm57Wlz/LqTSJvCdqvW7cOzz77rCqDYyEZOcuXL1c/5FWrVqFZs2bq9RtvvBFLly5l0J7IwNRgtOH9oYX3hy6BrZRN5gB+ygZz0EtKOKRth562HYh7G3pAdSD4VmjBHYHA+ubyH+TlwXgJfJ4FMs4DpnNAxjnocp/52Hovg6kakC7blrQiM6DZyZAnltSAtPK70hMBGRzKIOV7Cv+7lpgtiJ41sK5ny3jPEZiXx4VBrjaQQLsKspfIDLpHWp9rWaZdDcRbn2vhzv1tlLr2LgbttZLjofldvRpCl3JHpkuZAfwLmcH8GOiWxxlXX1M3u1cJmGymX+VopBNdnYywCfD7S4A/e/a+pXRPmA+MPxBrbwpgioU6jyQnaWxofqW96uBWEnHmz59f1JtBREREHqL5V4AuxxuJXwGpv0BP3QEt6GrFjNy0vqcZbn2gDdZ+vZllcoi8LWj/zz//YNiwYVlek7qWKSkp6NChgzVgLwYOHIj33nuvIDaDiAqAJkGp0G7QQruZS0ik7oKeshZIWQNknDTPlH5U3fSEz1VQRg/uYA7gB7eCJrXEyTBUXW1r4N0ckNczzma+lhmgl1shZB7rV14BwvplnujxbDBLT5xjDUTKQMyGFHwL4FcBMJ2BnrgAmpcF7c2l8Cx13O0H1tVJP7uBdkuQPj7fddxdE5QZYC9xNZhu81jLMS17YD4CmhYIb6HK2kgmvNxw49XXc71iRgL5seb7jAvQrVn7luB+5mNHfxtkHRly+/vqSw62T5f/F+yU5NGy1OA3cB1+2QfnW9qdVFr+OW9ngheVmYqNjcU333yjxqJ64YUX0KBBA3XVbFCQ/XFtNm3ahAkTJhT6dhIREZFrtPBh6rhD+vB63AdA6TlO97Me/XAwfvt5n7VMTsOOdVG2our5EJGRg/bSua9QoUKW13788Ud137dv3yyvy3yJidkGuSMir6CCVsEtoAW3gK4/D6QfMY9AL0H8tL3mmSSok7Qo89K7EOjBraEFSxmdDtAkGEMFQjclWIPwlkx4lW1umxkv06XMUX6pQFt5wK8c4B8N+EWrMi9yr7JsLw11bX3Jy6AnLwMCbgRC7zMPkiyBUjepgVQTMzNEA+sDgY1gRBJYVbUlEyYD6fuhpx2EFngzjEZOrugSpMySAZ8ZhC+UOu4BObLar2a8R9oE3e1kwGeWomHpFsfUgZpWEvArCaDa1ddz+31Zg/nZsvgzsgX61ZVZ9laSZD7paznxa3nZYR1+SxD/alA/ax1+yz3r8HvCkSNHEBoaqsahKlNGTvzkLiwsDP7+HP+AiIjI6FSJTkmaSvwCSNsBpG5ViXbOlsl5cuowvNJjoiqT8+Hwz/HaMpbJITJ80P6aa65R2fZS+kZIhv2CBQvUgeCdd96ZZV6pa1+uXLmC2AwiKvQ6+DXVTdXHk8BwyrrMLPxfMsumJGcG9X9WISBdMqolAz+kI+BfzXjZkwakgqUqA/5stmC8JUCfmSXvTjAeIdYgPPzLqcC8JRh/NUBfPrO8h+a4pIfL7yulQkxA+iHoca8Dce9AD7kdWtj9QGDDXL8fKnDoaFriN+b63iK0nzlAaNAMVy3sXugJn6hwpcq2LzkOhiMnVvJNywyw22SxWwPsmQF3O69dDbrLLZR/KwxElbbxqwygctbX7cyr66lZM/Uzg/rmLH7bAL+lDr/uoA7/GfPNdt251uGXIP7VAXfNZXqkZI/lNfN0nsyxLzAwEDfddJNTAXtLPfuff5b/54mIiMjotIhHoCfNVyUqpbY9glo63ddu1b0pOvZri5/nbsKvK3dhzVcb0XkAx7UhMnTQvk6dOqqe/RdffKF+7C+//DLOnz+vOvES0Lclde4rVqxYEJtBREVIBXnD7lcBVxVQTd2SGcBfZy65ICGWtD3Q0/YA8e8C/pWhyyC2EsAPbARNCyhW9YN1PTlrBrylZrwKwpufm4PxcW68S5BNMF4y5KOh2WTJW+9V4LQI9lXZH6El/wA9aUFmxm0ykLwEevISIKCmTfa9ZABn+z6ca+Dce1x5BvqVZ4Dyhwz5fZDxI/SgtkDqRiB5OfTIZ4xX71uT74qlLnvWwHqWgHuOoLssE8YxLlze36HQpJRKNjp0xMbEonSZ0jK0co5ljEgFxf2vMd9sX7czr7kO/8UcWfy6tQa/Tfke9f+BJ+vwS0A/M5CfI3vfN+rwu6JmzZpISnK+RFp6eroarDYigoNpExERGZ0cJ+th/QEpbZv2G5C6yVy200kjP3wIu9f8bi6T8+SXaNiJZXKIDB20f/zxx9GlSxesXLkSwcHBOH36tPV1i0uXLmHZsmV48cUXVV17IvJdKrgR0hlaSGdzIEaC9RLAT/4ZyDhmninjXyDxS+iJX6rSDHpwO2ghnYCgNtAkI9dL6werzFJrMN5mANdsAXrol914l8DMIHw5a/Bds8mStwbkjVgL2oacQNAihgPhj6hLM1WGvIyVgHQg/bB5MM4s2fdyckfLX719Q2fb3wddgvZSbiZ5FRDWs8DeS7dcgeACrdxPxSpgaYxyNXb2t9Se15KgqRMhxv1du1eHPzN4bvu6wzr8l68G8DOD+lcz+G2y+GWanBDMqw5/Wl4B/rCrQXwtCr5Mgu/Sr585cyYGDRqU5/ybN2/GuHHj1HhWREREZHxa+BDoiXPV1dqqtn1QW6f7lyVKZy2T88Gwz/D68ud8sn9K5BNB+86dO+PZZ5/FxIkTMwemA0aNGoWePa8GHmQAK4t77rmnIDaDiIwaiAlqDC2oMRD5NPT0v4GUtdAlgJ+225wZKcEXyTJOXm6uXxzUAlqI1MHvqEa5NwJzmQcp73DOWqpGz1ZD3hyMdz0oelVglnrxEoRXwXgJxKvXMqdpUcbrFEmmb7mtdiZczQ6Gg+xgTfMD1NgHraFLgC3p28zs+xPmMkvJS6EnLwUCqgOh90MP6QKfEtzB3Lam89CTvoFWAEF79f1N/AqIk1I8RL5wYiMK8ItyMsCfaBPIv5qxn7UOf2YWv6Orm2QdGYmZf5d8m5S5lH78iBEjsHr1avTu3VuVwJRgvr3/e+TqWiIiIvIeml8p6GGDACnTmb5fHZ+rErZOsi2Ts+273Vg9ewO6DGxfoNtMVBwUSNBevP322xg5ciQOHjyIG264QV1aa2vhwoXWx7fc4vylN0TkW7SAqkDAEPPZfQmSpKyHnrwWSN1sDopIumPqJuhymR5ehR5QGwhuW2Dbo+tpNsF4BwO4qmC81FvOr4DM8gtXy9KYg/E2JWqswXip8+59JJCj+ZexHzDzk45hGadONKjBiiOGAeFDzdn3ErxPXp2ZfX8UetybQNxE+NoAz3poTyDhM3WJqp52BFpgDY+sW+1/KUEUPynHoJ9ExSfAHw74hTtZhz/lara+yuC3U4dfxhnJ+Au+auvWrejQoYP1+ddff53nMlISk4iIiLyHFv4QdEnq0a+Ya9sHd3DpWFTK5Pz28z7EnrmkyuQ0kjI5lZwbD4eICjloLypXrqxu9tx7770F+dZE5KX19BDaE1poT3OgRIK0EsCXM/0SLBfpB8w3F+kS5M04YxN8P58ZjLcM6JqZJW+pt58v/lmD8VIzPsuArplZ8n6lvDYYX1RyZt8vUVnoqqyS3VrW3k0L7Q1dgvaqks8CaIEvur1OPfU36HFvm2tVWvhVAUz/uL1uIl+lacGAf0XzLdDmdZt5ZNwWp8fVICIiIjIgza8EED4YevwHQPqfQMpqIOQ2p5eXMjlPTH0Er9wzEQmXE/H+sM/wxornjXdFOJEXKdCgPRGRW4GS4PbQgttD18epQL0qoZPyM5B+yPUVnmuS71C8Sg1XgxBaMuHLXQ3G22bHq8Fu/fP9LuQcc/b9UCB8CJC6zVx/MeUn39p98n0LbA6kbVMnKEzhI82/CQdyqzGvp/8LXQZ7Tv7BZoFS0CIfhx5yJ3Cuqae3noh8TLNmzTB37lyn5t22bRumTZtW4NtEREREHhY2AEiYqUq86vEfAcGdXDq+bXV3U3Ts3xY/z9mE7d//xjI5REUZtP/1119VTUvb+vTuio2NxeHDh9GiRQuPrZOIfCDLOrAutMC6QOSTMKUdAWLu8MSaM4Px5Rxkx1tek1IuDMYbM/u+JRBYH/o53wraZ8nalcExzzfP9aSTVuFwznWY5NLWKeba9darEYKA8IHQwodD84s0D2YqgzRnXzZ2CJC+CwhoDK30DLtjDxBR8REaGorq1as7Ne/Jkyy9RURE5I00vwgg/GFzKc30I+akn9A7XVrHyA8ewm9rWCaHqMiD9l9++SX27dunBqUKD5faoO6Jj4/HHXfcgQYNGjBoT0QOaf6VXM+aD3sEWkClbAH6stA0XnBEvkWNy5A4D3r85KwDIYfcCS3iKWgB12ar750zS1+3nKTS/HPN4ici31evXj1MnDjRpaz82bNne+z9ExMTMWvWLHW8Ick9FStWxD333KMGxHXnkvvdu3er+vz79+9HcnIyKlWqpI5D7r//fvj7532i/vjx45g3bx527Nhh3a66devigQceQJUqVfK9XUREREUqrD+Q+KUau0eP/xgI6erSMbOUyXnys2F4ufsElskhcpNbRZXffPNNnDp1Cm3atFHBe3fI8m3btsXp06fxxhtvuLUuIqLstIiR0ML6QgvpBC2wHjT/CgzYkyGpwWLLbTXfQvpeneB3k/nev8HV6Zk3WUbdkldDv3AH9Lg3rgbsAyVbfiH8ot7LErAnInJG6dKlVSDeWRLwlsx8T/jnn3/QqFEjvPLKK+jUqRNefvll1KpVC/3790eXLl1UQN9VJpMJo0aNQuPGjfHnn39ixIgRav3VqlXDkCFD0Lp1axWEz82kSZNw88034+jRoxg4cCD+97//qSsRXn31VVStWhXz589341MTEREVHUnY0cIfMT/J+BtIXuHyOlre1QSdHrxFPZYyOT/NWu/pzSQqFtxKMS1btiyWLVumOs0NGzbEXXfdpbJeJIh/3XXX5Zr9IsGFEydOYNOmTVi0aBFWrFiBMmXK4KefflL3RERExZKeBJxvmfN10x/m+4w9OabrpecCcR8AaTuuvuhfBVrkWCC4CweAIipIUjJKTqDloCM2Jhaly5TONnStb5eZ2rp1K8aNG4f16907QE9LS1PHFkeOHFF18ps0aaJev/XWW1VW+9ChQ1WQXbLdXSEB+k8++UStW45jLMcrHTp0UIH4vn37quOZn3/+2WHA/umnn1aBecnKt+jYsSMqVKiARx99FJcu2VzlRERE5G3C+gIJMwDTOfPVu3LFrhbocpmc3VIm57+L+HT0TDTuXA9lKzHWR1RomfZCStn88ssvqiO9dOlS9OvXT10SGhkZiZo1a6JVq1aqc33bbbepe3kur8t0mU8yZWQ5yeCRTn79+vXd3SQiIqLiJbbf1YC9VhJa5IvQyn4HLeQ2BuyJCpgEff38y+S4aX5lzAOU+9mZ5kZZl6ImiTcXL17EmTNn7N7yylJ31vTp09WVuHfffbc1YG8hwfrKlSurwLkcPzgrJiZGBd3FCy+8kKMd+vTpo8brWrt2LZYvX55jeRl368UXX0S3bt2yBOwtBg0ahIAAlt0jIiLvpmkh0MKHmZ9knACSlrq8jshSEXhyqjljP+FyIt575DPzFcVEVHhBeyGXg0rgfs6cOdbLZxMSElRmjHSk161bpzLo5V6ey+syXciAs1JPcsuWLbjhhhs8sTlERETFUCAQ9hC0cmugyWCzWlBRbxAR+RDpv993330q8UZK5lxzzTV2b7169fLI+82YYR4EWzLis5Ng+5133mkdY8tZkv0v9esDAwNznAiwkCuGhdTRz+6DDz5AamqqSlKyJywsDNu3b0fPnj2d3iYiIiJDCrsf8LtGPdTjp0DXU90qk7Pjh9/w40yWySFyhcdSQfz8/FQHVm5Sl14C9AcOHFCDNF2+fFl1kENCQlCyZElcf/31qF27troMVS5vJSIiIjcEdYJW4jloAZVdXlQ32akJrWdY77NP58C0RMWPZJhLoo1k2BcGeZ9du3ZZr+q1R2rdC0kMcpYco4gSJUo4zIgvX768ut+8eXOOaQsXLlT3udX4l5KhRERE3k4lAEWMgH7lZcB0CkhaBIQ94PJ6spbJ+VKVySl3LcvkEDmjQK7flEC8owwUIiK3sX4wZf8+5Oc75EO0qEn5Dqbr5+wHxJT0XTmmaxUO5+t9iMh7jRkzRl0l+9xzz6mSl6dOncJHH32EuXPnqulyufuxY8fw3nvv4Y8//rCbpe6K/fv3Wx9LGRx7ZPwsy2C1cXFx6gqAvEgCkZCEIhmQVpKOsrty5Yq6P3funDp5UKpUKfX877//xoULF9RjKfH5448/qiD+X3/9pU4ASD18Of5xZdBeIiIiQwvtCSR8DmSchB7/KRDaC5oW7HKZnNGfDcP/7n4biVeS8P4jU/HmdzlL1BFRAZXHISIqTMWtfjDlTtpWi97j2o3fByIip0iw/ocfflDlat566y20b98elSpVQmhoqCqRKbcaNWqoYP6qVatUkH3nzp1u7V2pjW8RFRVldx7b1yXA7oy6deuq+/T0dJw4ccLuPBKct7C9skDKAwkprfPAAw9g8ODBaNy4MV599VVVy37Dhg1o3rw5nnrqKae2hYiIyBuy7bXwR81PTGeBxG/ytZ4WdzZG5wHt1OMdq/bgxy/XeXIziXwWR0oiIiKvx5Itbuy76D05XtOhIzYmFqXLlIYGnvAiKu6lcaSGff/+/fOcV06IyiCxa9ascau2vWXsK1mfozI2lqx5ER8f79R6JQteBpo9dOgQZs6ciVdeeSXLdLmCYPXq1dbnEty3uHTpkrpPS0vD0qVLcfDgQXWywkIGzJXSOO+//746kTFy5Eintklq69vL+Le92oAck6s8LDcyJraR8bGNjK8o20gPuRtImApk/AM9YSr00Huh5eOq5eHvDcTuNb8j5vRFfPrUTDTsVBfR15WFr+DvqHi3U506dXK8Jld1uotBeyIiomLM7gkP6cRoSdC0MF6VQFTMybhUVatWzfKaBNKlxIw95cqVUyVr3BEUZB5I23JQZe/qKAmeZ58/LxIclysGOnXqhEmTJqFVq1bo3LmzmhYTE4OHHnoIERERiI2NVa/Zltyxfb/evXtnCdhb5h09ejRGjRqFN954AyNGjHDq72dGRobdA0fZHsqb7DtLSSNeRWdMbCPjYxsZX1G3UZA+EBF4DTBdQOKF6Uj2c722vRj8Tl+802+KKpMz8aHJeG7+KJ/5213UbURF207Sn8uOQXsiIiIiIiow11xzjSolYxs8L1mypKrlnpSUpMrk2JIBZN09SJH1WyQmJiI8PDzHPPLe9ubPS+vWrbFlyxaMHTsWXbt2VfXpZWDa48eP45577sHTTz+NLl26qDI4ZcpcHShPgvm22fGO1i3+++8//Pnnn7jpppvy3J7du3fb/XzkHMsJD2krBkmMiW1kfGwj4yvqNtL1PkDMXCDjL4TpcxFWajA0P9f/7+rcpz32/HgAq2dvwO/rDmLn8t/RdfCt8AVF3UZUtO0kYzrZu3LUmTGXcsNMeyIiIiIiskvq10vm+aeffmot+VKzZk2kpKTg+eefx7vvvgt/f3/1+vbt29XzPn36uLU3Zf229e2rVauWYx4JjFuC6XJiwRWNGjXC2rVrVc16uSpArhyQ95ATEJbyODKwrG0G/7XXXmt97Oj9ypYtm2W7nQnaq3FZeHDvFss+5H40LraR8bGNjK8o20jTAqBHPAb98pOAfhFa0hxoEcPzta6RHzxkLZMzdcwsNO5S32fK5PB35B20QvoteWL9HIiWiIiIiIjskoxzyTx/9NFH0aNHDyxbtgzBwcG488478eGHH6pgtzxu2bKlKjcTFxeHu+66y629Keu0ZLlLxro9ltebNm2a74OiUqVKoUGDBqoOqeWKgQMHDqh7+cy2ateubQ3iS8kge2xL2jB7noiIfEpIVyDgRvVQT5gB3RSXr9VERIVj9OfmgL+UyXn/kakcl4TIAQbtiYiIiIjIoQEDBqgBXOXS32+//Va99vbbbyMqKkplqn/33Xf49ddfVT3P7t27ux20l9rzcoJAbNq0ye48GzduVPf33nuvS+uWKwGk3rwj33//vXp/qW+ffeBbKacjZBBae/7++291L8F9ewOSEREReStN84MW8Zj5iX4ZSJyV73U179YIXQa1V493/rgXq75Y66nNJPIpDNoTEREZiRZaOMsQETlJAuOS2S632bNnq9dkINZt27apgH79+vXRpk0bNbjrwoULPbJfn3nmGZXlP3fu3Cz168XRo0exbt06VKxYMUdwXezbtw/dunXDSy+9ZDewPmfOHOsgZLa2bt2KNWvWqDJA9krbyDaJRYsWZRmY1kIGuRUDBw5EWJidQb6JiIi8WXBnIOBm9VBP+BK6yf6g9M4Y8d4glKlYSj2WMjnnTlzw2GYS+QoG7YmIiAwkP2UeWMeXiIqC1J6fNWsW9uzZozLix4wZowLtniAnBd5//32cPHkSjzzyiDVwf+7cOfTv31/V0ZeAfvaBcMW4cePwww8/4M0331Tbll18fDyGDh2qBgizkFr2PXv2xG233aay8R0NNPviiy+qQWsffvhhNUiuZVCzTz75RF1xICcw5OQFERGRr1F1wCOeMD/R46AnfJHvdbFMDlHeOBAtERGRwWjROYNMRERFQUrepKam2g2O25Ja8BLAHzx4MGrVquWR95Y6+uXLl8cLL7ygsuorV66MI0eOoF69euokQbNmzewu17x5cyxevFgtc/3112eZJsF2CdpLmZ8KFSqo+vlyIkBq0MvAuvKeloF17XnjjTdQvXp1dS/Ly+PTp0+rzHs5aSEnDFjPnoiIfFZweyCwPpC2F0icDT18IDS/0m6Vyflp5npVJueHGWvR7eGOHt9kIm+l6ZIaUoCkA7906VLs2rULZ8+exZYtW9TrM2fORN++fdVAVlSwJIsoIiJCPZaDFB5I5I/8VGSAMRkYjVmtxsQ2Mj5fbCNTTH8gbTsQ2Ax+ZebAF/hiO/katpHxFXYbFVR/b/369SoQLfe52bBhA9q3b6/Kwki/31OBewupnR8bG6sC8RLIz8uhQ4dwzTXXoESJEnanm0wmlcUv64yOjlbrddWJEydw/vx59R433HCDqoXvDPbNPYd/C42PbWR8bCPjM1ob6SmboV8cbH4SPhR+kU/ne13xlxIwtO5TuHAqFmGRoZi2711EVy4Hb2O0NqKibydP9PcKrDzOxYsXcf/996tBmKSe5JIlS/DLL79Yp0v9Senc7t+/v6A2gYiIiIiICkG7du1UELxDhw6YOnWqx9dfpUoVNGzY0KmAvZCBcx0F7IUE2CVzv0GDBvkK2IvrrrsOjRo1Utn2zgbsiYiIvF5QayCwsflx4hzoGRc8UyYnLgnvDp2qAqtEVEBBe7mE9vbbb8eCBQvU85CQEFStWjXLPNKZl7MM0rGXDBUiIiIiIvJelSpVwogRI/DXX38V9aYQERFRodS2T4Ke8Llb62t2e0PcNqiDerx79e/4YfrPnthMIq9XIEH7adOmYdu2bejduze2bt2qLgM4duxYlnmGDRuG7du3qwyVKVOmFMRmEBERERFRIdq7d6+qg09ERES+SwtuAQS1MD9JnAc946xb6xv+3kCUrWSujf/Z2Nk49y+Te4kKZCDa+fPnq0GcJk+enOt8UVFReOutt/Diiy/ilVdeYWsQERERERWhnTt3qsFaLST55syZM6qMTG7kUnapDy8lcp5+Ov+1bYmIiMg7aBGPQ4/9FUAK9ISp0Eq84naZnBfvGG8tk/P2qpdYH56KtQIJ2kud+rlz5zo1b/PmzdXAUkREREREVLQkSC/Z8tnZe82eChUqqOQdIiIi8m1aUBPoQW2A1M1A4gLo4UOh+edvnBhLmZyuD3XAqi/XWcvkdBvayaPbTITiHrSXEXKdHSTK398fcXFxBbEZRERERETkAhlU9f3337c+P3r0KFatWoVRo0bl2aeXAV27dOmCyMhI7nMiIqJiQGrb67GbAaRBj/8UWsnX3S6Ts2v17zh/MkaVyWlyW31EVy7nse0lQnEP2kdHR6ta9u3bt89z3s2bN6sOPhERERERFa1rr70WTz75pPX5+vXr1VW0tq8RERERCS2oPvTgDkDKOiDpW3O2fUDlfO+c8JJSJmcYXujGMjlEBTIQbbt27fDII4+ozJzcxMTEqJqXHTqYR4kmIiIyMt2UmOMGPXPART0j5zQiIi9Xo0YNPPHEE0W9GURERGTg2vZm6dATpri9vqZdzWVyhJTJ+X7aGrfXSeSNCiTTXjJxpFZ9nTp10Lt3b3WZ7M0336ym/fHHH2owq02bNmHKlCm4cOEC5s2bVxCbQURE5FH6uVwGYkzflWO6VuEwW4CIvFqlSpXQo0ePot4MIiIiMigtsDb04M5AymogaSn08OHQAq73cJmcBihfhWVyqHgpkEz7pk2b4q233kJKSgrmzJmDAQMGoEmTJmqaBO9vvfVWvPLKKzh79izee+891K1btyA2g4iIiIiICtCxY8cwfvx4vPDCC6rsJRERERXnbHsT9PjJbq9PlcmZNlw9TopPxntDP4Wu626vlwjFPWgvnn32WXzzzTeoUqWK3elVq1bF4sWL8fjjlh82ERGRsWnRe1y6ERH5ArkqVmrdy02uorX45ZdfVPLNiy++qBJ22rZti4kTJxbpthIREVHh0wJvBEJuNz9JXgE9Pfdy2c5oelsDdB18q3q8e80+fPc5y+RQ8VIg5XEs7rvvPvTs2RPbt2/H77//jsuXL6NkyZKoX78+mjVrBn9//wJ53z179uDbb7/FiRMnEBUVpWrm33HHHQgIyN/HPX36NFatWqUG4ZJyPoGBgeqkw2233aauKsjNoEGDkJyc7HC6bN/UqVML9fMQEVH+aH5h3HVEVCyD9qdOncLtt9+O7t27W18fNWoUEhMTERoaioYNG+LPP/9UAfxevXqhWrVqRbrNREREVLi0iMegJ/+YmW3/MbSoD91e5/B3B2DXT3tVmZzPn5YyOfVR4fpoj2wvUbHNtLeQwHKrVq0wfPhwlX0v9y1btiyQgL1cKiMDZclBg1yqe8sttyAiIgIPPvgg2rRpo2rpu0q2VbKKxo4dqz6LDLJbs2ZNLFu2TJ146NatGy5evOhw+UWLFqkrDhzdli5dWqifh4iIiIjIWenp6Vi9erXKoP/+++/Rv39/9fquXbvw22+/qYD9jh07sGXLFhw9ehTVq1fH/PnzuYOJiIiKGS2gOhByp/lJ8g/Q0/4sgDI5U1kmh4oNQ6RqSxZ7165d3V7PuHHj8NFHH/2fvfsAj6La4gD+3/QeSAi996b0ZkNAUEQEfCBIE+mgFAVpFrBQRKQIUqRIEVCR3kRAiii9SO9Fegstvc37zg0bUzZhN9nNzib/3/fN29mZ2ZnZucE3e+bcc9XDgTFjxiQsl4x4CbY3bdoUO3futChDXX6MBAUFqdf8+fMnLB8wYIDqHixBd+lNsGXLljTPq0yZMibXyQ+dzPw+RERERETmkgx7SRqRe9/EJIAv3nnnHVSoUEHN58yZE71798aff/7JC0xERJQNGXzegxaxFkAstJBvYcg51Splchp3aYD1szfj4OYjWDNjI5r2bGSV8yXK1pn25pCuthl18eJFFdj28/PDp59+mmSd1NeUrrz79u3DrFmzLN63/PhIHLAXEij/+uuv1fzWrVvT/HHSoEEDtGnTxuSUuItxZn0fIiIiIiJzXL9+XZW6cXJK+rNh06b4urLGzHsjybRPqxcqERERZV0Gl6KAZ/P4N5GboEUftcp+e3zTEUGFAtX8zEELcOPiLavslyjbBu2jo6Nx5MgRFdSWG/vUJmv44YcfEBUVpTL2vbxS1hyWbHgxY8YMi/a7YMECdOnSxeQ6+VEimUfiwIEDsCZbfR8iIiIiInMFBAQgODg4ybIrV65gx44dyJMnD2rXrp1k3cOHD9UYTERERJQ9Gbx7JxT2kGx7a/D288IHM3upeZbJoezCJnVVpBb7559/jgkTJqjBZzPD+vXr1WvVqlVNrjcOGCuDusrAsskz51MjJXDSEhcXp169vb3hCN+HiIiIiMhchQsXVj1A9+zZo8ZzEl9++aW6B27RogUMBkOS7aV0I+9LiYiIsi+DSyFoni2B8J+AyK3Qog7B4FY5w/ut3qgSXu3aAOtmsUwOZQ82CdpPnDhR1WM3kpv55F1qE4uNjc3Q8eRHw9Gj8V1uihQpkuoPDiPJ/rfGj4lLly4hLCxMfT+pMZ+a+/fvq4z4EydOqEylwMBA9aOnefPmJmva2+v7EBEREREl5uHhgbfeegsNGzbEa6+9ppJFpBet6N69e4o693LPO3nyZF5EIiKibMzg0wta+FKpwRFf2z5gjlX2231cR+zdcAi3L99VZXJqvFIZeYvmtsq+ibJFeRy5WS9atCiWL1+O27dvq6B8TExMqlNGSd3M8PBwNS8BcVOkxIwxQC4/Nqxh4cKF6rVly5YoVapUqtvJAF2SEV+sWDHUr19flQ2SkjvyfsOGDbr5PkREREREyX322WeqJOSiRYsSAvYffPABqlSpoublPlfu/Zs0aaLKOzZt2pQXkYiIKBszOOcDvFrHv4naAS1qn03K5HzTdVpCBQyirMYmmfYXLlzA5s2b8dxzz5m1vb+/f4aOFxISkjDv7u6e6nayToLhjx49QkbduHED48aNQ+7cuTFlypRUt5s3bx5eeOEFBAUFJSzr1KmTmuT6vP7669i+fTtq1aqVKd+nevXqJns9GDP7Ke2yT8aJ9IltpH9sI8fAdtI/tlH2bqOKFSumWGbLH6wSkJd7xcWLF6t7YLlvlQC9kQT0pQepyJs3r6p1T0RERNmbwbsHtLAlMiIttJBJMAQssMp+E5fJOfTHUaydsRFNe71slX0TZfmgvZ+fH6pVq2b29lI+JiOcnZ3N+sFiLMPj4pKxry29AyToHhERgZUrV6rAfWr+97//pRo879atmwr4Dxo0CNu2bcuU7yOfMfXj8e7du2bvI7uS6yaDq4nk9VtJH9hG+sc2cgxsJ/1jG2XvNjJVWtLWWWY5c+ZE794ysFxKJUuWVOUxiYiIiIwMznmgeb0FhM0FonZDi9wJg3sdq5XJ2ff7P7j17x18P2gBqr9SGfmKMWmAshabBO0ls/z06dOoVKmSWdv/+OOPaN++fYYeEhgZy8qYIkH25Nunh9Tv/OOPP7Bs2TI8//zz6d7Pyy+/rIL2O3bsUA8ucuTIYfPvc+DAAasPmptdGB92SMkiBu31iW2kf2wjx8B20j+2UfZuIxknKbnQ0FD4+vrC3i5fvoy///4brVs/7hJPRERE2TvbPvxnQAtX2fZwq22V+6L4Mjk9MeTlLxERGonxXafhq42fpjmeJpGjsUnQXgah7devH3766ac0s9CNOnTokOGgvZSfkfr5N2/eNLmNDAArteRFiRIl0n0s+V5Sy37p0qVqMK6MKFCgQEJm1JUrV5IE7W31feQ/jgw4p5/x+vEa6hfbSP/YRo6B7aR/bCP9y8w20su9yblz5zBt2jQG7YmIiAgG50BoXu2B0JlA9AFV3x7u6U9+Taxaw0po0u0lrJ25CYe2HMOa6Rvxem+WyaGswyZB+6eeegqjRo1C5cqVVSa6ZNxLQNqWT7yqVq2qBnU9e/asyfVnzpxRr66uribrgJpjwIABmD59ulUC9sIYdDdVuz4zvg8RERERkdGDBw9UIkmFChUSlkkSSeIyjk9y7NgxXlAiIiJKYPDuAi1sEaCFQguZCLg9Z7Vkg25fd8DeDYdUmZyZgxegRmOWyaGswyZBe+me++GHH+L69ev45Zdf1GRrLVq0UEFu6Y5ryl9//aVeGzZsmK6uw4MHD8Z3332nSuIkHnhLzJ49W/2gGTJkSJLlY8eOVaVo3n33XZP7PHXqlHqVbYoUKZKp34eIiIiIKPH4RhKsl16ew4cPVz1njUH4Vq1aWXSh6tatywtLREREisEpAJrX20DoVCD6CBC5FfCoZ5WrI2VyBszqhcGNvlBlcr7pMg1jN7FMDmUNNkl9/+yzz1SddiFlXsqWLat+BKQ2WYOU2MmXLx+2b9+OixcvpqgpumBB/CjV8jAhucjISHzyySf4+OOP1Xxyw4YNw6RJk7B8+fIUAXuxd+9ebN26NcVyORf5nKnBwoy1/IXU/HRzc7Pa9yEiIiIisjRof+vWrSQ9Oo1cXFxUbX5zpoyOHUVERERZj8H7HcAQn3Aqte2NY/9YQ9WXnkaT7g3V/D9bj2H1tN+ttm+iLJdpL+VjatWqpQLLpUqVeuL21ugW4+XlpTLemzZtis6dO2P16tUJA66OHDkShw4dQu/evfHiiy+m+Oy8efPw5ZdfJtSZ79WrV8K6Tz/9FKNHj1bfQ7aTKbl9+/ahZMmSJs9LfvT07dsX48aNg6enZ0INe9nn77//rurRjxkzxqrfh4iIiIjIEqVLl8aqVavUPWbPnj2TrHv22WdNJqiYItsZs/SJiIiIhMHJH/DuHD8YbcxxIPJ3wMN69ee7S5mc3w6qMjmzhvyImo2rIF/xPLz45NBsErS/evUqVq5caVbAXkiA3xoaN26MNWvWqKB78eLFUbt2bZw/fx4XLlxQPx4kk96UggULJswnLlMj2UZffPFFQvA9edZRYqaC9l26dFEBegm+//zzz6q2v5SyOXjwIG7cuIFOnTqpYL5kJVnz+xARERERWUrGbLLGuE1EREREKagSOfMA7T60kMmAe0MYDNYpAOLl65m0TE5Xlskhx2fQrNkn5bH8+fOr4LKHhwfsQb7S/v371UBa/v7+qFGjBnx8fNL8zJ49e1TGv2xrFBERgRUrVph1TCllk1r9zrCwMHU95GGGzEvJoCpVqiRkztvi+yQfY8C4fUhIiNnHpZTtIF3H5SGLtQZNIetiG+kf28gxsJ30j22kf5ndRra634uJiVH3xObee1q6fXbEe3Pr4X8L9Y9tpH9sI/3LSm2khcyAFvKNmjf4T4DBM2UJ6oyY2PN7rP1+o5p/b3IXNHv3FWSGrNRGWZmWie1kjfs9m2TaS933Xbt2mV26RTLGjeVprEEufPXq1dVkrpo1a6ZYJg8d2rRpk+HzkVI3FStWVFNmfR8iIiIiooySevaWBOAfPHiA06dPo06dOrz4RERElJRXeyDsByAuOD7b3uMVGAzOVi2Ts2/DIdy8dBuzBrNMDjk2mwxEKwH44cOHq+xwc0iNdiIiIiIicmxHjhzB0KFD7X0aREREpEMGJ28YvLvFv4k9D0Ssser+pUzOB7Pix6mMCIvEuC5TVdlqIkdkk0x7GWRVysVIGZennnpK1XLPkSMHnJxs8oyAiIiIiIgyQEo4/vvvvxm+htbYBxEREWVhXm2B0DlA3G1oIVMAjyYwGKwXnqza4Cm81qMh1szYiMPbjmPV1A1o/l5jq+2fyKGD9pMmTUqYP3z4sJqIiIiIiEifZHynevXqWWVfqY3zRERERGQweALePaA9+hKIvQSErwC8Wlr1wnQb2wF7f4svkzN7yELUbFwF+Uvk5cUnh2KToL1o1qyZ2duuXLnSVqdBREREREREREREeuHVGgidBcTdgBbyHeD5OgwGN+vt3tcTA2b3wqCXPk8okzPujxGsAEIOxWZB+xUrVpi9LUdWJiIiIiKyLxk8dtmyZSmWh4eHo1OnTmpQ2nfeeUeVvgwICICzszOioqJw7do1bNmyBRMnTkSPHj3Qv39/u5w/EREROQaDwR3w6QXt4XAg7ioQvgzwamPVY1Sp/xSa9myE1dN/x5HtJ7Dquw1o3odlciibB+0rVKhg0fZNmjSxxWkQEREREZGZ3NzckDdvyq7j/fr1wwsvvIAvvvjC5OcKFy6M2rVrq8D+c889h7Zt26qgPhEREVGqPP8HhHyvgvZayFTAs0V8MN+Kuo1tj72/HcSNi7cxe+hC1HyVZXLIcdhkZNijR49atP2aNdYdLZqIiIiIiMxXtWpVTJ061WSWvZSyHDFixBP3kS9fPpVl/+OPP/LSExERUZqkHI7Bp3f8m7gbQNjPVr9inj5SJif+GMYyOXFxcWwZyr5Be0s1b97c3qdARERERJRt+fn5oXz58imWnzlzBvnz51elcMxRpkwZHDt2zAZnSERERFmOZ3PAubCa1UJnQNMirH6IyvUqommvl9W8sUwOkSPQRdCeA9ESEREREelPaGgorly5Yvb2ly5dUtn5RERERE9iMLjC4PNe/Ju420DYIptctG5ftUPeokFqXsrkXDt3g41DWbumvdyUr169Gq+++iqKFy+esJyDTxEREREROb6iRYvi8uXLmD17Nrp06ZLmtg8ePMD48ePx4osvZtr5ERERkYPzaAqETANiL0AL/R7wbA2Dk7dNyuR82OCzhDI54/4YAScnXeQyE1k/aF+/fn2cP38e33zzDS5cuJCwfNKkSRnZLRERERER6YDUqa9bty66d++OPXv2qMFmK1euDE9Pz4RtJKj/22+/YcyYMeq3wfTp0+16zkREROQ4DAZnwKcPtAcfAHHBQNhCwKe7zcrkrJ62QZXJWTnlN7To+6rVj0Oki6B9YGCgujGX1+SaNWtm9n5YHoeIiIiISJ++++47PPvss/j+++/VZDAY4O/vDxcXF4SEhCAi4r/6sz169FBBfiIiIiKzebwKhE4HYk5DC50FeLWFwcnHJmVy9v52EDcu3FJlcmq+WgUFSuZjQ1HWC9r/8ccf2LVrF2rVqpVi3YoVK8zej9z4ExERERGR/lSoUAHbt29H+/btceTIEWiahvv37yfZxs3NDUOHDsWnn35qt/MkIiIix2QwOMVn29/vA2j3gbB5gM+7Vj+OlMkZOLs3BtYfgcjwKHzTZRrGbWGZHMqCQXsfHx+89NJLJm/sLWHp9kRERERElHmefvpp/PPPP9i4cSM2bdqkSmNGRkaqHrfVqlVDq1atkCdPHjYJERERpY97Q8ClHBBzAlroHMCrAwxOfla/mpVerIDXe7+MVVM34MifJ7Bi8nq80a+J1Y9DZNegfWqOHj1q1nZyo+/u7m729kREREREZB/SO7ZRo0ZqIiIiIrJ+tn0/aPd7AtojaKE/wODbzyYXueuYdtizPr5Mzpxhi1Dz1aooWIplckhfbDJM8rhx48zazs/PD//73/8QHBxsi9MgIiIiIiIiIiIiR+BeD3B9Kn4+bC60uHs2OYyxTI6IL5MzFXFxcTY5FpGugvYffvihWdu1bNkSmzdvxrBhw2xxGkREREREREREROQgvfoMPo+z67XQ+EFpbUTK5DR79xU1f3THSaz4dr3NjkWkm6C9uRYuXKgGs123bp09T4OIiIiIiIiIiIjsze15wLVq/HzYj9Bi79rsUF3GtEO+4vFj8sz5aBGunLlus2MROVTQXpQpUwY3btyw92kQERERERERERGRbrLtw6GFfm+zY3l6e2DArF4JZXLGdf4OsbGxNjseUaYPRLtr1y6zliUXGhqKX3/9FTly5LDGaRAREREREREREZEjc6sNuNYEovcAYYugeXeGwTk+I95WZXJWfvcbjv11Cisn/4Y3+jexybGIMj1oX6dOHbOWpeatt96yxmkQERERERERERGRg2fbw7cftOB2kgOvsu0Nfp/YtEzOnvUHcf38TVUmp2aTqihYKp/NjkeUaUH79PLy8kKjRo0wceJEe54GERERERHp1JEjR7Bx40YEBwcjf/78aNq0KQoVKpShfYaFheH333/H0aNHERERgQIFCqBx48YoWrSoRfuJjIzEiBEjEB0djTZt2qB69eoZOi8iIiKKZ3CrAc3tWSDqLyDsJ2jeXWFwzme7Mjmze2FgvREJZXK+2foZnJ2d2Rzk2DXtw8PDk0ymliWf5OZYyuMsX74cuXPntsZpEBERERFRFiGB9Xbt2qFKlSrYt28f3NzcsGLFChQrVgzDhw9P934XL16MIkWKoE+fPnjw4AHc3d2xZMkSlChRAu+//z7i4uLM3tfo0aMxZswYfPPNN+oBABEREVlPQm17REMLmWbTS1upbgU0f6+xmpcyOSu+XW/T4xFlSqa9h4eHWcuIiIiIiIjM0bFjRyxduhTz5s1T80b9+vXD559/roL4H330kUUX86effkLbtm1RsWJF7NixA/7+/mr5J598gmHDhqkgvAxA9+233z5xX6dOnVLbExERkW0Y3CpDc68LRG4Dwn+F5t0dBpeCNrvcnUe3xZ71B3DtXHyZnFpSJqd0fpsdj8jmmfbJSfdQIiIiIiLKOiQDfe3atejbty8aNGiArl27quVnz57FmjVroGma1Y4lx5GAfe3atZME7MWoUaNUsF0C9xcuXDB7n9LTVwL+ifeRmJS5kR7AU6ZMwf79+5+4vx49eqBkyZKqZA8RERHZOts+BlroVJte5vgyOb3VfFRENL7uPFU9zE8sPDTC5BQRGmlyOZGuatq7uNi1VD4REREREVnRoUOHVKma48ePJyyrW7euer1y5YqqM1+zZk389ttvyJkzZ4aPN3nyZPX65ptvpljn7e2N1157DQsXLsTMmTNVAN4c27dvx61bt+Dk5KQeOiQnmfuyXMrnfP/995gxY0aq+5ozZw62bduGrVu34u2337bouxEREZH5DK4Vobm/BERuAsKXQ/PuAYNLEZtdwqdfKI/mfRpjxeT1OP73KSyftA4tP2iasP513w4W7W9j3BIbnCVlBzbJtCciIiIioqzhzJkzqF+/fkLAXrLRpa68UdWqVVXgXDLumzRpkuHjyfhXf/zxh5qXBwGm1KpVS72uXr3a7P3K+YkcOXLAy8vL5DaFCxdWrzJIbWpu376NDz/8EB06dEh4cEFERES2Y/Dp+3guFlrIFJtf6s6j2iJ/iTxq/oePF+Pyqas2PyZRcgzaExERERFRqgYNGqQGhZXyMf/++y9u3rypMs2N/Pz8MHToUPz99984duxYQsA9vWQfxnKbRYsWNbmNcfnJkycRFRVl8UOB1MTExKjXS5cuITQ01OQ2H3zwgSoVNG7cOIuOS0REROljcC0LeMQPEouI1dBiztm8TM7AOe/CYDCoMjnjEpXJWfVoQYqp4nNl1Tp5Tb6OKL0YtCciIiIiIpMkcL1u3Tr88ssvGD58OAoVKpTqlSpTpgz69Omj6ttnxOXLlxPmc+XKZXKboKCghCD7tWvXzNpviRIlEoL2d+/eNbmNPJQQUp/f1DabN2/Gjz/+iJEjR6oeB0RERJQ5DD595H9llB1oIfFl9GzpqefLqTI54vjO01g2cV1CQD/55OQcH16V1+TriNKLxeeJiIiIiCjV0jgSqH/99dfNukI1atTAggUZyyp79OiRepXsNnd3d5PbeHp6ptj+SV544QUEBgaqYPyyZcvQrVu3FA8oJCifWka+DGTbs2dPVK9eXb1ag+xLauwnd/ToUavsP6uThyvGifSJbaR/bCP9Yxs95lwC8GgCRKwBItYjLqonDK5lbHrtO33ZBrvX7se1czcx95PFqNWkKgqVMTEAvfH/hrT49qLs9W+pYsWKKZZJr8yMYtCeiIiIiIhMkrI4xqx2c0gAOrWyMuaSYL1I6wdV4h9Cxu2fRAL9X331Fbp27apq8Mtgtvny5Us41ieffIL79+8nGfA2sS+++ALnz5/H7t27TQba00O62pv6nqn1BKCk5No9fPjQor8DylxsI/1jG+kf2+g/Tlp7+GMdDIhD1L3xCHE2bzD6jOg2oR0+bzZBlckZ0/FbjFg9ICGz3ig6Jjrhlf8fnv3+LcU+Lp2UGIP2RERERERkM3ny5MGRI0fw4MED+Pv7P3H7rVu3In9+ExloFvD19U2Yj4yMNJltL1nvprZ/ki5duqgfVkOGDEH58uXRtGlTVZP/r7/+Upn1M2bMUBn48kMuICAgSZ39r7/+OiHT3loOHDiQ4uEAmc/4wEN6UDBor09sI/1jG+kf2yixQGgPmgMRy+CmbUWA300YXMvb9Po/2yRQlclZ/u06nNl3Htt+3IWWHzRNso2ri2vCq/x/EmWvf0snTpxIsUySWCy5RzWFmfZERERERJRqHXgJXrdp0waLFy9Gjhw5Ur1SO3fuxLRp0zBr1qwMXc3Eg8/eunXLZB19WS7c3NxQoEABi/bfvXt3tGvXTj1guHDhAlxcXNC6dWs888wzKngvihcvDi8vr4QfeD169FDXQWrZW5P8YGSw2TrXkNdRv9hG+sc20j+2USI+vaFFrJKRbYDQb2HIOcPm17/zqLbYve4Arp29gbmf/ITar1VDoTKJ7j+M8V8De37pnSGT7hussX9dBO1btmyJX3/91d6nQUREREREyQwYMAD9+/dXgWwJ3ktt+Hv37qkMon379uHixYtYv3495s+frwLscm+fEeXKlYOHh4fKppdyNKaC9rJcVKhQQQXdLSXZ7U2aNEmx/PTp0+pVvqPRoUOHVDC/Zs2a+PLLL1N8Rq6F+PnnnxNq0T/33HNo3ry5xedFREREaTO4FIbm+QYQ/gsQuQVa1D8wuFWy6WXz8HLHh3N644O6w1WZnHGdp2L89s/h7OzM5iKb0UXQfunSpfY+BSIiIiIiMqFPnz74888/1T27ZNLLlHjgWSPpArxkyRKV/Z4RUg7n5ZdfxsqVK1X9+Lp165rM6hfNmjWzaN8rVqxQWfqSbW/Kli1b1GvHjh0Tlkm5HymNkxrjD3YpH5Q3b141n9Hu0ERERJQ6g2Tbhy+XKvLQQr6FIWC2zS9XxefKoUXfV7Fs0loc33kayyasRauBr7OZyPGC9jJoldy079mzRw3CEBMTY6tDERERERGRjcigq7/88gvGjh2rJmNmeWINGjTAd999hzJlyljlmJLZL0F7KckzaNCgJOukvv66detU+RpTwffg4GBMnz4dlStXxquvvppk3aZNm1QPX6ltnzw77sqVK1i2bJl6YPDiiy8mqes/cODAVM91ypQp6pq88sor6NSpUwa+NREREZnD4JwfmtebQNhCIOpPaFH7YXCrZvOL987It1SZnKtnruOHT35CrdeqoXBZy8r0Edk1aH/16lWVEXPu3Dlb7J6IiIiIiDI5cC+Dt0owXbLcz5w5o8rXBAUFoU6dOknq0FuDBM0lsD579mxMnDhRHddYX75v376qNM/kyZORL1++FJ+VAPsPP/ygzlnK3Uhd/sRu3rypHj4MHTo0yTIp6yNZ9XPmzLHqdyEiIiLrM3j3gBa2BEAUtJBJMATMt/llljI5A6VMzgufIjpSyuR8hwl/fmHz41L2ZJOgvdwAS8BeBmuSLrPSTVTqUqZmxgzbDxpBREREREQZI/f09erVU5OtSRkeHx8fFYRfs2aNyuL/+++/VSBeAvbvvfdequcoJJM+eakeOe8NGzZg2LBhqg7/008/rQL2GzduRKNGjVT5HGOJm7TIdjt27Ei1pr3Uvk/r9w8RERFljME5LzSvtkDYXCBqF7TI3TC417L5Za34bFm80e9VLJ24Fid2ncHodt/i0rHLap28bpy/DXXfrAM3j4yVCyQyaJKuYmVyo1u/fn3MnTvXrJqWMqKuDU6DHpNMJPnBI0JCQtTAW2Q5+RuVUk+BgYE2H2Wa0odtpH9sI8fAdtI/tpH+ZXYb6eV+TxJ3fv/9d/Tq1ctq+7x27ZqqNS9lbyQTvmHDhvDz80uzTKeU1XnqqafU4LGmHDhwACdPnlT7zJ07N55//nmTWfup2bx5Mw4ePJjmOABSm1/PbZUV8L+F+sc20j+2kf6xjdK4NrF3oN2uDyACcK0GQ8CiTLnvigiLxNul+iD4esqSgcI/ly8GzO6NOk2r2/xcSJ//lqxxv2eTTHu5+ZXsEnMHoRo8eLAtToOIiIiIiDLR5cuXVca5NYP2Eqhv166d2dtLrXsprZOWqlWrqim9pIa/TERERGQ/Budc0LzbA6GzgOj9QNTfgPuzNj/uwc1HcO/m/VTXP7jzCCNajMWI5YMYuKd0s0nQXgZrkptrc40ZM8YWp0FERERERGaQMamWL1+e4Wslte6JiIiIMovBuyu0sMWAFgotZCLg9oxNs6ijIqLwTZep0OLSrhgSF6ep7Rb9O52lckg/QfsmTZpg69ateOWVV8za/uOPP1aZ+URERERElPkk2C4lXayhbt26VtkPERER0ZMYnAKgeXUEQqcB0f8AkVsBD9uNvbPtl50qk94cst22JTvRsAPvjUgnQfvPP/8czZs3h7+/P+rUqfPE7UeOHMmgPRERERGRHUlZmWLFimW4ficRERFRZjJ4vwMtbAGghUAL+RZwf9Fm2fY7V++1bPtVexm0J/0E7UeNGoXChQvjmWeeQYUKFVClShXkzJkTTk5OtjgcERERERFlUI0aNVRv2YyQz48YMYJtQURERJnG4JQDkMB9yGQg5hgQuQnwaGiTY4XcD7Pp9kQ2DdpPmjQpYf7YsWNqIiIiIiIifZJsNGdnZ93sh4iIiMgiXp2A0PmA9uBxtn0DGAzWTx72yeFl0+2JbBq0F82aNTN725UrV1rtuDExMZg9ezZ+/fVXXL58GTly5EC9evXQt29f5MuXz+L9hYSEYOPGjVi/fj2OHj2KO3fuwNXVVXUdfvnll/HOO+/Ax8fH6p8V0kshrS7GQUFB2LvXsm45RERERESm6tBv3rxZN/shIiIisoTByRfw7gwtZAIQcwqI+A3wfNXqF7FO0xr4c+lu87d/vYbVz4GyB5sF7VesWGH2ttaqMyVBcgmGHzhwAGPHjkWDBg1w/vx5DBgwALNmzcK6detUt19LFChQAA8fPkStWrUwaNAglClTRgXfFy9erB4EjBs3Tu1XAuzW/Ky4dOlSmkH7iIgIi74LEREREZG1RUVFwc3NjReWiIiI7EsNSDsX0O7Fl8rxeBkGg3V7ANZ9sw5mDJxn1mC0/rl8UbfVk8f6JMq0oH1qQejUNGnSxCrH7dq1K/7++2/88MMP6NSpk1pWvnx5PP300yhXrhxef/11nDx5Ug2Qa67IyEhUrFhR1ef08PBIkkUkWfxfffWV2u/x48fh7u5utc8aLVmyBNWrVze5jl2PiYiIiMjW/vjjD5UQI+S+2jhvJPffPXr0wJAhQ1RPUiIiIiJ7MDh5Az7doT36Cog9B0SsBTxft+ox3DzcMGB2b4xoMRZxcVqa2z7TrKbanig9bDIyrJSCscSaNWsyfEwpE/Pzzz+r7PaOHTsmWSeD4rZt2xY3btxQ2e2W6tKlS5Kgu9HAgQPVq2Tz//7771b/rMibNy+KFi1qcipUqJDF34WIiIiIyBLz58/Hhg0bsHv3bpMZ9bly5VK9Szt37sxBaImIiMi+vNoCTrnUrBYyBZoWY/VD1GlaHSOWD1KZ9KYYnOIrimxasA1nD16w+vEpe7BJ0D41YWG2GzF53rx56lXK4zg5OaWazS8/OjQt7SdhiZ06dUplDpkiP1By5syp5k+fPm3VzxIRERER6cHatWvx6quvqtKNX375ZYr10rP06tWr+Prrr9X6gwcP2uU8iYiIiAwGTxi8H8fiYi8C4atsclEkcL/o3+kYNO+9hOC9vMr7rzd9CidnJ0RHxWBU24kID2V5a9JZ0F5qzEv3WSnvIlk53t7e6lXey019WvXaLbVlyxb1WqlSJZPrK1eurF7//fdfnD171uz9FilSBJ6enibXxcXFqe9ozIi35meJiIiIiOxNxmOSLPrZs2fDz88v1e0kaUZ6kr711ltq/CYiIiIiu/FqAzjlUbNaqGTbR9vkMFL6pmGHuihSIb4ShrzK+0ovVkTH4W+qZZdPXcO0/nNtcnzK2mwWtJfs8SpVqmDw4MHYv38/oqPj/4HIq7yXgVmrVatmUQA9NbJPY7Z6wYIFTW4jZXOMA95KDXlrOHz4sDq2BOYbNWpkk8/u3LlT1QatXbs2SpcujTp16qBfv34WlyAiIiIiIrKUZNCXLFnS7CQT6d1qrXttIiIiovQwGNxh8OkV/yb2ChC+NNMvZJuhzfF03fJqfv3szdi2ZGemnwM5NpsMRCsZ5NKF9ty5c/Dx8VEBZ2PWeXh4uOpau2vXLlU+RraTLrSShZ9e9+7dQ0xMfI2q1AaZdXV1VceXEj23b9+GNUjGkejTpw+CgoJs8tmlS5eiV69e6Nmzp/pu+/btU7VCp0yZgpEjR6oBvywhvRxMlQ/iQ4Ank7JKxon0iW2kf2wjx8B20j+2UfZuIylHY6oXpy3IvbPcz5tLsvGN9+VEREREduPZEgj5Hoi7Bi1kGuD5BgyGzBsU1tnZGYPn90HPygPx6F4oJnSfjrI1SyJPEcvih5R92SRo/91336nAvJTAee+990wOxBoREaECz0OHDlXbS+Z9eiUus2NqcCwjd3d39cPDWJYmIw4dOoTp06ercjyff/65TT4rWUrScyBxkL1s2bIqM/+pp55S165YsWJo3bq12ceOjY01+ePx7t27Fn2H7Eium3QPF8ZeG6QvbCP9Yxs5BraT/rGNsncbyf1cZgXt8+fPr5I75LukVR7H6O+//1Y9XImIiIjsSQXofXpDe/gxEHcdCPsF8G6fqeeQu1AufDCrFz773ziEPgjD6PaT8M2Wz+Ds4pyp50GOySZBe8kOHzVqlKprmRoJ5Mt6+YGxbNmyDAXtEz8UMJbhMcW4ztRDBEtIgLtNmzbIly8fVq9erR4G2OKzhQsXNrk8d+7cePfddzF8+HB89tlnFgXtDxw4kKFeDdmZ8WFHYGAgg/Y6xTbSP7aRY2A76R/bKHu30YkTJ0wmsfj6xg+CZk3SW1ZK43Tt2hU//vhjmgky27dvx4QJE/D9999b/TyIiIiILObZAgidAcRehhY6HfBqCYMhYzFBSz3XohZe69EQa2ZsxLG/TmHhl0vRcUR8vXuiTA/aS9mbt99+26xtZTsJ8GdEjhw5EuZTG9xWHg5IaR6RM2fOdB9LMvVfe+013L9/H1u3bkWhQoUy5bPJPfvsswk/2m7evIk8eeIH2HgS+dHILPH0M14/XkP9YhvpH9vIMbCd9I9tpH+Z2Ua2PIYk2vTu3Rt79+5Fx44dUaNGDZWA4uLigkePHql7/3Xr1mHFihUq6aRVq1Y2OxciIiIicxkMroDPu9AeDAHibgFhPwHenTL9Avb45m0c+fMELh2/goVf/ooqDZ7CU8+Xy/TzIMdik6C9lL4xp/uskO1k+4yQWvXyA+Hff//F9evXTW5z69athK7EZcqUSddxJOgvQXcp/bNt2zaL9pORz5oiWVuJv5u5QXsiIiIiIkvI2EqScPLLL7+kWdpRMv2XLFmSZjY+ERERUabyeB0IkWz7C9Ak697zTRicvDL3FLzc8dHi/ni35lBER0arMjkzDo2Db07zxw2i7CfliKRWIJk3u3fvNmtbGZBWts+oOnXqJNSBN8W4XB4SlC8fP3qzJSTo3rRpU5VJJD9aLA3Yp/ezqUlcl98WXaGJiIiIiIxZ/IsXL8aYMWNS7bHaoEEDlYlfvXp1XjQiIiLSDYPBBQafPvFv4u4CYQvtch7FniqC7l93UPO3L99VA9OaGnOSyKZB+7p166oBaKVsS1pkfZ8+ffDiiy9m+JjGuu6SxW7Kli1b1GuLFi0szv6RngDNmzdXpWhkP6VLl06y/qOPPkq1HFB6P9ulSxd1DdMazFYEBQWpWqNERERERLbi5OSEwYMH49q1a9i8eTNmzJiBSZMmYdGiRbhw4QI2bdpklcQUIiIiIqvzaAy4lFSzWuhMaHH/JcJaKjw0IsUUFxun1slr8nWJNXv3FdRuWk3N/7l0N9bP2pyhr0VZm03K4/Tv3x/VqlVD2bJl8c4776ggftGiRVUZG8k6v3jxogqu//DDD3j48KG62c+oZs2aoVKlSiqYvXPnzoTMeyHHnDt3rqq7OWzYMJMPD9q3b6+ecC1cuDBJqZnIyEi88cYbOHbsmMqSL1WqlMnBZU09oMjIZ2WZZCuNHDkS/v7+SdbFxMQkDPAlA9KyvjoRERERZQYPDw/Ur19fTURERESOwGBwBnz6QrvfF9DuA2ELAJ9e6drX677x2fKmHN1xMsX6jXFLEp2HAQNn90b3SgMRfP0epvb/ARWeK4si5Qqm61woa7NJpn2VKlXw1VdfqQFXJ0yYoDLNK1eurLJv5FXey3Lj+qefftoq2T8//fQTAgICVAD+yJEjavm9e/fUgFlXrlzB1KlTU2S6C/mcZAdJ1pAE7RMHx1u2bIn169erAW4bNmyoHj4knxJ/xhqfTVyrXh5GGL+LuHz5shrcS5Y1btzY5EMIIiIiIiJ7OHz4MAYNGsSLT0RERPri3ghwKatmtdDZ0OIe2uU0/HP5YfD8PiqAHxkehVFtJyIqIsou50LZMNNefPjhh2pwWOlGK4OvJlesWDF88803qlyNtUhm/4EDB9QPhZo1a6r69RK0l4cIv/32G15++WWTn3vhhRfg4+Oj/sHUq1cvYfmdO3ewZs0aNS8PGGQyV0Y+K77++mv1HWQfxl4Dco6SmS8POaZPn45u3bqphxVERERERHoQHByMPXv22Ps0iIiIiJIwGJwAn37Q7vcCtIfQQn+AwbefxVdp1aMFKZZJ5Y7gu8EICAwwqxpG1QZPofWgZvjpqxU4/88lzBqyEL0nvsMWoyQMmo1HPZCMc7lxl6ybBw8eqFIvUsZGAtLOzs42O25sbCxu376tjidleZ4kLCxMvXp5eSXZh2S2m0OOkbisTkY+a4pcOzlH6Ung7u4OS0imvwT8jQPYent7W/R5iif/VOShSWBgIEsS6RTbSP/YRo6B7aR/bCP9y+w2ssb9npSvlFKTMt5Sjhw51LLTp09j/PjxZu9Dat5L+UspDUm2ayuKx/8W6h/bSP/YRvrHNrLutdTu/g+IOQoYvGEI2gKDUw673PfFRMfg/ec/wck9Z9X7L9cMRa1Xq2b4XEgf/5ascb9ns0z7hAO4uOCZZ55RU2aSBwJ58+Y1e/vEwfrE+5ASNuk9fno/a4o8fEhe256IiIiIyBrOnTuHBg0aqMST/fv3Y/78+QlBeBl01hIynhURERGR3qhArW8/aPe6SY0cVSbH4DvALufi4uqCoQv7oVfVQQh7FI5x73yH6YfGITBfTrucD+mPzYP25pAa9ytWrLD3aRARERERZUu+vr5qkpKOBQoUSLIuKCjI7IFnZUymuLg4G50lERERUQa5vQC4VgGiD6oBaTXvd2BwCrDLZc1fIi/6fNcVX3WcjPu3H2JspykYvf4jlsIm/QTtV65cae9TICIiIiLKtnLnzo2TJ0/iwoULqFWrVpJ15cuXx08//WTWfqQszogRI2x0lkRERERWyLb36Qvt3juAFgYtZCYMfoPtdllfav8C9v1+CJt//BMHNh7Gr9+sxpsfNrPb+VAWCdrLALOrV6/Gq6++iuLFiycs79+/vzXOjYiIiIiIMomMsZR8nCXJvi9TpozZ+7B0eyIiIqJM5/YM4FoDiN4LhC2E5t0ZBucguzVEnyldcfzv07h+/ibmfLQYlepVRJnqJex2PpQFBqItUaIEzp8/r2q3S1ZOwk7TUczfxuPhZmsc7Mo6OPiL/rGN9I9t5BjYTvrHNtI/RxyINiNiYmLUWFak/7bKSvjfQv1jG+kf20j/2EY2uq5Re6AFt49/49URTn4f2/W+7+SeM+j/3CeIjYlF/pJ5MW3/WHj5eqb7nCibD0QrX1KC9vKaXLNm5nflYHkcIiIiIiL9uXLlCnbt2oWWLVumud2OHTvwv//9D++++64qj+Pk5JRp50hERERkKYNbTWhudYConUDYT9C8u8LgnNduF7JszVLo9EUbzB66ENfO3sCUvrMx6If37HY+ZH8ZCtr/8ccf6iY+ed1LYcnAspmRfURERERERJY5e/YspkyZ8sSgfb58+VCzZk2MGjUKFStWxJtvvslLTURERLpm8OkPLXgngChoIdNh8LfvuDxvfvg6Dmw6jIObj2DjvG2o3qgy6r/1nF3PiewnQykwkub/0ksvqdqViVWoUMGi/Vi6PRERERER6YfUsV+/fj3GjBmDNWvW2Pt0iIiIiJ7I4FYFcHsh/k34EmixV+161aSn4qB578EvMD7OOqnX97h+4aZdz4nsxyb9Vo8ePWrWdpGRkRZtT0RERERE+lWuXDncuHHD3qdBREREZBaDb9/Hc9HQQqba/arlyh+AgXN6q/mwh+EY3W4SYqJj7H1aZAc2GS1q3LhxGDhw4BO38/Pzw2uvvYaZM2ciICDAFqdCRERERERmevToEU6dOpXwXuZl2b59+544sFdwcDDGjx9vcrwrIiIiIj0yuD4Nzb0BELkZCF8GzbsHDC6FU91eiwtLuQwaoIVD08IALWkJcIOTl8XnVKdpdTR79xWs/O43nNh1BvNH/ILOI9tavB9ybDYJ2n/44YdmBe2lNubatWsxbNgwTJ8+3RanQkREREREZtq/fz/q1auXYnmNGjXMvobTpk3j9SYiIiKHYfDpC02C9oiFFjIFhhxjU91Wu1XZ5HKVinxLAvjJ9p33dLrOqfvXHXB4+3FcOPIvfhqzAlVfehqV61VM177IMdmkPI65Fi5cqAazXbdunT1Pg4iIiIiIMihHjhzo27cvunXrxmtJREREDsPgWg5wfyX+TcQqaDHn7H1KcPNww0eL+8Pd0031aPyq42Q8vPvI3qdF2SVobxy0inUviYiIiIjs7/nnn1flcIyTJNc899xzSZaZmsLCwnDv3j1MmjQJzs7O9v4aRERERBYx+PSR/wUQBy3ku9S3y30oxQSXavErXaqlXJcBRcoXQs/xndT8navB+KbrNBXAp+zBKuVxdu3aZday5EJDQ/Hrr7+qrBwiIiIiIrIvCbj7+PgkvPf09EyxjIiIiCirMbiWgubRBIhYA0SshRbdEwbX0im3M1GjXjM8TlgwOKerhn1amnR/Cfs3/oMdy3bj75V7sWb672ja62WrHoOycNC+Tp06Zi1LzVtvvWWN0yAiIiIiIit6+umn8dFHH2Hr1q0q0aZyZdN1XImIiIgcncHnPWgR6x5n20+GIedke58SDAYD3v++B07tOYvbV+5i+oB5qPh8ORSrmPpguZQ12LU8jpeXF5o3b46JEyfa8zSIiIiIiMiEw4cPo1GjRmpw2v79+/MaERERUZZlcCkOeLwe/yZyA7To49ADvwBfDF7QRwXwoyKiMartRESGR9r7tMgRgvbh4eFJJlPLkk8RERGqPM7y5cuRO3dua5wGERERERHZgJubm6pXT0RERJTVs+2B+HI3km2vF5XqVkDbYW+o+YtHL2PGwAX2PiVyhKC9h4dHksnUsuSTu7u7NQ5NREREREQ27BkrKlWqpCYiIiKirMzgUhjwjA+OI3IztOjD0IsOw1uhfJ34Ovurp21QNe4p67JJeZzo6Ghb7JaIiIiIiDJRsWLFVFds6SFrjpCQEJw9e9bm50VERERkKwaf3gBc1bz26FvdXGhnF2cMXdgP3v7xSRXjukzFnat37X1a5EhBexcXy8a3ZU17IiIiIiL9CQoKQuPGjXHmzBncuHHjidvv27cPXbt2zZRzIyIiIrIFg3MBwLNV/Juo7dCiDurmQuctmhv9p3dX84+CQ/BVx8mIjY2192lRVhuI1uj999+39ykQEREREZEJs2fPVhn3b7/9Nu7cucNrRERERFmewaenjOqj5rWQidCTF1s/i5c71VPzh7Ycwy9jV9n7lMgGLEuJN9OKFStssVsiIiIiIspEp0+fxvjx41GrVi389NNPKFGiBGrXro3ChQvD2Tl+kLbErl27xvYhIiIih2dwzgvNqw0QNh+I2gktag8MbjWhF+9++w6O/X0SV05fx9xPf0Ll+hVRrlYpe58W6T1o36JFC1vsloiIiIiIMpEE4WfMmJFk7Krff/89zc/UrVs3E86MiIiIyLYM3j2ghf0CIALao0lAwI9qrB898PTxxLBF/dG3zjDERMdiVNuJmH5gLLz9ve19aqTnoL3w9/c3uVzqLMlAVpqmpbkdERERERHpo659/fr1zdr21q1biIuLs/k5EREREdmawTkImlc7IGw2EL0XiPobcH9WNxe+VNXi6DyqHb7/cD5uXLiFb9+dhSEL+urmwQLpNGh///79VNdFRETg0KFDmD59Ojw8PNQrERERERHpT/ny5VVpHHNs3boVI0aMsPk5EREREWUGg083aOGLAS0MWsgkwO0ZXQXF//d+ExzY9A/2bfgHfyzageqNKqNhR/Z6zApsMhBtgQIF0lwvgXqphTl37lzkzp0bM2fOtMVpEBERERFRBvj6+qJMmTIWZeWzPA4RERFlFQanAMCrQ/yb6ENA1HboiZOTEwbNfQ85csdXMpn83ixcPXvd3qdFeg3aX7lyxext33vvPWbaExERERHpULVq1ZLUtH+SChUq4LPPPrPpORERERFlJoN3F0m5V/NS295Y8lsvcubJgUFz31Xz4SERGNV2EqKjou19WqTHoL0lXF1dcfLkSXufBhERERERZdCpU6fw9ddfW/U6yuC3e/bswW+//YbDhw9b7Yfy7du3VTkf2e+RI0fM3u/Nmzfx559/Yu3aterz8p6IiIiyLoNTDsCrU/ybmKNA5GboTY1XquB//Zuo+dP7zmHuJz/b+5TI0YP2K1euVF05iIiIiIjIsV2/fl0Fs61l2rRpyJ8/P1q3bo3x48ejQYMGKFmypAq0p9eJEyfQqFEjtd+hQ4diwoQJqqRP0aJF8euvv5r8zN27d9W20pMgb9686NWrF7799lt069ZNvX/++eexe/fuDHxTIiIi0jODdyfA4KfmtZBvoWlx0JvOo9uhZJViav6Xr1fiwKbD9j4l0ttAtLt27UpzfVRUFG7cuIG//voL33//PWrUqGGL0yAiIiIiIis5evQo1q9fr0phRkZGmtzm2rVrVrveX375JT755BP07dtXBdYl0Sc0NBTNmzdHkyZNsHz5crz++usW7fPgwYN44YUX1Bhbkr1fpUoVtTwkJARt2rRBq1atMHv2bHTu3DnJ586cOYMxY8aomv3yucS/X5YtW4a2bduq/a5bt049WCAiIqKsxeDkB3h3gRYyAYg5CUT+Dni8Aj1xc3fFsEX90LvaYESEReKrjpMx459xyBEUX++eHItNgvZ16tQxe1sZcVmyVoiIiIiISH+kbEyfPn0wdepUs0rIWGMgWilXM3z4cBQvXhzjxo1L6Jnr7e2NH374QS3v0qULzp07Bz+/+Ky3J4mLi0PHjh1VgP6bb75JCNgLHx8fzJ07F0WKFFHfVTLxCxYsmGIfci7JE47eeOMN9O/fH1999RV69uypAvxERESUBcmAtKE/ANp9lW0P94YwGJyhJ4XKFEDvSe9gfLfpCL5xH+M6T8UXq4ao+Cs5FrvVpfH19cVLL72EDRs2oHHjxvY6DSIiIiIiSsOkSZPw3Xffqft3CcjLPXzu3LnRrl07NUmWee3atVVgXUrFNGzYMMPXc+zYsSrI3r59ezUGVmISTJdj3LlzB7NmzTJ7n5IhL70FjIH25HLlyqWy5MPCwjB9+vQk6wICAtCsWTO8+uqrJvctQX5x9uxZBu2JiIiyKIOTDwze3eLfxJwFItZDj17pXB9134xPqN699gBWTNbneZKdgvbh4eGpTlIe5+HDh9i4caNVbuqJiIiIiMg2JCtdAvUSkJaBVz/66COUK1cOP/74o5oWLlyInTt3qnVyry9lZjIiJiYGq1atUvPPPvusyW2khryxNI25ZBBb4e/vrwL0ppQuXVq9Go+fePmKFStS/ZyUzTGSEj5ERESURXm1A5wC1awWMhmaFgO9kaz6/tN7IE+R+PuTmYMW4Nw/F+19WqSXoL3UiUxtSp4tQ0RERERE+nPhwgXcvHkT8+bNSxKYTi2Q/t577+Gnn37K0DGlvIwk+IhSpUqZ3Ma4XGrUS0a+OYx1+NMq8ePi4pIwWK0kGpnr33//Va/yW8cY+CciIqKsJeEewuud+NfYC9DCfwW02McbxEKLC0s6mVFa0BZ8cnhjyI994eRkQHRUDEa+NVHVuadsHrS/d++eLXZLRERERESZ6MaNGyhZsiTy58+fJHsrNvbxj9NkatWqhUOHDmXomJLRbyTldkwxLpdSNuYOfmv8DvJAQOram3L16tWEbP/bt2+bfc7GzPxOnTrBy8vL7M8RERGRA9HCod2qDISM+2/Zw0+BmP3x8zH71frEk3zGXio+WxbtP22l5i+fvIrp78+127mQTgaizZEjxxO3kRthYyYLERERERHpjwSgk/eSlWzyK1eupJq8c//+/Qwd05hlbzyWKZ6enia3T4vU43dzc1MZ9Nu3b09Rn14y9nft2pXwPrXAfnJyLRYvXow8efLgs88+gyWqV6+eMMhuYsba+5Q2yV40TqRPbCP9YxvpH9tIPzRo6fuMHf9/6q1hb+DA5iM4+ucJrJ25CdUaVcJzb9RCdqTZ6L6hYsWKKZaZ2xM0LTaJmgcHB6Nz584J76X+Y3KFChVCjx498PHHHzN4T0RERESkQ3LPfvLkSVX+pXDhwgnLLl68iH379qmgc2Lz58+Hn59fho4pyT3GjH6ZTHF2dk6Yj46ONmu/Uo++T58+qkb/yJEj1eCxiZOI5NwTZ/m7u7s/cZ/yo69bt26qlv/SpUvVAL2WkB4Lpn443r1716L9ZFdy7YwPbVL7WyH7YhvpH9tI/9hGOqKFI8DCjwTfDQYM9su2Fz0mtceQel8i9EE4vuk6FUElApCroKXfxPFpNrpvMNUDVbdB+7Vr12LlypXqZrpOnfjRipPz8fFRmShysy9BfWbdExERERHpS0BAgArSt2jRAnPmzEGlSpVUmZnixYujWbNm+Pzzz9UyCTJ/99132Lx5M7788ssMHdPb2zvhh5UE5E2Nh2WsTy98fX3N3vfo0aNx69YtLFiwAM8995xKNJKHDDt27FB1+yWoP3nyZLN7D7///vvYsGGDGpC3YcOGsNSBAwcSvi9ZzvjAIzAwkEF7nWIb6R/bSP/YRvqhaWHALcs+ExAYAIPBvqXz5P8nP5jZC1+8OV4F7mf0+xFfbx4OZ2ebDXWarf4tnThxIsWy0NBQi+5RMy1ov3r1ahQpUgRr1qwx2UXAOMCUBPbffvttTJ8+XQ1aRURERERE+tKyZUt89dVXqFy5Mpo3b47ly5erYLUEuLt27ZpkWwmAJ+5xmx4FChRI0oNXys6klokuP7hSq3tvijwAkIx6+e0h3+OPP/5QyUMVKlRQJWmuX7+ugvayzycF7eXhhGw7c+ZMtG3bFumRVm8Csuwa8jrqF9tI/9hG+sc20gnNYHGBHAP08f/1L7SsgybdXlIlcqRUzuJRy9Dhcb377MSQSfcN1ti/TYL2x48fx7hx41IN2BtJdo78AJCsHQbtiYiIiIj0R4LzErAXxvIv7777rsoqmjp1asJ2sm7hwoXIly9fho4nAXT5oSPZUFKWx1TQXpYLyfhPz8CvNWvWVFNyf/31V8KAummR3zDDhw/H7Nmz1eCzRERERHrXc0InHNlxAv+euIofP1+CKg2eUoPVkj7ZpB/EtWvX8MILL5i17euvv66C/EREREREpD+S+d6mTRs11a9fXy2ToLqUwzl37pzKWN+0aZOqc//SSy9l+HiSrW8ssSnlY0zZv3+/em3cuLFF+z58+HCSwWaT27lzp3qV75oaqYk/bNgw/PDDDykC9lIeSHoUExEREemNh5c7hi3qD1c3F8TFaRjdbhJC7ofa+7QoM4P2UrfH3AGopNupuYNHERERERGRfkimu5TMadCgATw9Pa223+7du6tXGfvK1GBfUo5THhx06dIlxXrJ0N++fTuuXr2aYt3333+Pjh07mjxmWFgYfvnlF5QtWxb/+9//TG4zceJEDB48GHPnzjW5H+mBIAPSEhEREelRiUpF0W1sBzV/6987mNhzRkKtd8oGQXvpEmvMUnkSyXSRwayIiIiIiEj/4uLi1GCuUqJGknVsoUOHDqhdu7Ya5HXLli0pAuc3btxQgX1j2Z7EPvnkE9StW1eV2bl9+3aK9ZIJv379+hTfScoAhYSEqIC8qcFvp0yZomr5S41/GVhMHigkn+TzRERERHrWvE9j1GpSVc1v+2UnNvyQ9F6L9MEmNe1ffPFF9O3bV3UPNda9NOXmzZvq5li2JyIiIiIi/dq2bRvGjx+vguiPHj1SyyTbvUyZMmjXrh369+8PHx8fqxzLyclJBcFlDCwppzlgwAB1HKk5P23aNLRu3VoNAmuKsTzNgwcP1MOFoKCghHVFihRR+5ZMejnfp59+Wv0m+fHHH9Xgtr/99pvJevZbt25Vv1vEzz//rCYiIiIiRyT3bwPn9EaPSgMRfOM+vus7BxWeLYNCZQrY+9TI1kF7uQGuVq2a6lr6zjvvqEwXuUGWLrPh4eG4dOmSuvGVOpByw7948WJbnAYREREREVnBoEGD8PXXX6dYLt2pT548qbLbZVBWCXpLcN0aZADaHTt2YOXKlapmvgx8Kz10JTEoraSfUaNGqcFp5feIZNsn9uGHH6Jt27aqhI2ctzwYkCSjIUOGoEmTJvDw8DC5TxcXF/UAwRylS5e28JsSERERZa4cQf4YPL8Phrz8JSLCIjGq7SRM+nsk3NxT9jYk+zBoNipcJFk4khHzJJMmTVJZ+bYg3VO9vb3VEyRrkEslDxmku2x6a3Zm5JzS+1nptmzMejLug9LX/pKBFRgYaLW/KbIutpH+sY0cA9tJ/9hG+pfZbWTL+z3JaDfer1eqVAnVq1dXAXU3NzeVzS6Z7ZKFL/fJRYsWxbFjx1TQnDK/rbIb/rdQ/9hG+sc20j+2kX5ocWHQbqUszZcWQ+5DMDjp975o5uAf8cvXK9X8//o3Qc/xnZBVaZl4f26N+z2b1LQXH3zwgRrISTLsTSlWrBiWLVtm9YC9dG/t1q0bcubMqX5MSLZMw4YNVVfa9Ni9ezc++ugjVK1aVQXq8+bNqy60vL799tsq48eW52Tt70NEREREZC4Z9PWLL75AuXLlcODAARw6dAizZs3CyJEjMXz4cJWoI4PCSo15uWe+ePEi5syZwwtMREREWY/BMz4In2yCS7X49fIa9BdgyPf4A57QYu9Azzp90Rqlq5dQ80snrsXe3w7a+5TI1kF70apVK5w9e1Z1a5Xak2PGjFGvf//9t8rIadGihVWPJz8SqlSpogaWWrdunXqqIcskM15K9KSnDI98TrrYSvfa06dPIywsDA8fPsSXX36pHjrI8eSHii3OyRbfh4iIiIjIXJKgEhwcjDVr1qj70tRIZr3cH3fs2FFl3RMRERFlNZKdLVnzyScYnB9v4Awn5yAYcox+/Ilw4NFH0LQ46JWrmyuGLeoHT5/4EoFjO32Hezfv2/u0yNZBe2P9x2effRY9e/bE4MGD1WudOnXg7Pz4D9qK3nrrLVy/fh0LFixQxxD58uVTA0XlypULnTt3VkFvS7300kuYOXMmChcurN5L94auXbti7NixiIyMVBn39+7ds/o52er7EBERERGZQ5JVZLDW4sWLm7W9DPBqHKSWiIiIKDsyuD8DeLaJfxO1GwjXd9JtgZL50GdKVzV//9YDjO00BXFx+n3QkF3YPGifWdauXYtdu3apwabq1auXZJ2vry86deqEiIgIlTVvCQmOd+jQweQ6ySQSErCXQbeseU62+j5EREREROYKCgqyqOan1AqVMpJERERE2ZnBdxDgVEDNa4++hhZzGXr2UocXUL/tc2p+34Z/sGziWnufUrZn86C9DEQlNS/feOMNlXFvNHfuXJWlbi3GUjH169c3ub5Bgwbq9ddff0V0dLTZ+71y5UpCcD45qW0fEBCg5q9du2bVc7LV9yEiIiIiMlfJkiVx+/ZtdU9sjpUrV+KVV15JUWJHfg8QERERZRcGJx8Y/B/f/2hh0B4O03WZHEnS6Du1G/IWy63ezx66EGcOnLf3aWVrNgvaS/Z569atUbFiRXz88cdYvny5qmVv9M4776hutkePHrXK8YwDs0pmuilyHsbzMmfwWHNIsPz+/fg6T6a6DGfknOzxfYiIiIiIkv+AkwFmpezNpUuXUr04MTExavyq8+fP480330yy7ubNm9i4cSMvLBEREWXDMjlv/VcmJ2wR9MzbzwvDFvWHs4szYqJjMartRISHhNv7tLItF1vsNCoqCo0bN8bu3bvVew8PD1WL/cKFCwnbTJ8+Hd98840q/XL8+HHV9Ta9pEyM8UeEHMeUPHnyqDr6sbGxOHnypKrNmVHbt29XNZ7k3JNnFGXknOz1fYiIiIiIEpP798uXL+PGjRsq6/75559XySNSrlEC+sb7Vhl8Vurf9+7dG59++mmSfaQV7CciIiLKygy+H0KL3A7EXYUW8jXg/gIMLvFjZupRuVql8PZnrTHno0W4cvo6vuv7AwbO6W3v08qWbBK0l0FbJWDfqlUrfPDBB6hRo4YKMCeuh9mjRw+ViS/lX6ZOnYrhw4en+3iS7S71M42DxJri5OSkHh6EhoamOmispeS8xeeffw5PT0+rnZMtv0/16tXVZ5OzVo+HrEzaxDiRPrGN9I9t5BjYTvrHNsrebWTscZmYrQYLk4B74tI2W7ZsUVNqJkyYYHJ53bp1bXJ+RERERHovkwP/UdDuvQ1o4dAeDAMC5sNg0O8wo28Oeh0HNv2DQ1uOYcPcLaj+ciW82Pq/kufkwEH7n376Ce+++y6mTJmS5nY5cuTA6NGjVZfbjATtJcPHyNXVNdXt3NzcVJA7PDzjXTtWrVqFZcuWoVmzZujZs6dVz8mW30cy8039eLx7967Z+8iu5LpJBpmwZEA2yjxsI/1jGzkGtpP+sY2ydxvJ/VxmBe2N9+zVqlVL9+etlTBDRERE5IgM7nWgebYFwhcB0XuAsIWAdwfolSReD57fBz0qf4iHdx9hQo8ZKFurFPIWja93Tw4ctJes7YULF5q1ba1atTLcZTZxlruU5kmNceBbGUA2o4Prvv3223jmmWewaNEiq5+TLb/PgQMHMvz9syvjw47AwEAG7XWKbaR/bCPHwHbSP7ZR9m4jU+MZSSKHlKyxhUqVKmHTpk3p/vzWrVsxYsQIq54TERERkcOVyYnaDsRegRYyDnCvq+syObkKBGLArF4Y3mIswh6GY3S7SRi/7XNV754cOGgvPxqk5rq5T28ePXqUoePlzJkzob67MaPJ1OBYxoz0XLlypftY8oBB6teXKFECa9euhZeXl9XPyZbfR340Mks8/YzXj9dQv9hG+sc2cgxsJ/1jG+lfZraRrY7h7u6eobGnrLUPIiIiIkdmcPIG/KRMTsfHZXKGAgELdF0m55lmNdC018tYPW0Dju88jQWfL0Gnz9vY+7SyDZv8ZeTOnRs7d+40a9sdO3Ygf/78GTqelIkpVaqUmr969arJba5du5aQ8VS+fPl0HUcG4ZKBc2VwWMk2kq7CtjinzPo+RERERERpqVOnDpYsWWL3fRARERE5OoN7bcCrbfyb6L3xZXJ0rse4DihasZCaXzxqGQ5vP27vU8o2bBK0l4GmunfvjrNnz6a5ndRR//DDD1Ug3BrHFIcPHza5/p9//lGv8oCgdOnSFu9fgudynvJAYuPGjUkC9tKzwFRGfEbOydbfh4iIiIiIiIiIiDKPwedDwLmgmpcyOVrMv7q+/O6e7vho8ftw83BFXJyGMe2/xcPgjFVMITsG7fv3768C9hUrVkSHDh2wYMEC7N+/P6EG55YtW/D555+jQoUKOHnypNo+o+Q44vfffzc50Opvv/2mXtu1a2ey+7CUopGSM6lltUvAXrr1yv79/f2TrB8wYADefPNNq55TRr8PERERERERERER6atMjsFvVPybx2VyNC0Oela0QiH0/OZtNX/7yl2M7zbdZKySHCBoX6NGDYwePVoNlPrjjz+iY8eOqF69ekIpl/r162P48OG4efMmxo8fj6eeeirDx3z22WfRtGlTVXM+effbGzduqPMICAjAoEGDTA4sKzX48+bNqwbRTf5ZOV+pxSmD68rAsHfu3EkyRUREWP2cMvJZIiIiIiIiIiIicoQyOT9C717r2QjPNq+h5v9avgdrv99k71PK8mwyEK0YPHgwihUrpoLKEnhOTtZ98803aNGihdWOOW/ePJUR36VLF4SFhaFBgwY4f/48+vbtq54ALVu2zOSgrVLuRkr1iA0bNqgeAkIGepWA/alTp9R7GXw2NS+//LJVzymjnyUiIiIiIiIiIiJ9lsnRIrcDsVeghXwDuL8Ig0th6JVU+fhgZi+c2nsOd64GY/oHc/HU82VRpHx8vXtyoKC9kJIxb7zxBvbs2aNqsz948ECVlqlUqRJq1qwJZ2dnqx4vZ86c2LVrFyZPnozp06fj448/Vsd78cUXsXLlShQtWtTk5/73v/9h8eLFar5169YJyx89eoRbt24hMDDwicdOXjIno+eU0c8SERERERERERGRPsvkwG80tHsdEsrkIGABDAabFEWxCr9AXwye3weDXvockeFRGPnWREzZPRpuHm72PrUsyaDpoAjR/fv3kwzsStYlA+X6+Pio+ZCQEHh7e/MSp4P8U5EeGfIQh+MI6BPbSP/YRo6B7aR/bCP9y+w24v2e42BbWQ//W6h/bCP9YxvpH9tI/+Lutgei9wCuNeEUaFmpm7iHnwFhC9W8wfdjGLw7Qu/mfLQIi0cvV/PN32uMd7/tDEegZeL9uTXu92zy+EYywi0hGeVERERERERERERE2YXBZyDgXFDNa4/GQYtJWWJcbzqOeBPlapdS8yumrMeuNfvtfUpZkk2C9iNHjjR7WxmMloiIiIiIHNfDhw9VWUkiIiIisqxMjsFv9ON3EapMjqbF6foSuri6YOjCfvDy81Tvx3X+DneuBdv7tLIcmxVKGjduHOLi0v4jW7JkCSpUqGCrUyAiIiIiogw4ffo0xo8f/8TtDhw4gDx58qgxrSIjI3nNiYiIiMxkcK8FeLWPfxO9DwhboPtrl69YHvSb1l3NP7jzCGPfnvLEODDpJGj/+eefo169erhw4UKKdffu3UPbtm3VTb3UEiIiIiIiIv25du0aVq1a9cTtSpQogf79++P333/HnDlzMuXciIiIiLJWmZxCal579A20mIvQu/pvPYeGb9dV8wc3H8EvXz/5npF0ELT/559/1OvTTz+NmTNnJixfv349KlasiMWLF6v3HTvqf4AFIiIiIiJKXaFChTBhwgTV2/bPP//kpSIiIqIsSYsLSzFBi328MjblOjMZnLxg8HesMjnivW+7IH/JvGp+7ic/4eSeM/Y+pSzDJkH7L774AsWKFcOWLVswYsQI9O3bF6+99hq6d++OV199VWXsBAUFYfny5Zg3bx78/f1tcRpERERERJSJ5B7/zp07vOZERESUJWm3KqeYEPN4INaY/SnXWcDgVjNRmZz9DlEmx8vXE8MW9YeLqzNiY2Ixut0khD0Kt/dpZQkuttjpxx9/rF6dnJwwYMAA+Pr6okePHgnrmzVrhu+//x65c+dW7+/fv2+L0yAiIiIiIgvcvHkTGzduTHh/4sQJtezHH39M83OapiE4OFjd41eubNkPVCIiIiL6r0yOFrkNiL2syuTAvS4MLkV1fXnKVC+BziPb4vtBC3Dt3E1Mfm8WBs/rY+/Tcng2CdrPnTsXnTp1QlRUFD799FN8/fXX8QdzcVGDEtSuXRu5cuWyxaGJiIiIiCidJEjfoUOHFMtNLUvNZ599xutPREREWZIh96EUyzRoCL4bjIDAABhgyNj+nbwA/9HQgtsnlMlBwEIYDDarcG4V//vgNezfdBj7f/8HmxZsR/VGldGg3fP2Pi2HZpMWf+edd3D48GHUqFEDX331lQrUv/jiizhz5gymT5+OkSNH4vnnn8e5c+fU9rKOiIiIiIjsy93dHQUKFEiYJNHGzc0tyTJTU+HChVViztSpU9GyZUs2IxEREWVJqvZ88sngBRg81Wvydek6hiqT0yFRmZz50DuptjJo7rvIEeSn3n/beyaunbth79NyaDZ7TCMBewnce3p6qkGp/vjjDxQtWhTdunVTyyXrvlKlSpgxYwa2bdtmq9MgIiIiIiIz1alTB1euXEmYlixZkmKZqenSpUvYuXMnevXqxWtNRERElEEGnwGAc2E1rz0aDy3mou6vaUDenBj4w7tqXuraS337mOgYe5+Ww7JZ0F5K49SsWRMHDhxA//79YTD81z3EOEjt559/rtYREREREZH+eHh4IG/evPY+DSIiIqJsRWXq+49+/E7K5AyBpsVC72q9WhUt+r6q5k/uOYt5n/5s71NyWDYL2ktA/q+//kLZsmVNH9jJCR988IEK6hMRERERkf5IyZuffvrJ3qdBRERElO0Y3GoAXh3j30QfcIgyOaLrV+1RvFIRNf/z2JU4+McRe5+SQ7JZ0P6TTz5RJXCepFy5crY6BSIiIiIisrHw8HAEBwfzOhMRERFZmcHng2Rlci7o/hq7ubti2KL+cPd0g6ZpGNNhMh7ceWjv03I4NgnaT5482aLtDx48aIvTICIiIiKiDDp37hwmTpyopl9//TVheVhYGNq3bw9fX18EBgaq2vdnz57l9SYiIiKyepkcKTseCe3BUIcok1OkXEH0ntRZzQdfv4dxXaaqAD7ZOWj/3nvvWbR95cqVbXEaRERERESUQVOnTsX777+vpnnz5iUsHzJkCBYuXIjY2Pgfjrt27UKTJk3U2FZERERElL3L5DTuUh/Pt6yt5net3o9VUzdk2rHDQyNMThGhkSaX69GT69c8wYoVK5K8b968uVmf+/jjj5O8//LLLzN6KkREREREZGXLly9HtWrVMH/+fJQvX14tk3I4M2fOVPPvvvsu2rVrh7///htDhw7FsmXL0KZNG7YDERERkZUYfN6HFrkFiP1XlcmB+4swuBTT9fU1GAx4f0YPnNpzFrf+vYMZA+fj6RfKodhT8fXubel13w4Wbb8xbgmyXNC+RYsWSd6b29VhzJgxCfOSncOgPRERERGRvkhw/sqVK/jjjz9QtGjRhOVr165FREQEatasiSlTpqhlUh7nwoUL2LJlC4P2RERERFYukwP/0dCC2yeUyUHAQhgMzrq+zr45fTD0x74Y8OJwREdGY+RbEzFlzxh4eLnb+9R0L8NB+/TWpI+JiUny5IWIiIiIiPTl8uXLKF26dJKAvdi4caN67dWrV5LldevWxQ8//JCp50hERESUXcrkaFImJ2ze4zI58wDv+LrxelbxuXJo93FLLPh8CS4dv4IZA+ah37TuNj3mqkcLUiwb1ngkju44iYrPlcWo9R8hWwTtk9ekz5s3b4ptbty4YY1DERERERFRJpFEGw8PjyTLpJfshg0b4OLigmbNmiVZ5+Pjw7YhIiIishGD7wfQIrcCsZegPZrwuExOcd1f73Yf/w8HNh/Gsb9OYc2MjajWqBKea1HLZsfz9E56/yqcnJ0SXk2tzxYD0Upde5lu3ryZME9ERERERI6lUKFCOH36NEJDQxOWLV26FLdu3cJzzz2HnDlzJtn+/PnzyJcvnx3OlIiIiCjrMxg8YfAfLXMJZXI0LRZ65+zijKE/9oO3v5d6P77bdNy+ctfep5X9gvbTp09XU/J5IiIiIiJyHLlz50bBggXRpUsXVRJTatn3799frXv77beTbBsVFaXu+wsXLmynsyUiIiLK+gxu1QGvx/dh0QeBsLlwBHmKBOH973uq+UfBIRjT4VvVg5MyMWhPRERERERZw0cffYSff/4ZVatWxWuvvYbr16+jVKlSaN26tVp/9+5dNRitDEp79OhRNGrUyN6nTERERJSlGXzfB5zjxxzSHk2EFnMejqBuqzpo3KWBmj+87Th+GrPC3qekWwzaExERERFRqtq1a6eC8sWKFYOnpydefPFFrF69Ws2LI0eOoE+fPvjnn3/U2Fa1a9fm1SQiIiKyIUctkyN6TeyEQmULqPn5I37B8Z2n7H1KusSgPRERERERpendd99V9erDwsKwZcsWlClTJmFd3bp1ER0draYrV67AYJAfj0RERERkSwa3ag5ZJkcGgR22qB9c3VwQFxuH0e0mIfTBf+MnUTwG7YmIiIiIKN0kSO/i4qImZ2dnXkkiIiIiu5TJmQAt5pxDXPuSlYuh65j2av7GxduY2GsmNE2z92npios1djJx4sR0rSMiIiIiIsfy4MEDHD9+XM3XqVNHDSDGYD0RERGRfcrkwH80tOC2AKKgPRgGBCyCwaD/RIoW/V7Fvo3/YO/6g9j601+o3qgSXu5Uz96nlbWC9u+//3661hERERERkWNYunQpxo0bh927d6tMKCmLs3XrVvz5558YMmQIhg8fjsaNG9v7NImIiIiyFSmTo0mZHCmPYyyT490FjtBb88Mf3kWPSgNw7+YDTOkzGxWeKYOCpfPb+9R0geVxiIiIiIgoVRKg79atG1q2bIldu3al6LqcM2dOnDhxAq+99hrmzZvHK0lERESUyRy1TE7O3P4YNK+Pmo8IjcSodpMQHRVt79PKOkH78PDwDE1ERERERKRP06dPx6xZs+Dv74+OHTvi22+/xaeffpqwvlKlSrh27ZoK7Pfu3RvBwcF2PV8iIiKi7Fgmx+A/WuYel8kZCk2LhSOQsjitBjRV82f2n8cPHy229yllnaC9h4dHhiYiIiIiItKnsWPHolGjRjh//rzKpO/Tpw/q1Utab9Tb21sF96tVq8ZseyIiIiI7lcmBV6f4N9GHgLAfHKYd3hn5FkpVK67ml3yzGvt+/wfZXYaD9gsWLIAe9kFERERERNZ18eJF3Lx5Ez/99BMCAgKeuH2nTp1w7NgxNgMRERGR3crkFFPz2qOJ0GLOOkQ7uLq5Ytii/vDwdlfvx749GfduPUB2luGgffv27aGHfRARERERkXVdv34dTz/9tKpbb44CBQrg6tWrbAYiIiIiOzAYPBy2TE7BUvnw3uT4AXTv3XyAr9/5DnFxcciuOBAtERERERGZ5O7ujnv37pl9da5cuQIvLy+rX035wXb//n2r7zciIiLd+7XVORERERFlhMGtKuD1Tvyb6H+A0DkOc0Ebvf0iXmzzrJrfu/4gVny7HtkVg/ZERERERGRSyZIlVS37tWvXmhXEnj17NipWrGi1q7lnzx68/PLLahyswoULq9r5bdu2xaVLl9K9z0ePHqmBdOW7yeC6RYoUgY+PD958802cPn3aLudEREREZE0G3/7/lckJmeQwZXIMBgP6T+uGvEWD1PtZQ37E2YMXkB0xaE9ERERERCb5+fmhcePGaNmyJUaOHIk7d+6kmmHfqlUr7N69WwW/rWHlypV49tlnERMTgwsXLuDhw4fYuXOnCppXqVIFx48ft3ifUp+/Zs2aGD16NAYNGqQC+A8ePMD27dtx5MgRtd+///47U8+JiIiIyDZlcsYkKpMzBJoW4xAX2tvfG0MX9YeTsxOio2Iwqu1EhIdGILth0J6IiIiIiFI1ZswYuLi44OOPP0aePHlUJv2wYcNUgLp58+aoXLmyylZftmwZevfujQoVKmT4at64cUONeyUPDX799VdVK19IfX0ZFFdK9siDhNhYy2q0vvPOOzh58iSGDh2K7t27w83NTS2vWrUqli9fjsjISPXQITQ0NNPOiYiIiMgWDG5VEpXJOQyE/uAwF7p87dLoOCI+EeTyqWuY1n8ushsG7YmIiIiIKFXly5fH6tWrERQUpErgHDt2TGWX3759W2We//PPP2p5586dMWHCBKtcya+//hohISGq7EzyQXCrV6+O2rVr48SJE1i8eLHZ+zx16hTWr1+fELxPrmzZsiqLXgbSnTVrVqacExEREZEtOWqZHNFmSHNUejE+GWT97M3YtmQnshMG7YmIiIiIKE0vvviiCnpLiZxnnnlGBfB9fX1RvHhxtGvXDlu2bMzb/hYAAHJzSURBVFH17CUjP6M0TcPPP/+s5uvVq2dymwYNGqhXyXA3lzxoEDJQbrFi8T9ek5NeA2LJkiWZck5EREREmVMmx8nhyuQ4Oztj8Pw+8A3wUe8ndJ+Om5duI7tg0J6IiIiIiJ5IssulLM5ff/2FW7duqXru586dw48//qiC+tYiA7pKtrtIrdSOcXla9eeTk9r1QgaQTY0MSCsOHjyoeg/Y+pyIiIiIMr9MzhyHuehBBQMxYFYvNR/6IAyj209CbEz2KEXIoD0REREREemG1Jw3yp8/v8ltjMuljrw8QDBHYGBgwmekdr0pUrdehIWFJdmvrc6JiIiIKDMYfPs5bJmcZ5vXRNOejdT8sb9OYeGXS5EdZLz/KhERERERZUs3b95Ude2l1vvLL79slUFoJeht5O3tbXKbxMtl+9y5cz9xv1LWx1jq5vDhw6hRo0aKbY4cOZIwLz0J8ubNa9Nzklr4Tk4p86iOHj36xM9SfFsaJ9IntpH+sY30j22kf47RRu6A3xjg3luSbg/t/mBoAT/BYHCM0HD3cR1x+M8TuHTsMhZ++Ssq16+Ip54vZ9lOjM2jxbeZtVSsWDHFssQ9NtPLMVqGiIiIiIjsQoLyw4cPTwgyGwdplQFo69evj+DgYPV+0KBBmDZtGrp165ah4xmz4CWYbSqgLdzc3BLmw8PDzdqv1N9v3rw5VqxYgfHjx6cYMPbPP//E3r17k9RRtfU5xcbGmvzRePfuXbM+n93JtZOHK8JgMNj7dMgEtpH+sY30j22kf47TRoXgaXgLntpCIOYIwu5MRoRTRziK3t+9jY9fHoPoyBiMajcRY7Z8BJ8cppMpTImOiU54tea9ltzPJcegPRERERER2dSCBQtUgL5mzZqoUqVKwvLevXurgL0Et0uUKKHqvvfp0wevvPIKChUqlO7jyUCxxh878iMocfDcKHF5m9Qy3035/vvvceHCBTVYbEBAAHr06AE/Pz/s2LEDAwcOVLX5t27dqrb19/e3+TkdOHDAovOnpIwPPKT0kb6DJNkX20j/2Eb6xzbSP0dqI00bDNzdCcSeh1fcbHjlfA0Gl1JwBIHPB6LHuI6Y0mcO7l69h/lDf8XHP79v9jV3dXFNeDWWTbSGEydOpFgWGhoKX1/fDO2XmfZERERERGSSBKh/++03DBkyBKNHj05SvkUGXJXscgly16lTB9euXcOzzz6rAuIffvhhuq9orly5EuYla00GwE3OmM2WfPsnCQoKws6dOzFz5kwsX74cr7/+OlxcXFRZn+nTp6NgwYKqbI4E8hP/mLPVOcmPTL3/uNc74zXkddQvtpH+sY30j22kf47SRgaDBzT/r6AFt1ZlcvBgCBD4i8OUyXm99yvYv/Ewdq7ahz+X7sJvc7bg1a4NzPuwsWkMtu8RYY39cyBaIiIiIiIySQLxEpj//PPPkyxfs2aNem3Xrp0K2BsHYn3vvfdU9nhGJK6Lf+XKFZPbGJfny5fPZAA9LZ6enujbty+2bNmCixcv4uzZs6oEkJTO+ffff9U2VatWTfJjy9bnRERERJRZDG6VAO8u8W9ijgKhsx3m4hsMBgyY1QuB+ePvtab2m4NLJ0zfmzk6x3iMkg6nTp3C5cuXkSNHDjz99NNJakxmhHSJ3bRpk+oi+9xzz6W57Z49e3Dr1i2z9isZPXny5EmyTLKaYmJiUv2Mh4cHXnrpJTPPnIiIiIjI8qB9qVKl4Ooa353YSO6Hxdtvv51kedmyZdU9bEbIPXG5cuVUV2MZMPapp55KsY2U6xH16tWzaN+PHj1SvQfkN4IpxgcOb7zxRqadExEREVFmM/j0hRaxWZXJ0UK+Bdzrw+DqGGVy/HP5YfD8Phjc8AtEhkdhVNuJmLxzFNw8rBP71YssF7T/66+/0LNnTxWwlwwZyZ558OABPvnkE/Tr1y9D3ROuX7+ODh06YPPmzahWrRr27duX5vaffvopNmzYYNa+JbtHuucm1rJlS1UDKTXy4+HGjRtmnj0RERERkWWkTEzisi9CklK2bdumysckT2KRAVjlMxnVvn17fPTRR+peWrL5kzM+GJB7c1PCwsJURn3ye/+hQ4eq8jj79+83mZzz66+/qu8lx7f2ORERERHphcHgDiQqk6M9GOxQZXKq1H8KrQc3x09jluP8P5cwa8hC9J74DrISx2gJM23fvh0NGzZUwXoZYEq6pcrN97Bhw/D++++rAPeYMWPSte/169erTCJLRxcuXLiwyUycxNn48kPomWeeMblelqfWvZbdbomIiIjIlooUKaLKxxw7diyhRMzXX3+teoNKwknyAVklqUXK5GSUlK+ZNm0alixZgs8++wzFihVLUppHMt5l0FgZ9Da5efPmoUuXLihfvjx27dqVMIhs4oz4xN/H6Ntvv1W9dRcuXGjyPjsj50RERESkxzI5mpTJCZ35uEzOLMCnJxzF25+9iUNbjuLk7jNY/u06VGtUCbVerYqsIssE7SMjI9GxY0dER0erG3XjjbaTkxNGjhyJ1atX46uvvlK1KmvXrm3RviVjXvbRo0cPlXnz5Zdfmv3Zxo0bq0GtTAkJCUGBAgXw5ptvpjpYlZzzk8rwEBERERHZggS85f65QYMGaN26tSqXI9noolu3bkm2lQz27777DmPHjs3wcX18fFRP1JdffllNElAvU6aM6lUrdfOlVM3PP/9s8rMywKyUwDly5IgKpEsPWSN5yCDrmjVrhvHjx6symjdv3sT8+fPxww8/qPNv27at1c+JiIiISL9lcv4AYs9BC5n8uExOaTgCF1cXDFvYDz2rfIiwR+EY9853mH5oHALzZY2xhbLMQLSLFi3CpUuXVIC7dOmkf1xyc26st5meTHvJht+4cSOmTp0Kb29vsz8nN+7FixdPdf2PP/6osuzfffddi8+JiIiIiCgzyCC0UVFRKkhtDNh36tQpYQBayVqvXr06nn/+eZWU0rRpU6scV3rPSuBdAuxS1kay2CWoPmTIEJXRnzt3bpOfk4x4qa0vJWwqV66cZN24ceNUUL9mzZoYMWKE2mefPn3UwwnJwO/du7dNzomIiIhIr2VyDP5jHoeIpUzOEGha6uNr6k2+4nnQd2p8Isn92w8xttMUVXUlK8gymfZLly5Vr88++6zJ9fIjwlhrUurEWxJ8l+6uLi6WX6oJEyakuV4eAsiNf61atSzeNxERERFRZpBEFBl8dc6cOarcpNy7Jq7bLj1bJUguU758+VCwYEGrHTtv3ryqHI8l6tevrzLsTZEBdaXngEyZeU5EREREjlMmZybg0wuOokG757Hv90PYtGA7Dmw8jKXj16DVwKTjhjqiLBO037t3r3pNnmVvZFwuZXSOHj1qUaA8PQF7c+rvS5bOrFmznrjtvXv3cO7cOQQHB6vyPFIj380ta42ITERERET6JYF4KRmZWlBfepASERERkQOXyYncAsSchRYyBXBv4DBlckSfKV1x/O9TuHbuJuZ8tAhPv1gBZaqXgCPLEuVxHj16hFu3bqn5PHnymNxGgt2SWSNkMC17k260OXLkwFtvvZXmdgMHDlS1Mnv16qXqg8rAVvI5KakjpXWIiIiIiIiIiIiIMlQmx290sjI50Q5zQb18PTFsUX84uzgjJjoWo9pOVHXuHVmWyLRPHLyWepSp8fDwUAPVPnjwAPZ0/fp1VUtTAu9pna8MYvvaa6+hffv2qi6/kPMfPnw4Ro8eja1bt6qBrySIby6pNypdmJOT3geUNk3TEibSJ7aR/rGNHAPbSf/YRtm7jSpWrJhiWWbV7jxw4ADWrVuHM2fOICIiQtVwr127tio3Y0n5SSIiIiLSY5mcrkDo94/L5MxyqDI5ZWqUxDtfvoVZQ37EtbM3MKXvbAz64T04qiwRtI+J+W+ABFMB6eRlbiTwbU/ff/+9OmfJnk/LkiVLUiyT3gKjRo3Crl27sGXLFgwbNkzVxjdXbGysyR+Pd+/eNXsf2ZVcN+MDIoPBYO/TIRPYRvrHNnIMbCf9Yxtl7zaS+7nMDtrLvWLnzp2xatWqFOumTJmCXLlyqXvSVq1a2fQ8iIiIiMjWZXL+SFQmpz4MrmUc5pK3GtgUBzb9gwObjmDjvG2o3qgy6r/1HBxRlgjaJ87qkZr1qZFsIOHr6wt7kWC9BO0bNGiQav19c7z99tsqaC/1QydNmpRQ+sec7ChmQaWP8WGHlFpi0F6f2Eb6xzZyDGwn/WMbZe82MjXIamhoqM3ucaUUZb169dR4TEYyvpJMYWFh6oHBnTt38Oabb2LBggWqlygREREROR6DwQ3wHwPt7psJZXIQ+AsMBvPijvbm5OSEQfP6oEelAXhw5xEm9foeJaoUxek953Dp2GW1jbxunL8Ndd+sAzcP/Y4ZmiWC9gEBAar0jQTlZdBWU2RdeHh8LaN8+fLBXqQszrVr11RGUkaULVs24UfUpUuXULJkSbM+Jz8aGXBOP+P14zXUL7aR/rGNHAPbSf/YRvqXmW1ky2N88cUXKmD/xhtvoFu3bqhVqxZy5syZkJAi40WtXbsW48aNQ+/evdUYTJJ5T0RERESOx+D6dKIyOcccrkxOYL6cGDjnXXzy+hiEPQxHj6cHIjbmv56qEswf22kKZgychwGze6NO0+rQoywxEK08RSlfvryalwC2Kf/++2/C/FNPPQV7DkBbsGBBvP766xnaj2Q2Je9BQERERERkTZJFP3v2bIwcORJLly5VAXljwN5YflKSSQYMGKB6dMpYSwsXLmQjEBERETl4mRy4xCcIS5kcLfoUHEnt16qhVpOqaj5xwD4xCd6PaDEWO1fvgx5liaC9ePnll9XrwYMHTa7fv3+/eq1QoYIKmtvDsWPHsG3bNnTv3j1hYNnU7N27N0kXZFOD2RqzqgoUKGD1cyUiIiIiOn36tLpvHTx48BMvhvRmHThwoBp7iYiIiIgcu0yOwX8MAOeEMjmaZt8xQi0RFRGFE7vPPHG7uDgN33SZqrbXmywTtH/nnXdUps9vv/1msq79ihUr1GvXrl1Nfv748eNqsnWWvdSel27FT/LZZ5+hb9++qa7fuHGjeq1du3aSbCciIiIiImsJDg5WZRiflHBiVKZMGTVoLRERERE5fpkcSJkcocrkzISj2PbLTjy888isbSXjftuSndCbLBO0L1WqFPr166dq2o8dOzbJun379qnuvJJl36tXyhpMmzdvRsWKFdVkDIZbm9Sel0FjW7Rogbx585r1me3bt+OPP/5IsVwy8GUwW3lIMWaMPPUiIiIiIrI+Gdz26tWrZm9/5coV+Pn5sSmIiIiIsgCDTx/ApZSa10K+gxZ9Eo5g5+q9lm2/yrLtM0OWGIjW6KuvvsKdO3cwfPhw9eOiQYMGOH/+vArilytXDmvWrIG7u3uKz506dQqapiXMN2zYMMn6y5cv459//lHzJ0/G/3E+ePBA7U/kyZMHNWrUSPPc5s+frwL3MjiXOUqUKKFeGzdujE6dOqmMevnRJA8gpk6dqr6H1At94YUXzNofEREREZGlSpcure6vf/75Z7Ru3TrNbWWcpSlTpqBly5a80ERERERZpEwO/MdAu/tmQpkcBC6BweAKPQu5H2bT7TNDlgraS7fduXPnokuXLiqzXn5c+Pv7Y+LEiXjzzTdNBuzF22+/rYL1onPnzinWnzhxAtOnT09436RJE/VqXFazZs0nBu0vXryojlO3bl2zvsukSZPwySefYN26dapsj2Tch4WFISgoSK2TH0MSxCciIiIishW5f5b7zg4dOqh7YinzmHw8pZiYGHWvOmzYMBw9elTdhxMRERFR1mBwfQqadzcgdDoQcxwI/R7weRd65pPDy6bbZwaDZkwxpywrNDQUPj4+aj4kJATe3t72PiWHJP9UpEZrYGCgGgCY9IdtpH9sI8fAdtI/tpH+ZXYb2fJ+T0reVKtWDbdu3VLvJWgvg85KqUbpSXru3DmVZS9GjBiher2Sfdoqu+F/C/WPbaR/bCP9YxvpX3ZoI02Lgnb3DSDmNABXGAKXwuBaFnq1cf42jO00xeztB817Dw07mJdonVn3e1mmpj0REREREVlfwYIFsWnTJjUgrZAylFKycdeuXTh27JgK2Ds5OeHTTz9VExERERFlvTI5Bn8ZV9M5oUyOpkVDr+q+WQf+ucyrUCLb1W1VB3qTpcrjEBERERGR9T311FMqQL948WKsXbsWZ8+eVcF6Kd1Yp04dVWJS6t8TERERUdZkcK0Izbs7EDpN92Vy3DzcMGB2b4xoMRZxcakXmXFyMqjtZHu9YdCeiIiIiIieyM3NTY3RJBMRERERZT8Gn3ehRW5WZXK0kKmAewPdlsmp07Q6RiwfhG+6TMWDO49MZthLwF620yOWxyEiIiIiIqsICwvDv//+y6tJRERElAU5WpmcOk2rY9G/01XNemO5HHmV97JcrwF7waA9ERERERFZxZ49e9CxY0deTSIiIqIsXCYHUiZHqDI5M6Bnbh5uapDZIhUKqffyKu/1WBInMZbHISIiIiLK5uLi4hAVFZXh/VhjH0RERETkiGVyytn7tLIUBu2JiIiIiLK57du3o169elbZV926da2yHyIiIiLSb5kc+I+BdreVpNurMjkI/BUGg6u9Ty3LYHkcIiIiIiIiIiIiIrKwTE6P+DcxJ4DQ6bx6VsRMeyIiIiIiQpUqVTB16tQMXYkDBw7gl19+4dUkIiIiygYMPr0fl8k5BS1k2uMyOeXtfVpZAoP2REREREQEPz8/1K5dO0NXIiIigleSiIiIKNuVyWmZrEyOvgd5dQQsj0NERERElM2VLVsWQ4YM0c1+iIiIiMgxGFwrAN4949/EnIQWwjI51sCgPRERERFRNpc3b1688sorutkPERERETkOg08vwKVM/JvQ6dCij9v7lBweg/ZERERERJQut2/fxvXr13n1iIiIiLIxKYdj8B8DwDmhTI6mRdn7tBwag/ZERERERKSsWrUKBQsWTJhatWqV5pU5duwYihQpgg8++ID17ImIiIiyMZbJsS4G7YmIiIiISNmxYweuXr2qJoPBgDp16qR5Zdzc3BAdHY0JEyagUaNGDNwTERERZWMsk2M9DNoTEREREZGyd+9e9Tp06FCcO3dOZdCn5ZlnnsHBgwfRokUL/Pnnnxg0aBCvJBEREVG2LpPzFQCXx2VyBrNMTjoxaE9ERERERMr+/fvRuXNnjBo1SmXRm6Ny5cpYtmyZCvBPmzYN165d49UkIiIiyqYMruUB7x7xb2JOQQuZZu9TckgM2hMREREREe7fv49Hjx6pLPv0+Oqrr1C4cGEVwCciIiKi7F4mp2z8m9AZ0KKP2/uUHA6D9kREREREhDt37qjBZ0uWLJmuq+Hi4qKy9A8cOMCrSURERITsXiZnDMvkZACD9kREREREhLt376qgfUaULl0aN27c4NUkIiIiyubiy+T0jH/DMjkWY9CeiIiIiIjg7OwMTdMydCW8vb15JYmIiIhIMfj0TFQmZzq06GO8MmZi0J6IiIiIiJA7d25cunQpQ1dCPh8UFMSrSURERETJyuTEQnswBJoWxStjBgbtiYiIiIgIhQoVUpn2u3fvTvfVWLVqFWrUqMGrSUREREQJZXLUwLSCZXLMxqA9ERERERHBYDDgtddew4ABAxAdHW3xFVm7di02btyo9kFERERElMC7B8vkWIhBeyIiIiIiUgYNGoRdu3ahadOmuH79utlXZdGiRWjVqhXatWuHokWL8moSERERUQKWybEcg/ZERERERKSULl0aI0aMwIYNG9R8165dsWLFCly4cAGRkZFqm7i4ONy7d0+V0Rk/fjyqVaumgvV58uRR74mIiIiInlwmZyovUhpkFAAiIiIiIiLl448/xo0bN/Ddd99h9uzZakr48eDigpiYmBRXqnjx4li/fj0CAwN5FYmIiIjINO+eQMQmIOYEEDoDmsdLMLhW5NUygZn2RERERESUxJQpUzB//nwULFgwyfLkAXsnJyd06NBBldSRzHwiIiIiotQYDK4w+I95nEceC+3BEGhaFC+YCcy0JyIiIiKiFCQY37p1a6xZswabNm3CmTNnEBwcDE9PT1UKp06dOmjWrBlKlSrFq0dEREREZjG4lgN8ekML+RaIOQ0t5DsYfN/n1UuGQXsiIiIiIjLJzc0Nb7zxhpqIiIiIiKzCu8fjMjnHgdDvH5fJeYoXNxGWxyEiIiIiIiIiIiKiTC6T48oyOalgpj1ZRXhohEXbe3p78MoTERERERERERFlQwbXso/L5EwCYs5AC5kCg+8H9j4t3WDQnqzidd8OFm2/MW4JrzwREREREREREVF25d0diNj4uEzOTGgeDVkm5zGWxyEiIiIiIiIiIiKiTMUyOaljpj1ZxapHC1IsG9Z4JI7uOImKz5XFqPUf8UoTERERERERERFRApbJMY2Z9mQVUqPeODk7O2HH0t24fPKqWiev8l6WG7chIiIiIiIiIiIiUmVyXCrEXwgpkxN9JNtfFAbtyap2rt6HtoV7YmynKXhw55FaJq/yXpbLeiIiIiIiIiIiIiLBMjkpMWhPViMB+REtxiYE65OT5bKegXsiIiIiIiIiIiIyMriWgcHn3fg3MWeghUzO1heHQXuyiqiIKHzTZSri4rQ0t5P1sp1sT0RERESUluDgYHzxxRd44YUXULFiRTRq1AhTp05FdHR0hi7cmjVr0LFjR1SvXh3lypVDnTp10Lt3b+zdu9emnyUiIiKiNHh3S1Ym53C2vVwM2pNVbPtlZ6oZ9snJdtuW7OSVJyIiIqJUnThxAk8//TRmzZqF9957D4sWLULz5s3x4Ycf4plnnsH9+/ctvnoxMTFo2bIlmjZtinPnzuGzzz7Dzz//jL59++L3339HrVq18Omnn1r9s0RERERkaZmcOGgPhkDTIrPlpXOx9wlQ1rBztWWZRfNH/IJ7N+4jX/E8j6fc8Pb3ttn5EREREZHjiIiIUMHxW7du4Z9//lEZ7UKC+IGBgWjTpg3at2+vst4t8d1332Hp0qUoVqwYNm3aBE9Pz4T9SsZ8+fLlVWZ/gwYNULduXat9loiIiIjML5MDn/eghUwAYs6qMjkG34EWXb7w0IgUy+Ji4xJek6/39PbQXfMwaE9WEXI/zKLtb1y4hZmDf0yyzC/QVwXvJYift1ge5C9hDOjnQa6CAXB2dmZrEREREWUDEiCXbPbWrVsnBOyNZNnHH3+MtWvX4o8//kD9+vXN3u/KlSvVqzwQMAbdjYoWLapK3vz5559YtWpVisB7Rj5LRERERBaWyYnYCMQcBUJnQXNvCINbJbM//rpvh1TXHd1xMsX6jXFLdNc8DNqTVfjk8LLsD8/VGTHRsUmWPbz7SE2n9p4zuX2eohLQz418xfIgX4m8CQF+mbx8k/5wIiIiIiLHNW/ePPX66quvmlzfpEkTTJo0SW1nSdBe0+LHX/L2Nt3D07jcuJ21PktERERE5jMYXAD/MdDutgAQDe3hUCBwOQwG92xzGRm0J6uo07QG/ly62+ztP5jVC7Vfq6Yy7q+du4nr52/ixvmbuHY+fv7Wv3cSuq0ICfBfPXNdTabkCPJD3sdldpIH9XMVCICTE4dvICIiInIEt2/fxpEjR9R8pUqmM6oqV66sXjdv3mzRvuvVq4etW7dix44dKdaFh4fj4MGDCdtZ87NEREREZBmDa+l0l8lZ9WhBimWSWBF8NxgBgQEwGAy6bw4G7ckq6r5ZBzMGzjNrMFr/XL6o26oO3Dzc4JvTB6WqFk+xTUx0DG5fvotr527g+vlbKpB//cJNXD93Uy0LexieZPv7tx+q6eTuMyn25ermgrzFcscH9YvFB/LzPw7qy3JPH2bpExEREenFsWPHEuYLFixochvj8qtXr+LBgwfw9/c3a9+DBg3CX3/9pQaO/eSTT1SZHXd3d9y7dw+9evXCzZs30adPH1UCx5qfJSIiIqLMK5PjaaJGvQTtPSLc1ToG7e1EbpzXrVuHy5cvI0eOHCrbpUyZMlbb97Rp05ArVy507979iduPGjUKUVFRqa738fHBwIED7fZ9rEUC8ANm98aIFmMRF5d6l2AnJ4PaTrZPi4urS0LpG1P/yB7dC4kP5psI6t++fCfJOURHxeDyqWtqMiVHbv+E+vl5kwX1A/LlZJY+ERERUSaSwWeNUgvG+/n5JcnMNzdo7+HhgQ0bNuDXX3/FkCFDMGbMGAQFBeHGjRuoWbOmqkn/3HPPWf2zqZE6+KZ6hB49etSi/WRX8rvAOJE+sY30j22kf2wj/WMb2ZIz4D8auPtGfJmcB0OgpbNMjq3aqWLFiimWxcX9Vz0kvbJcpr0E1AcMGIAKFSqo4Pa+ffvw3nvvoU2bNpgxY0aqNSjNIZk1bdu2xb///otq1aqZHbQPDQ1NdX2ePHnSDNrb8vtYk4y6XLl+RQxb3B/f9p6latMnJwPN9p3aVW2XEfI0zC/AV01lqpdIsT46KlqV1/kvqC8B/ceB/XM3EfYoWZb+rQdqOr7zdIp9uXm4JgTy5dUvjw9KViyO/CXzqvceXtmnlhYRERFRZggLC1OvEsx2cXFJNYBuFBISYva+Y2Nj8dlnn2Hs2LFo3Lgxvv/+e+TLlw9nzpzBF198obLkv/32W3To0MGqn03rfEz9cLx7967Z+8jO5No9fPhQzTtCxlx2xDbSP7aR/rGN9I9tZGuB8HDqDK+4GUDsOYTfHotw5966aSe5n0uOQftk5syZg969e+Ott97CwoULExpg0aJFaNeuHR49eoSVK1dafPHlQo8ePRrDhw83O4snsXfeeQeFCxdONdM+s7+PLaQ1KrORBPK/bD3B5qMyu7q5okDJfGoCKqX8B3r3UXwA/7zU07+haukbg/pSkifxD6eoiGj8e+KqmkwJyJtDld1RmfpSS99YV79EXrWOPx6IiIiILCMlZ4z34DKZykSPjo42GcB/Erm3lmB7w4YNsXz58oTl5cqVw0svvYSyZcuiY8eOiIiIQLdu3az22dQcOHBAN0k4jsh43x4YGMj7bp1iG+kf20j/2Eb6xzbKjGvcFwj+S5XJ8dQWwdPvdRhcK+nivuHEiRMplkkCt6+vb4b2a9CySF9CyUYpUaKEukm+cuWKKl+T2Isvvoht27ap7qz/+9//LNp3y5YtsWnTJowfP1511x06dKjKtJes9yeRoPxvv/1mcVdZa34f+UMxPhyQTCRb/DBo6NTKou1tGbTPiKjIaNy6dDtpUP/Cf/MRoZFm78vd0y0+Sz9JQF8Gyc2DvEWD4O7JLH1rk/+cyb8d/nDTL7aRY2A76R/bSP8yu40y434vs6xfvx6vvvqqmpckFVNJLtu3b0fdunXV/PXr15E3b94n7ldKTRYtWlQ9CPjjjz9MDhg7YcIEfPDBB8ifP7+6Bze2XUY+m5Xbyt7430L9YxvpH9tI/9hG+sc2yqTrHH0G2t3mqkwOnIvDkGulRWVyMrOdrHG/l2XK4/zwww9qEKomTZqkCHALyVaXIPekSZMsDtoXKFBA1ZWUAa+kdqWjfx9bMDUqsyNyc3dFwdL51ZSc/Ei7cOoiIu9H44bKzL+Fa+fjy+/cOH8Lt68k7cYcGR6FS8evqMmUwPw5E4L4iYP6krUvdfaZpU9ERETZUeKxmyQgX6pUqRTbyHIhvWDNCdiLPXv2JHRVNlV7VEhJSnHt2jUVqDf2ls3IZ4mIiIgo4wyupQCfPtBCxgOx56GFfAuD74dZ9tJmmaD96tWr1WutWrVMrq9du3ZCXXrjUxVzSWA8K30fWzA1KnNWI0F0/yA/BJYNRPk6KQcCjoqIwo2Lxix9CeTfxLWE+VuICEuapX/32j01Hd1xMsW+pFZ+XimzI0F8qadvzNKX+aJBTxzIl4iIiMhRFStWTI37dPPmTRw/ftxk0F6WJ74nNkdMTEzCvKenp8ltvLy8TJbgychniYiIiMhKvLsCkRuB6CNA6Gxo7g1hcKucJS9vlgna//PPPwk3+aYYl0uGzJEjR1R5mcwi3S8kK15qHAUHB6sAe82aNVGlShWH/D5kmgTSC5ctoCZTfwMy2O21c/FB/PjBceMHxpV5Cd4nJgH+i0cvq8nUw4NcBQISBfXzqjr6xsB+jiA/ZukTERGRw5J7nVatWmHKlCnqHrpZs2YpttmyZYt6ffPNN83er5SeNDp//jyefvrpFNucO3cuoa6+9La1xmeJiIiIyDoMBhfA/ytod+T+MBragyGAiTI5WlxYis9q0AAtHJoWBmhJy+MYnP5LvtCLLBG0v3fvniolI4KCgkxu4+fnp26gIyMjcenSpUw9vzfeeEN1o5XBqaQLr9TB7NmzpwrcSxmc8uXLO9T3ofT9+MyZJ4eaKjyTMks/MjwyoeROQlA/0SQD4iZ+ACCleGQ6sj3lYBeePh7/DYirAvrG+TzIUzRIDdRLREREpGeDBg3CrFmzsHDhQnz22WdJBvKSspU7duxA8eLF0b59+xSf3blzJ/r164eqVati2rRpCckM8r506dI4ffo0Zs6cicmTJ6f4rBxTtGjRIskAtxn5LBERERFZj8GlJODTF1rIN6mWydFumc6+D5D/uSUB/GT7zHtad02UJYL2MkCVUVo3yLJOgtwPHz7MpDMDhg0bhtdeey1FNs7SpUtVBtHzzz+P3bt3o2TJkpnyfapXrw4nJ6cUy+XHD6VNguXGySZZ+uUKqsnUcYNv3E/IypcMfSm3c+1xCR5Zl1h4SATOH76kpuTkR2tQocD4MjvFcqv6+XkT6unnhl+gr0Nn6duyjUjfbRQeGmHR9tmhpFdG8N+S/rGNsncbmaqpbqy3nlUUKlQIs2fPVkH5du3aqUQX6a0q2ext2rRRpWh++eUXuLmlLBk4duxY7N27V03du3dXAXch98Bz585Fw4YNMX36dHUdO3fuDFdXVzVA2IgRI9TDABlw9ptvvkmyz4x8loiIiIiszLsLEPl7li6TkyWC9pbKzKCkBO1NkcFjZTDZRYsW4cMPP8Ty5csz5fvExsaa/PEodfEpbXLdjA9IMj2w7QbkKxekJiDpD/WI0EjcvnwXNy/exq1LdxKmmxfv4Pa/dxAdGZPkO9z6946a/tl6LMVhPH09kLtILuQpkku95i4alDCfq2AAXNz0/Z8Mu7YR2bWN3srdy6LtF9+aZrVjZ0X8t6R/bKPs3UZyP5fVg/aibdu2apDZjz76CPnz50euXLlw584dFTj/9ddfVS9WUxo1aoSVK1eqpBjJjk+sTp06OHToED7//HMMHToUAwYMUA8Dbty4oXq4fvDBB/j444+RM2fOFPvNyGeJiIiIKPPK5BhyH0rxGS24CxCzH3CpBkPAbN03h74jcGZK3F02IiL1bEvjusTb25OUzZGg/dq1axEWFpYweJUtv8+BAwfg7e2dofPOrowPO+THma4CwoFAgcL5gWdh8gd88PX78Rn65x7X0ZcM/Qu3VH19qbOfWPijCFw6ekVNyTk5GRBUOFd8Vn6x+Br6Mkiuytovngd+AT6wN922Eemujew9eLfe6aWdKHVso+zdRjJOUnKhoaG6uce1pvr166tyN/L9ZGyo3LlzqxKRaenVq5fq0SplKSUTPjkJ5s+fPz++5ODt2+o+XLY1J9iekc8SERERkS3L5EyCwXdQqjXqNYPz4w8667KGfZYM2stNstR4l2wmuXk2RdZJKRlRpEgR6IF0nxXR0dGqLn25cuVs/n3kRyMDMOlnvH6Ocg2dnZ0RVDBQTU+/kHTsBBEeEp5QS//auRuPy+/cUmV3ZHl01H9Z+nFxmsrmlynl80rAJ4f3fwPiFsujSu/El93Jo0ryuLi62KwcSlREFHYs24Pd6w7gwZ0H8M/lj1qvVsVzb9RUpYcEy6Fk7X9Hqx4tSLFsWOOROLrjJCo+Vxaj1n+U4hwySv7utv2yEztX70XI/TD45PBCnaY1UPfNOgl/d47M0f57lx2xjfQvM9soq/9blaQTSxJPJCvfnGsmDwHSIyOfJSIiIiJrlsnZCEQfBkLnQHNvlGXK5GSJoL2oVKkS/vzzT1y4cMHkeuNyucF+6qmnoAeJy9Qk/6HliN+HHI+njyeKPVVETaa63t+9du/xYLi3cF2C+ipTPz6of/920rEUQu6H4syBC2pKzsnZCXmKBMUPiFssPjM/cVBfAv6Wet23Q5rrd67ci4k9ZiS83xi3xOJjkOMw9VBG/u6Mr9Z+aLNz9T5802UqHtz5bwwS8efS3ZgxcB4GzO6NOk2rW/WYRERERERERJS8TM6YRGVyBj8uk+P449hlmaB906ZNVZB7z549JtfLYK/i2WefzbSyCFL6RjKCmjWTP5yULl68qF6l264MtqX370PZi2Tp5y6US02V6lZIsT70YdjjLP2UQf2bF28hJvq/ertxsXGPt7sJ4EiKffnm9Ea+EnkTgvoqmP84qC+9BJxdHndhItIBCdiPaDFW9T4xRQL5sn7E8kEOEbg3NYivPFSW8TLCPSJSPFRmrxUiIiIiIiLSV5mcftBCxgGxF6A9mgSD32A4uiwTtO/UqRO++OILbNq0SQ2qmjyQvXjxYvXat29fk8EJCbDLa7t27azWvVj2ee3atVSD9sbBZ1999dUU3X0z8n2IMoO3nxdKVCqqJlNZ+neuBCcE6pNOt/DwbtLs5Ef3QvFo3zmc3ncuxb4kYC+D4aqgfrHcCdn5X/8xHJ+3/AaPgkOeeK5+gb6qlElWKFlC9vXg7kOM6zw11YC9kayX7RZfnq77v7sn9VpJjr1WiIiIiIiISFe8OwORv8eXyQmbA81DyuRUgSPLMkH7oKAgjBs3Dj169EC/fv2wYMGChOD7Tz/9hK1bt6JJkyZo2bJlis9KALx9+/YJ7xPPZ9TBgwcxceJE9O/fP8nypUuXquNK/fqvv/7aqt+HSA9Z+lIOR6bK9SqmWB/6IDQ+Oz9RMP+a1NE/fxM3L91BbMx/WfoyL4PmypRe8pBg25KdaNihbrr3QSRaBnXh3x0RERERERGRLsvkNJcR6KA9GOLwZXKyTNBedO/eHVFRUfjwww9x+vRp1KtXD+fPn1cZ7W3atMHMmTNNZtEnri1vyoEDB7Bq1So1v2PHDvUqGfQjRoxQ86VLl0bbtm1TfO7ll1/GiRMn8P7776uge+3ateHr64t9+/Zh8+bN6v3s2bNRqlQpq34fIr3z9vdGySrF1JScBOlvX7mrgvQSxI8fHPdmwnvJyk8PyXqe+8lPKuveL9BHvfoG/DdvnHwDfBKWeft7wckpvi46OQ7jALGXjl1W7+V14/xt6R4gVv4/4ta/d3DmwHmLP7tz1V7dPyyydBBfIiIiIiIiIv2Wyfn6cZmciTD4DYGjMmhPilg7oODgYKxbtw5XrlyBv7+/CnaXLVs21e3j4uKwcOHChCz75IHwxEF7U1IL2hsdP35cTVevXkVYWJjKoq9Vq5bZA8ha+n2SCw0NhY+Pj5oPCQlJUYqHzCP/VIyliviwxH4e3QtRtfTHdvoOF4/+a9NjOTkZHgfxfeGbKNjvF2AM7icP+sfP670cSlb+d5TaALHCP5fvEweIlfO7cfEWzuw/Hz8dvKBek5d0MtdTL5TD+K2fw9EMqDcch7cdx9N1y+ObLZ/Z+3SyvdTGHQi+G4yAwACOO6BTmX3fwPs9x8G2sh7en+sf20j/2Eb6xzbSP7aRfmhaLLTgNkD0PxL2hiFgMQxuVdW6uLvtgeg9gGtNOAX+qPv7vSwZtKek+MPAOvgfYX35vNU4/Lk0fkBmcxQomRflnymjgq/xU4h6DbkX+sTeNpby8HKHb0I2vzHQnzSjXwL88Q8C4tf55PTOFln9tvx39KQBYo0PYowDxMoDW+nJkThAf/bA+XT35jDF4GTAS+1fwGs9GqJc7dK6f+Bn7KUwY+A89eBDHnT0GPd2unspkHU0dGpl0fYcd0AfGLSn1PDe3HH/nZHl2Eb6xzbSP7aR/rGN9CUu+gxwV8rkRANORYBcP8MAD2jBXYCY/YBLNRgCZif9kMHTqvcS1rjfy1LlcYgo+6jWqLJFQft2n7Q0WaZEBs0NvR8WH8gPDsGjRAH9hCn4v/eP7oaowW8jwiJTPZask+n25btmn5/8n4ME7lNk7wckDe4nyfgP9FUPCByBMRj896q9uH/7PnIE5cAzr9ewWjBY9i8Z9uYMEPtlmwkoU70Ezv1zEWEPw9MM8BcuVxClqhVHqaoyFVOB/an9fjD7vLQ4TZXmkanYU4XxWo9GaND+eTWQs96Y6qUg82M7TVFB/Cf1UiAiIiIiIiKyN4NzAWgSsBdxl4BbtZEkUhCzH9qtykk/k/sQYNDX73Rm2mcDzOaxDj45dezM07VhC62aKRwZHqmC90kD/Inmgx8lrI9/EBD//klBZUu5ebimzN7PmSjQb6J8jzwckMGCM6ukx551B/Bt71kmS8zI+fSd2hU1X60KT+/0DxAjQXEJLqeXk7MTilYoFB+cV0H6YiheqWiKhyLycKBt4Z4my+8kJ2MiVK5fEbtW708yuLKHtzvqtXkOr/VsiNLVSkAPLO2lQPYvj5PWuAMZ+bdE1sNMe0oN780d998ZWY5tpH9sI/1jG+kf20hftLiwFEH5J5GgvcHJekF7ZtoTEZnJ2qU93D3d4V7AHbkKBJr9GSnHEvogLEWAPz64H7/sUXDKBwARoaln9UdFROPO1WA1WcInh2T1J6vXrwbmTRrgT1y738Pbw6IfxK/7dnjiNvL9vmw94YklPWKiYxB8/R7uXLuHu4+/791rwbhzTV7v4dSes7CEdw4vvPC/Oio4L0H64k8XMetvRLaRjHNzAtyD5/dRAe7gG/fw25wtWDdzE25euq3ac/3szWqSY0v2fb02z8DTx9NkkFYeFOxYtkc9/JC/H3kYIA85nnujZsI5ZyRIa0kvBdlu0b/TWSonk5lqX3nQZHxlkJ6IiIiIiChrYXkcInJIqx4tsCiLWw+kZr2vZMHn9EGBkuZ/LioyOmVwP3H5HgnwJwr2q3WS1R8bl+o+Q+6HqunauZtmn4erm0uK8jyqZE8q9fot9dfKvXhw+6EKxqvA/OOAvAToZbk1xx6QDPcPZvZM12clEC8Z5+YOeBuQNyfaDnsDrQc3w/7fD2Pt9xuxa/U+FQSXWvoTuk/HjAHz0OBx7Xt5gPCkBx5/r9yLiT1mWKWGuZQtMqfngJDtti3ZabLUFBERERERERFZB4P2ROSQjJmldVs9o4KjEkiUQGZCvfRmNVC3VdYYPNPN3RW58geoyVwS4A57GJZ6+R55CHDvv/I+xlr+YY9Sr/EeHRWf7S6TLUj2uiWcXZwRmD+nmm5dvoO7V80/L58cGev2Jn9zknEuf3c7V+1FyP0wtc86r6f+dycliWo2rqKm21fuYv2s+Gx7eSgh1331tA1qKl+nNGxJHgLdvnwHNy/dwa1/72DJuJUWfX720IX4Z8sxlfEvPTbk1UvNeyVZZnyVdiIiIiIiIiIi8zFoT0QOTwKkkvn7UvsXWNf0MSlj4+0vQVNv5Cuex+xrGR0VnaJWf8r3yR8AhCSp2W4Nkq0emD8AgQUCEJgvJ3IVCFCTLIt/zQn/ID/VeyE9Ne0luG6tv7v0ZJ0HFQxExxFvot3H/8PutQew5vuN2PfbIfWw5fjO0/EbSSUiMzoXSO8GKXFjfFAQ+iA0ISAv5XhuXbqNm//eTliW0Ycu0vthw9wtZm8v4wJIOaLEgXxvefVLHuT3+m+d/3/rPH0sK8uU1RkHdb507LJ6L6/y92+tQZ2JiIiIiIjI/jgQbTbAwa6sgwOL6B/byH7XXTLFkwf454/4GVfP3DB7P1Lf/ZNfPlCBeeldYAlLBoiVBwJ6rMt+/cJNrJu5GRt++AP3bj6w6LMlKheFFqepIL3UvbclLz9PFXCX46TVM8NaZHwAYxA/eUBfBf5VsN/7v6B/8ocD/l4W/z3plQwYbG5ZJrI/DkRLqeG9ueP+OyPLsY30j22kf2wj/WMb6YvGgWiJiIgeZ/VL8NTPC/mK/ZfVP7rdJIsuT96iQUk+bwlLBoiV7fQWsBfy3buMaouOI1rhg7rDcXL3GbM/e+7QxVTXubg6I6hQLuQpkgu5iwQhT+Eg5C78eL5ILhzefhzju043+1jvTe6S0LsgNjYWYQ/D1fgIEsQPvR8W//ogLGFZwroHxldZ9ni7+6Gq7FJapD0f3QtVE3Ab6eHq7pqkfE98OZ+U2f4pegQYt/fzTOjVYc+AfVp/3xLIl/Uy3gID90RERERERI6N5XGIiEgXMlqyxtIBYvXK1c1VlYSxhIe3Oyq9WAG5C0sgPj4obwzSB+TNkWbAWUr1zB6y0OxeClKzP3GdfuPgyuklvST+C+wnDegnCf4nCvobHw7IOnlo8KRBiqMjo1XvBUt7MKToYWAyoG8s7ZM029+Y5W/c3t3TLd1ZoHKN5O86rQdSQtbLdnrsSUJERERERETmY9CeiIhs4tfbs9G5bH9VKsecuuyJg8HWGCB2xoB5KhAtgeYe37ztUAMTWzpQbo1XKuPTJQMdspeC7C8gr0w50/X5uLg4hD8KTxH0T5zpH2Zc9zjwn/zBQGR41BOPIw8HZLp9+W66zlN6PJgM6CcK+pvK9pfXvb8dNOuhipDt5O8/PWMtEBERERERkT4waE9ERDbhH+iHgXPMCwbLdtYKBhsHiP1tzh84vO04ilQo5HABzGqNKuPPpbvN3j4791KQXgTGQZfTSwZgflKmvzHoH2biwYBMcbFxaR4jJjpWXVtzg+8ZsWLyenj5eib0DpBJegRkpfr+REREREREWRmD9kREZDOOHAy2p4k9Zli0PXspZLwkUY4gfzWlh5TniQiNMJnpn+IBwMP/tol/ABC/LjwkAtZyet85jHjj61Tr+8cH8f8L6Hv7eao6/8axKf4L9KcM+ssk5ZjsXeNfb8JDI1L5u4hEuEdEitJInt6WlcAiIiIiIqLshUF7IiKyqcQla/5euRf3b99HjqAceKZZDYcqWaNnGbmGyYONz71RC+tmbsKDHSdRqGwB9T42Ni5hOwYbU5KArKePp5pyFQhMVzvExsSqgH6oiaD/0glrcP7wJViD1Pe/f+uBmjLyfY0B/STBf3nvazrob+phgItr1rkNfd23g0Xbb4xbYrNzISIiIiLK1gyeMOQ+lGKxFtwFiNkPuFSDIWB2is/oTdb5tURERLplLFnzUvsXcPfuXQQGBqZ7UE5zs1yN5UrkNfl6vQeeVz1aoF73rDuAb3vPMjkugIwD0HdqV9R8tarNgo1Hd5xMsZ7BRttwdnGGX4CvmpKTfytjO00xe1/dv+6AyvUqqhr8Cdn+D//L7g+V5cb3j1/j58PNGthX1hs/kxEyOK/JbH4/Ew8DUukB4OHlbtX/lhARERERkWMzyO8DQ8px4jSD8+MNnGFwsmwcOXtg0J6IiBxeVgs8Gx8q1G31jOqpIL0Udq7aq8qqyKClUsOevRSyj7pv1sGMgfEDKz+JlJxq9u4r6e59oQb2DYkv9ZM46J88uG98EJB4uTwMMA76Gx0V88RjyQDAMt27mf6sfydnJ1Xex2Rg3y/tgH/i7eShSUYftMlDtpFvTYSWxhgeBicDPlrcP0PHIiIiIiKirI9BeyIiIgfopWCrwXSNWf3JM6mD7wYjIDCAWcw6+RuQsR/MGdRZtstIuSQ1sO/j2vYZERUZnXbAP/G6hKz/xA8JwhH2KPyJx5GeNI/uhaopI6ROv8ngvroWno8HO05e5/+/eRc3F0x+d1aaAXsh62U7eRjH0mBERERERJQaBu2JiMjhmQo8k3lMlQqSoL1HhLtax9Ij+uBogzq7ubvCLbc/cuZO3+C+IjY2FuGPIlJk8yd9ABBf+18C/EkfBvz3XsYLeBIZMFam4Ov3YGvSftJ7xlYP4oiIiIiIyPExaE9ERA5P7zXqiaw9qPOMAfHlciRY3+Obt7NkuSRnZ2f45PBWU3rJA6ioiCjTmf6JyvkYs/3jS/6kLAskAX1rknJXDNoTEREREVFqGLQnIiIicrBySb/N+QOHtx1HkQqFGPxNg/QUcfd0V1NA3pzpvu6SrZ8yoP/f/NIJq3Ht3E2z9yfjUxAREREREaWGQXsiIiIiojTIQLV+Ab5qMuXQliMWBe1lQGkiIiIiIqLUOKW6hoiIiIiInqhao8oWXaU6r9fgVSUiIiIiolQx056IiIhIx8JDI1Isi4uNS3hNvp5jPGS+iT1mWLS9jEFARERERES2ocWZKEepxSa8Jl9vcNJfT1gG7YmIiIh07HXfDqmuO7rjZIr1G+OWZMJZUUZktUGDiYiIiIj0RLuVRk/YmP0p1hvynobeMGhPRERERJQBqx4tUK971h3At71n4eHdRym28Qv0Rd+pXVHz1aq81kRERERElCYG7YmIiIgcICCcmKZpCL4bjIDAABgMBrucF6UsSVS31TOo07Q6ti3Zib9X7sX92/eRIygHnmlWQ5XEYYY9EREREZHtGXIfSrFMQ6LfUND/bygG7YmIiIh0zFSNegnae0S4q3UM2uuLBOYbdqiLl9q/gLt37yIwMJBtRERERESUiQymatRrGmAIh8Hg5RD35072PgEiIiIiIiIiIiIiIorHoD0RERERERERERERkU4waE9EREREREREREREpBMM2hMRERERERERERER6QSD9kREREREREREREREOsGgPRERERERERERERGRTjBoT0RERERERERERESkEwzaExERERERERERERHpBIP2REREREREREREREQ6waA9EREREREREREREZFOMGhPRERERERERERERKQTDNoTEREREREREREREekEg/ZERERERERERERERDrhYu8TIHIUFStWRGxsLE6cOGHvU6FUsI30j23kGNhO+sc20j+2ERH/nRH/W+gI+P9X+sc20j+2kWOo6GBxPWbaExERERERERERERHpBIP2REREREREREREREQ6waA9EREREREREREREZFOMGhP/2/vPsCbKr8/gL9lUxAoU/beVVD2sIyCsqcICjIEZAmKPwUBQVBBUESmgGwRFFBZ4mAKCCgbEQRZLWAZIkNmi/T+n+/xefNP05vVJu1t8/08Tywm6U1yb5Oc99zznlcRERERERERERERkTVwIdoAYBiG7d+3b99O1ueSksXGxsoF+zAoKCi5nw6Z4DGyPh6jlIHHyfp4jKwvqY+RfYxnH/uR9TA29x1+Flofj5H18RhZH4+R9fEYpQyxSRif+yI2DzIY1ad6ly9fVvny5Uvup0FERERESeDSpUsqb9683NcWxdiciIiIKHBcSmBszvY4REREREREREREREQWwUr7AICpH1euXJF/BwcHs7ULERERUSqDybN37tyRf+fOnVulScPaHKtibE5ERESUuhk+iM2ZtCciIiIiIiIiIiIisgiW4BARERERERERERERWQST9kREREREREREREREFsGkPRERERERERERERGRRTBpT0RERERERERERERkEUzaExERERERERERERFZBJP2FJC2bt2qunbtqqpVq6Zq1aql+vfvrw4fPpyobV6/fl1NnDhRNW3aVFWqVEnVrl1btrt//36fPe9A89dff6n27durcuXKqUOHDvlkmzjO/fr1k+OO44+/A/w9UMLcuXNH9enTR47R2rVrLb/dQPTgwQM1atQo2ZfTp09P9Hty4cKFqlu3bvIZFxoaKu+lXr16qfXr1/vsOQeiWbNm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P1u7dq2aN2+e+YdwUJDKmjWrCgkJUSVLllS1a9dWVapUsSVLU4vXXntNffjhh/K6Ll68qPLkyaMC0bVr11Tp0qUlkD59+rTKnTu3T7cfGxsrF0+kS5cu3nWYdvvgwQN17949tX//ftWrVy+VL18+tXnzZpU+ffo498X03LZt26rmzZurb775xmevgYiIiMjf3nvvPWkFaAbxavbs2VXOnDnVI488ourUqSPxW2pTtWpVtW/fPhUaGqoOHz6sAtX27dtVWFiYqlWrltq5c6fPt4/Y2pOu1BgXpk2b1ml8j3aWaJnTu3dvNXDgQDVhwoR4933llVfUlClT1AcffCDjLyJK2VJXVoiIyIKwYBBai7Rs2VL6EuJSvHhxua5r166qYcOG0i/866+/VjVq1FClSpVSU6dOlQAvtShRooT8RLIeJykc/fTTT1Ld0qNHD5WajRkzRv39998SUPs6YQ/9+/eX5Lonl1u3bsX7/e+++05lypRJPfTQQ6pevXqqUKFC6ssvv4yXsAccL5xgWrdundqwYYPPXwsRERGRvyD+RiyOmFzH54jVcR0qlZHARaL1/fffV2XKlJEe4oh5UhMdn+ufjtCCBfEeCm9SKyTDEZfDu+++65fHqFixokexOcaBZoYNGybxOcYOXbp0kaIaLEbr7L6owMdruXLlil9eDxElHVbaExElkfPnz6vChQvLvxcvXixBl6MDBw7I4p8HDx6Uqp4VK1ao/Pnzp4pjtGPHDhkUmL2eL774QqZzoqoblfipEV5XkSJF5N9RUVF+SdoPGDBAzZ4926P7olrHrO0N3L17V+3evVu2988//6hdu3apggULmrb6wQK2NWvWlPsQERERpSSfffaZev755+Xf586dk4IFRyisQZtHFF7g54wZM0xnLKY0mFmJynKcoMicOXO82/v27StxZceOHSVWT42++uor9fTTT6vHHntMZpn6A2YyHDt2zKOZD65aFWHG7rfffivxebVq1dQPP/xgOju7T58+6pNPPlFvvPGGzCghopSLlfZERBaCgBFV59WrV5ckd9OmTSVpmhrgJERqOQGREHPmzFH379+XdjL+SNgDBpH//vuvRxdnCXvAwA2V9higYQDrrMIK1VeoyscAAyeciIiIiFKbdu3aSXI7R44ckgxF4j41QPU2ZhyYJewDxccffyw/0dvfX3777TePYnN3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SoYqHrwOtBciIiIiosCydu1aaYNjX+WNFo+DBw9O1Hb1IrRoo+nYetMf0EYIrW+wQHBKTtpHR0erV155RWYnIE4nopQvXXI/ASIiIneQrMcgoFKlSqpChQoy3RP9JzGN1ReDAiT+k6onJXrjJ7Y/vhWgrRARERERBSb0mZ82bZrasWOHJNd/+uknSRp36tTJJ/F5lSpVVFKpWrWqXFIyrL3Qpk2b5H4aRORDTNoTEZHlIaGOqm4dkGKBKyTvfVFZM2LECFW4cGEfPEsiIiIiosDQsmVLWyEKFmdduHChrDeVWEieIz5ntTgRBTouREtEREREREREREREZBHsaU9EREREREREREREZBFM2hMRERERERERERERWQST9kREREREREREREREFsGkPRERERERERERERGRRTBpT0RERERERERERERkEUzaExERERERERERERFZBJP2REREREREREREREQWwaQ9EREREREREREREZFFMGlPRERERERERERERGQRTNoTEREREREREREREVkEk/ZERERERERERERERBbBpD0RERERERERERERkUUwaU9EREREREREREREZBFM2hMRERERERERERERWQST9kREREREREREREREyhr+DwN3nH4uHquAAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axes = plt.subplots(1, 2, figsize=(10, 4.2), constrained_layout=True)\n", + "\n", + "for i, N in enumerate(system_sizes):\n", + " rows = np.array(class_data[N])\n", + " if rows.size == 0:\n", + " continue\n", + " dens, mean_t, std_t, mean_c, std_c = rows.T\n", + " marker = markers[i % len(markers)]\n", + "\n", + " axes[0].errorbar(\n", + " dens, mean_t, yerr=std_t,\n", + " marker=marker, markersize=5, linestyle=\"-\", linewidth=1.2,\n", + " color=colors[N], ecolor=colors[N], capsize=3,\n", + " label=f\"N = {N}\",\n", + " )\n", + " axes[1].errorbar(\n", + " dens, mean_c, yerr=std_c,\n", + " marker=marker, markersize=5, linestyle=\"-\", linewidth=1.2,\n", + " color=colors[N], ecolor=colors[N], capsize=3,\n", + " label=f\"N = {N}\",\n", + " )\n", + "\n", + "axes[0].set_xlabel(r\"Density $\\rho$ $(\\sigma^{-3})$\")\n", + "axes[0].set_ylabel(\"Execution time (s)\")\n", + "axes[0].set_title(\"Runtime vs. density\")\n", + "\n", + "axes[1].set_xlabel(r\"Density $\\rho$ $(\\sigma^{-3})$\")\n", + "axes[1].set_ylabel(\"Closest particle distance $(\\sigma)$\")\n", + "axes[1].set_title(\"Minimum separation vs. density\")\n", + "\n", + "# Single shared legend\n", + "handles, labels = axes[0].get_legend_handles_labels()\n", + "fig.legend(handles, labels, loc=\"upper center\", bbox_to_anchor=(0.5, 1.12),\n", + " ncol=len(system_sizes), frameon=False)\n", + "\n", + "for ax in axes:\n", + " ax.grid(alpha=0.25, linewidth=0.5)\n", + "\n", + "fig.savefig(\"sweep_time_and_distance.png\", dpi=300, bbox_inches=\"tight\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "0bb64425-496c-40e7-98bc-939d28f5edfe", + "metadata": {}, + "outputs": [], + "source": [ + "for N in xml_data:\n", + " xml_data[N] = sorted(xml_data[N], key=lambda row: row[0])\n", + "\n", + "system_sizes = sorted(xml_data.keys())\n", + "cmap = plt.get_cmap(\"viridis\")\n", + "colors = {N: cmap(i / max(1, len(system_sizes) - 1)) for i, N in enumerate(system_sizes)}\n", + "markers = [\"o\", \"s\", \"^\", \"D\", \"v\", \"P\", \"X\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "165cb520-3b39-42d6-a345-dee65c6043b3", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "<>:28: SyntaxWarning: invalid escape sequence '\\s'\n", + "<>:28: SyntaxWarning: invalid escape sequence '\\s'\n", + "/var/folders/jr/8265_v612wxg_7hntt0sy_780000gn/T/ipykernel_11535/2407152112.py:28: SyntaxWarning: invalid escape sequence '\\s'\n", + " axes[1].set_ylabel(\"Closest particle distance $(\\sigma)$\")\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABe0AAALNCAYAAACyKUrSAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvgI3uAAAAAAlwSFlzAAAXEgAAFxIBZ5/SUgABAABJREFUeJzs3QmcjPUfB/DPM3tf7quUo4PKfYZEcoekCDlLRerfISVEUiiFkk4UIkISEiJX0oHIlUS5xe469r7m9399f7Oz9phZuzszO8d+3q/XmNl5nnnm2eeZsb/n+3yf79dQSikQEREREREREREREZHbmdy9AkREREREREREREREZMGgPRERERERERERERGRh2DQnoiIiIiIiIiIiIjIQzBoT0RERERERERERETkIRi0JyIiIiIiIiIiIiLyEAzaExERERERERERERF5CAbtiYiIiIiIiIiIiIg8BIP2REREREREREREREQegkF7IiIiIiIiIiIiIiIPwaA9EREREREREREREZGHYNCeiIiIiIiIiIiIiMhDMGhPREREREREREREROQhGLQnIiIiIiIiIiIiIvIQDNoTEREREREREREREXkIBu2JiIiIiIiIiIiIiDwEg/ZERERERERERERERB6CQXsiIiIiIiIiIiIiIg/BoD0RERERERERERERkYfwd/cKEBEREfmKhLjEfM0fEhbssnUhcgdljs/X/IYp1GXrQkRERETkrQyllHL3ShARERH5gramHvma/3vzEpetC5E7mM9Wy9f8pgp/uWxdiIiIiIi8FcvjEBERERERERERERF5CGbaExEREbmwPM6ojhOw78c/UbP5LZj43egs01geh4pCeRwVPQhI3Qn4N4BRanaWaSyPQ0RERESUE2vaExERETmJrSC8yc+Uce/pQfr9+/fj8OHDGT+HhYWhbdu2duc/cuQI9u7dm+P5WrVq4cYbb4QnWblyJdLS0uxODwkJQfv27a+6nH379uHkyZMoWbIk6tati6CgICevqXezFYRXhl/6RD+PD9LzO+Da7wC/P0RERER5w6A9EREREWm//fYbli9fjv/++w8///yzfu6LL75A7969bW6hAwcOYM6cObh48SI2b96Mu+66C8WLF8egQYM8Lmjfo0cPJCUl2Z1esWJFHYi0Z+PGjRgyZAgiIyPRoEEDHD16FNHR0Xj55Zfx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NHH1VNWqVdNZ9h06dED//v3RpEkTXdLnt99+w8cff6yz6+fMmYOmTW2XK5o8ebJupDlmzBgcO3YMrVq1wpEjR/D222+jTp06WLlypQ76F3lGCIxyu3NsBhU9yNKg1r+BrmGfhRHiUZuN3wHnfwf4/SEiIiLKP0MpZf/abSIiIiJyyPOtXsEfmw+gdsvbMGXjqx69NSVwbatczfDhw9G8eXO7r1u1apXOVp82bRqqVq0KTyQBRylxIw1sT506hfj4eJQrV04H8KUZrjQXvZpt27Zh2bJl+vVyMuOuu+7CAw88wID9VZij+gIpvwIBjWEqPR+ejN8B130H+P0hIiIiyjsG7YmIiIhcyJuC9kRFPWhPREREROQJWB6HiIiIyEkS4hJzPGdOM2fcZ58eEhbMbU8+RZnjbTyZlnGffbphuvoVDkRERERERQ0z7YmIiIicpK2pR77m/968hNuefIr5bLV8zW+q8JfL1oWIiIiIyFuZ3L0CRERERERERERERERkwUx7IiIiIheWx8kNy+NQkSiPkwuWxyEiIiIiyolBeyIiIiIiIiIiIiIiD8HyOEREREREREREREREHoJBeyIiIiIiIiIiIiIiD8GgPRERERERERERERGRh2DQnoiIiIiIiIiIiIjIQzBoT0RERERERERERETkIRi0JyIiIiIiIiIiIiLyEAzaExERERERERERERF5CAbtiYiIiIiIiIiIiIg8BIP2REREREREREREREQegkF7IiIiIiIiIiIiIiIPwaA9EREREREREREREZGHYNCeiIiIiIiIiIiIiMhDMGhPREREREREREREROQhGLQnIiIiIiIiIiIiIvIQDNoTEREREREREREREXkIBu2JiIiIiIiIiIiIiDwEg/ZERERERERERERERB6CQXsiIiIiIiIiIiIiIg/BoD0RERERERERERERkYdg0J6IiIiIiIiIiIiIyEMwaE9ERERERERERERE5CEYtCciIiIiIiIiIiIi8hAM2hMREREREREREREReQgG7YmIiIiIiIiIiIiIPASD9kREREREREREREREHoJBeyIiIiIiIiIiIiIiD8GgPRERERERERERERGRh2DQnoiIiIiIiIiIiIjIQzBoT0RERERERERERETkIRi0JyIiIiIiIiIiIiLyEAzaExERERERERERERF5CAbtiYiIiIiIiIiIiIg8BIP2REREREREREREREQegkF7IiIiIiIiIiIiIiIPwaA9EREREREREREREZGHYNCeiIiIiIiIiIiIiMhDMGhPREREREREREREROQh/N29AkRElH+JiYmYPXs2GjVqhMaNG3MTepg///wTixYtyvLcSy+9hODgYHgzfu6IiIgK38mTJ7F48WL07NkTFStW9LrlE7kSP7/utWbNGvz8888ZP1eoUAFDhgyBt+PnijyBoZRS7l4JIqKCksCoBEhzYzKZUKJECdSsWRMtWrSAv7/3n6985ZVXMH78eISHh+PMmTP6njwvaH/27Fl8/PHH+rkLFy7oz6E34+eOiIjIchL7jTfeyLEpunXrhjp16uR5E8XGxmLKlCnIfkg+duxYPX61atmyJbZs2aLvN23a5PRd4OrlE7kSP7+eEbSX29q1a/X/gbt374a34+eKPIH3R66IiAD88ccf+Prrr/W2eO6551CsWDH9WA6C/v33X2zduhV///03rr/+esycORPt27f32N9j2bJlev2HDRtmdz6z2Zxxz3OvnueWW27BuHHj9IDVGrT3BVf73OX180tEROQrVqxYgd9//10/lsD3Dz/8kOfXvv/++3q8IBo0aIDOnTtf9e+vK7h6+UQF/W7t2rULtWvXxv333293Pn5+3atDhw769s477+igva+42ucqr59PIkcw056IfML8+fPRr18//fjEiRO47rrrskxPTk7G0KFDdUmZgIAAnUXUrFkzeOrvIZcmyyV59iQkJOjfRQ7wmjZtWqjrSHknQft69er5TKb91T53ef38EhER+YpHH31U/220kkSR5s2bX/V18fHxqFKlCs6fP69/Hjx4MD766COb88rYVsrXPPjggzoBxdlcvXwiR75bffr00WNMe/j59QwStJfkOV/JtL/a5yqvn08iR7ARLREVCYGBgXj33XcRFhaGlJQUvPzyy/BmISEheOqppxiwJ37uiIiI3KxcuXIZQR0pX5gXH374oe51I6+9Gln2888/77KAuquXT+RK/PwSP1fkqxi0J6IiQwL2devWzciCkuA9EREREZEj5CrOF154QT/+/vvvszRltHfl2ltvvYUXX3xRv5aIiIgoO9a0J6IixVqeJDU1VZcrsWY3ST06qUtnlb0mt5T6mDVrVsbP0hxMmoRZRUZGYsaMGVne65FHHkGlSpXw22+/6YM3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G8mukoOmSZMm6Qw7IiIiIkKeg/ZE5B0kyUtOcEl5KDlRQXQ1rGlPREREbiNNoSUjv1+/ftwLRERERETkk+RKCrmimQF7yisG7YmIiKhQSLkpqUlrLU0l5YkkW0zqO0ppHiIiIiIiIm+3adOmLKV9pAyo9CqTnmJEecVGtERERFRoQXvpnSA1L6Xuv/SN8PPzw5QpU7gHiIiIiHIhtbOl3ra1ca614ae1vjcReVbQXpKVtm7dqmvry9XF0ufr4YcfdveqkRdh0J6IiIgKhTT6euWVV/RjOcCU5lSdO3fWjZuIiIiI6OqaNGmib0TkuaTJsZDm0BK0l6z71q1b65+J8oqNaImIiIiIiIiIiIiIPARr2hMREREREREREREReQgG7YmIiIiIiIiIiIiIPASD9kREREREREREREREHoJBeyIiIiIiIiIiIiIiD+Hv7hWgvDGbzYiMjNSPQ0ND2XGaiIiIqAhRSiE+Pl4/LlOmDEwm5t54Mo7diYiIiIou5YSxO4P2XkIC9uXLl3f3ahARERGRm/33338oV66cu1eDcsGxOxERERE5MnZnig4RERERERERERERkYdgpr2XkJI4mc/QhIWFuXV9vFnDhg2RlpaGXbt2scyQB+N+8h7cV96B+8l7cF95h8LeT3FxcRlXXWYeF5Jn4tjdefh/ovfgvvIO3E/egfvJe3BfeYeGXjh2Z9DeS2T+QEnAnkH7gpM6UlJbSrZhYXxRqWC4n7wH95V34H7yHtxX3sGd+4njF8/Hsbvz8P9E78F95R24n7wD95P34L7yDiYvHLuzPA4RERERERERERERkYdg0J6IiIiIiIiIiIiIyEMwaE9ERERERERERERE5CEYtCciIiIiIiIiIiIi8hCGkir85PGk63B4eLh+HBsby0a0DpCPfFRUFEqXLs1Gbh6M+8l7cF95B+4n78F95R0Kez9xLOhduL+ch/8neg/uK+/A/eQduJ+8B/eVd1BeOHZnpj0RERERERERERERkYdg0J6IiIiIiIiIiIiIyEMwaE9ERERERERERERE5CEYtCciIiIiIiIiIiIi8hAM2hMREREREREREREReQgG7YmIiIiIiIiIiIiIPASD9kREREREREREREREHoJBeyIiIiIiIiIiIiIiD8GgPRERERERERERERGRh/B39woQERERERFR3imlAJWQv01mhMAw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yk+4ERERERERAZP2RERE/w9JcrSjScsJJHFyYMicN9O0qj89W/6Q+MToC0qd7LmyyYD/OnfCDevxb4qIiIiIyDNiI/5KdBvm/oq+FC2ROSMlKCgowbIw8U5M2hMREflZVX96tvwh/xx9QZ454UZERERERKljr0c9kvY3Yg1dZpu091ZM2hMREflxVb95cgB97i9fuCw58uSQ+o+5r+UPpR6Twb6Df1NERERERJQemLQnIiIKgJMDD3VrKFFRUZIrVy6fqSwIJEwG+w7+TRERERERUVpj0p6IiIjICzAZTERERERERBDMt4GIiIiIiIiIiIiIyDswaU9ERERERERERERE5CWYtCciIiIiIiIiIiIi8hJM2hMREREREREREREReQkm7YmIiIiIiIiIiIiIvAST9kREREREREREREREXoJJeyIiIiIiIiIiIiIiL8GkPRERERERERERERGRl/C7pP3Vq1flnXfekdKlS0vmzJklf/780rlzZ9m1a1eqt20YhnzxxReSMWNGqVmzplP3iYiIkKCgIIcXPD8iIiIiIiIiIiIiIr9L2p8/f15q1Kgh3333nXz55Zdy6dIlWbFihZw4cUJq1aolixYtSvG2L1y4II8++qgMGDBA4uLi3Pq8iYiIiIiIiIiIiIgggz+9DV27dpVDhw7J/PnzpVWrVnpbxYoV9f+ovO/UqZPs379fChQo4NJ2V61aJd26dZNs2bLJk08+KTNmzHDp/mvXrpUGDRq4dB9KO/iduHv3ruzdu5dvsxfjfvId3Fe+gfvJd3Bf+QbuJyL+rRE/F30Rv798A/eT7+C+8g0VfTAX6DeV9itXrtRLqVKlLAl7U86cOeXpp5+Wa9euyfDhw13edt++fTXhv23bNqlWrZobnzURERERERERERERkR8m7adOnarXzZs3t7vcvH369Ol6ZsUVc+bM0XY76JFPRERERERERERERJRW/CZpv2bNGstwB3uqVKli6U2PFjmuKFOmjBueIRERERERERERERFRACTtY2Nj5ejRo/pzoUKF7K6TP39+CQ6+93LTu38RKvWbNGmizyFjxozaU/+xxx6TxYsXp+vzICIiIiIiIiIiIiLv5hcT0V6+fFni4+P154iICLvrhISESFhYmFy/fl2ioqLS9fmdOHFChgwZIvfff79kz55dNm/eLG+88Ya0bNlSevXqJePG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w4YNtWUPDlZwkEJEREREZA9OFhQsWFDj4L59+6b4TWrWrJm2wkG7TnOi17Qybdo06dKli84phdadvgwFXDihgBanKJRCCyAi8h88GiciIq+BSbVQ8ZLShL3Znx8JezAn901LH330kVY2of+/2YvTVw0ePFivv/rqKybsiYiIiChJ6HePkQqpHZ25bdu2dIvdMYFuvXr1tFjInMDVV3355Zc6BwEm6GXCnsj/MGlPREQeMX/+/ASTSKHKG8NQ+/Xrl6rtmpPQYqiv7fDgtIA2Qmh9gwmCfTlpj8nTXnvtNR2dgGp7IiIiIiLT0aNHpW3btlrdDZgEF60ou3fvrq2FUurYsWNasZ9eSXvzZMOcOXO0rY8vQ8yO14H2QkTkfzJ4+gkQEVHg9hYdPXq0rFu3TpPrf/zxhyaNO3Xq5JakfY0aNSS91KxZUy++DHMvPP74455+GkRERETkhZCsR4FNlSpVpHz58tpKEXM7oTWOO2J3JP7Ta74n9MZPbX98b4C2QkTkv5i0JyIij2jdurUlWMbkXz/++KP2xEwtJM8HDRrEanEiIiIiIjdBQh1V3WaxBybbRfLeHaNWEbsXKVLEDc+SiMh/cCJaIiIiIiIiIiIiIiIvwZ72RERERERERERERERegkl7IiIiIiIiIiIiIiIvwaQ9EREREREREREREZGXYNKeiIiIiIiIiIiIiMhLMGlPREREREREREREROQlmLQnIiIiIiIiIiIiIvISTNoTEREREREREREREXkJJu2JiIiIiIiIiIiIiLwEk/ZERERERERERERERF6CSXsiIiIiIiIiIiIiIi/BpD0RERERERERERERkZdg0p6IiIiIiIiIiIiIyEswaU9ERERERERERERE5CWYtCciIiIiIiIiIiIi8hJM2hMRERERERERERERiXf4P83BTV9pQzsjAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axes = plt.subplots(1, 2, figsize=(10, 4.2), constrained_layout=True)\n", + "\n", + "for i, N in enumerate(system_sizes):\n", + " rows = np.array(xml_data[N])\n", + " if rows.size == 0:\n", + " continue\n", + " dens, mean_t, std_t, mean_c, std_c = rows.T\n", + " marker = markers[i % len(markers)]\n", + "\n", + " axes[0].errorbar(\n", + " dens, mean_t, yerr=std_t,\n", + " marker=marker, markersize=5, linestyle=\"-\", linewidth=1.2,\n", + " color=colors[N], ecolor=colors[N], capsize=3,\n", + " label=f\"N = {N}\",\n", + " )\n", + " axes[1].errorbar(\n", + " dens, mean_c, yerr=std_c,\n", + " marker=marker, markersize=5, linestyle=\"-\", linewidth=1.2,\n", + " color=colors[N], ecolor=colors[N], capsize=3,\n", + " label=f\"N = {N}\",\n", + " )\n", + "\n", + "axes[0].set_xlabel(r\"Density $\\rho$ $(\\sigma^{-3})$\")\n", + "axes[0].set_ylabel(\"Execution time (s)\")\n", + "axes[0].set_title(\"Runtime vs. density\")\n", + "\n", + "axes[1].set_xlabel(r\"Density $\\rho$ $(\\sigma^{-3})$\")\n", + "axes[1].set_ylabel(\"Closest particle distance $(\\sigma)$\")\n", + "axes[1].set_title(\"Minimum separation vs. density\")\n", + "\n", + "# Single shared legend\n", + "handles, labels = axes[0].get_legend_handles_labels()\n", + "fig.legend(handles, labels, loc=\"upper center\", bbox_to_anchor=(0.5, 1.12),\n", + " ncol=len(system_sizes), frameon=False)\n", + "\n", + "for ax in axes:\n", + " ax.grid(alpha=0.25, linewidth=0.5)\n", + "\n", + "fig.savefig(\"sweep_time_and_distance.png\", dpi=300, bbox_inches=\"tight\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f318d545-0dc7-4855-88a4-14e70fcf8f45", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.13.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/phantomwalk/signac/dpd_class_workspace/init.py b/phantomwalk/signac/dpd_class_workspace/init.py index 44b3805..f072371 100644 --- a/phantomwalk/signac/dpd_class_workspace/init.py +++ b/phantomwalk/signac/dpd_class_workspace/init.py @@ -13,7 +13,7 @@ def get_parameters(): parameters = OrderedDict() - parameters["num_mols"] = [10] + parameters["num_mols"] = [10,100] parameters["lengths"] = [5] parameters["density"] = [(0.85, 1.0, 1.1, 1.125, 1.15, 1.175, 1.2, 1.3, 1.4)] parameters["bond_k"] = [250000] diff --git a/phantomwalk/signac/dpd_class_workspace/project.py b/phantomwalk/signac/dpd_class_workspace/project.py index 56fa669..01677b0 100644 --- a/phantomwalk/signac/dpd_class_workspace/project.py +++ b/phantomwalk/signac/dpd_class_workspace/project.py @@ -75,8 +75,8 @@ def run(job): ref_values_dict = { "length": 1.0 * u.Unit("nm"), - "mass": 1.0 * u.Unit("g/mol"), - "energy": 1.0 * u.Unit("kcal / mol"), + "mass": 1.0 * u.Unit("amu"), + "energy": 1.0 * u.Unit("kJ / mol"), } job.doc.ref_values = ref_values_dict job.doc.forcefield_type = "DPD_class" diff --git a/phantomwalk/signac/xml_workspace/init.py b/phantomwalk/signac/xml_workspace/init.py index 7682634..ffc1cc3 100644 --- a/phantomwalk/signac/xml_workspace/init.py +++ b/phantomwalk/signac/xml_workspace/init.py @@ -16,7 +16,7 @@ def get_parameters(): parameters = OrderedDict() - parameters["num_mols"] = [100] + parameters["num_mols"] = [10,100] parameters["lengths"] = [5] parameters["density"] = [(0.85, 1.125, 1.15, 1.175, 1.2, 1.3, 1.4)] parameters["r_cut"] = [1.01] @@ -39,6 +39,8 @@ def main(): job.doc.setdefault("score", []) job.doc.setdefault("ref_values", {}) job.doc.setdefault("forcefield_type", "Bead_Spring_DPD_xml") + job.doc.setdefault("dpd_params",{}) + job.doc.setdefault("bond_params",{}) if __name__ == "__main__": diff --git a/phantomwalk/signac/xml_workspace/project.py b/phantomwalk/signac/xml_workspace/project.py index d4e8aa5..3ece3e0 100644 --- a/phantomwalk/signac/xml_workspace/project.py +++ b/phantomwalk/signac/xml_workspace/project.py @@ -66,8 +66,8 @@ def run(job): ref_values_dict = { "length": 1.0 * u.Unit("nm"), - "mass": 1.0 * u.Unit("g/mol"), - "energy": 1.0 * u.Unit("kcal / mol"), + "mass": 1.0 * u.Unit("amu"), + "energy": 1.0 * u.Unit("kJ / mol"), } job.doc.ref_values = ref_values_dict job.doc.forcefield_type = "Bead_Spring_DPD_xml" @@ -140,8 +140,7 @@ def run(job): score = [d, np.nan, np.nan, np.nan, np.nan, False] job.doc.score.append(score) - job.doc.bond_params = system.gmso_system.bond_types - job.doc.dpd_params = system.gmso_system.pairpotential_types + print(system.gmso_system.pairpotential_types,system.gmso_system.bond_types) job.doc.runs += 1 job.doc.sampled = True From d891b726d6f6fad5ecb72ef3c2e49afa5dcdd47c Mon Sep 17 00:00:00 2001 From: Steph McCallum Date: Sun, 1 Nov 2026 15:10:34 -0700 Subject: [PATCH 08/12] fixin base env --- phantomwalk/conda-envs/environment.yml | 61 +++++++++++++------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/phantomwalk/conda-envs/environment.yml b/phantomwalk/conda-envs/environment.yml index cc0c0dc..b637c94 100644 --- a/phantomwalk/conda-envs/environment.yml +++ b/phantomwalk/conda-envs/environment.yml @@ -1,36 +1,37 @@ -name: phantomwalk-signac +name: phantomwalk channels: - conda-forge - defaults dependencies: # Basic Python dependencies - # - python>=3.12 - - python - - pip - - jupyterlab - - # Mathematics and scientific computing - - numpy - - scipy>=1.16.0 # required to allow use of RigidTransform - - sympy - - # Visualization - - matplotlib - - py3Dmol - - # Chemistry - - rdkit - - periodictable - - openbabel>=3 - - # Molecular Dynamics toolkits - ## HOOMD - - hoomd - - gsd>=3.0 - - freud - - fresnel + - python>=3.11,<3.14 + - pip + - jupyterlab - - pip: - - flowermd @ git+https://github.com/cmelab/flowerMD.git # experimental DPD functionality not yet in FlowerMD conda releases - - gmso @ git+git@github.com:mosdef-hub/gmso.git - - mbuild @ git+git@github.com:mosdef-hub/mbuild.git@develop + # Mathematics and scientific computing + - numpy>=2.0 + - scipy>=1.16.0 # required to allow use of RigidTransform + - sympy + + # Visualization + - matplotlib + - py3Dmol + + # Chemistry + - rdkit + - periodictable + - openbabel>=3 + + # Molecular Dynamics toolkits + ## HOOMD + - hoomd>=5.0,!=5.3.0 + - gsd>=3.0,<5 + - freud + - fresnel + - cmeutils>=1.3 + - grits >=0.6.0 + + - pip: + - "flowermd @ git+https://github.com/cmelab/flowerMD.git" # experimental DPD functionality not yet in FlowerMD conda releases + - "gmso @ git+https://github.com/mosdef-hub/gmso.git" + - "mbuild @ git+https://github.com/mosdef-hub/mbuild.git@develop" From e561837466cfeeb0ecf74870c860d2a004a27bfd Mon Sep 17 00:00:00 2001 From: charliegiu Date: Sun, 1 Nov 2026 17:41:37 -0700 Subject: [PATCH 09/12] organize and add fcc figure --- phantomwalk/paper/figures/fcc/fcc.ipynb | 65 ++++++++++++++++++ phantomwalk/paper/figures/fcc/fcc.png | Bin 0 -> 74395 bytes .../nonbonded_bonded_forces.ipynb} | 50 ++++++-------- .../nonbonded_bonded_forces.svg} | 38 +++++----- 4 files changed, 105 insertions(+), 48 deletions(-) create mode 100644 phantomwalk/paper/figures/fcc/fcc.ipynb create mode 100644 phantomwalk/paper/figures/fcc/fcc.png rename phantomwalk/paper/figures/{forces.ipynb => nonbonded_bonded_forces/nonbonded_bonded_forces.ipynb} (97%) rename phantomwalk/paper/figures/{forces.svg => nonbonded_bonded_forces/nonbonded_bonded_forces.svg} (97%) diff --git a/phantomwalk/paper/figures/fcc/fcc.ipynb b/phantomwalk/paper/figures/fcc/fcc.ipynb new file mode 100644 index 0000000..f0da2dc --- /dev/null +++ b/phantomwalk/paper/figures/fcc/fcc.ipynb @@ -0,0 +1,65 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "id": "527a6845-10b5-43ba-b95d-efd63f03da04", + "metadata": {}, + "outputs": [], + "source": [ + "import hoomd\n", + "import gsd.hoomd\n", + "import math\n", + "\n", + "frame = gsd.hoomd.Frame()\n", + "\n", + "frame.particles.position = [\n", + " [0.5, 0.0, 0.0],\n", + " [0.0, 0.5, 0.0],\n", + " [0.0, 0.0, 0.5],\n", + " [0.5, 0.5, 0.5]\n", + "]\n", + "\n", + "N_particles = len(frame.particles.position)\n", + "\n", + "frame.particles.N = N_particles\n", + "frame.particles.typeid = [0, 1, 2, 3]\n", + "frame.configuration.box = [1, 1, 1, 0, 0, 0]\n", + "frame.particles.diameter = [math.sqrt(2) / 2] * N_particles\n", + "frame.particles.types = [\"_A\", \"_B\", \"_C\", \"_D\"]\n", + "\n", + "with gsd.hoomd.open(name='fcc/fcc.gsd', mode='w') as traj:\n", + " traj.append(frame)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2be477ae-cfb4-4d23-972d-9e0fcbc154be", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.12.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/phantomwalk/paper/figures/fcc/fcc.png b/phantomwalk/paper/figures/fcc/fcc.png new file mode 100644 index 0000000000000000000000000000000000000000..8ffb2493937eb6b662fedbbe68bac75b29452bcb GIT binary patch literal 74395 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

^J$?JPZinKBEQewOH8~`Z$jI)! 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 literal 0 HcmV?d00001 diff --git a/phantomwalk/paper/figures/forces.ipynb b/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.ipynb similarity index 97% rename from phantomwalk/paper/figures/forces.ipynb rename to phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.ipynb index a5aebc0..0666479 100644 --- a/phantomwalk/paper/figures/forces.ipynb +++ b/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.ipynb @@ -33,11 +33,11 @@ " \n", " \n", " \n", - " 2026-10-29T13:29:07.533254\n", + " 2026-10-31T13:31:23.444591\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.11.2, https://matplotlib.org/\n", + " Matplotlib v3.11.1, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -68,12 +68,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -118,7 +118,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -159,7 +159,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -195,7 +195,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -242,7 +242,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -298,7 +298,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -392,12 +392,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -410,7 +410,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -454,7 +454,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -472,7 +472,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -490,7 +490,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -508,7 +508,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -625,7 +625,7 @@ "L 386.703595 290.888727 \n", "L 389.982934 293.332364 \n", "L 393.262273 295.776 \n", - "\" clip-path=\"url(#p5a7c727f1b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n", + "\" clip-path=\"url(#paa22a4ca42)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#paa22a4ca42)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #ff7f0e; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1531,16 +1531,8 @@ "plt.suptitle(r\"DPD Non-Bonded ($F_C$) and Bonded ($F_B$) Forces\", fontsize=12)\n", "ax.legend(fontsize=12)\n", "plt.xlabel(r\"$r_{ij}$\", fontsize=12)\n", - "plt.savefig(\"forces.svg\")" + "plt.savefig(\"nonbonded_bonded_forces.svg\")" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "58866546-ec5f-4e41-b188-a9490a7994ed", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -1559,7 +1551,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.16" + "version": "3.12.15" } }, "nbformat": 4, diff --git a/phantomwalk/paper/figures/forces.svg b/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.svg similarity index 97% rename from phantomwalk/paper/figures/forces.svg rename to phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.svg index d8ef77b..3e519c7 100644 --- a/phantomwalk/paper/figures/forces.svg +++ b/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.svg @@ -6,11 +6,11 @@ - 2026-10-29T13:29:07.280008 + 2026-10-31T13:31:23.056590 image/svg+xml - Matplotlib v3.11.2, https://matplotlib.org/ + Matplotlib v3.11.1, https://matplotlib.org/ @@ -41,12 +41,12 @@ z - - + @@ -91,7 +91,7 @@ z - + @@ -132,7 +132,7 @@ z - + @@ -168,7 +168,7 @@ z - + @@ -215,7 +215,7 @@ z - + @@ -271,7 +271,7 @@ z - + @@ -365,12 +365,12 @@ z - - + @@ -383,7 +383,7 @@ L -3.5 0 - + @@ -427,7 +427,7 @@ z - + @@ -445,7 +445,7 @@ z - + @@ -463,7 +463,7 @@ z - + @@ -481,7 +481,7 @@ z - + @@ -598,7 +598,7 @@ L 388.649256 288.157091 L 391.928595 290.600727 L 395.207934 293.044364 L 398.487273 295.488 -" clip-path="url(#p65163e417b)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> +" clip-path="url(#pc8f334f065)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> +" clip-path="url(#pc8f334f065)" style="fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #ff7f0e; stroke-width: 1.5"/> + From 4cba44d56650409af013a84fc7e9f6a6219bfcd6 Mon Sep 17 00:00:00 2001 From: charliegiu Date: Wed, 4 Nov 2026 10:24:58 -0700 Subject: [PATCH 10/12] generate fcc using dpd --- phantomwalk/paper/figures/fcc/fcc.ipynb | 128 +++++++++++++++++++----- phantomwalk/paper/figures/fcc/fcc.png | Bin 74395 -> 37342 bytes 2 files changed, 105 insertions(+), 23 deletions(-) diff --git a/phantomwalk/paper/figures/fcc/fcc.ipynb b/phantomwalk/paper/figures/fcc/fcc.ipynb index f0da2dc..85fd5a2 100644 --- a/phantomwalk/paper/figures/fcc/fcc.ipynb +++ b/phantomwalk/paper/figures/fcc/fcc.ipynb @@ -2,43 +2,125 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "527a6845-10b5-43ba-b95d-efd63f03da04", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(32, 3)\n", + "Box: Lx=2.831242, Ly=2.831242, Lz=2.831242, xy=0.000000, xz=0.000000, yz=0.000000, \n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 75 of 1000; TPS: 366.95; ETA: 0.0 minutes\n", + "Step 150 of 1000; TPS: 725.99; ETA: 0.0 minutes\n", + "Step 225 of 1000; TPS: 1083.57; ETA: 0.0 minutes\n", + "Step 300 of 1000; TPS: 1437.56; ETA: 0.0 minutes\n", + "Step 375 of 1000; TPS: 1791.24; ETA: 0.0 minutes\n", + "Step 450 of 1000; TPS: 2140.47; ETA: 0.0 minutes\n", + "Step 525 of 1000; TPS: 2489.43; ETA: 0.0 minutes\n", + "Step 600 of 1000; TPS: 2835.61; ETA: 0.0 minutes\n", + "Step 675 of 1000; TPS: 3181.16; ETA: 0.0 minutes\n", + "Step 750 of 1000; TPS: 3521.33; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 3861.4; ETA: 0.0 minutes\n", + "Step 900 of 1000; TPS: 4197.53; ETA: 0.0 minutes\n", + "Step 975 of 1000; TPS: 4532.92; ETA: 0.0 minutes\n", + "Step 50 of 200; TPS: 95057.03; ETA: 0.0 minutes\n", + "Step 125 of 200; TPS: 97809.08; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.918749988079071\n" + ] + } + ], "source": [ + "from flowermd.library import LJChain, RandomWalk, PhantomWalk\n", + "import unyt as u\n", + "from flowermd.library.forcefields import DPD\n", "import hoomd\n", - "import gsd.hoomd\n", - "import math\n", "\n", - "frame = gsd.hoomd.Frame()\n", + "molecules = LJChain(\n", + " num_mols=[32],\n", + " lengths=[1],\n", + " bead_sequence=[\"_A\"],\n", + " bead_mass={\"_A\": 1.0},\n", + " bond_lengths={\"_A-_A\": 1.0},\n", + " identify_connections=False,\n", + ")\n", "\n", - "frame.particles.position = [\n", - " [0.5, 0.0, 0.0],\n", - " [0.0, 0.5, 0.0],\n", - " [0.0, 0.0, 0.5],\n", - " [0.5, 0.5, 0.5]\n", - "]\n", + "ref_length = 1.0 * u.Unit(\"nm\")\n", + "ref_mass = 1.0 * u.Unit(\"g/mol\")\n", + "ref_energy = 1.0 * u.Unit(\"kcal / mol\")\n", + "ref_values_dict = {\"length\": ref_length, \"mass\": ref_mass, \"energy\": ref_energy}\n", "\n", - "N_particles = len(frame.particles.position)\n", + "system = RandomWalk(\n", + " molecules=molecules,\n", + " density=1.41 * u.Unit(\"nm**-3\"),\n", + " bond_length=1.0,\n", + " base_units=ref_values_dict,\n", + ")\n", "\n", - "frame.particles.N = N_particles\n", - "frame.particles.typeid = [0, 1, 2, 3]\n", - "frame.configuration.box = [1, 1, 1, 0, 0, 0]\n", - "frame.particles.diameter = [math.sqrt(2) / 2] * N_particles\n", - "frame.particles.types = [\"_A\", \"_B\", \"_C\", \"_D\"]\n", + "print(system.box)\n", "\n", - "with gsd.hoomd.open(name='fcc/fcc.gsd', mode='w') as traj:\n", - " traj.append(frame)" + "A = 250000\n", + "gamma = 1500\n", + "kT = 1.0\n", + "r_cut = 1.01\n", + "bond_k = 250000\n", + "bond_r0 = 1.0\n", + "dpd_ff = DPD(\n", + " A=A, gamma=gamma, kT=kT, r_cut=r_cut, bond_k=bond_k, bond_r0=bond_r0\n", + ")\n", + "\n", + "sim = PhantomWalk(\n", + " initial_state=system.hoomd_snapshot,\n", + " forcefield=dpd_ff.hoomd_forces,\n", + " gsd_write_freq=100,\n", + " log_write_freq=50,\n", + " n_steps_dpd=1000,\n", + " n_steps_fire=200,\n", + ")\n", + "\n", + "for writer in sim.operations.writers:\n", + " if isinstance(writer, hoomd.write.GSD):\n", + " writer.flush()\n", + "\n", + "#sim_visualizer = FresnelGSD(\n", + "# gsd_file=\"trajectory.gsd\", frame=-1, view_axis=(1, 1, 1)\n", + "#)\n", + "#image = PIL.Image.fromarray(sim_visualizer.view()[:], mode=\"RGBA\")\n", + "#image.save(\"output.png\")" ] }, { "cell_type": "code", - "execution_count": null, - "id": "2be477ae-cfb4-4d23-972d-9e0fcbc154be", + "execution_count": 2, + "id": "5001a90e-2a3f-4e8d-8747-a5369473af5d", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from cmeutils.visualize import FresnelGSD\n", + "import PIL\n", + "\n", + "sim_visualizer = FresnelGSD(\n", + " gsd_file=\"trajectory.gsd\", frame=-1, view_axis=(1, 1, 1)\n", + ")\n", + "scene = sim_visualizer.view()\n", + "image = PIL.Image.fromarray(scene[:], mode=\"RGBA\")\n", + "image.save(\"fcc.png\")\n", + "scene" + ] } ], "metadata": { diff --git a/phantomwalk/paper/figures/fcc/fcc.png b/phantomwalk/paper/figures/fcc/fcc.png index 8ffb2493937eb6b662fedbbe68bac75b29452bcb..67e60c47ed52763b95bf4f9c14bb4dc7199bf0fe 100644 GIT binary patch literal 37342 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

^J$?JPZinKBEQewOH8~`Z$jI)! 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 From 57f970dfac801fefda5355f4f226bcb506a4aff7 Mon Sep 17 00:00:00 2001 From: charliegiu Date: Wed, 4 Nov 2026 20:34:50 -0700 Subject: [PATCH 11/12] add graph for energy dissipation at various densities --- .../paper/figures/densitites/densities.ipynb | 3281 +++++++++++++++++ .../paper/figures/densitites/densities.svg | 2481 +++++++++++++ phantomwalk/paper/figures/fcc/fcc.ipynb | 40 +- 3 files changed, 5779 insertions(+), 23 deletions(-) create mode 100644 phantomwalk/paper/figures/densitites/densities.ipynb create mode 100644 phantomwalk/paper/figures/densitites/densities.svg diff --git a/phantomwalk/paper/figures/densitites/densities.ipynb b/phantomwalk/paper/figures/densitites/densities.ipynb new file mode 100644 index 0000000..3c9c885 --- /dev/null +++ b/phantomwalk/paper/figures/densitites/densities.ipynb @@ -0,0 +1,3281 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "a5f58405-3c69-4489-8284-82be66f3a7a9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 99.45; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 125.16; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 135.87; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 137.84; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 147.81; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 160.14; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 171.57; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 180.21; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 188.88; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 196.4; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 202.83; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 208.65; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 213.83; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 218.78; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 222.95; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 226.85; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 230.12; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 233.14; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 1015.34; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 1106.82; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1561.98; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 100.24; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 123.45; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 136.15; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 144.04; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 153.63; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 165.84; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 176.93; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 185.75; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 194.17; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 201.61; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 207.96; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 213.39; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 217.68; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 222.61; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 225.76; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 229.85; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 233.06; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 236.47; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 910.27; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 1057.15; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1515.43; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 102.83; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 125.96; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 138.44; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 145.82; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 154.92; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 167.19; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 178.28; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 187.32; ETA: 0.0 minutes\n", + "Step 495 of 1000; TPS: 195.81; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 203.09; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 209.47; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 215.8; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 220.59; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 225.61; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 229.28; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 233.14; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 236.37; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 239.61; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 962.77; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 1067.07; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1539.12; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 97.98; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 123.26; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 136.53; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 144.1; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 154.18; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 166.49; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 178.02; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 186.36; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 194.56; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 198.87; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 203.8; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 208.05; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 210.9; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 214.01; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 217.35; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 219.83; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 222.47; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 224.38; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 841.67; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 930.8; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1330.45; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 98.92; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 121.61; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 133.92; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 138.79; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 147.06; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 159.5; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 170.6; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 179.54; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 188.02; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 194.97; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 200.85; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 206.46; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 210.67; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 214.52; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 217.72; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 220.98; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 224.5; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 227.06; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 944.62; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 1007.27; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1446.39; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 82.07; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 100.33; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 111.67; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 125.54; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 138.88; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 149.94; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 157.74; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 165.67; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 172.28; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 178.07; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 182.2; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 186.29; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 189.75; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 193.1; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 197.34; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 200.97; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 204.96; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 208.62; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 916.68; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 1009.39; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1330.44; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 89.15; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 109.31; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 119.04; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 130.73; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 143.1; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 152.54; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 159.79; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 165.63; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 170.82; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 175.69; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 180.26; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 183.75; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 187.58; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 190.15; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 194.47; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 197.76; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 202.02; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 205.33; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 807.12; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 891.7; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1170.9; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 89.04; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 107.08; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 119.24; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 133.55; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 146.87; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 157.72; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 166.15; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 173.46; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 179.15; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 184.4; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 189.01; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 193.18; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 196.89; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 200.03; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 204.11; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 207.77; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 211.74; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 215.6; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 822.16; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 911.27; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1187.02; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 91.31; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 110.28; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 122.02; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 136.26; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 149.9; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 160.85; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 169.97; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 175.18; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 181.46; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 186.94; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 191.4; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 195.61; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 199.5; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 199.39; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 203.78; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 207.54; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 211.87; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 216.04; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 923.17; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 997.46; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1319.68; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 88.92; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 108.38; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 120.58; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 135.08; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 148.39; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 159.44; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 168.03; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 175.38; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 181.88; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 187.18; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 191.66; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 195.78; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 199.44; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 202.55; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 206.89; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 210.24; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 214.48; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 218.43; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 858.45; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 959.83; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1246.47; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 83.18; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 101.28; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 122.08; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 137.32; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 148.49; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 156.98; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 164.05; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 170.37; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 176.58; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 182.88; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 189.43; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 194.92; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 199.72; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 204.4; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 208.06; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 211.65; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 214.87; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 217.93; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 748.9; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 861.8; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1087.12; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 84.6; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 101.19; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 122.63; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 137.95; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 148.88; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 157.61; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 163.98; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 170.31; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 177.01; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 183.52; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 190.13; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 195.98; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 201.16; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 205.67; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 209.82; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 213.46; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 216.97; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 220.27; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 778.41; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 883.56; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1119.79; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 83.46; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 101.61; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 122.76; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 137.65; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 148.65; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 157.47; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 163.83; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 170.56; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 177.22; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 183.22; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 189.55; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 195.48; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 200.57; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 205.38; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 209.24; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 213.18; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 216.6; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 219.8; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 786.23; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 876.13; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1114.41; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 83.55; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 101.12; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 122.69; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 138.11; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 148.9; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 157.89; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 164.38; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 170.97; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 177.53; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 183.98; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 190.75; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 193.47; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 198.35; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 203.07; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 207.45; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 211.63; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 215.04; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 218.46; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 814.67; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 901.84; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1140.77; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 84.24; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 102.26; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 123.14; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 138.3; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 149.74; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 157.65; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 163.85; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 170.06; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 176.53; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 182.94; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 189.29; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 194.96; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 200.01; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 204.76; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 208.93; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 212.95; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 216.47; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 219.86; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 771.7; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 865.44; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 1112.03; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 1.002750039100647\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 75.81; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 97.74; ETA: 0.2 minutes\n", + "Step 165 of 1000; TPS: 116.16; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 128.96; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 138.67; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 148.08; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 157.59; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 164.59; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 171.6; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 177.37; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 182.8; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 188.55; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 193.57; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 198.11; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 202.71; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 206.57; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 210.66; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 214.6; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 496.31; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 492.34; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 489.06; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.9817500114440918\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 76.71; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 99.3; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 117.7; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 130.2; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 140.24; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 149.88; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 159.04; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 166.06; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 173.17; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 179.12; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 184.77; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 190.67; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 195.35; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 200.1; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 204.95; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 208.73; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 213.42; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 217.34; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 517.63; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 498.41; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 497.07; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.9817500114440918\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 77.5; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 99.29; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 117.63; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 130.09; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 140.09; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 150.06; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 158.75; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 166.52; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 172.73; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 179.01; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 184.48; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 190.6; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 195.37; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 200.35; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 204.66; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 208.75; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 213.24; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 217.45; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 469.85; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 480.2; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 496.79; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.9817500114440918\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 70.62; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 93.84; ETA: 0.2 minutes\n", + "Step 165 of 1000; TPS: 112.49; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 126.22; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 136.87; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 146.68; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 156.07; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 163.4; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 170.65; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 177.08; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 183.0; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 189.2; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 194.56; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 199.41; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 204.22; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 208.19; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 212.83; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 216.66; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 500.86; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 505.96; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 504.62; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.9817500114440918\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 77.27; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 99.53; ETA: 0.1 minutes\n", + "Step 165 of 1000; TPS: 118.01; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 130.92; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 141.21; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 150.58; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 159.68; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 166.95; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 173.29; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 179.61; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 185.14; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 190.17; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 194.66; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 199.03; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 203.32; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 206.95; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 211.18; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 215.11; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 494.37; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 503.42; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 496.17; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.9817500114440918\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 70.86; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 95.06; ETA: 0.2 minutes\n", + "Step 165 of 1000; TPS: 110.62; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 124.74; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 136.0; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 146.57; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 156.96; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 167.24; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 176.69; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 186.0; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 193.92; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 202.78; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 210.44; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 217.48; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 223.52; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 230.07; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 236.21; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 243.07; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 405.89; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 430.26; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 437.75; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.8452500104904175\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 70.35; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 94.51; ETA: 0.2 minutes\n", + "Step 165 of 1000; TPS: 110.29; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 124.22; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 136.16; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 147.19; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 157.63; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 168.0; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 177.19; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 186.62; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 194.46; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 203.15; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 210.97; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 217.75; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 223.84; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 230.26; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 236.49; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 243.12; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 418.6; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 433.42; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 440.51; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.8452500104904175\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 69.94; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 89.53; ETA: 0.2 minutes\n", + "Step 165 of 1000; TPS: 104.18; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 118.73; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 130.83; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 141.03; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 151.84; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 161.92; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 171.52; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 180.46; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 188.38; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 196.67; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 204.61; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 211.18; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 217.44; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 223.6; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 229.79; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 236.65; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 417.28; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 427.34; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 437.7; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.8452500104904175\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 70.54; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 94.37; ETA: 0.2 minutes\n", + "Step 165 of 1000; TPS: 109.85; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 124.1; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 134.89; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 145.14; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 155.53; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 165.61; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 175.31; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 184.6; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 192.62; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 201.1; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 208.63; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 215.38; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 221.55; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 227.69; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 233.73; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 239.92; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 417.98; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 427.96; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 437.69; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.8452500104904175\n", + "(10000, 3)\n", + "Initializing simulation state from a gsd.hoomd.Frame.\n", + "Step 55 of 1000; TPS: 71.85; ETA: 0.2 minutes\n", + "Step 110 of 1000; TPS: 95.74; ETA: 0.2 minutes\n", + "Step 165 of 1000; TPS: 110.62; ETA: 0.1 minutes\n", + "Step 220 of 1000; TPS: 125.01; ETA: 0.1 minutes\n", + "Step 275 of 1000; TPS: 136.78; ETA: 0.1 minutes\n", + "Step 330 of 1000; TPS: 147.75; ETA: 0.1 minutes\n", + "Step 385 of 1000; TPS: 158.14; ETA: 0.1 minutes\n", + "Step 440 of 1000; TPS: 168.32; ETA: 0.1 minutes\n", + "Step 495 of 1000; TPS: 177.75; ETA: 0.0 minutes\n", + "Step 550 of 1000; TPS: 187.0; ETA: 0.0 minutes\n", + "Step 605 of 1000; TPS: 194.92; ETA: 0.0 minutes\n", + "Step 660 of 1000; TPS: 203.39; ETA: 0.0 minutes\n", + "Step 715 of 1000; TPS: 211.01; ETA: 0.0 minutes\n", + "Step 770 of 1000; TPS: 217.76; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 223.58; ETA: 0.0 minutes\n", + "Step 880 of 1000; TPS: 229.98; ETA: 0.0 minutes\n", + "Step 935 of 1000; TPS: 236.13; ETA: 0.0 minutes\n", + "Step 990 of 1000; TPS: 243.03; ETA: 0.0 minutes\n", + "Step 45 of 200; TPS: 423.82; ETA: 0.0 minutes\n", + "Step 100 of 200; TPS: 438.15; ETA: 0.0 minutes\n", + "Step 155 of 200; TPS: 439.55; ETA: 0.0 minutes\n", + "The closest particles after DPD + FIRE are: 0.8452500104904175\n" + ] + } + ], + "source": [ + "from flowermd.library import LJChain, RandomWalk, PhantomWalk\n", + "import unyt as u\n", + "from flowermd.library.forcefields import DPD\n", + "import hoomd\n", + "\n", + "npoly = 100 # number of chain\n", + "nmono = 100 # number of beads per chain\n", + "densities = [0.6, 0.8, 1.0, 1.2, 1.4]\n", + "densities_strings = [str(x).replace(\".\", \"_\") for x in densities]\n", + "runs_per_density = 5\n", + "\n", + "A = 250000\n", + "gamma = 1500\n", + "kT = 1.0\n", + "r_cut = 1.01\n", + "bond_k = 250000\n", + "bond_r0 = 1.0\n", + "\n", + "log_write_freq = 10\n", + "n_steps_dpd = 1000\n", + "n_steps_fire = 200\n", + "\n", + "for density in densities:\n", + " for n in range(runs_per_density):\n", + " molecules = LJChain(\n", + " num_mols=npoly,\n", + " lengths=nmono,\n", + " bead_sequence=[\"_A\"],\n", + " bead_mass={\"_A\": 1.0},\n", + " bond_lengths={\"_A-_A\": 1.0},\n", + " identify_connections=False,\n", + " )\n", + " \n", + " ref_length = 1.0 * u.Unit(\"nm\")\n", + " ref_mass = 1.0 * u.Unit(\"g/mol\")\n", + " ref_energy = 1.0 * u.Unit(\"kcal / mol\")\n", + " ref_values_dict = {\"length\": ref_length, \"mass\": ref_mass, \"energy\": ref_energy}\n", + " \n", + " system = RandomWalk(\n", + " molecules=molecules,\n", + " density=density * u.Unit(\"nm**-3\"),\n", + " bond_length=1.0,\n", + " base_units=ref_values_dict,\n", + " )\n", + " \n", + " dpd_ff = DPD(\n", + " A=A, gamma=gamma, kT=kT, r_cut=r_cut, bond_k=bond_k, bond_r0=bond_r0\n", + " )\n", + " \n", + " sim = PhantomWalk(\n", + " initial_state=system.hoomd_snapshot,\n", + " forcefield=dpd_ff.hoomd_forces,\n", + " gsd_write_freq=100,\n", + " log_write_freq=log_write_freq,\n", + " n_steps_dpd=n_steps_dpd,\n", + " n_steps_fire=n_steps_fire,\n", + " log_file_name=f\"log_density{density}_run{n}.txt\",\n", + " gsd_file_name=f\"trajectory_density{density}_run{n}.gsd\"\n", + " )\n", + " \n", + " for writer in sim.operations.writers:\n", + " if isinstance(writer, hoomd.write.GSD):\n", + " writer.flush()" + ] + }, + { + "cell_type": "markdown", + "id": "e45ce291-fee2-4d3f-96b2-f6bf003db593", + "metadata": {}, + "source": [ + "from cmeutils.visualize import FresnelGSD\n", + "import PIL\n", + "\n", + "for n, density in enumerate(densities):\n", + " sim_visualizer = FresnelGSD(\n", + " gsd_file=f\"trajectory{n}.gsd\", frame=-1, view_axis=(1, 1, 1)\n", + " )\n", + " scene = sim_visualizer.view()\n", + " image = PIL.Image.fromarray(scene[:], mode=\"RGBA\")\n", + " image.save(f\"densities{n}.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "990b4f59-f461-43b7-a949-2dc4c9613630", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2026-11-04T20:31:46.708260\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.11.2, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib\n", + "import matplotlib_inline\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "matplotlib.style.use(\"default\")\n", + "matplotlib_inline.backend_inline.set_matplotlib_formats(\"svg\")\n", + "\n", + "slice_idx = 10\n", + "num_elements = npoly*nmono\n", + "\n", + "fig, ax = plt.subplots()\n", + "\n", + "markers = [\"p\", \"o\", \"s\", \"D\", \"^\"]\n", + "\n", + "for i, density in enumerate(densities):\n", + " pairs = []\n", + " for n in range(runs_per_density):\n", + " log = np.genfromtxt(f\"log_density{density}_run{n}.txt\", names=True)\n", + " pairs.append(log[\"mdpairDPDenergy\"])\n", + " \n", + " pairs_arr = np.array(pairs)\n", + " sliced_pairs = pairs_arr[:, slice_idx:] / num_elements\n", + " \n", + " mean_series = np.mean(sliced_pairs, axis=0)\n", + " x_values = np.arange(slice_idx, pairs_arr.shape[1])\n", + " std_err = np.std(sliced_pairs, axis=0, ddof=1) / np.sqrt(runs_per_density)\n", + " \n", + " ax.errorbar(\n", + " x_values,\n", + " mean_series,\n", + " yerr=std_err,\n", + " label=f\"density = {density}\",\n", + " marker=markers[i],\n", + " markevery=20,\n", + " errorevery=20,\n", + " markersize=5,\n", + " capsize=5,\n", + " capthick=1,\n", + " elinewidth=1,\n", + " )\n", + "\n", + "first_fire_step = n_steps_dpd/log_write_freq\n", + "ax.vlines(x=first_fire_step, ymin=0, ymax=max(pairs[0][slice_idx:]/num_elements), color=\"orange\", linestyle=\"--\", label=f\"First FIRE Step (Step {first_fire_step})\")\n", + "plt.suptitle(f\"DPD Pair Energy ({runs_per_density} runs per density)\")\n", + "ax.set_title(fr\"{npoly} {nmono}-mers, $k_b = {bond_k}$, $A = {A}$, $r_{{cut}} = {r_cut}$\")\n", + "plt.xlabel(\"Frame (time/log_freq)\")\n", + "plt.ylabel(\"Energy/N\")\n", + "ax.legend()\n", + "plt.savefig(\"densities.svg\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dd35c912-3267-46fe-9fe2-e6c88c33f983", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.12.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/phantomwalk/paper/figures/densitites/densities.svg b/phantomwalk/paper/figures/densitites/densities.svg new file mode 100644 index 0000000..3afc3cc --- /dev/null +++ b/phantomwalk/paper/figures/densitites/densities.svg @@ -0,0 +1,2481 @@ + + + + + + + + 2026-11-04T20:32:33.983628 + image/svg+xml + + + Matplotlib v3.11.2, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phantomwalk/paper/figures/fcc/fcc.ipynb b/phantomwalk/paper/figures/fcc/fcc.ipynb index 85fd5a2..046a7ee 100644 --- a/phantomwalk/paper/figures/fcc/fcc.ipynb +++ b/phantomwalk/paper/figures/fcc/fcc.ipynb @@ -13,21 +13,21 @@ "(32, 3)\n", "Box: Lx=2.831242, Ly=2.831242, Lz=2.831242, xy=0.000000, xz=0.000000, yz=0.000000, \n", "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 75 of 1000; TPS: 366.95; ETA: 0.0 minutes\n", - "Step 150 of 1000; TPS: 725.99; ETA: 0.0 minutes\n", - "Step 225 of 1000; TPS: 1083.57; ETA: 0.0 minutes\n", - "Step 300 of 1000; TPS: 1437.56; ETA: 0.0 minutes\n", - "Step 375 of 1000; TPS: 1791.24; ETA: 0.0 minutes\n", - "Step 450 of 1000; TPS: 2140.47; ETA: 0.0 minutes\n", - "Step 525 of 1000; TPS: 2489.43; ETA: 0.0 minutes\n", - "Step 600 of 1000; TPS: 2835.61; ETA: 0.0 minutes\n", - "Step 675 of 1000; TPS: 3181.16; ETA: 0.0 minutes\n", - "Step 750 of 1000; TPS: 3521.33; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 3861.4; ETA: 0.0 minutes\n", - "Step 900 of 1000; TPS: 4197.53; ETA: 0.0 minutes\n", - "Step 975 of 1000; TPS: 4532.92; ETA: 0.0 minutes\n", - "Step 50 of 200; TPS: 95057.03; ETA: 0.0 minutes\n", - "Step 125 of 200; TPS: 97809.08; ETA: 0.0 minutes\n", + "Step 75 of 1000; TPS: 303.22; ETA: 0.1 minutes\n", + "Step 150 of 1000; TPS: 603.06; ETA: 0.0 minutes\n", + "Step 225 of 1000; TPS: 898.85; ETA: 0.0 minutes\n", + "Step 300 of 1000; TPS: 1191.28; ETA: 0.0 minutes\n", + "Step 375 of 1000; TPS: 1485.55; ETA: 0.0 minutes\n", + "Step 450 of 1000; TPS: 1776.96; ETA: 0.0 minutes\n", + "Step 525 of 1000; TPS: 2068.38; ETA: 0.0 minutes\n", + "Step 600 of 1000; TPS: 2358.0; ETA: 0.0 minutes\n", + "Step 675 of 1000; TPS: 2647.45; ETA: 0.0 minutes\n", + "Step 750 of 1000; TPS: 2933.84; ETA: 0.0 minutes\n", + "Step 825 of 1000; TPS: 3220.68; ETA: 0.0 minutes\n", + "Step 900 of 1000; TPS: 3497.05; ETA: 0.0 minutes\n", + "Step 975 of 1000; TPS: 3781.63; ETA: 0.0 minutes\n", + "Step 50 of 200; TPS: 91911.76; ETA: 0.0 minutes\n", + "Step 125 of 200; TPS: 109841.83; ETA: 0.0 minutes\n", "The closest particles after DPD + FIRE are: 0.918749988079071\n" ] } @@ -82,13 +82,7 @@ "\n", "for writer in sim.operations.writers:\n", " if isinstance(writer, hoomd.write.GSD):\n", - " writer.flush()\n", - "\n", - "#sim_visualizer = FresnelGSD(\n", - "# gsd_file=\"trajectory.gsd\", frame=-1, view_axis=(1, 1, 1)\n", - "#)\n", - "#image = PIL.Image.fromarray(sim_visualizer.view()[:], mode=\"RGBA\")\n", - "#image.save(\"output.png\")" + " writer.flush()" ] }, { @@ -101,7 +95,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AACRpUlEQVR4nO29C3Ac5Zku/HVPT0+PZiSNbrZky7ZsZDB3J5iEJGbX+Q+cOLvOLpyQWjhLakktqZBaqIVKqCWVUNktNkVSJJXsn6TInuRUyJ+kYA/sgSxswgYITnDAgAkGTGzj+13WxbqNND0zffnrefv7Wt+05iLbsi2Nv0eekjwazfRMdz/9vu/3vM/LmIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoLCbECblWdRUJhCO2PsHxhjo4yxRxhjh9WHo6CgMNeQYYz9kDHmS7dhxthDjLHOc71xCgoKCgK3c3LyK9wOMcY2MMYM9ZEpKCicK/Qwxl6vQlTR20uMsdVqdykoKJzt9O/HjLHcSZCVfHuOMdatdpmCgsKZLqg/wBgbOEWikm8D/LkstcsUFBRmE6g93VSjTnWqN9S3bla7S0FBYTbQyWtP1UinyNO8B8r87iuMsV/NME1ETUxBQUHhpIEa07c5GVUjKkRI1/C/+WKZxyAyY/z7OzVICzWxx3mNTEFBQWFGuGMG6V+OE5osVbipzOPwXCzymGMzSBPXq32loKBQDRtmuPL3OC/AR3FnmcfeUOZxILmHZ1iYVzIIBQWFEvTOUE+FWtS6GgLS6N8gTawE1Ky2z+B1H2WMXab2mYLC+Y1OTga1CGM7J6paSvWvlPnb22awHet4GlirsH+fqm8pKJx/gPbp1hnoqUAi/3gSJHHnDGpY1bbpoRls0zgnRtXmo6BwHgA1pTdnuFpXrk5VDQ+VeS6Qy8nA4k3U1VYncXuaMXbdST63goLCPKpT1SKCIk//1p7iazw4w6L7TLB2BjII3J5UankFhfrCfTOQKQxwxfnppFp3l3le3Hc6uHWGaSLIUrX5KCjMYyC62VfjZB/mkVd6logx+vyoa50uDJ5a1koTd6k2HwWF+YeZyAWKvJY1m64JD5ykrOFksYpLK2oR1694fUsV5hUU5jC6+areTGQKa8/ACX3HLBTdZ4KbZ6jfevoUFg4UFBTOMDKcqGrVqY6dYUuXm89QSljNQWJ8BpEk6lsq2lJQmANYN4PevByXHJzpovR3T0OHdaqw+OuOz7A/URHXPIaamjN/cRmPlmrJBjYzxj7NGNuN/8S1uLU0vXRtY6Kxp8lqusAyrE7TMNPDk8P/WXALg/uH928aKAyMnMaK3k8j993FGPseOzufx1cld4hKeIoxdj9jbAdjzDkL26Uwi1CENT/bab49A9O7rYyxLzHGntU13epKdK1d0bbiu01WU09DvMEyDZPF9TiL6TG66ZpON8dzRiYLk1sPjhz8/tZjW58Zc8fsk9i2L/JITsYtjLHH2Nlt4H54BosJTzDGPsMYy56l7VKYBSjCmj8w+Mn4wxqF5D7G2D/xmYB2KpZafUHmgicXpBf0pM00S8QTzIyZLB6LTxGWFhCWpmnBjWnMZz4ruIWRHf077nrhwAs/m+E23sHJQgZI8+vs7CLN9V+IQKthkDF2DydUFW3NA+jnegMUZoTruCPnkzXIClHDcsbYDzSmOc1G8+0rW1a+CLJqMBsCsjJMuoGwjJgRRlixWIz+b+gGfcfvU2Yqs3rR6h/feOGNM13pK9dzmDoH+xhR0z8zxjpqRHftPIV9XTIhVJjDUIQ1t9HN3RSeq2HrspExtpKnX7bGNKMt3vbVJU1LHm5uaM4kzAQz42ZISGEaqOshWcnEhe9EXLqBaMy4qOOiB25/3+3PLTAX1BKXlotSJti5wyD/TD7EybwSVvPP+EXG2JqzuH0KJwlFWHMTad58vK9GrWqE12E+wYvqRBgLEgsebmlo+UpTqsmwTIuiJaR9YeqHL00L6lZ6cIsZMWaYBoubcWbEDfq/TGgdqY7r/uLSvwB5VkO5Fbi5UCPazInr+irbk+YXBURbX5kl5b/CLEMR1tzDrVyBflOVJXgUwu/l6d8j8knYGm+9M51I355MJoO0TzNKyEq+EWnFdCKqRCrBEukEs5osZjVb9N1MmkRcIvrqSHds+B8X/Y/7knqy0naVu38hmxsAmT/P08TP8s+wEh6QLhaqP3EOQRHW3MFaTlQ/5c4KlfAMJ6pv8ggrRFyLdzcnmr8ct+IsEUuwGIsF0RSPqERBXXynCCoeY/GGOIuZMSIvLMOI+0FguOlGEIWB/Hrbe798Sfslldw/s3MsJSwHENWPGGMXcwKrVt96lE8MUm0+cwSKsM49ejlJ1RrjfpjXYj7BVwKnoc1s+3vTMjsRPYGswkiKfwnQzyAmRFcJg8iorNQSIVMiiL6QFoLozJiZfv/i99dafYtu91zEfp4ifoinjJWwhte3ICVR06rPMRRhnft2mnd4GlgJEDh+lEcEFU8snelWKpG6FfUnzQ/jKvodiEYmKkgWKMoygpTQl74A3/dLSCuWiNFN04PorC3Vtn5l08pyJ69dofA9l7FZuhBU21a0GL2i3E7PLRRhnbv07xhXZleqkdhcT/UhvgpYtXjdEm+5NZ6IdwqiEeQDhEQk3SciLLqvTGRF9OUHN9wXT8YpNQTpxbSYcfWSq78wwxrWfBmOilR7CVflV9JkgaQf4P5cyu30HEAR1tlP/97k6V+1Yu4jvE6FCGxGbTLJePK/IbryvYBx5BRQEFhIQIKQOFmJ++VbyG38uxYLojEK0jSNtTa0ljthy53o80mQafNWoq4aMogMt7B56Qy5XihUgCKss0dUj/P0r1qdajdP/z5TqU5VCYl4IrA15lGS53tTBCTISk798M8rva8kLWTTCQykJZCMJ3vL6LLKRYHL2PwDUsNP8TRxW4XHgKTWctJCcV5Nqz4LUIR15vEgJ6qbqkRVg3yp/WKe/p0UYlosbRhGkA5ysgFhub7LXM8lwpEJDD/T793gdxVv4kv8zKM3/Iz+xPZUO/oaZZTTLs1nPRPSxKs5eVHzeAWIadaocykZxBmEIqwzh5u5CPG+KgcxIpKf8RTkR6eaPsW1eCcK4jJAVERM+OJkJYiKfvY85rkefY9GWPibaIQl/lYmPsuwMjMgpyNsfsPm6SGI6wczsLnZdRpDPBRqQBHW7EMsgz9ao80DGqDLufXLadV5HN8ZwZqfXFMX0RUIKSQv+Yb7HZc5RadmhEWk5waPD8mLeeUIq9wqYb3Ud0Z4fWtlDf1WN08TX+SWzgqzCEVYs4dubq3yYo0VJCFT+DjXAp02QFae59lynd3xHFb0igFxCfISqSD/GSlhMV9kjuNUjMbE/0FWuMkR1sDEwO4Z1LDqhbAYv7Ds5vvu6hr7bx1fYIF7hapvzRIUYZ0+LG6rsp37QaVrOAi8j9epZm31zPGdwShhgVCKbpFuIChBWiFZ8Z9BVgW7QORFaaL0FdbCHJflJ/PhY/BceSc/MlmcnEmf4KmaAc5lYN9t4TXHe6q8R/nYgN2Nqm+dJhRhnR6uk66i1YrLj3GND5wuT8YQb0bwme8Ui8UdssMZyIYIywtuiLhwC4lLfHdcViwUWX4iT+khSEmkko7r0H32hE2RmCA53HLF3OEjuSNRoWWmTlYJZwrsy+9w4qrmqSVMF1HfUm4QpwFFWKeGHl6neK5GnWIjF37ecqYjjVwx918gH2ikhDTB8R1EQjDiI/Ii0nKdEuIhEgNpFYtETCAuRFP0czbPcuO5gKzcKaLD3/SN98FqOIpyJ+xxVv/o4/sYF6VNNYSnr/NjZz6vnp4zKMI6OXRy65E3a6wEHeZaqutr9KnNGgbyA18vFopZ2qMiyvJ9Zjs2KzgFIi0iJ0FSke8imirkC6yQ4ze7QPfR76THFt2is3Ng50/KbEa6zmtYMyGua7lEpZqObi1Xy0M1r4jrJKAIa+a4jxPVAzWKqPfylaRHzqbK22OenbWzP0IkBImDr0HpGawWgrQQYYG0KNrypmpbIRFxUqLv5W78d/i78fz44d1ju8vpkrLzqPn5TEJ0KvxzlWPA4he/7byXVNW3ZgBFWLVxA1/5gwA0KpSUT9Qf8FrGN89EnWomGMwPfqOQK4ygUC6anAHbtVnOyYWRlqhthalihKzEfaL2Rd9dhx6fK+bsXQO74NNeDuXe9/nqcGDzmqWQQVRLE3/ML4bKprkGFGFVr1M9xH3Uq9kTb+JpwOe5ZOGcwfGdvonCxM+cghOkhZy0kBpOFCfYpDNJ0RbVtRxOXIi8vEJIVDJZif+L6Ax/d2jk0A/e7H+zUp9duQL7SbUY1SGEjc3Hq0SbBq+FvsjrovOlYfys43yqL8wUGZ723Voj9RPtNM/MpQbf4/njd2lMa0/5qZthyodLElpqEHVlC9lQECrrrki6oLslrqQlzdNciJrNZ3f/4egf/qnoFyu933Kq9hlHm01GU+eSpiU3ZKzMlc1W8xorbnViwo+u6U6umNs2nh//7UB2YNOO4R1b8l5+znzmM8TzPE3cwCOqcseWJa08f41H7XPBYnrOQI35KiVvHCz/UCOicviB9KW5ejDFtFj7gsSCxxNGYh2cQ6mmJRqYmcbS8TSal8mVlGyUMXACVsr6dMIS5DZqj2556eBL1xb8gl2jzvegtB3M1Mx7lzQu2bowvfDPNU3D5zWRMBLNJyZP/L5vvG/LQH5g0GBG58XtFz/U2tC6oSnRlE4Y0nbpBm0Ptg3AdtmOvf949vjPXjv42rf68n3zUeeV4dZC0GZVww5OXDMds1b3UIQ15abwbX71qwZ4JX1jPhSSQVqt8dZvJ43krWS8h15D7G2fEQGAFBqMhhLSCiMsPSAsIivPY8O54Sde73v9Fo95taIaNP9+F+R3YeZCtqhpEWtMNLIoAYF8hJlg0S32ZfPZ9onChIHHiceKmYmCsGQfekkYO7hjYMe9z+1/DkXu+QgxrXpDjaL7s7zksJ+d5zjfCQu+3V/mJ1q19Hg379jHNOV5hXQsfXPaSH/Z0A3yYZddRUEMRFzxhmCyjjRUlQtLR4Zzw996b/Q9rHbVhMa0O7usru8ua1nGmq1mlk6kaWgrbmIGIsiMJvVwAhLASuVkcZK0YyCrcBwZ3x76zolUBqK/49njTzy+7fFbcl5uvqWJssyh1sxJxiOtL82HC+aZwvlKWAYnqVo6GHgh/RtXM8/J9G8m0JmeaYg13G7FrL+NaTESulJPIC/IgxD4DEIiBM/39k8UJ34y4ox80/XdGb3vmBbrXJZa9lJnU2cvyCppJtEcHZKVSDtpwIVcK+MRE4BtwaokFgbE0AsxP1F+PJGW1OiN9zI4Mfj8z9/6+cfnMWmJY/LvaxTdB3kTNhY+5ut7PWWcb4Rl8PrUT6tIFATu55YvdbPKpTEtE9fi6zRNS8e1+CcRRfnMz7i+a3jM2+/67u953WTzyRTL41q8p6uh65Wupq7OTEOG0ZTpWGIqupKiJTlqihIWQI3Wnsvybj4gLaSEGJYRC75jGAbzGPPdwJ9L1ObwNwMTA8/+/K2ff2IekxbjxyVavdbXSBMPc+Iq13FQtzifCGsVX52ppnVxeNp376kY6Z2PwGixzmTniy2plt62dBull8lYsqQWJU+cJgLiA1pF5CRsmmW7ZhBQ0S/SzEQzYbJ4Ih5O7sHfgLDcvMsg4RDkBQL+w+E/fPrZfc/WQ5F6Lc8Aqi0AMR5pfX4eDPuYFZwPOiyLe1PVEuYJmQJsQxRZzRALrYWPJ5PJ3mQiSZETpX1iSKsoluNLTJmO6YzmJjZKQ1ubLZp/SBOn+dBWEBsV3uMxGjUmDApFDQsDMcy0GYwgM4KVULz+5V2Xf3dhYmE9tLtskvRbfTXcTge4ar7ubWzqnbBuncEE30F+hYLty3xdbTonaIu33Zm0ktckzERALkj1BDkxPg8RKR8fXAHCwvQdMVGaiuh8+rRpmURcYk6iqGExl79YubmJPmOGZbB4ikdfuobILrP+ovVw/qwHOHyFcDmfoJSt8tgH+BgydGbULfQ6rVOt4TuvVq3qe9ye+Afn88rLqSCmxTLNyeYHkLLF/CmiEgiL4+JnTQvmG0LMKlng8B8CuYWuU+RFU6g5abEiI7dTgXJjyZAu6nFekNc01p5qX7/YWlxP0YbNJyhdzo9Vu0rZ40nuCFGXbT71RljdM9xhT/EeLxQt53OB9pyh2Wi+wUyYGTGwNZwwzYlKjBMD6J6YRlEVUDJKLDIHkaKkVIKiLiI5LcaKE8WSv4kOfcUXIi0hezANs31JZkk92hPv59nASm4gWAlruIXNT+utl1Ovo6jqPt75Xk38eZjv8FtqTEFRqAJMmc4kMw8SAVGf9ZSSHhCTpUsGuCItRB1KIqlKERPqU4iyRMTkO3xFUJriIxfqxd+Io1lnurGibcVf1/FOPMxrrdfX6E8UJZF/rJc2vHohrFU1NFUIob8+g5BaYQZI6Ike0zQ7RcpH7hCRydLywNbwPvmrTMQk34+ISUgeSMjqulMkJc9NFASGSA4tSPz12lPttboW6gHP8/rWN6tkCgYXR9dFQ3VdsC4Pe6u9l+v5qstJIxVLZVZkVmzQmGY3WU2r7KK9e7I4uR+e5oeyh3YXfFgjnF9I6IleuT8xHEzB+w5LhrdWm3copXZy76JwmigZqlF0mGEYpSTIW43EzzKZeb5nW7pl2J5d7/vH4TKcd7lsp5r+cN5nFfVCWLWuHi/xFcBvzMQCxtTMzEUtF/3DwsaFt6YT6W4otqElMnUzVGoDPvPt0dzos/uH939/99DuzUPFoXmrhj8ZNMQbPoZ0EPonATE6TCjoS2YgSqPF8PmVnTQt1bxKSEiMGnMCdwkU98X3ksdBhyUNhjUNsyehJ84HwurmQtNaEWVdGATWC2HVUq0Dt/Gd+n2eFpbVtixLLXtgcfPiO1qSLe0gKituTWvclRwNrJSZuqGrqeuG1YtW737zyJufee34a6cUyc0nxGPxVVRb4iQjpkzLY8TwWclRlphrCPlBOcLyNI+X74M6VzjkVURx7lTkBtBPmk/ERfdDPComXDMSnjoJPWEtTy9f3ZJsuczzvRHY1DieMzJqj+4fsof6sm52PpcG0tzt4Qsz1F/VxappvRDWTCUJ7bw7/nN8PBMmnRBMzbysp7Hn8c6mzlVwGEAvnHAykN0MSggLGiJeBozH4r3Xrrj2xeVty3/wm92/+dJAYaBuoy3f97NyRCR6AIm0QDL6VFSF+3Q/qEEhrSO7m5hWMqS1JFoCNE5YUoQmnhO/oyjLDwgOfw8Uc8VgdqLnwl2CnZg8YV2z9JpjSTNpifYgYVPD+yVHxvJjGweyA/+5d2jvtq6mrk8mjAQuQL2wwXE9ty9XzO0ZzY1u3T28e/O4Oz6XyO02PmX6ZASy8z4drKfWnFv5Eq6M7Ax2KNLDTyX1pNWV6nqus7Ez05RsCnrhjASlgLLVSbQPTuiOqDjMTzicSJOFyd2/ePcXHzo4ebAu2yW6kl0PtbW0fZGiGqSFPqOewUazMfzsZLInwkd7TsxgVspicTM+raE5bGzmhfZCtsCcvBOkmZ7HinqRJZuTpU3QXEKBxxUni2xwfJDtP7GfXg8tQqYR9DIKJwrZKUJIMATZThQmaN9Ni6I1Da9vHxk78p09Q3t+/u6Jd9EQfy4Xl35YYwAK49lDNOu4i+sO5zXqZZWwXKT4Iz5ia0uNA+BNK2a90pRsylgJiw5ycgnQpsippM0ENSwjFtzQNoJ2klgsuOGkiBksbaV7P77q408uMBfUQ4vINBScwrslNSdp0jS+i2GrcopIY8Jcl6bxYA6iSPfKTZrGWDE8Jhz66k/9bTg70QkiNowjm8xOstf2v8a2H99O+49IMz7lrRW2+cSClh+68f5G/B5mhm0NbazJagpJTr4l40mrt633vutXXv/mpy7+1Hc7zI6zvV/T/IL8Sg2yGuRTxWH6F8V8NDqsW8K6oMx9r3LXgatruIMaw8VhY9/wPnZi4kRpa4lEVKK1BEQl98Lhqm81WnQftZvAqkUzWFuqbe36VethClh3yLrZjSAM2TcepCKGVQjikucfCuKiSdO5Asvn8vSzTFT4P2YiYjZiOGVajCHjfweCsrM2fc+N5djY+Bjb+N5G8qxPWSkiqrgxFdGJm7igRG8ycSEqS8VTYS9jaIsTC35vGqbR09Jz5y2rb9n1gYUfuOYs1qmO1bDsPsz92rp4H6xdr0X3eiGsPWXuk1eHvl6rV3C0OMq29m9lL+9/mY3ZY2G6IVIHIitEVEmD+uHwM6mxdY3630Ba1FbCLYlx0C9qWnTbht4NGFVeV3B8Z6RYKB6OFhRowIWbD0eIhcTFh6+KSIvIxw7IRwxtFUSE/8sTqOURZEWnSO4MNDsRf5+32XM7nmMuc4msEB2FNjaR1F3Ur4i4jCAyLhcdiwhLtAaVkBsntpSZ6vzI8o88/eFFH67lpHA6WMcjKlz0qkV0P+BaLNkfq32GF/V5h3ohrPYZXFF28+Gml1cbbtqf72e/3PNL9vbRt+kEFKA2ETNGdicEWbHNv+N3cB0IIy3dMC5ou+ALST1ZL4sbBNd3Rybzk09QWsgHt/KVOSKskknTYnyY+FlMn3ZdSvsQaYnBrfg/yKzksZ5DzynIS0z1wdSf3+75LdMMjSGVDxdF+C284PBal3CKgCCVouNGiyJk/EwXIKT4vHYV1rxMgyJn6peMTxEbbsl4sv0jPR95enX7anJynWW77pf4BJ1qz/0EHyuHzo2odOOiMo/fyeoA9UJYW08iBEbR9NoFiQXbGuONFZ/wzYE32S/++AuMtaKTEa0fOODLOQbILSJ0kKfiFGXh4Meq03Urrqu7KGukMPK/i3ZxmsATo8BEpCUTV5jaRUnM4T87ZQa3gqycPN34xOnw+5HRI6zACsw0TXhyTaXyWAjhK4kyaZGtDZwiGswgOub7E43T6F0U0XEYVYH4zBhdgJD240YWONxNAo8xDTO97oJ1Ty9LLatlbTwTdPJuje016lSb+IX3liqaQpRD6hL1QljlDpiKgkFd061MKrNqaftS1p3upgO+HMbdcfbM7mfYC++9wI6NHwtbP0p65IIfStTdIC2cEKIGtiSzpO762nJeblvWzj6C9E2OsuDJjqGtJbMP+YzDKCFResgJSNS/5MGteA7UpkSaKW65Yo7tHtpNnzO+wsUR4Q7BB1yEERYuHvGgP5EgN12j4VrTgui4cSo6xnO6tvC2CZwkRO0S34WAOGWmev70gj8NJwWdIjZwvzZ4WlWKxm2+0nftDKaKl7tYq5RwDsE4mR3UGGtcG0PBwme0MnTlwivZxS0Xk4yhHLYPb2c//8PP2b+//u9sIj8x3SEzYpOCk0W2UUnGk70ZI1MXRU8Z/fn+ewr5wgj1+UmRFkhFEA3dHB5tgbjETSIgeYiruOHvEKlBbiCGuNLkaqfAjo8fZwy7ijJSLlGQHCMAeVgF1RRRWxRe8BVutKDSECedGBGdp1GqCohVUbLAQaRlBqaC+D9qlRdnLj6VXj24KuxijD1dRfzscHeRrpOQJZQTRR9ndYB6ibA6ZzjUk9CcaP57chqQWjs6mzrZNYuvgdK94ots79/OvvXrb7E/7P8DnUDTbE6khl4c9AKGbmQuWXBJ3fkToZY1kBv4RNEuOiCdQP8ZfCHKGs+P0yQcREQitQP5EPHgO08Z5fsopSzadBuaHKLhr/hZ/D1I7Mj4kcArC97usoC1XPTLXSJksar8ONmWmaLjRFCvCjVe6OyRojFhgQNiCy1w9Jjx/u73Q3E+U1zDZQqv85pVJWzmEdWNJylLuLJeZQ11VQyOoGJdQdM0p6S1hC+fp8wUe1/3+9iq4iq2a2AX2zu+t+zf/8c7/8Fe2P4C++RVn2TLO5bTylLJipk/7fWMtJmuK18igQl3YtOwPXxXk9/0kGEYabJ54Sc3SIvU7HEvTBeR8gl3UqE6F3Un4dyAx/SN9xE50TALrP5pMSqGYz+x2NRnHLbmSK4NsgsEQRgGliM3/jthkSOiMYhR6RhBj6Ljho3X4nmoCB+PUY8jtqGzsfPmjJG5d8QZqaaIx2rfF7l7QrVzL8uL6afqTb+zzH11EeHXC2HtPpl2nbgRD1Zf+PErixxxMGJM1TXLrmHLxpYRcR3OTX+qCWeC/X+v/n+st7WX/dmVf8YWNi8sbS0Rz8dfJJ1IV7uSzmuMOCM/mHQnNy6wFrwUc2LtIqXC54DUEJGTGNoqlOcgrXLDUQVZ9U/0sxiLTXUd8PYapIpIt4XCXh5XFka4spWN7BKhTUVXYlCsSBPln7HyKF+AisViaD7InzxI+xMBsXGlf3tXuqtzZGSk0rDTr/Cp4tUkCja3ioEd8uk0bWfK3FcXIuZ6Iazuk6lhwXqEfuBX9VCNjRsnLxzAS1uWsq6mLjqBfnPgN2Wfa/eJ3ez/ffH/ZVcvuZqtu2Qdw5grzdeYW5xyDsDz6ZqeYnMEMS1mtBjU3J32me90NnauGbPHdhydOLp7wp04pZ65gl/Y0Wf3fa3NbPu24RkldjFYzZtkk8FEnXiyZFahIA5gsjC5Y3BicJWIzAp+gU1OTpLOytRMuq/JanJSZorqj0BoZyNFWdOcInh7jzAVnJY6RqNjOSLDCDEn2JfyttI3vtggcNGCi27ePrIdmj8Zq7kLbrUaF8jpGd7fOhvTna0y9ynCmuOorDvxmSOnbfKSOw5sfKdVIs2lq/sFbRewJS1L2Mv7Xma7RlEjnY7XD73OBsYHWE9HD/uTi/6E+YVgzLs4ccbssTOmg1mYWHhZKp5qX9S06JNxI240JZpWQwOWK+Y265puHBk78m/Hx4/v8H2/e1nLsi+0NrSuazAbMmj2FX2SvGdusOAWdo/nx7e8eeTNrx2cPHhSMxkd37GO54/Tqmuj0UiKfxE94XNADWrEHqHoSrTMwGcMMxEHJge+lHWzOGmtmBZbo2v6Nb7v44K62GXuoO/7b/nM39FkNT2qadplocsDFPJeqWJevlCEThGuO2Vto4UXkeB7pJQrO0MIqxyAojCfk1bE2hlIm+mLIhfRB7lCvZYk555ZntR0QZn76sJmp14irHLvo2LNCJ34PvNLRHlClY3viBBc3WW6N5WyWDGLXXfRdeyKiSvY6wdeZwezB6c97/6R/XQ72H+QfWTZR1hXY1c45HPMHpuNK2cJFpgL1oKAFqQX3IDIBSkXtZFwEtI1fQ22vae1546CWxi0i3bGdmyDNEQ8xYo0+7Zrmtbelmq7ZlnLsjuPjR37wdajW7+xa2zX/pO5smOe4Ili0OYU1+M/iLHYSEyLbfCYlybVu+/scH13q8/8nfyE3SadUFnHdzYyv/wJ7PleSUM59RmKG1qA9FLiougZqvmiG4wD443qNNsQRMPTd6qFcWtnRFQy8YkoXPasDyMvybqZaXQcWrxOBUeQ7hp1qlu4a6h9Fjo/LFYHqGfCkopKpZgsTP4i5aWuC2snzA+X2nEig7hAVhRlwR7F0ynawqpUZ7qT/cUVf8EOjhxkm/duZv12/7Tn3zu6l+19ey9bs2ANW71oNTy17MGJwd2z6fi5NL30y92Z7lvTZtqAZxc1+vLIRW5PEUpv1FjSZpreKyIdvNdwsKmYGTjl80Wvs6x12R1LMktu3zmw897/3POf35nBppUQG6xf8l7+97x4jH7O04amaVbU2kZEyGFqr7s0ySdMB7WgoZo0VqY+3doGpMUCQgIBof1HRMcymUUtcECCYRO357HR3Ohq7qFezZ9thNsafe0MTmoaLHNfgtUB6oWwBmd4lSGMO+PPtxZbgzYbRPv8CoqCbtzl0YkUXQnVNICDGsXgnkwPW3bVMrbt6Da2+cBmCCmnvc6W/i10uzhzcfbQxKFZ+azTsfSGZU3LHu9Id1ipRIpFyYqcJoQNjl7axC0AkhLvV4guRZQl91ACvu4blyy85KG2hrar/s+7/+czNRw8O8907cRxHZDiNXLtCEX9hJcIUnm8dy9GpAUdldBTkabKLhDRxOPxKV8tEJU/9Z4xTRotQiCu0M9L5/5b/LOhv3M8IjYQJGQXrx58lb189OVabTrPcjvjM21Rky5zX57VAeqFsDIn896KfvGwU3QGY/FYKH2gIi/XBsl9aY7mhMpp+bG4quIEv6LzCraseRl7ae9LbM9YeY7cPrIdr/MOP2CxXH1StSGB9nj7gy3JlrtbUi1W0poaBz+NpETjrlaehEC4YvshNZDHxoeP96dW7lAHW9y8+Na/uuyv2P/Z9n8+k/NylUjLPtP6n7yTf8NzvZvloj6ICvsNpI19B7ICkdDwCnxngYFgKCZFC1XcIHlE+MlgoaTgEmGR1bIgLM+li4Ic1VFaazvUfL27fzfbuG8jGy4OV9ts7O9P1LA6OtPYzeoA9UJYzsmcKK7vZsfssW+1mW0Pyv2BOBCxQhVdbpdV04CobVDR1vPIkuRjF32MDWQHiLj68mX5yOJTeddy4vrsydQuGmONG5qsprub082WmLQs986J1EgUkykSiOmhGwG9By60xMko6jiIJOHmSW0uknsBeagXPfpOdRrfZyCtj6/8+Lv/d+f/ja6Eye/xjGLcGX+q1Wl90DANQ0THdLFxCkFdzi1t1QmJWuxCPB5pn+HQ+xWPo/fJDQnloj0IndI/3w1I3GMsb+fZgf4D7D/++B9lI+vIMfhP52BSU/oUbcTnPOqFsBaf7MlzonjiB+l8+h+sBisjT1yhCAvOlFJkEo2sEJEQYYmUixdjYQK3ftV69l7/e+yN42+gflPupdv5ytE1PD14ptYKTkJPrGpPtj+asBKWMBjEiUcK8GKeogr4z2O7QGQgUVuzg/+bcZZuTLNUKkUnHE5M9MiJgjGeC7IBNAaHJzDvrcNrIJLADStnSKsu6rjowatHrn7+9eOvl4sWyp2Upz3QFJOLkrFkekFqweqGeEO77diDnu91hn5cvs8KXqCSp+jYizHd5Rcdb2r6tAARMVYOi0H0RXwGMhJiUyF14cV82N6IIa0jEyNkFvjWwFu1iOoRvn/PxeqcXeY+VXSfQ5g4lbaSkdzIPa1664/RsS+ad/Fv0pkMDmKpKA/EWdAkTVdf3SOvctkVAMDVfdXCVSSD2HpkK9s5WlHN0Mv1OTWn+XQkOr5tWmYaZIUTa8KeYJ7hUaoialjCqylUkIs00NXY5MgknXTppoC4QEawFAYR0QntBcQkq7kBKtY3mNTIjenLNESCxdiHez786OvHX8f04ZmcKKe0OqoxzcgYme7lLcu/0JHu2NCYaOwR7xP9hW8PvB2kdXyKPfaJIKwwQnanImShZC+54Hil06rF88hyCUSb8N/Cc+84voNtObqlVlS1lbsplHMQOVtoLnPfrK9SnwvUS4RVLgerafkx7Aw/Es/FL0r76fvQQwaIVAAKbfkgDpfIY25QM/JjJQVtWVTIV6fsoleERTNWjtBndlmVgQK38lWj70UXEJqMpvUNyYb1WOHK5/Ms5sRYa0MrKcBBVqFyXCKrqLVz8CYYERcKxU2ZJrJUobaTQhBlUBSV9IIJyrLyGwcJPhvclw0IHZY513Zfe91Lh1/Cknyt4+mkU5F0LL12adPSLyxqWrQ+nUhbwiNeiE0hQG0ebmbj3ngwTZpmrAZRlu6UrnQCYt/I6ncRMcmpo9wXKkwHsZ8Pjxxmbxx5gw0WBmvViD7L+//O9cCKPWXuU1Nz5hDK7YwZheL9hX4st7en/NTtoukVwAGLxlvUMFxjSusT9+LM0Z0wbZRTR5rg4lNamd0/vP+eveN7cZXdys3W7q7SmmHwaT5/y5f/nxKWzi1WywMgDKxwNegNrDHZyJKJJPXXkRUwt/CVh2RECUsuUCMdHOobYi0LWih6wkqhOIELkwUWa5z6DIROCVEd2mFAZiA5POfK9pWfK0NYy07nyk5RVTxz64qWFT9sSbYY6US6hJSFbowWO7quYC/te4npiaAGJ+pzaLSW03TxvuN+PBSBVoqOBWmRr7xbJJHrc3ufq5Tah+hOdn/vcO7wPXNInNle5r65sm2nhXqJsE7rvfUX+j/b4rXsafQaH8CKGDktcG0OIhAcvA0u74XjNaSS1AMqca6GRn3l8Mjhu3aO7gxHiHHy+Wdu1fxdHlGVI65u3sUPfc6NcS3eZ5nWGmiIkLo1poOpNGI1rKwVsGTtW1KHky1xmM/GBsdYY1tj0MCL+hSfPoOtCqMrabKyaApG3Qdoa2hbv7JpZfeusV2Ha1zZL53JPsCMx3az/aGuxq47aXKRFUy9ERN3SrzYtRi1QF3edTl78+ibQb1NqkMiOi7pJZRadmgV0XNLSF0GHgeXiTePvMkOTk4XBwukYil2WcdlaHre/4tdv4BP1VzCljL31cXYuXohrP2ne0UZcUa+6fjOYGO88SHd1akQD+Bgt32bTepBL5y44suEBbi+60wWJrfsG9736WFnuNISssNlDf+be3VXcpYEcb0e1+LbkJYgqmlONYeuBdHxWFHCIr9yvuonts8r8BU/vgoGAhwfGmfp5oA3w8jSDZwJokJJRFkwwROPNXQj3Ww1d7KxmuLHijY/MhYkFjzcnGy+De8Tn7Eg5NCPXY4aOSn3LuhlZtxkm/dtpm0TrTcgpmwxSxecsHgec4noER3Lolo5ncdnvaN/B9s1sovU+pWwsmklu6zzMvxt9vVDr3+czT30lLlPFd3nOPGWKzxWBJqAx93xH2Xd7GPpWPr2BqPhAY1paVmjhSs3oisQFuoq3KLGdj1322h+9BtDxSGkfjO9AsLn6A5ui1u23jbpTV62b2QfW5BawDpiHaVpKBcwRp01yaK5IU6kU5KyJjQiKxTbETUSPMYmxycpigFIOOkG05n5HfIHFKaIImppMBvaZ3BS1Lyyd5gd/5hOpG9rTDXSZ0vkJFkehzbHgpThzW4EfusXN1/MWlpb2Atvv0A1PuF9BaIaL4yTOaDlWrSKSuJaMWNSIkA8Ft5bW49vZTbviy8HeKWhrzSTzOB4GNl2bNv1BycPVlwsOYdoL3Ofan6eQ+g+1St7FD7zs+Pu+HfG3fHvxbX4NaZu/qXOdBTOe/gV23IKDlRKWZ/5T3m+9298he9UagQ/4PMTH+LkNe2Ex2v2TfQR2SxuXsy6m7tLhiuEqRvsTjANxgo8xyNvKvy93qiz/HiescBIM9BuaVPNvjReq8I0ZjnFAjpSHR/hmjKBwZNd/GjQG9Y0WU1fTiQTQbM0L4RHyUr2ZkdNDyu7IoLsbutm/+ND/4P9fsfv2d5je5nmTBXQ4RSR1bJoTA5Ii7cugbgArDhixNtQcajiNib1JFvVtgrvl/62P9u/Ze/Q3s8etY+ey5XAaih3kVAGfnN8B51un5ZT9Iubim4Rpv9yJDfbxUs8Hwq23+fGbreWixiP28fphtmJSEfINFACncxIiyCEBSJkE678QaqQMmlFjRUZORdgfBZORED0xkVtV2jlrFjaFIy+vtNdEWxPtv8wnohjJMS0CFJsu0zKgrCi7xNW19dfcT070n2EvbbnNXZ08Cj/tU/pHYrxiKpAWmK18Xj2OFaKq25fl9XFFjctJqIbtUez4/nxp/aO7r3H9uy5PNXbmuF98w71UsMyztIy7plcaRFjyL7FC++I6qZhf3Y/O7LnCPvgog+y3vZeOvEA8hePSe6bEd8nmQBopFUiULOHK5y82ZckAihQ82bgUCnus3Bis2gK7kh13MDFkQLlTuKKOVZST16WMBOrSYnvBSluaPUiOYGK72KYROgGI3lXASCV5QuWs6UdS0mrdvDYQfbe0feIrEZyI2hUP+wVvIzjO2la0a0CkGZzrJle99j4scO2Yz8z5ox9DW1d7AzB0AzD8R0nrsWNoo/pHrN6Ac+wOkC9EFY9vbdtGtOu7Up27evP97ejEBwFIoZNRzax14+9zq5bcR3rznSTqDU0lyuDsBdOzFBMGMzJBcJRnJxwqxAWKtGUkFLFfDAaXu6xSyVSvf9t6X+74YWDL0CGUYmcKprkZ8zM56DEx3PKWqlwWIQk2hURn6wTq0TKiNQyqQxLLU6xCzIXUJqLroDn3ntu09bBretq1HNGdKZjH2wddoaPDzvDT/CLyaxfrBJ6IrPQWnjZwsaFH2traLsunUj3wMdM07Qs3kvBLewYyY28sHNg588OTR46mf7TcvthzhhIno8n9awIR+cw7KZUU3trppWdGDvBjk4E6U0U0Af95+7/ZFe2X8kuWXwJFYUrRVhyLx39F8VpWAHz01D0IpITAZdoCO8oL++xYq4YGNtJLgYJPcGuXHTlwy8ffvkZ3hA9TcLQoDc4yViyc1lm2YZcMbfDiBnWZGHy8Incib5UInUrokJavZTItsTVU/Zmj/iyy48XSnbpziAa0xhFV09te4odmjx0c5XP3OHC3X/ymDdShftPGzEtll7euPzLSzJL7mxMNKaTRqCrE90K8CXjq5g9XY1d6y9ecPFDY/mxTbsGdn3t5WMvyzXDSuis13O9Lt5Evb23pJ5cRQpun5HeqCnRhEIvO1E4Ufbxbw2+xd4bfo8tP7acfeyKjyHyKbEDBoT7AoC6FX2XCQ1nLAZEeHESqQolOPrufCfwe6KmacmhFbUgTdM613StWffSERKRvoHfw3H0gqYLyF66MdH4RStufUW01Qg5gc/8kaJbzPTn+qlpHM3LcguN2L6wZiY5e0ZJOVSpR1Y10ci+5cgWtnHXRgzLqEZU0MzdfzbaV9rN9i8uyyz7cmtDawYLAeRXL8hKrGBOGSqGspR2o31tW0Pbry5ccOGzL+196bN7xvdUS01H6nXM17w9qetZ2ZsyUuvE0Faal6fHWG9bL52YuwZ3kZtnFDk3x/7Y/0f2x+f/yG688kaKuHC1DlMqTlLTRltJpEUTafKBMR2dKJGBo+I7CS+lfsWLOi76exCWxrT2pamltJKJpX9yQTUSltCtRU7GDP62JdnCelt6WTafpc4CPI6kDZL0AEB057Bg+CoNqY2024j3BUDKgFFsz//xeTZeHK/2UR/mnQWnOp1mxkA8uyCx4IeYYdjS0EIXFSGMlVX8wiIoag0ksDC9cP1fXPoX2189+OonXj76ciVb5XLH/ilZGs011AthDZ7JnB0DG3AQNJqN7dlidnDcGc+eZlG0KopecTeJIN3S3jbY2GDYBZbiNx2WFy9L8eRbT7Jfv/tr9j+v+Z9sccvi0LtcLqJTYR2pmOiR9F2qYyGaEtFVuR470RTc2dxJpwVOqAazYZWpmauWppf+DeppaKmhYROGWWrFzHsdoy1NqL9h9a452cxyhWAARfSx4WeTLdLnAhlEdBI3am97j+9l2w5tY1sOV7We6uO2Lz86Gxc2qPg7rc7HW5ItG1Bbs8yplcrQojrSoRB2LUjtQz6/aFialb5m2TVPmjHz0xsPbYTbR11qrs63COukHRwETM3MrGhasWFh48K/ziQz6+KxeDYZT6Ku4CCV8X0/O5Yf29if7f/Pwezg1vfG3ptVczRKhdAuI7WN0Gh3PtGnNdnK/mLlX1CauPkYem1Z2TFkP9z0Q3ZR+0Vs/RXrWVtjW8mqGtp9SHPFUy7hpYXXIVW75LJK28RPFjwOgk0INx0HszxowEbn0salby5sXGg1JBrohIxGDtQZIEUOMhGFThdcHyWG1EZV/eKxft4n87xEU4LcQ0FUQ2ND7O1Db7Pf7v5txc8VNbe8l3+CdxucNVlCp9X541QitaEp3TTVpC6/N0l7FmrN0I5kTBkr4uLC0C/JvcmSWjJz9ZKrH3U858ZNRzZFezqdej3X6+JNVMBJd8zHtXj7iqYVDyzJLLkDPXsohvITz+IHmqHrejuKoplk5ralmaW3Fb3i4CVjl/zonWPvfL9GXWHGcH13kFbOeE8j+VKBsPgoMjRko6+xp7UHvWzs7WNvVxz6unNwJxt6eYhd1n0Zu3bVtVRfQoSCvkE8Fzk28AEO6JksJ9iUU0aklt0Luok0cOKMTI6w1w69lm5JtbCUlSp7QpY4oIoogp+I4YogL64Lu2Z0FgDRFpqSgatjDrNNm7119C32wnsvVP1Mr154Nbt04aWHH9326C15D02TZwcZI3NzQ6LhpmQyyUw9UPGXpHuSADgkK9NgZtIMuxXEYzzYMuecoK7o+biwpj+w9AM/3XZ82/LIANeTcuCdT6iLN1FBd2Kc7IHV29r7w0wyk0ZKQ5Ym3CtdhO/RKz6JMH2z/YK2C+7raem5e8/Qnvuf3v00BmGeFmzP3u+6bjZmxDA3MCw4kw0wCNSL01AMkFjSTLK1y9eyq4pXUcPu7rHpwd6gPcg27t7I9g3sY2tWrGEXtl5IvYVixQ8FdZCVIKzQdkVyOxBp6cKOheQSkZ/MU81p496NtBqHqGpaI7ZMflxHRWp8tA+Z8TD1ROQA2YRIUeGkAOD1SKMVjIOfEsPi8b7Ldg/tZq8dfK3soFuB93e8n72/+/0sY2XYWH4sezbJKqbFMi1WC7zMDHKI5V+yN3z42fDjiT6bZHxKGMuBxxjoDzUMWrGFHRA0c0kj2blh1YZv/2zbzxA1nm1d4llHvRBW5lSLjLwY+uOuxq5bsSJHheI4nzQsiEoqFk+7OvJ0BlHYxQsvfiidSF/w1Pan7qrie14TaMIuFAs7TMtcIxTeOFmRKmG7inox2A4+KAM3RITXrriWXTB2AdtyaEvZVpMDowfYgTcPsO6GbvZnq/6M/ob6Bz2XrFSwUie7PBB4NIPHdC3sYu0t7VSUxzTkt4++Tc3E6Xg6VKlTRCR/ic+JkxVU9mTFzIv24rXQalO0gxMRESAJYj3GjCQnN058eO1DA4fY73b9jr03+l7Fz3BxcjER+aKmRfRafNTaGRv+AJcPS7MsUzetpc1L15oxMzOeH/+YFtc66XNAml2miA6IzwgkBfKnFeIoeBSq6Rr1ioomdpDe4ubFty1OLv7SkdyRkSrntWrNmUNwTrUVYWFi4aMtDS03pZNp6vwHWUWN8Eomy/DUpoSw+JUfkUFPS88dn7zkk8YzO565KxKmnxQwiizpJGmuoACiCuGqSTUhb3oEgxW6JZkl7NDwIbbxwMayXk6HJw+z//WH/8Uub72crVmyhkgQlirkximlYLK0YHn3ctaR6aC6F67wQ9khdnDsIBGN8JYKo4cImYuTEZEDzQaUPjMBbDtMBfH5okEb0QORlst7IDUdnwl7addLVetU6Ptbt3wdu7DjQiJRQbaIRg8MH/g5OwPiz6XppTcvbl78t81W82VW3KLhtIiE3zr2FsvH8kQu0WGtYXor6c5QAqAyQBkNGK3y+sHf4TOKp+Kh376hG9YHlnzg9iffe1JE9231tGpejxHWKXlYLzAXfDuVSN2UbgiM4ihKEC4BsluAsDThLgEUIYgTD7VQYdvCC6JLW5bevmHVBicSpp8UhgpD32vMN/5DIplIy15PthN4tYekKbXcCGBbl7YsZbc030K2vpUK8++ceIe9N/Ie62nsIRmCWNET/XsgKnhwrVy8kjU3NAdTsTEtZtKm5zUtk963SNui03nCbdKkk1HSf4WPkxYDQGp4ryAtqPBRa8uZObb96Hb2622/ZlmnsvnDVQuuYu9f8n5qdBYLCYJw804++0bfG+VW1E4JiMy7G7rvW9y8+HNtDW3dXMIRpOx84WDSmwxT2Wm+WxH7Hvo8eGQVFf5OU/77geIf0ZhYnFnRtgLmkN+s0vhfznJm3qFeCKvc+6ga3aRj6XWNVuPdWB4PLU1kl06xKiWlNGhnwUkaLYZSTaXoBgVRPqyhO9N92wc7P/iTV/teLc8WM/Ccn7AnfmQYxt0l7Si+H5CWRFjRNIPGeGnBgAmY3CHqQpq4f2K6LhIRGHzn42NxtqhhEZ3sVJszTHb50stZR3MHnYQQk6LYC193aKb6JvsCT/VINFBOiU5RAd4DJ155W0PBp4hS4eeVMMgZFXqqg8MH2W//8Ft2eKJynerC5gvZdSuvo22HWBR/J4tPQVz92f5nCn5hVqKMuBbvWdG04lcL0gtWNVqNVEfEIoi8MorGatScSJoirHkku22xbdH/h4+RWpLKiWI1beozBWJ6LL0ivaJzb3YvSiHlWH0u2uCct4TFTqY1B1fHVqv1IaQzWDULE5qIPojICP1rSAPjMVrOjxZDARqnxZegCxMFWmY3mGF9uOfDj7/d//byU61nDRQG/imZT94GmUWJd7lbCKO+UNEe46rwmM8MP6gRwTYG7wtOBut617E9g3vYq0dfZQWfe8tE+hMPTBxg2oTG/nTpn7JLuy6l5yCvd9jPiH4/32dDE0PhENqSiIpDPvH4By5+QURKJ6Q2PXoQf4P3emT8CPv5Gz+vplBnjfFG9ldX/xVbEF+Az5vSPr8YGPHJdscFp5B96+hbULKfNtKx9PrOVOfjranWNFZFQwkHt6sW9c5Re7TEiVYmp2kKfvl38n08DSzbI+oHUatATItZmWSmk2Wpdjuf29LOW8KqWGTMGJmbklZyDRU5Iys3IWS3AJ2Rp7kcCcgpjbBtAaGRp/tEgb43xBu6//sF//3OX+z6xUzGvJeNsgZyA5/qYB1Px624RaTFvcsRZdFrywe5dDJg1FV0gWBF2wq2qHkR2zWwi/1h4A9lXxN/v/HgRopKVi1YRZFWqMni771vvG/qZOTzHKPbQSck/5J/FiaAcgOz/LEPjA6wLfuCdppq+OTqT7Ire66kVN4etWm4BndCpUZn8dx4H/tO7PvGvuy+09bKNegNa9ustp82JZvSwsJZDLGVL3i4ofNAJhohSZHteeQbiXcdl9JuEJH43PBcUSV/SbeCFIm1p9ovYwM0QyBxJsatzQXUC2FZJ+MlnjJTnxThOjUBRxTdBPEjgiw8JlJfKCE3KeSHgR4cPSlS8DW2rGXZ5xhjp0RYQNbNPh/Px7/UzJofihkxgyxktKlxZKHxHkSlhkfDFsSQDFlmIEc5cM1sT7Wzbce3saO58o3VLx1+iW4fWfQRdmlnEG2JCIvaXWKlbTvCcqbcyUi/R+N0legBJLP1wFb24vYXMSy14ueBlb9req9h7U3tU2k73ze09K8b4WANbM+oPbr5d4d/Bz/900JCT/S2J9t/3JBsaMcQEOr7q2BXLbZFrA4K4hSDTOQbpvKIzw4LGiAtYfU8rfVIkzYIFwrMlhQXB4hJ40lhZFkuLFWTn+cQ7JnWsAzNaE9ZqZu4vTHdF+1Hk+sw3KiuZMhB+DuxuiNFH6FnUyG4PxlP9l7QeEHnnvE9p9zLNVwc/o7ne9lms/m7uq5bVMBGW4rvk6IdBz5aW1C7oQkzvIkWJ2/JqC9+pUd0BrtnrKQtdZay9wbeK9ufCPz+6O/Zlr4t7Prl17OFjQuDEwu5qYRQLc9PwjCikk4mUtXz6EFMF8J2IX3bc3wP27xnM9s1tKviZ9DT3EON3d2t3eFcweADL23mxv9R8CYZQ35s0+8P/n5WPNfbE+3fthJWL1aS6WLAAgIXCzQl4k9dp8hvsjg5JbrlY8PCSEuf8hUTWjiQOjzHaEEnVrlXEiDhbNEJDRfxHJPFyb4qx35dBCd18SYqtFnsqVCDuAb1KDGuPVoMLSl2Roqh4f3SQVTW1gTNufzqH9NjxrKWZdfsGd8jPKNOCaPO6I9ybm5zq9n6aNyLXyZfceFdPqFN0JAM3ET3v3z1F6tmiMrGCmNUJAZAdO9f/H5K83YN7yorg8B9z+x5hi1tWEoyCJx8QtwJQHBKRCWZ+4nJNOJnzAvECRYOimAeOz56nL25/0326sFXK77vhYmF7KrFV7HLey9nkJ7IF5owtZSIEeQBwhrODW/ZfGTz9QW/QCcvuhSSetLC7xOxhDVSHBkhz6kZFOJh49xgNWwg4aY8FVwsuoiIiv+MKBgXBVEqEMeWaK8iwsJnpQc9nJCnoE5Ijd1FndqmKGeQyqUhGTL++RWCydUy6eWKucEq5RClw5rjwtGyyt6GeMOf00kjrFJ4RCCiAvkAmFYMjdiaAGVXcJCiSPd1NnZ+jM8aPC0U/MK2vnzf+0zNXJ2JZx7VNb1Xdi2As+aoPkpRFogL75OiGl6Yd7Tg3KTHujmKAvE+QVpo8YFn+bHxY2zHcPkFJYy9OrjzIGtJtLBFLYvC+8UcP7wuXs/VS1MdET3gBMOMRxAmGpShvq+G63uuF9NpSB9XtogPIuapkSCufSf23fX20NvfS+iJ9EVNF93eke74SFtD2w1mzHRMw8xwMseg28OjudHnh3PDvz8wfGBjJZO89mT7d8Uig0iNAWFyKEsWiMRiGrmebu/fHt4vFkuoWwHTe3yH6ozhRcXjhOTqNGmaXiIxRVpCx+Xhy/FI9oHPVFwkQIInJk/srlIiUUr3OYRyO6OsYCcei6+KEoy4OperwYhiKKIDzQwOKrmONW0ZXx7WwG/xWHw2V22cgl/YMlAYuFzX9M4GveHLhmZs8Jlv+Mxvt10baUXWy3lbXd/t85n/hqVZ+9ut9h/rMd2iVU7+/kU6iSs/SAuEAwlEW7KN7T2xlx2zj5XdgOH8MBvpG2GLUotoBRInEU5E0+XpqBcLogfPDVNSRA+T9iR799i7bMvBLexEvnwKCqxesJp9YMkHyHqGtF9Y/eNRGaVhPLpDKgipBZ24ghzRCD059OzFmYsf7mrquqMx0TjVZsUlB7ynMa1r+qrWZOuqHtZz5+Vdlw/2jfU98ocjf/jWgYkDfXIJwUpYa+gi55Q6m4qLVckxwH3nWxpbmHfMCy5e3I1Z9GsWY0VmeFPeYOV6NzU7mHIEohTCWQaCdoNp3aFHGT9GMby3L9t3uEr9tpfVAeolJSwX7pYN9cPBCfwYC2sLPNKSIy65GArCgu5ILFMLhPUhIX5EMVRyQeC2LlVFrJZuWfDzNnXTmKl1jc982/Xd/ePuOMajA2mMJcO4Ml7DCAl70p8kP/NMPPNQPBa/RghDcWKggG7rNqWIqLtYsWCZfmX7StaR62A7h3eWTRPxt0cmjrDB3CDrTHXSyYfPkYz9vGBYKUUPvk4/Hxs7xp7f+3zVKcpL0kvYh1d8mC3PLC+JHsgmWiIGpE+0/U4gMCXXCN4XeXz8OJT+7zQlmqyUmQoN8kRPKLYzmi7jlvAT7SvaVnyxs6nzhu3Ht9+78dBGioibjKb1RtwwiHSiK3NRTZVUOsAwWFrUiWslCwxYEIg78ZJtQF8obQeiLElMK6JSWs0W/mSeNBCXvz6O2aOjR392onhC7PMDZT7eM25OeDZQL4RVzv+n7ElfdIowSrpG/D/0eHId5sScYDKwvHqDk0bjUZbjkJ2JnBaGV30sP3NRJNTZ4qrPD+KSz9nSrfbuVPfarqauv0kn0t0pM9VrxkwDft4gGowaG7PHnt93Yt+/7hzeuXWGDbv0d5V+aXv2pr5834caY413pozUA5qmhVEppuZMsAkWzwe+VGLmIk7yC5ovYIfHD/eNOWNlJ+KAgA6MH2DJiSS7qO2icCo1Uhs8B+yJMZwUwzOq4c8v/HO2auEqIjgiIOlkhJWz+CxFwzDIChoxijbgOOG55FoBjVhrqtXCSp48OVpopARRRFdQBVE06U29Vy+5+snWhtb7/+/O//vPTVbT39HKLI+uypUH5MicftYoqia32NFioMcS+jNEWHk9z2JOqewkCvl1NJfPoGSR6I5nB3wA7PflY6FePbLqhbDKDToom4Z5Pp+UKR0jlM7EzGkrOCJKEEVjFENp5p/0qYk6hiAuEBseJ9dvRuwRcpMzNCNzSeslD7el2tanzXRGmNyJ3jN+Ilmwr2lJtty+rGXZ7R92P9x3cPjgt3YN7npi19iu075KYt5i1s0+YunWTXEt/qcxLbZO07Ru3/cNpJMjhRHUV7LQgOlMf8phzm8933uGT/FB+wcm5UxDzsuxrQNbWU+6h9qCgH0n9rEdJ3ZUnaL8kcUfYZd0XkKmf6jN4EtEEOJkxGduT9hhakRtUG5gQCget/nAZhJrtqZbQzHnNBdPvUpPqLCQ5pHQhR0XPnCLccvCVw6+4ogyQPDrMqWDiPiTJBzMZx9Y+QH2yzd+Sfq8MCpC/dDJhQLT4FCcTlhCfyW0WHJDOSCvwo7ao9v2jO2RC48XselQo+rnEN6dKRnn3fxbsjkeFaNdh658iLBwgohiKNUXvOA70jySKsAhkxvYhROp+AEfTlYuTuljECEMTgy+kTEyt/e29j7Q0tDSKXt5i4hEHMBRa1wzZnbCBaKntefvkvuSn3h76O3TdhxAJJbzco/kWO4R2n6mwa4YvWYZj3mH+cEdLUCjxehGxtjdjLGvViriIpLC0IxyanoZFzRewK5achXpwUje4EhBJD+xeW2GfKRkn/kouewe3E2tMB1NHRQhljXHE8LOaE8o+iB5LRIqeRwbtNIbNLLfif23fXR7mPpRf2IF3VlYQsAigOeztJVmi9sWs2Ojx4IFEG1KaAvJg4gWZdmJICIcE7TqGfEnExCvWfSKzjvH3vl8pIxQLiU85Ub8uYR6ibDKoayj5Lgz/ny7026bpmmJ2gKu6qgtoGhMV2XPoBW1khUcXNkcWqkLVsLiLh30NNadF0MpQuAd9FIxFE4If7sss+y6pmSThb4zaHnkvrNoqiL3M4orqqEbPR+76GPvXDJyyfce++Njd0XfF5btXd89pRYgclFl/kynGH+HT5f5SkyLfRUnXxTVyKot3sau6r6KplhT+o2IlkenMkR0hd8JkhCpkXzijuZG2Y6BHSzZkJyKpkT3gmxvI1m4lPSE8vYm0SKENJMsbvgq8vKW5VSrGy4EA1eFlbRc85RXRCk95TVPvBairBfefoHcMEg7x485HBdZXBf4Io2ILNFaJY6dEjsjibB8Tmr4XA6PHv7mu8PvRv2yy7k11EW7Tr0Q1oxHpBf9Yl+hUNgWN+MlXlOIsHAQyUZ9grSmQazW6LxYKl/x+YEu6i+QGhS94oa2dBuDfTCiquhklGiqEhUjiueDWHFZy7I7P7nqk0Ov7H/lmUwys2ZR06K/bjAbOqFyNnSDiu2+74/Yjr1tcGLwv3YP7n7mqH10tu2AQYz/2Gw0Jzzfu2/EqS3xgX4Jq3/LWpZRcV+QUKXogVbUvCJ9XoiA5WgJEG4SsHBBTyg+GxFFlRB+RHIAjVxJT6hQSvAGd1jcIPWk9iqsKrM4u6LjCrbp4KZQQyUWF8T/UTQnzZnGywAQgOYDAShI8cOrPsx+/eavA82VULH7QQEeUXvoKhELUmIiQS+4iOG5p9lVs2CFcDg3/Pymw5vK9UiWc2tQKeEcQrkpyRWjjTF77F+shPVT6nanKD04gGiceZkhCUC52kF0OZp+LwlRccJBkAn7GtSrSvy1Ir1nYarCvbyFfQ0RoBusGOHkQp3G9dyvXrnoyq9CayUv18MXSdf1TEyLdWuadtni5sU3X9F1BRuYGHhs84HN98jL9acKRHKYTLyyZeUNpm7uyTm5bGOhMQ2pQyXrF0zSwZRq1KkAXByoMTs6ll76fHHxoGZyXES0KcW+TG4YD2azKbudqEe8/D00EYwHEaxsaSNSS+FRhfYqSu9zRfod5BWLGxezg6MHw+0PV0Q1gy5cQkwrpByao7FCrsBYkrHGZCP76BUfZa+99xobnhgOyJJfKFHPEgsK0KiBnGl/atzzLOJpD+A1JgoTu18+9PKNmBTNZoYLWB2gXiKsk2pFGCmOPNFkN305mUquojqUcEHwCgFpVVi9CesVemDjW5aw+OqNiK5gltcUbwoLppVSlWn2NVKqAtKCJfEr771Cz4k5hVSr0adSEZBj8KaNcFVMnMDdzd0333jZjTccGzv2o1/s/MU9tgd/3ZNDY6yxpyfT87mOVMf6JqvpMqxq4sTC9mGbEBlAKBkVnS5JLWFLWpaELTNY0JAJJurVLlJBCCtJiIr3BxkDV3nLWiWycIkbtIIHsab4bMV+KOkN5Z5caJsqKZJzNbq876hO2RAPVyCxjRe2XUiERTVPL6h50kKNPhVlyVEgtS/xtQY8R2uqla29ZC3bum8r2398/9SxpTFypEAvZYPREKzSxhIlK5sySRfdonNi8sSP3h56+y7PLzMWvPL5UK7OO+9QL4R1Uu/DY549ao9+I6bHfgyzfyItyQWhXBGU/g6rh/iCGwI/kMKrOr9qi4OeHC7HD1C6WGnwgPg73HDlB2GVS1VQ//j1O79mJguK9EILhucThnFymkn1FTeIYKi3MIjArGWty+687X23rf3l9l9ef3Dy4IzSRFMzOy/IXPDwosZFNyBCQjon9yviBvEotjNfzE8jLGwLth+fB07EolaUV0SDVVcpMkVEBbISRWd5Tp9M9LBzRl2JFOhT+3X6G5DtWSLTr+V9HK2hUTRmxqiATosfhlnSF0h6Knd6A7TQUxEgH8NiDDRiRY+i4Q/2fJB1pbtobiIcVMVzFlmR5fI5+mzIDJD7a4mVROoVLExuGpocur+/0F+9RaB8OUTVsOYQyuUiVSUAw87wI2bevCqtp+8k5wZeDA1XcOTaVXDMkM8UXfG5ijvanS+u3PjdsD1Mwx8sZpWsBsknRpiyxIKTg05eSYAK4KDG0jg81FGrwQBOXIVxKyncc1tnudlZ1HlAAqStYhqcRVf/+cV//vSjbz360WoWzvAMW5hY+NWlLUu/2JJsCUWYgiDl0V3ic0AUEQWir+HJYTYZm6R2IWy3EHAKghVRIiIw27NJvCrcTwUxRlN06LvIQJALOgmSsHNab6jcM6pVaLGSHDoo0jJ45Kcx2o4lTUvYodFDQTTuFEhPJdcgK2mqRF1LKwT7pivVxf7skj9jx8eOU+M5RLWQfoi6FlqXpHTWjumxTSPFkfsd35mpGWS5oqJaJZzjhFXTErY/339PTItdZnnWOkQ4YsUGBw8aisNlau5CQOSAlgpxAsnTZaSleEQUh3KHAoM7yWStLLSp/rMSBbUWyC1+9eav2PjkOFuQXkCDRhHhhMQhalfa9Jl/clMu1dOcYmgy19LQcs0Nl9zww0fefuTT1QZ/djd3b2i2mgNHzfh0soqmduWwdtlaEo6i9ganUvwNIgiaIsO1RsJBgkSigZSDyI2kHzGzRDMlpASo/dBnxgWdUZcImbjCrgPeyhLtCQ2thSIRWHQYBGpZ8LEXFzZsMz6Hgl4oSduiNTmUD8gAMXIx6Uh3UP8m0nkMxx21R+3n9zz/Ddu3B33f34RuBj6dOjsLGUcnqwPUc0pY84qCNpZj9rHrF/oLf5VwE9dRCwRUzSAtr0hXOtS1GryGsCAaHScu6i/iJEAx9NjEsV60ZIh6iICkfC9NVVCDFV39/ATCY3+z7TdsYGSAYYURmp6EybVbPFUomeYT0XBFIz9aevemVNiLmhfdesOFN7z11HtPlYwli2mx9k6r81cd6Y41eE0rEURyQnohv27JSqeU3slAZPaxiz7G/uPd/6AeRKR7pFAPCodwz6D5j2GEytNykD5eT0SS9DFpgVc9+h1hRQOVvfgMwyZgibiiNjeiCbui35ScKkr7VERntB1SixAiVxGNT1vplC4+9HpasF9DG5rIIg7I2fXcpya9yX9kp490mfvO2uDYM4l6Iaxy5DSjqxJI63j++MczXuarKSP1Rd3Vg74/Hm3lC3mWi+VoTLy44ouTVUxlEVHCqD362PHs8b5Mc+ZuOl6lxuqKNjbcgTP8zr/6R/vZgf4DLJVMscaGxiA6EkMy5EEZsiASJBqLhUMhwnSJ1+doFYsvxWP7Vy1Y9cAVQ1c88/bQ2zukNPDRVCK1BlYuiKpkI8BQhCnVa+j1sKoZizFvYnoNCduEGtenrvwUFarfOPzG5t8f/f1l4qQac8fYhDdBVtWpWCrwk9eDehHV6Iw4Q5QHt1Q8j/DfF7IIgZCsoJHj7xGEJws8RXsV2f9IKTxqX9SxEG2K96Y0dfjCZ0H1Tin1FKp1+Zjhx1VAlFhkwMWCr4qGqV4kKp8oTBz+9d5fl414Z+m8TrM6QL0Q1sgM23UqktZwcfj+0eLotzoSHa+X2LbwdAq1JBRCccKIlAxwPMfJFXObj08c//yYO7ZtccPiH8qd/eLKXy5VCRXSkVQFJxxWBNG3CCteaIzKuVuGYkhOVNAXYYYffhaqcJryjIgG6nukJb4WqPkZRUzWB5Z+4KG3h97+BLa1zWy7ryHRcF2qITUt3Qs1TsKXCVFVLFgoEMr/+GTwmcgQzpwiUvrgsg/27hrc9dH+Qv+DjLHr8Bi838ZYIw077WjsoNRXTglFPUtOQ6le502l0WJ1MfTlkrymwjoZnB8KTiBtkFJ1vDdBWkSU/DvmJIYeXx7V2OyiXbTILhvlRt5wjfKB2HeCIMUKJ+qeQksVrcNJESU85z81k6b3GUIR1hxHuatH5eF1FeAxb+R4/vhKnentyVjyTlM3P6kzfRVfGTTg0olUxvM9KMNxcD1V8Arf8JgX2s/GY/Hecr1n0ZucslCjtJSqHB85zsZz4wEBaRVWomRpREwLBo5CQMkL7yURUDwYJiGm+uDER7QDAmlraLtuVWbVqn1j+z7XbDXfTeQjO2pKswaB8LWxUJCIBbMGeUSHdDUK0zSDlU9EeZ4P0m//0LIPrf3Frl9czxi7mTH27WajuRNk1ZRuYmQ/LI27F2m3TNT4nFDgPzFWalFDDeyuw9xYIO4UvvaiL5S2vagx3daZZiGe5O6ngrQCZ41gJbjokVpdbsUZyY3cP5mf/G+Wb60nnRz/TECM2WJ22r4m3yvNKVkQEV/CdbXoFe33Bt77zK6xXac0XakCeMhXAmWRPIdgzWaR0WPe4IQ78Y+4aUyDT7aN7yApTlQjvCYw7YoouyAAoZe3GEAg11SEM6cbo3YOnAQ40V7b9VogcfCliEbq1i9ZaeRiSFo0EEv0Qnkv/q9rzGwww9YTGk7K06qYHrMuXXjpO9l81gDh4bmh5QqFmJKTQfi6fJIQtlFe0cTzRYHXJYEuNJhYSPAdNBZ/Nbkn+b2cl3tM1/TnW6yWQ4lEwkJEJchSPsFLFji43KA90852je4qGUaKeiNqjyBjMe1Z6KNEEzueEzbEtM3JYEirtO8q9oRiv5yYPLH1mH3sm51+54uma66jKJabNVITcn408Ltyi2E0Ltc8ZcW68LA6OHzwsztHdz7BZhcHytyn/LDmOGZF2eszn0zRfObPqGjpeV7J44R1DQZECDcI+STCCUGtJ/lgVBgkAHADJfEon6hcTm1P/xdjyCRL5hIFt/g/vw9j4slJgK9YIc3BNjQnm42klQxO3ggFhyto8n3yTDxp+k05wkKEAeU4TuJwXLuuZdYuXXvTc/ufe6zD7PiymTAtpL/RtKlk5U3qBURUlzEzVJOiXk5JdCraq8TqKYSdooFdvB/RN4jPgaJSnkIT3GDGJCKsEhPHwHyPSg/H88evb3Kb7kwb6QdgBCjvk3w+T0SFxQZRPpAXJ0TdbbI4uWPbwLYP5bzcmbAuXlbmvtPucpgLqJcalpgWImP62XMWAPuaqAspKaO9Ik20iRoEiqs+isFwJOg7EQwoJfO3MrYjQEmEJQ3IKCn4VhiQgagIJyPIQ8gEqNYiNE0cUf2SDPpdqG+d+j1NjY6AVlZNgyI7YQOM97wgveAjMS32bFOy6W68NshZpKHTWmskVTjp1WI6Sxtp1pZqg3VPyetBy0X6LYhTQVTulJizZHVOsoIRWjJ6CS70lBdJhKzlg8s++N0/DPzhQ4iyR53R72Td7BMZI/OwoRvrYJ4oPg+QM2QK2A7hdiqixLyT3zpsD3/tRPHEM1y2cCZwvMx9alT9HEJ2rgjlik5xq+/5G6KpSmgQyJ0gRMoSpiquRg2z+/r3BS6VQuAo+ShFl9nFY6LL6SIqEhosAo9CcMLT2DKcyPDvCtwqKaUURFby/FxQKWuXwvcWcdvEiRkFTe5BS4yhU+QiCKOtoW19p9U5RGkll3/IxDQNfNyaPMh2ZedKtnnv5lBwK8gFpCXU9HRzS+UWJXo3tFmVkSXInzkuOJlkBo+75sq2K1e9NfQWraq6vnt4qDj0CejW4lp8HWqeMS22FuUDx3cs13EdJ+/Yju/g8f/GGANJnY1aUnuZ+1QvYb2sEs4mxp3xX7S4LV+RG1xJxe3mmeFyhbcWC1IkqT6DYj5WIh0WFIunpEHBsnvJSqNUsJeXxuWl+kpiSIJEpvi7Q2OHWMziNjnRqcQRkaVsrhfVMoEoooCqnTYjIqA1Y2ZPe7r97zBDkQz5ZKV5pWnHeApwE9+mno4e9tb+t5iNQEVKT/FZx4pSsT5ag+PvXRTkyzVh02M4AYoWJzz2ykVXfuGtobeELbV4LrvgF54tuIVnpZoqLphp/t2ZA+fDq6wOUF6ePP8wMkOLjTOOnJvbViwW7WiUgJNIFGSRHopu/9CqxHOpF49qQxwiZYwaxMlkQjUxlz+m3FeZqT+yXgiAQ6fMD0JaQXKLMg6botUk1CjxG9pVogj97fFYKVVFbT9mxNpFPSkkWKkfU16gkFNTOd295sJrgrFY+Nj4Zw6Ch6ATGimIUMW0mvDzh9uCO/XZy/eL/SPshkDCbc1t4cDdBekFN1i6VauUYkuR/1xJxdpZHaBeCKtzrsxhQ2N1Lp97CgVhcRKJgjT66gRxyUQlfpbHz9N3ThZihbFEFiERh1jNipJKuSiJdEWS7gsnJayRZYRz8/AlzRqU627lSLJcShglHVl7BlGoHLFFZR/Ttr/MRGmxrVj5Q3on+gRBuKgj4TPH5wriwU2QV0hgTkBe4X0gK6dI+4nIqr2NpRpT4fsxYkb7hS0XzvUVN7vMfWou4RyvYVUcVV8Lpm5aGLqZNtIZ0zAtLD8P2AN9Mxm6CQzYA/daceumREPCiKYq8IYXS/YCMIkDyqYk0ojzEtKQB3Bi3p8ZFO8FhPiRP3EYQQnNl5xSIjWSIZMpVtmmOWtCTV4MvOuhZwpE4pEakHhvRjwUbIbbL1Jc3nAu3mu0/69Es+ZNEWXYWqP5bGh8iCVTSWZP2iT0LNcTSp9dnL8uN8iTa4lCGCvX5vC6jY2NbEHrgsCTjD8n3mdnY+ca0R0wR7G4XhfY6nmV8I2TeYLGWGNnV6qLJtk0J5vXWIaVSRgJDITIYjCE53uDk8XJLUdHj/5k34l9G4/YRyrKHAp+4fC4Pf4dTde+iGXzMIpgNJ23bF2FGnqLuWnWJ2HBXncC8ohMCxayCcgiaDXMKG05ISLBiiD/AsmINE0mLZkrxegz2VWTdFtcjiHIA1ENyQzMeGAzXaaGhTSXBJjc51yQMPXhOZPh47AdgiSjfulhRMmjSUg+hD/6UHaICAx9lpO5Seblg1mAck+oaGSn9xRzSnz0ZXNAsR/wnttb29nyRcuD+3g6K7Yzk8xcxRj7GZu7cFmdol4Iq5yVTNVZgAKGZqQvzFz48KKmRbdCO0MDRfmod664TvNl784mq2lDZ2PnhisWXTFyYvLEM1uPbv2nHSM7yq76DBQGvsRnAK4V8wzFySAaZsVJQH7eSKniCeZlvRJHSjq5vQIz/ampPsKON1Rv8xVGIXGgQrc0LVjIHty8Sy6aIiUUz6czHW704bEgDAFJDY+Tm+uZEGGFK5suf22bvyakGGUK5XDezE/kwxRSDEZFuiaDWqC4V7pI80hDBS2aIGf8LeZDmgHJ4PXEe8X/0cZkF2xK6fC6svSiUCyQQR45RXDXCaGolyND7Iuerh62onNFEMlhlbA4NfcQb9GMmXO9HhQrc99c3+bzirAyp9Ls2R5vv2NpZumDbam2TDh0U+pdkyfZyP17JjMzDfGGWzsbO29YcnzJXc/tf46mz8iAVqff7r+lS+t6xff8biG0FDKHbCEbRg+Wb9HPwl2UZA1YOZMGFoA8aJvk8eZ8qg8N4uTRE0UlCZ+ikFDygOiu6BFhiWK5iDhyxVzfaG50RzqWXkcrcC53InCC0Wci0sLrIoUSrwkIaQQFaQk+cSYCO2dTVCNeU5DR0OTQfs/zeuQ0mOp5vLVGjuyInHlUSWPU7CLTkmDJwK5YBux3MO0ZDp7j9rjYF/S5INqDzQ0uSuhVlKUP2AwU1z9wwQfITof+TvR2QkgqSB5tOIXsHja3sedUL+BzHfVcw6paZFxgLni4s7HzDgy7bDAbaJKN5M45ZadSoY8PMGJGevWi1T/sauz62MY9G++KungW/eLhvlzfRzv8jl/F3XgvIiexvI96Fg7+Br8hJA96PRYLnRtEwCJWrLBt+Hma57xon3F4/cXxiCSEzTK1rYEAhSCSF7lBCDsHdt6LtpyklVwHpbsc9dFrCmdRmSh5vUoo20XklB2fvhsQ2YCE5NdEJLVrYNc9ekJ/UrS2CJdWEdmJfSC80kNidjVWKASrkXCLxWCPodxQyWtiG+E1tbBxIUlF0D2AwrvwT0dP6PHJ4/S4K7qvYF2tXWxZ+zKy8KGUV0qlqVZXmIpKRUsNm9u4qMx9avLzHII141H1gYXKk5lkZkMmlaElfdk/u2RQhGzbIkVZcsuLHtONRc2Lbv7LS/9yzXdf/+7K6OsV/MLuPrvvQ63x1u9ahnUzpSrBhpDmCvY1tmGH1sMpI0XTgqlNRhqQIcziaNukuYkhpNHllE45Ux7j/H1Pkwpk89nDvz/6+5/hM8kUMw/F4rH20OrGZ/SaZUe7R/zrw4I5nxgkQ7aCoVTTLWIIyNZdo7ue7W3tdWJWzJCjSbIeFumaG3GpEOPWYJfOSaTZbGYH/YMl2jJKLT2X6logre5Md6DC57U6/EwRtZlgVtKi9hyKSLGNgqzQoAzizzlT6Swn3IHsAA3GncN4t8x9ZedIzjfUS4Q1Y4fFBYkF301b6Q2NqcagViX5PZX0snHbFppkEzfCGYQiYqH5gzxqQQSQttK9f3PF3/z0J2//ZJqnkeu7gwOFgVtSbuoXjUbjQ7qmh4sEOAmQvsTswImTjNywEibVsQCSH3ACkf3NgRK7EmHWJ/kvRXsQhXp758DO+0X6OpGfeMyIG3fiPQpZRSh4daYIS0CsmCGNFFFhuV5CLCRQLyWfL4hUc8uhLZ+G/GPSnnwinojfHI0mYT0sRLaiD1AmSr4B9JrZyWzYXiN93qVCXe5XJcbWi6gR+w7tUFTMx5xJDFblj6UxbkihndLiP6KrPSf2zHXCypS5b67owU4L9UJYmZmEwA16w5p0In0HJtOQ9W602VYQlbiv3CQbQRS8LoT5dVR38jSGwv3/s/T/+fffHPzNU+U2csKdeGzCnXgioSeuMzXzY6Zu3iyINe/n2YQzQSeGoRtOW6zNoAELkpBSFOvFsr7sfikLRbGSKPtXRcdZkYeTPb77reNvPSa2bSg/9DUrZm2wUlZPSS3LLZSM0BKvJSAP5aBVzghII+UVw+jqwPCBr+8e303TqyeKE79IFVI3kxRBiibFUFv5QhIlLLGquG9oX7AQYJUSvHgOkBOl0SwSpUUcRSmayktzKLnxIf0oab4wFv5E8cRcTwmXlblvrm/zeUVYNTvRkfZ0JDt+LPs9lUzVlW1buH0K0rJpQzf5Q+j3VtCIW8gW6IDHc65etPq7O/p3bDxqH61UQ3PyXv7ZPMs/q7nal8i+RmPt3L6m2/O9bZqr7U7ayecatIZeSg35GDKc9CAtYadMRfpYRLsEsuIuD+XSRh412a8fev3GSW/SlgfMnsifuKcj1vEk9fdxgzo8r3jNqafhrxcLDOpompDvkaVKFEK0iZP9xOSJTZuPbP4n8buR4shTzfnmw0kj2V0ybs0Nxq0J62exEiq3K+FrMDtI2wDQkAfUw0RPIfeJlwdz0HPIejexW3k6G015xWcm3i9Fpf07w+2fwzhQ5r5VrA5QL4TVXmsIRWu89TbLsi4josGU4EhkJaajAGGqk5iyLomCUiIY5JmxwD5lskhEgQnM1y6/9h/+bfu/fanWRqMHjZph/RJztVU+81/vt/vbO7VOqrNghVFENVhh9AtThXFM5SGi4uQhTOvkOX5RuUL/eP8jBycOThM+jjljTyXsxD+n/fRXhHRA6MfEqmbYqmNwgox5YU0NqW0U1CKD6ddu0bEde/e6Zet+PFGYeNX13ZHR3Oi24dzwXTE79rhpmfB/Du2codGSjQPlth4R8QxMDAS1Phjh5Yt0cRG1MDxWpNAliwXR9Jin0FDJR3sPw/3ELwbj+fEd7514LzoWfr5EWIOsDlAvhLW4Vs6eTqT/lsZ5wbaFX4lDiGER0hVcDKQQ/xdf4cHMr+RkeGcZ4dBNnGAd6Y71jLGahFVmevWXGWM3YL9ApX3cPs4WsoVUiyHPKz2IrJDugLREMZtkAF4w1afE1jgyyQYRwt6hvZ9/e+jtH1TaiMHC4Ndwcqa99FdABiTA1PgJWxwnAz4M5CBHzVh8ajAHV4yXAyKmlJkymq3m2/hjbxYXDNjxTBYmnf0j+43BwiDVn0QkKEd2soMECBQkg98zc0plDzU99rHQS5FQl3uuVyKraFQqX8TkWh4+3wazwRlzxuZDajVU5r75sN3nDWHtLHNfmJLpTLcs07qG/iNZpcjmc8GvShtsRSoQva+SzxTZp2gaTs7LVjat7N41tovM/2ZQf/sCY+zOaC0O0dSx3DHWkehgcS8eNODyaJCaep1CibsliTz5zL/Qm4pHiEW3aB8ZO3LvzpGdP6oV9Q0Vh+63PfvVFrPlp7quZ8JxVxpj4+44vS5EmGLYpyhiQ+MUBYgJuigxvEN24OQRjYXFBnhbYVLOnuE97PD44aBG5TtBZCdbD8MIkZMa1P8gLtECBLkDSIsiUm7NIyvdxT4UQl1Ehvi8hNOFiEzDuh8/PkD0eA8N8YZuND6fyuTss4zDZe5TcwnnENLVyLg53nwDCTe5FEFcaenAldIcQC7ECsjRVfhd+j05aca5Xa7HcGIaS1uWXrNrbFct61tEUw9Xs3N2fMfps/u+njEyVtJI3okTXN4mO28TGYgVRqEjEycetnOiOLF154md19uePeO0YMKdeCZv5y9vNpofSsQSN2maZgiSL7ACm9AmwvmBojMgql6nnRAzwt+X2AVHNF1Aa7KVJuS0JdvYm8ffJNJApDmWHwtU+QafD6nHQ5W/HCk3Wo0kFiUdF58ILUgL2itBVrLnurCXEa1H0UUKMY8Sfliu52Yajca1dsGuNXn5XKOzzH2qhjWHMFKNxEzdpOK1WPmK2raU9KxJrgBY4QpP/GgkFrEhjralLGle8leMsUqEhWjvq4wxpI6VgKv484yxGxH1DDvDbNQZ/VqT0fRgXI9vgDRCkKs8LRhRDx9v5bi+uyNbzN4/7o6XXbWsBcd3YFB3S8JNfL9Bb/gHQzdgTpcJFwCcSXL8FClX1PVBIJxhKIa9yoQl2SGLetKK1hW0MPLKwVdCvRpSz3wsTzMMQZSEqBU0Y2xh00J2dOQoyRWiabRofIaoNuxo0PgEa0nxLrYF7xF6LcxCFGmqoRsvMsYga7iLMTabgyNmE3aZ+5RF8hxCuRC9WfxgxIzF8kGNVCNMM0SUVa7RVjgDSKPNK5nLidYT8TxJM1nuioaU78ecqKq1SuzgJwQIq2Sqz4gz8nnG2OcNzVhjaMZ6nelX+sxv95hnOb6zxSvSRB+YtW2aLUuRvJffhBt+xqRsnelY0IDFykK8bpvednPaSne2xdvYjqHSWj7IAGpz2n4+/ormDcbiFHmhDQbfRVsSiXF9nS1vXU5i2t/s/g2lZCSe9W2W1bNhP6Afh9XE1GvRfvV9tqJ9Besb66MUUyY29Bii1xCkZ8WsaXMmRcQnIrBV3atYJp6Z2rdclMoYW8MYe4UxhlrgvXOwPmSUuW+up7HsfF8lDMWZhm6sKhm9JXyURG8bluWlVEF4RpFokK+GyQ6eIWEJ3uJTU+Shm57nyQeIxSOq22pM80Ht4R5Y6daqOYCccGNnGa7vbnOZSzoqoC3ednej1diJEV3QOEUxkZ+gNI8GMvCal0jB8BlP2pMMX5ZlUYsUnoMiW590bWxx0+LBXUO7HI1pneTf5RWo+E9mes0LpqbeQADPXSDwWoiKIKc4MnKEUlXZIRXdBbLfuojYREP6wtaFbE3vGlrDFYspJAdx8nCUld/eHYyxWxljkDo8ModW4jJl7psr23ZaqBfC2l9tB3m+11dSk+KaGtyE1xO1s2jckQD9a64+zT5FHroZCk15zxlEh7KHk+3YIgRHNPUQYwzTjithhB/0P5tPB5ahGZ3NyeYHIazF/ETxGclA5CLX1mh6dZlWJ1wcMNsP03MQdVEjtcfYR5Z/xBi1R2/cPrx9h6EZ63zmp33m44Tc3Vps/baZMEMzPaHhooEfXpzSuUu7LqV08ujYUcwVpKgLvxdpNP4G29bb2cs6M52sp72HCNbNueHwWXERy+aziDbLlR6wf/+OR1tPzYFoxi5zn2rNmUMo0VxFLZI9zwtCdikACK1y+WAIYWUiirmiHw/WIrQKiKkyHGTbImWF5CAAnynRMwd1t1vEgfxODaICNvH0byubZ1hoLXzYtEx4hhFxC3cEGU3JpimyivRrlhNqos6Yy+coTSSfKyOR+cDSD3zuj8N//HTRL5bUBB3X+Xvf93tlZX5oeawHDdR4DRDmhR0XhqPrqSgPWxqNUfN0Opmm/Uvk6TGWz+YDV4tIo/jAxEBflQgZx+DjPI2//xzXt+x6Jax6sUi2qxXd0QJCV2ypQTbqqR46bIpoC/YmrssK+QIr5ILl8hK7YJ5CYjxXfjJP38O/813Yp6ytQVYQi36UMXbtfCQrQzPaG6yGG2guoM/YieyJsFYlg2YfIqISVj2i+I6fMZVafOc/g0hwQYB0QsxN7Eh1bFiWWjYt7R/Nj/4LXVAi4ljZx104QAgzQrxGKpGi6Ksp0cRMzaR9W5gs0H7Evi4WA5ND3MSxUXALzsHhg59gjOFWTa5yHWPsaUy0rnAhPVer5jarA9RLSni4WpqY83LbnKKTNRNmWiihQ/sUl1/9EWWJAady7xqCez50EzbE4kpMNTHXp35CqnXx+pW4gu87sa9a+gdRaUXx5smgMdaYMTQDoszOuB63EL1kC9m+kcLIYNbNnrGDtN1s/wJcDhCRkN2Lxli6Ic1YhLOoG0C0QHHlOpGTEZAUWe7wacv0GfLCO+4jA0EU52Nmpre9d+2BiQMlq53jzvjzLXbL7lg6VhJlhY3iopAuWnOEY4UYneYH7TiyaJS2WRIHC1/74cnhLdtObBM1w41c5HtnBXIAud7Na5bfYox9fQ6kiSOsDlDPFsnhFbngFQ4XCoXd8UR8ddiCw43xQFjQ40zzu4rUj8OVw0Kg1QkPat5KEj4msG1h742+F90eHLCP8aL6adWpWuOtly1pWvI37en265oSTausuGWJ1S6Ranm+l50sTG45OHzw+28ff/uZMXds1sgLfZlJM7kekRLkA3jfqYZUSBgyRDdASFZGjDRSqHuRkl40lGPUWdElOxdcAIStM5kH6jF2UcdFX37hwAslhAXHh2F7+N64GX/ciBvkny9WcsM+wjJe87I8JUpYUTW8uAD98fgfUZ8SyPKLzr9y4rqtwrmENOwBxthf8RrlbI+kr4TEDM+ReYd6IayqqyKwTxnLj/1Lwkr8OOozhT43KgRLHlhAtNmX+s14fUoMLIi284hi/sGRg/J22Dzlwyy7cHXtVGBoRmZVy6qH21Pt65utZnjOBwVtSeEuNfum02Z6XUe6Y92lnZfu339i/zf+a/9/zUpUB/GqYRikA0PaJIrutleeE8VnSforQ6dWJtJIyePjNY16AUFmaCbHhQGgorfn4X2WVZmPOWPPNNlN2yxmrZYbxbmbasnr0/PBDYNx7yvuMiH3EMqtQOJ5+sb6fvTOiXc2VYjisV9/wleBkQ6Ww2W8voXIDPZDM+mAOB1MsDpFvdSwyqHk7BkuDv+skC8cDt08JbM39JvRWCc+gotcMaVRXOEMO3x3g6Ku+DmskfD7sQr1xtFw/gWKtJ9ijH3odMiKIho9ec1lbZft62zsvBlkBY0SPOCFxxOltfy7GLLA0ynWZDX1XN51+cOfe//n3uxt6j3tK21Mi2ViRiyDxQasoNIJz3R63YrvAdFLLGhhkl0VSnRt0GCh0J5OBCPp+UWEr+R1dlgd0y5MuBgdyx37eD6f318yWk3zScgajvoq8lFfbp7qY8J2WrQ3yd/FSDD8zWB2cNPvDv4OiyLVADK7fgb1rXWMsV28u6H3LKd/WVYHqBfCKpdidUcP7MHJwc8WbDSb8bSQpxBkn4uZgdLsOmHVKw/WFKQlCEsevkmWKE6Ovdv3LhTpODgg8OzimqrTQmu89YHelt5XMg2ZjJWwyM4ZvXMhWSG6EgXsyE2szOGxLcmW1X956V/uWrt4baVIYEYwmJHB/Aey1DFiQWtS1MqGQ+69DC2iJbISN/n/ZJrIiU3Un/D7RCxRVmzr+E7fkD302bydHyEnUoTQfFNAUKP5UVLlo1ma7G7cKUKSiUyeX4ifh3PD+1879NqnbM+eaTqNfb2Sp3+V0n6L67de56lkzdkDs5RxLGN1gHohrHJXj2kH97g7/uyEPfEY1V2gXkcBnjtU4mAWB7Q4cKNDN8WVma8ahUQliryHhg/ZWwe3ok7xvtkqqsN7viXZcl9TQxPZOZfUqrjnVXjjDqlUJ4JDKgrbBl95w8pcjDRR1jXLrnn6/R3vhzvEKQHpJqXGUn9mpcnPQpRJPZiCrMo1nMtWy0jbEkZAcFLBPB6LV+wOmHAnnj9uH782X8jvh8QEq4diNRdiU7QQIdqCkBU1RlygxJBVEYHhhseg4fro2NFnN+7fePlgcfBkW1pAbv/IjwHU3CqRneh6eJM7dcxmeWZq8usUpnemz0PUSw2rHCqN37oLynfP89ZQg6w0dBMNsoA8rJQIwgsaY0tWu4TynRPemD227aXDL316NiUKbfG2L6at9O3pVJpqVVRrYxG/+QhhgRTIoyuOGrRG5IZIiFYzIe3wGUtoCetPVvzJ00WveP07Q++c9EBQ27N3e45nQ4OF5xYkFDpESKC2GtnHSsxBlGyWy/VmUnRloPs5fKyzb2xf1UEKeS+/7Vju2OUt8ZYHLcO6XdO0kOAKfoHl8/mgYduccpogrRbslcWgWd9zBicGv7d7dPf9Rb94OmkUUsMbef3qp5yUSoD9uDCxsHd56/LX04n01qSRxEi5LFZFHc85PJobfWHUHt3y1sBbz+e9vHOa5/W8ESSfr605ZWsEMI47kjtybWei81emb64TUYmoZ0H9LHQ7OKjhNSVcBmTPJ+GXxI3dtm46vOlqOCvM1huKa3HMQfxywkoYsp2ziDbEzEFEBdheRDei5iPEmYiyEokE3Ugc6RhEXMiYUolU9weXfvChd4beQd3lpKHpmhXVP5VLCakGJdxQ+eQZuTczTBn90kUOIi1EZPxuOGAsSS/prGXZ4zEvO1Qcust0zJ+kjNQXTN28QWMBcRVZkSIqRFCot+EiIO1TZ7Iw+dhoYfRfR53R2TTpQ+3yasbYzbx2lU7FUqw73c26m7vJtiYRTxiJWGKNSN35fu7tbOxEzYtd1X1V9sjoke9s69v2r3uze2dSsD/O6hT1QlgnZboP94O+fN/1TW7T3el4+su6o2eEzxR19otJNoZFpCUObLJtAVnoujgB7f6J/u/tHN55/2ySFdCR6Pi2aZkZHLxY1RKDJwBsK066sdwYbQu2kwbAyp5TwlrY0YjMhiaGwrYXRGr0GqmO9R/u+vDal4+9fFInKCQTTGNZ3/fTYbQktT7JEMNIhQ1x+HOEsER6Tu+P2+KUPNb32YL0glUz9BhDRLWlUCzcojO93dTNDaZu/g2cJjzfS7u+i5iz27Gdw67vIor6ms/8TWcwCsGxgelEGxcmFr64rGVZb0tDC1nziF5GebycuPBIMpv0yo6VX+lp7bl7YGLgied3PX/XQGGgWvR3rjVfZwz1QljlUoULqv0BUoxRZ/SbE+7EU63x1sdjemx1aCPD6zHjbDwgLSNB38k5OdA4OY7r7Dg0duhTY+7YSadUtZDQEz0pK3UDDb7wppxDxSxADF7AtjZZTSU+WPIIdtnLXMgwEFnZtk334+8QtVy99Oofv3zs5WnjyaoB+idd19NySw0pyd3yU3NEdIVuALinihNROGaU9GdKX7J7hpgDebKfpce8QduzH8GN32Xx9pq+s6n+1pme7kp2Pdrd3N0b7rd4hKyk6Lhc65KhG+klzUtu++Tln1z92FuPfWjEGalWH4tCDVKd48QbaguqwfGd3f2F/htjWuzb6Vj6BiEgFFa8WF1y8RW03OzWmPaE4zs/8Zg360Ql0BJv+VzciltC9Q3goEWxeHBikA725mRzUIQX5niR2YolKu+ItztZtRRD47+eCxov6NwzvqfvZGQNPvOzaEQW9wmnhHIIa4JuMJQUxX9hmCgcEoIN43+ASNfzqWVGtv1xXGc2CMY+20NF0SS+ILHg0Y50x9pUMkX7Dau8sq2NGLghR1jRKU0CmWRm9f9c/T9fefztx6+tEGmV25fVXELmDepllfBUe6fSfEVnl+u7N4w6owxGecPFYTbijECUSJbAE+6EbXv2x4t+8fKCX/jSmSQroCHRcCsVgr0ph1TUXg4OH6SrccpKhWlqyVVZFOH58FexMij36okb+bF7Dmm83rf4fVhmnzFQB/Q9PytHWKJBOIoxe2zKxod3CpD0QPiOcTIrSRPhElooTuvPHLPHzrTgctaB+lmn1fl0Y7JxHVqXyGCRC5Ur3WhfYeEkYQRi2oRBgtoYWpl0nS5MIK2/ft9fb19gLkjPMMKqCwO/eiGscuRUSyC5gTH2Ilcol0RopRUW/3swEGWMPXs2UghTN7uNuNEuR1YgFvg6YeUvmUgGHupa+dRBJioc7GaDycyUSd/jyWDCsbiK48CnthozVW60eVU4rtMnr+7J9SgZaDIOh2V4LpEQZAfkbuG7U7bFkh8Zmo/RjAwhqGhGd1zHGZgYmHeEtSCx4MGklVyD1iV0A4SkJI+YE7UqPdCqoRMA4tlEY3CzmiyWbE7SfdTLypvHU2aq+/oLr3+wXkWi9UxYIyfR7HkZJ6qnuXNkJWzkWpq7zuaSMFYHDcOwRN0GJ+zw5DAt8UM0Wm5slWgtEcRF8xQbOFklA6LCz1baYmajSVdscbXG97aGtuuSevKk6pnj9vi/itH0gqigXYsCkSHZEgs3DJ4WQgsHdwQiLu6MQESVKzA7aweOCXg8d9CAv1hfvm9eNfAm9ERv2krfSRESK42qgBJPNT5pHGQlZmGGiyzoq9Q12o8gMERb4sK0NLP0joszF0ddIZTSfY6jXAgc3WnYqU9yhTEtF1cA6huf4K0WW8+FbUtYs8AQBH7C4iAVB33JCpI0u48WBbhKPJwrCAhFOZ7fNJjVaAXCTG6kl4wn269bcd1JpYW2a28VXmEhpqsaSswSKcIS34tOSFogqNx4juUn8syetKl2RSTGCQtdBcfHj5+SL/25RGey81HMWwThiIg4JCHpwwqJi2vo5P0fBq385xi/GNEYuqDuZfzJBX/yw8hLX1qvC2z1EmEZVe7D9y9yM70bqqyWDPJ2mst5i8U5WRpGgVY+8XHi4oqLehYVz6UDvtxBTwdyfKqQPU1uwEWZZtpkGBEvruwr2lb8HSbzzHQ7J9yJLXbe3kSvw4+icnMJibDcCFnxPkwRVYkUUSjUxePF30BntntwNxqM5w0QKZumuYYK59CYifYjiazkSeN0sYlPLfiIW7k2JsM0KNoSq8Ctydbrrmi74nbp2J4e6p47b65ZhV7HqnaL16n2cQvbSkviqEv9s9ROc07zfwgf6cDkPvG46kbTvnIQ9SR6PL9Cywd69KDHiUQHPX/+lJladVH7RTNu14EsZKIw8e+Ihugk48NWy21XSS+mdCtpIhc9mnKTOf+7/mz/s+8Ov3vW/etPB61m6x1oDKe2RkkUKyN6UZHnDkx7jPzl+zSVXAhrcUxcsvCSh3mbz00VVkHnnUkkq9cwsYKq/SH+/qwaKmREVXNm/HjWyW5CkZmW/j2PUrdyTcJlhZo4fjHWKlIAnzZLkfuBkSMCRLBaoIHqbe/961f7Xp2xte9gYfA7qXzq77SY1kupYZnzknoy0WMoHWnhSYe2IeaVt0oWq4Vukb197G3Zi2peIGkm/xTRrty6JBAdJ1dCShFRrTwLUwa1LvF0HJ9de6rdsHRrle3Zj1dYEawLP6x6ibDKRUXpKmR1mLdLvG8ukZUQZXou6Q2mKcXFkAdxMMtjxUpOAInUSn6WrtDCZgdpCEFjUJLfcLLF975c3yfggEHyA5hRRRBa90jN5LLDhex4UeJ+4RRIdHpo5ND3do/tPi0fsXOBuBEPolXR7C3pyehueZ/J+2T6KvW0/eaL1iX0WnKgP7LJaKorzVU9E9ZMgSvPN7kFyJa52MIAjVO+kC/VeXEtlpAGRA9kmbjCfr0KB3zUFUG+8uuanmkxW05KTZ738jsGJwdvLNpFB86dUUQdMMKb5EtF32UfKu6gcHT06GO/O/Q7OLSy+Va/khuqAVlvVu5CE46Wk38XvTHp8fLFi/8eCvoqmFcrrPWeEtaaCII61RPcX3vO5/K5Qu7fraJ1GVIK2dmAxJdCrwRi0kunVYuDvlK/nqiRhA4JkSgspscsy7BOuoVj3B1/Jp6P3x/TYg9Ejykap5UfI3U+tt/0g2nLQksW2sdIDhh4DydyJ5599eirn5ntHs2zgZgWg+tCyTEZLjpwXRnNwoyQGOqBpLMy9Om9lpLLBcELFmTEfsbnh/FkbIxVwrz7HOuZsGoJCu+ZLX+qs4HhwvCP0vn0l7EkLt8fapkQZcWkKdXSgY9VNrKWiUsEwMr369HvMM6KP8b3faM52dzJsievij5RPPF1neko9j4q34/0jub5FfPUj0k9dFB7S2O/ALE9EIj2jffdv2NkxzfRpMzmIfJeflrRu2Qykx5IVWC7LS4+NADF0Wn/UXQmBavhvtOkfef6JKwVUZmITqvgTBgFnnXUC2HVWkH6LmPsSj44YM6HxgW/cHjUHr233Wz/tryHZMIKJ1aLSdVa0P6CAbB00Eue6eKAL5mniIVE6aAXxDdRmBg5nfpb9D5a7WNFVmAFMs+DQwF6GNEDSVEWJyw0lBfd4uDRsaOf6i/0z6m64ql0K2AWZozFQpIQ7UlhlMX/Hwp+fS2QeeSD4b3Cz0y+4AgQsdtOsO98D86o7Nkdz7IDEwdYFaBTY96jXggLVzSY50FAZ1V4n3dwHRaGXKJzf05fvYeLw4+0+W0Pyu+H2la8oKVFHPxC+R6eAJhYnS8Gq0gJVNUrXKV9LWx/Cd0UPMdGhHMamz1N61PwCiMYniG2H/UpbAfSQi7VcApeYUvOy91f8AobIZdg8xyY0uQ6rh1PxKeaw/2gOTzhJUr2nUxcdNFxXFL7035CUV2T9p3PpwuhH9MuUnTcP97Pfrnjl+x4vqoF1pfqpZewXgiL8THvz3DS2lCBuDr57zF26TNnYXrJaRXfnaLTF7fiPUKGgCurWFmj6MSLMUcLUgjY0NDBrLk0OUazg+iKtEAIYnDsw3udBauOuEI7eSecSsPdEJxBe3BwNldrJ9yJz+e83GYYksa0GEzs2lzmHvd9f7/PfHz+2+ZD1HsyAOnmnfxGi1k3CY81gIwW3cKUlYzUsUD7T9TxeE0RczCx/yBxEdo6z/GYm3dpFiSa4X/53i8xd7PcZtg8qrprLh/n5zNhMX7gf4r3CD5aZTLJdVxQ+gTXYc3JE8Z27E2WZ1HUIoqv4dJ/rBh6ZSGqCufqeVMqaj/nU9qH9KLkoOfDX0kjJLXPnMid2DTmnNb8wnJ/2+P5HuYxghQh0D0vMFmY/M90MX0TyVIkK21EmKENkFfaFxq6q+IKUwymZmNWo3DhYD4jc0kYN/5qx69Yf76/WsZx71mcg3jWUG+EJde0LubE9GSVNPFmHo19j086mVPjvEfyI/+SLqZvNgzDEFddRELQNok5hEitUMQlq5io+JK7fOKgF6txURGqWGFErWln/85vnAGr6jl5MTjTGHPGns0UMlmrwUqHw3b58F45ypJXSOWJ06FMxQ3SeNT/jo4dZb/b/7tKEZX4rD/LM405dSzPFuqVsACHh8QtPA28qQJxoc5wH2Psdh4+46o0J+ooOS+3A7MUjbgxFWVhLoNbpBWhaQe8GAIqL4eL4a9RNbmkvkYNJVfMDW4b2na6xe7zkpzKoegX+8Zz498y4sZXEd3K7hvQmMnuGjJEb6ZI3QcmBti7x95lu8YwzrAi+vhxe2+9EtX5JBy1eUF+ObeMqRYdII18iTG2is0BwDt9zB77liiiiwk/KMDSHEVXUo9H+vXKDoOVb9JjcDs6dvSRglc4XaKuCxve2cJQceg7hXxhkNTtfN8BGDsmxLQlan8+/AS3ycIk2358O/vVrl9VJauLmi9C3fDj/GJb12RV7xFWuavQR/lK4berdK9fw5tIH+P6rXMaNZwonvhB0k5+MqWn1hFp8VHsOLgxQ0+OrKi4LlJB3quH71EPJrmIj9+P58d3/2b/b7CSxM4AYZ23URcWToZzw/e0aq0/jSfiFB7QIA7Ppw4AAaFcp04G3WUHxg+wt4+/jQWLis+9PL2crV60GpbZ39k5unPOi6FnC+cTYQk8xXP87/IaViXD/tv47+/iK5D2uVpxGrAHPh/X42/GE3GLSIv6aX2KsLTi1OCM0L3T90iUaPhGOE9RNovjzxt4uzv2yJZDW24s+kXnDB1PH+Tkf15ixBn5WdyOX9XoN94del1xJw7MwZTbq/rtfrZ/eD8uUhWfrynWxC5feDlb3LwYHmE/eunIS5DpnDc4HwkLcPjq4Jf4kEsU3lkF4kL96+94MXPruahvoV9vIDfwiTa/7fG4Gc/IE5RRgBcQandcpeHZjpQv6lAqltkpSnOLzv4T+7+0N7t3tpqLy6mpq6oZzwcMFga/hAtP2k9/kQS9PL3H/soWgynU/dl+NlKsHIxiceWqhVexhY0LaT8eHD74g819m3EMn1c4XwlLYIS7i67ixFXJMhmd968wxp7nJHfWQ/Csm33ey3k3trP253RdN8QYdxAPrtRIERuMhmBatW5STQQHuZhsHBLWlADV3jWw61O7xnY9M5ubWea+szqhZi4CczAHC4P3er43kfJSX9Y0zaCRbcyltH6kMFLShB7FstQytrJ9JV18svmsjdalnSM7v8POQ5R3Fjt/cRP30armzujwtPKz56I+Y2rmqrZE25OGbqwS6QWAAx4rS2kzGGsv+vXCGYXSrp4oTOw+MHzgM0fto7PdAnMrJ34Zn59PfZxnGnEtvqrJaHrc9d3LxtxgolAlYEL08ublNMgDEZpdtLccGjt013BxeF6ZGc4mFGGVTwO/ymtY1XyFBjlpnQuvcaMx1nh7Op5+ENOMcYdcxxJj2NFsLEdYBbeQPTFx4p6j9tFHzlALzM3R5mcekX79DLzWfM1oIKH5h2rNyLi4YMIOCMuMmYN5N79t0p28p+AXzpviusLJo5dHWygS+VVuL/KU0TgXM+8SemJDi9HyYlu8baAt3ua3GC1+s9Hsp2NpP6kn/Qa9IWfp1ktxLX4HHn+GN+nOMp/PHalYKt1ldfW8r+N9N/ekenovbL5wdbvZXssSqN5wDS8rVDuWihA660x/mEf7OK7Ot8+pKlSEVRuobz3Ox4NVw1M8mjijQ1arwNKZjr5DXLkzvu8PYjozryGdrYWCaSnhh7o+lF3UtCiNiA8LATQTEV+6Dr1R30hu5Jn+8f7/2nR0U921kXCAcB7m0Wc1bOIR+7k6fuYFFGGdXPTwhRr1LRAE2lt+VC/d8afwGUEuEmLdknWYnReSFaWokeGvtNpZzO1/t+/dz7/R98bztmfPiU6D0wQi7ge5S0g1L6oRLmyezcWPuoUirJNDmtcf7q5xEO7g+i0o6+vh5JsRLN160vZsCHNDrF+xnjRDoWGfJLOItqagAD2QHXhq88HN97w3+t58XV0UY+W+UKG3UgDHxXe4C+75eHE7JSjCOvX61o8ZY2trPA7EdWO9h/lwbuq0Op+O6/H1BycPlvxuw8oNbHHT4qkVS0FYuuQwERGz5p384G/3/vb6Nwfe3DoP61SPzmAG4CNzoYtiPuJ86CU8U3MQP8on72ysUf96hztGzIn+xDNBVl1W13PNyeb1DVbDtN+jbzEkKP4dzcB0M/gtFiOXTZEyNpgN7X+y4k+evKTlkkr2QHMNqzhRvVKDrPbzyBtebIqsTgGKsE4dCOm38JH2mMQzWCVFQJr0Ok8V6qpBeEFiwbeTieS6plQTjZqKAh7uwqQOCm8iJjPGzAaTJRoTzGq0aAq1aZnMMKYkGGkz3fPfL/zvz7G5DYuXB16sUVTv43q0ldzKSOEUoQhrdojrXn4wfqdKz2GayyRwFV7H6gCpWGptOpG+PWElKNVDU28UIVnBDlnnZJUyWdyKB8aC8Rj9DPLCDU3CFHHpOgiw55ZLbsFnNhcBgtrOG+mr6fW+xCPxH5xP9cwzBUVYs4cRXpd4H18lrARoa57jV+V5q7HRNT3dZrU9ZCZNSxgJCkcIGXbRDhqvEV0ZOpETTYWRXFTFN8M0iLRAYngupIhLWpbccWnLpXMpNVzDLYhq1apE9P31erIoPtdQhDX72MHD/4/WSBMRZR3jUde8I67GWON1lmWtQfRksHCgxPTHJRoDP3k8zjSIuORZiGELHXfZRGM3IjAx9ceMmekrF12J5vNzjTRfaHm9xmLLIO9PvZr3nirMIhRhnRk4vBh/MbderlYD+SInrgfnUzN6k9n0N3EzbsDqBnIEEJYY2SUjW+D90DojMor2+IYDQqUbIizcRCq5uHnx7QvMBedqrp7FtVTbebtWtQgbBfUlSlN15qAI68wCV9t/5AdxtRqGxXvMsKI4l9KfiumglbDWkxyBXJu5a0R+uuEcFO5iMrE8al2OskpmVPN+yFhiyjsqHounl7cur9VpcCawjg8rgVK9u8JjHC5TeB8vqNe96+e5hCKss4PD/Op7PU8ZnSrL49vnen0rrafXGIZhCZ9yQT4gpyjIjYAPz5AfG71Fh2MgGqOIjGNl+8q/PYtvsYfvg1/VKKhv44stkCnMV6HrvIIirHOTJn6qirpZ1LcGeH2rmlr6nMCMmatQYxIEI4wDy9Ww4PckpvfQhGl5QEb0Zx5d0V3SPL+ziAwvpu/j+6CSBAXkdAtj7HJFVGcXirDODZ7iV+bP1yCuL/IVqdvmkn4LhnTRlhoirTImdLC6EZOlMdU4HF/FSa7k50i6KN9aG1rXn8G3ZHF3hHdq6KmQ7t3Pieq8tX0+l1CEde6Q5XWtlXwcGauSJmJ16um5Ut+KabEg6gtVCcFE6jF7bNpj4ckVElbRLYmy5C9BWvRYNv2xru86ZzD9e4k7clSqUzG+4od99c8VnFUVzgIUYZ17ZPkyOEY1VXOSvI7Xt341g161M4qYHoOx+FQnqs9oNFW5VUIMygAJwV/eKTp0ExFZGJlJAzRElFUsFImw6Bb8/WwXsy/jLVPbq1hjizrV1bz+qPRU5xiKsObW0Ndrufi0Wpq4nqcu952rwrzt2K/6bjDUVYDmHPrutMfifoquPJe5rssKdoE5BaeUqCIERsSWd+jxIjqbLEzOVlHb4DKF13nLlFVlhffznKzOW0viuQZFWHMLNm/vWcn7EyulQWmu29rOT7qzqt8qesX9qEeFU3iClK1skRyPCUnLDaKsQq7AMByWSMx3w9FkRFYFh9lZO4zE8Hvc+rP9L8zCpt/Myf7hKkSV5do5IUVRMoU5BEVYcxNZ3p94bQ1PrU6e1rxSI62ZVUy4E1uLxWJf9OiRh4MKiLoUkRO/FYtFIq38ZJ4VJgsUdeGWn8gTWSEdFJOpxXTqw6OHT0c13sM/o0druGY8y/VU0M4popqDUIQ1t7GZt/igvlXthF3DUxxEDmdcEY4BFoViYZvnBiPYRZQFV9FyNSwxfp1urjMVaYGkcnkiLpAVfgaZ4fdU8+KPzzv5kf2j+0/FU8zils37uFdVJezncpOPc+sghTkKRVjzA8/zwvyNNa78qM0cYow9cKbTxH67//MgHTqCeC0LkVAUlOZxshIRk0xejuMQSRWdIv1M93mc1DyHVh/3D+//l6ybPdmI5z6uZYPPfCXYku1LXZss1gsUYc0f2Fy/1cEY+1mVx6EQ/xXG2C7uDHFGkPfyu7OT2Z+BWELSquBfCyID+WDYawlZie/yjd+Hx+LvJouTg5sObprpmDCDv+dhXuNLV+n7QztNl7J9mV9QhDU/61sYWvChGm6nqNu8yVOiM+J2OlQY+qeCXciioC5Gr0eBMeyIknADAYU3TkhEYpyowvvcIj0+7+TZgeED/5LzcjOJrsR07jdrrJ5u4XUq5fo5D6EIa/7XtzAaqtoJfSuvb/1jjb64U4qyhnPDdxXtIpEV7I7LEZbt2KzgBKSFmlZIWk4xvF/+jsfki3l2bOzYU787/DsINauhk0/qeb3GwsNuvogBmYLq+5unUEMo6gMZbtX7hRpF9yzXef1sNlfBWoyWOzJW5uG8l2dHJ4+W/G5503K2ML2QGqPNmEmFeWH2B//20I1U08M+QsgYsvnstuf3P/8+x3eqOVzcwd9zNYU6NG3f50Z6yvFznkMRVn0hzZfur6vRe7iRyya2zNYgipZ4y30a074wVBwqSce6GrpYJplhSSNJbTpEWnqcCArfZQtlIX8Yzg0/saVvy6eLftGuUKday1dEV9Ug559xTZUao1UnUIRVn0DbyQ9rLOUL3dGnqzijnhQMzfi24zuI9EJ0JDpYIhZ4vmNIBUgL/zdifEYh7JK5J1bBLQz2jfXdc2ji0FNFv1iuXw8E9eUaK39iVfVrNWp8CvMQirDqG9fxiKuaRQ1WzP6Fr5b1zfao+tZ4KzN1k9TsICakhCI9RErI23PsXDH37PHJ41+a9CZ3nEbK28dTXoy9V+mfgsI8hMUL7hBJ+VVuA7xP8XSEp1+MPm9ST77ZYrQcyxiZY01GUy4dS+cs3Ro3NGMgpsWe1jX9Do1plWpQBm+nGaix7TmuPZtz3mEKCgqnhh7exuPXuKHX7rLZIixeGEeNKqMxrZ2TkLhVgqhTvVRjW4vcvWLOurMqKCicHnq5VqkWcdWat1cOd5d5nttOYft+OIOI8J0Z1LIUFBTqAIhg7uSK8FppIohrpri1zHMgHZ1pBIh2mvEa23SMR23zZsKQgoLC7CDD3UxzMyCumdg0l4uwQEK1cDPvgaxVp8LzK6JSUDjPIaYZ10rDnqtR37q9zN/cWiP9e2UGdarnzrXLqoKCwtzDBm7FUqu+BelCuZW9r8ywhtXJn6MWQW6vMWVZQUHhPEc3J5ljNchkmEsJZBnEnZVWCTnS/DG1UtBDfMVRQUFBYcbE9eAMyOUYH5HFONFFf4+oS6SdtUgwN1dnMSooKMwPrJmBfqvIa1H3VSi6Pz6D9A/Ff5X+KSgozApu56aA/izfttcYXqqgoKBwSjB4mlgrWprJbbzG9BoFBQWFWUEvT/NOlax+OttmggoKCgozsSV+8SSI6lf8b5T4U0FB4ZzhjhorgMe4E4QiKgUFhTnT5vPFSC9gjssazvisRAUFBYVTgRgK8ZUaXusKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK7Nzg/wcdOHtvwMcw8wAAAABJRU5ErkJggg==", "text/plain": [ - "" + "" ] }, "execution_count": 2, From d0629381001e365640097e7de78b36c980218b0f Mon Sep 17 00:00:00 2001 From: charliegiu Date: Thu, 5 Nov 2026 14:03:05 -0700 Subject: [PATCH 12/12] fix forces graph, add multiple runs to simulations at densities --- .../paper/figures/densitites/densities.ipynb | 2935 +++++++---------- .../paper/figures/densitites/densities.svg | 2059 ++++++------ .../nonbonded_bonded_forces.ipynb | 561 ++-- .../nonbonded_bonded_forces.svg | 542 +-- 4 files changed, 2941 insertions(+), 3156 deletions(-) diff --git a/phantomwalk/paper/figures/densitites/densities.ipynb b/phantomwalk/paper/figures/densitites/densities.ipynb index 3c9c885..b481948 100644 --- a/phantomwalk/paper/figures/densitites/densities.ipynb +++ b/phantomwalk/paper/figures/densitites/densities.ipynb @@ -2,617 +2,10 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "a5f58405-3c69-4489-8284-82be66f3a7a9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 99.45; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 125.16; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 135.87; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 137.84; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 147.81; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 160.14; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 171.57; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 180.21; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 188.88; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 196.4; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 202.83; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 208.65; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 213.83; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 218.78; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 222.95; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 226.85; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 230.12; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 233.14; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 1015.34; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 1106.82; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1561.98; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 100.24; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 123.45; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 136.15; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 144.04; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 153.63; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 165.84; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 176.93; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 185.75; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 194.17; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 201.61; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 207.96; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 213.39; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 217.68; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 222.61; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 225.76; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 229.85; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 233.06; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 236.47; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 910.27; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 1057.15; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1515.43; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 102.83; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 125.96; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 138.44; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 145.82; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 154.92; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 167.19; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 178.28; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 187.32; ETA: 0.0 minutes\n", - "Step 495 of 1000; TPS: 195.81; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 203.09; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 209.47; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 215.8; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 220.59; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 225.61; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 229.28; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 233.14; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 236.37; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 239.61; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 962.77; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 1067.07; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1539.12; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 97.98; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 123.26; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 136.53; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 144.1; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 154.18; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 166.49; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 178.02; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 186.36; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 194.56; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 198.87; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 203.8; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 208.05; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 210.9; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 214.01; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 217.35; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 219.83; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 222.47; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 224.38; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 841.67; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 930.8; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1330.45; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 98.92; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 121.61; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 133.92; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 138.79; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 147.06; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 159.5; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 170.6; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 179.54; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 188.02; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 194.97; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 200.85; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 206.46; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 210.67; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 214.52; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 217.72; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 220.98; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 224.5; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 227.06; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 944.62; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 1007.27; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1446.39; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 82.07; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 100.33; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 111.67; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 125.54; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 138.88; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 149.94; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 157.74; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 165.67; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 172.28; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 178.07; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 182.2; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 186.29; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 189.75; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 193.1; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 197.34; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 200.97; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 204.96; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 208.62; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 916.68; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 1009.39; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1330.44; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 89.15; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 109.31; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 119.04; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 130.73; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 143.1; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 152.54; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 159.79; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 165.63; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 170.82; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 175.69; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 180.26; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 183.75; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 187.58; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 190.15; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 194.47; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 197.76; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 202.02; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 205.33; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 807.12; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 891.7; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1170.9; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 89.04; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 107.08; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 119.24; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 133.55; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 146.87; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 157.72; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 166.15; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 173.46; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 179.15; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 184.4; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 189.01; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 193.18; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 196.89; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 200.03; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 204.11; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 207.77; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 211.74; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 215.6; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 822.16; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 911.27; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1187.02; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 91.31; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 110.28; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 122.02; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 136.26; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 149.9; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 160.85; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 169.97; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 175.18; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 181.46; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 186.94; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 191.4; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 195.61; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 199.5; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 199.39; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 203.78; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 207.54; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 211.87; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 216.04; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 923.17; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 997.46; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1319.68; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 88.92; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 108.38; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 120.58; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 135.08; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 148.39; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 159.44; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 168.03; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 175.38; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 181.88; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 187.18; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 191.66; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 195.78; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 199.44; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 202.55; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 206.89; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 210.24; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 214.48; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 218.43; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 858.45; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 959.83; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1246.47; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 83.18; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 101.28; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 122.08; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 137.32; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 148.49; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 156.98; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 164.05; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 170.37; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 176.58; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 182.88; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 189.43; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 194.92; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 199.72; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 204.4; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 208.06; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 211.65; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 214.87; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 217.93; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 748.9; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 861.8; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1087.12; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 84.6; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 101.19; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 122.63; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 137.95; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 148.88; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 157.61; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 163.98; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 170.31; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 177.01; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 183.52; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 190.13; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 195.98; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 201.16; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 205.67; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 209.82; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 213.46; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 216.97; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 220.27; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 778.41; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 883.56; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1119.79; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 83.46; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 101.61; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 122.76; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 137.65; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 148.65; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 157.47; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 163.83; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 170.56; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 177.22; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 183.22; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 189.55; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 195.48; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 200.57; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 205.38; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 209.24; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 213.18; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 216.6; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 219.8; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 786.23; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 876.13; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1114.41; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 83.55; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 101.12; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 122.69; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 138.11; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 148.9; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 157.89; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 164.38; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 170.97; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 177.53; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 183.98; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 190.75; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 193.47; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 198.35; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 203.07; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 207.45; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 211.63; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 215.04; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 218.46; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 814.67; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 901.84; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1140.77; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 84.24; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 102.26; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 123.14; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 138.3; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 149.74; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 157.65; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 163.85; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 170.06; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 176.53; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 182.94; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 189.29; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 194.96; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 200.01; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 204.76; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 208.93; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 212.95; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 216.47; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 219.86; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 771.7; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 865.44; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 1112.03; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 1.002750039100647\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 75.81; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 97.74; ETA: 0.2 minutes\n", - "Step 165 of 1000; TPS: 116.16; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 128.96; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 138.67; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 148.08; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 157.59; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 164.59; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 171.6; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 177.37; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 182.8; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 188.55; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 193.57; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 198.11; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 202.71; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 206.57; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 210.66; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 214.6; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 496.31; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 492.34; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 489.06; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 0.9817500114440918\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 76.71; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 99.3; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 117.7; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 130.2; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 140.24; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 149.88; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 159.04; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 166.06; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 173.17; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 179.12; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 184.77; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 190.67; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 195.35; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 200.1; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 204.95; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 208.73; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 213.42; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 217.34; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 517.63; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 498.41; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 497.07; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 0.9817500114440918\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 77.5; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 99.29; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 117.63; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 130.09; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 140.09; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 150.06; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 158.75; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 166.52; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 172.73; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 179.01; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 184.48; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 190.6; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 195.37; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 200.35; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 204.66; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 208.75; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 213.24; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 217.45; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 469.85; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 480.2; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 496.79; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 0.9817500114440918\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 70.62; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 93.84; ETA: 0.2 minutes\n", - "Step 165 of 1000; TPS: 112.49; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 126.22; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 136.87; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 146.68; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 156.07; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 163.4; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 170.65; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 177.08; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 183.0; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 189.2; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 194.56; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 199.41; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 204.22; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 208.19; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 212.83; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 216.66; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 500.86; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 505.96; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 504.62; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 0.9817500114440918\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 77.27; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 99.53; ETA: 0.1 minutes\n", - "Step 165 of 1000; TPS: 118.01; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 130.92; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 141.21; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 150.58; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 159.68; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 166.95; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 173.29; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 179.61; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 185.14; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 190.17; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 194.66; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 199.03; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 203.32; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 206.95; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 211.18; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 215.11; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 494.37; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 503.42; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 496.17; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 0.9817500114440918\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 70.86; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 95.06; ETA: 0.2 minutes\n", - "Step 165 of 1000; TPS: 110.62; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 124.74; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 136.0; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 146.57; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 156.96; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 167.24; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 176.69; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 186.0; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 193.92; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 202.78; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 210.44; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 217.48; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 223.52; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 230.07; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 236.21; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 243.07; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 405.89; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 430.26; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 437.75; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 0.8452500104904175\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 70.35; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 94.51; ETA: 0.2 minutes\n", - "Step 165 of 1000; TPS: 110.29; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 124.22; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 136.16; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 147.19; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 157.63; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 168.0; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 177.19; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 186.62; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 194.46; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 203.15; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 210.97; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 217.75; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 223.84; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 230.26; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 236.49; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 243.12; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 418.6; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 433.42; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 440.51; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 0.8452500104904175\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 69.94; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 89.53; ETA: 0.2 minutes\n", - "Step 165 of 1000; TPS: 104.18; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 118.73; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 130.83; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 141.03; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 151.84; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 161.92; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 171.52; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 180.46; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 188.38; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 196.67; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 204.61; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 211.18; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 217.44; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 223.6; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 229.79; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 236.65; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 417.28; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 427.34; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 437.7; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 0.8452500104904175\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 70.54; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 94.37; ETA: 0.2 minutes\n", - "Step 165 of 1000; TPS: 109.85; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 124.1; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 134.89; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 145.14; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 155.53; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 165.61; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 175.31; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 184.6; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 192.62; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 201.1; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 208.63; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 215.38; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 221.55; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 227.69; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 233.73; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 239.92; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 417.98; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 427.96; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 437.69; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 0.8452500104904175\n", - "(10000, 3)\n", - "Initializing simulation state from a gsd.hoomd.Frame.\n", - "Step 55 of 1000; TPS: 71.85; ETA: 0.2 minutes\n", - "Step 110 of 1000; TPS: 95.74; ETA: 0.2 minutes\n", - "Step 165 of 1000; TPS: 110.62; ETA: 0.1 minutes\n", - "Step 220 of 1000; TPS: 125.01; ETA: 0.1 minutes\n", - "Step 275 of 1000; TPS: 136.78; ETA: 0.1 minutes\n", - "Step 330 of 1000; TPS: 147.75; ETA: 0.1 minutes\n", - "Step 385 of 1000; TPS: 158.14; ETA: 0.1 minutes\n", - "Step 440 of 1000; TPS: 168.32; ETA: 0.1 minutes\n", - "Step 495 of 1000; TPS: 177.75; ETA: 0.0 minutes\n", - "Step 550 of 1000; TPS: 187.0; ETA: 0.0 minutes\n", - "Step 605 of 1000; TPS: 194.92; ETA: 0.0 minutes\n", - "Step 660 of 1000; TPS: 203.39; ETA: 0.0 minutes\n", - "Step 715 of 1000; TPS: 211.01; ETA: 0.0 minutes\n", - "Step 770 of 1000; TPS: 217.76; ETA: 0.0 minutes\n", - "Step 825 of 1000; TPS: 223.58; ETA: 0.0 minutes\n", - "Step 880 of 1000; TPS: 229.98; ETA: 0.0 minutes\n", - "Step 935 of 1000; TPS: 236.13; ETA: 0.0 minutes\n", - "Step 990 of 1000; TPS: 243.03; ETA: 0.0 minutes\n", - "Step 45 of 200; TPS: 423.82; ETA: 0.0 minutes\n", - "Step 100 of 200; TPS: 438.15; ETA: 0.0 minutes\n", - "Step 155 of 200; TPS: 439.55; ETA: 0.0 minutes\n", - "The closest particles after DPD + FIRE are: 0.8452500104904175\n" - ] - } - ], + "outputs": [], "source": [ "from flowermd.library import LJChain, RandomWalk, PhantomWalk\n", "import unyt as u\n", @@ -636,6 +29,8 @@ "n_steps_dpd = 1000\n", "n_steps_fire = 200\n", "\n", + "device = hoomd.device.CPU(notice_level=0)\n", + "\n", "for density in densities:\n", " for n in range(runs_per_density):\n", " molecules = LJChain(\n", @@ -671,7 +66,8 @@ " n_steps_dpd=n_steps_dpd,\n", " n_steps_fire=n_steps_fire,\n", " log_file_name=f\"log_density{density}_run{n}.txt\",\n", - " gsd_file_name=f\"trajectory_density{density}_run{n}.gsd\"\n", + " gsd_file_name=f\"trajectory_density{density}_run{n}.gsd\",\n", + " device=device\n", " )\n", " \n", " for writer in sim.operations.writers:\n", @@ -698,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "id": "990b4f59-f461-43b7-a949-2dc4c9613630", "metadata": {}, "outputs": [ @@ -708,12 +104,12 @@ "\n", "\n", - "\n", + "\n", " \n", " \n", " \n", " \n", - " 2026-11-04T20:31:46.708260\n", + " 2026-11-05T12:20:50.346122\n", " image/svg+xml\n", " \n", " \n", @@ -729,8 +125,8 @@ " \n", " \n", " \n", @@ -748,17 +144,53 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1344,12 +845,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1386,12 +887,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1402,12 +903,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1418,12 +919,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1433,7 +934,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1514,349 +1015,349 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2413,7 +1914,7 @@ "L 410.77 41.76 \n", "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2424,37 +1925,6 @@ "L 313 2009 \n", "z\n", "\" transform=\"scale(0.015625)\"/>\n", - " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2938,39 +2276,39 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2987,33 +2325,33 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -3024,39 +2362,39 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -3067,14 +2405,121 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3181,7 +2626,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3239,12 +2684,18 @@ " )\n", "\n", "first_fire_step = n_steps_dpd/log_write_freq\n", - "ax.vlines(x=first_fire_step, ymin=0, ymax=max(pairs[0][slice_idx:]/num_elements), color=\"orange\", linestyle=\"--\", label=f\"First FIRE Step (Step {first_fire_step})\")\n", + "ax.vlines(x=first_fire_step, ymin=0, ymax=max(pairs[0][slice_idx:])/num_elements, color=\"orange\", linestyle=\"--\", label=f\"First FIRE Step (Frame {first_fire_step})\")\n", "plt.suptitle(f\"DPD Pair Energy ({runs_per_density} runs per density)\")\n", "ax.set_title(fr\"{npoly} {nmono}-mers, $k_b = {bond_k}$, $A = {A}$, $r_{{cut}} = {r_cut}$\")\n", - "plt.xlabel(\"Frame (time/log_freq)\")\n", + "plt.xlabel(\"Frame (timestep/log_freq)\")\n", "plt.ylabel(\"Energy/N\")\n", - "ax.legend()\n", + "ax.legend(reverse = True)\n", + "\n", + "# Force an x-tick at slice_idx so it's clearer that we're slicing our data to start at slice_idx\n", + "x_ticks = list(ax.get_xticks())\n", + "x_ticks.append(slice_idx)\n", + "ax.set_xticks(x_ticks)\n", + "\n", "plt.savefig(\"densities.svg\")" ] }, diff --git a/phantomwalk/paper/figures/densitites/densities.svg b/phantomwalk/paper/figures/densitites/densities.svg index 3afc3cc..4aaacdc 100644 --- a/phantomwalk/paper/figures/densitites/densities.svg +++ b/phantomwalk/paper/figures/densitites/densities.svg @@ -6,7 +6,7 @@ - 2026-11-04T20:32:33.983628 + 2026-11-05T12:20:50.138100 image/svg+xml @@ -41,17 +41,53 @@ z - - + + + + + + + + + + + + + + + + + - + - @@ -104,15 +119,15 @@ z - - + + - + - + - + - + + - + - + - + - + + - + - + - + - + + - + - + - + - + + - + - + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + - + - - + - + @@ -637,12 +742,12 @@ L -3.5 0 - + - + - + @@ -679,12 +784,12 @@ z - + - + - + @@ -695,12 +800,12 @@ z - + - + - + @@ -711,12 +816,12 @@ z - + - + - + @@ -726,7 +831,7 @@ z - + @@ -807,349 +912,349 @@ z - - - - - - + + + + + + - + - - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - + - - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - + - - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - + - - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - + - - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - + - - + + - - - - - - - - + + + + + + + - - + + - - - - - - - - + + + + + + + - - + + - - - - - - - - + + + + + + + - - + + - - - - - - - - + + + + + + + - - + + - - - - - - - - + + + + + + + @@ -1706,7 +1811,7 @@ L 414.72 307.584 L 414.72 41.472 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + @@ -1716,37 +1821,6 @@ L 1997 1497 L 313 1497 L 313 2009 z -" transform="scale(0.015625)"/> - - - - + - + - + - + - - + - + - + - + - + - - + - + - + - + - - + - + - + - + - + @@ -2105,33 +2179,33 @@ L 260.024688 69.571219 - - + - + - + - + - - + - + - + - + - + @@ -2148,33 +2222,33 @@ L 260.024688 84.572 - - + - + - + - + - - + - + - + - + - + @@ -2191,33 +2265,33 @@ L 260.024688 99.572781 - - + - + - + - + - - + - + - + - + - + @@ -2233,14 +2307,14 @@ L 260.024688 114.573562 - - + - - - + + + - @@ -2352,22 +2400,23 @@ z - - - - - - - - - - - + + + + + + + + + + + + - + @@ -2474,7 +2523,7 @@ z - + diff --git a/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.ipynb b/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.ipynb index 0666479..4e3b5fc 100644 --- a/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.ipynb +++ b/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "6b3d4454-eea3-4559-88e0-2b5ce732f262", "metadata": {}, "outputs": [], @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 13, "id": "1f6e0fee-aca0-4cb1-916d-02c1cb640f62", "metadata": {}, "outputs": [ @@ -33,11 +33,11 @@ " \n", " \n", " \n", - " 2026-10-31T13:31:23.444591\n", + " 2026-11-05T12:26:18.237419\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.11.1, https://matplotlib.org/\n", + " Matplotlib v3.11.2, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -68,12 +68,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -118,7 +118,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -159,7 +159,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -195,7 +195,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -242,7 +242,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -298,7 +298,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -392,17 +392,17 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -410,12 +410,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -472,12 +472,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -490,12 +490,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -508,12 +508,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -523,8 +523,163 @@ " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", + "\" clip-path=\"url(#p981fb1d836)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #ff7f0e; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1505,7 +1643,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1521,18 +1659,27 @@ ], "source": [ "A = 250000\n", - "k_b = 250000\n", + "k_bond = 300000\n", "r_cut = 1.01\n", + "r_0 = 1 # bond length\n", "x = np.linspace(0, r_cut, 100)\n", "fig, ax = plt.subplots()\n", "ax.plot(x, A*(1-(x/r_cut)), label=r\"$F_C=A\\left(1-\\frac{r_{ij}}{r_{cut}}\\right)$\")\n", - "ax.plot(x, 0.5*k_b*(1-x)**2, linestyle=\"dotted\", label=r\"$F_B=\\frac{1}{2}k_b(1-r_{ij})^2$\")\n", - "ax.set_title(fr\"$k_b = {k_b}$, $A = {A}$, $r_{{cut}} = {r_cut}$\",fontsize=12)\n", + "ax.plot(x, -k_bond*(x-r_0), linestyle=\"dotted\", label=r\"$F_B=-k_{bond}(r_{ij}-r_0)$\")\n", + "ax.set_title(fr\"$k_{{bond}} = {k_bond}$, $A = {A}$, $r_{{cut}} = {r_cut}$, $r_0 = {r_0}$\",fontsize=12)\n", "plt.suptitle(r\"DPD Non-Bonded ($F_C$) and Bonded ($F_B$) Forces\", fontsize=12)\n", "ax.legend(fontsize=12)\n", "plt.xlabel(r\"$r_{ij}$\", fontsize=12)\n", "plt.savefig(\"nonbonded_bonded_forces.svg\")" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ca1efda2-033f-4b08-a27c-9042c25ceeae", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.svg b/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.svg index 3e519c7..47bdc42 100644 --- a/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.svg +++ b/phantomwalk/paper/figures/nonbonded_bonded_forces/nonbonded_bonded_forces.svg @@ -6,11 +6,11 @@ - 2026-10-31T13:31:23.056590 + 2026-11-05T12:26:18.048269 image/svg+xml - Matplotlib v3.11.1, https://matplotlib.org/ + Matplotlib v3.11.2, https://matplotlib.org/ @@ -41,12 +41,12 @@ z - - + @@ -91,7 +91,7 @@ z - + @@ -132,7 +132,7 @@ z - + @@ -168,7 +168,7 @@ z - + @@ -215,7 +215,7 @@ z - + @@ -271,7 +271,7 @@ z - + @@ -365,17 +365,17 @@ z - - + - + @@ -383,12 +383,12 @@ L -3.5 0 - + - + - + - + @@ -445,12 +445,12 @@ z - + - + @@ -463,12 +463,12 @@ z - + - + @@ -481,12 +481,12 @@ z - + - + @@ -496,8 +496,163 @@ z + + + + + + + + + + + + + + + + + + + + + - + + + + - - - +" clip-path="url(#p8858f931fc)" style="fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #ff7f0e; stroke-width: 1.5"/> - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + - + - + - - + - - - + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + @@ -1478,7 +1616,7 @@ z - +