From 2167e2ff0b8ff9d6e111bdd8f77d340a13a3ce9e Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 4 Jan 2022 12:55:22 +0100
Subject: [PATCH 01/24] tweaks PP file output

---
 TurTLE/PP.py                               |  14 +-
 documentation/sphinx_static/convergence.py | 224 +++++++++++++++++++++
 2 files changed, 234 insertions(+), 4 deletions(-)
 create mode 100644 documentation/sphinx_static/convergence.py

diff --git a/TurTLE/PP.py b/TurTLE/PP.py
index 8382ab13..4703d26a 100644
--- a/TurTLE/PP.py
+++ b/TurTLE/PP.py
@@ -783,9 +783,9 @@ class PP(_code):
         if 'field_dtype' in df.keys():
             # we don't need to do anything, raw binary files are used
             return None
-        last_iteration = df['iteration'][...]
-        cppf = df['parameters/checkpoints_per_file'][...]
-        niter_out = df['parameters/niter_out'][...]
+        last_iteration = df['iteration'][()]
+        cppf = df['parameters/checkpoints_per_file'][()]
+        niter_out = df['parameters/niter_out'][()]
         with h5py.File(os.path.join(self.work_dir, self.simname + '_fields.h5'), 'a') as ff:
             ff.require_group('vorticity')
             ff.require_group('vorticity/complex')
@@ -807,7 +807,13 @@ class PP(_code):
         if self.dns_type == 'resize':
             with h5py.File(os.path.join(self.work_dir, self.pp_parameters['new_simname'] + '.h5'), 'a') as ff:
                 for kk in df['parameters'].keys():
-                    ff['parameters/' + kk] = df['parameters/' + kk][...]
+                    ff['parameters/' + kk] = df['parameters/' + kk][()]
+                ff['parameters/nx'][()] = self.pp_parameters['new_nx']
+                ff['parameters/ny'][()] = self.pp_parameters['new_ny']
+                ff['parameters/nz'][()] = self.pp_parameters['new_nz']
+                if 'iteration' not in ff.keys():
+                    ff['iteration'] = last_iteration
+                    ff['checkpoint'] = df['checkpoint'][()]
         return None
     def launch_jobs(
             self,
diff --git a/documentation/sphinx_static/convergence.py b/documentation/sphinx_static/convergence.py
new file mode 100644
index 00000000..5f8d5343
--- /dev/null
+++ b/documentation/sphinx_static/convergence.py
@@ -0,0 +1,224 @@
+import numpy as np
+import h5py
+import matplotlib.pyplot as plt
+
+import TurTLE
+from TurTLE import DNS, PP
+
+base_niterations = 256
+test_niterations = 32
+
+def run_simulations():
+    # change these two values as neded.
+    # number of MPI processes to use
+    nprocesses = 4
+    # number of OpenMP threads per MPI process to use
+    nthreads_per_process = 2
+
+# 1. Generate quasistationary state to use for initial conditions.
+    # create a dns object
+    c0 = DNS()
+    # launch the simulation
+    c0.launch([
+            'NSVE',
+            '-n', '32',
+            '--np', '{0}'.format(nprocesses),
+            '--ntpp', '{0}'.format(nthreads_per_process),
+            '--precision', 'double',
+            '--src-simname', 'B32p1e4',
+            '--src-wd', TurTLE.data_dir,
+            '--src-iteration', '0',
+            '--simname', 'base_1x',
+            '--niter_todo', '{0}'.format(base_niterations),
+            '--niter_out', '{0}'.format(base_niterations),
+            '--overwrite-src-parameters',
+            '--kMeta',  '1.0',
+            '--niter_stat', '16',
+            '--checkpoints_per_file', '{0}'.format(16)])
+
+# 2. Generate initial conditions for NSVE runs at 2x and 4x the
+#    base resolution.
+    for factor in [2, 4]:
+        # create postprocess object
+        cc = PP()
+        # create a larger version of the field at iteration 512
+        cc.launch([
+                'resize',
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--simname', 'base_1x',
+                '--precision', 'double',
+                '--iter0', '{0}'.format(base_niterations),
+                '--iter1', '{0}'.format(base_niterations),
+                '--new_nx', '{0}'.format(factor*32),
+                '--new_ny', '{0}'.format(factor*32),
+                '--new_nz', '{0}'.format(factor*32),
+                '--new_simname', 'base_{0}x'.format(factor)])
+        # update "checkpoint" file, so we can use "base__x" as "src-simname"
+        # this is needed after "resize"
+        f1 = h5py.File('base_{0}x_checkpoint_0.h5'.format(factor), 'a')
+        f1['vorticity/complex/{0}'.format(base_niterations)] = h5py.ExternalLink(
+            'base_{0}x_fields.h5'.format(factor),
+            'vorticity/complex/{0}'.format(base_niterations))
+        f1.close()
+
+# 3. Generate initial conditions for NSE runs at 1x, 2x and 4x the
+#    base resolution.
+    for factor in [1, 2, 4]:
+        # create postprocess object
+        cc = PP()
+        # compute velocity field at last iteration
+        cc.launch([
+                'get_velocity',
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--simname', 'base_{0}x'.format(factor),
+                '--precision', 'double',
+                '--iter0', '{0}'.format(base_niterations),
+                '--iter1', '{0}'.format(base_niterations)])
+        # we don't need to update "checkpoint" file after "get_velocity"
+
+# 4. Run NSVE for the three resolutions.
+    for factor in [1, 2, 4]:
+        # create dns object
+        cc = DNS()
+        # launch simulation
+        cc.launch([
+                'NSVE',
+                '-n', '{0}'.format(factor*32),
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--src-simname', 'base_{0}x'.format(factor),
+                '--src-iteration', '{0}'.format(base_niterations),
+                '--simname', 'nsve_{0}x'.format(factor),
+                '--precision', 'double',
+                '--dtfactor', '0.3',
+                '--kMeta', '{0}'.format(1.0*factor),
+                '--niter_todo', '{0}'.format(test_niterations*factor),
+                '--niter_out', '{0}'.format(test_niterations*factor),
+                '--niter_stat', '{0}'.format(4*factor)])
+
+# 5. Run NSE for the three resolutions.
+    for factor in [1, 2, 4]:
+        # create dns object
+        cc = DNS()
+        # launch simulation
+        cc.launch([
+                'NSE',
+                '-n', '{0}'.format(factor*32),
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--src-simname', 'base_{0}x'.format(factor),
+                '--src-iteration', '{0}'.format(base_niterations),
+                '--simname', 'nse_{0}x'.format(factor),
+                '--precision', 'double',
+                '--dtfactor', '0.3',
+                '--kMeta', '{0}'.format(1.0*factor),
+                '--niter_todo', '{0}'.format(test_niterations*factor),
+                '--niter_out', '{0}'.format(test_niterations*factor),
+                '--niter_stat', '{0}'.format(4*factor)])
+    return None
+
+def ift(cfield):
+    ff = np.fft.irfftn(cfield, axes = (0, 1, 2))
+    field = np.transpose(ff, (1, 0, 2, 3)).copy()
+    return field
+
+def compute_curl(
+        cc,
+        cfield,
+        inverse_curl = False):
+    kx = cc.get_data_file()['kspace/kx'][()]
+    ky = cc.get_data_file()['kspace/ky'][()]
+    kz = cc.get_data_file()['kspace/kz'][()]
+    ff = cfield.copy()
+    ff[..., 0] = 1j*(ky[:, None, None]*cfield[..., 2] - kz[None, :, None]*cfield[..., 1])
+    ff[..., 1] = 1j*(kz[None, :, None]*cfield[..., 0] - kx[None, None, :]*cfield[..., 2])
+    ff[..., 2] = 1j*(kx[None, None, :]*cfield[..., 1] - ky[:, None, None]*cfield[..., 0])
+    if inverse_curl:
+        k2 = (kx[None, None,    :]**2 +
+              ky[   :, None, None]**2 +
+              kz[None,    :, None]**2)
+        k2[0, 0, 0] = 1.
+        ff /= k2[:, :, :, None]
+    return ff
+
+def get_velocity(
+        cc,
+        iteration = 0):
+    data_file = h5py.File(
+            cc.get_checkpoint_fname(iteration = iteration),
+            'r')
+    if 'velocity' in data_file.keys():
+        if 'real' in data_file['velocity'].keys():
+            vel = data_file['velocity/real/{0}'.format(iteration)][()]
+        else:
+            cvel = data_file['velocity/complex/{0}'.format(iteration)][()]
+            vel = ift(cvel)
+            #vel *= cc.parameters['nx']*cc.parameters['ny']*cc.parameters['nz']
+    else:
+        assert('complex' in data_file['vorticity'].keys())
+        cvort = data_file['vorticity/complex/{0}'.format(iteration)][()]
+        cvel = compute_curl(cc, cvort, inverse_curl = True)
+        vel = ift(cvel)
+    data_file.close()
+    return vel
+
+def plot_error():
+    c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
+               for factor in [1, 2, 4]]
+    c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
+               for factor in [1, 2, 4]]
+    for cc in c0_list + c1_list:
+        cc.compute_statistics()
+
+    factor_list = [1, 2, 4]
+
+    error_list = []
+    for ii in range(len(factor_list)):
+        factor = factor_list[ii]
+        c0 = c0_list[ii]
+        c1 = c1_list[ii]
+        df0 = h5py.File(c0.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
+        df1 = h5py.File(c1.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
+        vel0 = get_velocity(c0, iteration = test_niterations*factor)
+        vel1 = get_velocity(c1, iteration = test_niterations*factor)
+        diff = vel1 - vel0
+        vv = np.sqrt(np.sum(vel0**2, axis = 3))
+        dd = np.sqrt(np.sum(diff**2, axis = 3))
+        err = np.max(dd / vv)
+        error_list.append(err)
+        print('maximum error for factor {0} is {1}'.format(
+            factor, err))
+        df0.close()
+        df1.close()
+
+    f = plt.figure(figsize = (4, 4))
+    a = f.add_subplot(111)
+    fl = np.array(factor_list).astype(np.float)
+    a.plot(fl,
+           error_list,
+           marker = '.',
+           label = 'NSVE vs NSE')
+    a.plot(fl, fl**(-3),
+           dashes = (1, 1),
+           color = 'black',
+           label = '$\propto f^{-3}$')
+    a.set_ylabel('relative error')
+    a.set_xlabel('resolution factor $f$')
+    a.set_xscale('log')
+    a.set_yscale('log')
+    a.legend(loc = 'best')
+    f.tight_layout()
+    f.savefig('field_err_vs_dt.pdf')
+    plt.close(f)
+    return None
+
+def main():
+    run_simulations()
+    plot_error()
+    return None
+
+if __name__ == '__main__':
+    main()
+
-- 
GitLab


From 87ea3e165c9c584288f029faeeea8cb6f5f9fcd5 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 4 Jan 2022 13:00:31 +0100
Subject: [PATCH 02/24] moves convergence example to proper folder

---
 {documentation/sphinx_static => examples}/convergence.py | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename {documentation/sphinx_static => examples}/convergence.py (100%)

diff --git a/documentation/sphinx_static/convergence.py b/examples/convergence.py
similarity index 100%
rename from documentation/sphinx_static/convergence.py
rename to examples/convergence.py
-- 
GitLab


From 233f62b3f6441193219aff299fa50d212c1d8743 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 4 Jan 2022 13:50:55 +0100
Subject: [PATCH 03/24] adds text to discuss convergence test

---
 documentation/index.rst                     |   2 +
 documentation/sphinx_static/convergence.rst | 323 ++++++++++++++++++++
 examples/convergence.py                     | 100 +++---
 3 files changed, 375 insertions(+), 50 deletions(-)
 create mode 100644 documentation/sphinx_static/convergence.rst

diff --git a/documentation/index.rst b/documentation/index.rst
index 0566f7b4..62a336f0 100644
--- a/documentation/index.rst
+++ b/documentation/index.rst
@@ -18,6 +18,8 @@ Contents:
     chapters/api
     chapters/cpp_doxygen
 
+    sphinx_static/convergence
+
 
 Indices and tables
 ==================
diff --git a/documentation/sphinx_static/convergence.rst b/documentation/sphinx_static/convergence.rst
new file mode 100644
index 00000000..2fc0e6aa
--- /dev/null
+++ b/documentation/sphinx_static/convergence.rst
@@ -0,0 +1,323 @@
+Tutorial: convergence test
+==========================
+
+An essential property of numerical methods is their accuracy. With
+standard approaches to differential equations, one may use
+generic convergence tests to characterize algorithms and/or
+implementations.
+
+
+Navier-Stokes solution
+----------------------
+
+Since TurTLE contains solvers of the Navier Stokes equations in both
+velocity ("NSE") and vorticity formulation ("NSVE"), this allows for a direct
+convergence test: one should use both solvers with identical parameters, and
+compare solutions as the resolution is varied.
+
+Notes:
+
+    * we are discussing a partial differential equation, therefore
+      when we test for convergence we will increase both spatial and
+      temporal resolution.
+
+    * we will test convergence properties for a "statistically
+      stationary initial condition", since the smoothness properties of
+      the field will influence convergence properties in general.
+
+We present here a Python script that performs a simple convergence test
+with TurTLE. The script itself is provided as the file
+`examples/convergence.py`.
+
+The preamble imports standard packages, as well as TurTLE itself:
+
+.. code:: python
+
+    import numpy as np
+    import h5py
+    import matplotlib.pyplot as plt
+
+    import TurTLE
+    from TurTLE import DNS, PP
+
+As explained above, we should test convergence for a statistically
+stationary regime.
+The base simulation will use a real-space grid of :math:`32 \times 32 \times 32` points,
+and experience shows that quasistationarity is reached for this
+problem-size in a few hundred iterations (here `base_niterations`).
+For the convergence test itself, we use a relatively small number
+of iterations (i.e. `test_niterations`), otherwise deterministic chaos will dominate the
+difference between alternative solutions (rather than numerical integration
+errors).
+
+.. code:: python
+
+   base_niterations = 256
+   test_niterations = 32
+
+We distinguish two main steps of this script.
+First, we actually run the numerical simulations.
+Second, we analyze the results (i.e. we compute and plot the integration
+error as it changes with resolution).
+
+.. code:: python
+
+    def main():
+        run_simulations()
+        plot_error()
+        return None
+
+`run_simulations` is a fairly long but simple function.
+In brief, it
+    * generates the initial quasistationary state with the NSVE solver
+    * uses Fourier interpolation to double and quadruple the initial
+      resolution, yielding 3 vorticity fields "1x", "2x" and "4x".
+    * generates the corresponding velocity fields needed for the NSE solver
+    * launches the NSVE solver for the three resolutions
+    * launches the NSE solver for the three resolutions
+We give the full code below.
+We use the `launch` method of the `DNS` and `PP` Python
+classes --- the wrappers around the C++ `direct_numerical_simulation`
+and `postprocess` functionality.
+This means that the current Python code may be translated to a shell
+script directly, only by writing out the arguments (rather than placing
+them in a list of Python strings).
+
+
+.. code:: python
+
+    def run_simulations():
+        # change these two values as neded.
+        # number of MPI processes to use
+        nprocesses = 4
+        # number of OpenMP threads per MPI process to use
+        nthreads_per_process = 2
+
+    # 1. Generate quasistationary state to use for initial conditions.
+        # create a dns object
+        c0 = DNS()
+        # launch the simulation
+        c0.launch([
+                'NSVE',
+                '-n', '32',
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--precision', 'double',
+                '--src-simname', 'B32p1e4',
+                '--src-wd', TurTLE.data_dir,
+                '--src-iteration', '0',
+                '--simname', 'base_1x',
+                '--niter_todo', '{0}'.format(base_niterations),
+                '--niter_out', '{0}'.format(base_niterations),
+                '--overwrite-src-parameters',
+                '--kMeta',  '1.0',
+                '--niter_stat', '16',
+                '--checkpoints_per_file', '{0}'.format(16)])
+
+    # 2. Generate initial conditions for NSVE runs at 2x and 4x the
+    #    base resolution.
+        for factor in [2, 4]:
+            # create postprocess object
+            cc = PP()
+            # create a larger version of the field at final iteration
+            cc.launch([
+                    'resize',
+                    '--np', '{0}'.format(nprocesses),
+                    '--ntpp', '{0}'.format(nthreads_per_process),
+                    '--simname', 'base_1x',
+                    '--precision', 'double',
+                    '--iter0', '{0}'.format(base_niterations),
+                    '--iter1', '{0}'.format(base_niterations),
+                    '--new_nx', '{0}'.format(factor*32),
+                    '--new_ny', '{0}'.format(factor*32),
+                    '--new_nz', '{0}'.format(factor*32),
+                    '--new_simname', 'base_{0}x'.format(factor)])
+            # update "checkpoint" file, so we can use "base__x" as "src-simname"
+            # this is needed after "resize"
+            f1 = h5py.File('base_{0}x_checkpoint_0.h5'.format(factor), 'a')
+            f1['vorticity/complex/{0}'.format(base_niterations)] = h5py.ExternalLink(
+                'base_{0}x_fields.h5'.format(factor),
+                'vorticity/complex/{0}'.format(base_niterations))
+            f1.close()
+
+    # 3. Generate initial conditions for NSE runs at 1x, 2x and 4x the
+    #    base resolution.
+        for factor in [1, 2, 4]:
+            # create postprocess object
+            cc = PP()
+            # compute velocity field at last iteration
+            cc.launch([
+                    'get_velocity',
+                    '--np', '{0}'.format(nprocesses),
+                    '--ntpp', '{0}'.format(nthreads_per_process),
+                    '--simname', 'base_{0}x'.format(factor),
+                    '--precision', 'double',
+                    '--iter0', '{0}'.format(base_niterations),
+                    '--iter1', '{0}'.format(base_niterations)])
+            # we don't need to update "checkpoint" file after "get_velocity"
+
+    # 4. Run NSVE for the three resolutions.
+        for factor in [1, 2, 4]:
+            # create dns object
+            cc = DNS()
+            # launch simulation
+            cc.launch([
+                    'NSVE',
+                    '-n', '{0}'.format(factor*32),
+                    '--np', '{0}'.format(nprocesses),
+                    '--ntpp', '{0}'.format(nthreads_per_process),
+                    '--src-simname', 'base_{0}x'.format(factor),
+                    '--src-iteration', '{0}'.format(base_niterations),
+                    '--simname', 'nsve_{0}x'.format(factor),
+                    '--precision', 'double',
+                    '--dtfactor', '0.3',
+                    '--kMeta', '{0}'.format(1.0*factor),
+                    '--niter_todo', '{0}'.format(test_niterations*factor),
+                    '--niter_out', '{0}'.format(test_niterations*factor),
+                    '--niter_stat', '{0}'.format(4*factor)])
+
+    # 5. Run NSE for the three resolutions.
+        for factor in [1, 2, 4]:
+            # create dns object
+            cc = DNS()
+            # launch simulation
+            cc.launch([
+                    'NSE',
+                    '-n', '{0}'.format(factor*32),
+                    '--np', '{0}'.format(nprocesses),
+                    '--ntpp', '{0}'.format(nthreads_per_process),
+                    '--src-simname', 'base_{0}x'.format(factor),
+                    '--src-iteration', '{0}'.format(base_niterations),
+                    '--simname', 'nse_{0}x'.format(factor),
+                    '--precision', 'double',
+                    '--dtfactor', '0.3',
+                    '--kMeta', '{0}'.format(1.0*factor),
+                    '--niter_todo', '{0}'.format(test_niterations*factor),
+                    '--niter_out', '{0}'.format(test_niterations*factor),
+                    '--niter_stat', '{0}'.format(4*factor)])
+        return None
+
+Once the runs are finished successfully, the code calls `plot_error`.
+Here we first read the output of the six different runs, and we compute
+their statistics, since the call to `compute_statistics` will in fact also
+perform some sanity checks on the output.
+We then read the velocity fields computed by `NSVE` and `NSE`, and
+compare them (please see the code for `get_velocity` below).
+The results are plotted together with a 3rd order error estimate, for
+subsequent assessment.
+
+.. code:: python
+
+    def plot_error():
+        c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
+                   for factor in [1, 2, 4]]
+        c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
+                   for factor in [1, 2, 4]]
+        for cc in c0_list + c1_list:
+            cc.compute_statistics()
+
+        factor_list = [1, 2, 4]
+
+        error_list = []
+        for ii in range(len(factor_list)):
+            factor = factor_list[ii]
+            c0 = c0_list[ii]
+            c1 = c1_list[ii]
+            df0 = h5py.File(c0.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
+            df1 = h5py.File(c1.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
+            vel0 = get_velocity(c0, iteration = test_niterations*factor)
+            vel1 = get_velocity(c1, iteration = test_niterations*factor)
+            diff = vel1 - vel0
+            vv = np.sqrt(np.sum(vel0**2, axis = 3))
+            dd = np.sqrt(np.sum(diff**2, axis = 3))
+            err = np.max(dd / vv)
+            error_list.append(err)
+            print('maximum error for factor {0} is {1}'.format(
+                factor, err))
+            df0.close()
+            df1.close()
+
+        f = plt.figure(figsize = (4, 4))
+        a = f.add_subplot(111)
+        fl = np.array(factor_list).astype(np.float)
+        a.plot(fl,
+               error_list,
+               marker = '.',
+               label = 'NSVE vs NSE')
+        a.plot(fl, fl**(-3),
+               dashes = (1, 1),
+               color = 'black',
+               label = '$\propto f^{-3}$')
+        a.set_ylabel('relative error')
+        a.set_xlabel('resolution factor $f$')
+        a.set_xscale('log')
+        a.set_yscale('log')
+        a.legend(loc = 'best')
+        f.tight_layout()
+        f.savefig('field_err_vs_dt.pdf')
+        plt.close(f)
+        return None
+
+The `get_velocity` function is slightly more elaborate, as it needs to
+check whether the data comes from an `NSVE` run or an `NSE` run.
+Furthermore, in the case of an `NSVE` run we need to explicitly invert
+the curl operator within the Python code in order to obtain the
+velocity.
+Otherwise, we perform an inverse FFT using `numpy`, taking care to
+account for the transposed data layout (which itself is due to the use
+of FFTW).
+
+.. code:: python
+
+    def get_velocity(
+            cc,
+            iteration = 0):
+        data_file = h5py.File(
+                cc.get_checkpoint_fname(iteration = iteration),
+                'r')
+        if 'velocity' in data_file.keys():
+            if 'real' in data_file['velocity'].keys():
+                vel = data_file['velocity/real/{0}'.format(iteration)][()]
+            else:
+                cvel = data_file['velocity/complex/{0}'.format(iteration)][()]
+                vel = ift(cvel)
+                #vel *= cc.parameters['nx']*cc.parameters['ny']*cc.parameters['nz']
+        else:
+            assert('complex' in data_file['vorticity'].keys())
+            cvort = data_file['vorticity/complex/{0}'.format(iteration)][()]
+            cvel = compute_curl(cc, cvort, inverse_curl = True)
+            vel = ift(cvel)
+        data_file.close()
+        return vel
+
+    def ift(cfield):
+        ff = np.fft.irfftn(cfield, axes = (0, 1, 2))
+        field = np.transpose(ff, (1, 0, 2, 3)).copy()
+        return field
+
+    def compute_curl(
+            cc,
+            cfield,
+            inverse_curl = False):
+        kx = cc.get_data_file()['kspace/kx'][()]
+        ky = cc.get_data_file()['kspace/ky'][()]
+        kz = cc.get_data_file()['kspace/kz'][()]
+        ff = cfield.copy()
+        ff[..., 0] = 1j*(ky[:, None, None]*cfield[..., 2] - kz[None, :, None]*cfield[..., 1])
+        ff[..., 1] = 1j*(kz[None, :, None]*cfield[..., 0] - kx[None, None, :]*cfield[..., 2])
+        ff[..., 2] = 1j*(kx[None, None, :]*cfield[..., 1] - ky[:, None, None]*cfield[..., 0])
+        if inverse_curl:
+            k2 = (kx[None, None,    :]**2 +
+                  ky[   :, None, None]**2 +
+                  kz[None,    :, None]**2)
+            k2[0, 0, 0] = 1.
+            ff /= k2[:, :, :, None]
+        return ff
+
+Finally, the script ends with a standard call to `main`:
+
+.. code:: python
+
+    if __name__ == '__main__':
+        main()
+
diff --git a/examples/convergence.py b/examples/convergence.py
index 5f8d5343..6929f77b 100644
--- a/examples/convergence.py
+++ b/examples/convergence.py
@@ -8,6 +8,11 @@ from TurTLE import DNS, PP
 base_niterations = 256
 test_niterations = 32
 
+def main():
+    run_simulations()
+    plot_error()
+    return None
+
 def run_simulations():
     # change these two values as neded.
     # number of MPI processes to use
@@ -41,7 +46,7 @@ def run_simulations():
     for factor in [2, 4]:
         # create postprocess object
         cc = PP()
-        # create a larger version of the field at iteration 512
+        # create a larger version of the field at final iteration
         cc.launch([
                 'resize',
                 '--np', '{0}'.format(nprocesses),
@@ -119,51 +124,6 @@ def run_simulations():
                 '--niter_stat', '{0}'.format(4*factor)])
     return None
 
-def ift(cfield):
-    ff = np.fft.irfftn(cfield, axes = (0, 1, 2))
-    field = np.transpose(ff, (1, 0, 2, 3)).copy()
-    return field
-
-def compute_curl(
-        cc,
-        cfield,
-        inverse_curl = False):
-    kx = cc.get_data_file()['kspace/kx'][()]
-    ky = cc.get_data_file()['kspace/ky'][()]
-    kz = cc.get_data_file()['kspace/kz'][()]
-    ff = cfield.copy()
-    ff[..., 0] = 1j*(ky[:, None, None]*cfield[..., 2] - kz[None, :, None]*cfield[..., 1])
-    ff[..., 1] = 1j*(kz[None, :, None]*cfield[..., 0] - kx[None, None, :]*cfield[..., 2])
-    ff[..., 2] = 1j*(kx[None, None, :]*cfield[..., 1] - ky[:, None, None]*cfield[..., 0])
-    if inverse_curl:
-        k2 = (kx[None, None,    :]**2 +
-              ky[   :, None, None]**2 +
-              kz[None,    :, None]**2)
-        k2[0, 0, 0] = 1.
-        ff /= k2[:, :, :, None]
-    return ff
-
-def get_velocity(
-        cc,
-        iteration = 0):
-    data_file = h5py.File(
-            cc.get_checkpoint_fname(iteration = iteration),
-            'r')
-    if 'velocity' in data_file.keys():
-        if 'real' in data_file['velocity'].keys():
-            vel = data_file['velocity/real/{0}'.format(iteration)][()]
-        else:
-            cvel = data_file['velocity/complex/{0}'.format(iteration)][()]
-            vel = ift(cvel)
-            #vel *= cc.parameters['nx']*cc.parameters['ny']*cc.parameters['nz']
-    else:
-        assert('complex' in data_file['vorticity'].keys())
-        cvort = data_file['vorticity/complex/{0}'.format(iteration)][()]
-        cvel = compute_curl(cc, cvort, inverse_curl = True)
-        vel = ift(cvel)
-    data_file.close()
-    return vel
-
 def plot_error():
     c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
                for factor in [1, 2, 4]]
@@ -214,10 +174,50 @@ def plot_error():
     plt.close(f)
     return None
 
-def main():
-    run_simulations()
-    plot_error()
-    return None
+def get_velocity(
+        cc,
+        iteration = 0):
+    data_file = h5py.File(
+            cc.get_checkpoint_fname(iteration = iteration),
+            'r')
+    if 'velocity' in data_file.keys():
+        if 'real' in data_file['velocity'].keys():
+            vel = data_file['velocity/real/{0}'.format(iteration)][()]
+        else:
+            cvel = data_file['velocity/complex/{0}'.format(iteration)][()]
+            vel = ift(cvel)
+            #vel *= cc.parameters['nx']*cc.parameters['ny']*cc.parameters['nz']
+    else:
+        assert('complex' in data_file['vorticity'].keys())
+        cvort = data_file['vorticity/complex/{0}'.format(iteration)][()]
+        cvel = compute_curl(cc, cvort, inverse_curl = True)
+        vel = ift(cvel)
+    data_file.close()
+    return vel
+
+def ift(cfield):
+    ff = np.fft.irfftn(cfield, axes = (0, 1, 2))
+    field = np.transpose(ff, (1, 0, 2, 3)).copy()
+    return field
+
+def compute_curl(
+        cc,
+        cfield,
+        inverse_curl = False):
+    kx = cc.get_data_file()['kspace/kx'][()]
+    ky = cc.get_data_file()['kspace/ky'][()]
+    kz = cc.get_data_file()['kspace/kz'][()]
+    ff = cfield.copy()
+    ff[..., 0] = 1j*(ky[:, None, None]*cfield[..., 2] - kz[None, :, None]*cfield[..., 1])
+    ff[..., 1] = 1j*(kz[None, :, None]*cfield[..., 0] - kx[None, None, :]*cfield[..., 2])
+    ff[..., 2] = 1j*(kx[None, None, :]*cfield[..., 1] - ky[:, None, None]*cfield[..., 0])
+    if inverse_curl:
+        k2 = (kx[None, None,    :]**2 +
+              ky[   :, None, None]**2 +
+              kz[None,    :, None]**2)
+        k2[0, 0, 0] = 1.
+        ff /= k2[:, :, :, None]
+    return ff
 
 if __name__ == '__main__':
     main()
-- 
GitLab


From efacb81b059edee97e2d03c93e9dad9694152bfa Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Thu, 6 Jan 2022 21:13:02 +0100
Subject: [PATCH 04/24] fixes initial condition check

---
 TurTLE/DNS.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/TurTLE/DNS.py b/TurTLE/DNS.py
index de8b7ff1..4f0ff809 100644
--- a/TurTLE/DNS.py
+++ b/TurTLE/DNS.py
@@ -1128,7 +1128,7 @@ class DNS(_code):
                 f = h5py.File(self.get_checkpoint_0_fname(), 'r')
                 try:
                     dset = f[checkpoint_field + '/complex/0']
-                    need_field = (dset.shape == (self.parameters['ny'],
+                    need_field = (dset.shape != (self.parameters['ny'],
                                                  self.parameters['nz'],
                                                  self.parameters['nx']//2+1,
                                                  3))
-- 
GitLab


From 2ebb1c88545af4e00ec56d995db620d0edc42b52 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Thu, 6 Jan 2022 21:13:10 +0100
Subject: [PATCH 05/24] adds convergence test for particles

---
 examples/convergence.py | 167 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 160 insertions(+), 7 deletions(-)

diff --git a/examples/convergence.py b/examples/convergence.py
index 6929f77b..3289c8c8 100644
--- a/examples/convergence.py
+++ b/examples/convergence.py
@@ -8,12 +8,21 @@ from TurTLE import DNS, PP
 base_niterations = 256
 test_niterations = 32
 
+nparticles = 100000
+particle_random_seed = 15
+
 def main():
-    run_simulations()
-    plot_error()
+    generate_initial_conditions()
+
+    run_simulations_field()
+    plot_error_field()
+
+    run_simulations_particles()
+    plot_error_particles()
+    plot_traj_particles()
     return None
 
-def run_simulations():
+def generate_initial_conditions():
     # change these two values as neded.
     # number of MPI processes to use
     nprocesses = 4
@@ -82,8 +91,16 @@ def run_simulations():
                 '--iter0', '{0}'.format(base_niterations),
                 '--iter1', '{0}'.format(base_niterations)])
         # we don't need to update "checkpoint" file after "get_velocity"
+    return None
 
-# 4. Run NSVE for the three resolutions.
+def run_simulations_field():
+    # change these two values as neded.
+    # number of MPI processes to use
+    nprocesses = 4
+    # number of OpenMP threads per MPI process to use
+    nthreads_per_process = 2
+
+# 1. Run NSVE for the three resolutions.
     for factor in [1, 2, 4]:
         # create dns object
         cc = DNS()
@@ -103,7 +120,7 @@ def run_simulations():
                 '--niter_out', '{0}'.format(test_niterations*factor),
                 '--niter_stat', '{0}'.format(4*factor)])
 
-# 5. Run NSE for the three resolutions.
+# 2. Run NSE for the three resolutions.
     for factor in [1, 2, 4]:
         # create dns object
         cc = DNS()
@@ -124,7 +141,7 @@ def run_simulations():
                 '--niter_stat', '{0}'.format(4*factor)])
     return None
 
-def plot_error():
+def plot_error_field():
     c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
                for factor in [1, 2, 4]]
     c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
@@ -170,7 +187,7 @@ def plot_error():
     a.set_yscale('log')
     a.legend(loc = 'best')
     f.tight_layout()
-    f.savefig('field_err_vs_dt.pdf')
+    f.savefig('err_vs_dt_field.pdf')
     plt.close(f)
     return None
 
@@ -219,6 +236,142 @@ def compute_curl(
         ff /= k2[:, :, :, None]
     return ff
 
+def run_simulations_particles():
+    # change these two values as neded.
+    # number of MPI processes to use
+    nprocesses = 4
+    # number of OpenMP threads per MPI process to use
+    nthreads_per_process = 2
+
+# 1. Run NSVEparticles for resolution 1x, for a few iterations, to build up rhs values.
+    factor = 1
+    # create dns object
+    cc = DNS()
+    # launch simulation
+    cc.launch([
+            'NSVEparticles',
+            '-n', '{0}'.format(factor*32),
+            '--np', '{0}'.format(nprocesses),
+            '--ntpp', '{0}'.format(nthreads_per_process),
+            '--src-simname', 'base_{0}x'.format(factor),
+            '--src-iteration', '{0}'.format(base_niterations),
+            '--simname', 'nsvep_base'.format(factor),
+            '--precision', 'double',
+            '--dtfactor', '0.3',
+            '--kMeta', '{0}'.format(1.0*factor),
+            '--niter_todo', '{0}'.format(8),
+            '--niter_out', '{0}'.format(8),
+            '--niter_stat', '{0}'.format(8),
+            '--nparticles', '{0}'.format(nparticles),
+            '--niter_part', '{0}'.format(8),
+            '--cpp_random_particles', '{0}'.format(particle_random_seed)])
+
+# 2. Prepare initial conditions
+    for factor in [1, 2, 4]:
+        df = h5py.File('nsvep_{0}x_checkpoint_0.h5'.format(factor), 'w')
+        # field
+        df['vorticity/complex/0'] = h5py.ExternalLink(
+            'base_{0}x_checkpoint_0.h5'.format(factor),
+            'vorticity/complex/{0}'.format(base_niterations))
+        # particles
+        df['tracers0/state/0'] = h5py.ExternalLink(
+                'nsvep_base_checkpoint_0.h5',
+                'tracers0/state/8')
+        df['tracers0/rhs/0'] = h5py.ExternalLink(
+                'nsvep_base_checkpoint_0.h5',
+                'tracers0/rhs/8')
+        df.close()
+
+# 3. Run NSVEparticles
+    for factor in [1, 2, 4]:
+        # create dns object
+        cc = DNS()
+        # launch simulation
+        cc.launch([
+                'NSVEparticles',
+                '-n', '{0}'.format(factor*32),
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--simname', 'nsvep_{0}x'.format(factor),
+                '--precision', 'double',
+                '--dtfactor', '0.3',
+                '--kMeta', '{0}'.format(1.0*factor),
+                '--niter_todo', '{0}'.format(test_niterations*factor),
+                '--niter_out', '{0}'.format(test_niterations*factor),
+                '--niter_stat', '{0}'.format(4*factor),
+                '--nparticles', '{0}'.format(nparticles),
+                '--niter_part', '{0}'.format(2*factor),
+                '--cpp_random_particles', '0' # turn off cpp particle initialization
+                ])
+    return None
+
+def plot_error_particles():
+    f = plt.figure()
+    a = f.add_subplot(111)
+    err_max_list = []
+    err_mean_list = []
+    factor_list = [1, 2]
+    for factor in factor_list:
+        c0 = DNS(simname = 'nsvep_{0}x'.format(factor))
+        c1 = DNS(simname = 'nsvep_{0}x'.format(factor*2))
+        for cc in [c0, c1]:
+            cc.compute_statistics()
+            cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
+        f0 = h5py.File(c0.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
+        f1 = h5py.File(c1.get_checkpoint_fname(iteration = test_niterations*factor*2), 'r')
+        x0 = f0['tracers0/state/{0}'.format(test_niterations*factor)][()]
+        x1 = f1['tracers0/state/{0}'.format(test_niterations*factor*2)][()]
+        err_max_list.append(np.max(np.abs(x1 - x0)))
+        err_mean_list.append(np.mean(np.abs(x1 - x0)))
+        f0.close()
+        f1.close()
+    factor_list = np.array(factor_list).astype(np.float)
+    err_max_list = np.array(err_max_list)
+    err_mean_list = np.array(err_mean_list)
+    a.plot(factor_list, err_max_list, marker = '.', label = 'max error')
+    a.plot(factor_list, err_mean_list, marker = '.', label = 'mean error')
+    a.plot(factor_list,
+           (1e-2)*factor_list**(-3),
+           color = 'black',
+           dashes = (2, 2),
+           label = '$\propto f^{-3}$')
+    a.plot(factor_list,
+           (1e-2)*factor_list**(-4),
+           color = 'black',
+           dashes = (1, 1),
+           label = '$\propto f^{-4}$')
+    a.set_xscale('log')
+    a.set_yscale('log')
+    a.set_xlabel('resolution factor f')
+    a.set_ylabel('absolute trajectory error [DNS units]')
+    a.legend(loc = 'best')
+    f.tight_layout()
+    f.savefig('err_vs_dt_particle.pdf')
+    plt.close(f)
+    return None
+
+def plot_traj_particles():
+    f = plt.figure()
+    a = f.add_subplot(111)
+    for factor in [1, 2, 4]:
+        cc = DNS(simname = 'nsvep_{0}x'.format(factor))
+        cc.compute_statistics()
+        xx = read_trajectory(cc, 14)
+        a.plot(xx[:, 0], xx[:, 1])
+    f.tight_layout()
+    f.savefig('trajectories.pdf')
+    plt.close(f)
+    return None
+
+def read_trajectory(cc, traj_index):
+    cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
+    df = cc.get_particle_file()
+    xx = []
+    for ii in range(0, cc.get_data_file()['iteration'][()], cc.parameters['niter_part']):
+        xx.append(df['tracers0/position/{0}'.format(ii)][traj_index])
+    df.close()
+    return np.array(xx)
+
 if __name__ == '__main__':
     main()
 
-- 
GitLab


From 7715c5ec6359a7c750d76b05b1af3f0b1b496264 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Fri, 7 Jan 2022 14:24:37 +0100
Subject: [PATCH 06/24] adds option to control iter0 for DNS class

---
 TurTLE/DNS.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/TurTLE/DNS.py b/TurTLE/DNS.py
index 4f0ff809..d98367ac 100644
--- a/TurTLE/DNS.py
+++ b/TurTLE/DNS.py
@@ -1213,12 +1213,13 @@ class DNS(_code):
         return None
     def launch_jobs(
             self,
-            opt = None):
+            opt = None,
+            iter0 = 0):
         if not os.path.exists(self.get_data_file_name()):
             if not os.path.isdir(self.work_dir):
                 os.makedirs(self.work_dir)
             self.generate_initial_condition(opt = opt)
-            self.write_par()
+            self.write_par(iter0 = iter0)
         if (('test' in self.dns_type) or
             (self.dns_type in ['kraichnan_field'])):
             self.check_current_vorticity_exists = False
-- 
GitLab


From 67aad83cc31952d796e423d891d34df5f5b3ff2d Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Fri, 7 Jan 2022 14:24:50 +0100
Subject: [PATCH 07/24] finalizes convergence tutorial

---
 documentation/sphinx_static/convergence.rst | 300 ++++++++++++++++++--
 examples/convergence.py                     |  44 +--
 2 files changed, 305 insertions(+), 39 deletions(-)

diff --git a/documentation/sphinx_static/convergence.rst b/documentation/sphinx_static/convergence.rst
index 2fc0e6aa..1c6db97e 100644
--- a/documentation/sphinx_static/convergence.rst
+++ b/documentation/sphinx_static/convergence.rst
@@ -25,7 +25,52 @@ Notes:
       stationary initial condition", since the smoothness properties of
       the field will influence convergence properties in general.
 
-We present here a Python script that performs a simple convergence test
+In practice, we compute numerical solutions of NSE and NSVE, convert the
+vorticity of the latter simulation to a velocity field, and compare
+them.
+The time-stepping method is the same 3rd order Runge Kutta algorithm,
+therefore we expect a third order dependency of the "error" on the
+time-step.
+The "spatial discretization" is identical in both cases, since we use
+the same underlying pseudo-spectral framework (including the dealiasing
+method).
+
+The observed numerical differences are due to the simulation of technically
+different PDEs: different arithmetical operations are performed despite
+the fact that "NSVE is simply the curl of NSE".
+In turn, the effects of finite numerical precision and discretization
+are brought into the computation differently, leading to systematic
+deviations between the two DNS.
+
+
+Particle tracking errors
+------------------------
+
+For particle tracking, we use an alternative approach: use the same
+algorithm, and compare results obtained with different resolutions.
+Since we are discussing the numerical solution of an ODE where the right
+hand side is itself a numerical solution from a PDE, we in fact modify
+the resolution of the field PDE (i.e. spatial resolution as well).
+
+There is a more complex mechanism that generates numerical errors for
+particle tracking in this setting.
+In particular, the accuracy of the field itself is relevant, as well as
+the accuracy of the interpolation method coupled to the ODE solver.
+For instance the default particle tracking solver is a 4th order
+Adams Bashforth method in TurTLE, which seems unnecessary since the
+fluid only provides a 3rd order solution.
+The default interpolation method is that of cubic splines, which should
+in fact limit ODE error convergence to 2nd order (because convergence
+relies on existence of relevant Taylor expansion terms, and interpolated
+fields only have a finite number of continuous derivatives).
+This discussion is briefly continued below, but we will not do it justice
+in this tutorial.
+
+
+Python code
+-----------
+
+We present here a Python script that performs simple convergence tests
 with TurTLE. The script itself is provided as the file
 `examples/convergence.py`.
 
@@ -55,38 +100,51 @@ errors).
    base_niterations = 256
    test_niterations = 32
 
-We distinguish two main steps of this script.
-First, we actually run the numerical simulations.
-Second, we analyze the results (i.e. we compute and plot the integration
-error as it changes with resolution).
+We consider :math:`10^5` particles, and we also choose a specific random
+seed for their initial locations.
+
+.. code:: python
+
+   nparticles = 100000
+   particle_random_seed = 15
+
+We distinguish a few steps of this script.
+First, we generate the statistically quasistationary regime.
+Second, we run the fluid solver and analyze the results.
+Finally, we run the particle simulations and also analyze these results.
+"Analysis" refers here to simple error plots, but more elaborate
+postprocessing can be performed if needed.
 
 .. code:: python
 
     def main():
-        run_simulations()
-        plot_error()
+        generate_initial_conditions()
+
+        run_simulations_field()
+        plot_error_field()
+
+        run_simulations_particles()
+        plot_error_particles()
         return None
 
-`run_simulations` is a fairly long but simple function.
-In brief, it
-    * generates the initial quasistationary state with the NSVE solver
+`generate_initial_conditions` performs a few calls to C++ executable
+codes generated with TurTLE. In brief, it
+    * generates a velocity field in a quasistationary Navier-Stokes
+      regime (using the NSVE solver).
     * uses Fourier interpolation to double and quadruple the initial
       resolution, yielding 3 vorticity fields "1x", "2x" and "4x".
     * generates the corresponding velocity fields needed for the NSE solver
-    * launches the NSVE solver for the three resolutions
-    * launches the NSE solver for the three resolutions
-We give the full code below.
 We use the `launch` method of the `DNS` and `PP` Python
 classes --- the wrappers around the C++ `direct_numerical_simulation`
 and `postprocess` functionality.
 This means that the current Python code may be translated to a shell
 script directly, only by writing out the arguments (rather than placing
 them in a list of Python strings).
-
+The full function is given below:
 
 .. code:: python
 
-    def run_simulations():
+    def generate_initial_conditions():
         # change these two values as neded.
         # number of MPI processes to use
         nprocesses = 4
@@ -155,8 +213,22 @@ them in a list of Python strings).
                     '--iter0', '{0}'.format(base_niterations),
                     '--iter1', '{0}'.format(base_niterations)])
             # we don't need to update "checkpoint" file after "get_velocity"
+        return None
+
+`run_simulations_field` runs six DNS (3 resolutions for each of NSE and
+NSVE solvers):
+
 
-    # 4. Run NSVE for the three resolutions.
+.. code:: python
+
+    def run_simulations_field():
+        # change these two values as neded.
+        # number of MPI processes to use
+        nprocesses = 4
+        # number of OpenMP threads per MPI process to use
+        nthreads_per_process = 2
+
+    # 1. Run NSVE for the three resolutions.
         for factor in [1, 2, 4]:
             # create dns object
             cc = DNS()
@@ -176,7 +248,7 @@ them in a list of Python strings).
                     '--niter_out', '{0}'.format(test_niterations*factor),
                     '--niter_stat', '{0}'.format(4*factor)])
 
-    # 5. Run NSE for the three resolutions.
+    # 2. Run NSE for the three resolutions.
         for factor in [1, 2, 4]:
             # create dns object
             cc = DNS()
@@ -197,7 +269,8 @@ them in a list of Python strings).
                     '--niter_stat', '{0}'.format(4*factor)])
         return None
 
-Once the runs are finished successfully, the code calls `plot_error`.
+Once the runs are finished successfully, the code calls
+`plot_error_field`.
 Here we first read the output of the six different runs, and we compute
 their statistics, since the call to `compute_statistics` will in fact also
 perform some sanity checks on the output.
@@ -208,7 +281,7 @@ subsequent assessment.
 
 .. code:: python
 
-    def plot_error():
+    def plot_error_field():
         c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
                    for factor in [1, 2, 4]]
         c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
@@ -255,6 +328,7 @@ subsequent assessment.
         a.legend(loc = 'best')
         f.tight_layout()
         f.savefig('field_err_vs_dt.pdf')
+        f.savefig('field_err_vs_dt.png')
         plt.close(f)
         return None
 
@@ -314,6 +388,194 @@ of FFTW).
             ff /= k2[:, :, :, None]
         return ff
 
+We then define the function that runs the particle simulations,
+`run_simulations_particles`.
+Because we use an Adams-Bashforth method, we need to know the values of
+the particle velocity (i.e. the right-hand-side of the ODE) at previous
+steps.
+TurTLE accomplishes this by using the Euler integration scheme for "time
+step 0", then using a 2nd order Adams-Bashforth, etc, until the desired
+number of right-hand-side values is stored.
+Thus the code first integrates trajectories for 8 iterations, and the
+output will contain the additional information.
+This happens because such information is crucial for checkpointing ---
+i.e. stopping/restarting the simulation at arbitrary iterations without
+affecting the numerical solution.
+
+To put it simply, for the simulation "nsvep_base" the dataset
+"tracers0/rhs/0" contains only zeros, and TurTLE ignores them.
+However, the "tracers0/rhs/8" dataset for simulation "nsvep_1x" contains
+meaningful values (that are used because we request that `iter0` is
+different from 0).
+
+.. code:: python
+
+    def run_simulations_particles():
+        # change these two values as neded.
+        # number of MPI processes to use
+        nprocesses = 4
+        # number of OpenMP threads per MPI process to use
+        nthreads_per_process = 2
+
+    # 1. Run NSVEparticles for resolution 1x, for a few iterations, to build up rhs values.
+        factor = 1
+        # create dns object
+        cc = DNS()
+        # launch simulation
+        cc.launch([
+                'NSVEparticles',
+                '-n', '{0}'.format(factor*32),
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--src-simname', 'base_{0}x'.format(factor),
+                '--src-iteration', '{0}'.format(base_niterations),
+                '--simname', 'nsvep_base'.format(factor),
+                '--precision', 'double',
+                '--dtfactor', '0.3',
+                '--kMeta', '{0}'.format(1.0*factor),
+                '--niter_todo', '{0}'.format(8),
+                '--niter_out', '{0}'.format(8),
+                '--niter_stat', '{0}'.format(8),
+                '--nparticles', '{0}'.format(nparticles),
+                '--niter_part', '{0}'.format(8),
+                '--cpp_random_particles', '{0}'.format(particle_random_seed)])
+
+    # 2. Prepare initial conditions
+        for factor in [1, 2, 4]:
+            df = h5py.File('nsvep_{0}x_checkpoint_0.h5'.format(factor), 'w')
+            # field
+            df['vorticity/complex/{0}'.format(8*factor)] = h5py.ExternalLink(
+                'base_{0}x_checkpoint_0.h5'.format(factor),
+                'vorticity/complex/{0}'.format(base_niterations))
+            # particles
+            df['tracers0/state/{0}'.format(8*factor)] = h5py.ExternalLink(
+                    'nsvep_base_checkpoint_0.h5',
+                    'tracers0/state/8')
+            df['tracers0/rhs/{0}'.format(8*factor)] = h5py.ExternalLink(
+                    'nsvep_base_checkpoint_0.h5',
+                    'tracers0/rhs/8')
+            df.close()
+
+    # 3. Run NSVEparticles
+        for factor in [1, 2, 4]:
+            # create dns object
+            cc = DNS()
+            # launch simulation
+            cc.launch([
+                    'NSVEparticles',
+                    '-n', '{0}'.format(factor*32),
+                    '--np', '{0}'.format(nprocesses),
+                    '--ntpp', '{0}'.format(nthreads_per_process),
+                    '--simname', 'nsvep_{0}x'.format(factor),
+                    '--precision', 'double',
+                    '--dtfactor', '0.3',
+                    '--kMeta', '{0}'.format(1.0*factor),
+                    '--niter_todo', '{0}'.format(test_niterations*factor),
+                    '--niter_out', '{0}'.format(test_niterations*factor),
+                    '--niter_stat', '{0}'.format(4*factor),
+                    '--nparticles', '{0}'.format(nparticles),
+                    '--niter_part', '{0}'.format(2*factor),
+                    '--cpp_random_particles', '0'], # turn off cpp particle initialization
+                    iter0 = 8*factor)
+        return None
+
+To compute the trajectory integration error, we proceed as explained
+above, and compare each DNS with its corresponding double-the-resolution DNS:
+
+.. code:: python
+
+    def plot_error_particles():
+        f = plt.figure()
+        a = f.add_subplot(111)
+        err_max_list = []
+        err_mean_list = []
+        factor_list = [1, 2]
+        for factor in factor_list:
+            c1 = DNS(simname = 'nsvep_{0}x'.format(factor))
+            c2 = DNS(simname = 'nsvep_{0}x'.format(factor*2))
+            for cc in [c1, c2]:
+                cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
+            c1.compute_statistics(iter0 = 8*factor)
+            c2.compute_statistics(iter0 = 8*factor*2)
+            final_iter_x1 = c1.get_data_file()['iteration'][()]
+            final_iter_x2 = c2.get_data_file()['iteration'][()]
+            f1 = h5py.File(c1.simname + '_checkpoint_0.h5', 'r')
+            f2 = h5py.File(c2.simname + '_checkpoint_0.h5', 'r')
+            x1 = f1['tracers0/state/{0}'.format(final_iter_x1)][()]
+            x2 = f2['tracers0/state/{0}'.format(final_iter_x2)][()]
+            err_max_list.append(np.max(np.abs(x2 - x1)))
+            err_mean_list.append(np.mean(np.abs(x2 - x1)))
+            f1.close()
+            f2.close()
+        factor_list = np.array(factor_list).astype(np.float)
+        err_max_list = np.array(err_max_list)
+        err_mean_list = np.array(err_mean_list)
+        a.plot(factor_list, err_max_list, marker = '.', label = 'max error')
+        a.plot(factor_list, err_mean_list, marker = '.', label = 'mean error')
+        a.plot(factor_list,
+               (1e-2)*factor_list**(-3),
+               color = 'black',
+               dashes = (2, 2),
+               label = '$\propto f^{-3}$')
+        a.plot(factor_list,
+               (1e-2)*factor_list**(-4),
+               color = 'black',
+               dashes = (1, 1),
+               label = '$\propto f^{-4}$')
+        a.set_xscale('log')
+        a.set_yscale('log')
+        a.set_xlabel('resolution factor f')
+        a.set_ylabel('absolute trajectory error [DNS units]')
+        a.legend(loc = 'best')
+        f.tight_layout()
+        f.savefig('err_vs_dt_particle.pdf')
+        f.savefig('err_vs_dt_particle.png')
+        plt.close(f)
+        return None
+
+Note that we plot two error measures: the maximum error, as well as the
+mean error.
+The plot suggests that these converge at different rates: the mean error
+exhibits 4th order convergence in "factor", whereas the maximum error
+exhibits 3rd order convergence (the limit imposed by the fluid solver
+error).
+While a more detailed investigation would be in order, I speculate that
+for this particular setup the increase of the spatial resolution along
+with the temporal resolution renders the interpolation errors (which should
+decrease the global order to 2) smaller than the simultaneous temporal
+integration errors.
+In any case the interplay of the different error sources is a fairly
+complex subject in itself, which we don't propose to address here in
+full.
+
+For the beginner's convenience, we also provide a method to plot
+individual particle trajectories:
+
+.. code:: python
+
+    def plot_traj_particles():
+        f = plt.figure()
+        a = f.add_subplot(111)
+        for factor in [1, 2, 4]:
+            cc = DNS(simname = 'nsvep_{0}x'.format(factor))
+            cc.compute_statistics(iter0 = 8*factor)
+            xx = read_trajectory(cc, 14, iter0 = 8*factor)
+            a.plot(xx[:, 0], xx[:, 1])
+        f.tight_layout()
+        f.savefig('trajectories.pdf')
+        f.savefig('trajectories.png')
+        plt.close(f)
+        return None
+
+    def read_trajectory(cc, traj_index, iter0):
+        cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
+        df = cc.get_particle_file()
+        xx = []
+        for ii in range(iter0, cc.get_data_file()['iteration'][()], cc.parameters['niter_part']):
+            xx.append(df['tracers0/position/{0}'.format(ii)][traj_index])
+        df.close()
+        return np.array(xx)
+
 Finally, the script ends with a standard call to `main`:
 
 .. code:: python
diff --git a/examples/convergence.py b/examples/convergence.py
index 3289c8c8..f4d6dcd9 100644
--- a/examples/convergence.py
+++ b/examples/convergence.py
@@ -19,6 +19,7 @@ def main():
 
     run_simulations_particles()
     plot_error_particles()
+
     plot_traj_particles()
     return None
 
@@ -270,14 +271,14 @@ def run_simulations_particles():
     for factor in [1, 2, 4]:
         df = h5py.File('nsvep_{0}x_checkpoint_0.h5'.format(factor), 'w')
         # field
-        df['vorticity/complex/0'] = h5py.ExternalLink(
+        df['vorticity/complex/{0}'.format(8*factor)] = h5py.ExternalLink(
             'base_{0}x_checkpoint_0.h5'.format(factor),
             'vorticity/complex/{0}'.format(base_niterations))
         # particles
-        df['tracers0/state/0'] = h5py.ExternalLink(
+        df['tracers0/state/{0}'.format(8*factor)] = h5py.ExternalLink(
                 'nsvep_base_checkpoint_0.h5',
                 'tracers0/state/8')
-        df['tracers0/rhs/0'] = h5py.ExternalLink(
+        df['tracers0/rhs/{0}'.format(8*factor)] = h5py.ExternalLink(
                 'nsvep_base_checkpoint_0.h5',
                 'tracers0/rhs/8')
         df.close()
@@ -301,8 +302,8 @@ def run_simulations_particles():
                 '--niter_stat', '{0}'.format(4*factor),
                 '--nparticles', '{0}'.format(nparticles),
                 '--niter_part', '{0}'.format(2*factor),
-                '--cpp_random_particles', '0' # turn off cpp particle initialization
-                ])
+                '--cpp_random_particles', '0'], # turn off cpp particle initialization
+                iter0 = 8*factor)
     return None
 
 def plot_error_particles():
@@ -312,19 +313,22 @@ def plot_error_particles():
     err_mean_list = []
     factor_list = [1, 2]
     for factor in factor_list:
-        c0 = DNS(simname = 'nsvep_{0}x'.format(factor))
-        c1 = DNS(simname = 'nsvep_{0}x'.format(factor*2))
-        for cc in [c0, c1]:
-            cc.compute_statistics()
+        c1 = DNS(simname = 'nsvep_{0}x'.format(factor))
+        c2 = DNS(simname = 'nsvep_{0}x'.format(factor*2))
+        for cc in [c1, c2]:
             cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
-        f0 = h5py.File(c0.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
-        f1 = h5py.File(c1.get_checkpoint_fname(iteration = test_niterations*factor*2), 'r')
-        x0 = f0['tracers0/state/{0}'.format(test_niterations*factor)][()]
-        x1 = f1['tracers0/state/{0}'.format(test_niterations*factor*2)][()]
-        err_max_list.append(np.max(np.abs(x1 - x0)))
-        err_mean_list.append(np.mean(np.abs(x1 - x0)))
-        f0.close()
+        c1.compute_statistics(iter0 = 8*factor)
+        c2.compute_statistics(iter0 = 8*factor*2)
+        final_iter_x1 = c1.get_data_file()['iteration'][()]
+        final_iter_x2 = c2.get_data_file()['iteration'][()]
+        f1 = h5py.File(c1.simname + '_checkpoint_0.h5', 'r')
+        f2 = h5py.File(c2.simname + '_checkpoint_0.h5', 'r')
+        x1 = f1['tracers0/state/{0}'.format(final_iter_x1)][()]
+        x2 = f2['tracers0/state/{0}'.format(final_iter_x2)][()]
+        err_max_list.append(np.max(np.abs(x2 - x1)))
+        err_mean_list.append(np.mean(np.abs(x2 - x1)))
         f1.close()
+        f2.close()
     factor_list = np.array(factor_list).astype(np.float)
     err_max_list = np.array(err_max_list)
     err_mean_list = np.array(err_mean_list)
@@ -355,19 +359,19 @@ def plot_traj_particles():
     a = f.add_subplot(111)
     for factor in [1, 2, 4]:
         cc = DNS(simname = 'nsvep_{0}x'.format(factor))
-        cc.compute_statistics()
-        xx = read_trajectory(cc, 14)
+        cc.compute_statistics(iter0 = 8*factor)
+        xx = read_trajectory(cc, 14, iter0 = 8*factor)
         a.plot(xx[:, 0], xx[:, 1])
     f.tight_layout()
     f.savefig('trajectories.pdf')
     plt.close(f)
     return None
 
-def read_trajectory(cc, traj_index):
+def read_trajectory(cc, traj_index, iter0):
     cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
     df = cc.get_particle_file()
     xx = []
-    for ii in range(0, cc.get_data_file()['iteration'][()], cc.parameters['niter_part']):
+    for ii in range(iter0, cc.get_data_file()['iteration'][()], cc.parameters['niter_part']):
         xx.append(df['tracers0/position/{0}'.format(ii)][traj_index])
     df.close()
     return np.array(xx)
-- 
GitLab


From 843f24ce4a70d2573121be0defdb7b66cfce6be4 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Fri, 7 Jan 2022 21:17:27 +0100
Subject: [PATCH 08/24] adds plots to tutorial

---
 documentation/sphinx_static/convergence.rst   |   20 +-
 .../sphinx_static/err_vs_dt_field.svg         |  945 ++++++++++++
 .../sphinx_static/err_vs_dt_particle.svg      | 1304 +++++++++++++++++
 documentation/sphinx_static/trajectories.svg  |  960 ++++++++++++
 examples/convergence.py                       |   23 +-
 5 files changed, 3243 insertions(+), 9 deletions(-)
 create mode 100644 documentation/sphinx_static/err_vs_dt_field.svg
 create mode 100644 documentation/sphinx_static/err_vs_dt_particle.svg
 create mode 100644 documentation/sphinx_static/trajectories.svg

diff --git a/documentation/sphinx_static/convergence.rst b/documentation/sphinx_static/convergence.rst
index 1c6db97e..f0c296c7 100644
--- a/documentation/sphinx_static/convergence.rst
+++ b/documentation/sphinx_static/convergence.rst
@@ -129,11 +129,13 @@ postprocessing can be performed if needed.
 
 `generate_initial_conditions` performs a few calls to C++ executable
 codes generated with TurTLE. In brief, it
+
     * generates a velocity field in a quasistationary Navier-Stokes
       regime (using the NSVE solver).
     * uses Fourier interpolation to double and quadruple the initial
       resolution, yielding 3 vorticity fields "1x", "2x" and "4x".
     * generates the corresponding velocity fields needed for the NSE solver
+
 We use the `launch` method of the `DNS` and `PP` Python
 classes --- the wrappers around the C++ `direct_numerical_simulation`
 and `postprocess` functionality.
@@ -332,6 +334,15 @@ subsequent assessment.
         plt.close(f)
         return None
 
+.. image:: err_vs_dt_field.svg
+
+In the plot, the error for :math:`f = 4` is larger than expected because
+the effects of finite precision arithmetic begin to dominate systematic
+integration errors.
+In practice there are a number of other technical details to consider
+when using resolutions corresponding to :math:`f = 4` (here this means
+:math:`k_M \eta \approx 4`), all of them out of scope for this tutorial.
+
 The `get_velocity` function is slightly more elaborate, as it needs to
 check whether the data comes from an `NSVE` run or an `NSE` run.
 Furthermore, in the case of an `NSVE` run we need to explicitly invert
@@ -535,10 +546,13 @@ above, and compare each DNS with its corresponding double-the-resolution DNS:
 
 Note that we plot two error measures: the maximum error, as well as the
 mean error.
+
+.. image:: err_vs_dt_particle.svg
+
 The plot suggests that these converge at different rates: the mean error
 exhibits 4th order convergence in "factor", whereas the maximum error
-exhibits 3rd order convergence (the limit imposed by the fluid solver
-error).
+seems to converge like :math:`f^{3.5}` (closer to the limit :math:`f^3`
+imposed by the fluid solver error).
 While a more detailed investigation would be in order, I speculate that
 for this particular setup the increase of the spatial resolution along
 with the temporal resolution renders the interpolation errors (which should
@@ -576,6 +590,8 @@ individual particle trajectories:
         df.close()
         return np.array(xx)
 
+.. image:: trajectories.svg
+
 Finally, the script ends with a standard call to `main`:
 
 .. code:: python
diff --git a/documentation/sphinx_static/err_vs_dt_field.svg b/documentation/sphinx_static/err_vs_dt_field.svg
new file mode 100644
index 00000000..b725f1e0
--- /dev/null
+++ b/documentation/sphinx_static/err_vs_dt_field.svg
@@ -0,0 +1,945 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Created with matplotlib (https://matplotlib.org/) -->
+<svg height="288pt" version="1.1" viewBox="0 0 288 288" width="288pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <metadata>
+  <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+   <cc:Work>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:date>2022-01-07T21:09:16.599292</dc:date>
+    <dc:format>image/svg+xml</dc:format>
+    <dc:creator>
+     <cc:Agent>
+      <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>
+     </cc:Agent>
+    </dc:creator>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <defs>
+  <style type="text/css">*{stroke-linecap:butt;stroke-linejoin:round;}</style>
+ </defs>
+ <g id="figure_1">
+  <g id="patch_1">
+   <path d="M 0 288 
+L 288 288 
+L 288 0 
+L 0 0 
+z
+" style="fill:#ffffff;"/>
+  </g>
+  <g id="axes_1">
+   <g id="patch_2">
+    <path d="M 55.779096 242.008 
+L 268.914154 242.008 
+L 268.914154 10.8 
+L 55.779096 10.8 
+z
+" style="fill:#ffffff;"/>
+   </g>
+   <g id="matplotlib.axis_1">
+    <g id="xtick_1">
+     <g id="line2d_1">
+      <defs>
+       <path d="M 0 0 
+L 0 3.5 
+" id="m58e16c489e" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="65.467053" xlink:href="#m58e16c489e" y="242.008"/>
+      </g>
+     </g>
+     <g id="text_1">
+      <!-- $\mathdefault{10^{0}}$ -->
+      <g transform="translate(56.667053 256.606437)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 12.40625 8.296875 
+L 28.515625 8.296875 
+L 28.515625 63.921875 
+L 10.984375 60.40625 
+L 10.984375 69.390625 
+L 28.421875 72.90625 
+L 38.28125 72.90625 
+L 38.28125 8.296875 
+L 54.390625 8.296875 
+L 54.390625 0 
+L 12.40625 0 
+z
+" id="DejaVuSans-49"/>
+        <path d="M 31.78125 66.40625 
+Q 24.171875 66.40625 20.328125 58.90625 
+Q 16.5 51.421875 16.5 36.375 
+Q 16.5 21.390625 20.328125 13.890625 
+Q 24.171875 6.390625 31.78125 6.390625 
+Q 39.453125 6.390625 43.28125 13.890625 
+Q 47.125 21.390625 47.125 36.375 
+Q 47.125 51.421875 43.28125 58.90625 
+Q 39.453125 66.40625 31.78125 66.40625 
+z
+M 31.78125 74.21875 
+Q 44.046875 74.21875 50.515625 64.515625 
+Q 56.984375 54.828125 56.984375 36.375 
+Q 56.984375 17.96875 50.515625 8.265625 
+Q 44.046875 -1.421875 31.78125 -1.421875 
+Q 19.53125 -1.421875 13.0625 8.265625 
+Q 6.59375 17.96875 6.59375 36.375 
+Q 6.59375 54.828125 13.0625 64.515625 
+Q 19.53125 74.21875 31.78125 74.21875 
+z
+" id="DejaVuSans-48"/>
+       </defs>
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(128.203125 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_2">
+     <g id="line2d_2">
+      <defs>
+       <path d="M 0 0 
+L 0 2 
+" id="m7ae94f5537" style="stroke:#000000;stroke-width:0.6;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="162.346625" xlink:href="#m7ae94f5537" y="242.008"/>
+      </g>
+     </g>
+     <g id="text_2">
+      <!-- $\mathdefault{2\times10^{0}}$ -->
+      <g transform="translate(144.246625 255.006438)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 19.1875 8.296875 
+L 53.609375 8.296875 
+L 53.609375 0 
+L 7.328125 0 
+L 7.328125 8.296875 
+Q 12.9375 14.109375 22.625 23.890625 
+Q 32.328125 33.6875 34.8125 36.53125 
+Q 39.546875 41.84375 41.421875 45.53125 
+Q 43.3125 49.21875 43.3125 52.78125 
+Q 43.3125 58.59375 39.234375 62.25 
+Q 35.15625 65.921875 28.609375 65.921875 
+Q 23.96875 65.921875 18.8125 64.3125 
+Q 13.671875 62.703125 7.8125 59.421875 
+L 7.8125 69.390625 
+Q 13.765625 71.78125 18.9375 73 
+Q 24.125 74.21875 28.421875 74.21875 
+Q 39.75 74.21875 46.484375 68.546875 
+Q 53.21875 62.890625 53.21875 53.421875 
+Q 53.21875 48.921875 51.53125 44.890625 
+Q 49.859375 40.875 45.40625 35.40625 
+Q 44.1875 33.984375 37.640625 27.21875 
+Q 31.109375 20.453125 19.1875 8.296875 
+z
+" id="DejaVuSans-50"/>
+        <path d="M 70.125 53.71875 
+L 47.796875 31.296875 
+L 70.125 8.984375 
+L 64.3125 3.078125 
+L 41.890625 25.484375 
+L 19.484375 3.078125 
+L 13.71875 8.984375 
+L 35.984375 31.296875 
+L 13.71875 53.71875 
+L 19.484375 59.625 
+L 41.890625 37.203125 
+L 64.3125 59.625 
+z
+" id="DejaVuSans-215"/>
+       </defs>
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-50"/>
+       <use transform="translate(83.105469 0.765625)" xlink:href="#DejaVuSans-215"/>
+       <use transform="translate(186.376953 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(250 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(314.580078 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_3">
+     <g id="line2d_3">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="219.017542" xlink:href="#m7ae94f5537" y="242.008"/>
+      </g>
+     </g>
+     <g id="text_3">
+      <!-- $\mathdefault{3\times10^{0}}$ -->
+      <g transform="translate(200.917542 255.006438)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 40.578125 39.3125 
+Q 47.65625 37.796875 51.625 33 
+Q 55.609375 28.21875 55.609375 21.1875 
+Q 55.609375 10.40625 48.1875 4.484375 
+Q 40.765625 -1.421875 27.09375 -1.421875 
+Q 22.515625 -1.421875 17.65625 -0.515625 
+Q 12.796875 0.390625 7.625 2.203125 
+L 7.625 11.71875 
+Q 11.71875 9.328125 16.59375 8.109375 
+Q 21.484375 6.890625 26.8125 6.890625 
+Q 36.078125 6.890625 40.9375 10.546875 
+Q 45.796875 14.203125 45.796875 21.1875 
+Q 45.796875 27.640625 41.28125 31.265625 
+Q 36.765625 34.90625 28.71875 34.90625 
+L 20.21875 34.90625 
+L 20.21875 43.015625 
+L 29.109375 43.015625 
+Q 36.375 43.015625 40.234375 45.921875 
+Q 44.09375 48.828125 44.09375 54.296875 
+Q 44.09375 59.90625 40.109375 62.90625 
+Q 36.140625 65.921875 28.71875 65.921875 
+Q 24.65625 65.921875 20.015625 65.03125 
+Q 15.375 64.15625 9.8125 62.3125 
+L 9.8125 71.09375 
+Q 15.4375 72.65625 20.34375 73.4375 
+Q 25.25 74.21875 29.59375 74.21875 
+Q 40.828125 74.21875 47.359375 69.109375 
+Q 53.90625 64.015625 53.90625 55.328125 
+Q 53.90625 49.265625 50.4375 45.09375 
+Q 46.96875 40.921875 40.578125 39.3125 
+z
+" id="DejaVuSans-51"/>
+       </defs>
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-51"/>
+       <use transform="translate(83.105469 0.765625)" xlink:href="#DejaVuSans-215"/>
+       <use transform="translate(186.376953 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(250 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(314.580078 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_4">
+     <g id="line2d_4">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="259.226197" xlink:href="#m7ae94f5537" y="242.008"/>
+      </g>
+     </g>
+     <g id="text_4">
+      <!-- $\mathdefault{4\times10^{0}}$ -->
+      <g transform="translate(241.126197 255.006438)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 37.796875 64.3125 
+L 12.890625 25.390625 
+L 37.796875 25.390625 
+z
+M 35.203125 72.90625 
+L 47.609375 72.90625 
+L 47.609375 25.390625 
+L 58.015625 25.390625 
+L 58.015625 17.1875 
+L 47.609375 17.1875 
+L 47.609375 0 
+L 37.796875 0 
+L 37.796875 17.1875 
+L 4.890625 17.1875 
+L 4.890625 26.703125 
+z
+" id="DejaVuSans-52"/>
+       </defs>
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-52"/>
+       <use transform="translate(83.105469 0.765625)" xlink:href="#DejaVuSans-215"/>
+       <use transform="translate(186.376953 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(250 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(314.580078 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_5">
+     <!-- resolution factor $f$ -->
+     <g transform="translate(117.796625 270.284562)scale(0.1 -0.1)">
+      <defs>
+       <path d="M 41.109375 46.296875 
+Q 39.59375 47.171875 37.8125 47.578125 
+Q 36.03125 48 33.890625 48 
+Q 26.265625 48 22.1875 43.046875 
+Q 18.109375 38.09375 18.109375 28.8125 
+L 18.109375 0 
+L 9.078125 0 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.1875 
+Q 20.953125 51.171875 25.484375 53.578125 
+Q 30.03125 56 36.53125 56 
+Q 37.453125 56 38.578125 55.875 
+Q 39.703125 55.765625 41.0625 55.515625 
+z
+" id="DejaVuSans-114"/>
+       <path d="M 56.203125 29.59375 
+L 56.203125 25.203125 
+L 14.890625 25.203125 
+Q 15.484375 15.921875 20.484375 11.0625 
+Q 25.484375 6.203125 34.421875 6.203125 
+Q 39.59375 6.203125 44.453125 7.46875 
+Q 49.3125 8.734375 54.109375 11.28125 
+L 54.109375 2.78125 
+Q 49.265625 0.734375 44.1875 -0.34375 
+Q 39.109375 -1.421875 33.890625 -1.421875 
+Q 20.796875 -1.421875 13.15625 6.1875 
+Q 5.515625 13.8125 5.515625 26.8125 
+Q 5.515625 40.234375 12.765625 48.109375 
+Q 20.015625 56 32.328125 56 
+Q 43.359375 56 49.78125 48.890625 
+Q 56.203125 41.796875 56.203125 29.59375 
+z
+M 47.21875 32.234375 
+Q 47.125 39.59375 43.09375 43.984375 
+Q 39.0625 48.390625 32.421875 48.390625 
+Q 24.90625 48.390625 20.390625 44.140625 
+Q 15.875 39.890625 15.1875 32.171875 
+z
+" id="DejaVuSans-101"/>
+       <path d="M 44.28125 53.078125 
+L 44.28125 44.578125 
+Q 40.484375 46.53125 36.375 47.5 
+Q 32.28125 48.484375 27.875 48.484375 
+Q 21.1875 48.484375 17.84375 46.4375 
+Q 14.5 44.390625 14.5 40.28125 
+Q 14.5 37.15625 16.890625 35.375 
+Q 19.28125 33.59375 26.515625 31.984375 
+L 29.59375 31.296875 
+Q 39.15625 29.25 43.1875 25.515625 
+Q 47.21875 21.78125 47.21875 15.09375 
+Q 47.21875 7.46875 41.1875 3.015625 
+Q 35.15625 -1.421875 24.609375 -1.421875 
+Q 20.21875 -1.421875 15.453125 -0.5625 
+Q 10.6875 0.296875 5.421875 2 
+L 5.421875 11.28125 
+Q 10.40625 8.6875 15.234375 7.390625 
+Q 20.0625 6.109375 24.8125 6.109375 
+Q 31.15625 6.109375 34.5625 8.28125 
+Q 37.984375 10.453125 37.984375 14.40625 
+Q 37.984375 18.0625 35.515625 20.015625 
+Q 33.0625 21.96875 24.703125 23.78125 
+L 21.578125 24.515625 
+Q 13.234375 26.265625 9.515625 29.90625 
+Q 5.8125 33.546875 5.8125 39.890625 
+Q 5.8125 47.609375 11.28125 51.796875 
+Q 16.75 56 26.8125 56 
+Q 31.78125 56 36.171875 55.265625 
+Q 40.578125 54.546875 44.28125 53.078125 
+z
+" id="DejaVuSans-115"/>
+       <path d="M 30.609375 48.390625 
+Q 23.390625 48.390625 19.1875 42.75 
+Q 14.984375 37.109375 14.984375 27.296875 
+Q 14.984375 17.484375 19.15625 11.84375 
+Q 23.34375 6.203125 30.609375 6.203125 
+Q 37.796875 6.203125 41.984375 11.859375 
+Q 46.1875 17.53125 46.1875 27.296875 
+Q 46.1875 37.015625 41.984375 42.703125 
+Q 37.796875 48.390625 30.609375 48.390625 
+z
+M 30.609375 56 
+Q 42.328125 56 49.015625 48.375 
+Q 55.71875 40.765625 55.71875 27.296875 
+Q 55.71875 13.875 49.015625 6.21875 
+Q 42.328125 -1.421875 30.609375 -1.421875 
+Q 18.84375 -1.421875 12.171875 6.21875 
+Q 5.515625 13.875 5.515625 27.296875 
+Q 5.515625 40.765625 12.171875 48.375 
+Q 18.84375 56 30.609375 56 
+z
+" id="DejaVuSans-111"/>
+       <path d="M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 0 
+L 9.421875 0 
+z
+" id="DejaVuSans-108"/>
+       <path d="M 8.5 21.578125 
+L 8.5 54.6875 
+L 17.484375 54.6875 
+L 17.484375 21.921875 
+Q 17.484375 14.15625 20.5 10.265625 
+Q 23.53125 6.390625 29.59375 6.390625 
+Q 36.859375 6.390625 41.078125 11.03125 
+Q 45.3125 15.671875 45.3125 23.6875 
+L 45.3125 54.6875 
+L 54.296875 54.6875 
+L 54.296875 0 
+L 45.3125 0 
+L 45.3125 8.40625 
+Q 42.046875 3.421875 37.71875 1 
+Q 33.40625 -1.421875 27.6875 -1.421875 
+Q 18.265625 -1.421875 13.375 4.4375 
+Q 8.5 10.296875 8.5 21.578125 
+z
+M 31.109375 56 
+z
+" id="DejaVuSans-117"/>
+       <path d="M 18.3125 70.21875 
+L 18.3125 54.6875 
+L 36.8125 54.6875 
+L 36.8125 47.703125 
+L 18.3125 47.703125 
+L 18.3125 18.015625 
+Q 18.3125 11.328125 20.140625 9.421875 
+Q 21.96875 7.515625 27.59375 7.515625 
+L 36.8125 7.515625 
+L 36.8125 0 
+L 27.59375 0 
+Q 17.1875 0 13.234375 3.875 
+Q 9.28125 7.765625 9.28125 18.015625 
+L 9.28125 47.703125 
+L 2.6875 47.703125 
+L 2.6875 54.6875 
+L 9.28125 54.6875 
+L 9.28125 70.21875 
+z
+" id="DejaVuSans-116"/>
+       <path d="M 9.421875 54.6875 
+L 18.40625 54.6875 
+L 18.40625 0 
+L 9.421875 0 
+z
+M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 64.59375 
+L 9.421875 64.59375 
+z
+" id="DejaVuSans-105"/>
+       <path d="M 54.890625 33.015625 
+L 54.890625 0 
+L 45.90625 0 
+L 45.90625 32.71875 
+Q 45.90625 40.484375 42.875 44.328125 
+Q 39.84375 48.1875 33.796875 48.1875 
+Q 26.515625 48.1875 22.3125 43.546875 
+Q 18.109375 38.921875 18.109375 30.90625 
+L 18.109375 0 
+L 9.078125 0 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.1875 
+Q 21.34375 51.125 25.703125 53.5625 
+Q 30.078125 56 35.796875 56 
+Q 45.21875 56 50.046875 50.171875 
+Q 54.890625 44.34375 54.890625 33.015625 
+z
+" id="DejaVuSans-110"/>
+       <path id="DejaVuSans-32"/>
+       <path d="M 37.109375 75.984375 
+L 37.109375 68.5 
+L 28.515625 68.5 
+Q 23.6875 68.5 21.796875 66.546875 
+Q 19.921875 64.59375 19.921875 59.515625 
+L 19.921875 54.6875 
+L 34.71875 54.6875 
+L 34.71875 47.703125 
+L 19.921875 47.703125 
+L 19.921875 0 
+L 10.890625 0 
+L 10.890625 47.703125 
+L 2.296875 47.703125 
+L 2.296875 54.6875 
+L 10.890625 54.6875 
+L 10.890625 58.5 
+Q 10.890625 67.625 15.140625 71.796875 
+Q 19.390625 75.984375 28.609375 75.984375 
+z
+" id="DejaVuSans-102"/>
+       <path d="M 34.28125 27.484375 
+Q 23.390625 27.484375 19.1875 25 
+Q 14.984375 22.515625 14.984375 16.5 
+Q 14.984375 11.71875 18.140625 8.90625 
+Q 21.296875 6.109375 26.703125 6.109375 
+Q 34.1875 6.109375 38.703125 11.40625 
+Q 43.21875 16.703125 43.21875 25.484375 
+L 43.21875 27.484375 
+z
+M 52.203125 31.203125 
+L 52.203125 0 
+L 43.21875 0 
+L 43.21875 8.296875 
+Q 40.140625 3.328125 35.546875 0.953125 
+Q 30.953125 -1.421875 24.3125 -1.421875 
+Q 15.921875 -1.421875 10.953125 3.296875 
+Q 6 8.015625 6 15.921875 
+Q 6 25.140625 12.171875 29.828125 
+Q 18.359375 34.515625 30.609375 34.515625 
+L 43.21875 34.515625 
+L 43.21875 35.40625 
+Q 43.21875 41.609375 39.140625 45 
+Q 35.0625 48.390625 27.6875 48.390625 
+Q 23 48.390625 18.546875 47.265625 
+Q 14.109375 46.140625 10.015625 43.890625 
+L 10.015625 52.203125 
+Q 14.9375 54.109375 19.578125 55.046875 
+Q 24.21875 56 28.609375 56 
+Q 40.484375 56 46.34375 49.84375 
+Q 52.203125 43.703125 52.203125 31.203125 
+z
+" id="DejaVuSans-97"/>
+       <path d="M 48.78125 52.59375 
+L 48.78125 44.1875 
+Q 44.96875 46.296875 41.140625 47.34375 
+Q 37.3125 48.390625 33.40625 48.390625 
+Q 24.65625 48.390625 19.8125 42.84375 
+Q 14.984375 37.3125 14.984375 27.296875 
+Q 14.984375 17.28125 19.8125 11.734375 
+Q 24.65625 6.203125 33.40625 6.203125 
+Q 37.3125 6.203125 41.140625 7.25 
+Q 44.96875 8.296875 48.78125 10.40625 
+L 48.78125 2.09375 
+Q 45.015625 0.34375 40.984375 -0.53125 
+Q 36.96875 -1.421875 32.421875 -1.421875 
+Q 20.0625 -1.421875 12.78125 6.34375 
+Q 5.515625 14.109375 5.515625 27.296875 
+Q 5.515625 40.671875 12.859375 48.328125 
+Q 20.21875 56 33.015625 56 
+Q 37.15625 56 41.109375 55.140625 
+Q 45.0625 54.296875 48.78125 52.59375 
+z
+" id="DejaVuSans-99"/>
+       <path d="M 47.796875 75.984375 
+L 46.390625 68.5 
+L 37.796875 68.5 
+Q 32.90625 68.5 30.6875 66.578125 
+Q 28.46875 64.65625 27.390625 59.515625 
+L 26.421875 54.6875 
+L 41.21875 54.6875 
+L 39.890625 47.703125 
+L 25.09375 47.703125 
+L 15.828125 0 
+L 6.78125 0 
+L 16.109375 47.703125 
+L 7.515625 47.703125 
+L 8.796875 54.6875 
+L 17.390625 54.6875 
+L 18.109375 58.5 
+Q 19.96875 68.171875 24.625 72.078125 
+Q 29.296875 75.984375 39.3125 75.984375 
+z
+" id="DejaVuSans-Oblique-102"/>
+      </defs>
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-114"/>
+      <use transform="translate(41.113281 0.015625)" xlink:href="#DejaVuSans-101"/>
+      <use transform="translate(102.636719 0.015625)" xlink:href="#DejaVuSans-115"/>
+      <use transform="translate(154.736328 0.015625)" xlink:href="#DejaVuSans-111"/>
+      <use transform="translate(215.917969 0.015625)" xlink:href="#DejaVuSans-108"/>
+      <use transform="translate(243.701172 0.015625)" xlink:href="#DejaVuSans-117"/>
+      <use transform="translate(307.080078 0.015625)" xlink:href="#DejaVuSans-116"/>
+      <use transform="translate(346.289062 0.015625)" xlink:href="#DejaVuSans-105"/>
+      <use transform="translate(374.072266 0.015625)" xlink:href="#DejaVuSans-111"/>
+      <use transform="translate(435.253906 0.015625)" xlink:href="#DejaVuSans-110"/>
+      <use transform="translate(498.632812 0.015625)" xlink:href="#DejaVuSans-32"/>
+      <use transform="translate(530.419922 0.015625)" xlink:href="#DejaVuSans-102"/>
+      <use transform="translate(565.625 0.015625)" xlink:href="#DejaVuSans-97"/>
+      <use transform="translate(626.904297 0.015625)" xlink:href="#DejaVuSans-99"/>
+      <use transform="translate(681.884766 0.015625)" xlink:href="#DejaVuSans-116"/>
+      <use transform="translate(721.09375 0.015625)" xlink:href="#DejaVuSans-111"/>
+      <use transform="translate(782.275391 0.015625)" xlink:href="#DejaVuSans-114"/>
+      <use transform="translate(823.388672 0.015625)" xlink:href="#DejaVuSans-32"/>
+      <use transform="translate(855.175781 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
+     </g>
+    </g>
+   </g>
+   <g id="matplotlib.axis_2">
+    <g id="ytick_1">
+     <g id="line2d_5">
+      <defs>
+       <path d="M 0 0 
+L -3.5 0 
+" id="m27f54e28b8" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="55.779096" xlink:href="#m27f54e28b8" y="137.681629"/>
+      </g>
+     </g>
+     <g id="text_6">
+      <!-- $\mathdefault{10^{-1}}$ -->
+      <g transform="translate(25.279096 141.480848)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 10.59375 35.5 
+L 73.1875 35.5 
+L 73.1875 27.203125 
+L 10.59375 27.203125 
+z
+" id="DejaVuSans-8722"/>
+       </defs>
+       <use transform="translate(0 0.684375)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.684375)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(128.203125 38.965625)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+       <use transform="translate(186.855469 38.965625)scale(0.7)" xlink:href="#DejaVuSans-49"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_2">
+     <g id="line2d_6">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="55.779096" xlink:href="#m27f54e28b8" y="21.309455"/>
+      </g>
+     </g>
+     <g id="text_7">
+      <!-- $\mathdefault{10^{0}}$ -->
+      <g transform="translate(31.179096 25.108673)scale(0.1 -0.1)">
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(128.203125 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_3">
+     <g id="line2d_7">
+      <defs>
+       <path d="M 0 0 
+L -2 0 
+" id="m50a58ed922" style="stroke:#000000;stroke-width:0.6;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="219.022288"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_4">
+     <g id="line2d_8">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="198.530165"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_5">
+     <g id="line2d_9">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="183.990773"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_6">
+     <g id="line2d_10">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="172.713144"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_7">
+     <g id="line2d_11">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="163.49865"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_8">
+     <g id="line2d_12">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="155.707907"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_9">
+     <g id="line2d_13">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="148.959258"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_10">
+     <g id="line2d_14">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="143.006528"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_11">
+     <g id="line2d_15">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="102.650114"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_12">
+     <g id="line2d_16">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="82.157991"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_13">
+     <g id="line2d_17">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="67.618599"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_14">
+     <g id="line2d_18">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="56.34097"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_15">
+     <g id="line2d_19">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="47.126476"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_16">
+     <g id="line2d_20">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="39.335732"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_17">
+     <g id="line2d_21">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="32.587083"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_18">
+     <g id="line2d_22">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="26.634353"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_8">
+     <!-- relative error -->
+     <g transform="translate(19.199409 158.953219)rotate(-90)scale(0.1 -0.1)">
+      <defs>
+       <path d="M 2.984375 54.6875 
+L 12.5 54.6875 
+L 29.59375 8.796875 
+L 46.6875 54.6875 
+L 56.203125 54.6875 
+L 35.6875 0 
+L 23.484375 0 
+z
+" id="DejaVuSans-118"/>
+      </defs>
+      <use xlink:href="#DejaVuSans-114"/>
+      <use x="38.863281" xlink:href="#DejaVuSans-101"/>
+      <use x="100.386719" xlink:href="#DejaVuSans-108"/>
+      <use x="128.169922" xlink:href="#DejaVuSans-97"/>
+      <use x="189.449219" xlink:href="#DejaVuSans-116"/>
+      <use x="228.658203" xlink:href="#DejaVuSans-105"/>
+      <use x="256.441406" xlink:href="#DejaVuSans-118"/>
+      <use x="315.621094" xlink:href="#DejaVuSans-101"/>
+      <use x="377.144531" xlink:href="#DejaVuSans-32"/>
+      <use x="408.931641" xlink:href="#DejaVuSans-101"/>
+      <use x="470.455078" xlink:href="#DejaVuSans-114"/>
+      <use x="509.818359" xlink:href="#DejaVuSans-114"/>
+      <use x="548.681641" xlink:href="#DejaVuSans-111"/>
+      <use x="609.863281" xlink:href="#DejaVuSans-114"/>
+     </g>
+    </g>
+   </g>
+   <g id="line2d_23">
+    <path clip-path="url(#pcf1e02a146)" d="M 65.467053 118.003354 
+L 162.346625 216.977727 
+L 259.226197 225.123361 
+" style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
+    <defs>
+     <path d="M 0 1.5 
+C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 
+C 1.341951 0.77937 1.5 0.397805 1.5 0 
+C 1.5 -0.397805 1.341951 -0.77937 1.06066 -1.06066 
+C 0.77937 -1.341951 0.397805 -1.5 0 -1.5 
+C -0.397805 -1.5 -0.77937 -1.341951 -1.06066 -1.06066 
+C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0 
+C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 
+C -0.77937 1.341951 -0.397805 1.5 0 1.5 
+z
+" id="m1dc47eef48" style="stroke:#1f77b4;"/>
+    </defs>
+    <g clip-path="url(#pcf1e02a146)">
+     <use style="fill:#1f77b4;stroke:#1f77b4;" x="65.467053" xlink:href="#m1dc47eef48" y="118.003354"/>
+     <use style="fill:#1f77b4;stroke:#1f77b4;" x="162.346625" xlink:href="#m1dc47eef48" y="216.977727"/>
+     <use style="fill:#1f77b4;stroke:#1f77b4;" x="259.226197" xlink:href="#m1dc47eef48" y="225.123361"/>
+    </g>
+   </g>
+   <g id="line2d_24">
+    <path clip-path="url(#pcf1e02a146)" d="M 65.467053 21.309455 
+L 162.346625 126.404 
+L 259.226197 231.498545 
+" style="fill:none;stroke:#000000;stroke-dasharray:1.5,1.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+   </g>
+   <g id="patch_3">
+    <path d="M 55.779096 242.008 
+L 55.779096 10.8 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_4">
+    <path d="M 268.914154 242.008 
+L 268.914154 10.8 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_5">
+    <path d="M 55.779096 242.008 
+L 268.914154 242.008 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_6">
+    <path d="M 55.779096 10.8 
+L 268.914154 10.8 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="legend_1">
+    <g id="patch_7">
+     <path d="M 165.292279 48.15625 
+L 261.914154 48.15625 
+Q 263.914154 48.15625 263.914154 46.15625 
+L 263.914154 17.8 
+Q 263.914154 15.8 261.914154 15.8 
+L 165.292279 15.8 
+Q 163.292279 15.8 163.292279 17.8 
+L 163.292279 46.15625 
+Q 163.292279 48.15625 165.292279 48.15625 
+z
+" style="fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;"/>
+    </g>
+    <g id="line2d_25">
+     <path d="M 167.292279 23.898438 
+L 187.292279 23.898438 
+" style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_26">
+     <g>
+      <use style="fill:#1f77b4;stroke:#1f77b4;" x="177.292279" xlink:href="#m1dc47eef48" y="23.898438"/>
+     </g>
+    </g>
+    <g id="text_9">
+     <!-- NSVE vs NSE -->
+     <g transform="translate(195.292279 27.398438)scale(0.1 -0.1)">
+      <defs>
+       <path d="M 9.8125 72.90625 
+L 23.09375 72.90625 
+L 55.421875 11.921875 
+L 55.421875 72.90625 
+L 64.984375 72.90625 
+L 64.984375 0 
+L 51.703125 0 
+L 19.390625 60.984375 
+L 19.390625 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-78"/>
+       <path d="M 53.515625 70.515625 
+L 53.515625 60.890625 
+Q 47.90625 63.578125 42.921875 64.890625 
+Q 37.9375 66.21875 33.296875 66.21875 
+Q 25.25 66.21875 20.875 63.09375 
+Q 16.5 59.96875 16.5 54.203125 
+Q 16.5 49.359375 19.40625 46.890625 
+Q 22.3125 44.4375 30.421875 42.921875 
+L 36.375 41.703125 
+Q 47.40625 39.59375 52.65625 34.296875 
+Q 57.90625 29 57.90625 20.125 
+Q 57.90625 9.515625 50.796875 4.046875 
+Q 43.703125 -1.421875 29.984375 -1.421875 
+Q 24.8125 -1.421875 18.96875 -0.25 
+Q 13.140625 0.921875 6.890625 3.21875 
+L 6.890625 13.375 
+Q 12.890625 10.015625 18.65625 8.296875 
+Q 24.421875 6.59375 29.984375 6.59375 
+Q 38.421875 6.59375 43.015625 9.90625 
+Q 47.609375 13.234375 47.609375 19.390625 
+Q 47.609375 24.75 44.3125 27.78125 
+Q 41.015625 30.8125 33.5 32.328125 
+L 27.484375 33.5 
+Q 16.453125 35.6875 11.515625 40.375 
+Q 6.59375 45.0625 6.59375 53.421875 
+Q 6.59375 63.09375 13.40625 68.65625 
+Q 20.21875 74.21875 32.171875 74.21875 
+Q 37.3125 74.21875 42.625 73.28125 
+Q 47.953125 72.359375 53.515625 70.515625 
+z
+" id="DejaVuSans-83"/>
+       <path d="M 28.609375 0 
+L 0.78125 72.90625 
+L 11.078125 72.90625 
+L 34.1875 11.53125 
+L 57.328125 72.90625 
+L 67.578125 72.90625 
+L 39.796875 0 
+z
+" id="DejaVuSans-86"/>
+       <path d="M 9.8125 72.90625 
+L 55.90625 72.90625 
+L 55.90625 64.59375 
+L 19.671875 64.59375 
+L 19.671875 43.015625 
+L 54.390625 43.015625 
+L 54.390625 34.71875 
+L 19.671875 34.71875 
+L 19.671875 8.296875 
+L 56.78125 8.296875 
+L 56.78125 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-69"/>
+      </defs>
+      <use xlink:href="#DejaVuSans-78"/>
+      <use x="74.804688" xlink:href="#DejaVuSans-83"/>
+      <use x="138.28125" xlink:href="#DejaVuSans-86"/>
+      <use x="206.689453" xlink:href="#DejaVuSans-69"/>
+      <use x="269.873047" xlink:href="#DejaVuSans-32"/>
+      <use x="301.660156" xlink:href="#DejaVuSans-118"/>
+      <use x="360.839844" xlink:href="#DejaVuSans-115"/>
+      <use x="412.939453" xlink:href="#DejaVuSans-32"/>
+      <use x="444.726562" xlink:href="#DejaVuSans-78"/>
+      <use x="519.53125" xlink:href="#DejaVuSans-83"/>
+      <use x="583.007812" xlink:href="#DejaVuSans-69"/>
+     </g>
+    </g>
+    <g id="line2d_27">
+     <path d="M 167.292279 38.576562 
+L 187.292279 38.576562 
+" style="fill:none;stroke:#000000;stroke-dasharray:1.5,1.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_28"/>
+    <g id="text_10">
+     <!-- $\propto f^{-3}$ -->
+     <g transform="translate(195.292279 42.076562)scale(0.1 -0.1)">
+      <defs>
+       <path d="M 25.734375 17.71875 
+Q 33.796875 17.71875 38.625 29.4375 
+Q 32.421875 42.234375 25.734375 42.234375 
+Q 20.84375 42.234375 18.359375 38.71875 
+Q 15.71875 34.96875 15.71875 29.984375 
+Q 15.71875 24.515625 18.359375 21.140625 
+Q 21.09375 17.71875 25.734375 17.71875 
+z
+M 60.6875 17.625 
+L 60.6875 11.1875 
+L 56.9375 11.1875 
+Q 53.375 11.1875 50.734375 12.640625 
+Q 48.09375 13.96875 45.5625 17.046875 
+Q 44.046875 18.796875 41.65625 22.90625 
+Q 38.375 17.046875 35.5 14.453125 
+Q 31.9375 11.328125 26.265625 11.328125 
+Q 19.671875 11.328125 15.328125 16.265625 
+Q 10.75 21.4375 10.75 29.984375 
+Q 10.75 38.1875 15.328125 43.75 
+Q 19.390625 48.6875 26.375 48.6875 
+Q 29.9375 48.6875 32.5625 47.21875 
+Q 35.640625 45.609375 37.75 42.828125 
+Q 39.703125 40.328125 41.65625 36.96875 
+Q 44.921875 42.828125 47.796875 45.40625 
+Q 51.375 48.53125 57.03125 48.53125 
+L 60.6875 48.53125 
+L 60.6875 42.140625 
+L 57.5625 42.140625 
+Q 50.34375 42.140625 44.671875 30.421875 
+Q 50.875 17.625 57.5625 17.625 
+z
+" id="DejaVuSans-8733"/>
+      </defs>
+      <use transform="translate(19.482422 0.765625)" xlink:href="#DejaVuSans-8733"/>
+      <use transform="translate(110.400391 0.765625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(153.053177 39.046875)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+      <use transform="translate(211.705521 39.046875)scale(0.7)" xlink:href="#DejaVuSans-51"/>
+     </g>
+    </g>
+   </g>
+  </g>
+ </g>
+ <defs>
+  <clipPath id="pcf1e02a146">
+   <rect height="231.208" width="213.135058" x="55.779096" y="10.8"/>
+  </clipPath>
+ </defs>
+</svg>
diff --git a/documentation/sphinx_static/err_vs_dt_particle.svg b/documentation/sphinx_static/err_vs_dt_particle.svg
new file mode 100644
index 00000000..a7c5c0cb
--- /dev/null
+++ b/documentation/sphinx_static/err_vs_dt_particle.svg
@@ -0,0 +1,1304 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Created with matplotlib (https://matplotlib.org/) -->
+<svg height="345.6pt" version="1.1" viewBox="0 0 460.8 345.6" width="460.8pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <metadata>
+  <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+   <cc:Work>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:date>2022-01-07T21:09:17.007370</dc:date>
+    <dc:format>image/svg+xml</dc:format>
+    <dc:creator>
+     <cc:Agent>
+      <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>
+     </cc:Agent>
+    </dc:creator>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <defs>
+  <style type="text/css">*{stroke-linecap:butt;stroke-linejoin:round;}</style>
+ </defs>
+ <g id="figure_1">
+  <g id="patch_1">
+   <path d="M 0 345.6 
+L 460.8 345.6 
+L 460.8 0 
+L 0 0 
+z
+" style="fill:#ffffff;"/>
+  </g>
+  <g id="axes_1">
+   <g id="patch_2">
+    <path d="M 55.880346 300.328 
+L 447.801427 300.328 
+L 447.801427 10.8 
+L 55.880346 10.8 
+z
+" style="fill:#ffffff;"/>
+   </g>
+   <g id="matplotlib.axis_1">
+    <g id="xtick_1">
+     <g id="line2d_1">
+      <defs>
+       <path d="M 0 0 
+L 0 3.5 
+" id="m84cc79f811" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="73.694941" xlink:href="#m84cc79f811" y="300.328"/>
+      </g>
+     </g>
+     <g id="text_1">
+      <!-- $\mathdefault{10^{0}}$ -->
+      <g transform="translate(64.894941 314.926437)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 12.40625 8.296875 
+L 28.515625 8.296875 
+L 28.515625 63.921875 
+L 10.984375 60.40625 
+L 10.984375 69.390625 
+L 28.421875 72.90625 
+L 38.28125 72.90625 
+L 38.28125 8.296875 
+L 54.390625 8.296875 
+L 54.390625 0 
+L 12.40625 0 
+z
+" id="DejaVuSans-49"/>
+        <path d="M 31.78125 66.40625 
+Q 24.171875 66.40625 20.328125 58.90625 
+Q 16.5 51.421875 16.5 36.375 
+Q 16.5 21.390625 20.328125 13.890625 
+Q 24.171875 6.390625 31.78125 6.390625 
+Q 39.453125 6.390625 43.28125 13.890625 
+Q 47.125 21.390625 47.125 36.375 
+Q 47.125 51.421875 43.28125 58.90625 
+Q 39.453125 66.40625 31.78125 66.40625 
+z
+M 31.78125 74.21875 
+Q 44.046875 74.21875 50.515625 64.515625 
+Q 56.984375 54.828125 56.984375 36.375 
+Q 56.984375 17.96875 50.515625 8.265625 
+Q 44.046875 -1.421875 31.78125 -1.421875 
+Q 19.53125 -1.421875 13.0625 8.265625 
+Q 6.59375 17.96875 6.59375 36.375 
+Q 6.59375 54.828125 13.0625 64.515625 
+Q 19.53125 74.21875 31.78125 74.21875 
+z
+" id="DejaVuSans-48"/>
+       </defs>
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(128.203125 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_2">
+     <g id="line2d_2">
+      <defs>
+       <path d="M 0 0 
+L 0 2 
+" id="m29fff047ed" style="stroke:#000000;stroke-width:0.6;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="167.411967" xlink:href="#m29fff047ed" y="300.328"/>
+      </g>
+     </g>
+     <g id="text_2">
+      <!-- $\mathdefault{1.2\times10^{0}}$ -->
+      <g transform="translate(144.811967 313.326437)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 10.6875 12.40625 
+L 21 12.40625 
+L 21 0 
+L 10.6875 0 
+z
+" id="DejaVuSans-46"/>
+        <path d="M 19.1875 8.296875 
+L 53.609375 8.296875 
+L 53.609375 0 
+L 7.328125 0 
+L 7.328125 8.296875 
+Q 12.9375 14.109375 22.625 23.890625 
+Q 32.328125 33.6875 34.8125 36.53125 
+Q 39.546875 41.84375 41.421875 45.53125 
+Q 43.3125 49.21875 43.3125 52.78125 
+Q 43.3125 58.59375 39.234375 62.25 
+Q 35.15625 65.921875 28.609375 65.921875 
+Q 23.96875 65.921875 18.8125 64.3125 
+Q 13.671875 62.703125 7.8125 59.421875 
+L 7.8125 69.390625 
+Q 13.765625 71.78125 18.9375 73 
+Q 24.125 74.21875 28.421875 74.21875 
+Q 39.75 74.21875 46.484375 68.546875 
+Q 53.21875 62.890625 53.21875 53.421875 
+Q 53.21875 48.921875 51.53125 44.890625 
+Q 49.859375 40.875 45.40625 35.40625 
+Q 44.1875 33.984375 37.640625 27.21875 
+Q 31.109375 20.453125 19.1875 8.296875 
+z
+" id="DejaVuSans-50"/>
+        <path d="M 70.125 53.71875 
+L 47.796875 31.296875 
+L 70.125 8.984375 
+L 64.3125 3.078125 
+L 41.890625 25.484375 
+L 19.484375 3.078125 
+L 13.71875 8.984375 
+L 35.984375 31.296875 
+L 13.71875 53.71875 
+L 19.484375 59.625 
+L 41.890625 37.203125 
+L 64.3125 59.625 
+z
+" id="DejaVuSans-215"/>
+       </defs>
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.765625)" xlink:href="#DejaVuSans-46"/>
+       <use transform="translate(89.910156 0.765625)" xlink:href="#DejaVuSans-50"/>
+       <use transform="translate(173.015625 0.765625)" xlink:href="#DejaVuSans-215"/>
+       <use transform="translate(276.287109 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(339.910156 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(404.490234 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_3">
+     <g id="line2d_3">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="246.648583" xlink:href="#m29fff047ed" y="300.328"/>
+      </g>
+     </g>
+     <g id="text_3">
+      <!-- $\mathdefault{1.4\times10^{0}}$ -->
+      <g transform="translate(223.748583 313.326437)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 37.796875 64.3125 
+L 12.890625 25.390625 
+L 37.796875 25.390625 
+z
+M 35.203125 72.90625 
+L 47.609375 72.90625 
+L 47.609375 25.390625 
+L 58.015625 25.390625 
+L 58.015625 17.1875 
+L 47.609375 17.1875 
+L 47.609375 0 
+L 37.796875 0 
+L 37.796875 17.1875 
+L 4.890625 17.1875 
+L 4.890625 26.703125 
+z
+" id="DejaVuSans-52"/>
+       </defs>
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.765625)" xlink:href="#DejaVuSans-46"/>
+       <use transform="translate(95.410156 0.765625)" xlink:href="#DejaVuSans-52"/>
+       <use transform="translate(178.515625 0.765625)" xlink:href="#DejaVuSans-215"/>
+       <use transform="translate(281.787109 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(345.410156 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(409.990234 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_4">
+     <g id="line2d_4">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="315.286462" xlink:href="#m29fff047ed" y="300.328"/>
+      </g>
+     </g>
+     <g id="text_4">
+      <!-- $\mathdefault{1.6\times10^{0}}$ -->
+      <g transform="translate(292.386462 313.326437)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 33.015625 40.375 
+Q 26.375 40.375 22.484375 35.828125 
+Q 18.609375 31.296875 18.609375 23.390625 
+Q 18.609375 15.53125 22.484375 10.953125 
+Q 26.375 6.390625 33.015625 6.390625 
+Q 39.65625 6.390625 43.53125 10.953125 
+Q 47.40625 15.53125 47.40625 23.390625 
+Q 47.40625 31.296875 43.53125 35.828125 
+Q 39.65625 40.375 33.015625 40.375 
+z
+M 52.59375 71.296875 
+L 52.59375 62.3125 
+Q 48.875 64.0625 45.09375 64.984375 
+Q 41.3125 65.921875 37.59375 65.921875 
+Q 27.828125 65.921875 22.671875 59.328125 
+Q 17.53125 52.734375 16.796875 39.40625 
+Q 19.671875 43.65625 24.015625 45.921875 
+Q 28.375 48.1875 33.59375 48.1875 
+Q 44.578125 48.1875 50.953125 41.515625 
+Q 57.328125 34.859375 57.328125 23.390625 
+Q 57.328125 12.15625 50.6875 5.359375 
+Q 44.046875 -1.421875 33.015625 -1.421875 
+Q 20.359375 -1.421875 13.671875 8.265625 
+Q 6.984375 17.96875 6.984375 36.375 
+Q 6.984375 53.65625 15.1875 63.9375 
+Q 23.390625 74.21875 37.203125 74.21875 
+Q 40.921875 74.21875 44.703125 73.484375 
+Q 48.484375 72.75 52.59375 71.296875 
+z
+" id="DejaVuSans-54"/>
+       </defs>
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.765625)" xlink:href="#DejaVuSans-46"/>
+       <use transform="translate(95.410156 0.765625)" xlink:href="#DejaVuSans-54"/>
+       <use transform="translate(178.515625 0.765625)" xlink:href="#DejaVuSans-215"/>
+       <use transform="translate(281.787109 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(345.410156 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(409.990234 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_5">
+     <g id="line2d_5">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="375.829363" xlink:href="#m29fff047ed" y="300.328"/>
+      </g>
+     </g>
+     <g id="text_5">
+      <!-- $\mathdefault{1.8\times10^{0}}$ -->
+      <g transform="translate(353.079363 313.326437)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 31.78125 34.625 
+Q 24.75 34.625 20.71875 30.859375 
+Q 16.703125 27.09375 16.703125 20.515625 
+Q 16.703125 13.921875 20.71875 10.15625 
+Q 24.75 6.390625 31.78125 6.390625 
+Q 38.8125 6.390625 42.859375 10.171875 
+Q 46.921875 13.96875 46.921875 20.515625 
+Q 46.921875 27.09375 42.890625 30.859375 
+Q 38.875 34.625 31.78125 34.625 
+z
+M 21.921875 38.8125 
+Q 15.578125 40.375 12.03125 44.71875 
+Q 8.5 49.078125 8.5 55.328125 
+Q 8.5 64.0625 14.71875 69.140625 
+Q 20.953125 74.21875 31.78125 74.21875 
+Q 42.671875 74.21875 48.875 69.140625 
+Q 55.078125 64.0625 55.078125 55.328125 
+Q 55.078125 49.078125 51.53125 44.71875 
+Q 48 40.375 41.703125 38.8125 
+Q 48.828125 37.15625 52.796875 32.3125 
+Q 56.78125 27.484375 56.78125 20.515625 
+Q 56.78125 9.90625 50.3125 4.234375 
+Q 43.84375 -1.421875 31.78125 -1.421875 
+Q 19.734375 -1.421875 13.25 4.234375 
+Q 6.78125 9.90625 6.78125 20.515625 
+Q 6.78125 27.484375 10.78125 32.3125 
+Q 14.796875 37.15625 21.921875 38.8125 
+z
+M 18.3125 54.390625 
+Q 18.3125 48.734375 21.84375 45.5625 
+Q 25.390625 42.390625 31.78125 42.390625 
+Q 38.140625 42.390625 41.71875 45.5625 
+Q 45.3125 48.734375 45.3125 54.390625 
+Q 45.3125 60.0625 41.71875 63.234375 
+Q 38.140625 66.40625 31.78125 66.40625 
+Q 25.390625 66.40625 21.84375 63.234375 
+Q 18.3125 60.0625 18.3125 54.390625 
+z
+" id="DejaVuSans-56"/>
+       </defs>
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.765625)" xlink:href="#DejaVuSans-46"/>
+       <use transform="translate(92.785156 0.765625)" xlink:href="#DejaVuSans-56"/>
+       <use transform="translate(175.890625 0.765625)" xlink:href="#DejaVuSans-215"/>
+       <use transform="translate(279.162109 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(342.785156 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(407.365234 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_6">
+     <g id="line2d_6">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="429.986832" xlink:href="#m29fff047ed" y="300.328"/>
+      </g>
+     </g>
+     <g id="text_6">
+      <!-- $\mathdefault{2\times10^{0}}$ -->
+      <g transform="translate(411.886832 313.326437)scale(0.1 -0.1)">
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-50"/>
+       <use transform="translate(83.105469 0.765625)" xlink:href="#DejaVuSans-215"/>
+       <use transform="translate(186.376953 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(250 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(314.580078 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_7">
+     <!-- resolution factor f -->
+     <g transform="translate(207.435418 328.604562)scale(0.1 -0.1)">
+      <defs>
+       <path d="M 41.109375 46.296875 
+Q 39.59375 47.171875 37.8125 47.578125 
+Q 36.03125 48 33.890625 48 
+Q 26.265625 48 22.1875 43.046875 
+Q 18.109375 38.09375 18.109375 28.8125 
+L 18.109375 0 
+L 9.078125 0 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.1875 
+Q 20.953125 51.171875 25.484375 53.578125 
+Q 30.03125 56 36.53125 56 
+Q 37.453125 56 38.578125 55.875 
+Q 39.703125 55.765625 41.0625 55.515625 
+z
+" id="DejaVuSans-114"/>
+       <path d="M 56.203125 29.59375 
+L 56.203125 25.203125 
+L 14.890625 25.203125 
+Q 15.484375 15.921875 20.484375 11.0625 
+Q 25.484375 6.203125 34.421875 6.203125 
+Q 39.59375 6.203125 44.453125 7.46875 
+Q 49.3125 8.734375 54.109375 11.28125 
+L 54.109375 2.78125 
+Q 49.265625 0.734375 44.1875 -0.34375 
+Q 39.109375 -1.421875 33.890625 -1.421875 
+Q 20.796875 -1.421875 13.15625 6.1875 
+Q 5.515625 13.8125 5.515625 26.8125 
+Q 5.515625 40.234375 12.765625 48.109375 
+Q 20.015625 56 32.328125 56 
+Q 43.359375 56 49.78125 48.890625 
+Q 56.203125 41.796875 56.203125 29.59375 
+z
+M 47.21875 32.234375 
+Q 47.125 39.59375 43.09375 43.984375 
+Q 39.0625 48.390625 32.421875 48.390625 
+Q 24.90625 48.390625 20.390625 44.140625 
+Q 15.875 39.890625 15.1875 32.171875 
+z
+" id="DejaVuSans-101"/>
+       <path d="M 44.28125 53.078125 
+L 44.28125 44.578125 
+Q 40.484375 46.53125 36.375 47.5 
+Q 32.28125 48.484375 27.875 48.484375 
+Q 21.1875 48.484375 17.84375 46.4375 
+Q 14.5 44.390625 14.5 40.28125 
+Q 14.5 37.15625 16.890625 35.375 
+Q 19.28125 33.59375 26.515625 31.984375 
+L 29.59375 31.296875 
+Q 39.15625 29.25 43.1875 25.515625 
+Q 47.21875 21.78125 47.21875 15.09375 
+Q 47.21875 7.46875 41.1875 3.015625 
+Q 35.15625 -1.421875 24.609375 -1.421875 
+Q 20.21875 -1.421875 15.453125 -0.5625 
+Q 10.6875 0.296875 5.421875 2 
+L 5.421875 11.28125 
+Q 10.40625 8.6875 15.234375 7.390625 
+Q 20.0625 6.109375 24.8125 6.109375 
+Q 31.15625 6.109375 34.5625 8.28125 
+Q 37.984375 10.453125 37.984375 14.40625 
+Q 37.984375 18.0625 35.515625 20.015625 
+Q 33.0625 21.96875 24.703125 23.78125 
+L 21.578125 24.515625 
+Q 13.234375 26.265625 9.515625 29.90625 
+Q 5.8125 33.546875 5.8125 39.890625 
+Q 5.8125 47.609375 11.28125 51.796875 
+Q 16.75 56 26.8125 56 
+Q 31.78125 56 36.171875 55.265625 
+Q 40.578125 54.546875 44.28125 53.078125 
+z
+" id="DejaVuSans-115"/>
+       <path d="M 30.609375 48.390625 
+Q 23.390625 48.390625 19.1875 42.75 
+Q 14.984375 37.109375 14.984375 27.296875 
+Q 14.984375 17.484375 19.15625 11.84375 
+Q 23.34375 6.203125 30.609375 6.203125 
+Q 37.796875 6.203125 41.984375 11.859375 
+Q 46.1875 17.53125 46.1875 27.296875 
+Q 46.1875 37.015625 41.984375 42.703125 
+Q 37.796875 48.390625 30.609375 48.390625 
+z
+M 30.609375 56 
+Q 42.328125 56 49.015625 48.375 
+Q 55.71875 40.765625 55.71875 27.296875 
+Q 55.71875 13.875 49.015625 6.21875 
+Q 42.328125 -1.421875 30.609375 -1.421875 
+Q 18.84375 -1.421875 12.171875 6.21875 
+Q 5.515625 13.875 5.515625 27.296875 
+Q 5.515625 40.765625 12.171875 48.375 
+Q 18.84375 56 30.609375 56 
+z
+" id="DejaVuSans-111"/>
+       <path d="M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 0 
+L 9.421875 0 
+z
+" id="DejaVuSans-108"/>
+       <path d="M 8.5 21.578125 
+L 8.5 54.6875 
+L 17.484375 54.6875 
+L 17.484375 21.921875 
+Q 17.484375 14.15625 20.5 10.265625 
+Q 23.53125 6.390625 29.59375 6.390625 
+Q 36.859375 6.390625 41.078125 11.03125 
+Q 45.3125 15.671875 45.3125 23.6875 
+L 45.3125 54.6875 
+L 54.296875 54.6875 
+L 54.296875 0 
+L 45.3125 0 
+L 45.3125 8.40625 
+Q 42.046875 3.421875 37.71875 1 
+Q 33.40625 -1.421875 27.6875 -1.421875 
+Q 18.265625 -1.421875 13.375 4.4375 
+Q 8.5 10.296875 8.5 21.578125 
+z
+M 31.109375 56 
+z
+" id="DejaVuSans-117"/>
+       <path d="M 18.3125 70.21875 
+L 18.3125 54.6875 
+L 36.8125 54.6875 
+L 36.8125 47.703125 
+L 18.3125 47.703125 
+L 18.3125 18.015625 
+Q 18.3125 11.328125 20.140625 9.421875 
+Q 21.96875 7.515625 27.59375 7.515625 
+L 36.8125 7.515625 
+L 36.8125 0 
+L 27.59375 0 
+Q 17.1875 0 13.234375 3.875 
+Q 9.28125 7.765625 9.28125 18.015625 
+L 9.28125 47.703125 
+L 2.6875 47.703125 
+L 2.6875 54.6875 
+L 9.28125 54.6875 
+L 9.28125 70.21875 
+z
+" id="DejaVuSans-116"/>
+       <path d="M 9.421875 54.6875 
+L 18.40625 54.6875 
+L 18.40625 0 
+L 9.421875 0 
+z
+M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 64.59375 
+L 9.421875 64.59375 
+z
+" id="DejaVuSans-105"/>
+       <path d="M 54.890625 33.015625 
+L 54.890625 0 
+L 45.90625 0 
+L 45.90625 32.71875 
+Q 45.90625 40.484375 42.875 44.328125 
+Q 39.84375 48.1875 33.796875 48.1875 
+Q 26.515625 48.1875 22.3125 43.546875 
+Q 18.109375 38.921875 18.109375 30.90625 
+L 18.109375 0 
+L 9.078125 0 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.1875 
+Q 21.34375 51.125 25.703125 53.5625 
+Q 30.078125 56 35.796875 56 
+Q 45.21875 56 50.046875 50.171875 
+Q 54.890625 44.34375 54.890625 33.015625 
+z
+" id="DejaVuSans-110"/>
+       <path id="DejaVuSans-32"/>
+       <path d="M 37.109375 75.984375 
+L 37.109375 68.5 
+L 28.515625 68.5 
+Q 23.6875 68.5 21.796875 66.546875 
+Q 19.921875 64.59375 19.921875 59.515625 
+L 19.921875 54.6875 
+L 34.71875 54.6875 
+L 34.71875 47.703125 
+L 19.921875 47.703125 
+L 19.921875 0 
+L 10.890625 0 
+L 10.890625 47.703125 
+L 2.296875 47.703125 
+L 2.296875 54.6875 
+L 10.890625 54.6875 
+L 10.890625 58.5 
+Q 10.890625 67.625 15.140625 71.796875 
+Q 19.390625 75.984375 28.609375 75.984375 
+z
+" id="DejaVuSans-102"/>
+       <path d="M 34.28125 27.484375 
+Q 23.390625 27.484375 19.1875 25 
+Q 14.984375 22.515625 14.984375 16.5 
+Q 14.984375 11.71875 18.140625 8.90625 
+Q 21.296875 6.109375 26.703125 6.109375 
+Q 34.1875 6.109375 38.703125 11.40625 
+Q 43.21875 16.703125 43.21875 25.484375 
+L 43.21875 27.484375 
+z
+M 52.203125 31.203125 
+L 52.203125 0 
+L 43.21875 0 
+L 43.21875 8.296875 
+Q 40.140625 3.328125 35.546875 0.953125 
+Q 30.953125 -1.421875 24.3125 -1.421875 
+Q 15.921875 -1.421875 10.953125 3.296875 
+Q 6 8.015625 6 15.921875 
+Q 6 25.140625 12.171875 29.828125 
+Q 18.359375 34.515625 30.609375 34.515625 
+L 43.21875 34.515625 
+L 43.21875 35.40625 
+Q 43.21875 41.609375 39.140625 45 
+Q 35.0625 48.390625 27.6875 48.390625 
+Q 23 48.390625 18.546875 47.265625 
+Q 14.109375 46.140625 10.015625 43.890625 
+L 10.015625 52.203125 
+Q 14.9375 54.109375 19.578125 55.046875 
+Q 24.21875 56 28.609375 56 
+Q 40.484375 56 46.34375 49.84375 
+Q 52.203125 43.703125 52.203125 31.203125 
+z
+" id="DejaVuSans-97"/>
+       <path d="M 48.78125 52.59375 
+L 48.78125 44.1875 
+Q 44.96875 46.296875 41.140625 47.34375 
+Q 37.3125 48.390625 33.40625 48.390625 
+Q 24.65625 48.390625 19.8125 42.84375 
+Q 14.984375 37.3125 14.984375 27.296875 
+Q 14.984375 17.28125 19.8125 11.734375 
+Q 24.65625 6.203125 33.40625 6.203125 
+Q 37.3125 6.203125 41.140625 7.25 
+Q 44.96875 8.296875 48.78125 10.40625 
+L 48.78125 2.09375 
+Q 45.015625 0.34375 40.984375 -0.53125 
+Q 36.96875 -1.421875 32.421875 -1.421875 
+Q 20.0625 -1.421875 12.78125 6.34375 
+Q 5.515625 14.109375 5.515625 27.296875 
+Q 5.515625 40.671875 12.859375 48.328125 
+Q 20.21875 56 33.015625 56 
+Q 37.15625 56 41.109375 55.140625 
+Q 45.0625 54.296875 48.78125 52.59375 
+z
+" id="DejaVuSans-99"/>
+      </defs>
+      <use xlink:href="#DejaVuSans-114"/>
+      <use x="38.863281" xlink:href="#DejaVuSans-101"/>
+      <use x="100.386719" xlink:href="#DejaVuSans-115"/>
+      <use x="152.486328" xlink:href="#DejaVuSans-111"/>
+      <use x="213.667969" xlink:href="#DejaVuSans-108"/>
+      <use x="241.451172" xlink:href="#DejaVuSans-117"/>
+      <use x="304.830078" xlink:href="#DejaVuSans-116"/>
+      <use x="344.039062" xlink:href="#DejaVuSans-105"/>
+      <use x="371.822266" xlink:href="#DejaVuSans-111"/>
+      <use x="433.003906" xlink:href="#DejaVuSans-110"/>
+      <use x="496.382812" xlink:href="#DejaVuSans-32"/>
+      <use x="528.169922" xlink:href="#DejaVuSans-102"/>
+      <use x="563.375" xlink:href="#DejaVuSans-97"/>
+      <use x="624.654297" xlink:href="#DejaVuSans-99"/>
+      <use x="679.634766" xlink:href="#DejaVuSans-116"/>
+      <use x="718.84375" xlink:href="#DejaVuSans-111"/>
+      <use x="780.025391" xlink:href="#DejaVuSans-114"/>
+      <use x="821.138672" xlink:href="#DejaVuSans-32"/>
+      <use x="852.925781" xlink:href="#DejaVuSans-102"/>
+     </g>
+    </g>
+   </g>
+   <g id="matplotlib.axis_2">
+    <g id="ytick_1">
+     <g id="line2d_7">
+      <defs>
+       <path d="M 0 0 
+L -3.5 0 
+" id="me859688893" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="55.880346" xlink:href="#me859688893" y="192.981768"/>
+      </g>
+     </g>
+     <g id="text_8">
+      <!-- $\mathdefault{10^{-3}}$ -->
+      <g transform="translate(25.380346 196.780987)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 10.59375 35.5 
+L 73.1875 35.5 
+L 73.1875 27.203125 
+L 10.59375 27.203125 
+z
+" id="DejaVuSans-8722"/>
+        <path d="M 40.578125 39.3125 
+Q 47.65625 37.796875 51.625 33 
+Q 55.609375 28.21875 55.609375 21.1875 
+Q 55.609375 10.40625 48.1875 4.484375 
+Q 40.765625 -1.421875 27.09375 -1.421875 
+Q 22.515625 -1.421875 17.65625 -0.515625 
+Q 12.796875 0.390625 7.625 2.203125 
+L 7.625 11.71875 
+Q 11.71875 9.328125 16.59375 8.109375 
+Q 21.484375 6.890625 26.8125 6.890625 
+Q 36.078125 6.890625 40.9375 10.546875 
+Q 45.796875 14.203125 45.796875 21.1875 
+Q 45.796875 27.640625 41.28125 31.265625 
+Q 36.765625 34.90625 28.71875 34.90625 
+L 20.21875 34.90625 
+L 20.21875 43.015625 
+L 29.109375 43.015625 
+Q 36.375 43.015625 40.234375 45.921875 
+Q 44.09375 48.828125 44.09375 54.296875 
+Q 44.09375 59.90625 40.109375 62.90625 
+Q 36.140625 65.921875 28.71875 65.921875 
+Q 24.65625 65.921875 20.015625 65.03125 
+Q 15.375 64.15625 9.8125 62.3125 
+L 9.8125 71.09375 
+Q 15.4375 72.65625 20.34375 73.4375 
+Q 25.25 74.21875 29.59375 74.21875 
+Q 40.828125 74.21875 47.359375 69.109375 
+Q 53.90625 64.015625 53.90625 55.328125 
+Q 53.90625 49.265625 50.4375 45.09375 
+Q 46.96875 40.921875 40.578125 39.3125 
+z
+" id="DejaVuSans-51"/>
+       </defs>
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(128.203125 39.046875)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+       <use transform="translate(186.855469 39.046875)scale(0.7)" xlink:href="#DejaVuSans-51"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_2">
+     <g id="line2d_8">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="55.880346" xlink:href="#me859688893" y="82.609264"/>
+      </g>
+     </g>
+     <g id="text_9">
+      <!-- $\mathdefault{10^{-2}}$ -->
+      <g transform="translate(25.380346 86.408483)scale(0.1 -0.1)">
+       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.765625)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(128.203125 39.046875)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+       <use transform="translate(186.855469 39.046875)scale(0.7)" xlink:href="#DejaVuSans-50"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_3">
+     <g id="line2d_9">
+      <defs>
+       <path d="M 0 0 
+L -2 0 
+" id="mee593c7a4b" style="stroke:#000000;stroke-width:0.6;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="270.128838"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_4">
+     <g id="line2d_10">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="250.693205"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_5">
+     <g id="line2d_11">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="236.903403"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_6">
+     <g id="line2d_12">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="226.207203"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_7">
+     <g id="line2d_13">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="217.46777"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_8">
+     <g id="line2d_14">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="210.078685"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_9">
+     <g id="line2d_15">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="203.677969"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_10">
+     <g id="line2d_16">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="198.032137"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_11">
+     <g id="line2d_17">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="159.756334"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_12">
+     <g id="line2d_18">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="140.320701"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_13">
+     <g id="line2d_19">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="126.5309"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_14">
+     <g id="line2d_20">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="115.834699"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_15">
+     <g id="line2d_21">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="107.095266"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_16">
+     <g id="line2d_22">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="99.706182"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_17">
+     <g id="line2d_23">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="93.305465"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_18">
+     <g id="line2d_24">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="87.659633"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_19">
+     <g id="line2d_25">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="49.38383"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_20">
+     <g id="line2d_26">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="29.948197"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_21">
+     <g id="line2d_27">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="16.158396"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_10">
+     <!-- absolute trajectory error [DNS units] -->
+     <g transform="translate(19.300659 246.806187)rotate(-90)scale(0.1 -0.1)">
+      <defs>
+       <path d="M 48.6875 27.296875 
+Q 48.6875 37.203125 44.609375 42.84375 
+Q 40.53125 48.484375 33.40625 48.484375 
+Q 26.265625 48.484375 22.1875 42.84375 
+Q 18.109375 37.203125 18.109375 27.296875 
+Q 18.109375 17.390625 22.1875 11.75 
+Q 26.265625 6.109375 33.40625 6.109375 
+Q 40.53125 6.109375 44.609375 11.75 
+Q 48.6875 17.390625 48.6875 27.296875 
+z
+M 18.109375 46.390625 
+Q 20.953125 51.265625 25.265625 53.625 
+Q 29.59375 56 35.59375 56 
+Q 45.5625 56 51.78125 48.09375 
+Q 58.015625 40.1875 58.015625 27.296875 
+Q 58.015625 14.40625 51.78125 6.484375 
+Q 45.5625 -1.421875 35.59375 -1.421875 
+Q 29.59375 -1.421875 25.265625 0.953125 
+Q 20.953125 3.328125 18.109375 8.203125 
+L 18.109375 0 
+L 9.078125 0 
+L 9.078125 75.984375 
+L 18.109375 75.984375 
+z
+" id="DejaVuSans-98"/>
+       <path d="M 9.421875 54.6875 
+L 18.40625 54.6875 
+L 18.40625 -0.984375 
+Q 18.40625 -11.421875 14.421875 -16.109375 
+Q 10.453125 -20.796875 1.609375 -20.796875 
+L -1.8125 -20.796875 
+L -1.8125 -13.1875 
+L 0.59375 -13.1875 
+Q 5.71875 -13.1875 7.5625 -10.8125 
+Q 9.421875 -8.453125 9.421875 -0.984375 
+z
+M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 64.59375 
+L 9.421875 64.59375 
+z
+" id="DejaVuSans-106"/>
+       <path d="M 32.171875 -5.078125 
+Q 28.375 -14.84375 24.75 -17.8125 
+Q 21.140625 -20.796875 15.09375 -20.796875 
+L 7.90625 -20.796875 
+L 7.90625 -13.28125 
+L 13.1875 -13.28125 
+Q 16.890625 -13.28125 18.9375 -11.515625 
+Q 21 -9.765625 23.484375 -3.21875 
+L 25.09375 0.875 
+L 2.984375 54.6875 
+L 12.5 54.6875 
+L 29.59375 11.921875 
+L 46.6875 54.6875 
+L 56.203125 54.6875 
+z
+" id="DejaVuSans-121"/>
+       <path d="M 8.59375 75.984375 
+L 29.296875 75.984375 
+L 29.296875 69 
+L 17.578125 69 
+L 17.578125 -6.203125 
+L 29.296875 -6.203125 
+L 29.296875 -13.1875 
+L 8.59375 -13.1875 
+z
+" id="DejaVuSans-91"/>
+       <path d="M 19.671875 64.796875 
+L 19.671875 8.109375 
+L 31.59375 8.109375 
+Q 46.6875 8.109375 53.6875 14.9375 
+Q 60.6875 21.78125 60.6875 36.53125 
+Q 60.6875 51.171875 53.6875 57.984375 
+Q 46.6875 64.796875 31.59375 64.796875 
+z
+M 9.8125 72.90625 
+L 30.078125 72.90625 
+Q 51.265625 72.90625 61.171875 64.09375 
+Q 71.09375 55.28125 71.09375 36.53125 
+Q 71.09375 17.671875 61.125 8.828125 
+Q 51.171875 0 30.078125 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-68"/>
+       <path d="M 9.8125 72.90625 
+L 23.09375 72.90625 
+L 55.421875 11.921875 
+L 55.421875 72.90625 
+L 64.984375 72.90625 
+L 64.984375 0 
+L 51.703125 0 
+L 19.390625 60.984375 
+L 19.390625 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-78"/>
+       <path d="M 53.515625 70.515625 
+L 53.515625 60.890625 
+Q 47.90625 63.578125 42.921875 64.890625 
+Q 37.9375 66.21875 33.296875 66.21875 
+Q 25.25 66.21875 20.875 63.09375 
+Q 16.5 59.96875 16.5 54.203125 
+Q 16.5 49.359375 19.40625 46.890625 
+Q 22.3125 44.4375 30.421875 42.921875 
+L 36.375 41.703125 
+Q 47.40625 39.59375 52.65625 34.296875 
+Q 57.90625 29 57.90625 20.125 
+Q 57.90625 9.515625 50.796875 4.046875 
+Q 43.703125 -1.421875 29.984375 -1.421875 
+Q 24.8125 -1.421875 18.96875 -0.25 
+Q 13.140625 0.921875 6.890625 3.21875 
+L 6.890625 13.375 
+Q 12.890625 10.015625 18.65625 8.296875 
+Q 24.421875 6.59375 29.984375 6.59375 
+Q 38.421875 6.59375 43.015625 9.90625 
+Q 47.609375 13.234375 47.609375 19.390625 
+Q 47.609375 24.75 44.3125 27.78125 
+Q 41.015625 30.8125 33.5 32.328125 
+L 27.484375 33.5 
+Q 16.453125 35.6875 11.515625 40.375 
+Q 6.59375 45.0625 6.59375 53.421875 
+Q 6.59375 63.09375 13.40625 68.65625 
+Q 20.21875 74.21875 32.171875 74.21875 
+Q 37.3125 74.21875 42.625 73.28125 
+Q 47.953125 72.359375 53.515625 70.515625 
+z
+" id="DejaVuSans-83"/>
+       <path d="M 30.421875 75.984375 
+L 30.421875 -13.1875 
+L 9.71875 -13.1875 
+L 9.71875 -6.203125 
+L 21.390625 -6.203125 
+L 21.390625 69 
+L 9.71875 69 
+L 9.71875 75.984375 
+z
+" id="DejaVuSans-93"/>
+      </defs>
+      <use xlink:href="#DejaVuSans-97"/>
+      <use x="61.279297" xlink:href="#DejaVuSans-98"/>
+      <use x="124.755859" xlink:href="#DejaVuSans-115"/>
+      <use x="176.855469" xlink:href="#DejaVuSans-111"/>
+      <use x="238.037109" xlink:href="#DejaVuSans-108"/>
+      <use x="265.820312" xlink:href="#DejaVuSans-117"/>
+      <use x="329.199219" xlink:href="#DejaVuSans-116"/>
+      <use x="368.408203" xlink:href="#DejaVuSans-101"/>
+      <use x="429.931641" xlink:href="#DejaVuSans-32"/>
+      <use x="461.71875" xlink:href="#DejaVuSans-116"/>
+      <use x="500.927734" xlink:href="#DejaVuSans-114"/>
+      <use x="542.041016" xlink:href="#DejaVuSans-97"/>
+      <use x="603.320312" xlink:href="#DejaVuSans-106"/>
+      <use x="631.103516" xlink:href="#DejaVuSans-101"/>
+      <use x="692.626953" xlink:href="#DejaVuSans-99"/>
+      <use x="747.607422" xlink:href="#DejaVuSans-116"/>
+      <use x="786.816406" xlink:href="#DejaVuSans-111"/>
+      <use x="847.998047" xlink:href="#DejaVuSans-114"/>
+      <use x="889.111328" xlink:href="#DejaVuSans-121"/>
+      <use x="948.291016" xlink:href="#DejaVuSans-32"/>
+      <use x="980.078125" xlink:href="#DejaVuSans-101"/>
+      <use x="1041.601562" xlink:href="#DejaVuSans-114"/>
+      <use x="1080.964844" xlink:href="#DejaVuSans-114"/>
+      <use x="1119.828125" xlink:href="#DejaVuSans-111"/>
+      <use x="1181.009766" xlink:href="#DejaVuSans-114"/>
+      <use x="1222.123047" xlink:href="#DejaVuSans-32"/>
+      <use x="1253.910156" xlink:href="#DejaVuSans-91"/>
+      <use x="1292.923828" xlink:href="#DejaVuSans-68"/>
+      <use x="1369.925781" xlink:href="#DejaVuSans-78"/>
+      <use x="1444.730469" xlink:href="#DejaVuSans-83"/>
+      <use x="1508.207031" xlink:href="#DejaVuSans-32"/>
+      <use x="1539.994141" xlink:href="#DejaVuSans-117"/>
+      <use x="1603.373047" xlink:href="#DejaVuSans-110"/>
+      <use x="1666.751953" xlink:href="#DejaVuSans-105"/>
+      <use x="1694.535156" xlink:href="#DejaVuSans-116"/>
+      <use x="1733.744141" xlink:href="#DejaVuSans-115"/>
+      <use x="1785.84375" xlink:href="#DejaVuSans-93"/>
+     </g>
+    </g>
+   </g>
+   <g id="line2d_28">
+    <path clip-path="url(#p15ab6f59e1)" d="M 73.694941 23.960364 
+L 429.986832 137.018105 
+" style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
+    <defs>
+     <path d="M 0 1.5 
+C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 
+C 1.341951 0.77937 1.5 0.397805 1.5 0 
+C 1.5 -0.397805 1.341951 -0.77937 1.06066 -1.06066 
+C 0.77937 -1.341951 0.397805 -1.5 0 -1.5 
+C -0.397805 -1.5 -0.77937 -1.341951 -1.06066 -1.06066 
+C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0 
+C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 
+C -0.77937 1.341951 -0.397805 1.5 0 1.5 
+z
+" id="mb362add29c" style="stroke:#1f77b4;"/>
+    </defs>
+    <g clip-path="url(#p15ab6f59e1)">
+     <use style="fill:#1f77b4;stroke:#1f77b4;" x="73.694941" xlink:href="#mb362add29c" y="23.960364"/>
+     <use style="fill:#1f77b4;stroke:#1f77b4;" x="429.986832" xlink:href="#mb362add29c" y="137.018105"/>
+    </g>
+   </g>
+   <g id="line2d_29">
+    <path clip-path="url(#p15ab6f59e1)" d="M 73.694941 151.290058 
+L 429.986832 287.167636 
+" style="fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;"/>
+    <defs>
+     <path d="M 0 1.5 
+C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 
+C 1.341951 0.77937 1.5 0.397805 1.5 0 
+C 1.5 -0.397805 1.341951 -0.77937 1.06066 -1.06066 
+C 0.77937 -1.341951 0.397805 -1.5 0 -1.5 
+C -0.397805 -1.5 -0.77937 -1.341951 -1.06066 -1.06066 
+C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0 
+C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 
+C -0.77937 1.341951 -0.397805 1.5 0 1.5 
+z
+" id="m52d3e4d600" style="stroke:#ff7f0e;"/>
+    </defs>
+    <g clip-path="url(#p15ab6f59e1)">
+     <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="73.694941" xlink:href="#m52d3e4d600" y="151.290058"/>
+     <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="429.986832" xlink:href="#m52d3e4d600" y="287.167636"/>
+    </g>
+   </g>
+   <g id="line2d_30">
+    <path clip-path="url(#p15ab6f59e1)" d="M 73.694941 29.948197 
+L 429.986832 146.237217 
+" style="fill:none;stroke:#000000;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-width:1.5;"/>
+   </g>
+   <g id="line2d_31">
+    <path clip-path="url(#p15ab6f59e1)" d="M 73.694941 140.320701 
+L 429.986832 273.222438 
+" style="fill:none;stroke:#000000;stroke-dasharray:1.5,1.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+   </g>
+   <g id="patch_3">
+    <path d="M 55.880346 300.328 
+L 55.880346 10.8 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_4">
+    <path d="M 447.801427 300.328 
+L 447.801427 10.8 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_5">
+    <path d="M 55.880346 300.328 
+L 447.801427 300.328 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_6">
+    <path d="M 55.880346 10.8 
+L 447.801427 10.8 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="legend_1">
+    <g id="patch_7">
+     <path d="M 353.059239 77.5125 
+L 440.801427 77.5125 
+Q 442.801427 77.5125 442.801427 75.5125 
+L 442.801427 17.8 
+Q 442.801427 15.8 440.801427 15.8 
+L 353.059239 15.8 
+Q 351.059239 15.8 351.059239 17.8 
+L 351.059239 75.5125 
+Q 351.059239 77.5125 353.059239 77.5125 
+z
+" style="fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;"/>
+    </g>
+    <g id="line2d_32">
+     <path d="M 355.059239 23.898438 
+L 375.059239 23.898438 
+" style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_33">
+     <g>
+      <use style="fill:#1f77b4;stroke:#1f77b4;" x="365.059239" xlink:href="#mb362add29c" y="23.898438"/>
+     </g>
+    </g>
+    <g id="text_11">
+     <!-- max error -->
+     <g transform="translate(383.059239 27.398438)scale(0.1 -0.1)">
+      <defs>
+       <path d="M 52 44.1875 
+Q 55.375 50.25 60.0625 53.125 
+Q 64.75 56 71.09375 56 
+Q 79.640625 56 84.28125 50.015625 
+Q 88.921875 44.046875 88.921875 33.015625 
+L 88.921875 0 
+L 79.890625 0 
+L 79.890625 32.71875 
+Q 79.890625 40.578125 77.09375 44.375 
+Q 74.3125 48.1875 68.609375 48.1875 
+Q 61.625 48.1875 57.5625 43.546875 
+Q 53.515625 38.921875 53.515625 30.90625 
+L 53.515625 0 
+L 44.484375 0 
+L 44.484375 32.71875 
+Q 44.484375 40.625 41.703125 44.40625 
+Q 38.921875 48.1875 33.109375 48.1875 
+Q 26.21875 48.1875 22.15625 43.53125 
+Q 18.109375 38.875 18.109375 30.90625 
+L 18.109375 0 
+L 9.078125 0 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.1875 
+Q 21.1875 51.21875 25.484375 53.609375 
+Q 29.78125 56 35.6875 56 
+Q 41.65625 56 45.828125 52.96875 
+Q 50 49.953125 52 44.1875 
+z
+" id="DejaVuSans-109"/>
+       <path d="M 54.890625 54.6875 
+L 35.109375 28.078125 
+L 55.90625 0 
+L 45.3125 0 
+L 29.390625 21.484375 
+L 13.484375 0 
+L 2.875 0 
+L 24.125 28.609375 
+L 4.6875 54.6875 
+L 15.28125 54.6875 
+L 29.78125 35.203125 
+L 44.28125 54.6875 
+z
+" id="DejaVuSans-120"/>
+      </defs>
+      <use xlink:href="#DejaVuSans-109"/>
+      <use x="97.412109" xlink:href="#DejaVuSans-97"/>
+      <use x="158.691406" xlink:href="#DejaVuSans-120"/>
+      <use x="217.871094" xlink:href="#DejaVuSans-32"/>
+      <use x="249.658203" xlink:href="#DejaVuSans-101"/>
+      <use x="311.181641" xlink:href="#DejaVuSans-114"/>
+      <use x="350.544922" xlink:href="#DejaVuSans-114"/>
+      <use x="389.408203" xlink:href="#DejaVuSans-111"/>
+      <use x="450.589844" xlink:href="#DejaVuSans-114"/>
+     </g>
+    </g>
+    <g id="line2d_34">
+     <path d="M 355.059239 38.576563 
+L 375.059239 38.576563 
+" style="fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_35">
+     <g>
+      <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="365.059239" xlink:href="#m52d3e4d600" y="38.576563"/>
+     </g>
+    </g>
+    <g id="text_12">
+     <!-- mean error -->
+     <g transform="translate(383.059239 42.076563)scale(0.1 -0.1)">
+      <use xlink:href="#DejaVuSans-109"/>
+      <use x="97.412109" xlink:href="#DejaVuSans-101"/>
+      <use x="158.935547" xlink:href="#DejaVuSans-97"/>
+      <use x="220.214844" xlink:href="#DejaVuSans-110"/>
+      <use x="283.59375" xlink:href="#DejaVuSans-32"/>
+      <use x="315.380859" xlink:href="#DejaVuSans-101"/>
+      <use x="376.904297" xlink:href="#DejaVuSans-114"/>
+      <use x="416.267578" xlink:href="#DejaVuSans-114"/>
+      <use x="455.130859" xlink:href="#DejaVuSans-111"/>
+      <use x="516.3125" xlink:href="#DejaVuSans-114"/>
+     </g>
+    </g>
+    <g id="line2d_36">
+     <path d="M 355.059239 53.254688 
+L 375.059239 53.254688 
+" style="fill:none;stroke:#000000;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_37"/>
+    <g id="text_13">
+     <!-- $\propto f^{-3.5}$ -->
+     <g transform="translate(383.059239 56.754688)scale(0.1 -0.1)">
+      <defs>
+       <path d="M 25.734375 17.71875 
+Q 33.796875 17.71875 38.625 29.4375 
+Q 32.421875 42.234375 25.734375 42.234375 
+Q 20.84375 42.234375 18.359375 38.71875 
+Q 15.71875 34.96875 15.71875 29.984375 
+Q 15.71875 24.515625 18.359375 21.140625 
+Q 21.09375 17.71875 25.734375 17.71875 
+z
+M 60.6875 17.625 
+L 60.6875 11.1875 
+L 56.9375 11.1875 
+Q 53.375 11.1875 50.734375 12.640625 
+Q 48.09375 13.96875 45.5625 17.046875 
+Q 44.046875 18.796875 41.65625 22.90625 
+Q 38.375 17.046875 35.5 14.453125 
+Q 31.9375 11.328125 26.265625 11.328125 
+Q 19.671875 11.328125 15.328125 16.265625 
+Q 10.75 21.4375 10.75 29.984375 
+Q 10.75 38.1875 15.328125 43.75 
+Q 19.390625 48.6875 26.375 48.6875 
+Q 29.9375 48.6875 32.5625 47.21875 
+Q 35.640625 45.609375 37.75 42.828125 
+Q 39.703125 40.328125 41.65625 36.96875 
+Q 44.921875 42.828125 47.796875 45.40625 
+Q 51.375 48.53125 57.03125 48.53125 
+L 60.6875 48.53125 
+L 60.6875 42.140625 
+L 57.5625 42.140625 
+Q 50.34375 42.140625 44.671875 30.421875 
+Q 50.875 17.625 57.5625 17.625 
+z
+" id="DejaVuSans-8733"/>
+       <path d="M 47.796875 75.984375 
+L 46.390625 68.5 
+L 37.796875 68.5 
+Q 32.90625 68.5 30.6875 66.578125 
+Q 28.46875 64.65625 27.390625 59.515625 
+L 26.421875 54.6875 
+L 41.21875 54.6875 
+L 39.890625 47.703125 
+L 25.09375 47.703125 
+L 15.828125 0 
+L 6.78125 0 
+L 16.109375 47.703125 
+L 7.515625 47.703125 
+L 8.796875 54.6875 
+L 17.390625 54.6875 
+L 18.109375 58.5 
+Q 19.96875 68.171875 24.625 72.078125 
+Q 29.296875 75.984375 39.3125 75.984375 
+z
+" id="DejaVuSans-Oblique-102"/>
+       <path d="M 10.796875 72.90625 
+L 49.515625 72.90625 
+L 49.515625 64.59375 
+L 19.828125 64.59375 
+L 19.828125 46.734375 
+Q 21.96875 47.46875 24.109375 47.828125 
+Q 26.265625 48.1875 28.421875 48.1875 
+Q 40.625 48.1875 47.75 41.5 
+Q 54.890625 34.8125 54.890625 23.390625 
+Q 54.890625 11.625 47.5625 5.09375 
+Q 40.234375 -1.421875 26.90625 -1.421875 
+Q 22.3125 -1.421875 17.546875 -0.640625 
+Q 12.796875 0.140625 7.71875 1.703125 
+L 7.71875 11.625 
+Q 12.109375 9.234375 16.796875 8.0625 
+Q 21.484375 6.890625 26.703125 6.890625 
+Q 35.15625 6.890625 40.078125 11.328125 
+Q 45.015625 15.765625 45.015625 23.390625 
+Q 45.015625 31 40.078125 35.4375 
+Q 35.15625 39.890625 26.703125 39.890625 
+Q 22.75 39.890625 18.8125 39.015625 
+Q 14.890625 38.140625 10.796875 36.28125 
+z
+" id="DejaVuSans-53"/>
+      </defs>
+      <use transform="translate(19.482422 0.765625)" xlink:href="#DejaVuSans-8733"/>
+      <use transform="translate(110.400391 0.765625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(153.053177 39.046875)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+      <use transform="translate(211.705521 39.046875)scale(0.7)" xlink:href="#DejaVuSans-51"/>
+      <use transform="translate(256.241654 39.046875)scale(0.7)" xlink:href="#DejaVuSans-46"/>
+      <use transform="translate(278.49263 39.046875)scale(0.7)" xlink:href="#DejaVuSans-53"/>
+     </g>
+    </g>
+    <g id="line2d_38">
+     <path d="M 355.059239 67.932813 
+L 375.059239 67.932813 
+" style="fill:none;stroke:#000000;stroke-dasharray:1.5,1.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_39"/>
+    <g id="text_14">
+     <!-- $\propto f^{-4}$ -->
+     <g transform="translate(383.059239 71.432813)scale(0.1 -0.1)">
+      <use transform="translate(19.482422 0.684375)" xlink:href="#DejaVuSans-8733"/>
+      <use transform="translate(110.400391 0.684375)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(153.053177 38.965625)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+      <use transform="translate(211.705521 38.965625)scale(0.7)" xlink:href="#DejaVuSans-52"/>
+     </g>
+    </g>
+   </g>
+  </g>
+ </g>
+ <defs>
+  <clipPath id="p15ab6f59e1">
+   <rect height="289.528" width="391.921081" x="55.880346" y="10.8"/>
+  </clipPath>
+ </defs>
+</svg>
diff --git a/documentation/sphinx_static/trajectories.svg b/documentation/sphinx_static/trajectories.svg
new file mode 100644
index 00000000..b98f9e06
--- /dev/null
+++ b/documentation/sphinx_static/trajectories.svg
@@ -0,0 +1,960 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Created with matplotlib (https://matplotlib.org/) -->
+<svg height="345.6pt" version="1.1" viewBox="0 0 460.8 345.6" width="460.8pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <metadata>
+  <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+   <cc:Work>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:date>2022-01-07T21:09:17.278910</dc:date>
+    <dc:format>image/svg+xml</dc:format>
+    <dc:creator>
+     <cc:Agent>
+      <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>
+     </cc:Agent>
+    </dc:creator>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <defs>
+  <style type="text/css">*{stroke-linecap:butt;stroke-linejoin:round;}</style>
+ </defs>
+ <g id="figure_1">
+  <g id="patch_1">
+   <path d="M 0 345.6 
+L 460.8 345.6 
+L 460.8 0 
+L 0 0 
+z
+" style="fill:#ffffff;"/>
+  </g>
+  <g id="axes_1">
+   <g id="patch_2">
+    <path d="M 46.51 300.76 
+L 450 300.76 
+L 450 10.8 
+L 46.51 10.8 
+z
+" style="fill:#ffffff;"/>
+   </g>
+   <g id="matplotlib.axis_1">
+    <g id="xtick_1">
+     <g id="line2d_1">
+      <defs>
+       <path d="M 0 0 
+L 0 3.5 
+" id="m8adaaf941d" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="48.514242" xlink:href="#m8adaaf941d" y="300.76"/>
+      </g>
+     </g>
+     <g id="text_1">
+      <!-- 5.60 -->
+      <g transform="translate(37.38143 315.358437)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 10.796875 72.90625 
+L 49.515625 72.90625 
+L 49.515625 64.59375 
+L 19.828125 64.59375 
+L 19.828125 46.734375 
+Q 21.96875 47.46875 24.109375 47.828125 
+Q 26.265625 48.1875 28.421875 48.1875 
+Q 40.625 48.1875 47.75 41.5 
+Q 54.890625 34.8125 54.890625 23.390625 
+Q 54.890625 11.625 47.5625 5.09375 
+Q 40.234375 -1.421875 26.90625 -1.421875 
+Q 22.3125 -1.421875 17.546875 -0.640625 
+Q 12.796875 0.140625 7.71875 1.703125 
+L 7.71875 11.625 
+Q 12.109375 9.234375 16.796875 8.0625 
+Q 21.484375 6.890625 26.703125 6.890625 
+Q 35.15625 6.890625 40.078125 11.328125 
+Q 45.015625 15.765625 45.015625 23.390625 
+Q 45.015625 31 40.078125 35.4375 
+Q 35.15625 39.890625 26.703125 39.890625 
+Q 22.75 39.890625 18.8125 39.015625 
+Q 14.890625 38.140625 10.796875 36.28125 
+z
+" id="DejaVuSans-53"/>
+        <path d="M 10.6875 12.40625 
+L 21 12.40625 
+L 21 0 
+L 10.6875 0 
+z
+" id="DejaVuSans-46"/>
+        <path d="M 33.015625 40.375 
+Q 26.375 40.375 22.484375 35.828125 
+Q 18.609375 31.296875 18.609375 23.390625 
+Q 18.609375 15.53125 22.484375 10.953125 
+Q 26.375 6.390625 33.015625 6.390625 
+Q 39.65625 6.390625 43.53125 10.953125 
+Q 47.40625 15.53125 47.40625 23.390625 
+Q 47.40625 31.296875 43.53125 35.828125 
+Q 39.65625 40.375 33.015625 40.375 
+z
+M 52.59375 71.296875 
+L 52.59375 62.3125 
+Q 48.875 64.0625 45.09375 64.984375 
+Q 41.3125 65.921875 37.59375 65.921875 
+Q 27.828125 65.921875 22.671875 59.328125 
+Q 17.53125 52.734375 16.796875 39.40625 
+Q 19.671875 43.65625 24.015625 45.921875 
+Q 28.375 48.1875 33.59375 48.1875 
+Q 44.578125 48.1875 50.953125 41.515625 
+Q 57.328125 34.859375 57.328125 23.390625 
+Q 57.328125 12.15625 50.6875 5.359375 
+Q 44.046875 -1.421875 33.015625 -1.421875 
+Q 20.359375 -1.421875 13.671875 8.265625 
+Q 6.984375 17.96875 6.984375 36.375 
+Q 6.984375 53.65625 15.1875 63.9375 
+Q 23.390625 74.21875 37.203125 74.21875 
+Q 40.921875 74.21875 44.703125 73.484375 
+Q 48.484375 72.75 52.59375 71.296875 
+z
+" id="DejaVuSans-54"/>
+        <path d="M 31.78125 66.40625 
+Q 24.171875 66.40625 20.328125 58.90625 
+Q 16.5 51.421875 16.5 36.375 
+Q 16.5 21.390625 20.328125 13.890625 
+Q 24.171875 6.390625 31.78125 6.390625 
+Q 39.453125 6.390625 43.28125 13.890625 
+Q 47.125 21.390625 47.125 36.375 
+Q 47.125 51.421875 43.28125 58.90625 
+Q 39.453125 66.40625 31.78125 66.40625 
+z
+M 31.78125 74.21875 
+Q 44.046875 74.21875 50.515625 64.515625 
+Q 56.984375 54.828125 56.984375 36.375 
+Q 56.984375 17.96875 50.515625 8.265625 
+Q 44.046875 -1.421875 31.78125 -1.421875 
+Q 19.53125 -1.421875 13.0625 8.265625 
+Q 6.59375 17.96875 6.59375 36.375 
+Q 6.59375 54.828125 13.0625 64.515625 
+Q 19.53125 74.21875 31.78125 74.21875 
+z
+" id="DejaVuSans-48"/>
+       </defs>
+       <use xlink:href="#DejaVuSans-53"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-54"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_2">
+     <g id="line2d_2">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="103.339781" xlink:href="#m8adaaf941d" y="300.76"/>
+      </g>
+     </g>
+     <g id="text_2">
+      <!-- 5.62 -->
+      <g transform="translate(92.206968 315.358437)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 19.1875 8.296875 
+L 53.609375 8.296875 
+L 53.609375 0 
+L 7.328125 0 
+L 7.328125 8.296875 
+Q 12.9375 14.109375 22.625 23.890625 
+Q 32.328125 33.6875 34.8125 36.53125 
+Q 39.546875 41.84375 41.421875 45.53125 
+Q 43.3125 49.21875 43.3125 52.78125 
+Q 43.3125 58.59375 39.234375 62.25 
+Q 35.15625 65.921875 28.609375 65.921875 
+Q 23.96875 65.921875 18.8125 64.3125 
+Q 13.671875 62.703125 7.8125 59.421875 
+L 7.8125 69.390625 
+Q 13.765625 71.78125 18.9375 73 
+Q 24.125 74.21875 28.421875 74.21875 
+Q 39.75 74.21875 46.484375 68.546875 
+Q 53.21875 62.890625 53.21875 53.421875 
+Q 53.21875 48.921875 51.53125 44.890625 
+Q 49.859375 40.875 45.40625 35.40625 
+Q 44.1875 33.984375 37.640625 27.21875 
+Q 31.109375 20.453125 19.1875 8.296875 
+z
+" id="DejaVuSans-50"/>
+       </defs>
+       <use xlink:href="#DejaVuSans-53"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-54"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-50"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_3">
+     <g id="line2d_3">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="158.165319" xlink:href="#m8adaaf941d" y="300.76"/>
+      </g>
+     </g>
+     <g id="text_3">
+      <!-- 5.64 -->
+      <g transform="translate(147.032507 315.358437)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 37.796875 64.3125 
+L 12.890625 25.390625 
+L 37.796875 25.390625 
+z
+M 35.203125 72.90625 
+L 47.609375 72.90625 
+L 47.609375 25.390625 
+L 58.015625 25.390625 
+L 58.015625 17.1875 
+L 47.609375 17.1875 
+L 47.609375 0 
+L 37.796875 0 
+L 37.796875 17.1875 
+L 4.890625 17.1875 
+L 4.890625 26.703125 
+z
+" id="DejaVuSans-52"/>
+       </defs>
+       <use xlink:href="#DejaVuSans-53"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-54"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-52"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_4">
+     <g id="line2d_4">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="212.990858" xlink:href="#m8adaaf941d" y="300.76"/>
+      </g>
+     </g>
+     <g id="text_4">
+      <!-- 5.66 -->
+      <g transform="translate(201.858045 315.358437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-53"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-54"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-54"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_5">
+     <g id="line2d_5">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="267.816396" xlink:href="#m8adaaf941d" y="300.76"/>
+      </g>
+     </g>
+     <g id="text_5">
+      <!-- 5.68 -->
+      <g transform="translate(256.683584 315.358437)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 31.78125 34.625 
+Q 24.75 34.625 20.71875 30.859375 
+Q 16.703125 27.09375 16.703125 20.515625 
+Q 16.703125 13.921875 20.71875 10.15625 
+Q 24.75 6.390625 31.78125 6.390625 
+Q 38.8125 6.390625 42.859375 10.171875 
+Q 46.921875 13.96875 46.921875 20.515625 
+Q 46.921875 27.09375 42.890625 30.859375 
+Q 38.875 34.625 31.78125 34.625 
+z
+M 21.921875 38.8125 
+Q 15.578125 40.375 12.03125 44.71875 
+Q 8.5 49.078125 8.5 55.328125 
+Q 8.5 64.0625 14.71875 69.140625 
+Q 20.953125 74.21875 31.78125 74.21875 
+Q 42.671875 74.21875 48.875 69.140625 
+Q 55.078125 64.0625 55.078125 55.328125 
+Q 55.078125 49.078125 51.53125 44.71875 
+Q 48 40.375 41.703125 38.8125 
+Q 48.828125 37.15625 52.796875 32.3125 
+Q 56.78125 27.484375 56.78125 20.515625 
+Q 56.78125 9.90625 50.3125 4.234375 
+Q 43.84375 -1.421875 31.78125 -1.421875 
+Q 19.734375 -1.421875 13.25 4.234375 
+Q 6.78125 9.90625 6.78125 20.515625 
+Q 6.78125 27.484375 10.78125 32.3125 
+Q 14.796875 37.15625 21.921875 38.8125 
+z
+M 18.3125 54.390625 
+Q 18.3125 48.734375 21.84375 45.5625 
+Q 25.390625 42.390625 31.78125 42.390625 
+Q 38.140625 42.390625 41.71875 45.5625 
+Q 45.3125 48.734375 45.3125 54.390625 
+Q 45.3125 60.0625 41.71875 63.234375 
+Q 38.140625 66.40625 31.78125 66.40625 
+Q 25.390625 66.40625 21.84375 63.234375 
+Q 18.3125 60.0625 18.3125 54.390625 
+z
+" id="DejaVuSans-56"/>
+       </defs>
+       <use xlink:href="#DejaVuSans-53"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-54"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-56"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_6">
+     <g id="line2d_6">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="322.641935" xlink:href="#m8adaaf941d" y="300.76"/>
+      </g>
+     </g>
+     <g id="text_6">
+      <!-- 5.70 -->
+      <g transform="translate(311.509122 315.358437)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 8.203125 72.90625 
+L 55.078125 72.90625 
+L 55.078125 68.703125 
+L 28.609375 0 
+L 18.3125 0 
+L 43.21875 64.59375 
+L 8.203125 64.59375 
+z
+" id="DejaVuSans-55"/>
+       </defs>
+       <use xlink:href="#DejaVuSans-53"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-55"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_7">
+     <g id="line2d_7">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="377.467473" xlink:href="#m8adaaf941d" y="300.76"/>
+      </g>
+     </g>
+     <g id="text_7">
+      <!-- 5.72 -->
+      <g transform="translate(366.334661 315.358437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-53"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-55"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-50"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_8">
+     <g id="line2d_8">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="432.293012" xlink:href="#m8adaaf941d" y="300.76"/>
+      </g>
+     </g>
+     <g id="text_8">
+      <!-- 5.74 -->
+      <g transform="translate(421.160199 315.358437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-53"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-55"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-52"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_9">
+     <!-- $y$ [code units] -->
+     <g transform="translate(213.855 329.038125)scale(0.1 -0.1)">
+      <defs>
+       <path d="M 24.8125 -5.078125 
+Q 18.5625 -15.578125 14.625 -18.1875 
+Q 10.6875 -20.796875 4.59375 -20.796875 
+L -2.484375 -20.796875 
+L -0.984375 -13.28125 
+L 4.203125 -13.28125 
+Q 7.953125 -13.28125 10.59375 -11.234375 
+Q 13.234375 -9.1875 16.5 -3.21875 
+L 19.28125 2 
+L 7.171875 54.6875 
+L 16.703125 54.6875 
+L 25.78125 12.796875 
+L 50.875 54.6875 
+L 60.296875 54.6875 
+z
+" id="DejaVuSans-Oblique-121"/>
+       <path id="DejaVuSans-32"/>
+       <path d="M 8.59375 75.984375 
+L 29.296875 75.984375 
+L 29.296875 69 
+L 17.578125 69 
+L 17.578125 -6.203125 
+L 29.296875 -6.203125 
+L 29.296875 -13.1875 
+L 8.59375 -13.1875 
+z
+" id="DejaVuSans-91"/>
+       <path d="M 48.78125 52.59375 
+L 48.78125 44.1875 
+Q 44.96875 46.296875 41.140625 47.34375 
+Q 37.3125 48.390625 33.40625 48.390625 
+Q 24.65625 48.390625 19.8125 42.84375 
+Q 14.984375 37.3125 14.984375 27.296875 
+Q 14.984375 17.28125 19.8125 11.734375 
+Q 24.65625 6.203125 33.40625 6.203125 
+Q 37.3125 6.203125 41.140625 7.25 
+Q 44.96875 8.296875 48.78125 10.40625 
+L 48.78125 2.09375 
+Q 45.015625 0.34375 40.984375 -0.53125 
+Q 36.96875 -1.421875 32.421875 -1.421875 
+Q 20.0625 -1.421875 12.78125 6.34375 
+Q 5.515625 14.109375 5.515625 27.296875 
+Q 5.515625 40.671875 12.859375 48.328125 
+Q 20.21875 56 33.015625 56 
+Q 37.15625 56 41.109375 55.140625 
+Q 45.0625 54.296875 48.78125 52.59375 
+z
+" id="DejaVuSans-99"/>
+       <path d="M 30.609375 48.390625 
+Q 23.390625 48.390625 19.1875 42.75 
+Q 14.984375 37.109375 14.984375 27.296875 
+Q 14.984375 17.484375 19.15625 11.84375 
+Q 23.34375 6.203125 30.609375 6.203125 
+Q 37.796875 6.203125 41.984375 11.859375 
+Q 46.1875 17.53125 46.1875 27.296875 
+Q 46.1875 37.015625 41.984375 42.703125 
+Q 37.796875 48.390625 30.609375 48.390625 
+z
+M 30.609375 56 
+Q 42.328125 56 49.015625 48.375 
+Q 55.71875 40.765625 55.71875 27.296875 
+Q 55.71875 13.875 49.015625 6.21875 
+Q 42.328125 -1.421875 30.609375 -1.421875 
+Q 18.84375 -1.421875 12.171875 6.21875 
+Q 5.515625 13.875 5.515625 27.296875 
+Q 5.515625 40.765625 12.171875 48.375 
+Q 18.84375 56 30.609375 56 
+z
+" id="DejaVuSans-111"/>
+       <path d="M 45.40625 46.390625 
+L 45.40625 75.984375 
+L 54.390625 75.984375 
+L 54.390625 0 
+L 45.40625 0 
+L 45.40625 8.203125 
+Q 42.578125 3.328125 38.25 0.953125 
+Q 33.9375 -1.421875 27.875 -1.421875 
+Q 17.96875 -1.421875 11.734375 6.484375 
+Q 5.515625 14.40625 5.515625 27.296875 
+Q 5.515625 40.1875 11.734375 48.09375 
+Q 17.96875 56 27.875 56 
+Q 33.9375 56 38.25 53.625 
+Q 42.578125 51.265625 45.40625 46.390625 
+z
+M 14.796875 27.296875 
+Q 14.796875 17.390625 18.875 11.75 
+Q 22.953125 6.109375 30.078125 6.109375 
+Q 37.203125 6.109375 41.296875 11.75 
+Q 45.40625 17.390625 45.40625 27.296875 
+Q 45.40625 37.203125 41.296875 42.84375 
+Q 37.203125 48.484375 30.078125 48.484375 
+Q 22.953125 48.484375 18.875 42.84375 
+Q 14.796875 37.203125 14.796875 27.296875 
+z
+" id="DejaVuSans-100"/>
+       <path d="M 56.203125 29.59375 
+L 56.203125 25.203125 
+L 14.890625 25.203125 
+Q 15.484375 15.921875 20.484375 11.0625 
+Q 25.484375 6.203125 34.421875 6.203125 
+Q 39.59375 6.203125 44.453125 7.46875 
+Q 49.3125 8.734375 54.109375 11.28125 
+L 54.109375 2.78125 
+Q 49.265625 0.734375 44.1875 -0.34375 
+Q 39.109375 -1.421875 33.890625 -1.421875 
+Q 20.796875 -1.421875 13.15625 6.1875 
+Q 5.515625 13.8125 5.515625 26.8125 
+Q 5.515625 40.234375 12.765625 48.109375 
+Q 20.015625 56 32.328125 56 
+Q 43.359375 56 49.78125 48.890625 
+Q 56.203125 41.796875 56.203125 29.59375 
+z
+M 47.21875 32.234375 
+Q 47.125 39.59375 43.09375 43.984375 
+Q 39.0625 48.390625 32.421875 48.390625 
+Q 24.90625 48.390625 20.390625 44.140625 
+Q 15.875 39.890625 15.1875 32.171875 
+z
+" id="DejaVuSans-101"/>
+       <path d="M 8.5 21.578125 
+L 8.5 54.6875 
+L 17.484375 54.6875 
+L 17.484375 21.921875 
+Q 17.484375 14.15625 20.5 10.265625 
+Q 23.53125 6.390625 29.59375 6.390625 
+Q 36.859375 6.390625 41.078125 11.03125 
+Q 45.3125 15.671875 45.3125 23.6875 
+L 45.3125 54.6875 
+L 54.296875 54.6875 
+L 54.296875 0 
+L 45.3125 0 
+L 45.3125 8.40625 
+Q 42.046875 3.421875 37.71875 1 
+Q 33.40625 -1.421875 27.6875 -1.421875 
+Q 18.265625 -1.421875 13.375 4.4375 
+Q 8.5 10.296875 8.5 21.578125 
+z
+M 31.109375 56 
+z
+" id="DejaVuSans-117"/>
+       <path d="M 54.890625 33.015625 
+L 54.890625 0 
+L 45.90625 0 
+L 45.90625 32.71875 
+Q 45.90625 40.484375 42.875 44.328125 
+Q 39.84375 48.1875 33.796875 48.1875 
+Q 26.515625 48.1875 22.3125 43.546875 
+Q 18.109375 38.921875 18.109375 30.90625 
+L 18.109375 0 
+L 9.078125 0 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.1875 
+Q 21.34375 51.125 25.703125 53.5625 
+Q 30.078125 56 35.796875 56 
+Q 45.21875 56 50.046875 50.171875 
+Q 54.890625 44.34375 54.890625 33.015625 
+z
+" id="DejaVuSans-110"/>
+       <path d="M 9.421875 54.6875 
+L 18.40625 54.6875 
+L 18.40625 0 
+L 9.421875 0 
+z
+M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 64.59375 
+L 9.421875 64.59375 
+z
+" id="DejaVuSans-105"/>
+       <path d="M 18.3125 70.21875 
+L 18.3125 54.6875 
+L 36.8125 54.6875 
+L 36.8125 47.703125 
+L 18.3125 47.703125 
+L 18.3125 18.015625 
+Q 18.3125 11.328125 20.140625 9.421875 
+Q 21.96875 7.515625 27.59375 7.515625 
+L 36.8125 7.515625 
+L 36.8125 0 
+L 27.59375 0 
+Q 17.1875 0 13.234375 3.875 
+Q 9.28125 7.765625 9.28125 18.015625 
+L 9.28125 47.703125 
+L 2.6875 47.703125 
+L 2.6875 54.6875 
+L 9.28125 54.6875 
+L 9.28125 70.21875 
+z
+" id="DejaVuSans-116"/>
+       <path d="M 44.28125 53.078125 
+L 44.28125 44.578125 
+Q 40.484375 46.53125 36.375 47.5 
+Q 32.28125 48.484375 27.875 48.484375 
+Q 21.1875 48.484375 17.84375 46.4375 
+Q 14.5 44.390625 14.5 40.28125 
+Q 14.5 37.15625 16.890625 35.375 
+Q 19.28125 33.59375 26.515625 31.984375 
+L 29.59375 31.296875 
+Q 39.15625 29.25 43.1875 25.515625 
+Q 47.21875 21.78125 47.21875 15.09375 
+Q 47.21875 7.46875 41.1875 3.015625 
+Q 35.15625 -1.421875 24.609375 -1.421875 
+Q 20.21875 -1.421875 15.453125 -0.5625 
+Q 10.6875 0.296875 5.421875 2 
+L 5.421875 11.28125 
+Q 10.40625 8.6875 15.234375 7.390625 
+Q 20.0625 6.109375 24.8125 6.109375 
+Q 31.15625 6.109375 34.5625 8.28125 
+Q 37.984375 10.453125 37.984375 14.40625 
+Q 37.984375 18.0625 35.515625 20.015625 
+Q 33.0625 21.96875 24.703125 23.78125 
+L 21.578125 24.515625 
+Q 13.234375 26.265625 9.515625 29.90625 
+Q 5.8125 33.546875 5.8125 39.890625 
+Q 5.8125 47.609375 11.28125 51.796875 
+Q 16.75 56 26.8125 56 
+Q 31.78125 56 36.171875 55.265625 
+Q 40.578125 54.546875 44.28125 53.078125 
+z
+" id="DejaVuSans-115"/>
+       <path d="M 30.421875 75.984375 
+L 30.421875 -13.1875 
+L 9.71875 -13.1875 
+L 9.71875 -6.203125 
+L 21.390625 -6.203125 
+L 21.390625 69 
+L 9.71875 69 
+L 9.71875 75.984375 
+z
+" id="DejaVuSans-93"/>
+      </defs>
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-121"/>
+      <use transform="translate(59.179688 0.015625)" xlink:href="#DejaVuSans-32"/>
+      <use transform="translate(90.966797 0.015625)" xlink:href="#DejaVuSans-91"/>
+      <use transform="translate(129.980469 0.015625)" xlink:href="#DejaVuSans-99"/>
+      <use transform="translate(184.960938 0.015625)" xlink:href="#DejaVuSans-111"/>
+      <use transform="translate(246.142578 0.015625)" xlink:href="#DejaVuSans-100"/>
+      <use transform="translate(309.619141 0.015625)" xlink:href="#DejaVuSans-101"/>
+      <use transform="translate(371.142578 0.015625)" xlink:href="#DejaVuSans-32"/>
+      <use transform="translate(402.929688 0.015625)" xlink:href="#DejaVuSans-117"/>
+      <use transform="translate(466.308594 0.015625)" xlink:href="#DejaVuSans-110"/>
+      <use transform="translate(529.6875 0.015625)" xlink:href="#DejaVuSans-105"/>
+      <use transform="translate(557.470703 0.015625)" xlink:href="#DejaVuSans-116"/>
+      <use transform="translate(596.679688 0.015625)" xlink:href="#DejaVuSans-115"/>
+      <use transform="translate(648.779297 0.015625)" xlink:href="#DejaVuSans-93"/>
+     </g>
+    </g>
+   </g>
+   <g id="matplotlib.axis_2">
+    <g id="ytick_1">
+     <g id="line2d_9">
+      <defs>
+       <path d="M 0 0 
+L -3.5 0 
+" id="m2bc0edee2e" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="294.982792"/>
+      </g>
+     </g>
+     <g id="text_10">
+      <!-- 3.310 -->
+      <g transform="translate(10.881875 298.782011)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 40.578125 39.3125 
+Q 47.65625 37.796875 51.625 33 
+Q 55.609375 28.21875 55.609375 21.1875 
+Q 55.609375 10.40625 48.1875 4.484375 
+Q 40.765625 -1.421875 27.09375 -1.421875 
+Q 22.515625 -1.421875 17.65625 -0.515625 
+Q 12.796875 0.390625 7.625 2.203125 
+L 7.625 11.71875 
+Q 11.71875 9.328125 16.59375 8.109375 
+Q 21.484375 6.890625 26.8125 6.890625 
+Q 36.078125 6.890625 40.9375 10.546875 
+Q 45.796875 14.203125 45.796875 21.1875 
+Q 45.796875 27.640625 41.28125 31.265625 
+Q 36.765625 34.90625 28.71875 34.90625 
+L 20.21875 34.90625 
+L 20.21875 43.015625 
+L 29.109375 43.015625 
+Q 36.375 43.015625 40.234375 45.921875 
+Q 44.09375 48.828125 44.09375 54.296875 
+Q 44.09375 59.90625 40.109375 62.90625 
+Q 36.140625 65.921875 28.71875 65.921875 
+Q 24.65625 65.921875 20.015625 65.03125 
+Q 15.375 64.15625 9.8125 62.3125 
+L 9.8125 71.09375 
+Q 15.4375 72.65625 20.34375 73.4375 
+Q 25.25 74.21875 29.59375 74.21875 
+Q 40.828125 74.21875 47.359375 69.109375 
+Q 53.90625 64.015625 53.90625 55.328125 
+Q 53.90625 49.265625 50.4375 45.09375 
+Q 46.96875 40.921875 40.578125 39.3125 
+z
+" id="DejaVuSans-51"/>
+        <path d="M 12.40625 8.296875 
+L 28.515625 8.296875 
+L 28.515625 63.921875 
+L 10.984375 60.40625 
+L 10.984375 69.390625 
+L 28.421875 72.90625 
+L 38.28125 72.90625 
+L 38.28125 8.296875 
+L 54.390625 8.296875 
+L 54.390625 0 
+L 12.40625 0 
+z
+" id="DejaVuSans-49"/>
+       </defs>
+       <use xlink:href="#DejaVuSans-51"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-49"/>
+       <use x="222.65625" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_2">
+     <g id="line2d_10">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="255.374956"/>
+      </g>
+     </g>
+     <g id="text_11">
+      <!-- 3.315 -->
+      <g transform="translate(10.881875 259.174175)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-51"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-49"/>
+       <use x="222.65625" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_3">
+     <g id="line2d_11">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="215.767119"/>
+      </g>
+     </g>
+     <g id="text_12">
+      <!-- 3.320 -->
+      <g transform="translate(10.881875 219.566338)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-51"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-50"/>
+       <use x="222.65625" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_4">
+     <g id="line2d_12">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="176.159282"/>
+      </g>
+     </g>
+     <g id="text_13">
+      <!-- 3.325 -->
+      <g transform="translate(10.881875 179.958501)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-51"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-50"/>
+       <use x="222.65625" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_5">
+     <g id="line2d_13">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="136.551446"/>
+      </g>
+     </g>
+     <g id="text_14">
+      <!-- 3.330 -->
+      <g transform="translate(10.881875 140.350664)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-51"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-51"/>
+       <use x="222.65625" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_6">
+     <g id="line2d_14">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="96.943609"/>
+      </g>
+     </g>
+     <g id="text_15">
+      <!-- 3.335 -->
+      <g transform="translate(10.881875 100.742828)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-51"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-51"/>
+       <use x="222.65625" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_7">
+     <g id="line2d_15">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="57.335772"/>
+      </g>
+     </g>
+     <g id="text_16">
+      <!-- 3.340 -->
+      <g transform="translate(10.881875 61.134991)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-51"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-52"/>
+       <use x="222.65625" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_8">
+     <g id="line2d_16">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="17.727936"/>
+      </g>
+     </g>
+     <g id="text_17">
+      <!-- 3.345 -->
+      <g transform="translate(10.881875 21.527154)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-51"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-52"/>
+       <use x="222.65625" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+   </g>
+   <g id="line2d_17">
+    <path clip-path="url(#p31dcfa20f1)" d="M 431.659545 23.98 
+L 400.539376 57.438087 
+L 368.845922 88.355368 
+L 336.127918 119.090801 
+L 302.857822 147.915527 
+L 269.148614 174.735629 
+L 235.137111 199.414524 
+L 200.953868 221.835529 
+L 166.722837 241.907869 
+L 132.558971 259.571768 
+L 98.568707 274.796942 
+L 64.850455 287.58 
+" style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
+   </g>
+   <g id="line2d_18">
+    <path clip-path="url(#p31dcfa20f1)" d="M 431.659545 23.98 
+L 400.537984 56.365524 
+L 368.589199 88.095375 
+L 336.10627 117.935081 
+L 303.177837 145.794719 
+L 269.89712 171.587953 
+L 236.364515 195.230776 
+L 202.676217 216.645393 
+L 168.923834 235.767033 
+L 135.195336 252.546388 
+L 101.575329 266.949721 
+L 68.145265 278.95932 
+" style="fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;"/>
+   </g>
+   <g id="line2d_19">
+    <path clip-path="url(#p31dcfa20f1)" d="M 431.659545 23.98 
+L 400.421456 56.966325 
+L 368.470538 88.743919 
+L 335.994003 118.63966 
+L 303.081604 146.544353 
+L 269.823838 172.36364 
+L 236.31435 196.012886 
+L 202.643771 217.418891 
+L 168.899656 236.523212 
+L 135.168798 253.282837 
+L 101.540479 267.668809 
+L 68.101391 279.668187 
+" style="fill:none;stroke:#2ca02c;stroke-linecap:square;stroke-width:1.5;"/>
+   </g>
+   <g id="patch_3">
+    <path d="M 46.51 300.76 
+L 46.51 10.8 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_4">
+    <path d="M 450 300.76 
+L 450 10.8 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_5">
+    <path d="M 46.51 300.76 
+L 450 300.76 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_6">
+    <path d="M 46.51 10.8 
+L 450 10.8 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="legend_1">
+    <g id="patch_7">
+     <path d="M 53.51 62.834375 
+L 107.71 62.834375 
+Q 109.71 62.834375 109.71 60.834375 
+L 109.71 17.8 
+Q 109.71 15.8 107.71 15.8 
+L 53.51 15.8 
+Q 51.51 15.8 51.51 17.8 
+L 51.51 60.834375 
+Q 51.51 62.834375 53.51 62.834375 
+z
+" style="fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;"/>
+    </g>
+    <g id="line2d_20">
+     <path d="M 55.51 23.898438 
+L 75.51 23.898438 
+" style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_21"/>
+    <g id="text_18">
+     <!-- $f = 1$ -->
+     <g transform="translate(83.51 27.398438)scale(0.1 -0.1)">
+      <defs>
+       <path d="M 47.796875 75.984375 
+L 46.390625 68.5 
+L 37.796875 68.5 
+Q 32.90625 68.5 30.6875 66.578125 
+Q 28.46875 64.65625 27.390625 59.515625 
+L 26.421875 54.6875 
+L 41.21875 54.6875 
+L 39.890625 47.703125 
+L 25.09375 47.703125 
+L 15.828125 0 
+L 6.78125 0 
+L 16.109375 47.703125 
+L 7.515625 47.703125 
+L 8.796875 54.6875 
+L 17.390625 54.6875 
+L 18.109375 58.5 
+Q 19.96875 68.171875 24.625 72.078125 
+Q 29.296875 75.984375 39.3125 75.984375 
+z
+" id="DejaVuSans-Oblique-102"/>
+       <path d="M 10.59375 45.40625 
+L 73.1875 45.40625 
+L 73.1875 37.203125 
+L 10.59375 37.203125 
+z
+M 10.59375 25.484375 
+L 73.1875 25.484375 
+L 73.1875 17.1875 
+L 10.59375 17.1875 
+z
+" id="DejaVuSans-61"/>
+      </defs>
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(54.6875 0.015625)" xlink:href="#DejaVuSans-61"/>
+      <use transform="translate(157.958984 0.015625)" xlink:href="#DejaVuSans-49"/>
+     </g>
+    </g>
+    <g id="line2d_22">
+     <path d="M 55.51 38.576563 
+L 75.51 38.576563 
+" style="fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_23"/>
+    <g id="text_19">
+     <!-- $f = 2$ -->
+     <g transform="translate(83.51 42.076563)scale(0.1 -0.1)">
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(54.6875 0.015625)" xlink:href="#DejaVuSans-61"/>
+      <use transform="translate(157.958984 0.015625)" xlink:href="#DejaVuSans-50"/>
+     </g>
+    </g>
+    <g id="line2d_24">
+     <path d="M 55.51 53.254688 
+L 75.51 53.254688 
+" style="fill:none;stroke:#2ca02c;stroke-linecap:square;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_25"/>
+    <g id="text_20">
+     <!-- $f = 4$ -->
+     <g transform="translate(83.51 56.754688)scale(0.1 -0.1)">
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(54.6875 0.015625)" xlink:href="#DejaVuSans-61"/>
+      <use transform="translate(157.958984 0.015625)" xlink:href="#DejaVuSans-52"/>
+     </g>
+    </g>
+   </g>
+  </g>
+ </g>
+ <defs>
+  <clipPath id="p31dcfa20f1">
+   <rect height="289.96" width="403.49" x="46.51" y="10.8"/>
+  </clipPath>
+ </defs>
+</svg>
diff --git a/examples/convergence.py b/examples/convergence.py
index f4d6dcd9..fc16151c 100644
--- a/examples/convergence.py
+++ b/examples/convergence.py
@@ -12,12 +12,12 @@ nparticles = 100000
 particle_random_seed = 15
 
 def main():
-    generate_initial_conditions()
+    #generate_initial_conditions()
 
-    run_simulations_field()
+    #run_simulations_field()
     plot_error_field()
 
-    run_simulations_particles()
+    #run_simulations_particles()
     plot_error_particles()
 
     plot_traj_particles()
@@ -189,6 +189,8 @@ def plot_error_field():
     a.legend(loc = 'best')
     f.tight_layout()
     f.savefig('err_vs_dt_field.pdf')
+    f.savefig('err_vs_dt_field.png')
+    f.savefig('err_vs_dt_field.svg')
     plt.close(f)
     return None
 
@@ -335,12 +337,12 @@ def plot_error_particles():
     a.plot(factor_list, err_max_list, marker = '.', label = 'max error')
     a.plot(factor_list, err_mean_list, marker = '.', label = 'mean error')
     a.plot(factor_list,
-           (1e-2)*factor_list**(-3),
+           (3e-2)*factor_list**(-3.5),
            color = 'black',
            dashes = (2, 2),
-           label = '$\propto f^{-3}$')
+           label = '$\propto f^{-3.5}$')
     a.plot(factor_list,
-           (1e-2)*factor_list**(-4),
+           (3e-3)*factor_list**(-4),
            color = 'black',
            dashes = (1, 1),
            label = '$\propto f^{-4}$')
@@ -351,6 +353,8 @@ def plot_error_particles():
     a.legend(loc = 'best')
     f.tight_layout()
     f.savefig('err_vs_dt_particle.pdf')
+    f.savefig('err_vs_dt_particle.png')
+    f.savefig('err_vs_dt_particle.svg')
     plt.close(f)
     return None
 
@@ -361,9 +365,14 @@ def plot_traj_particles():
         cc = DNS(simname = 'nsvep_{0}x'.format(factor))
         cc.compute_statistics(iter0 = 8*factor)
         xx = read_trajectory(cc, 14, iter0 = 8*factor)
-        a.plot(xx[:, 0], xx[:, 1])
+        a.plot(xx[:, 0], xx[:, 1], label = '$f = {0}$'.format(factor))
+    a.legend(loc = 'best')
+    a.set_xlabel('$x$ [code units]')
+    a.set_xlabel('$y$ [code units]')
     f.tight_layout()
     f.savefig('trajectories.pdf')
+    f.savefig('trajectories.png')
+    f.savefig('trajectories.svg')
     plt.close(f)
     return None
 
-- 
GitLab


From f88d20667835f42f602ebeabadc76bd58a0d10c7 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Fri, 7 Jan 2022 21:19:55 +0100
Subject: [PATCH 09/24] fixes axes label

---
 documentation/sphinx_static/trajectories.svg | 279 +++++++++++--------
 examples/convergence.py                      |   2 +-
 2 files changed, 158 insertions(+), 123 deletions(-)

diff --git a/documentation/sphinx_static/trajectories.svg b/documentation/sphinx_static/trajectories.svg
index b98f9e06..fd6796fa 100644
--- a/documentation/sphinx_static/trajectories.svg
+++ b/documentation/sphinx_static/trajectories.svg
@@ -7,7 +7,7 @@
   <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <cc:Work>
     <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-    <dc:date>2022-01-07T21:09:17.278910</dc:date>
+    <dc:date>2022-01-07T21:18:20.267358</dc:date>
     <dc:format>image/svg+xml</dc:format>
     <dc:creator>
      <cc:Agent>
@@ -31,10 +31,10 @@ z
   </g>
   <g id="axes_1">
    <g id="patch_2">
-    <path d="M 46.51 300.76 
-L 450 300.76 
+    <path d="M 63.47 301.9975 
+L 450 301.9975 
 L 450 10.8 
-L 46.51 10.8 
+L 63.47 10.8 
 z
 " style="fill:#ffffff;"/>
    </g>
@@ -44,15 +44,15 @@ z
       <defs>
        <path d="M 0 0 
 L 0 3.5 
-" id="m8adaaf941d" style="stroke:#000000;stroke-width:0.8;"/>
+" id="m84bd32ba32" style="stroke:#000000;stroke-width:0.8;"/>
       </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="48.514242" xlink:href="#m8adaaf941d" y="300.76"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="65.389997" xlink:href="#m84bd32ba32" y="301.9975"/>
       </g>
      </g>
      <g id="text_1">
       <!-- 5.60 -->
-      <g transform="translate(37.38143 315.358437)scale(0.1 -0.1)">
+      <g transform="translate(54.257185 316.595937)scale(0.1 -0.1)">
        <defs>
         <path d="M 10.796875 72.90625 
 L 49.515625 72.90625 
@@ -146,12 +146,12 @@ z
     <g id="xtick_2">
      <g id="line2d_2">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="103.339781" xlink:href="#m8adaaf941d" y="300.76"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="117.91104" xlink:href="#m84bd32ba32" y="301.9975"/>
       </g>
      </g>
      <g id="text_2">
       <!-- 5.62 -->
-      <g transform="translate(92.206968 315.358437)scale(0.1 -0.1)">
+      <g transform="translate(106.778227 316.595937)scale(0.1 -0.1)">
        <defs>
         <path d="M 19.1875 8.296875 
 L 53.609375 8.296875 
@@ -188,12 +188,12 @@ z
     <g id="xtick_3">
      <g id="line2d_3">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="158.165319" xlink:href="#m8adaaf941d" y="300.76"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="170.432082" xlink:href="#m84bd32ba32" y="301.9975"/>
       </g>
      </g>
      <g id="text_3">
       <!-- 5.64 -->
-      <g transform="translate(147.032507 315.358437)scale(0.1 -0.1)">
+      <g transform="translate(159.29927 316.595937)scale(0.1 -0.1)">
        <defs>
         <path d="M 37.796875 64.3125 
 L 12.890625 25.390625 
@@ -223,12 +223,12 @@ z
     <g id="xtick_4">
      <g id="line2d_4">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="212.990858" xlink:href="#m8adaaf941d" y="300.76"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="222.953125" xlink:href="#m84bd32ba32" y="301.9975"/>
       </g>
      </g>
      <g id="text_4">
       <!-- 5.66 -->
-      <g transform="translate(201.858045 315.358437)scale(0.1 -0.1)">
+      <g transform="translate(211.820312 316.595937)scale(0.1 -0.1)">
        <use xlink:href="#DejaVuSans-53"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-54"/>
@@ -239,12 +239,12 @@ z
     <g id="xtick_5">
      <g id="line2d_5">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="267.816396" xlink:href="#m8adaaf941d" y="300.76"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="275.474167" xlink:href="#m84bd32ba32" y="301.9975"/>
       </g>
      </g>
      <g id="text_5">
       <!-- 5.68 -->
-      <g transform="translate(256.683584 315.358437)scale(0.1 -0.1)">
+      <g transform="translate(264.341355 316.595937)scale(0.1 -0.1)">
        <defs>
         <path d="M 31.78125 34.625 
 Q 24.75 34.625 20.71875 30.859375 
@@ -296,12 +296,12 @@ z
     <g id="xtick_6">
      <g id="line2d_6">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="322.641935" xlink:href="#m8adaaf941d" y="300.76"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="327.99521" xlink:href="#m84bd32ba32" y="301.9975"/>
       </g>
      </g>
      <g id="text_6">
       <!-- 5.70 -->
-      <g transform="translate(311.509122 315.358437)scale(0.1 -0.1)">
+      <g transform="translate(316.862397 316.595937)scale(0.1 -0.1)">
        <defs>
         <path d="M 8.203125 72.90625 
 L 55.078125 72.90625 
@@ -323,12 +323,12 @@ z
     <g id="xtick_7">
      <g id="line2d_7">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="377.467473" xlink:href="#m8adaaf941d" y="300.76"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="380.516252" xlink:href="#m84bd32ba32" y="301.9975"/>
       </g>
      </g>
      <g id="text_7">
       <!-- 5.72 -->
-      <g transform="translate(366.334661 315.358437)scale(0.1 -0.1)">
+      <g transform="translate(369.383439 316.595937)scale(0.1 -0.1)">
        <use xlink:href="#DejaVuSans-53"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-55"/>
@@ -339,12 +339,12 @@ z
     <g id="xtick_8">
      <g id="line2d_8">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="432.293012" xlink:href="#m8adaaf941d" y="300.76"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="433.037294" xlink:href="#m84bd32ba32" y="301.9975"/>
       </g>
      </g>
      <g id="text_8">
       <!-- 5.74 -->
-      <g transform="translate(421.160199 315.358437)scale(0.1 -0.1)">
+      <g transform="translate(421.904482 316.595937)scale(0.1 -0.1)">
        <use xlink:href="#DejaVuSans-53"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-55"/>
@@ -353,25 +353,23 @@ z
      </g>
     </g>
     <g id="text_9">
-     <!-- $y$ [code units] -->
-     <g transform="translate(213.855 329.038125)scale(0.1 -0.1)">
+     <!-- $x$ [code units] -->
+     <g transform="translate(222.335 330.274062)scale(0.1 -0.1)">
       <defs>
-       <path d="M 24.8125 -5.078125 
-Q 18.5625 -15.578125 14.625 -18.1875 
-Q 10.6875 -20.796875 4.59375 -20.796875 
-L -2.484375 -20.796875 
-L -0.984375 -13.28125 
-L 4.203125 -13.28125 
-Q 7.953125 -13.28125 10.59375 -11.234375 
-Q 13.234375 -9.1875 16.5 -3.21875 
-L 19.28125 2 
-L 7.171875 54.6875 
-L 16.703125 54.6875 
-L 25.78125 12.796875 
-L 50.875 54.6875 
-L 60.296875 54.6875 
-z
-" id="DejaVuSans-Oblique-121"/>
+       <path d="M 60.015625 54.6875 
+L 34.90625 27.875 
+L 50.296875 0 
+L 39.984375 0 
+L 28.421875 21.6875 
+L 8.296875 0 
+L -2.59375 0 
+L 24.3125 28.8125 
+L 10.015625 54.6875 
+L 20.3125 54.6875 
+L 30.8125 34.90625 
+L 49.125 54.6875 
+z
+" id="DejaVuSans-Oblique-120"/>
        <path id="DejaVuSans-32"/>
        <path d="M 8.59375 75.984375 
 L 29.296875 75.984375 
@@ -588,7 +586,7 @@ L 9.71875 75.984375
 z
 " id="DejaVuSans-93"/>
       </defs>
-      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-121"/>
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-120"/>
       <use transform="translate(59.179688 0.015625)" xlink:href="#DejaVuSans-32"/>
       <use transform="translate(90.966797 0.015625)" xlink:href="#DejaVuSans-91"/>
       <use transform="translate(129.980469 0.015625)" xlink:href="#DejaVuSans-99"/>
@@ -611,15 +609,15 @@ z
       <defs>
        <path d="M 0 0 
 L -3.5 0 
-" id="m2bc0edee2e" style="stroke:#000000;stroke-width:0.8;"/>
+" id="m2a24216656" style="stroke:#000000;stroke-width:0.8;"/>
       </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="294.982792"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="296.195636"/>
       </g>
      </g>
      <g id="text_10">
       <!-- 3.310 -->
-      <g transform="translate(10.881875 298.782011)scale(0.1 -0.1)">
+      <g transform="translate(27.841875 299.994855)scale(0.1 -0.1)">
        <defs>
         <path d="M 40.578125 39.3125 
 Q 47.65625 37.796875 51.625 33 
@@ -678,12 +676,12 @@ z
     <g id="ytick_2">
      <g id="line2d_10">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="255.374956"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="256.41876"/>
       </g>
      </g>
      <g id="text_11">
       <!-- 3.315 -->
-      <g transform="translate(10.881875 259.174175)scale(0.1 -0.1)">
+      <g transform="translate(27.841875 260.217979)scale(0.1 -0.1)">
        <use xlink:href="#DejaVuSans-51"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-51"/>
@@ -695,12 +693,12 @@ z
     <g id="ytick_3">
      <g id="line2d_11">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="215.767119"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="216.641884"/>
       </g>
      </g>
      <g id="text_12">
       <!-- 3.320 -->
-      <g transform="translate(10.881875 219.566338)scale(0.1 -0.1)">
+      <g transform="translate(27.841875 220.441103)scale(0.1 -0.1)">
        <use xlink:href="#DejaVuSans-51"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-51"/>
@@ -712,12 +710,12 @@ z
     <g id="ytick_4">
      <g id="line2d_12">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="176.159282"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="176.865008"/>
       </g>
      </g>
      <g id="text_13">
       <!-- 3.325 -->
-      <g transform="translate(10.881875 179.958501)scale(0.1 -0.1)">
+      <g transform="translate(27.841875 180.664226)scale(0.1 -0.1)">
        <use xlink:href="#DejaVuSans-51"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-51"/>
@@ -729,12 +727,12 @@ z
     <g id="ytick_5">
      <g id="line2d_13">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="136.551446"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="137.088132"/>
       </g>
      </g>
      <g id="text_14">
       <!-- 3.330 -->
-      <g transform="translate(10.881875 140.350664)scale(0.1 -0.1)">
+      <g transform="translate(27.841875 140.88735)scale(0.1 -0.1)">
        <use xlink:href="#DejaVuSans-51"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-51"/>
@@ -746,12 +744,12 @@ z
     <g id="ytick_6">
      <g id="line2d_14">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="96.943609"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="97.311255"/>
       </g>
      </g>
      <g id="text_15">
       <!-- 3.335 -->
-      <g transform="translate(10.881875 100.742828)scale(0.1 -0.1)">
+      <g transform="translate(27.841875 101.110474)scale(0.1 -0.1)">
        <use xlink:href="#DejaVuSans-51"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-51"/>
@@ -763,12 +761,12 @@ z
     <g id="ytick_7">
      <g id="line2d_15">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="57.335772"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="57.534379"/>
       </g>
      </g>
      <g id="text_16">
       <!-- 3.340 -->
-      <g transform="translate(10.881875 61.134991)scale(0.1 -0.1)">
+      <g transform="translate(27.841875 61.333598)scale(0.1 -0.1)">
        <use xlink:href="#DejaVuSans-51"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-51"/>
@@ -780,12 +778,12 @@ z
     <g id="ytick_8">
      <g id="line2d_16">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="46.51" xlink:href="#m2bc0edee2e" y="17.727936"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="17.757503"/>
       </g>
      </g>
      <g id="text_17">
       <!-- 3.345 -->
-      <g transform="translate(10.881875 21.527154)scale(0.1 -0.1)">
+      <g transform="translate(27.841875 21.556722)scale(0.1 -0.1)">
        <use xlink:href="#DejaVuSans-51"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-51"/>
@@ -794,95 +792,132 @@ z
       </g>
      </g>
     </g>
+    <g id="text_18">
+     <!-- $y$ [code units] -->
+     <g transform="translate(21.741875 190.79875)rotate(-90)scale(0.1 -0.1)">
+      <defs>
+       <path d="M 24.8125 -5.078125 
+Q 18.5625 -15.578125 14.625 -18.1875 
+Q 10.6875 -20.796875 4.59375 -20.796875 
+L -2.484375 -20.796875 
+L -0.984375 -13.28125 
+L 4.203125 -13.28125 
+Q 7.953125 -13.28125 10.59375 -11.234375 
+Q 13.234375 -9.1875 16.5 -3.21875 
+L 19.28125 2 
+L 7.171875 54.6875 
+L 16.703125 54.6875 
+L 25.78125 12.796875 
+L 50.875 54.6875 
+L 60.296875 54.6875 
+z
+" id="DejaVuSans-Oblique-121"/>
+      </defs>
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-121"/>
+      <use transform="translate(59.179688 0.015625)" xlink:href="#DejaVuSans-32"/>
+      <use transform="translate(90.966797 0.015625)" xlink:href="#DejaVuSans-91"/>
+      <use transform="translate(129.980469 0.015625)" xlink:href="#DejaVuSans-99"/>
+      <use transform="translate(184.960938 0.015625)" xlink:href="#DejaVuSans-111"/>
+      <use transform="translate(246.142578 0.015625)" xlink:href="#DejaVuSans-100"/>
+      <use transform="translate(309.619141 0.015625)" xlink:href="#DejaVuSans-101"/>
+      <use transform="translate(371.142578 0.015625)" xlink:href="#DejaVuSans-32"/>
+      <use transform="translate(402.929688 0.015625)" xlink:href="#DejaVuSans-117"/>
+      <use transform="translate(466.308594 0.015625)" xlink:href="#DejaVuSans-110"/>
+      <use transform="translate(529.6875 0.015625)" xlink:href="#DejaVuSans-105"/>
+      <use transform="translate(557.470703 0.015625)" xlink:href="#DejaVuSans-116"/>
+      <use transform="translate(596.679688 0.015625)" xlink:href="#DejaVuSans-115"/>
+      <use transform="translate(648.779297 0.015625)" xlink:href="#DejaVuSans-93"/>
+     </g>
+    </g>
    </g>
    <g id="line2d_17">
-    <path clip-path="url(#p31dcfa20f1)" d="M 431.659545 23.98 
-L 400.539376 57.438087 
-L 368.845922 88.355368 
-L 336.127918 119.090801 
-L 302.857822 147.915527 
-L 269.148614 174.735629 
-L 235.137111 199.414524 
-L 200.953868 221.835529 
-L 166.722837 241.907869 
-L 132.558971 259.571768 
-L 98.568707 274.796942 
-L 64.850455 287.58 
+    <path clip-path="url(#pa8c46be0ca)" d="M 432.430455 24.03625 
+L 402.618367 57.63713 
+L 372.257093 88.686361 
+L 340.914332 119.552967 
+L 309.042687 148.500713 
+L 276.750387 175.435279 
+L 244.168498 200.219498 
+L 211.422089 222.736193 
+L 178.629899 242.894199 
+L 145.902052 260.633483 
+L 113.34051 275.923636 
+L 81.039545 288.76125 
 " style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
    </g>
    <g id="line2d_18">
-    <path clip-path="url(#p31dcfa20f1)" d="M 431.659545 23.98 
-L 400.537984 56.365524 
-L 368.589199 88.095375 
-L 336.10627 117.935081 
-L 303.177837 145.794719 
-L 269.89712 171.587953 
-L 236.364515 195.230776 
-L 202.676217 216.645393 
-L 168.923834 235.767033 
-L 135.195336 252.546388 
-L 101.575329 266.949721 
-L 68.145265 278.95932 
+    <path clip-path="url(#pa8c46be0ca)" d="M 432.430455 24.03625 
+L 402.617034 56.55999 
+L 372.011161 88.425259 
+L 340.893594 118.392316 
+L 309.349251 146.370853 
+L 277.467431 172.274168 
+L 245.344311 196.017895 
+L 213.072042 217.523906 
+L 180.738382 236.727154 
+L 148.427602 253.57812 
+L 116.220754 268.042924 
+L 84.195865 280.103778 
 " style="fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;"/>
    </g>
    <g id="line2d_19">
-    <path clip-path="url(#p31dcfa20f1)" d="M 431.659545 23.98 
-L 400.421456 56.966325 
-L 368.470538 88.743919 
-L 335.994003 118.63966 
-L 303.081604 146.544353 
-L 269.823838 172.36364 
-L 236.31435 196.012886 
-L 202.643771 217.418891 
-L 168.899656 236.523212 
-L 135.168798 253.282837 
-L 101.540479 267.668809 
-L 68.101391 279.668187 
+    <path clip-path="url(#pa8c46be0ca)" d="M 432.430455 24.03625 
+L 402.505403 57.163355 
+L 371.897487 89.076571 
+L 340.786047 119.099901 
+L 309.257063 147.123687 
+L 277.39723 173.053166 
+L 245.296254 196.803343 
+L 213.040959 218.300705 
+L 180.715219 237.48656 
+L 148.402179 254.317713 
+L 116.187369 268.765081 
+L 84.153834 280.815671 
 " style="fill:none;stroke:#2ca02c;stroke-linecap:square;stroke-width:1.5;"/>
    </g>
    <g id="patch_3">
-    <path d="M 46.51 300.76 
-L 46.51 10.8 
+    <path d="M 63.47 301.9975 
+L 63.47 10.8 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_4">
-    <path d="M 450 300.76 
+    <path d="M 450 301.9975 
 L 450 10.8 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_5">
-    <path d="M 46.51 300.76 
-L 450 300.76 
+    <path d="M 63.47 301.9975 
+L 450 301.9975 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_6">
-    <path d="M 46.51 10.8 
+    <path d="M 63.47 10.8 
 L 450 10.8 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="legend_1">
     <g id="patch_7">
-     <path d="M 53.51 62.834375 
-L 107.71 62.834375 
-Q 109.71 62.834375 109.71 60.834375 
-L 109.71 17.8 
-Q 109.71 15.8 107.71 15.8 
-L 53.51 15.8 
-Q 51.51 15.8 51.51 17.8 
-L 51.51 60.834375 
-Q 51.51 62.834375 53.51 62.834375 
+     <path d="M 70.47 62.834375 
+L 124.67 62.834375 
+Q 126.67 62.834375 126.67 60.834375 
+L 126.67 17.8 
+Q 126.67 15.8 124.67 15.8 
+L 70.47 15.8 
+Q 68.47 15.8 68.47 17.8 
+L 68.47 60.834375 
+Q 68.47 62.834375 70.47 62.834375 
 z
 " style="fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;"/>
     </g>
     <g id="line2d_20">
-     <path d="M 55.51 23.898438 
-L 75.51 23.898438 
+     <path d="M 72.47 23.898438 
+L 92.47 23.898438 
 " style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
     </g>
     <g id="line2d_21"/>
-    <g id="text_18">
+    <g id="text_19">
      <!-- $f = 1$ -->
-     <g transform="translate(83.51 27.398438)scale(0.1 -0.1)">
+     <g transform="translate(100.47 27.398438)scale(0.1 -0.1)">
       <defs>
        <path d="M 47.796875 75.984375 
 L 46.390625 68.5 
@@ -922,28 +957,28 @@ z
      </g>
     </g>
     <g id="line2d_22">
-     <path d="M 55.51 38.576563 
-L 75.51 38.576563 
+     <path d="M 72.47 38.576563 
+L 92.47 38.576563 
 " style="fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;"/>
     </g>
     <g id="line2d_23"/>
-    <g id="text_19">
+    <g id="text_20">
      <!-- $f = 2$ -->
-     <g transform="translate(83.51 42.076563)scale(0.1 -0.1)">
+     <g transform="translate(100.47 42.076563)scale(0.1 -0.1)">
       <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
       <use transform="translate(54.6875 0.015625)" xlink:href="#DejaVuSans-61"/>
       <use transform="translate(157.958984 0.015625)" xlink:href="#DejaVuSans-50"/>
      </g>
     </g>
     <g id="line2d_24">
-     <path d="M 55.51 53.254688 
-L 75.51 53.254688 
+     <path d="M 72.47 53.254688 
+L 92.47 53.254688 
 " style="fill:none;stroke:#2ca02c;stroke-linecap:square;stroke-width:1.5;"/>
     </g>
     <g id="line2d_25"/>
-    <g id="text_20">
+    <g id="text_21">
      <!-- $f = 4$ -->
-     <g transform="translate(83.51 56.754688)scale(0.1 -0.1)">
+     <g transform="translate(100.47 56.754688)scale(0.1 -0.1)">
       <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
       <use transform="translate(54.6875 0.015625)" xlink:href="#DejaVuSans-61"/>
       <use transform="translate(157.958984 0.015625)" xlink:href="#DejaVuSans-52"/>
@@ -953,8 +988,8 @@ L 75.51 53.254688
   </g>
  </g>
  <defs>
-  <clipPath id="p31dcfa20f1">
-   <rect height="289.96" width="403.49" x="46.51" y="10.8"/>
+  <clipPath id="pa8c46be0ca">
+   <rect height="291.1975" width="386.53" x="63.47" y="10.8"/>
   </clipPath>
  </defs>
 </svg>
diff --git a/examples/convergence.py b/examples/convergence.py
index fc16151c..6646a2ca 100644
--- a/examples/convergence.py
+++ b/examples/convergence.py
@@ -368,7 +368,7 @@ def plot_traj_particles():
         a.plot(xx[:, 0], xx[:, 1], label = '$f = {0}$'.format(factor))
     a.legend(loc = 'best')
     a.set_xlabel('$x$ [code units]')
-    a.set_xlabel('$y$ [code units]')
+    a.set_ylabel('$y$ [code units]')
     f.tight_layout()
     f.savefig('trajectories.pdf')
     f.savefig('trajectories.png')
-- 
GitLab


From 7b257a9e42c4efc24ec9ee4ad7258634e3130279 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Thu, 13 Jan 2022 17:44:31 +0100
Subject: [PATCH 10/24] updates convergence test

---
 examples/convergence.py | 192 +++++++++++++++++++++++++---------------
 1 file changed, 121 insertions(+), 71 deletions(-)

diff --git a/examples/convergence.py b/examples/convergence.py
index 6646a2ca..9ee1e6c1 100644
--- a/examples/convergence.py
+++ b/examples/convergence.py
@@ -8,16 +8,21 @@ from TurTLE import DNS, PP
 base_niterations = 256
 test_niterations = 32
 
-nparticles = 100000
+nparticles = 1000
 particle_random_seed = 15
+base_particle_dt = 0.6
+
+neighbours_smoothness_list = [
+        (1, 1),
+        (1, 0)]
 
 def main():
     #generate_initial_conditions()
 
     #run_simulations_field()
-    plot_error_field()
+    #plot_error_field()
 
-    #run_simulations_particles()
+    run_simulations_particles()
     plot_error_particles()
 
     plot_traj_particles()
@@ -246,11 +251,12 @@ def run_simulations_particles():
     # number of OpenMP threads per MPI process to use
     nthreads_per_process = 2
 
-# 1. Run NSVEparticles for resolution 1x, for a few iterations, to build up rhs values.
-    factor = 1
+# 1. Run NSVEparticles for a few iterations, to build up rhs values, consistent
+#    with the relevant velocity field.
     # create dns object
     cc = DNS()
     # launch simulation
+    factor = 2
     cc.launch([
             'NSVEparticles',
             '-n', '{0}'.format(factor*32),
@@ -258,84 +264,122 @@ def run_simulations_particles():
             '--ntpp', '{0}'.format(nthreads_per_process),
             '--src-simname', 'base_{0}x'.format(factor),
             '--src-iteration', '{0}'.format(base_niterations),
-            '--simname', 'nsvep_base'.format(factor),
+            '--simname', 'nsvep_base',
             '--precision', 'double',
-            '--dtfactor', '0.3',
+            '--dtfactor', '{0}'.format(base_particle_dt/4),
             '--kMeta', '{0}'.format(1.0*factor),
-            '--niter_todo', '{0}'.format(8),
-            '--niter_out', '{0}'.format(8),
-            '--niter_stat', '{0}'.format(8),
+            '--niter_todo', '{0}'.format(16),
+            '--niter_out', '{0}'.format(1),
+            '--niter_stat', '{0}'.format(1),
             '--nparticles', '{0}'.format(nparticles),
-            '--niter_part', '{0}'.format(8),
+            '--niter_part', '{0}'.format(1),
             '--cpp_random_particles', '{0}'.format(particle_random_seed)])
 
 # 2. Prepare initial conditions
-    for factor in [1, 2, 4]:
-        df = h5py.File('nsvep_{0}x_checkpoint_0.h5'.format(factor), 'w')
-        # field
-        df['vorticity/complex/{0}'.format(8*factor)] = h5py.ExternalLink(
-            'base_{0}x_checkpoint_0.h5'.format(factor),
-            'vorticity/complex/{0}'.format(base_niterations))
-        # particles
-        df['tracers0/state/{0}'.format(8*factor)] = h5py.ExternalLink(
+    for neighbours, smoothness in neighbours_smoothness_list:
+        interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+        for factor in [1, 2, 4]:
+            df = h5py.File('nsvep_{0}x_{1}_checkpoint_0.h5'.format(factor, interp_name), 'w')
+            # field
+            df['vorticity/complex/{0}'.format(8*factor)] = h5py.ExternalLink(
                 'nsvep_base_checkpoint_0.h5',
-                'tracers0/state/8')
-        df['tracers0/rhs/{0}'.format(8*factor)] = h5py.ExternalLink(
-                'nsvep_base_checkpoint_0.h5',
-                'tracers0/rhs/8')
-        df.close()
+                'vorticity/complex/16')
+            # particles
+            df['tracers0/state/{0}'.format(8*factor)] = h5py.ExternalLink(
+                    'nsvep_base_checkpoint_0.h5',
+                    'tracers0/state/16')
+            # copy rhs
+            source_file = h5py.File(
+                    'nsvep_base_checkpoint_0.h5', 'r')
+            rhs = source_file['tracers0/rhs/16'][()]
+            if factor == 4:
+                rhs[0] = source_file['tracers0/rhs/16'][0]
+                rhs[1] = source_file['tracers0/rhs/16'][1]
+                rhs[2] = source_file['tracers0/rhs/15'][1]
+                rhs[3] = source_file['tracers0/rhs/14'][1]
+            if factor == 2:
+                rhs[0] = source_file['tracers0/rhs/16'][0]
+                rhs[1] = source_file['tracers0/rhs/15'][1]
+                rhs[2] = source_file['tracers0/rhs/13'][1]
+                rhs[3] = source_file['tracers0/rhs/11'][1]
+            if factor == 1:
+                rhs[0] = source_file['tracers0/rhs/16'][0]
+                rhs[1] = source_file['tracers0/rhs/13'][1]
+                rhs[2] = source_file['tracers0/rhs/9'][1]
+                rhs[3] = source_file['tracers0/rhs/5'][1]
+            df['tracers0/rhs/{0}'.format(8*factor)] = rhs
+            df.close()
 
 # 3. Run NSVEparticles
     for factor in [1, 2, 4]:
-        # create dns object
-        cc = DNS()
-        # launch simulation
-        cc.launch([
-                'NSVEparticles',
-                '-n', '{0}'.format(factor*32),
-                '--np', '{0}'.format(nprocesses),
-                '--ntpp', '{0}'.format(nthreads_per_process),
-                '--simname', 'nsvep_{0}x'.format(factor),
-                '--precision', 'double',
-                '--dtfactor', '0.3',
-                '--kMeta', '{0}'.format(1.0*factor),
-                '--niter_todo', '{0}'.format(test_niterations*factor),
-                '--niter_out', '{0}'.format(test_niterations*factor),
-                '--niter_stat', '{0}'.format(4*factor),
-                '--nparticles', '{0}'.format(nparticles),
-                '--niter_part', '{0}'.format(2*factor),
-                '--cpp_random_particles', '0'], # turn off cpp particle initialization
-                iter0 = 8*factor)
+        # Test different interpolations.
+        # The loop iterates over number of neighbours and smoothness.
+        # The simulation names are defined based on "kernel size" and "order
+        # of polynomial".
+        # We do this to emphasize the one-to-one correspondence between
+        # neighbours and kernel size, and smoothness and order of polynomial.
+        for neighbours, smoothness in neighbours_smoothness_list:
+            # create dns object
+            cc = DNS()
+            # launch simulation
+            cc.launch([
+                    'NSVEparticles',
+                    '-n', '{0}'.format(64),
+                    '--np', '{0}'.format(nprocesses),
+                    '--ntpp', '{0}'.format(nthreads_per_process),
+                    '--simname', 'nsvep_{0}x_I{1}O{2}'.format(
+                        factor,
+                        2*neighbours+2,
+                        2*smoothness+1),
+                    '--precision', 'double',
+                    '--dtfactor', '{0}'.format(base_particle_dt/factor),
+                    '--kMeta', '{0}'.format(2.0),
+                    '--niter_todo', '{0}'.format(test_niterations*factor+8*factor),
+                    '--niter_out', '{0}'.format(test_niterations*factor+8*factor),
+                    '--niter_stat', '{0}'.format(4*factor),
+                    '--nparticles', '{0}'.format(nparticles),
+                    '--niter_part', '{0}'.format(2*factor),
+                    '--tracers0_neighbours', '{0}'.format(neighbours),
+                    '--tracers0_smoothness', '{0}'.format(smoothness),
+                    '--cpp_random_particles', '0'], # turn off cpp particle initialization
+                    iter0 = 8*factor)
     return None
 
 def plot_error_particles():
     f = plt.figure()
     a = f.add_subplot(111)
-    err_max_list = []
-    err_mean_list = []
     factor_list = [1, 2]
-    for factor in factor_list:
-        c1 = DNS(simname = 'nsvep_{0}x'.format(factor))
-        c2 = DNS(simname = 'nsvep_{0}x'.format(factor*2))
-        for cc in [c1, c2]:
-            cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
-        c1.compute_statistics(iter0 = 8*factor)
-        c2.compute_statistics(iter0 = 8*factor*2)
-        final_iter_x1 = c1.get_data_file()['iteration'][()]
-        final_iter_x2 = c2.get_data_file()['iteration'][()]
-        f1 = h5py.File(c1.simname + '_checkpoint_0.h5', 'r')
-        f2 = h5py.File(c2.simname + '_checkpoint_0.h5', 'r')
-        x1 = f1['tracers0/state/{0}'.format(final_iter_x1)][()]
-        x2 = f2['tracers0/state/{0}'.format(final_iter_x2)][()]
-        err_max_list.append(np.max(np.abs(x2 - x1)))
-        err_mean_list.append(np.mean(np.abs(x2 - x1)))
-        f1.close()
-        f2.close()
     factor_list = np.array(factor_list).astype(np.float)
-    err_max_list = np.array(err_max_list)
-    err_mean_list = np.array(err_mean_list)
-    a.plot(factor_list, err_max_list, marker = '.', label = 'max error')
-    a.plot(factor_list, err_mean_list, marker = '.', label = 'mean error')
+    for neighbours, smoothness in neighbours_smoothness_list:
+        interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+        err_max_list = []
+        err_mean_list = []
+        for factor in factor_list:
+            factor = int(factor)
+            c1 = DNS(simname = 'nsvep_{0}x_'.format(int(factor)) + interp_name)
+            c2 = DNS(simname = 'nsvep_{0}x_'.format(int(factor)*2) + interp_name)
+            for cc in [c1, c2]:
+                cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
+            c1.compute_statistics(iter0 = 8*factor)
+            c2.compute_statistics(iter0 = 8*factor*2)
+            final_iter_x1 = c1.get_data_file()['iteration'][()]
+            final_iter_x2 = c2.get_data_file()['iteration'][()]
+            f1 = h5py.File(c1.simname + '_checkpoint_0.h5', 'r')
+            f2 = h5py.File(c2.simname + '_checkpoint_0.h5', 'r')
+            print('in error plot')
+            print(final_iter_x1 - 8*factor)
+            print(final_iter_x2 - 8*factor*2)
+            x1 = f1['tracers0/state/{0}'.format(final_iter_x1)][()]
+            x2 = f2['tracers0/state/{0}'.format(final_iter_x2)][()]
+            diff = np.sqrt(np.sum((x2-x1)**2, axis = -1))
+            err_max_list.append(np.max(diff))
+            err_mean_list.append(np.mean(diff))
+            f1.close()
+            f2.close()
+        err_max_list = np.array(err_max_list)
+        err_mean_list = np.array(err_mean_list)
+        a.plot(factor_list, err_max_list, marker = '.', label = 'max error ' + interp_name)
+        a.plot(factor_list, err_mean_list, marker = '.', label = 'mean error ' + interp_name)
     a.plot(factor_list,
            (3e-2)*factor_list**(-3.5),
            color = 'black',
@@ -361,11 +405,17 @@ def plot_error_particles():
 def plot_traj_particles():
     f = plt.figure()
     a = f.add_subplot(111)
-    for factor in [1, 2, 4]:
-        cc = DNS(simname = 'nsvep_{0}x'.format(factor))
-        cc.compute_statistics(iter0 = 8*factor)
-        xx = read_trajectory(cc, 14, iter0 = 8*factor)
-        a.plot(xx[:, 0], xx[:, 1], label = '$f = {0}$'.format(factor))
+    for neighbours, smoothness in neighbours_smoothness_list:
+        interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+        for factor in [1, 2, 4]:
+            cc = DNS(simname = 'nsvep_{0}x_'.format(factor) + interp_name)
+            cc.compute_statistics(iter0 = 8*factor)
+            tt = 14
+            xx = read_trajectory(cc, tt, iter0 = 8*factor)
+            #a.plot(xx[:, 0], label = '$f = {0}$'.format(factor), marker = 'x')
+            a.plot(xx[:, 0] - xx[:, 0].mean(),
+                   xx[:, 1] - xx[:, 1].mean(),
+                   label = '$f = {0}$'.format(factor), marker = 'x')
     a.legend(loc = 'best')
     a.set_xlabel('$x$ [code units]')
     a.set_ylabel('$y$ [code units]')
-- 
GitLab


From 4203f097b6b1d63343f1c430f81ba3db32e49933 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Fri, 14 Jan 2022 17:18:13 +0100
Subject: [PATCH 11/24] fixes intialization of runs with different
 interpolation

---
 cpp/full_code/NSVEparticles.cpp |  1 +
 examples/convergence.py         | 60 ++++++++++++++++++---------------
 2 files changed, 34 insertions(+), 27 deletions(-)

diff --git a/cpp/full_code/NSVEparticles.cpp b/cpp/full_code/NSVEparticles.cpp
index f2c53a4e..3f24be40 100644
--- a/cpp/full_code/NSVEparticles.cpp
+++ b/cpp/full_code/NSVEparticles.cpp
@@ -98,6 +98,7 @@ int NSVEparticles<rnumber>::initialize(void)
         this->particles_output_writer_mpi->close_file();
     }
 
+    DEBUG_MSG("fs->iteration = %d\n", this->fs->iteration);
     DEBUG_MSG_WAIT(MPI_COMM_WORLD, "about to call particles_system_builder\n");
     this->ps = particles_system_builder(
                 this->fs->cvelocity,              // (field object)
diff --git a/examples/convergence.py b/examples/convergence.py
index 9ee1e6c1..9560ab4d 100644
--- a/examples/convergence.py
+++ b/examples/convergence.py
@@ -8,13 +8,16 @@ from TurTLE import DNS, PP
 base_niterations = 256
 test_niterations = 32
 
-nparticles = 1000
+nparticles = 100
 particle_random_seed = 15
-base_particle_dt = 0.6
+base_particle_dt = 0.5
+test_niterations_particles = 128
 
 neighbours_smoothness_list = [
         (1, 1),
-        (1, 0)]
+        (2, 1),
+        (3, 2),
+        (4, 3)]
 
 def main():
     #generate_initial_conditions()
@@ -33,7 +36,7 @@ def generate_initial_conditions():
     # number of MPI processes to use
     nprocesses = 4
     # number of OpenMP threads per MPI process to use
-    nthreads_per_process = 2
+    nthreads_per_process = 1
 
 # 1. Generate quasistationary state to use for initial conditions.
     # create a dns object
@@ -104,7 +107,7 @@ def run_simulations_field():
     # number of MPI processes to use
     nprocesses = 4
     # number of OpenMP threads per MPI process to use
-    nthreads_per_process = 2
+    nthreads_per_process = 1
 
 # 1. Run NSVE for the three resolutions.
     for factor in [1, 2, 4]:
@@ -249,22 +252,24 @@ def run_simulations_particles():
     # number of MPI processes to use
     nprocesses = 4
     # number of OpenMP threads per MPI process to use
-    nthreads_per_process = 2
+    nthreads_per_process = 3
 
 # 1. Run NSVEparticles for a few iterations, to build up rhs values, consistent
 #    with the relevant velocity field.
     # create dns object
-    cc = DNS()
     # launch simulation
-    factor = 2
-    cc.launch([
+    factor = 1
+    for neighbours, smoothness in neighbours_smoothness_list:
+        interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+        cc = DNS()
+        cc.launch([
             'NSVEparticles',
             '-n', '{0}'.format(factor*32),
             '--np', '{0}'.format(nprocesses),
             '--ntpp', '{0}'.format(nthreads_per_process),
             '--src-simname', 'base_{0}x'.format(factor),
             '--src-iteration', '{0}'.format(base_niterations),
-            '--simname', 'nsvep_base',
+            '--simname', 'nsvep_base_' + interp_name,
             '--precision', 'double',
             '--dtfactor', '{0}'.format(base_particle_dt/4),
             '--kMeta', '{0}'.format(1.0*factor),
@@ -273,6 +278,8 @@ def run_simulations_particles():
             '--niter_stat', '{0}'.format(1),
             '--nparticles', '{0}'.format(nparticles),
             '--niter_part', '{0}'.format(1),
+            '--tracers0_neighbours', '{0}'.format(neighbours),
+            '--tracers0_smoothness', '{0}'.format(smoothness),
             '--cpp_random_particles', '{0}'.format(particle_random_seed)])
 
 # 2. Prepare initial conditions
@@ -282,15 +289,15 @@ def run_simulations_particles():
             df = h5py.File('nsvep_{0}x_{1}_checkpoint_0.h5'.format(factor, interp_name), 'w')
             # field
             df['vorticity/complex/{0}'.format(8*factor)] = h5py.ExternalLink(
-                'nsvep_base_checkpoint_0.h5',
+                'nsvep_base_{0}_checkpoint_0.h5'.format(interp_name),
                 'vorticity/complex/16')
             # particles
             df['tracers0/state/{0}'.format(8*factor)] = h5py.ExternalLink(
-                    'nsvep_base_checkpoint_0.h5',
+                    'nsvep_base_{0}_checkpoint_0.h5'.format(interp_name),
                     'tracers0/state/16')
             # copy rhs
             source_file = h5py.File(
-                    'nsvep_base_checkpoint_0.h5', 'r')
+                    'nsvep_base_{0}_checkpoint_0.h5'.format(interp_name), 'r')
             rhs = source_file['tracers0/rhs/16'][()]
             if factor == 4:
                 rhs[0] = source_file['tracers0/rhs/16'][0]
@@ -324,7 +331,7 @@ def run_simulations_particles():
             # launch simulation
             cc.launch([
                     'NSVEparticles',
-                    '-n', '{0}'.format(64),
+                    '-n', '{0}'.format(32),
                     '--np', '{0}'.format(nprocesses),
                     '--ntpp', '{0}'.format(nthreads_per_process),
                     '--simname', 'nsvep_{0}x_I{1}O{2}'.format(
@@ -333,9 +340,9 @@ def run_simulations_particles():
                         2*smoothness+1),
                     '--precision', 'double',
                     '--dtfactor', '{0}'.format(base_particle_dt/factor),
-                    '--kMeta', '{0}'.format(2.0),
-                    '--niter_todo', '{0}'.format(test_niterations*factor+8*factor),
-                    '--niter_out', '{0}'.format(test_niterations*factor+8*factor),
+                    '--kMeta', '{0}'.format(1.0),
+                    '--niter_todo', '{0}'.format(test_niterations_particles*factor+8*factor),
+                    '--niter_out', '{0}'.format(test_niterations_particles*factor+8*factor),
                     '--niter_stat', '{0}'.format(4*factor),
                     '--nparticles', '{0}'.format(nparticles),
                     '--niter_part', '{0}'.format(2*factor),
@@ -366,9 +373,6 @@ def plot_error_particles():
             final_iter_x2 = c2.get_data_file()['iteration'][()]
             f1 = h5py.File(c1.simname + '_checkpoint_0.h5', 'r')
             f2 = h5py.File(c2.simname + '_checkpoint_0.h5', 'r')
-            print('in error plot')
-            print(final_iter_x1 - 8*factor)
-            print(final_iter_x2 - 8*factor*2)
             x1 = f1['tracers0/state/{0}'.format(final_iter_x1)][()]
             x2 = f2['tracers0/state/{0}'.format(final_iter_x2)][()]
             diff = np.sqrt(np.sum((x2-x1)**2, axis = -1))
@@ -410,18 +414,20 @@ def plot_traj_particles():
         for factor in [1, 2, 4]:
             cc = DNS(simname = 'nsvep_{0}x_'.format(factor) + interp_name)
             cc.compute_statistics(iter0 = 8*factor)
-            tt = 14
+            tt = 3
             xx = read_trajectory(cc, tt, iter0 = 8*factor)
-            #a.plot(xx[:, 0], label = '$f = {0}$'.format(factor), marker = 'x')
-            a.plot(xx[:, 0] - xx[:, 0].mean(),
-                   xx[:, 1] - xx[:, 1].mean(),
-                   label = '$f = {0}$'.format(factor), marker = 'x')
+            a.plot(xx[:, 0],
+                   xx[:, 1],
+                   label = interp_name + '$f = {0}$'.format(factor),
+                   marker = 'x',
+                   dashes = (4/factor, 3, 4/factor),
+                   alpha = 0.2)
+            #a.plot(xx[:, 0], xx[:, 1], dashes = (4/factor, 3, 4/factor), alpha = 0.2)
     a.legend(loc = 'best')
     a.set_xlabel('$x$ [code units]')
     a.set_ylabel('$y$ [code units]')
     f.tight_layout()
     f.savefig('trajectories.pdf')
-    f.savefig('trajectories.png')
     f.savefig('trajectories.svg')
     plt.close(f)
     return None
@@ -430,7 +436,7 @@ def read_trajectory(cc, traj_index, iter0):
     cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
     df = cc.get_particle_file()
     xx = []
-    for ii in range(iter0, cc.get_data_file()['iteration'][()], cc.parameters['niter_part']):
+    for ii in range(iter0, cc.get_data_file()['iteration'][()]+1, cc.parameters['niter_part']):
         xx.append(df['tracers0/position/{0}'.format(ii)][traj_index])
     df.close()
     return np.array(xx)
-- 
GitLab


From 1b450924b725317f3cb2338a2a40ea7ecb7a234a Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 18 Jan 2022 11:20:07 +0100
Subject: [PATCH 12/24] adds temporary alternate field convergence test

---
 examples/convergence_only_time.py | 281 ++++++++++++++++++++++++++++++
 1 file changed, 281 insertions(+)
 create mode 100644 examples/convergence_only_time.py

diff --git a/examples/convergence_only_time.py b/examples/convergence_only_time.py
new file mode 100644
index 00000000..1db81aa3
--- /dev/null
+++ b/examples/convergence_only_time.py
@@ -0,0 +1,281 @@
+import numpy as np
+import h5py
+import matplotlib.pyplot as plt
+
+import TurTLE
+from TurTLE import DNS, PP
+
+base_niterations = 512
+test_niterations = 32
+
+def main():
+    generate_initial_conditions()
+
+    run_simulations_field()
+    plot_error_field2()
+    return None
+
+def generate_initial_conditions():
+    # change these two values as neded.
+    # number of MPI processes to use
+    nprocesses = 8
+    # number of OpenMP threads per MPI process to use
+    nthreads_per_process = 1
+
+# 1. Generate quasistationary state to use for initial conditions.
+    # create a dns object
+    c0 = DNS()
+    # launch the simulation
+    c0.launch([
+            'NSVE',
+            '-n', '64',
+            '--np', '{0}'.format(nprocesses),
+            '--ntpp', '{0}'.format(nthreads_per_process),
+            '--precision', 'double',
+            '--src-simname', 'B32p1e4',
+            '--src-wd', TurTLE.data_dir,
+            '--src-iteration', '0',
+            '--simname', 'base',
+            '--niter_todo', '{0}'.format(base_niterations),
+            '--niter_out', '{0}'.format(base_niterations),
+            '--overwrite-src-parameters',
+            '--kMeta',  '1',
+            '--niter_stat', '16',
+            '--checkpoints_per_file', '{0}'.format(16)])
+
+# 3. Generate initial conditions for NSE runs at 1x, 2x and 4x the
+#    base resolution.
+    # create postprocess object
+    cc = PP()
+    # compute velocity field at last iteration
+    cc.launch([
+            'get_velocity',
+            '--np', '{0}'.format(nprocesses),
+            '--ntpp', '{0}'.format(nthreads_per_process),
+            '--simname', 'base',
+            '--precision', 'double',
+            '--iter0', '{0}'.format(base_niterations),
+            '--iter1', '{0}'.format(base_niterations)])
+    # we don't need to update "checkpoint" file after "get_velocity"
+    return None
+
+def run_simulations_field():
+    # change these two values as neded.
+    # number of MPI processes to use
+    nprocesses = 8
+    # number of OpenMP threads per MPI process to use
+    nthreads_per_process = 1
+
+# 1. Run NSVE for the three resolutions.
+    for factor in [1, 2, 4]:
+        # create dns object
+        cc = DNS()
+        # launch simulation
+        cc.launch([
+                'NSVE',
+                '-n', '{0}'.format(64),
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--src-simname', 'base',
+                '--src-iteration', '{0}'.format(base_niterations),
+                '--simname', 'nsve_{0}x'.format(factor),
+                '--precision', 'double',
+                '--dtfactor', '{0}'.format(1.0 / factor),
+                '--niter_todo', '{0}'.format(test_niterations*factor),
+                '--niter_out', '{0}'.format(test_niterations*factor),
+                '--niter_stat', '{0}'.format(4*factor)])
+
+# 2. Run NSE for the three resolutions.
+    for factor in [1, 2, 4]:
+        # create dns object
+        cc = DNS()
+        # launch simulation
+        cc.launch([
+                'NSE',
+                '-n', '{0}'.format(64),
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--src-simname', 'base',
+                '--src-iteration', '{0}'.format(base_niterations),
+                '--simname', 'nse_{0}x'.format(factor),
+                '--precision', 'double',
+                '--dtfactor', '{0}'.format(1.0 / factor),
+                '--niter_todo', '{0}'.format(test_niterations*factor),
+                '--niter_out', '{0}'.format(test_niterations*factor),
+                '--niter_stat', '{0}'.format(4*factor)])
+    return None
+
+def plot_error_field2():
+    c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
+               for factor in [1, 2, 4]]
+    c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
+               for factor in [1, 2, 4]]
+    cl = [c0_list, c1_list]
+    for cc in c0_list + c1_list:
+        cc.compute_statistics()
+
+    factor_list = [1, 2]
+
+    error_list = [[], []]
+    for ii in range(len(factor_list)):
+        factor = factor_list[ii]
+        for jj in [0, 1]:
+            c0 = cl[jj][ii]
+            c1 = cl[jj][ii+1]
+            df0 = h5py.File(c0.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
+            df1 = h5py.File(c1.get_checkpoint_fname(iteration = test_niterations*2*factor), 'r')
+            vel0 = get_velocity(c0, iteration = test_niterations*factor)
+            vel1 = get_velocity(c1, iteration = test_niterations*2*factor)
+            diff = vel1 - vel0
+            vv = np.sum(vel0**2, axis = 3)
+            dd = np.sum(diff**2, axis = 3)
+            vrms = np.sqrt(np.mean(vv))
+            err = np.mean(dd)**0.5 / vrms
+            error_list[jj].append(err)
+            print('maximum error for factor {0} is {1}'.format(
+                factor, np.max(dd**0.5) / vrms))
+            df0.close()
+            df1.close()
+
+    f = plt.figure(figsize = (4, 4))
+    a = f.add_subplot(111)
+    fl = np.array(factor_list).astype(np.float)
+    a.plot(fl,
+           error_list[0],
+           marker = '.',
+           label = 'NSVE')
+    a.plot(fl,
+           error_list[1],
+           marker = '.',
+           label = 'NSE')
+    a.plot(fl, 1e-3 * fl**(-1),
+           dashes = (1, 1),
+           color = 'black',
+           label = '$\propto f^{-1}$')
+    a.plot(fl, 1e-3 * fl**(-2),
+           dashes = (2, 2),
+           color = 'black',
+           label = '$\propto f^{-2}$')
+    a.plot(fl, 1e-3 * fl**(-3),
+           dashes = (3, 3),
+           color = 'black',
+           label = '$\propto f^{-3}$')
+    a.set_ylabel('relative error')
+    a.set_xlabel('resolution factor $f$')
+    a.set_xscale('log')
+    a.set_yscale('log')
+    a.legend(loc = 'best')
+    f.tight_layout()
+    f.savefig('err_vs_dt_field2.pdf')
+    f.savefig('err_vs_dt_field2.svg')
+    plt.close(f)
+    return None
+
+def plot_error_field():
+    c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
+               for factor in [1, 2, 4]]
+    c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
+               for factor in [1, 2, 4]]
+    for cc in c0_list + c1_list:
+        cc.compute_statistics()
+
+    factor_list = [1, 2, 4]
+
+    error_list = []
+    for ii in range(len(factor_list)):
+        factor = factor_list[ii]
+        c0 = c0_list[ii]
+        c1 = c1_list[ii]
+        df0 = h5py.File(c0.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
+        df1 = h5py.File(c1.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
+        vel0 = get_velocity(c0, iteration = test_niterations*factor)
+        vel1 = get_velocity(c1, iteration = test_niterations*factor)
+        diff = vel1 - vel0
+        vv = np.sum(vel0**2, axis = 3)
+        dd = np.sum(diff**2, axis = 3)
+        vrms = np.sqrt(np.mean(vv))
+        err = np.mean(dd)**0.5 / vrms
+        error_list.append(err)
+        print('maximum error for factor {0} is {1}'.format(
+            factor, np.max(dd**0.5) / vrms))
+        df0.close()
+        df1.close()
+
+    f = plt.figure(figsize = (4, 4))
+    a = f.add_subplot(111)
+    fl = np.array(factor_list).astype(np.float)
+    a.plot(fl,
+           error_list,
+           marker = '.',
+           label = 'NSVE vs NSE')
+    a.plot(fl, 1e-2 * fl**(-1),
+           dashes = (1, 1),
+           color = 'black',
+           label = '$\propto f^{-1}$')
+    a.plot(fl, 1e-2 * fl**(-2),
+           dashes = (2, 2),
+           color = 'black',
+           label = '$\propto f^{-2}$')
+    a.plot(fl, 1e-2 * fl**(-3),
+           dashes = (3, 3),
+           color = 'black',
+           label = '$\propto f^{-3}$')
+    a.set_ylabel('relative error')
+    a.set_xlabel('resolution factor $f$')
+    a.set_xscale('log')
+    a.set_yscale('log')
+    a.legend(loc = 'best')
+    f.tight_layout()
+    f.savefig('err_vs_dt_field.pdf')
+    f.savefig('err_vs_dt_field.svg')
+    plt.close(f)
+    return None
+
+def get_velocity(
+        cc,
+        iteration = 0):
+    data_file = h5py.File(
+            cc.get_checkpoint_fname(iteration = iteration),
+            'r')
+    if 'velocity' in data_file.keys():
+        if 'real' in data_file['velocity'].keys():
+            vel = data_file['velocity/real/{0}'.format(iteration)][()]
+        else:
+            cvel = data_file['velocity/complex/{0}'.format(iteration)][()]
+            vel = ift(cvel)
+            #vel *= cc.parameters['nx']*cc.parameters['ny']*cc.parameters['nz']
+    else:
+        assert('complex' in data_file['vorticity'].keys())
+        cvort = data_file['vorticity/complex/{0}'.format(iteration)][()]
+        cvel = compute_curl(cc, cvort, inverse_curl = True)
+        vel = ift(cvel)
+    data_file.close()
+    return vel
+
+def ift(cfield):
+    ff = np.fft.irfftn(cfield, axes = (0, 1, 2))
+    field = np.transpose(ff, (1, 0, 2, 3)).copy()
+    return field
+
+def compute_curl(
+        cc,
+        cfield,
+        inverse_curl = False):
+    kx = cc.get_data_file()['kspace/kx'][()]
+    ky = cc.get_data_file()['kspace/ky'][()]
+    kz = cc.get_data_file()['kspace/kz'][()]
+    ff = cfield.copy()
+    ff[..., 0] = 1j*(ky[:, None, None]*cfield[..., 2] - kz[None, :, None]*cfield[..., 1])
+    ff[..., 1] = 1j*(kz[None, :, None]*cfield[..., 0] - kx[None, None, :]*cfield[..., 2])
+    ff[..., 2] = 1j*(kx[None, None, :]*cfield[..., 1] - ky[:, None, None]*cfield[..., 0])
+    if inverse_curl:
+        k2 = (kx[None, None,    :]**2 +
+              ky[   :, None, None]**2 +
+              kz[None,    :, None]**2)
+        k2[0, 0, 0] = 1.
+        ff /= k2[:, :, :, None]
+    return ff
+
+if __name__ == '__main__':
+    main()
+
-- 
GitLab


From 0ec2f584585f10f801492ef9852b3089e4fd657d Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 18 Jan 2022 11:20:47 +0100
Subject: [PATCH 13/24] adds error raise for kspace inconsistency

---
 CMakeLists.txt |  7 -------
 TurTLE/DNS.py  | 12 ++++++++----
 cpp/kspace.cpp |  6 ++++--
 3 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index da1d4bd2..627474c6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -489,13 +489,6 @@ LIST(APPEND source_files ${hpp_for_lib} ${cpp_for_lib})
 
 add_library(TurTLE ${source_files})
 
-# TODO: we should be using the bit below, but we need to fix everything else about TURTLE_LIBS before we can do that
-#target_link_libraries(TurTLE PUBLIC OpenMP::OpenMP_CXX)
-
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
-set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
-list(APPEND TURTLE_LIBS "${OpenMP_CXX_LIB_NAMES}")
-
 target_link_libraries(TurTLE ${TURTLE_LIBS})
 target_compile_options(TurTLE PRIVATE $<$<CONFIG:DEBUG>:-O1>)
 
diff --git a/TurTLE/DNS.py b/TurTLE/DNS.py
index d98367ac..3bc6d3a8 100644
--- a/TurTLE/DNS.py
+++ b/TurTLE/DNS.py
@@ -344,13 +344,17 @@ class DNS(_code):
             if k in pp_file.keys():
                 self.statistics[k] = pp_file[k][...]
         # sanity check --- Parseval theorem check
-        test_energy = (np.max(np.abs(
+        energy_error = np.max(np.abs(
                 self.statistics['renergy(t)'] -
-                self.statistics['energy(t)']) / self.statistics['energy(t)']) < 1e-5)
-        test_enstrophy = (np.max(np.abs(
+                self.statistics['energy(t)']) / self.statistics['energy(t)'])
+        test_energy = (energy_error < 1e-5)
+        enstrophy_error = np.max(np.abs(
                 self.statistics['renstrophy(t)'] -
-                self.statistics['enstrophy(t)']) / self.statistics['enstrophy(t)']) < 1e-5)
+                self.statistics['enstrophy(t)']) / self.statistics['enstrophy(t)'])
+        test_enstrophy = (enstrophy_error < 1e-5)
         if strict_Parseval_check:
+            #print('energy error', energy_error)
+            #print('enstrophy error', enstrophy_error)
             assert(test_energy)
             assert(test_enstrophy)
         else:
diff --git a/cpp/kspace.cpp b/cpp/kspace.cpp
index 921e498d..369db623 100644
--- a/cpp/kspace.cpp
+++ b/cpp/kspace.cpp
@@ -28,6 +28,7 @@
 #include <cstdlib>
 #include <algorithm>
 #include <cassert>
+#include <stdexcept>
 #include "kspace.hpp"
 #include "scope_timer.hpp"
 #include "shared_array.hpp"
@@ -201,8 +202,9 @@ int kspace<be, dt>::store(hid_t stat_file)
     if (this->nshells != int(dims[0]))
     {
         DEBUG_MSG(
-                "ERROR: computed nshells %d not equal to data file nshells %d\n",
-                this->nshells, dims[0]);
+                "ERROR: computed nshells %d not equal to data file nshells %d for dealiasing %d\n",
+                this->nshells, dims[0], dt);
+        throw std::runtime_error("Computed nshells not equal to data file nshells. Something is probably wrong with the dealiasing option.\n");
     }
     H5Dwrite(
             dset,
-- 
GitLab


From fffef06f51d048132c139a5ca9a52832081b77b6 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 18 Jan 2022 11:21:36 +0100
Subject: [PATCH 14/24] [wip] testing particle convergence

---
 examples/convergence.py | 154 +++++++++++++++++-----------------------
 1 file changed, 65 insertions(+), 89 deletions(-)

diff --git a/examples/convergence.py b/examples/convergence.py
index 9560ab4d..8d31825d 100644
--- a/examples/convergence.py
+++ b/examples/convergence.py
@@ -5,30 +5,29 @@ import matplotlib.pyplot as plt
 import TurTLE
 from TurTLE import DNS, PP
 
-base_niterations = 256
+base_niterations = 512
 test_niterations = 32
 
-nparticles = 100
+nparticles = 4
 particle_random_seed = 15
 base_particle_dt = 0.5
-test_niterations_particles = 128
+test_niterations_particles = 8
 
 neighbours_smoothness_list = [
-        (1, 1),
+        (1, 0),
         (2, 1),
-        (3, 2),
-        (4, 3)]
+        (3, 2)]
 
 def main():
-    #generate_initial_conditions()
+    generate_initial_conditions()
 
-    #run_simulations_field()
-    #plot_error_field()
+    run_simulations_field()
+    plot_error_field()
 
-    run_simulations_particles()
-    plot_error_particles()
+    #run_simulations_particles()
+    #plot_error_particles()
 
-    plot_traj_particles()
+    #plot_traj_particles()
     return None
 
 def generate_initial_conditions():
@@ -51,55 +50,28 @@ def generate_initial_conditions():
             '--src-simname', 'B32p1e4',
             '--src-wd', TurTLE.data_dir,
             '--src-iteration', '0',
-            '--simname', 'base_1x',
+            '--simname', 'base',
             '--niter_todo', '{0}'.format(base_niterations),
             '--niter_out', '{0}'.format(base_niterations),
             '--overwrite-src-parameters',
-            '--kMeta',  '1.0',
+            '--kMeta',  '2.',
             '--niter_stat', '16',
             '--checkpoints_per_file', '{0}'.format(16)])
 
-# 2. Generate initial conditions for NSVE runs at 2x and 4x the
-#    base resolution.
-    for factor in [2, 4]:
-        # create postprocess object
-        cc = PP()
-        # create a larger version of the field at final iteration
-        cc.launch([
-                'resize',
-                '--np', '{0}'.format(nprocesses),
-                '--ntpp', '{0}'.format(nthreads_per_process),
-                '--simname', 'base_1x',
-                '--precision', 'double',
-                '--iter0', '{0}'.format(base_niterations),
-                '--iter1', '{0}'.format(base_niterations),
-                '--new_nx', '{0}'.format(factor*32),
-                '--new_ny', '{0}'.format(factor*32),
-                '--new_nz', '{0}'.format(factor*32),
-                '--new_simname', 'base_{0}x'.format(factor)])
-        # update "checkpoint" file, so we can use "base__x" as "src-simname"
-        # this is needed after "resize"
-        f1 = h5py.File('base_{0}x_checkpoint_0.h5'.format(factor), 'a')
-        f1['vorticity/complex/{0}'.format(base_niterations)] = h5py.ExternalLink(
-            'base_{0}x_fields.h5'.format(factor),
-            'vorticity/complex/{0}'.format(base_niterations))
-        f1.close()
-
 # 3. Generate initial conditions for NSE runs at 1x, 2x and 4x the
 #    base resolution.
-    for factor in [1, 2, 4]:
-        # create postprocess object
-        cc = PP()
-        # compute velocity field at last iteration
-        cc.launch([
-                'get_velocity',
-                '--np', '{0}'.format(nprocesses),
-                '--ntpp', '{0}'.format(nthreads_per_process),
-                '--simname', 'base_{0}x'.format(factor),
-                '--precision', 'double',
-                '--iter0', '{0}'.format(base_niterations),
-                '--iter1', '{0}'.format(base_niterations)])
-        # we don't need to update "checkpoint" file after "get_velocity"
+    # create postprocess object
+    cc = PP()
+    # compute velocity field at last iteration
+    cc.launch([
+            'get_velocity',
+            '--np', '{0}'.format(nprocesses),
+            '--ntpp', '{0}'.format(nthreads_per_process),
+            '--simname', 'base',
+            '--precision', 'double',
+            '--iter0', '{0}'.format(base_niterations),
+            '--iter1', '{0}'.format(base_niterations)])
+    # we don't need to update "checkpoint" file after "get_velocity"
     return None
 
 def run_simulations_field():
@@ -119,12 +91,12 @@ def run_simulations_field():
                 '-n', '{0}'.format(factor*32),
                 '--np', '{0}'.format(nprocesses),
                 '--ntpp', '{0}'.format(nthreads_per_process),
-                '--src-simname', 'base_{0}x'.format(factor),
+                '--src-simname', 'base',
                 '--src-iteration', '{0}'.format(base_niterations),
                 '--simname', 'nsve_{0}x'.format(factor),
                 '--precision', 'double',
-                '--dtfactor', '0.3',
-                '--kMeta', '{0}'.format(1.0*factor),
+                '--dtfactor', '{0}'.format(0.3 / factor),
+                '--kMeta', '{0}'.format(factor*1.0),
                 '--niter_todo', '{0}'.format(test_niterations*factor),
                 '--niter_out', '{0}'.format(test_niterations*factor),
                 '--niter_stat', '{0}'.format(4*factor)])
@@ -139,12 +111,12 @@ def run_simulations_field():
                 '-n', '{0}'.format(factor*32),
                 '--np', '{0}'.format(nprocesses),
                 '--ntpp', '{0}'.format(nthreads_per_process),
-                '--src-simname', 'base_{0}x'.format(factor),
+                '--src-simname', 'base',
                 '--src-iteration', '{0}'.format(base_niterations),
                 '--simname', 'nse_{0}x'.format(factor),
                 '--precision', 'double',
-                '--dtfactor', '0.3',
-                '--kMeta', '{0}'.format(1.0*factor),
+                '--dtfactor', '{0}'.format(0.3 / factor),
+                '--kMeta', '{0}'.format(factor*1.0),
                 '--niter_todo', '{0}'.format(test_niterations*factor),
                 '--niter_out', '{0}'.format(test_niterations*factor),
                 '--niter_stat', '{0}'.format(4*factor)])
@@ -172,10 +144,10 @@ def plot_error_field():
         diff = vel1 - vel0
         vv = np.sqrt(np.sum(vel0**2, axis = 3))
         dd = np.sqrt(np.sum(diff**2, axis = 3))
-        err = np.max(dd / vv)
+        err = np.mean(dd / vv)
         error_list.append(err)
         print('maximum error for factor {0} is {1}'.format(
-            factor, err))
+            factor, np.max(dd / vv)))
         df0.close()
         df1.close()
 
@@ -186,9 +158,17 @@ def plot_error_field():
            error_list,
            marker = '.',
            label = 'NSVE vs NSE')
-    a.plot(fl, fl**(-3),
+    a.plot(fl, 1e-2 * fl**(-1),
            dashes = (1, 1),
            color = 'black',
+           label = '$\propto f^{-1}$')
+    a.plot(fl, 1e-2 * fl**(-2),
+           dashes = (2, 2),
+           color = 'black',
+           label = '$\propto f^{-2}$')
+    a.plot(fl, 1e-2 * fl**(-3),
+           dashes = (3, 3),
+           color = 'black',
            label = '$\propto f^{-3}$')
     a.set_ylabel('relative error')
     a.set_xlabel('resolution factor $f$')
@@ -197,7 +177,6 @@ def plot_error_field():
     a.legend(loc = 'best')
     f.tight_layout()
     f.savefig('err_vs_dt_field.pdf')
-    f.savefig('err_vs_dt_field.png')
     f.savefig('err_vs_dt_field.svg')
     plt.close(f)
     return None
@@ -258,7 +237,7 @@ def run_simulations_particles():
 #    with the relevant velocity field.
     # create dns object
     # launch simulation
-    factor = 1
+    factor = 2
     for neighbours, smoothness in neighbours_smoothness_list:
         interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
         cc = DNS()
@@ -267,19 +246,20 @@ def run_simulations_particles():
             '-n', '{0}'.format(factor*32),
             '--np', '{0}'.format(nprocesses),
             '--ntpp', '{0}'.format(nthreads_per_process),
-            '--src-simname', 'base_{0}x'.format(factor),
+            '--src-simname', 'base',
             '--src-iteration', '{0}'.format(base_niterations),
             '--simname', 'nsvep_base_' + interp_name,
             '--precision', 'double',
             '--dtfactor', '{0}'.format(base_particle_dt/4),
-            '--kMeta', '{0}'.format(1.0*factor),
-            '--niter_todo', '{0}'.format(16),
+            '--kMeta', '{0}'.format(2.0),
+            '--niter_todo', '{0}'.format(20),
             '--niter_out', '{0}'.format(1),
             '--niter_stat', '{0}'.format(1),
             '--nparticles', '{0}'.format(nparticles),
             '--niter_part', '{0}'.format(1),
             '--tracers0_neighbours', '{0}'.format(neighbours),
             '--tracers0_smoothness', '{0}'.format(smoothness),
+            '--tracers0_integration_steps', '5',
             '--cpp_random_particles', '{0}'.format(particle_random_seed)])
 
 # 2. Prepare initial conditions
@@ -288,9 +268,10 @@ def run_simulations_particles():
         for factor in [1, 2, 4]:
             df = h5py.File('nsvep_{0}x_{1}_checkpoint_0.h5'.format(factor, interp_name), 'w')
             # field
+            field_iteration = 16
             df['vorticity/complex/{0}'.format(8*factor)] = h5py.ExternalLink(
                 'nsvep_base_{0}_checkpoint_0.h5'.format(interp_name),
-                'vorticity/complex/16')
+                'vorticity/complex/{0}'.format(field_iteration))
             # particles
             df['tracers0/state/{0}'.format(8*factor)] = h5py.ExternalLink(
                     'nsvep_base_{0}_checkpoint_0.h5'.format(interp_name),
@@ -299,21 +280,10 @@ def run_simulations_particles():
             source_file = h5py.File(
                     'nsvep_base_{0}_checkpoint_0.h5'.format(interp_name), 'r')
             rhs = source_file['tracers0/rhs/16'][()]
-            if factor == 4:
-                rhs[0] = source_file['tracers0/rhs/16'][0]
-                rhs[1] = source_file['tracers0/rhs/16'][1]
-                rhs[2] = source_file['tracers0/rhs/15'][1]
-                rhs[3] = source_file['tracers0/rhs/14'][1]
-            if factor == 2:
-                rhs[0] = source_file['tracers0/rhs/16'][0]
-                rhs[1] = source_file['tracers0/rhs/15'][1]
-                rhs[2] = source_file['tracers0/rhs/13'][1]
-                rhs[3] = source_file['tracers0/rhs/11'][1]
-            if factor == 1:
-                rhs[0] = source_file['tracers0/rhs/16'][0]
-                rhs[1] = source_file['tracers0/rhs/13'][1]
-                rhs[2] = source_file['tracers0/rhs/9'][1]
-                rhs[3] = source_file['tracers0/rhs/5'][1]
+            for tt in range(1, rhs.shape[0]):
+                ii = 16 - tt*factor + 1
+                print(factor, tt, ii)
+                rhs[tt] = source_file['tracers0/rhs/{0}'.format(16 - tt*factor + 1)][1]
             df['tracers0/rhs/{0}'.format(8*factor)] = rhs
             df.close()
 
@@ -331,7 +301,7 @@ def run_simulations_particles():
             # launch simulation
             cc.launch([
                     'NSVEparticles',
-                    '-n', '{0}'.format(32),
+                    '-n', '{0}'.format(64),
                     '--np', '{0}'.format(nprocesses),
                     '--ntpp', '{0}'.format(nthreads_per_process),
                     '--simname', 'nsvep_{0}x_I{1}O{2}'.format(
@@ -340,7 +310,7 @@ def run_simulations_particles():
                         2*smoothness+1),
                     '--precision', 'double',
                     '--dtfactor', '{0}'.format(base_particle_dt/factor),
-                    '--kMeta', '{0}'.format(1.0),
+                    '--kMeta', '{0}'.format(2.0),
                     '--niter_todo', '{0}'.format(test_niterations_particles*factor+8*factor),
                     '--niter_out', '{0}'.format(test_niterations_particles*factor+8*factor),
                     '--niter_stat', '{0}'.format(4*factor),
@@ -348,6 +318,7 @@ def run_simulations_particles():
                     '--niter_part', '{0}'.format(2*factor),
                     '--tracers0_neighbours', '{0}'.format(neighbours),
                     '--tracers0_smoothness', '{0}'.format(smoothness),
+                    '--tracers0_integration_steps', '5',
                     '--cpp_random_particles', '0'], # turn off cpp particle initialization
                     iter0 = 8*factor)
     return None
@@ -385,14 +356,19 @@ def plot_error_particles():
         a.plot(factor_list, err_max_list, marker = '.', label = 'max error ' + interp_name)
         a.plot(factor_list, err_mean_list, marker = '.', label = 'mean error ' + interp_name)
     a.plot(factor_list,
-           (3e-2)*factor_list**(-3.5),
+           (3e-5)*factor_list**(-2),
            color = 'black',
            dashes = (2, 2),
-           label = '$\propto f^{-3.5}$')
+           label = '$\propto f^{-2}$')
     a.plot(factor_list,
-           (3e-3)*factor_list**(-4),
+           (3e-5)*factor_list**(-3),
            color = 'black',
-           dashes = (1, 1),
+           dashes = (3, 3),
+           label = '$\propto f^{-3}$')
+    a.plot(factor_list,
+           (3e-6)*factor_list**(-4),
+           color = 'black',
+           dashes = (4, 4),
            label = '$\propto f^{-4}$')
     a.set_xscale('log')
     a.set_yscale('log')
-- 
GitLab


From fea49e0de4569401b9cd918d5acdf3007e907639 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 18 Jan 2022 12:43:39 +0100
Subject: [PATCH 15/24] bugfix: fixes forcing call for NSE

---
 cpp/full_code/NSE.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cpp/full_code/NSE.cpp b/cpp/full_code/NSE.cpp
index 25a4c395..fac9a0b3 100644
--- a/cpp/full_code/NSE.cpp
+++ b/cpp/full_code/NSE.cpp
@@ -460,7 +460,7 @@ int NSE<rnumber>::ShuOsher(void)
 
     *this->tmp_velocity2 = rnumber(0);
     this->add_nonlinear_term(this->tmp_velocity1, this->tmp_velocity2);
-    this->add_forcing_term(this->velocity, this->tmp_velocity2);
+    this->add_forcing_term(this->tmp_velocity1, this->tmp_velocity2);
     this->kk->CLOOP_K2(
             [&](const ptrdiff_t cindex,
                 const ptrdiff_t xindex,
@@ -482,7 +482,7 @@ int NSE<rnumber>::ShuOsher(void)
 
     *this->tmp_velocity1 = rnumber(0);
     this->add_nonlinear_term(this->tmp_velocity2, this->tmp_velocity1);
-    this->add_forcing_term(this->velocity, this->tmp_velocity1);
+    this->add_forcing_term(this->tmp_velocity2, this->tmp_velocity1);
     this->kk->CLOOP_K2(
             [&](const ptrdiff_t cindex,
                 const ptrdiff_t xindex,
-- 
GitLab


From 95019c4acafce815c21cb24107f164d366ef35c7 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 18 Jan 2022 16:39:45 +0100
Subject: [PATCH 16/24] adds cleaner field solver convergence check

---
 examples/convergence/fields_base.py     |  78 +++++++++
 examples/convergence/fields_temporal.py | 202 ++++++++++++++++++++++++
 2 files changed, 280 insertions(+)
 create mode 100644 examples/convergence/fields_base.py
 create mode 100644 examples/convergence/fields_temporal.py

diff --git a/examples/convergence/fields_base.py b/examples/convergence/fields_base.py
new file mode 100644
index 00000000..d2225d32
--- /dev/null
+++ b/examples/convergence/fields_base.py
@@ -0,0 +1,78 @@
+import numpy as np
+import h5py
+import matplotlib.pyplot as plt
+
+def main():
+    return None
+
+def get_velocity(
+        cc,
+        iteration = 0):
+    data_file = h5py.File(
+            cc.get_checkpoint_fname(iteration = iteration),
+            'r')
+    if 'velocity' in data_file.keys():
+        if 'real' in data_file['velocity'].keys():
+            vel = data_file['velocity/real/{0}'.format(iteration)][()]
+        else:
+            cvel = data_file['velocity/complex/{0}'.format(iteration)][()]
+            vel = ift(cvel)
+    else:
+        assert('complex' in data_file['vorticity'].keys())
+        cvort = data_file['vorticity/complex/{0}'.format(iteration)][()]
+        cvel = compute_curl(cc, cvort, inverse_curl = True)
+        vel = ift(cvel)
+    data_file.close()
+    return vel
+
+def ift(cfield):
+    ff = np.fft.irfftn(cfield, axes = (0, 1, 2))
+    field = np.transpose(ff, (1, 0, 2, 3)).copy()
+    return field*(field.shape[0]*field.shape[1]*field.shape[2])
+
+def compute_curl(
+        cc,
+        cfield,
+        inverse_curl = False):
+    kx = cc.get_data_file()['kspace/kx'][()]
+    ky = cc.get_data_file()['kspace/ky'][()]
+    kz = cc.get_data_file()['kspace/kz'][()]
+    ff = cfield.copy()
+    ff[..., 0] = 1j*(ky[:, None, None]*cfield[..., 2] - kz[None, :, None]*cfield[..., 1])
+    ff[..., 1] = 1j*(kz[None, :, None]*cfield[..., 0] - kx[None, None, :]*cfield[..., 2])
+    ff[..., 2] = 1j*(kx[None, None, :]*cfield[..., 1] - ky[:, None, None]*cfield[..., 0])
+    if inverse_curl:
+        k2 = (kx[None, None,    :]**2 +
+              ky[   :, None, None]**2 +
+              kz[None,    :, None]**2)
+        k2[0, 0, 0] = 1.
+        ff /= k2[:, :, :, None]
+    return ff
+
+def compute_vector_field_distance(
+        f1, f2,
+        figname = None):
+    diff = f1 - f2
+    rms1 = np.mean(np.sum(f1**2, axis = 3))**0.5
+    rms2 = np.mean(np.sum(f2**2, axis = 3))**0.5
+    rms = np.sqrt(rms1 * rms2)
+    dd = np.sum(diff**2, axis = 3)
+    L2 = np.sqrt(np.mean(dd))
+    max_val = np.max(np.sqrt(dd))
+    if type(figname) != type(None):
+        fig = plt.figure(figsize = (8, 4))
+        a = fig.add_subplot(121)
+        a.imshow(f1[:, 5, :, 2], vmin = -1, vmax = 1, interpolation = 'none')
+        a = fig.add_subplot(122)
+        a.imshow(f2[:, 5, :, 2], vmin = -1, vmax = 1, interpolation = 'none')
+        fig.tight_layout()
+        fig.savefig('field_slice_' + figname + '.pdf')
+        plt.close(fig)
+    return {'L2' : L2,
+            'L2_rel' : L2 / rms,
+            'max' : max_val,
+            'max_rel' : max_val / rms}
+
+if __name__ == '__main__':
+    main()
+
diff --git a/examples/convergence/fields_temporal.py b/examples/convergence/fields_temporal.py
new file mode 100644
index 00000000..3d18a18c
--- /dev/null
+++ b/examples/convergence/fields_temporal.py
@@ -0,0 +1,202 @@
+import numpy as np
+import h5py
+import matplotlib.pyplot as plt
+
+import TurTLE
+from TurTLE import DNS, PP
+
+from fields_base import *
+
+base_niterations = 128
+test_niterations = 32
+grid_size = 128
+
+def main():
+    generate_initial_conditions()
+
+    run_simulations_field()
+    plot_error_field()
+    return None
+
+def generate_initial_conditions():
+    # change these two values as neded.
+    # number of MPI processes to use
+    nprocesses = 8
+    # number of OpenMP threads per MPI process to use
+    nthreads_per_process = 1
+
+# 1. Generate quasistationary state to use for initial conditions.
+    # create a dns object
+    c0 = DNS()
+    # launch the simulation
+    c0.launch([
+            'NSVE',
+            '-n', '{0}'.format(grid_size),
+            '--np', '{0}'.format(nprocesses),
+            '--ntpp', '{0}'.format(nthreads_per_process),
+            '--precision', 'double',
+            '--src-simname', 'B32p1e4',
+            '--src-wd', TurTLE.data_dir,
+            '--src-iteration', '0',
+            '--simname', 'base',
+            '--niter_todo', '{0}'.format(base_niterations),
+            '--niter_out', '{0}'.format(base_niterations),
+            '--overwrite-src-parameters',
+            '--kMeta',  '1.5',
+            '--fk0', '2',
+            '--fk1', '3',
+            '--niter_stat', '16',
+            '--checkpoints_per_file', '{0}'.format(64)])
+
+# 3. Generate initial conditions for NSE runs at 1x, 2x and 4x the
+#    base resolution.
+    # create postprocess object
+    cc = PP()
+    # compute velocity field at last iteration
+    cc.launch([
+            'get_velocity',
+            '--np', '{0}'.format(nprocesses),
+            '--ntpp', '{0}'.format(nthreads_per_process),
+            '--simname', 'base',
+            '--precision', 'double',
+            '--iter0', '{0}'.format(base_niterations),
+            '--iter1', '{0}'.format(base_niterations)])
+    return None
+
+def run_simulations_field():
+    # change these two values as neded.
+    # number of MPI processes to use
+    nprocesses = 8
+    # number of OpenMP threads per MPI process to use
+    nthreads_per_process = 1
+
+# 1. Run NSVE for the three resolutions.
+    for factor in [1, 2, 4]:
+        # create dns object
+        cc = DNS()
+        # launch simulation
+        cc.launch([
+                'NSVE',
+                '-n', '{0}'.format(grid_size),
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--src-simname', 'base',
+                '--src-iteration', '{0}'.format(base_niterations),
+                '--simname', 'nsve_{0}x'.format(factor),
+                '--precision', 'double',
+                '--dtfactor', '{0}'.format(0.5 / factor),
+                '--niter_todo', '{0}'.format(test_niterations*factor),
+                '--niter_out', '{0}'.format(test_niterations*factor),
+                #'--niter_out', '{0}'.format(factor),
+                '--niter_stat', '{0}'.format(factor)])
+
+# 2. Run NSE for the three resolutions.
+    for factor in [1, 2, 4]:
+        # create dns object
+        cc = DNS()
+        # launch simulation
+        cc.launch([
+                'NSE',
+                '-n', '{0}'.format(grid_size),
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--src-simname', 'base',
+                '--src-iteration', '{0}'.format(base_niterations),
+                '--simname', 'nse_{0}x'.format(factor),
+                '--precision', 'double',
+                '--dtfactor', '{0}'.format(0.5 / factor),
+                '--niter_todo', '{0}'.format(test_niterations*factor),
+                #'--niter_out', '{0}'.format(factor),
+                '--niter_out', '{0}'.format(test_niterations*factor),
+                '--niter_stat', '{0}'.format(factor)])
+    return None
+
+def plot_error_field():
+    factor_list = [1, 2, 4]
+    c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
+               for factor in factor_list]
+    c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
+               for factor in factor_list]
+    cl = [c0_list, c1_list]
+    # sanity checks
+    for cc in c0_list + c1_list:
+        cc.compute_statistics()
+
+    # errors for individual solvers
+    error_list = [[], [], []]
+    for ii in range(len(factor_list)-1):
+        factor = factor_list[ii]
+        for jj in [0, 1]:
+            vel1 = get_velocity(cl[jj][ii  ], iteration =   test_niterations*factor)
+            vel2 = get_velocity(cl[jj][ii+1], iteration = 2*test_niterations*factor)
+            dd = compute_vector_field_distance(vel1, vel2, figname = cl[jj][ii].simname + '_vs_' + cl[jj][ii+1].simname)
+            error_list[jj].append(dd['L2_rel'])
+
+    # comparisons of two solutions
+    for ii in range(len(factor_list)):
+        factor = factor_list[ii]
+        vel1 = get_velocity(cl[0][ii], iteration = test_niterations*factor)
+        vel2 = get_velocity(cl[1][ii], iteration = test_niterations*factor)
+        dd = compute_vector_field_distance(vel1, vel2)
+        error_list[2].append(dd['L2_rel'])
+
+    f = plt.figure(figsize = (4, 4))
+    a = f.add_subplot(111)
+    a.plot(factor_list[:len(error_list[0])],
+           error_list[0],
+           marker = '.',
+           dashes = (2, 3),
+           label = 'NSVE')
+    a.plot(factor_list[:len(error_list[1])],
+           error_list[1],
+           marker = '.',
+           dashes = (3, 5),
+           label = 'NSE')
+    a.plot(factor_list,
+           error_list[2],
+           marker = '.',
+           label = 'NSVE vs NSE')
+    fl = np.array(factor_list).astype(np.float)
+    for ee in [1, 2, 3]:
+        a.plot(fl, error_list[0][0] * fl**(-ee),
+               dashes = (ee, ee),
+               color = 'black',
+               label = '$\propto f^{{-{0}}}$'.format(ee),
+               zorder = -ee)
+    a.set_ylabel('relative error')
+    a.set_xlabel('resolution factor $f$')
+    a.set_xscale('log')
+    a.set_yscale('log')
+    a.legend(loc = 'best', fontsize = 6)
+    f.tight_layout()
+    f.savefig('err_vs_dt_field.pdf')
+    f.savefig('err_vs_dt_field.svg')
+    plt.close(f)
+
+    #t = range(test_niterations+1)
+    #err_vs_t = [[], [], []]
+    ## comparisons of two solvers
+    #for ii in range(len(factor_list)):
+    #    factor = factor_list[ii]
+    #    for tt in t:
+    #        vel1 = get_velocity(cl[0][ii], iteration = tt*factor)
+    #        vel2 = get_velocity(cl[1][ii], iteration = tt*factor)
+    #        dd = compute_vector_field_distance(vel1, vel2)
+    #        err_vs_t[ii].append(dd['L2_rel'])
+    ## distance between NSVE and NSE as a function of time
+    #f = plt.figure(figsize = (4, 4))
+    #a = f.add_subplot(111)
+    #a.plot(t, err_vs_t[0], label = 'f = 1')
+    #a.plot(t, err_vs_t[1], label = 'f = 2')
+    #a.plot(t, err_vs_t[2], label = 'f = 4')
+    #a.set_yscale('log')
+    #a.legend(loc = 'best', fontsize = 6)
+    #f.tight_layout()
+    #f.savefig('err_vs_t_field.pdf')
+    #f.savefig('err_vs_t_field.svg')
+    #plt.close(f)
+    return None
+
+if __name__ == '__main__':
+    main()
+
-- 
GitLab


From 7e6fe17b85f20b4bf4298e5018ea24374afb63a9 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 18 Jan 2022 16:50:42 +0100
Subject: [PATCH 17/24] fixes viscosity value for decaying case

---
 TurTLE/DNS.py | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/TurTLE/DNS.py b/TurTLE/DNS.py
index 3bc6d3a8..99962bf5 100644
--- a/TurTLE/DNS.py
+++ b/TurTLE/DNS.py
@@ -824,7 +824,7 @@ class DNS(_code):
         kM = opt.n * 0.5
         if opt.dealias_type == 1:
             kM *= 0.8
-        # tweak forcing/viscosity based on forcint type
+        # tweak forcing/viscosity based on forcing type
         if opt.forcing_type == 'linear':
             # custom famplitude for 288 and 576
             if opt.n == 288:
@@ -837,6 +837,11 @@ class DNS(_code):
                 opt.nu = (
                     opt.injection_rate *
                     (opt.kMeta / kM)**4)**(1./3)
+                if opt.injection_rate == 0:
+                    opt.nu = (
+                    (opt.kMeta / kM)**(4./3) *
+                    (np.pi / 1.5)**(1./3) *
+                    (2*self.parameters['energy'] / 3)**0.5)
         elif opt.forcing_type == 'fixed_energy':
             kf = 1. / (1./opt.fk0 +
                        1./opt.fk1)
-- 
GitLab


From 1c51da3d6b518e8e705fa3033d557c72cdc029b2 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 18 Jan 2022 17:30:06 +0100
Subject: [PATCH 18/24] tweaks field error analysis

---
 examples/convergence/fields_temporal.py |  70 +++---
 examples/convergence_only_time.py       | 281 ------------------------
 2 files changed, 38 insertions(+), 313 deletions(-)
 delete mode 100644 examples/convergence_only_time.py

diff --git a/examples/convergence/fields_temporal.py b/examples/convergence/fields_temporal.py
index 3d18a18c..85ada49f 100644
--- a/examples/convergence/fields_temporal.py
+++ b/examples/convergence/fields_temporal.py
@@ -14,8 +14,10 @@ grid_size = 128
 def main():
     generate_initial_conditions()
 
-    run_simulations_field()
-    plot_error_field()
+    run_simulations_field(
+            err_vs_t = False)
+    plot_error_field(
+            err_vs_t = False)
     return None
 
 def generate_initial_conditions():
@@ -48,11 +50,10 @@ def generate_initial_conditions():
             '--niter_stat', '16',
             '--checkpoints_per_file', '{0}'.format(64)])
 
-# 3. Generate initial conditions for NSE runs at 1x, 2x and 4x the
-#    base resolution.
+# 3. Generate initial conditions for NSE runs.
     # create postprocess object
     cc = PP()
-    # compute velocity field at last iteration
+    # launches code to compute velocity field at last iteration
     cc.launch([
             'get_velocity',
             '--np', '{0}'.format(nprocesses),
@@ -63,13 +64,18 @@ def generate_initial_conditions():
             '--iter1', '{0}'.format(base_niterations)])
     return None
 
-def run_simulations_field():
+def run_simulations_field(err_vs_t = False):
     # change these two values as neded.
     # number of MPI processes to use
     nprocesses = 8
     # number of OpenMP threads per MPI process to use
     nthreads_per_process = 1
 
+    if err_vs_t:
+        niter_out_factor = 1
+    else:
+        niter_out_factor = test_niterations
+
 # 1. Run NSVE for the three resolutions.
     for factor in [1, 2, 4]:
         # create dns object
@@ -86,8 +92,7 @@ def run_simulations_field():
                 '--precision', 'double',
                 '--dtfactor', '{0}'.format(0.5 / factor),
                 '--niter_todo', '{0}'.format(test_niterations*factor),
-                '--niter_out', '{0}'.format(test_niterations*factor),
-                #'--niter_out', '{0}'.format(factor),
+                '--niter_out', '{0}'.format(niter_out_factor*factor),
                 '--niter_stat', '{0}'.format(factor)])
 
 # 2. Run NSE for the three resolutions.
@@ -106,12 +111,12 @@ def run_simulations_field():
                 '--precision', 'double',
                 '--dtfactor', '{0}'.format(0.5 / factor),
                 '--niter_todo', '{0}'.format(test_niterations*factor),
-                #'--niter_out', '{0}'.format(factor),
+                '--niter_out', '{0}'.format(niter_out_factor*factor),
                 '--niter_out', '{0}'.format(test_niterations*factor),
                 '--niter_stat', '{0}'.format(factor)])
     return None
 
-def plot_error_field():
+def plot_error_field(err_vs_t = False):
     factor_list = [1, 2, 4]
     c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
                for factor in factor_list]
@@ -173,28 +178,29 @@ def plot_error_field():
     f.savefig('err_vs_dt_field.svg')
     plt.close(f)
 
-    #t = range(test_niterations+1)
-    #err_vs_t = [[], [], []]
-    ## comparisons of two solvers
-    #for ii in range(len(factor_list)):
-    #    factor = factor_list[ii]
-    #    for tt in t:
-    #        vel1 = get_velocity(cl[0][ii], iteration = tt*factor)
-    #        vel2 = get_velocity(cl[1][ii], iteration = tt*factor)
-    #        dd = compute_vector_field_distance(vel1, vel2)
-    #        err_vs_t[ii].append(dd['L2_rel'])
-    ## distance between NSVE and NSE as a function of time
-    #f = plt.figure(figsize = (4, 4))
-    #a = f.add_subplot(111)
-    #a.plot(t, err_vs_t[0], label = 'f = 1')
-    #a.plot(t, err_vs_t[1], label = 'f = 2')
-    #a.plot(t, err_vs_t[2], label = 'f = 4')
-    #a.set_yscale('log')
-    #a.legend(loc = 'best', fontsize = 6)
-    #f.tight_layout()
-    #f.savefig('err_vs_t_field.pdf')
-    #f.savefig('err_vs_t_field.svg')
-    #plt.close(f)
+    if err_vs_t:
+        t = range(test_niterations+1)
+        err_vs_t = [[], [], []]
+        # comparisons of two solvers
+        for ii in range(len(factor_list)):
+            factor = factor_list[ii]
+            for tt in t:
+                vel1 = get_velocity(cl[0][ii], iteration = tt*factor)
+                vel2 = get_velocity(cl[1][ii], iteration = tt*factor)
+                dd = compute_vector_field_distance(vel1, vel2)
+                err_vs_t[ii].append(dd['L2_rel'])
+        # distance between NSVE and NSE as a function of time
+        f = plt.figure(figsize = (4, 4))
+        a = f.add_subplot(111)
+        a.plot(t, err_vs_t[0], label = 'f = 1')
+        a.plot(t, err_vs_t[1], label = 'f = 2')
+        a.plot(t, err_vs_t[2], label = 'f = 4')
+        a.set_yscale('log')
+        a.legend(loc = 'best', fontsize = 6)
+        f.tight_layout()
+        f.savefig('err_vs_t_field.pdf')
+        f.savefig('err_vs_t_field.svg')
+        plt.close(f)
     return None
 
 if __name__ == '__main__':
diff --git a/examples/convergence_only_time.py b/examples/convergence_only_time.py
deleted file mode 100644
index 1db81aa3..00000000
--- a/examples/convergence_only_time.py
+++ /dev/null
@@ -1,281 +0,0 @@
-import numpy as np
-import h5py
-import matplotlib.pyplot as plt
-
-import TurTLE
-from TurTLE import DNS, PP
-
-base_niterations = 512
-test_niterations = 32
-
-def main():
-    generate_initial_conditions()
-
-    run_simulations_field()
-    plot_error_field2()
-    return None
-
-def generate_initial_conditions():
-    # change these two values as neded.
-    # number of MPI processes to use
-    nprocesses = 8
-    # number of OpenMP threads per MPI process to use
-    nthreads_per_process = 1
-
-# 1. Generate quasistationary state to use for initial conditions.
-    # create a dns object
-    c0 = DNS()
-    # launch the simulation
-    c0.launch([
-            'NSVE',
-            '-n', '64',
-            '--np', '{0}'.format(nprocesses),
-            '--ntpp', '{0}'.format(nthreads_per_process),
-            '--precision', 'double',
-            '--src-simname', 'B32p1e4',
-            '--src-wd', TurTLE.data_dir,
-            '--src-iteration', '0',
-            '--simname', 'base',
-            '--niter_todo', '{0}'.format(base_niterations),
-            '--niter_out', '{0}'.format(base_niterations),
-            '--overwrite-src-parameters',
-            '--kMeta',  '1',
-            '--niter_stat', '16',
-            '--checkpoints_per_file', '{0}'.format(16)])
-
-# 3. Generate initial conditions for NSE runs at 1x, 2x and 4x the
-#    base resolution.
-    # create postprocess object
-    cc = PP()
-    # compute velocity field at last iteration
-    cc.launch([
-            'get_velocity',
-            '--np', '{0}'.format(nprocesses),
-            '--ntpp', '{0}'.format(nthreads_per_process),
-            '--simname', 'base',
-            '--precision', 'double',
-            '--iter0', '{0}'.format(base_niterations),
-            '--iter1', '{0}'.format(base_niterations)])
-    # we don't need to update "checkpoint" file after "get_velocity"
-    return None
-
-def run_simulations_field():
-    # change these two values as neded.
-    # number of MPI processes to use
-    nprocesses = 8
-    # number of OpenMP threads per MPI process to use
-    nthreads_per_process = 1
-
-# 1. Run NSVE for the three resolutions.
-    for factor in [1, 2, 4]:
-        # create dns object
-        cc = DNS()
-        # launch simulation
-        cc.launch([
-                'NSVE',
-                '-n', '{0}'.format(64),
-                '--np', '{0}'.format(nprocesses),
-                '--ntpp', '{0}'.format(nthreads_per_process),
-                '--src-simname', 'base',
-                '--src-iteration', '{0}'.format(base_niterations),
-                '--simname', 'nsve_{0}x'.format(factor),
-                '--precision', 'double',
-                '--dtfactor', '{0}'.format(1.0 / factor),
-                '--niter_todo', '{0}'.format(test_niterations*factor),
-                '--niter_out', '{0}'.format(test_niterations*factor),
-                '--niter_stat', '{0}'.format(4*factor)])
-
-# 2. Run NSE for the three resolutions.
-    for factor in [1, 2, 4]:
-        # create dns object
-        cc = DNS()
-        # launch simulation
-        cc.launch([
-                'NSE',
-                '-n', '{0}'.format(64),
-                '--np', '{0}'.format(nprocesses),
-                '--ntpp', '{0}'.format(nthreads_per_process),
-                '--src-simname', 'base',
-                '--src-iteration', '{0}'.format(base_niterations),
-                '--simname', 'nse_{0}x'.format(factor),
-                '--precision', 'double',
-                '--dtfactor', '{0}'.format(1.0 / factor),
-                '--niter_todo', '{0}'.format(test_niterations*factor),
-                '--niter_out', '{0}'.format(test_niterations*factor),
-                '--niter_stat', '{0}'.format(4*factor)])
-    return None
-
-def plot_error_field2():
-    c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
-               for factor in [1, 2, 4]]
-    c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
-               for factor in [1, 2, 4]]
-    cl = [c0_list, c1_list]
-    for cc in c0_list + c1_list:
-        cc.compute_statistics()
-
-    factor_list = [1, 2]
-
-    error_list = [[], []]
-    for ii in range(len(factor_list)):
-        factor = factor_list[ii]
-        for jj in [0, 1]:
-            c0 = cl[jj][ii]
-            c1 = cl[jj][ii+1]
-            df0 = h5py.File(c0.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
-            df1 = h5py.File(c1.get_checkpoint_fname(iteration = test_niterations*2*factor), 'r')
-            vel0 = get_velocity(c0, iteration = test_niterations*factor)
-            vel1 = get_velocity(c1, iteration = test_niterations*2*factor)
-            diff = vel1 - vel0
-            vv = np.sum(vel0**2, axis = 3)
-            dd = np.sum(diff**2, axis = 3)
-            vrms = np.sqrt(np.mean(vv))
-            err = np.mean(dd)**0.5 / vrms
-            error_list[jj].append(err)
-            print('maximum error for factor {0} is {1}'.format(
-                factor, np.max(dd**0.5) / vrms))
-            df0.close()
-            df1.close()
-
-    f = plt.figure(figsize = (4, 4))
-    a = f.add_subplot(111)
-    fl = np.array(factor_list).astype(np.float)
-    a.plot(fl,
-           error_list[0],
-           marker = '.',
-           label = 'NSVE')
-    a.plot(fl,
-           error_list[1],
-           marker = '.',
-           label = 'NSE')
-    a.plot(fl, 1e-3 * fl**(-1),
-           dashes = (1, 1),
-           color = 'black',
-           label = '$\propto f^{-1}$')
-    a.plot(fl, 1e-3 * fl**(-2),
-           dashes = (2, 2),
-           color = 'black',
-           label = '$\propto f^{-2}$')
-    a.plot(fl, 1e-3 * fl**(-3),
-           dashes = (3, 3),
-           color = 'black',
-           label = '$\propto f^{-3}$')
-    a.set_ylabel('relative error')
-    a.set_xlabel('resolution factor $f$')
-    a.set_xscale('log')
-    a.set_yscale('log')
-    a.legend(loc = 'best')
-    f.tight_layout()
-    f.savefig('err_vs_dt_field2.pdf')
-    f.savefig('err_vs_dt_field2.svg')
-    plt.close(f)
-    return None
-
-def plot_error_field():
-    c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
-               for factor in [1, 2, 4]]
-    c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
-               for factor in [1, 2, 4]]
-    for cc in c0_list + c1_list:
-        cc.compute_statistics()
-
-    factor_list = [1, 2, 4]
-
-    error_list = []
-    for ii in range(len(factor_list)):
-        factor = factor_list[ii]
-        c0 = c0_list[ii]
-        c1 = c1_list[ii]
-        df0 = h5py.File(c0.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
-        df1 = h5py.File(c1.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
-        vel0 = get_velocity(c0, iteration = test_niterations*factor)
-        vel1 = get_velocity(c1, iteration = test_niterations*factor)
-        diff = vel1 - vel0
-        vv = np.sum(vel0**2, axis = 3)
-        dd = np.sum(diff**2, axis = 3)
-        vrms = np.sqrt(np.mean(vv))
-        err = np.mean(dd)**0.5 / vrms
-        error_list.append(err)
-        print('maximum error for factor {0} is {1}'.format(
-            factor, np.max(dd**0.5) / vrms))
-        df0.close()
-        df1.close()
-
-    f = plt.figure(figsize = (4, 4))
-    a = f.add_subplot(111)
-    fl = np.array(factor_list).astype(np.float)
-    a.plot(fl,
-           error_list,
-           marker = '.',
-           label = 'NSVE vs NSE')
-    a.plot(fl, 1e-2 * fl**(-1),
-           dashes = (1, 1),
-           color = 'black',
-           label = '$\propto f^{-1}$')
-    a.plot(fl, 1e-2 * fl**(-2),
-           dashes = (2, 2),
-           color = 'black',
-           label = '$\propto f^{-2}$')
-    a.plot(fl, 1e-2 * fl**(-3),
-           dashes = (3, 3),
-           color = 'black',
-           label = '$\propto f^{-3}$')
-    a.set_ylabel('relative error')
-    a.set_xlabel('resolution factor $f$')
-    a.set_xscale('log')
-    a.set_yscale('log')
-    a.legend(loc = 'best')
-    f.tight_layout()
-    f.savefig('err_vs_dt_field.pdf')
-    f.savefig('err_vs_dt_field.svg')
-    plt.close(f)
-    return None
-
-def get_velocity(
-        cc,
-        iteration = 0):
-    data_file = h5py.File(
-            cc.get_checkpoint_fname(iteration = iteration),
-            'r')
-    if 'velocity' in data_file.keys():
-        if 'real' in data_file['velocity'].keys():
-            vel = data_file['velocity/real/{0}'.format(iteration)][()]
-        else:
-            cvel = data_file['velocity/complex/{0}'.format(iteration)][()]
-            vel = ift(cvel)
-            #vel *= cc.parameters['nx']*cc.parameters['ny']*cc.parameters['nz']
-    else:
-        assert('complex' in data_file['vorticity'].keys())
-        cvort = data_file['vorticity/complex/{0}'.format(iteration)][()]
-        cvel = compute_curl(cc, cvort, inverse_curl = True)
-        vel = ift(cvel)
-    data_file.close()
-    return vel
-
-def ift(cfield):
-    ff = np.fft.irfftn(cfield, axes = (0, 1, 2))
-    field = np.transpose(ff, (1, 0, 2, 3)).copy()
-    return field
-
-def compute_curl(
-        cc,
-        cfield,
-        inverse_curl = False):
-    kx = cc.get_data_file()['kspace/kx'][()]
-    ky = cc.get_data_file()['kspace/ky'][()]
-    kz = cc.get_data_file()['kspace/kz'][()]
-    ff = cfield.copy()
-    ff[..., 0] = 1j*(ky[:, None, None]*cfield[..., 2] - kz[None, :, None]*cfield[..., 1])
-    ff[..., 1] = 1j*(kz[None, :, None]*cfield[..., 0] - kx[None, None, :]*cfield[..., 2])
-    ff[..., 2] = 1j*(kx[None, None, :]*cfield[..., 1] - ky[:, None, None]*cfield[..., 0])
-    if inverse_curl:
-        k2 = (kx[None, None,    :]**2 +
-              ky[   :, None, None]**2 +
-              kz[None,    :, None]**2)
-        k2[0, 0, 0] = 1.
-        ff /= k2[:, :, :, None]
-    return ff
-
-if __name__ == '__main__':
-    main()
-
-- 
GitLab


From 9d952856fc2251a6ffe6035d7f7d07e447be8ce6 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 18 Jan 2022 19:05:33 +0100
Subject: [PATCH 19/24] fixes Heun test

---
 TurTLE/test/particle_set/NSVEparticle_set.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/TurTLE/test/particle_set/NSVEparticle_set.cpp b/TurTLE/test/particle_set/NSVEparticle_set.cpp
index ee89c2e3..da986349 100644
--- a/TurTLE/test/particle_set/NSVEparticle_set.cpp
+++ b/TurTLE/test/particle_set/NSVEparticle_set.cpp
@@ -205,6 +205,7 @@ int NSVEparticle_set<rnumber>::read_parameters(void)
     this->tracers0_neighbours = hdf5_tools::read_value<int>(parameter_file, "parameters/tracers0_neighbours");
     this->tracers0_smoothness = hdf5_tools::read_value<int>(parameter_file, "parameters/tracers0_smoothness");
     H5Fclose(parameter_file);
+    MPI_Barrier(this->comm);
     return EXIT_SUCCESS;
 }
 
-- 
GitLab


From 41309bce9fd027c3a32049416ec3e51c323723c7 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Wed, 19 Jan 2022 13:10:08 +0100
Subject: [PATCH 20/24] fixes particle convergence test

---
 cpp/field.cpp                                 |   2 +-
 .../particles_temporal.py}                    | 303 ++++++------------
 2 files changed, 101 insertions(+), 204 deletions(-)
 rename examples/{convergence.py => convergence/particles_temporal.py} (55%)

diff --git a/cpp/field.cpp b/cpp/field.cpp
index 6e950ad4..7dd5889f 100644
--- a/cpp/field.cpp
+++ b/cpp/field.cpp
@@ -210,7 +210,7 @@ int field<rnumber, be, fc>::io(
     }
     if (read)
     {
-        DEBUG_MSG("field::io trying to read field from file %s\n", fname.c_str());
+        DEBUG_MSG("field::io trying to read field %s from file %s\n", dset_name.c_str(), fname.c_str());
         assert(file_exists);
         file_id = H5Fopen(fname.c_str(), H5F_ACC_RDONLY, plist_id);
     }
diff --git a/examples/convergence.py b/examples/convergence/particles_temporal.py
similarity index 55%
rename from examples/convergence.py
rename to examples/convergence/particles_temporal.py
index 8d31825d..013126db 100644
--- a/examples/convergence.py
+++ b/examples/convergence/particles_temporal.py
@@ -5,35 +5,30 @@ import matplotlib.pyplot as plt
 import TurTLE
 from TurTLE import DNS, PP
 
-base_niterations = 512
-test_niterations = 32
+base_niterations = 256
 
-nparticles = 4
+nparticles = 1000
 particle_random_seed = 15
 base_particle_dt = 0.5
-test_niterations_particles = 8
+test_niterations_particles = 128
 
 neighbours_smoothness_list = [
-        (1, 0),
-        (2, 1),
+        (1, 1),
         (3, 2)]
 
 def main():
-    generate_initial_conditions()
-
-    run_simulations_field()
-    plot_error_field()
+    #generate_initial_conditions()
 
     #run_simulations_particles()
-    #plot_error_particles()
+    plot_error_particles()
 
-    #plot_traj_particles()
+    plot_traj_particles()
     return None
 
 def generate_initial_conditions():
     # change these two values as neded.
     # number of MPI processes to use
-    nprocesses = 4
+    nprocesses = 8
     # number of OpenMP threads per MPI process to use
     nthreads_per_process = 1
 
@@ -54,7 +49,7 @@ def generate_initial_conditions():
             '--niter_todo', '{0}'.format(base_niterations),
             '--niter_out', '{0}'.format(base_niterations),
             '--overwrite-src-parameters',
-            '--kMeta',  '2.',
+            '--kMeta',  '1.',
             '--niter_stat', '16',
             '--checkpoints_per_file', '{0}'.format(16)])
 
@@ -74,170 +69,18 @@ def generate_initial_conditions():
     # we don't need to update "checkpoint" file after "get_velocity"
     return None
 
-def run_simulations_field():
-    # change these two values as neded.
-    # number of MPI processes to use
-    nprocesses = 4
-    # number of OpenMP threads per MPI process to use
-    nthreads_per_process = 1
-
-# 1. Run NSVE for the three resolutions.
-    for factor in [1, 2, 4]:
-        # create dns object
-        cc = DNS()
-        # launch simulation
-        cc.launch([
-                'NSVE',
-                '-n', '{0}'.format(factor*32),
-                '--np', '{0}'.format(nprocesses),
-                '--ntpp', '{0}'.format(nthreads_per_process),
-                '--src-simname', 'base',
-                '--src-iteration', '{0}'.format(base_niterations),
-                '--simname', 'nsve_{0}x'.format(factor),
-                '--precision', 'double',
-                '--dtfactor', '{0}'.format(0.3 / factor),
-                '--kMeta', '{0}'.format(factor*1.0),
-                '--niter_todo', '{0}'.format(test_niterations*factor),
-                '--niter_out', '{0}'.format(test_niterations*factor),
-                '--niter_stat', '{0}'.format(4*factor)])
-
-# 2. Run NSE for the three resolutions.
-    for factor in [1, 2, 4]:
-        # create dns object
-        cc = DNS()
-        # launch simulation
-        cc.launch([
-                'NSE',
-                '-n', '{0}'.format(factor*32),
-                '--np', '{0}'.format(nprocesses),
-                '--ntpp', '{0}'.format(nthreads_per_process),
-                '--src-simname', 'base',
-                '--src-iteration', '{0}'.format(base_niterations),
-                '--simname', 'nse_{0}x'.format(factor),
-                '--precision', 'double',
-                '--dtfactor', '{0}'.format(0.3 / factor),
-                '--kMeta', '{0}'.format(factor*1.0),
-                '--niter_todo', '{0}'.format(test_niterations*factor),
-                '--niter_out', '{0}'.format(test_niterations*factor),
-                '--niter_stat', '{0}'.format(4*factor)])
-    return None
-
-def plot_error_field():
-    c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
-               for factor in [1, 2, 4]]
-    c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
-               for factor in [1, 2, 4]]
-    for cc in c0_list + c1_list:
-        cc.compute_statistics()
-
-    factor_list = [1, 2, 4]
-
-    error_list = []
-    for ii in range(len(factor_list)):
-        factor = factor_list[ii]
-        c0 = c0_list[ii]
-        c1 = c1_list[ii]
-        df0 = h5py.File(c0.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
-        df1 = h5py.File(c1.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
-        vel0 = get_velocity(c0, iteration = test_niterations*factor)
-        vel1 = get_velocity(c1, iteration = test_niterations*factor)
-        diff = vel1 - vel0
-        vv = np.sqrt(np.sum(vel0**2, axis = 3))
-        dd = np.sqrt(np.sum(diff**2, axis = 3))
-        err = np.mean(dd / vv)
-        error_list.append(err)
-        print('maximum error for factor {0} is {1}'.format(
-            factor, np.max(dd / vv)))
-        df0.close()
-        df1.close()
-
-    f = plt.figure(figsize = (4, 4))
-    a = f.add_subplot(111)
-    fl = np.array(factor_list).astype(np.float)
-    a.plot(fl,
-           error_list,
-           marker = '.',
-           label = 'NSVE vs NSE')
-    a.plot(fl, 1e-2 * fl**(-1),
-           dashes = (1, 1),
-           color = 'black',
-           label = '$\propto f^{-1}$')
-    a.plot(fl, 1e-2 * fl**(-2),
-           dashes = (2, 2),
-           color = 'black',
-           label = '$\propto f^{-2}$')
-    a.plot(fl, 1e-2 * fl**(-3),
-           dashes = (3, 3),
-           color = 'black',
-           label = '$\propto f^{-3}$')
-    a.set_ylabel('relative error')
-    a.set_xlabel('resolution factor $f$')
-    a.set_xscale('log')
-    a.set_yscale('log')
-    a.legend(loc = 'best')
-    f.tight_layout()
-    f.savefig('err_vs_dt_field.pdf')
-    f.savefig('err_vs_dt_field.svg')
-    plt.close(f)
-    return None
-
-def get_velocity(
-        cc,
-        iteration = 0):
-    data_file = h5py.File(
-            cc.get_checkpoint_fname(iteration = iteration),
-            'r')
-    if 'velocity' in data_file.keys():
-        if 'real' in data_file['velocity'].keys():
-            vel = data_file['velocity/real/{0}'.format(iteration)][()]
-        else:
-            cvel = data_file['velocity/complex/{0}'.format(iteration)][()]
-            vel = ift(cvel)
-            #vel *= cc.parameters['nx']*cc.parameters['ny']*cc.parameters['nz']
-    else:
-        assert('complex' in data_file['vorticity'].keys())
-        cvort = data_file['vorticity/complex/{0}'.format(iteration)][()]
-        cvel = compute_curl(cc, cvort, inverse_curl = True)
-        vel = ift(cvel)
-    data_file.close()
-    return vel
-
-def ift(cfield):
-    ff = np.fft.irfftn(cfield, axes = (0, 1, 2))
-    field = np.transpose(ff, (1, 0, 2, 3)).copy()
-    return field
-
-def compute_curl(
-        cc,
-        cfield,
-        inverse_curl = False):
-    kx = cc.get_data_file()['kspace/kx'][()]
-    ky = cc.get_data_file()['kspace/ky'][()]
-    kz = cc.get_data_file()['kspace/kz'][()]
-    ff = cfield.copy()
-    ff[..., 0] = 1j*(ky[:, None, None]*cfield[..., 2] - kz[None, :, None]*cfield[..., 1])
-    ff[..., 1] = 1j*(kz[None, :, None]*cfield[..., 0] - kx[None, None, :]*cfield[..., 2])
-    ff[..., 2] = 1j*(kx[None, None, :]*cfield[..., 1] - ky[:, None, None]*cfield[..., 0])
-    if inverse_curl:
-        k2 = (kx[None, None,    :]**2 +
-              ky[   :, None, None]**2 +
-              kz[None,    :, None]**2)
-        k2[0, 0, 0] = 1.
-        ff /= k2[:, :, :, None]
-    return ff
-
 def run_simulations_particles():
     # change these two values as neded.
     # number of MPI processes to use
-    nprocesses = 4
+    nprocesses = 8
     # number of OpenMP threads per MPI process to use
-    nthreads_per_process = 3
+    nthreads_per_process = 1
 
 # 1. Run NSVEparticles for a few iterations, to build up rhs values, consistent
 #    with the relevant velocity field.
     # create dns object
     # launch simulation
-    factor = 2
+    factor = 1
     for neighbours, smoothness in neighbours_smoothness_list:
         interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
         cc = DNS()
@@ -251,7 +94,7 @@ def run_simulations_particles():
             '--simname', 'nsvep_base_' + interp_name,
             '--precision', 'double',
             '--dtfactor', '{0}'.format(base_particle_dt/4),
-            '--kMeta', '{0}'.format(2.0),
+            '--kMeta', '{0}'.format(factor*1.0),
             '--niter_todo', '{0}'.format(20),
             '--niter_out', '{0}'.format(1),
             '--niter_stat', '{0}'.format(1),
@@ -259,7 +102,7 @@ def run_simulations_particles():
             '--niter_part', '{0}'.format(1),
             '--tracers0_neighbours', '{0}'.format(neighbours),
             '--tracers0_smoothness', '{0}'.format(smoothness),
-            '--tracers0_integration_steps', '5',
+            '--tracers0_integration_steps', '4',
             '--cpp_random_particles', '{0}'.format(particle_random_seed)])
 
 # 2. Prepare initial conditions
@@ -281,9 +124,9 @@ def run_simulations_particles():
                     'nsvep_base_{0}_checkpoint_0.h5'.format(interp_name), 'r')
             rhs = source_file['tracers0/rhs/16'][()]
             for tt in range(1, rhs.shape[0]):
-                ii = 16 - tt*factor + 1
-                print(factor, tt, ii)
-                rhs[tt] = source_file['tracers0/rhs/{0}'.format(16 - tt*factor + 1)][1]
+                ii = 16 - tt*4//factor + 1
+                #print(factor, tt, ii)
+                rhs[tt] = source_file['tracers0/rhs/{0}'.format(16 - tt*4//factor + 1)][1]
             df['tracers0/rhs/{0}'.format(8*factor)] = rhs
             df.close()
 
@@ -296,31 +139,42 @@ def run_simulations_particles():
         # We do this to emphasize the one-to-one correspondence between
         # neighbours and kernel size, and smoothness and order of polynomial.
         for neighbours, smoothness in neighbours_smoothness_list:
+            interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+            source_file = h5py.File('nsvep_base_{0}.h5'.format(interp_name), 'r')
             # create dns object
             cc = DNS()
             # launch simulation
             cc.launch([
                     'NSVEparticles',
-                    '-n', '{0}'.format(64),
+                    '-n', '{0}'.format(source_file['parameters/nx'][()]),
                     '--np', '{0}'.format(nprocesses),
                     '--ntpp', '{0}'.format(nthreads_per_process),
-                    '--simname', 'nsvep_{0}x_I{1}O{2}'.format(
-                        factor,
-                        2*neighbours+2,
-                        2*smoothness+1),
+                    '--simname', 'nsvep_{0}x_{1}'.format(factor, interp_name),
                     '--precision', 'double',
                     '--dtfactor', '{0}'.format(base_particle_dt/factor),
-                    '--kMeta', '{0}'.format(2.0),
                     '--niter_todo', '{0}'.format(test_niterations_particles*factor+8*factor),
                     '--niter_out', '{0}'.format(test_niterations_particles*factor+8*factor),
-                    '--niter_stat', '{0}'.format(4*factor),
+                    '--niter_stat', '{0}'.format(1),
+                    ## ensure fluid physics is the same
+                    '--dealias_type', '{0}'.format(source_file['parameters/dealias_type'][()]),
+                    '--energy', '{0}'.format(source_file['parameters/energy'][()]),
+                    '--famplitude', '{0}'.format(source_file['parameters/famplitude'][()]),
+                    '--fk0', '{0}'.format(source_file['parameters/fk0'][()]),
+                    '--fk1', '{0}'.format(source_file['parameters/fk1'][()]),
+                    '--fmode', '{0}'.format(source_file['parameters/fmode'][()]),
+                    '--friction_coefficient', '{0}'.format(source_file['parameters/friction_coefficient'][()]),
+                    '--injection_rate', '{0}'.format(source_file['parameters/injection_rate'][()]),
+                    '--nu', '{0}'.format(source_file['parameters/nu'][()]),
+                    '--forcing_type', '{0}'.format(str(source_file['parameters/forcing_type'][()], 'ascii')),
+                    ## particle params
                     '--nparticles', '{0}'.format(nparticles),
-                    '--niter_part', '{0}'.format(2*factor),
+                    '--niter_part', '{0}'.format(1),
                     '--tracers0_neighbours', '{0}'.format(neighbours),
                     '--tracers0_smoothness', '{0}'.format(smoothness),
-                    '--tracers0_integration_steps', '5',
+                    '--tracers0_integration_steps', '4',
                     '--cpp_random_particles', '0'], # turn off cpp particle initialization
                     iter0 = 8*factor)
+            source_file.close()
     return None
 
 def plot_error_particles():
@@ -355,34 +209,25 @@ def plot_error_particles():
         err_mean_list = np.array(err_mean_list)
         a.plot(factor_list, err_max_list, marker = '.', label = 'max error ' + interp_name)
         a.plot(factor_list, err_mean_list, marker = '.', label = 'mean error ' + interp_name)
-    a.plot(factor_list,
-           (3e-5)*factor_list**(-2),
-           color = 'black',
-           dashes = (2, 2),
-           label = '$\propto f^{-2}$')
-    a.plot(factor_list,
-           (3e-5)*factor_list**(-3),
-           color = 'black',
-           dashes = (3, 3),
-           label = '$\propto f^{-3}$')
-    a.plot(factor_list,
-           (3e-6)*factor_list**(-4),
-           color = 'black',
-           dashes = (4, 4),
-           label = '$\propto f^{-4}$')
+    for ee in [2, 3, 4]:
+        a.plot(factor_list,
+               (1e-4)*factor_list**(-ee),
+               color = 'black',
+               dashes = (ee, ee),
+               label = '$\propto f^{{-{0}}}$'.format(ee))
     a.set_xscale('log')
     a.set_yscale('log')
     a.set_xlabel('resolution factor f')
     a.set_ylabel('absolute trajectory error [DNS units]')
-    a.legend(loc = 'best')
+    a.legend(loc = 'best', fontsize = 7)
     f.tight_layout()
     f.savefig('err_vs_dt_particle.pdf')
-    f.savefig('err_vs_dt_particle.png')
     f.savefig('err_vs_dt_particle.svg')
     plt.close(f)
     return None
 
 def plot_traj_particles():
+    ###########################################################################
     f = plt.figure()
     a = f.add_subplot(111)
     for neighbours, smoothness in neighbours_smoothness_list:
@@ -399,21 +244,73 @@ def plot_traj_particles():
                    dashes = (4/factor, 3, 4/factor),
                    alpha = 0.2)
             #a.plot(xx[:, 0], xx[:, 1], dashes = (4/factor, 3, 4/factor), alpha = 0.2)
-    a.legend(loc = 'best')
+    a.legend(loc = 'best', fontsize = 7)
     a.set_xlabel('$x$ [code units]')
     a.set_ylabel('$y$ [code units]')
     f.tight_layout()
     f.savefig('trajectories.pdf')
     f.savefig('trajectories.svg')
     plt.close(f)
+    ###########################################################################
+    ###########################################################################
+    traj_index = 3
+    for neighbours, smoothness in neighbours_smoothness_list:
+        interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+        cc = DNS(simname = 'nsvep_base_' + interp_name)
+        cc.compute_statistics()
+        xx_base = read_trajectory(cc, traj_index, iter0 = 0, dset_name = 'velocity')
+        iter0 = 16
+        tt_base = np.array(range(iter0, iter0 + xx_base.shape[0]))*cc.parameters['dt']
+        f = plt.figure()
+        ax_counter = 1
+        for factor in [1, 2, 4]:
+            a = f.add_subplot(310 + ax_counter)
+            ax_counter += 1
+            a.plot(tt_base,
+                   xx_base[:, 2],
+                   label = 'base_' + interp_name,
+                   marker = '+',
+                   linewidth = 0.5,
+                   alpha = 0.2)
+            cc = DNS(simname = 'nsvep_{0}x_'.format(factor) + interp_name)
+            cc.compute_statistics(iter0 = 8*factor)
+            xx = read_trajectory(cc, traj_index, iter0 = 8*factor, dset_name = 'velocity')
+            tt = np.array(range(8*factor, xx.shape[0]+8*factor))*cc.parameters['dt']
+            a.plot(tt,
+                   xx[:, 2],
+                   label = interp_name + '$f = {0}$'.format(factor),
+                   marker = 'x',
+                   dashes = (4/factor, 3, 4/factor),
+                   alpha = 0.2)
+            df = h5py.File(cc.simname + '_checkpoint_0.h5', 'r')
+            xx = df['tracers0/rhs/{0}'.format(8*factor)][()]
+            for rhs_index in [1, 2, 3]:
+                a.scatter((8*factor - rhs_index)*cc.parameters['dt'],
+                          xx[rhs_index, traj_index, 2],
+                          marker = '*',
+                          zorder = -10,
+                          alpha = 0.5,
+                          color = 'black')
+            df.close()
+            a.legend(loc = 'best', fontsize = 7)
+            a.set_xlabel('$t$ [code units]')
+            a.set_ylabel('$v_y$ [code units]')
+        f.tight_layout()
+        f.savefig('velocities_{0}.pdf'.format(interp_name))
+        plt.close(f)
+    ###########################################################################
     return None
 
-def read_trajectory(cc, traj_index, iter0):
+def read_trajectory(
+        cc,
+        traj_index,
+        iter0,
+        dset_name = 'position'):
     cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
     df = cc.get_particle_file()
     xx = []
     for ii in range(iter0, cc.get_data_file()['iteration'][()]+1, cc.parameters['niter_part']):
-        xx.append(df['tracers0/position/{0}'.format(ii)][traj_index])
+        xx.append(df['tracers0/' + dset_name + '/{0}'.format(ii)][traj_index])
     df.close()
     return np.array(xx)
 
-- 
GitLab


From 8017d1d3800446593c7297375d5529fd6852d625 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Thu, 20 Jan 2022 10:03:50 +0100
Subject: [PATCH 21/24] [wip] updates convergence text

---
 TurTLE/DNS.py                                 |   9 +-
 TurTLE/PP.py                                  |   9 +-
 TurTLE/tools.py                               |   7 +-
 documentation/index.rst                       |   2 +
 documentation/sphinx_static/bibliography.rst  |  21 +
 documentation/sphinx_static/convergence.rst   | 616 ++----------------
 .../sphinx_static/convergence_fields.rst      | 281 ++++++++
 .../sphinx_static/convergence_particles.rst   | 294 +++++++++
 .../sphinx_static/err_vs_dt_field.svg         | 442 +++++++++----
 .../sphinx_static/err_vs_dt_particle.svg      | 524 ++++++++++-----
 examples/convergence/fields_temporal.py       |   6 +-
 examples/convergence/particles_temporal.py    |  23 +-
 12 files changed, 1355 insertions(+), 879 deletions(-)
 create mode 100644 documentation/sphinx_static/bibliography.rst
 create mode 100644 documentation/sphinx_static/convergence_fields.rst
 create mode 100644 documentation/sphinx_static/convergence_particles.rst

diff --git a/TurTLE/DNS.py b/TurTLE/DNS.py
index 99962bf5..d2f7dba6 100644
--- a/TurTLE/DNS.py
+++ b/TurTLE/DNS.py
@@ -387,7 +387,7 @@ class DNS(_code):
         Further computation of statistics based on the contents of
         ``simname_cache.h5``.
         Standard quantities are as follows
-        (consistent with [Ishihara]_):
+        (consistent with [ishihara2007jfm]_):
 
         .. math::
 
@@ -403,13 +403,6 @@ class DNS(_code):
             Re = \\frac{U_{\\textrm{int}} L_{\\textrm{int}}}{\\nu}, \\hskip
             .5cm
             R_{\\lambda} = \\frac{U_{\\textrm{int}} \\lambda}{\\nu}
-
-        .. [Ishihara] T. Ishihara et al,
-                      *Small-scale statistics in high-resolution direct numerical
-                      simulation of turbulence: Reynolds number dependence of
-                      one-point velocity gradient statistics*.
-                      J. Fluid Mech.,
-                      **592**, 335-366, 2007
         """
         self.statistics['Uint(t)'] = np.sqrt(2*self.statistics['energy(t)'] / 3)
         for key in ['energy',
diff --git a/TurTLE/PP.py b/TurTLE/PP.py
index 4703d26a..4699b52d 100644
--- a/TurTLE/PP.py
+++ b/TurTLE/PP.py
@@ -238,7 +238,7 @@ class PP(_code):
         Further computation of statistics based on the contents of
         ``simname_postprocess.h5``.
         Standard quantities are as follows
-        (consistent with [Ishihara]_):
+        (consistent with [ishihara2007jfm]_):
 
         .. math::
 
@@ -254,13 +254,6 @@ class PP(_code):
             Re = \\frac{U_{\\textrm{int}} L_{\\textrm{int}}}{\\nu}, \\hskip
             .5cm
             R_{\\lambda} = \\frac{U_{\\textrm{int}} \\lambda}{\\nu}
-
-        .. [Ishihara] T. Ishihara et al,
-                      *Small-scale statistics in high-resolution direct numerical
-                      simulation of turbulence: Reynolds number dependence of
-                      one-point velocity gradient statistics*.
-                      J. Fluid Mech.,
-                      **592**, 335-366, 2007
         """
         for key in ['energy', 'enstrophy']:
             self.statistics[key + '(t)'] = (self.statistics['dk'] *
diff --git a/TurTLE/tools.py b/TurTLE/tools.py
index 7ddbf32d..6d386985 100644
--- a/TurTLE/tools.py
+++ b/TurTLE/tools.py
@@ -230,13 +230,8 @@ def get_fornberg_coeffs(
     """compute finite difference coefficients
 
     Compute finite difference coefficients for a generic grid specified
-    by ``x``, according to [Fornberg]_.
+    by ``x``, according to [fornberg1988mc]_.
     The function is used by :func:`particle_finite_diff_test`.
-
-    .. [Fornberg] B. Fornberg,
-                  *Generation of Finite Difference Formulas on Arbitrarily Spaced Grids*.
-                  Mathematics of Computation,
-                  **51:184**, 699-706, 1988
     """
     N = len(a) - 1
     d = []
diff --git a/documentation/index.rst b/documentation/index.rst
index 62a336f0..7788a2f2 100644
--- a/documentation/index.rst
+++ b/documentation/index.rst
@@ -20,6 +20,8 @@ Contents:
 
     sphinx_static/convergence
 
+    sphinx_static/bibliography
+
 
 Indices and tables
 ==================
diff --git a/documentation/sphinx_static/bibliography.rst b/documentation/sphinx_static/bibliography.rst
new file mode 100644
index 00000000..1b90b082
--- /dev/null
+++ b/documentation/sphinx_static/bibliography.rst
@@ -0,0 +1,21 @@
+Bibliography
+============
+
+.. [fornberg1988mc] B. Fornberg,
+    *Generation of Finite Difference Formulas on Arbitrarily Spaced Grids*.
+    Mathematics of Computation,
+    **51:184**, 699-706, 1988
+
+.. [ishihara2007jfm] T. Ishihara et al,
+    *Small-scale statistics in high-resolution direct numerical
+    simulation of turbulence: Reynolds number dependence of
+    one-point velocity gradient statistics*.
+    J. Fluid Mech.,
+    **592**, 335-366, 2007
+
+.. [lalescu2010jcp] C. C. Lalescu, B. Teaca and D. Carati
+    *Implementation of high order spline interpolations for tracking test
+    particles in discretized fields*.
+    J. Comput. Phys.
+    **229**, 5862-5869, 2010
+
diff --git a/documentation/sphinx_static/convergence.rst b/documentation/sphinx_static/convergence.rst
index f0c296c7..4c05215f 100644
--- a/documentation/sphinx_static/convergence.rst
+++ b/documentation/sphinx_static/convergence.rst
@@ -10,592 +10,88 @@ implementations.
 Navier-Stokes solution
 ----------------------
 
-Since TurTLE contains solvers of the Navier Stokes equations in both
-velocity ("NSE") and vorticity formulation ("NSVE"), this allows for a direct
-convergence test: one should use both solvers with identical parameters, and
-compare solutions as the resolution is varied.
-
-Notes:
-
-    * we are discussing a partial differential equation, therefore
-      when we test for convergence we will increase both spatial and
-      temporal resolution.
-
-    * we will test convergence properties for a "statistically
-      stationary initial condition", since the smoothness properties of
-      the field will influence convergence properties in general.
-
-In practice, we compute numerical solutions of NSE and NSVE, convert the
-vorticity of the latter simulation to a velocity field, and compare
-them.
-The time-stepping method is the same 3rd order Runge Kutta algorithm,
-therefore we expect a third order dependency of the "error" on the
-time-step.
-The "spatial discretization" is identical in both cases, since we use
-the same underlying pseudo-spectral framework (including the dealiasing
+TurTLE implements two distinct solvers of the Navier-Stokes equations:
+one for their vorticity formulation, and one for the more common velocity
+formulation.
+While there are inescapable differences in the two implementations, they
+both use the same time-stepping algorithm (a 3rd order RungeKutta
 method).
 
-The observed numerical differences are due to the simulation of technically
-different PDEs: different arithmetical operations are performed despite
-the fact that "NSVE is simply the curl of NSE".
-In turn, the effects of finite numerical precision and discretization
-are brought into the computation differently, leading to systematic
-deviations between the two DNS.
+We test convergence properties for a "statistically stationary initial
+condition", since the smoothness properties of the field will influence
+convergence properties in general.
+As an example of the variety of questions that we can address with
+TurTLE, we also perform a direct comparison of the NSVE (vorticity
+solver) and NSE (velocity solver) results.
+
+A basic Python script that performs this convergence test is provided
+under `examples/convergence/fields_temporal.py`, and it is discussed
+below.
+In brief, simulations are performed using the same initial conditions,
+but different time steps.
+Error estimates are computed as differences between the different
+solutions.
+The figure shows the L2 norm of these differences, normalized by
+the root-mean-squared velocity magnitude.
+Note that the actual value of this "relative error" is irrelevant
+(it depends on total integration time, spatial resolution, etc), but the
+plot shows that (1) solutions converge with the 3rd order of the
+timestep and (2) the systematic difference between NSE and NSVE behaves
+quite differently from the two individual error estimates.
 
+.. image:: err_vs_dt_field.svg
 
 Particle tracking errors
 ------------------------
 
-For particle tracking, we use an alternative approach: use the same
-algorithm, and compare results obtained with different resolutions.
-Since we are discussing the numerical solution of an ODE where the right
-hand side is itself a numerical solution from a PDE, we in fact modify
-the resolution of the field PDE (i.e. spatial resolution as well).
-
 There is a more complex mechanism that generates numerical errors for
 particle tracking in this setting.
 In particular, the accuracy of the field itself is relevant, as well as
 the accuracy of the interpolation method coupled to the ODE solver.
 For instance the default particle tracking solver is a 4th order
-Adams Bashforth method in TurTLE, which seems unnecessary since the
+Adams Bashforth method in TurTLE, which seems at first unnecessary since the
 fluid only provides a 3rd order solution.
 The default interpolation method is that of cubic splines, which should
-in fact limit ODE error convergence to 2nd order (because convergence
+in principle limit ODE error convergence to 2nd order (because convergence
 relies on existence of relevant Taylor expansion terms, and interpolated
 fields only have a finite number of continuous derivatives).
 This discussion is briefly continued below, but we will not do it justice
 in this tutorial.
 
-
-Python code
------------
-
-We present here a Python script that performs simple convergence tests
-with TurTLE. The script itself is provided as the file
-`examples/convergence.py`.
-
-The preamble imports standard packages, as well as TurTLE itself:
-
-.. code:: python
-
-    import numpy as np
-    import h5py
-    import matplotlib.pyplot as plt
-
-    import TurTLE
-    from TurTLE import DNS, PP
-
-As explained above, we should test convergence for a statistically
-stationary regime.
-The base simulation will use a real-space grid of :math:`32 \times 32 \times 32` points,
-and experience shows that quasistationarity is reached for this
-problem-size in a few hundred iterations (here `base_niterations`).
-For the convergence test itself, we use a relatively small number
-of iterations (i.e. `test_niterations`), otherwise deterministic chaos will dominate the
-difference between alternative solutions (rather than numerical integration
-errors).
-
-.. code:: python
-
-   base_niterations = 256
-   test_niterations = 32
-
-We consider :math:`10^5` particles, and we also choose a specific random
-seed for their initial locations.
-
-.. code:: python
-
-   nparticles = 100000
-   particle_random_seed = 15
-
-We distinguish a few steps of this script.
-First, we generate the statistically quasistationary regime.
-Second, we run the fluid solver and analyze the results.
-Finally, we run the particle simulations and also analyze these results.
-"Analysis" refers here to simple error plots, but more elaborate
-postprocessing can be performed if needed.
-
-.. code:: python
-
-    def main():
-        generate_initial_conditions()
-
-        run_simulations_field()
-        plot_error_field()
-
-        run_simulations_particles()
-        plot_error_particles()
-        return None
-
-`generate_initial_conditions` performs a few calls to C++ executable
-codes generated with TurTLE. In brief, it
-
-    * generates a velocity field in a quasistationary Navier-Stokes
-      regime (using the NSVE solver).
-    * uses Fourier interpolation to double and quadruple the initial
-      resolution, yielding 3 vorticity fields "1x", "2x" and "4x".
-    * generates the corresponding velocity fields needed for the NSE solver
-
-We use the `launch` method of the `DNS` and `PP` Python
-classes --- the wrappers around the C++ `direct_numerical_simulation`
-and `postprocess` functionality.
-This means that the current Python code may be translated to a shell
-script directly, only by writing out the arguments (rather than placing
-them in a list of Python strings).
-The full function is given below:
-
-.. code:: python
-
-    def generate_initial_conditions():
-        # change these two values as neded.
-        # number of MPI processes to use
-        nprocesses = 4
-        # number of OpenMP threads per MPI process to use
-        nthreads_per_process = 2
-
-    # 1. Generate quasistationary state to use for initial conditions.
-        # create a dns object
-        c0 = DNS()
-        # launch the simulation
-        c0.launch([
-                'NSVE',
-                '-n', '32',
-                '--np', '{0}'.format(nprocesses),
-                '--ntpp', '{0}'.format(nthreads_per_process),
-                '--precision', 'double',
-                '--src-simname', 'B32p1e4',
-                '--src-wd', TurTLE.data_dir,
-                '--src-iteration', '0',
-                '--simname', 'base_1x',
-                '--niter_todo', '{0}'.format(base_niterations),
-                '--niter_out', '{0}'.format(base_niterations),
-                '--overwrite-src-parameters',
-                '--kMeta',  '1.0',
-                '--niter_stat', '16',
-                '--checkpoints_per_file', '{0}'.format(16)])
-
-    # 2. Generate initial conditions for NSVE runs at 2x and 4x the
-    #    base resolution.
-        for factor in [2, 4]:
-            # create postprocess object
-            cc = PP()
-            # create a larger version of the field at final iteration
-            cc.launch([
-                    'resize',
-                    '--np', '{0}'.format(nprocesses),
-                    '--ntpp', '{0}'.format(nthreads_per_process),
-                    '--simname', 'base_1x',
-                    '--precision', 'double',
-                    '--iter0', '{0}'.format(base_niterations),
-                    '--iter1', '{0}'.format(base_niterations),
-                    '--new_nx', '{0}'.format(factor*32),
-                    '--new_ny', '{0}'.format(factor*32),
-                    '--new_nz', '{0}'.format(factor*32),
-                    '--new_simname', 'base_{0}x'.format(factor)])
-            # update "checkpoint" file, so we can use "base__x" as "src-simname"
-            # this is needed after "resize"
-            f1 = h5py.File('base_{0}x_checkpoint_0.h5'.format(factor), 'a')
-            f1['vorticity/complex/{0}'.format(base_niterations)] = h5py.ExternalLink(
-                'base_{0}x_fields.h5'.format(factor),
-                'vorticity/complex/{0}'.format(base_niterations))
-            f1.close()
-
-    # 3. Generate initial conditions for NSE runs at 1x, 2x and 4x the
-    #    base resolution.
-        for factor in [1, 2, 4]:
-            # create postprocess object
-            cc = PP()
-            # compute velocity field at last iteration
-            cc.launch([
-                    'get_velocity',
-                    '--np', '{0}'.format(nprocesses),
-                    '--ntpp', '{0}'.format(nthreads_per_process),
-                    '--simname', 'base_{0}x'.format(factor),
-                    '--precision', 'double',
-                    '--iter0', '{0}'.format(base_niterations),
-                    '--iter1', '{0}'.format(base_niterations)])
-            # we don't need to update "checkpoint" file after "get_velocity"
-        return None
-
-`run_simulations_field` runs six DNS (3 resolutions for each of NSE and
-NSVE solvers):
-
-
-.. code:: python
-
-    def run_simulations_field():
-        # change these two values as neded.
-        # number of MPI processes to use
-        nprocesses = 4
-        # number of OpenMP threads per MPI process to use
-        nthreads_per_process = 2
-
-    # 1. Run NSVE for the three resolutions.
-        for factor in [1, 2, 4]:
-            # create dns object
-            cc = DNS()
-            # launch simulation
-            cc.launch([
-                    'NSVE',
-                    '-n', '{0}'.format(factor*32),
-                    '--np', '{0}'.format(nprocesses),
-                    '--ntpp', '{0}'.format(nthreads_per_process),
-                    '--src-simname', 'base_{0}x'.format(factor),
-                    '--src-iteration', '{0}'.format(base_niterations),
-                    '--simname', 'nsve_{0}x'.format(factor),
-                    '--precision', 'double',
-                    '--dtfactor', '0.3',
-                    '--kMeta', '{0}'.format(1.0*factor),
-                    '--niter_todo', '{0}'.format(test_niterations*factor),
-                    '--niter_out', '{0}'.format(test_niterations*factor),
-                    '--niter_stat', '{0}'.format(4*factor)])
-
-    # 2. Run NSE for the three resolutions.
-        for factor in [1, 2, 4]:
-            # create dns object
-            cc = DNS()
-            # launch simulation
-            cc.launch([
-                    'NSE',
-                    '-n', '{0}'.format(factor*32),
-                    '--np', '{0}'.format(nprocesses),
-                    '--ntpp', '{0}'.format(nthreads_per_process),
-                    '--src-simname', 'base_{0}x'.format(factor),
-                    '--src-iteration', '{0}'.format(base_niterations),
-                    '--simname', 'nse_{0}x'.format(factor),
-                    '--precision', 'double',
-                    '--dtfactor', '0.3',
-                    '--kMeta', '{0}'.format(1.0*factor),
-                    '--niter_todo', '{0}'.format(test_niterations*factor),
-                    '--niter_out', '{0}'.format(test_niterations*factor),
-                    '--niter_stat', '{0}'.format(4*factor)])
-        return None
-
-Once the runs are finished successfully, the code calls
-`plot_error_field`.
-Here we first read the output of the six different runs, and we compute
-their statistics, since the call to `compute_statistics` will in fact also
-perform some sanity checks on the output.
-We then read the velocity fields computed by `NSVE` and `NSE`, and
-compare them (please see the code for `get_velocity` below).
-The results are plotted together with a 3rd order error estimate, for
-subsequent assessment.
-
-.. code:: python
-
-    def plot_error_field():
-        c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
-                   for factor in [1, 2, 4]]
-        c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
-                   for factor in [1, 2, 4]]
-        for cc in c0_list + c1_list:
-            cc.compute_statistics()
-
-        factor_list = [1, 2, 4]
-
-        error_list = []
-        for ii in range(len(factor_list)):
-            factor = factor_list[ii]
-            c0 = c0_list[ii]
-            c1 = c1_list[ii]
-            df0 = h5py.File(c0.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
-            df1 = h5py.File(c1.get_checkpoint_fname(iteration = test_niterations*factor), 'r')
-            vel0 = get_velocity(c0, iteration = test_niterations*factor)
-            vel1 = get_velocity(c1, iteration = test_niterations*factor)
-            diff = vel1 - vel0
-            vv = np.sqrt(np.sum(vel0**2, axis = 3))
-            dd = np.sqrt(np.sum(diff**2, axis = 3))
-            err = np.max(dd / vv)
-            error_list.append(err)
-            print('maximum error for factor {0} is {1}'.format(
-                factor, err))
-            df0.close()
-            df1.close()
-
-        f = plt.figure(figsize = (4, 4))
-        a = f.add_subplot(111)
-        fl = np.array(factor_list).astype(np.float)
-        a.plot(fl,
-               error_list,
-               marker = '.',
-               label = 'NSVE vs NSE')
-        a.plot(fl, fl**(-3),
-               dashes = (1, 1),
-               color = 'black',
-               label = '$\propto f^{-3}$')
-        a.set_ylabel('relative error')
-        a.set_xlabel('resolution factor $f$')
-        a.set_xscale('log')
-        a.set_yscale('log')
-        a.legend(loc = 'best')
-        f.tight_layout()
-        f.savefig('field_err_vs_dt.pdf')
-        f.savefig('field_err_vs_dt.png')
-        plt.close(f)
-        return None
-
-.. image:: err_vs_dt_field.svg
-
-In the plot, the error for :math:`f = 4` is larger than expected because
-the effects of finite precision arithmetic begin to dominate systematic
-integration errors.
-In practice there are a number of other technical details to consider
-when using resolutions corresponding to :math:`f = 4` (here this means
-:math:`k_M \eta \approx 4`), all of them out of scope for this tutorial.
-
-The `get_velocity` function is slightly more elaborate, as it needs to
-check whether the data comes from an `NSVE` run or an `NSE` run.
-Furthermore, in the case of an `NSVE` run we need to explicitly invert
-the curl operator within the Python code in order to obtain the
-velocity.
-Otherwise, we perform an inverse FFT using `numpy`, taking care to
-account for the transposed data layout (which itself is due to the use
-of FFTW).
-
-.. code:: python
-
-    def get_velocity(
-            cc,
-            iteration = 0):
-        data_file = h5py.File(
-                cc.get_checkpoint_fname(iteration = iteration),
-                'r')
-        if 'velocity' in data_file.keys():
-            if 'real' in data_file['velocity'].keys():
-                vel = data_file['velocity/real/{0}'.format(iteration)][()]
-            else:
-                cvel = data_file['velocity/complex/{0}'.format(iteration)][()]
-                vel = ift(cvel)
-                #vel *= cc.parameters['nx']*cc.parameters['ny']*cc.parameters['nz']
-        else:
-            assert('complex' in data_file['vorticity'].keys())
-            cvort = data_file['vorticity/complex/{0}'.format(iteration)][()]
-            cvel = compute_curl(cc, cvort, inverse_curl = True)
-            vel = ift(cvel)
-        data_file.close()
-        return vel
-
-    def ift(cfield):
-        ff = np.fft.irfftn(cfield, axes = (0, 1, 2))
-        field = np.transpose(ff, (1, 0, 2, 3)).copy()
-        return field
-
-    def compute_curl(
-            cc,
-            cfield,
-            inverse_curl = False):
-        kx = cc.get_data_file()['kspace/kx'][()]
-        ky = cc.get_data_file()['kspace/ky'][()]
-        kz = cc.get_data_file()['kspace/kz'][()]
-        ff = cfield.copy()
-        ff[..., 0] = 1j*(ky[:, None, None]*cfield[..., 2] - kz[None, :, None]*cfield[..., 1])
-        ff[..., 1] = 1j*(kz[None, :, None]*cfield[..., 0] - kx[None, None, :]*cfield[..., 2])
-        ff[..., 2] = 1j*(kx[None, None, :]*cfield[..., 1] - ky[:, None, None]*cfield[..., 0])
-        if inverse_curl:
-            k2 = (kx[None, None,    :]**2 +
-                  ky[   :, None, None]**2 +
-                  kz[None,    :, None]**2)
-            k2[0, 0, 0] = 1.
-            ff /= k2[:, :, :, None]
-        return ff
-
-We then define the function that runs the particle simulations,
-`run_simulations_particles`.
-Because we use an Adams-Bashforth method, we need to know the values of
-the particle velocity (i.e. the right-hand-side of the ODE) at previous
-steps.
-TurTLE accomplishes this by using the Euler integration scheme for "time
-step 0", then using a 2nd order Adams-Bashforth, etc, until the desired
-number of right-hand-side values is stored.
-Thus the code first integrates trajectories for 8 iterations, and the
-output will contain the additional information.
-This happens because such information is crucial for checkpointing ---
-i.e. stopping/restarting the simulation at arbitrary iterations without
-affecting the numerical solution.
-
-To put it simply, for the simulation "nsvep_base" the dataset
-"tracers0/rhs/0" contains only zeros, and TurTLE ignores them.
-However, the "tracers0/rhs/8" dataset for simulation "nsvep_1x" contains
-meaningful values (that are used because we request that `iter0` is
-different from 0).
-
-.. code:: python
-
-    def run_simulations_particles():
-        # change these two values as neded.
-        # number of MPI processes to use
-        nprocesses = 4
-        # number of OpenMP threads per MPI process to use
-        nthreads_per_process = 2
-
-    # 1. Run NSVEparticles for resolution 1x, for a few iterations, to build up rhs values.
-        factor = 1
-        # create dns object
-        cc = DNS()
-        # launch simulation
-        cc.launch([
-                'NSVEparticles',
-                '-n', '{0}'.format(factor*32),
-                '--np', '{0}'.format(nprocesses),
-                '--ntpp', '{0}'.format(nthreads_per_process),
-                '--src-simname', 'base_{0}x'.format(factor),
-                '--src-iteration', '{0}'.format(base_niterations),
-                '--simname', 'nsvep_base'.format(factor),
-                '--precision', 'double',
-                '--dtfactor', '0.3',
-                '--kMeta', '{0}'.format(1.0*factor),
-                '--niter_todo', '{0}'.format(8),
-                '--niter_out', '{0}'.format(8),
-                '--niter_stat', '{0}'.format(8),
-                '--nparticles', '{0}'.format(nparticles),
-                '--niter_part', '{0}'.format(8),
-                '--cpp_random_particles', '{0}'.format(particle_random_seed)])
-
-    # 2. Prepare initial conditions
-        for factor in [1, 2, 4]:
-            df = h5py.File('nsvep_{0}x_checkpoint_0.h5'.format(factor), 'w')
-            # field
-            df['vorticity/complex/{0}'.format(8*factor)] = h5py.ExternalLink(
-                'base_{0}x_checkpoint_0.h5'.format(factor),
-                'vorticity/complex/{0}'.format(base_niterations))
-            # particles
-            df['tracers0/state/{0}'.format(8*factor)] = h5py.ExternalLink(
-                    'nsvep_base_checkpoint_0.h5',
-                    'tracers0/state/8')
-            df['tracers0/rhs/{0}'.format(8*factor)] = h5py.ExternalLink(
-                    'nsvep_base_checkpoint_0.h5',
-                    'tracers0/rhs/8')
-            df.close()
-
-    # 3. Run NSVEparticles
-        for factor in [1, 2, 4]:
-            # create dns object
-            cc = DNS()
-            # launch simulation
-            cc.launch([
-                    'NSVEparticles',
-                    '-n', '{0}'.format(factor*32),
-                    '--np', '{0}'.format(nprocesses),
-                    '--ntpp', '{0}'.format(nthreads_per_process),
-                    '--simname', 'nsvep_{0}x'.format(factor),
-                    '--precision', 'double',
-                    '--dtfactor', '0.3',
-                    '--kMeta', '{0}'.format(1.0*factor),
-                    '--niter_todo', '{0}'.format(test_niterations*factor),
-                    '--niter_out', '{0}'.format(test_niterations*factor),
-                    '--niter_stat', '{0}'.format(4*factor),
-                    '--nparticles', '{0}'.format(nparticles),
-                    '--niter_part', '{0}'.format(2*factor),
-                    '--cpp_random_particles', '0'], # turn off cpp particle initialization
-                    iter0 = 8*factor)
-        return None
-
-To compute the trajectory integration error, we proceed as explained
-above, and compare each DNS with its corresponding double-the-resolution DNS:
-
-.. code:: python
-
-    def plot_error_particles():
-        f = plt.figure()
-        a = f.add_subplot(111)
-        err_max_list = []
-        err_mean_list = []
-        factor_list = [1, 2]
-        for factor in factor_list:
-            c1 = DNS(simname = 'nsvep_{0}x'.format(factor))
-            c2 = DNS(simname = 'nsvep_{0}x'.format(factor*2))
-            for cc in [c1, c2]:
-                cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
-            c1.compute_statistics(iter0 = 8*factor)
-            c2.compute_statistics(iter0 = 8*factor*2)
-            final_iter_x1 = c1.get_data_file()['iteration'][()]
-            final_iter_x2 = c2.get_data_file()['iteration'][()]
-            f1 = h5py.File(c1.simname + '_checkpoint_0.h5', 'r')
-            f2 = h5py.File(c2.simname + '_checkpoint_0.h5', 'r')
-            x1 = f1['tracers0/state/{0}'.format(final_iter_x1)][()]
-            x2 = f2['tracers0/state/{0}'.format(final_iter_x2)][()]
-            err_max_list.append(np.max(np.abs(x2 - x1)))
-            err_mean_list.append(np.mean(np.abs(x2 - x1)))
-            f1.close()
-            f2.close()
-        factor_list = np.array(factor_list).astype(np.float)
-        err_max_list = np.array(err_max_list)
-        err_mean_list = np.array(err_mean_list)
-        a.plot(factor_list, err_max_list, marker = '.', label = 'max error')
-        a.plot(factor_list, err_mean_list, marker = '.', label = 'mean error')
-        a.plot(factor_list,
-               (1e-2)*factor_list**(-3),
-               color = 'black',
-               dashes = (2, 2),
-               label = '$\propto f^{-3}$')
-        a.plot(factor_list,
-               (1e-2)*factor_list**(-4),
-               color = 'black',
-               dashes = (1, 1),
-               label = '$\propto f^{-4}$')
-        a.set_xscale('log')
-        a.set_yscale('log')
-        a.set_xlabel('resolution factor f')
-        a.set_ylabel('absolute trajectory error [DNS units]')
-        a.legend(loc = 'best')
-        f.tight_layout()
-        f.savefig('err_vs_dt_particle.pdf')
-        f.savefig('err_vs_dt_particle.png')
-        plt.close(f)
-        return None
-
-Note that we plot two error measures: the maximum error, as well as the
-mean error.
+We present below a Python script that performs a particle tracking
+convergence test, provided as
+`examples/convergence/particles_temporal.py`.
+The figure shows trajectory integration errors, in a fairly simple
+setting, for two interpolation methods: cubic splines (I4O3) and 5th
+order splines on a kernel of 8 points (I8O5).
+Furthermore, we show both the maximum and the mean errors for the same
+set of trajectories.
+While both mean errors seem to converge with the 3rd order of the
+timestep (consistent with the error of the velocity field), the maximum
+error obtained for cubic splines converges with the second order ---
+which is the expected behavior for particle tracking in a field that
+only has one continuous derivative.
 
 .. image:: err_vs_dt_particle.svg
 
-The plot suggests that these converge at different rates: the mean error
-exhibits 4th order convergence in "factor", whereas the maximum error
-seems to converge like :math:`f^{3.5}` (closer to the limit :math:`f^3`
-imposed by the fluid solver error).
-While a more detailed investigation would be in order, I speculate that
-for this particular setup the increase of the spatial resolution along
-with the temporal resolution renders the interpolation errors (which should
-decrease the global order to 2) smaller than the simultaneous temporal
-integration errors.
-In any case the interplay of the different error sources is a fairly
-complex subject in itself, which we don't propose to address here in
-full.
-
-For the beginner's convenience, we also provide a method to plot
-individual particle trajectories:
+The results would merit a longer and more careful analysis outside the
+scope of this particular tutorial, so we limit ourselves to noting that
+(1) different ODEs will have different numerical properties (i.e.
+rotating particles, or inertial particles) and (2) interpolation errors
+may in general grow with the Reynolds number, since interpolation
+errors depend on values of gradients (however the distribution of
+extreme gradient values also changes with Reynolds number, so the
+overall behavior is complex).
 
-.. code:: python
 
-    def plot_traj_particles():
-        f = plt.figure()
-        a = f.add_subplot(111)
-        for factor in [1, 2, 4]:
-            cc = DNS(simname = 'nsvep_{0}x'.format(factor))
-            cc.compute_statistics(iter0 = 8*factor)
-            xx = read_trajectory(cc, 14, iter0 = 8*factor)
-            a.plot(xx[:, 0], xx[:, 1])
-        f.tight_layout()
-        f.savefig('trajectories.pdf')
-        f.savefig('trajectories.png')
-        plt.close(f)
-        return None
-
-    def read_trajectory(cc, traj_index, iter0):
-        cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
-        df = cc.get_particle_file()
-        xx = []
-        for ii in range(iter0, cc.get_data_file()['iteration'][()], cc.parameters['niter_part']):
-            xx.append(df['tracers0/position/{0}'.format(ii)][traj_index])
-        df.close()
-        return np.array(xx)
+Python code for fields
+----------------------
 
-.. image:: trajectories.svg
+.. include:: convergence_fields.rst
 
-Finally, the script ends with a standard call to `main`:
 
-.. code:: python
+Python code for particles
+-------------------------
 
-    if __name__ == '__main__':
-        main()
+.. include:: convergence_particles.rst
 
diff --git a/documentation/sphinx_static/convergence_fields.rst b/documentation/sphinx_static/convergence_fields.rst
new file mode 100644
index 00000000..45b3aa25
--- /dev/null
+++ b/documentation/sphinx_static/convergence_fields.rst
@@ -0,0 +1,281 @@
+We present here a Python script that performs simple convergence tests
+with TurTLE. The script itself is provided as the file
+`examples/convergence/fields_temporal.py`.
+
+The preamble imports standard packages, TurTLE itself, and a few simple
+tools from `examples/convergence/fields_base.py` (not discussed here):
+
+.. code:: python
+
+    import numpy as np
+    import h5py
+    import matplotlib.pyplot as plt
+
+    import TurTLE
+    from TurTLE import DNS, PP
+
+    from fields_base import *
+
+As explained above, we should test convergence for a statistically
+stationary regime.
+The base simulation will use a real-space grid of :math:`128 \times 128 \times 128` points,
+and experience shows that reasonable quasistationarity is reached for this
+problem-size in a few hundred iterations (here `base_niterations`).
+For the convergence test itself, we use a relatively small number
+of iterations (i.e. `test_niterations`), otherwise deterministic chaos will dominate the
+difference between different solutions (rather than numerical integration
+errors).
+
+.. code:: python
+
+   base_niterations = 512
+   test_niterations = 32
+   grid_size = 128
+
+We distinguish between three steps of this script.
+First, we generate the statistically quasistationary regime.
+Second, we run the fluid solver.
+Finally, we "analyze" the results (i.e. we generate simple error plots).
+
+.. code:: python
+
+    def main():
+        generate_initial_conditions()
+
+        run_simulations_field(
+            err_vs_t = False)
+        plot_error_field(
+            err_vs_t = False)
+        return None
+
+The `err_vs_t` parameter may be used if one is interested in looking at
+the difference between the NSE and NSVE solutions as a function of time.
+It turns on a fine-grained output of the fields in
+`run_simulations_field` and it turns on the corresponding plot in
+`plot_error_field`.
+
+`generate_initial_conditions` performs a few calls to C++ executable
+codes generated with TurTLE. In brief, it
+
+    * generates a vorticity field in a quasistationary Navier-Stokes
+      regime (using the NSVE solver).
+    * generates the corresponding velocity field needed for the NSE solver
+
+We use the `launch` method of the `DNS` and `PP` Python
+classes --- the wrappers around the C++ `direct_numerical_simulation`
+and `postprocess` functionality.
+This means that the current Python code may be translated to a shell
+script directly, only by writing out the arguments (rather than placing
+them in a list of Python strings).
+The full function is given below:
+
+.. code:: python
+
+    def generate_initial_conditions():
+        # change these two values as neded.
+        # number of MPI processes to use
+        nprocesses = 8
+        # number of OpenMP threads per MPI process to use
+        nthreads_per_process = 1
+
+    # 1. Generate quasistationary state to use for initial conditions.
+        # create a dns object
+        c0 = DNS()
+        # launch the simulation
+        c0.launch([
+                'NSVE',
+                '-n', '{0}'.format(grid_size),
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--precision', 'double',
+                '--src-simname', 'B32p1e4',
+                '--src-wd', TurTLE.data_dir,
+                '--src-iteration', '0',
+                '--simname', 'base',
+                '--niter_todo', '{0}'.format(base_niterations),
+                '--niter_out', '{0}'.format(base_niterations),
+                '--overwrite-src-parameters',
+                '--kMeta',  '1.5',
+                '--fk0', '2',
+                '--fk1', '3',
+                '--niter_stat', '16',
+                '--checkpoints_per_file', '{0}'.format(64)])
+
+    # 3. Generate initial conditions for NSE runs.
+        # create postprocess object
+        cc = PP()
+        # launches code to compute velocity field at last iteration
+        cc.launch([
+                'get_velocity',
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--simname', 'base',
+                '--precision', 'double',
+                '--iter0', '{0}'.format(base_niterations),
+                '--iter1', '{0}'.format(base_niterations)])
+        return None
+
+`run_simulations_field` runs six DNS (3 resolutions for each of NSE and
+NSVE solvers):
+
+.. code:: python
+
+    def run_simulations_field(err_vs_t = False):
+        # change these two values as neded.
+        # number of MPI processes to use
+        nprocesses = 8
+        # number of OpenMP threads per MPI process to use
+        nthreads_per_process = 1
+
+        if err_vs_t:
+            niter_out_factor = 1
+        else:
+            niter_out_factor = test_niterations
+
+    # 1. Run NSVE for the three resolutions.
+        for factor in [1, 2, 4]:
+            # create dns object
+            cc = DNS()
+            # launch simulation
+            cc.launch([
+                    'NSVE',
+                    '-n', '{0}'.format(grid_size),
+                    '--np', '{0}'.format(nprocesses),
+                    '--ntpp', '{0}'.format(nthreads_per_process),
+                    '--src-simname', 'base',
+                    '--src-iteration', '{0}'.format(base_niterations),
+                    '--simname', 'nsve_{0}x'.format(factor),
+                    '--precision', 'double',
+                    '--dtfactor', '{0}'.format(0.5 / factor),
+                    '--niter_todo', '{0}'.format(test_niterations*factor),
+                    '--niter_out', '{0}'.format(niter_out_factor*factor),
+                    '--niter_stat', '{0}'.format(factor)])
+
+    # 2. Run NSE for the three resolutions.
+        for factor in [1, 2, 4]:
+            # create dns object
+            cc = DNS()
+            # launch simulation
+            cc.launch([
+                    'NSE',
+                    '-n', '{0}'.format(grid_size),
+                    '--np', '{0}'.format(nprocesses),
+                    '--ntpp', '{0}'.format(nthreads_per_process),
+                    '--src-simname', 'base',
+                    '--src-iteration', '{0}'.format(base_niterations),
+                    '--simname', 'nse_{0}x'.format(factor),
+                    '--precision', 'double',
+                    '--dtfactor', '{0}'.format(0.5 / factor),
+                    '--niter_todo', '{0}'.format(test_niterations*factor),
+                    '--niter_out', '{0}'.format(niter_out_factor*factor),
+                    '--niter_out', '{0}'.format(test_niterations*factor),
+                    '--niter_stat', '{0}'.format(factor)])
+        return None
+
+Once the runs are finished successfully, the code calls
+`plot_error_field`.
+Here we first read the output of the six different runs, and we compute
+their statistics, since the call to `compute_statistics` will also
+perform some sanity checks on the output.
+We then compute the error analysis for each of the two solvers, and also
+compare the two solutions.
+The `get_velocity` and `compute_vector_field_distance` methods are defined in
+`examples/convergence/fields_base.py`.
+
+.. code:: python
+
+    def plot_error_field(err_vs_t = False):
+        factor_list = [1, 2, 4]
+        c0_list = [DNS(simname = 'nsve_{0}x'.format(factor))
+                   for factor in factor_list]
+        c1_list = [DNS(simname = 'nse_{0}x'.format(factor))
+                   for factor in factor_list]
+        cl = [c0_list, c1_list]
+        # sanity checks
+        for cc in c0_list + c1_list:
+            cc.compute_statistics()
+
+        # errors for individual solvers
+        error_list = [[], [], []]
+        for ii in range(len(factor_list)-1):
+            factor = factor_list[ii]
+            for jj in [0, 1]:
+                vel1 = get_velocity(cl[jj][ii  ], iteration =   test_niterations*factor)
+                vel2 = get_velocity(cl[jj][ii+1], iteration = 2*test_niterations*factor)
+                dd = compute_vector_field_distance(vel1, vel2, figname = cl[jj][ii].simname + '_vs_' + cl[jj][ii+1].simname)
+                error_list[jj].append(dd['L2_rel'])
+
+        # comparisons of two solutions
+        for ii in range(len(factor_list)):
+            factor = factor_list[ii]
+            vel1 = get_velocity(cl[0][ii], iteration = test_niterations*factor)
+            vel2 = get_velocity(cl[1][ii], iteration = test_niterations*factor)
+            dd = compute_vector_field_distance(vel1, vel2)
+            error_list[2].append(dd['L2_rel'])
+
+        f = plt.figure(figsize = (4, 4))
+        a = f.add_subplot(111)
+        a.plot(factor_list[:len(error_list[0])],
+               error_list[0],
+               marker = '.',
+               dashes = (2, 3),
+               label = 'NSVE')
+        a.plot(factor_list[:len(error_list[1])],
+               error_list[1],
+               marker = '.',
+               dashes = (3, 5),
+               label = 'NSE')
+        a.plot(factor_list,
+               error_list[2],
+               marker = '.',
+               label = 'NSVE vs NSE')
+        fl = np.array(factor_list).astype(np.float)
+        for ee in [2, 3]:
+            a.plot(fl[:2], error_list[0][0] * fl[:2]**(-ee),
+                   dashes = (ee, ee),
+                   color = 'black',
+                   label = '$\propto f^{{-{0}}}$'.format(ee),
+                   zorder = -ee)
+        a.set_ylabel('relative error')
+        a.set_xlabel('resolution factor $f$')
+        a.set_xscale('log')
+        a.set_yscale('log')
+        a.legend(loc = 'best', fontsize = 6)
+        f.tight_layout()
+        f.savefig('err_vs_dt_field.pdf')
+        f.savefig('err_vs_dt_field.svg')
+        plt.close(f)
+
+        if err_vs_t:
+            t = range(test_niterations+1)
+            err_vs_t = [[], [], []]
+            # comparisons of two solvers
+            for ii in range(len(factor_list)):
+                factor = factor_list[ii]
+                for tt in t:
+                    vel1 = get_velocity(cl[0][ii], iteration = tt*factor)
+                    vel2 = get_velocity(cl[1][ii], iteration = tt*factor)
+                    dd = compute_vector_field_distance(vel1, vel2)
+                    err_vs_t[ii].append(dd['L2_rel'])
+            # distance between NSVE and NSE as a function of time
+            f = plt.figure(figsize = (4, 4))
+            a = f.add_subplot(111)
+            a.plot(t, err_vs_t[0], label = 'f = 1')
+            a.plot(t, err_vs_t[1], label = 'f = 2')
+            a.plot(t, err_vs_t[2], label = 'f = 4')
+            a.set_yscale('log')
+            a.legend(loc = 'best', fontsize = 6)
+            f.tight_layout()
+            f.savefig('err_vs_t_field.pdf')
+            f.savefig('err_vs_t_field.svg')
+            plt.close(f)
+        return None
+
+
+Finally, the script ends with a standard call to `main`:
+
+.. code:: python
+
+    if __name__ == '__main__':
+        main()
+
diff --git a/documentation/sphinx_static/convergence_particles.rst b/documentation/sphinx_static/convergence_particles.rst
new file mode 100644
index 00000000..0d4b2418
--- /dev/null
+++ b/documentation/sphinx_static/convergence_particles.rst
@@ -0,0 +1,294 @@
+We present here a Python script that performs a particle tracking
+convergence test with TurTLE, in the current default configuration (a
+`particles_system` object coupled with an NSVE fluid solver).
+
+The preamble imports standard packages, and TurTLE itself:
+
+.. code:: python
+
+    import numpy as np
+    import h5py
+    import matplotlib.pyplot as plt
+
+    import TurTLE
+    from TurTLE import DNS
+
+We then set a few basic parameters, including a list of interpolation
+parameters.
+In brief, the spline interpolations used in TurTLE are parametrized by
+the size :math:`I` of the interpolation kernel and the order :math:`O` of
+the polynomial.
+In this example code we emphasize two equivalences:
+
+* :math:`I = 2 n + 2` where :math:`n` is the number of neighbouring
+  points (in one orientation) required to interpolate the field
+  within one cell.
+* :math:`O = 2 m + 1` where :math:`m` is the order of highest
+  continuous derivative of the interpolating polynomial.
+
+More details on the interpolation method can be found in
+[lalescu2010jcp]_.
+
+.. code:: python
+
+    base_niterations = 256
+
+    nparticles = 1000
+    particle_random_seed = 15
+    base_particle_dt = 0.5
+    test_niterations_particles = 128
+
+    neighbours_smoothness_list = [
+            (1, 1),
+            (3, 2)]
+
+We distinguish between three main parts of this script: generation of
+initial conditions with statistically stationary regime, computation of
+numerical solutions, analysis of results (plot commands):
+
+.. code:: python
+
+    def main():
+        generate_initial_conditions()
+
+        run_simulations_particles()
+
+        plot_error_particles()
+        plot_traj_particles()
+        return None
+
+`generate_initial_conditions` consists of a single launch of an NSVE
+run:
+
+.. code:: python
+
+    def generate_initial_conditions():
+        # change these two values as neded.
+        # number of MPI processes to use
+        nprocesses = 8
+        # number of OpenMP threads per MPI process to use
+        nthreads_per_process = 1
+
+    # 1. Generate quasistationary state to use for initial conditions.
+        # create a dns object
+        c0 = DNS()
+        # launch the simulation
+        c0.launch([
+                'NSVE',
+                '-n', '32',
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--precision', 'double',
+                '--src-simname', 'B32p1e4',
+                '--src-wd', TurTLE.data_dir,
+                '--src-iteration', '0',
+                '--simname', 'base',
+                '--niter_todo', '{0}'.format(base_niterations),
+                '--niter_out', '{0}'.format(base_niterations),
+                '--overwrite-src-parameters',
+                '--kMeta',  '1.',
+                '--niter_stat', '16',
+                '--checkpoints_per_file', '{0}'.format(16)])
+        return None
+
+We then define the function that runs the particle simulations,
+`run_simulations_particles`.
+Because we use an Adams-Bashforth method, we need to know the values of
+the particle velocity (i.e. the right-hand-side of the ODE) at previous
+steps.
+TurTLE accomplishes this by using the Euler integration scheme for "time
+step 0", then using a 2nd order Adams-Bashforth, etc, until the desired
+number of right-hand-side values is stored.
+Thus the code first integrates trajectories for 8 iterations, and the
+output will contain the additional information.
+This happens because such information is crucial for checkpointing ---
+i.e. stopping/restarting the simulation at arbitrary iterations without
+affecting the numerical solution.
+
+To put it simply, for the simulation "nsvep_base" the dataset
+"tracers0/rhs/0" contains only zeros, and TurTLE ignores them.
+However, the "tracers0/rhs/8" dataset for simulation "nsvep_1x" contains
+meaningful values (that are used because we request that `iter0` is
+different from 0).
+
+.. code:: python
+
+    def run_simulations_particles():
+        # change these two values as neded.
+        # number of MPI processes to use
+        nprocesses = 4
+        # number of OpenMP threads per MPI process to use
+        nthreads_per_process = 2
+
+    # 1. Run NSVEparticles for resolution 1x, for a few iterations, to build up rhs values.
+        factor = 1
+        # create dns object
+        cc = DNS()
+        # launch simulation
+        cc.launch([
+                'NSVEparticles',
+                '-n', '{0}'.format(factor*32),
+                '--np', '{0}'.format(nprocesses),
+                '--ntpp', '{0}'.format(nthreads_per_process),
+                '--src-simname', 'base_{0}x'.format(factor),
+                '--src-iteration', '{0}'.format(base_niterations),
+                '--simname', 'nsvep_base'.format(factor),
+                '--precision', 'double',
+                '--dtfactor', '0.3',
+                '--kMeta', '{0}'.format(1.0*factor),
+                '--niter_todo', '{0}'.format(8),
+                '--niter_out', '{0}'.format(8),
+                '--niter_stat', '{0}'.format(8),
+                '--nparticles', '{0}'.format(nparticles),
+                '--niter_part', '{0}'.format(8),
+                '--cpp_random_particles', '{0}'.format(particle_random_seed)])
+
+    # 2. Prepare initial conditions
+        for factor in [1, 2, 4]:
+            df = h5py.File('nsvep_{0}x_checkpoint_0.h5'.format(factor), 'w')
+            # field
+            df['vorticity/complex/{0}'.format(8*factor)] = h5py.ExternalLink(
+                'base_{0}x_checkpoint_0.h5'.format(factor),
+                'vorticity/complex/{0}'.format(base_niterations))
+            # particles
+            df['tracers0/state/{0}'.format(8*factor)] = h5py.ExternalLink(
+                    'nsvep_base_checkpoint_0.h5',
+                    'tracers0/state/8')
+            df['tracers0/rhs/{0}'.format(8*factor)] = h5py.ExternalLink(
+                    'nsvep_base_checkpoint_0.h5',
+                    'tracers0/rhs/8')
+            df.close()
+
+    # 3. Run NSVEparticles
+        for factor in [1, 2, 4]:
+            # create dns object
+            cc = DNS()
+            # launch simulation
+            cc.launch([
+                    'NSVEparticles',
+                    '-n', '{0}'.format(factor*32),
+                    '--np', '{0}'.format(nprocesses),
+                    '--ntpp', '{0}'.format(nthreads_per_process),
+                    '--simname', 'nsvep_{0}x'.format(factor),
+                    '--precision', 'double',
+                    '--dtfactor', '0.3',
+                    '--kMeta', '{0}'.format(1.0*factor),
+                    '--niter_todo', '{0}'.format(test_niterations*factor),
+                    '--niter_out', '{0}'.format(test_niterations*factor),
+                    '--niter_stat', '{0}'.format(4*factor),
+                    '--nparticles', '{0}'.format(nparticles),
+                    '--niter_part', '{0}'.format(2*factor),
+                    '--cpp_random_particles', '0'], # turn off cpp particle initialization
+                    iter0 = 8*factor)
+        return None
+
+To compute the trajectory integration error, we proceed as explained
+above, and compare each DNS with its corresponding double-the-resolution DNS:
+
+.. code:: python
+
+    def plot_error_particles():
+        f = plt.figure()
+        a = f.add_subplot(111)
+        err_max_list = []
+        err_mean_list = []
+        factor_list = [1, 2]
+        for factor in factor_list:
+            c1 = DNS(simname = 'nsvep_{0}x'.format(factor))
+            c2 = DNS(simname = 'nsvep_{0}x'.format(factor*2))
+            for cc in [c1, c2]:
+                cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
+            c1.compute_statistics(iter0 = 8*factor)
+            c2.compute_statistics(iter0 = 8*factor*2)
+            final_iter_x1 = c1.get_data_file()['iteration'][()]
+            final_iter_x2 = c2.get_data_file()['iteration'][()]
+            f1 = h5py.File(c1.simname + '_checkpoint_0.h5', 'r')
+            f2 = h5py.File(c2.simname + '_checkpoint_0.h5', 'r')
+            x1 = f1['tracers0/state/{0}'.format(final_iter_x1)][()]
+            x2 = f2['tracers0/state/{0}'.format(final_iter_x2)][()]
+            err_max_list.append(np.max(np.abs(x2 - x1)))
+            err_mean_list.append(np.mean(np.abs(x2 - x1)))
+            f1.close()
+            f2.close()
+        factor_list = np.array(factor_list).astype(np.float)
+        err_max_list = np.array(err_max_list)
+        err_mean_list = np.array(err_mean_list)
+        a.plot(factor_list, err_max_list, marker = '.', label = 'max error')
+        a.plot(factor_list, err_mean_list, marker = '.', label = 'mean error')
+        a.plot(factor_list,
+               (1e-2)*factor_list**(-3),
+               color = 'black',
+               dashes = (2, 2),
+               label = '$\propto f^{-3}$')
+        a.plot(factor_list,
+               (1e-2)*factor_list**(-4),
+               color = 'black',
+               dashes = (1, 1),
+               label = '$\propto f^{-4}$')
+        a.set_xscale('log')
+        a.set_yscale('log')
+        a.set_xlabel('resolution factor f')
+        a.set_ylabel('absolute trajectory error [DNS units]')
+        a.legend(loc = 'best')
+        f.tight_layout()
+        f.savefig('err_vs_dt_particle.pdf')
+        f.savefig('err_vs_dt_particle.png')
+        plt.close(f)
+        return None
+
+Note that we plot two error measures: the maximum error, as well as the
+mean error.
+
+.. image:: err_vs_dt_particle.svg
+
+The plot suggests that these converge at different rates: the mean error
+exhibits 4th order convergence in "factor", whereas the maximum error
+seems to converge like :math:`f^{3.5}` (closer to the limit :math:`f^3`
+imposed by the fluid solver error).
+While a more detailed investigation would be in order, I speculate that
+for this particular setup the increase of the spatial resolution along
+with the temporal resolution renders the interpolation errors (which should
+decrease the global order to 2) smaller than the simultaneous temporal
+integration errors.
+In any case the interplay of the different error sources is a fairly
+complex subject in itself, which we don't propose to address here in
+full.
+
+For the beginner's convenience, we also provide a method to plot
+individual particle trajectories:
+
+.. code:: python
+
+    def plot_traj_particles():
+        f = plt.figure()
+        a = f.add_subplot(111)
+        for factor in [1, 2, 4]:
+            cc = DNS(simname = 'nsvep_{0}x'.format(factor))
+            cc.compute_statistics(iter0 = 8*factor)
+            xx = read_trajectory(cc, 14, iter0 = 8*factor)
+            a.plot(xx[:, 0], xx[:, 1])
+        f.tight_layout()
+        f.savefig('trajectories.pdf')
+        f.savefig('trajectories.png')
+        plt.close(f)
+        return None
+
+    def read_trajectory(cc, traj_index, iter0):
+        cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
+        df = cc.get_particle_file()
+        xx = []
+        for ii in range(iter0, cc.get_data_file()['iteration'][()], cc.parameters['niter_part']):
+            xx.append(df['tracers0/position/{0}'.format(ii)][traj_index])
+        df.close()
+        return np.array(xx)
+
+.. image:: trajectories.svg
+
+Finally, the script ends with a standard call to `main`:
+
+.. code:: python
+
+    if __name__ == '__main__':
+        main()
+
+
diff --git a/documentation/sphinx_static/err_vs_dt_field.svg b/documentation/sphinx_static/err_vs_dt_field.svg
index b725f1e0..96260bb1 100644
--- a/documentation/sphinx_static/err_vs_dt_field.svg
+++ b/documentation/sphinx_static/err_vs_dt_field.svg
@@ -7,7 +7,7 @@
   <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <cc:Work>
     <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-    <dc:date>2022-01-07T21:09:16.599292</dc:date>
+    <dc:date>2022-01-19T15:33:10.015620</dc:date>
     <dc:format>image/svg+xml</dc:format>
     <dc:creator>
      <cc:Agent>
@@ -31,28 +31,38 @@ z
   </g>
   <g id="axes_1">
    <g id="patch_2">
-    <path d="M 55.779096 242.008 
+    <path d="M 55.970346 242.008 
 L 268.914154 242.008 
 L 268.914154 10.8 
-L 55.779096 10.8 
+L 55.970346 10.8 
 z
 " style="fill:#ffffff;"/>
+   </g>
+   <g id="line2d_1">
+    <path clip-path="url(#p697d71626a)" d="M 65.64961 153.279364 
+L 162.44225 231.498545 
+" style="fill:none;stroke:#000000;stroke-dasharray:4.5,4.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+   </g>
+   <g id="line2d_2">
+    <path clip-path="url(#p697d71626a)" d="M 65.64961 153.279364 
+L 162.44225 205.425485 
+" style="fill:none;stroke:#000000;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-width:1.5;"/>
    </g>
    <g id="matplotlib.axis_1">
     <g id="xtick_1">
-     <g id="line2d_1">
+     <g id="line2d_3">
       <defs>
        <path d="M 0 0 
 L 0 3.5 
-" id="m58e16c489e" style="stroke:#000000;stroke-width:0.8;"/>
+" id="mc0115b44e6" style="stroke:#000000;stroke-width:0.8;"/>
       </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="65.467053" xlink:href="#m58e16c489e" y="242.008"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="65.64961" xlink:href="#mc0115b44e6" y="242.008"/>
       </g>
      </g>
      <g id="text_1">
       <!-- $\mathdefault{10^{0}}$ -->
-      <g transform="translate(56.667053 256.606437)scale(0.1 -0.1)">
+      <g transform="translate(56.84961 256.606437)scale(0.1 -0.1)">
        <defs>
         <path d="M 12.40625 8.296875 
 L 28.515625 8.296875 
@@ -96,19 +106,19 @@ z
      </g>
     </g>
     <g id="xtick_2">
-     <g id="line2d_2">
+     <g id="line2d_4">
       <defs>
        <path d="M 0 0 
 L 0 2 
-" id="m7ae94f5537" style="stroke:#000000;stroke-width:0.6;"/>
+" id="ma73562a9e4" style="stroke:#000000;stroke-width:0.6;"/>
       </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="162.346625" xlink:href="#m7ae94f5537" y="242.008"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="162.44225" xlink:href="#ma73562a9e4" y="242.008"/>
       </g>
      </g>
      <g id="text_2">
       <!-- $\mathdefault{2\times10^{0}}$ -->
-      <g transform="translate(144.246625 255.006438)scale(0.1 -0.1)">
+      <g transform="translate(144.34225 255.006438)scale(0.1 -0.1)">
        <defs>
         <path d="M 19.1875 8.296875 
 L 53.609375 8.296875 
@@ -158,14 +168,14 @@ z
      </g>
     </g>
     <g id="xtick_3">
-     <g id="line2d_3">
+     <g id="line2d_5">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="219.017542" xlink:href="#m7ae94f5537" y="242.008"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="219.062315" xlink:href="#ma73562a9e4" y="242.008"/>
       </g>
      </g>
      <g id="text_3">
       <!-- $\mathdefault{3\times10^{0}}$ -->
-      <g transform="translate(200.917542 255.006438)scale(0.1 -0.1)">
+      <g transform="translate(200.962315 255.006438)scale(0.1 -0.1)">
        <defs>
         <path d="M 40.578125 39.3125 
 Q 47.65625 37.796875 51.625 33 
@@ -209,14 +219,14 @@ z
      </g>
     </g>
     <g id="xtick_4">
-     <g id="line2d_4">
+     <g id="line2d_6">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="259.226197" xlink:href="#m7ae94f5537" y="242.008"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="259.23489" xlink:href="#ma73562a9e4" y="242.008"/>
       </g>
      </g>
      <g id="text_4">
       <!-- $\mathdefault{4\times10^{0}}$ -->
-      <g transform="translate(241.126197 255.006438)scale(0.1 -0.1)">
+      <g transform="translate(241.13489 255.006438)scale(0.1 -0.1)">
        <defs>
         <path d="M 37.796875 64.3125 
 L 12.890625 25.390625 
@@ -246,7 +256,7 @@ z
     </g>
     <g id="text_5">
      <!-- resolution factor $f$ -->
-     <g transform="translate(117.796625 270.284562)scale(0.1 -0.1)">
+     <g transform="translate(117.89225 270.284562)scale(0.1 -0.1)">
       <defs>
        <path d="M 41.109375 46.296875 
 Q 39.59375 47.171875 37.8125 47.578125 
@@ -536,19 +546,19 @@ z
    </g>
    <g id="matplotlib.axis_2">
     <g id="ytick_1">
-     <g id="line2d_5">
+     <g id="line2d_7">
       <defs>
        <path d="M 0 0 
 L -3.5 0 
-" id="m27f54e28b8" style="stroke:#000000;stroke-width:0.8;"/>
+" id="mf67fbfa108" style="stroke:#000000;stroke-width:0.8;"/>
       </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="55.779096" xlink:href="#m27f54e28b8" y="137.681629"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="55.970346" xlink:href="#mf67fbfa108" y="237.429866"/>
       </g>
      </g>
      <g id="text_6">
-      <!-- $\mathdefault{10^{-1}}$ -->
-      <g transform="translate(25.279096 141.480848)scale(0.1 -0.1)">
+      <!-- $\mathdefault{10^{-7}}$ -->
+      <g transform="translate(25.470346 241.229085)scale(0.1 -0.1)">
        <defs>
         <path d="M 10.59375 35.5 
 L 73.1875 35.5 
@@ -556,149 +566,261 @@ L 73.1875 27.203125
 L 10.59375 27.203125 
 z
 " id="DejaVuSans-8722"/>
+        <path d="M 8.203125 72.90625 
+L 55.078125 72.90625 
+L 55.078125 68.703125 
+L 28.609375 0 
+L 18.3125 0 
+L 43.21875 64.59375 
+L 8.203125 64.59375 
+z
+" id="DejaVuSans-55"/>
        </defs>
        <use transform="translate(0 0.684375)" xlink:href="#DejaVuSans-49"/>
        <use transform="translate(63.623047 0.684375)" xlink:href="#DejaVuSans-48"/>
        <use transform="translate(128.203125 38.965625)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
-       <use transform="translate(186.855469 38.965625)scale(0.7)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(186.855469 38.965625)scale(0.7)" xlink:href="#DejaVuSans-55"/>
       </g>
      </g>
     </g>
     <g id="ytick_2">
-     <g id="line2d_6">
+     <g id="line2d_8">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="55.779096" xlink:href="#m27f54e28b8" y="21.309455"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="55.970346" xlink:href="#mf67fbfa108" y="150.817035"/>
       </g>
      </g>
      <g id="text_7">
-      <!-- $\mathdefault{10^{0}}$ -->
-      <g transform="translate(31.179096 25.108673)scale(0.1 -0.1)">
+      <!-- $\mathdefault{10^{-6}}$ -->
+      <g transform="translate(25.470346 154.616254)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 33.015625 40.375 
+Q 26.375 40.375 22.484375 35.828125 
+Q 18.609375 31.296875 18.609375 23.390625 
+Q 18.609375 15.53125 22.484375 10.953125 
+Q 26.375 6.390625 33.015625 6.390625 
+Q 39.65625 6.390625 43.53125 10.953125 
+Q 47.40625 15.53125 47.40625 23.390625 
+Q 47.40625 31.296875 43.53125 35.828125 
+Q 39.65625 40.375 33.015625 40.375 
+z
+M 52.59375 71.296875 
+L 52.59375 62.3125 
+Q 48.875 64.0625 45.09375 64.984375 
+Q 41.3125 65.921875 37.59375 65.921875 
+Q 27.828125 65.921875 22.671875 59.328125 
+Q 17.53125 52.734375 16.796875 39.40625 
+Q 19.671875 43.65625 24.015625 45.921875 
+Q 28.375 48.1875 33.59375 48.1875 
+Q 44.578125 48.1875 50.953125 41.515625 
+Q 57.328125 34.859375 57.328125 23.390625 
+Q 57.328125 12.15625 50.6875 5.359375 
+Q 44.046875 -1.421875 33.015625 -1.421875 
+Q 20.359375 -1.421875 13.671875 8.265625 
+Q 6.984375 17.96875 6.984375 36.375 
+Q 6.984375 53.65625 15.1875 63.9375 
+Q 23.390625 74.21875 37.203125 74.21875 
+Q 40.921875 74.21875 44.703125 73.484375 
+Q 48.484375 72.75 52.59375 71.296875 
+z
+" id="DejaVuSans-54"/>
+       </defs>
        <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-49"/>
        <use transform="translate(63.623047 0.765625)" xlink:href="#DejaVuSans-48"/>
-       <use transform="translate(128.203125 39.046875)scale(0.7)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(128.203125 39.046875)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+       <use transform="translate(186.855469 39.046875)scale(0.7)" xlink:href="#DejaVuSans-54"/>
       </g>
      </g>
     </g>
     <g id="ytick_3">
-     <g id="line2d_7">
-      <defs>
-       <path d="M 0 0 
-L -2 0 
-" id="m50a58ed922" style="stroke:#000000;stroke-width:0.6;"/>
-      </defs>
+     <g id="line2d_9">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="219.022288"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="55.970346" xlink:href="#mf67fbfa108" y="64.204203"/>
+      </g>
+     </g>
+     <g id="text_8">
+      <!-- $\mathdefault{10^{-5}}$ -->
+      <g transform="translate(25.470346 68.003422)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 10.796875 72.90625 
+L 49.515625 72.90625 
+L 49.515625 64.59375 
+L 19.828125 64.59375 
+L 19.828125 46.734375 
+Q 21.96875 47.46875 24.109375 47.828125 
+Q 26.265625 48.1875 28.421875 48.1875 
+Q 40.625 48.1875 47.75 41.5 
+Q 54.890625 34.8125 54.890625 23.390625 
+Q 54.890625 11.625 47.5625 5.09375 
+Q 40.234375 -1.421875 26.90625 -1.421875 
+Q 22.3125 -1.421875 17.546875 -0.640625 
+Q 12.796875 0.140625 7.71875 1.703125 
+L 7.71875 11.625 
+Q 12.109375 9.234375 16.796875 8.0625 
+Q 21.484375 6.890625 26.703125 6.890625 
+Q 35.15625 6.890625 40.078125 11.328125 
+Q 45.015625 15.765625 45.015625 23.390625 
+Q 45.015625 31 40.078125 35.4375 
+Q 35.15625 39.890625 26.703125 39.890625 
+Q 22.75 39.890625 18.8125 39.015625 
+Q 14.890625 38.140625 10.796875 36.28125 
+z
+" id="DejaVuSans-53"/>
+       </defs>
+       <use transform="translate(0 0.684375)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.684375)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(128.203125 38.965625)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+       <use transform="translate(186.855469 38.965625)scale(0.7)" xlink:href="#DejaVuSans-53"/>
       </g>
      </g>
     </g>
     <g id="ytick_4">
-     <g id="line2d_8">
+     <g id="line2d_10">
+      <defs>
+       <path d="M 0 0 
+L -2 0 
+" id="me29b2c3ebe" style="stroke:#000000;stroke-width:0.6;"/>
+      </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="198.530165"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="241.393052"/>
       </g>
      </g>
     </g>
     <g id="ytick_5">
-     <g id="line2d_9">
+     <g id="line2d_11">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="183.990773"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="211.356806"/>
       </g>
      </g>
     </g>
     <g id="ytick_6">
-     <g id="line2d_10">
+     <g id="line2d_12">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="172.713144"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="196.105044"/>
       </g>
      </g>
     </g>
     <g id="ytick_7">
-     <g id="line2d_11">
+     <g id="line2d_13">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="163.49865"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="185.283746"/>
       </g>
      </g>
     </g>
     <g id="ytick_8">
-     <g id="line2d_12">
+     <g id="line2d_14">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="155.707907"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="176.890095"/>
       </g>
      </g>
     </g>
     <g id="ytick_9">
-     <g id="line2d_13">
+     <g id="line2d_15">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="148.959258"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="170.031983"/>
       </g>
      </g>
     </g>
     <g id="ytick_10">
-     <g id="line2d_14">
+     <g id="line2d_16">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="143.006528"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="164.233532"/>
       </g>
      </g>
     </g>
     <g id="ytick_11">
-     <g id="line2d_15">
+     <g id="line2d_17">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="102.650114"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="159.210685"/>
       </g>
      </g>
     </g>
     <g id="ytick_12">
-     <g id="line2d_16">
+     <g id="line2d_18">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="82.157991"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="154.780221"/>
       </g>
      </g>
     </g>
     <g id="ytick_13">
-     <g id="line2d_17">
+     <g id="line2d_19">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="67.618599"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="124.743974"/>
       </g>
      </g>
     </g>
     <g id="ytick_14">
-     <g id="line2d_18">
+     <g id="line2d_20">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="56.34097"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="109.492212"/>
       </g>
      </g>
     </g>
     <g id="ytick_15">
-     <g id="line2d_19">
+     <g id="line2d_21">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="47.126476"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="98.670914"/>
       </g>
      </g>
     </g>
     <g id="ytick_16">
-     <g id="line2d_20">
+     <g id="line2d_22">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="39.335732"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="90.277263"/>
       </g>
      </g>
     </g>
     <g id="ytick_17">
-     <g id="line2d_21">
+     <g id="line2d_23">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="32.587083"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="83.419152"/>
       </g>
      </g>
     </g>
     <g id="ytick_18">
-     <g id="line2d_22">
+     <g id="line2d_24">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="77.6207"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_19">
+     <g id="line2d_25">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="72.597854"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_20">
+     <g id="line2d_26">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="68.167389"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_21">
+     <g id="line2d_27">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="38.131143"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_22">
+     <g id="line2d_28">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.779096" xlink:href="#m50a58ed922" y="26.634353"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="22.87938"/>
       </g>
      </g>
     </g>
-    <g id="text_8">
+    <g id="ytick_23">
+     <g id="line2d_29">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="55.970346" xlink:href="#me29b2c3ebe" y="12.058082"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_9">
      <!-- relative error -->
-     <g transform="translate(19.199409 158.953219)rotate(-90)scale(0.1 -0.1)">
+     <g transform="translate(19.390659 158.953219)rotate(-90)scale(0.1 -0.1)">
       <defs>
        <path d="M 2.984375 54.6875 
 L 12.5 54.6875 
@@ -727,11 +849,32 @@ z
      </g>
     </g>
    </g>
-   <g id="line2d_23">
-    <path clip-path="url(#pcf1e02a146)" d="M 65.467053 118.003354 
-L 162.346625 216.977727 
-L 259.226197 225.123361 
-" style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
+   <g id="line2d_30">
+    <path clip-path="url(#p697d71626a)" d="M 65.64961 153.279364 
+L 162.44225 231.485234 
+" style="fill:none;stroke:#1f77b4;stroke-dasharray:3,4.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+    <defs>
+     <path d="M 0 1.5 
+C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 
+C 1.341951 0.77937 1.5 0.397805 1.5 0 
+C 1.5 -0.397805 1.341951 -0.77937 1.06066 -1.06066 
+C 0.77937 -1.341951 0.397805 -1.5 0 -1.5 
+C -0.397805 -1.5 -0.77937 -1.341951 -1.06066 -1.06066 
+C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0 
+C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 
+C -0.77937 1.341951 -0.397805 1.5 0 1.5 
+z
+" id="m82b2a5bbca" style="stroke:#1f77b4;"/>
+    </defs>
+    <g clip-path="url(#p697d71626a)">
+     <use style="fill:#1f77b4;stroke:#1f77b4;" x="65.64961" xlink:href="#m82b2a5bbca" y="153.279364"/>
+     <use style="fill:#1f77b4;stroke:#1f77b4;" x="162.44225" xlink:href="#m82b2a5bbca" y="231.485234"/>
+    </g>
+   </g>
+   <g id="line2d_31">
+    <path clip-path="url(#p697d71626a)" d="M 65.64961 153.279119 
+L 162.44225 231.484979 
+" style="fill:none;stroke:#ff7f0e;stroke-dasharray:4.5,7.5;stroke-dashoffset:0;stroke-width:1.5;"/>
     <defs>
      <path d="M 0 1.5 
 C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 
@@ -743,23 +886,40 @@ C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0
 C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 
 C -0.77937 1.341951 -0.397805 1.5 0 1.5 
 z
-" id="m1dc47eef48" style="stroke:#1f77b4;"/>
+" id="m4d39af77bf" style="stroke:#ff7f0e;"/>
     </defs>
-    <g clip-path="url(#pcf1e02a146)">
-     <use style="fill:#1f77b4;stroke:#1f77b4;" x="65.467053" xlink:href="#m1dc47eef48" y="118.003354"/>
-     <use style="fill:#1f77b4;stroke:#1f77b4;" x="162.346625" xlink:href="#m1dc47eef48" y="216.977727"/>
-     <use style="fill:#1f77b4;stroke:#1f77b4;" x="259.226197" xlink:href="#m1dc47eef48" y="225.123361"/>
+    <g clip-path="url(#p697d71626a)">
+     <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="65.64961" xlink:href="#m4d39af77bf" y="153.279119"/>
+     <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="162.44225" xlink:href="#m4d39af77bf" y="231.484979"/>
     </g>
    </g>
-   <g id="line2d_24">
-    <path clip-path="url(#pcf1e02a146)" d="M 65.467053 21.309455 
-L 162.346625 126.404 
-L 259.226197 231.498545 
-" style="fill:none;stroke:#000000;stroke-dasharray:1.5,1.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+   <g id="line2d_32">
+    <path clip-path="url(#p697d71626a)" d="M 65.64961 21.309455 
+L 162.44225 21.310486 
+L 259.23489 21.310609 
+" style="fill:none;stroke:#2ca02c;stroke-linecap:square;stroke-width:1.5;"/>
+    <defs>
+     <path d="M 0 1.5 
+C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 
+C 1.341951 0.77937 1.5 0.397805 1.5 0 
+C 1.5 -0.397805 1.341951 -0.77937 1.06066 -1.06066 
+C 0.77937 -1.341951 0.397805 -1.5 0 -1.5 
+C -0.397805 -1.5 -0.77937 -1.341951 -1.06066 -1.06066 
+C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0 
+C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 
+C -0.77937 1.341951 -0.397805 1.5 0 1.5 
+z
+" id="m66f4880a7e" style="stroke:#2ca02c;"/>
+    </defs>
+    <g clip-path="url(#p697d71626a)">
+     <use style="fill:#2ca02c;stroke:#2ca02c;" x="65.64961" xlink:href="#m66f4880a7e" y="21.309455"/>
+     <use style="fill:#2ca02c;stroke:#2ca02c;" x="162.44225" xlink:href="#m66f4880a7e" y="21.310486"/>
+     <use style="fill:#2ca02c;stroke:#2ca02c;" x="259.23489" xlink:href="#m66f4880a7e" y="21.310609"/>
+    </g>
    </g>
    <g id="patch_3">
-    <path d="M 55.779096 242.008 
-L 55.779096 10.8 
+    <path d="M 55.970346 242.008 
+L 55.970346 10.8 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_4">
@@ -768,42 +928,42 @@ L 268.914154 10.8
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_5">
-    <path d="M 55.779096 242.008 
+    <path d="M 55.970346 242.008 
 L 268.914154 242.008 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_6">
-    <path d="M 55.779096 10.8 
+    <path d="M 55.970346 10.8 
 L 268.914154 10.8 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="legend_1">
     <g id="patch_7">
-     <path d="M 165.292279 48.15625 
-L 261.914154 48.15625 
-Q 263.914154 48.15625 263.914154 46.15625 
-L 263.914154 17.8 
-Q 263.914154 15.8 261.914154 15.8 
-L 165.292279 15.8 
-Q 163.292279 15.8 163.292279 17.8 
-L 163.292279 46.15625 
-Q 163.292279 48.15625 165.292279 48.15625 
+     <path d="M 206.741029 239.008 
+L 264.714154 239.008 
+Q 265.914154 239.008 265.914154 237.808 
+L 265.914154 194.373625 
+Q 265.914154 193.173625 264.714154 193.173625 
+L 206.741029 193.173625 
+Q 205.541029 193.173625 205.541029 194.373625 
+L 205.541029 237.808 
+Q 205.541029 239.008 206.741029 239.008 
 z
 " style="fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;"/>
     </g>
-    <g id="line2d_25">
-     <path d="M 167.292279 23.898438 
-L 187.292279 23.898438 
-" style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
+    <g id="line2d_33">
+     <path d="M 207.941029 198.032688 
+L 219.941029 198.032688 
+" style="fill:none;stroke:#1f77b4;stroke-dasharray:3,4.5;stroke-dashoffset:0;stroke-width:1.5;"/>
     </g>
-    <g id="line2d_26">
+    <g id="line2d_34">
      <g>
-      <use style="fill:#1f77b4;stroke:#1f77b4;" x="177.292279" xlink:href="#m1dc47eef48" y="23.898438"/>
+      <use style="fill:#1f77b4;stroke:#1f77b4;" x="213.941029" xlink:href="#m82b2a5bbca" y="198.032688"/>
      </g>
     </g>
-    <g id="text_9">
-     <!-- NSVE vs NSE -->
-     <g transform="translate(195.292279 27.398438)scale(0.1 -0.1)">
+    <g id="text_10">
+     <!-- NSVE -->
+     <g transform="translate(224.741029 200.132688)scale(0.06 -0.06)">
       <defs>
        <path d="M 9.8125 72.90625 
 L 23.09375 72.90625 
@@ -876,6 +1036,43 @@ z
       <use x="74.804688" xlink:href="#DejaVuSans-83"/>
       <use x="138.28125" xlink:href="#DejaVuSans-86"/>
       <use x="206.689453" xlink:href="#DejaVuSans-69"/>
+     </g>
+    </g>
+    <g id="line2d_35">
+     <path d="M 207.941029 206.839563 
+L 219.941029 206.839563 
+" style="fill:none;stroke:#ff7f0e;stroke-dasharray:4.5,7.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_36">
+     <g>
+      <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="213.941029" xlink:href="#m4d39af77bf" y="206.839563"/>
+     </g>
+    </g>
+    <g id="text_11">
+     <!-- NSE -->
+     <g transform="translate(224.741029 208.939563)scale(0.06 -0.06)">
+      <use xlink:href="#DejaVuSans-78"/>
+      <use x="74.804688" xlink:href="#DejaVuSans-83"/>
+      <use x="138.28125" xlink:href="#DejaVuSans-69"/>
+     </g>
+    </g>
+    <g id="line2d_37">
+     <path d="M 207.941029 215.646438 
+L 219.941029 215.646438 
+" style="fill:none;stroke:#2ca02c;stroke-linecap:square;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_38">
+     <g>
+      <use style="fill:#2ca02c;stroke:#2ca02c;" x="213.941029" xlink:href="#m66f4880a7e" y="215.646438"/>
+     </g>
+    </g>
+    <g id="text_12">
+     <!-- NSVE vs NSE -->
+     <g transform="translate(224.741029 217.746438)scale(0.06 -0.06)">
+      <use xlink:href="#DejaVuSans-78"/>
+      <use x="74.804688" xlink:href="#DejaVuSans-83"/>
+      <use x="138.28125" xlink:href="#DejaVuSans-86"/>
+      <use x="206.689453" xlink:href="#DejaVuSans-69"/>
       <use x="269.873047" xlink:href="#DejaVuSans-32"/>
       <use x="301.660156" xlink:href="#DejaVuSans-118"/>
       <use x="360.839844" xlink:href="#DejaVuSans-115"/>
@@ -885,15 +1082,15 @@ z
       <use x="583.007812" xlink:href="#DejaVuSans-69"/>
      </g>
     </g>
-    <g id="line2d_27">
-     <path d="M 167.292279 38.576562 
-L 187.292279 38.576562 
-" style="fill:none;stroke:#000000;stroke-dasharray:1.5,1.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+    <g id="line2d_39">
+     <path d="M 207.941029 224.453313 
+L 219.941029 224.453313 
+" style="fill:none;stroke:#000000;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-width:1.5;"/>
     </g>
-    <g id="line2d_28"/>
-    <g id="text_10">
-     <!-- $\propto f^{-3}$ -->
-     <g transform="translate(195.292279 42.076562)scale(0.1 -0.1)">
+    <g id="line2d_40"/>
+    <g id="text_13">
+     <!-- $\propto f^{-2}$ -->
+     <g transform="translate(224.741029 226.553313)scale(0.06 -0.06)">
       <defs>
        <path d="M 25.734375 17.71875 
 Q 33.796875 17.71875 38.625 29.4375 
@@ -928,6 +1125,21 @@ Q 50.875 17.625 57.5625 17.625
 z
 " id="DejaVuSans-8733"/>
       </defs>
+      <use transform="translate(19.482422 0.765625)" xlink:href="#DejaVuSans-8733"/>
+      <use transform="translate(110.400391 0.765625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(153.053177 39.046875)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+      <use transform="translate(211.705521 39.046875)scale(0.7)" xlink:href="#DejaVuSans-50"/>
+     </g>
+    </g>
+    <g id="line2d_41">
+     <path d="M 207.941029 233.260188 
+L 219.941029 233.260188 
+" style="fill:none;stroke:#000000;stroke-dasharray:4.5,4.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_42"/>
+    <g id="text_14">
+     <!-- $\propto f^{-3}$ -->
+     <g transform="translate(224.741029 235.360187)scale(0.06 -0.06)">
       <use transform="translate(19.482422 0.765625)" xlink:href="#DejaVuSans-8733"/>
       <use transform="translate(110.400391 0.765625)" xlink:href="#DejaVuSans-Oblique-102"/>
       <use transform="translate(153.053177 39.046875)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
@@ -938,8 +1150,8 @@ z
   </g>
  </g>
  <defs>
-  <clipPath id="pcf1e02a146">
-   <rect height="231.208" width="213.135058" x="55.779096" y="10.8"/>
+  <clipPath id="p697d71626a">
+   <rect height="231.208" width="212.943808" x="55.970346" y="10.8"/>
   </clipPath>
  </defs>
 </svg>
diff --git a/documentation/sphinx_static/err_vs_dt_particle.svg b/documentation/sphinx_static/err_vs_dt_particle.svg
index a7c5c0cb..354d1447 100644
--- a/documentation/sphinx_static/err_vs_dt_particle.svg
+++ b/documentation/sphinx_static/err_vs_dt_particle.svg
@@ -7,7 +7,7 @@
   <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <cc:Work>
     <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-    <dc:date>2022-01-07T21:09:17.007370</dc:date>
+    <dc:date>2022-01-20T07:20:03.747523</dc:date>
     <dc:format>image/svg+xml</dc:format>
     <dc:creator>
      <cc:Agent>
@@ -31,10 +31,10 @@ z
   </g>
   <g id="axes_1">
    <g id="patch_2">
-    <path d="M 55.880346 300.328 
+    <path d="M 56.015346 300.328 
 L 447.801427 300.328 
 L 447.801427 10.8 
-L 55.880346 10.8 
+L 56.015346 10.8 
 z
 " style="fill:#ffffff;"/>
    </g>
@@ -44,15 +44,15 @@ z
       <defs>
        <path d="M 0 0 
 L 0 3.5 
-" id="m84cc79f811" style="stroke:#000000;stroke-width:0.8;"/>
+" id="m726d39d34e" style="stroke:#000000;stroke-width:0.8;"/>
       </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="73.694941" xlink:href="#m84cc79f811" y="300.328"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="73.823804" xlink:href="#m726d39d34e" y="300.328"/>
       </g>
      </g>
      <g id="text_1">
       <!-- $\mathdefault{10^{0}}$ -->
-      <g transform="translate(64.894941 314.926437)scale(0.1 -0.1)">
+      <g transform="translate(65.023804 314.926437)scale(0.1 -0.1)">
        <defs>
         <path d="M 12.40625 8.296875 
 L 28.515625 8.296875 
@@ -100,15 +100,15 @@ z
       <defs>
        <path d="M 0 0 
 L 0 2 
-" id="m29fff047ed" style="stroke:#000000;stroke-width:0.6;"/>
+" id="maf1e5af406" style="stroke:#000000;stroke-width:0.6;"/>
       </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="167.411967" xlink:href="#m29fff047ed" y="300.328"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="167.508549" xlink:href="#maf1e5af406" y="300.328"/>
       </g>
      </g>
      <g id="text_2">
       <!-- $\mathdefault{1.2\times10^{0}}$ -->
-      <g transform="translate(144.811967 313.326437)scale(0.1 -0.1)">
+      <g transform="translate(144.908549 313.326437)scale(0.1 -0.1)">
        <defs>
         <path d="M 10.6875 12.40625 
 L 21 12.40625 
@@ -168,12 +168,12 @@ z
     <g id="xtick_3">
      <g id="line2d_3">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="246.648583" xlink:href="#m29fff047ed" y="300.328"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="246.717872" xlink:href="#maf1e5af406" y="300.328"/>
       </g>
      </g>
      <g id="text_3">
       <!-- $\mathdefault{1.4\times10^{0}}$ -->
-      <g transform="translate(223.748583 313.326437)scale(0.1 -0.1)">
+      <g transform="translate(223.817872 313.326437)scale(0.1 -0.1)">
        <defs>
         <path d="M 37.796875 64.3125 
 L 12.890625 25.390625 
@@ -206,12 +206,12 @@ z
     <g id="xtick_4">
      <g id="line2d_4">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="315.286462" xlink:href="#m29fff047ed" y="300.328"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="315.332108" xlink:href="#maf1e5af406" y="300.328"/>
       </g>
      </g>
      <g id="text_4">
       <!-- $\mathdefault{1.6\times10^{0}}$ -->
-      <g transform="translate(292.386462 313.326437)scale(0.1 -0.1)">
+      <g transform="translate(292.432108 313.326437)scale(0.1 -0.1)">
        <defs>
         <path d="M 33.015625 40.375 
 Q 26.375 40.375 22.484375 35.828125 
@@ -257,12 +257,12 @@ z
     <g id="xtick_5">
      <g id="line2d_5">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="375.829363" xlink:href="#m29fff047ed" y="300.328"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="375.854154" xlink:href="#maf1e5af406" y="300.328"/>
       </g>
      </g>
      <g id="text_5">
       <!-- $\mathdefault{1.8\times10^{0}}$ -->
-      <g transform="translate(353.079363 313.326437)scale(0.1 -0.1)">
+      <g transform="translate(353.104154 313.326437)scale(0.1 -0.1)">
        <defs>
         <path d="M 31.78125 34.625 
 Q 24.75 34.625 20.71875 30.859375 
@@ -317,12 +317,12 @@ z
     <g id="xtick_6">
      <g id="line2d_6">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="429.986832" xlink:href="#m29fff047ed" y="300.328"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="429.992969" xlink:href="#maf1e5af406" y="300.328"/>
       </g>
      </g>
      <g id="text_6">
       <!-- $\mathdefault{2\times10^{0}}$ -->
-      <g transform="translate(411.886832 313.326437)scale(0.1 -0.1)">
+      <g transform="translate(411.892969 313.326437)scale(0.1 -0.1)">
        <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-50"/>
        <use transform="translate(83.105469 0.765625)" xlink:href="#DejaVuSans-215"/>
        <use transform="translate(186.376953 0.765625)" xlink:href="#DejaVuSans-49"/>
@@ -333,7 +333,7 @@ z
     </g>
     <g id="text_7">
      <!-- resolution factor f -->
-     <g transform="translate(207.435418 328.604562)scale(0.1 -0.1)">
+     <g transform="translate(207.502918 328.604562)scale(0.1 -0.1)">
       <defs>
        <path d="M 41.109375 46.296875 
 Q 39.59375 47.171875 37.8125 47.578125 
@@ -607,15 +607,15 @@ z
       <defs>
        <path d="M 0 0 
 L -3.5 0 
-" id="me859688893" style="stroke:#000000;stroke-width:0.8;"/>
+" id="m29c7ff5d91" style="stroke:#000000;stroke-width:0.8;"/>
       </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="55.880346" xlink:href="#me859688893" y="192.981768"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="56.015346" xlink:href="#m29c7ff5d91" y="240.31258"/>
       </g>
      </g>
      <g id="text_8">
-      <!-- $\mathdefault{10^{-3}}$ -->
-      <g transform="translate(25.380346 196.780987)scale(0.1 -0.1)">
+      <!-- $\mathdefault{10^{-5}}$ -->
+      <g transform="translate(25.515346 244.111798)scale(0.1 -0.1)">
        <defs>
         <path d="M 10.59375 35.5 
 L 73.1875 35.5 
@@ -623,6 +623,64 @@ L 73.1875 27.203125
 L 10.59375 27.203125 
 z
 " id="DejaVuSans-8722"/>
+        <path d="M 10.796875 72.90625 
+L 49.515625 72.90625 
+L 49.515625 64.59375 
+L 19.828125 64.59375 
+L 19.828125 46.734375 
+Q 21.96875 47.46875 24.109375 47.828125 
+Q 26.265625 48.1875 28.421875 48.1875 
+Q 40.625 48.1875 47.75 41.5 
+Q 54.890625 34.8125 54.890625 23.390625 
+Q 54.890625 11.625 47.5625 5.09375 
+Q 40.234375 -1.421875 26.90625 -1.421875 
+Q 22.3125 -1.421875 17.546875 -0.640625 
+Q 12.796875 0.140625 7.71875 1.703125 
+L 7.71875 11.625 
+Q 12.109375 9.234375 16.796875 8.0625 
+Q 21.484375 6.890625 26.703125 6.890625 
+Q 35.15625 6.890625 40.078125 11.328125 
+Q 45.015625 15.765625 45.015625 23.390625 
+Q 45.015625 31 40.078125 35.4375 
+Q 35.15625 39.890625 26.703125 39.890625 
+Q 22.75 39.890625 18.8125 39.015625 
+Q 14.890625 38.140625 10.796875 36.28125 
+z
+" id="DejaVuSans-53"/>
+       </defs>
+       <use transform="translate(0 0.684375)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.684375)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(128.203125 38.965625)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+       <use transform="translate(186.855469 38.965625)scale(0.7)" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_2">
+     <g id="line2d_8">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="56.015346" xlink:href="#m29c7ff5d91" y="133.142634"/>
+      </g>
+     </g>
+     <g id="text_9">
+      <!-- $\mathdefault{10^{-4}}$ -->
+      <g transform="translate(25.515346 136.941853)scale(0.1 -0.1)">
+       <use transform="translate(0 0.684375)" xlink:href="#DejaVuSans-49"/>
+       <use transform="translate(63.623047 0.684375)" xlink:href="#DejaVuSans-48"/>
+       <use transform="translate(128.203125 38.965625)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+       <use transform="translate(186.855469 38.965625)scale(0.7)" xlink:href="#DejaVuSans-52"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_3">
+     <g id="line2d_9">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="56.015346" xlink:href="#m29c7ff5d91" y="25.972689"/>
+      </g>
+     </g>
+     <g id="text_10">
+      <!-- $\mathdefault{10^{-3}}$ -->
+      <g transform="translate(25.515346 29.771908)scale(0.1 -0.1)">
+       <defs>
         <path d="M 40.578125 39.3125 
 Q 47.65625 37.796875 51.625 33 
 Q 55.609375 28.21875 55.609375 21.1875 
@@ -663,163 +721,175 @@ z
       </g>
      </g>
     </g>
-    <g id="ytick_2">
-     <g id="line2d_8">
-      <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="55.880346" xlink:href="#me859688893" y="82.609264"/>
-      </g>
-     </g>
-     <g id="text_9">
-      <!-- $\mathdefault{10^{-2}}$ -->
-      <g transform="translate(25.380346 86.408483)scale(0.1 -0.1)">
-       <use transform="translate(0 0.765625)" xlink:href="#DejaVuSans-49"/>
-       <use transform="translate(63.623047 0.765625)" xlink:href="#DejaVuSans-48"/>
-       <use transform="translate(128.203125 39.046875)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
-       <use transform="translate(186.855469 39.046875)scale(0.7)" xlink:href="#DejaVuSans-50"/>
-      </g>
-     </g>
-    </g>
-    <g id="ytick_3">
-     <g id="line2d_9">
+    <g id="ytick_4">
+     <g id="line2d_10">
       <defs>
        <path d="M 0 0 
 L -2 0 
-" id="mee593c7a4b" style="stroke:#000000;stroke-width:0.6;"/>
+" id="m7feeaf6abe" style="stroke:#000000;stroke-width:0.6;"/>
       </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="270.128838"/>
-      </g>
-     </g>
-    </g>
-    <g id="ytick_4">
-     <g id="line2d_10">
-      <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="250.693205"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="296.349466"/>
       </g>
      </g>
     </g>
     <g id="ytick_5">
      <g id="line2d_11">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="236.903403"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="282.959789"/>
       </g>
      </g>
     </g>
     <g id="ytick_6">
      <g id="line2d_12">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="226.207203"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="272.573948"/>
       </g>
      </g>
     </g>
     <g id="ytick_7">
      <g id="line2d_13">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="217.46777"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="264.088098"/>
       </g>
      </g>
     </g>
     <g id="ytick_8">
      <g id="line2d_14">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="210.078685"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="256.913414"/>
       </g>
      </g>
     </g>
     <g id="ytick_9">
      <g id="line2d_15">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="203.677969"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="250.69842"/>
       </g>
      </g>
     </g>
     <g id="ytick_10">
      <g id="line2d_16">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="198.032137"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="245.216407"/>
       </g>
      </g>
     </g>
     <g id="ytick_11">
      <g id="line2d_17">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="159.756334"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="208.051212"/>
       </g>
      </g>
     </g>
     <g id="ytick_12">
      <g id="line2d_18">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="140.320701"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="189.179521"/>
       </g>
      </g>
     </g>
     <g id="ytick_13">
      <g id="line2d_19">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="126.5309"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="175.789843"/>
       </g>
      </g>
     </g>
     <g id="ytick_14">
      <g id="line2d_20">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="115.834699"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="165.404003"/>
       </g>
      </g>
     </g>
     <g id="ytick_15">
      <g id="line2d_21">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="107.095266"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="156.918153"/>
       </g>
      </g>
     </g>
     <g id="ytick_16">
      <g id="line2d_22">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="99.706182"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="149.743469"/>
       </g>
      </g>
     </g>
     <g id="ytick_17">
      <g id="line2d_23">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="93.305465"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="143.528475"/>
       </g>
      </g>
     </g>
     <g id="ytick_18">
      <g id="line2d_24">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="87.659633"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="138.046462"/>
       </g>
      </g>
     </g>
     <g id="ytick_19">
      <g id="line2d_25">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="49.38383"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="100.881266"/>
       </g>
      </g>
     </g>
     <g id="ytick_20">
      <g id="line2d_26">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="29.948197"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="82.009576"/>
       </g>
      </g>
     </g>
     <g id="ytick_21">
      <g id="line2d_27">
       <g>
-       <use style="stroke:#000000;stroke-width:0.6;" x="55.880346" xlink:href="#mee593c7a4b" y="16.158396"/>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="68.619898"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_22">
+     <g id="line2d_28">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="58.234057"/>
       </g>
      </g>
     </g>
-    <g id="text_10">
+    <g id="ytick_23">
+     <g id="line2d_29">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="49.748208"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_24">
+     <g id="line2d_30">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="42.573524"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_25">
+     <g id="line2d_31">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="36.35853"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_26">
+     <g id="line2d_32">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.6;" x="56.015346" xlink:href="#m7feeaf6abe" y="30.876517"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_11">
      <!-- absolute trajectory error [DNS units] -->
-     <g transform="translate(19.300659 246.806187)rotate(-90)scale(0.1 -0.1)">
+     <g transform="translate(19.435659 246.806187)rotate(-90)scale(0.1 -0.1)">
       <defs>
        <path d="M 48.6875 27.296875 
 Q 48.6875 37.203125 44.609375 42.84375 
@@ -1000,9 +1070,9 @@ z
      </g>
     </g>
    </g>
-   <g id="line2d_28">
-    <path clip-path="url(#p15ab6f59e1)" d="M 73.694941 23.960364 
-L 429.986832 137.018105 
+   <g id="line2d_33">
+    <path clip-path="url(#p4f155a8e51)" d="M 73.823804 23.960364 
+L 429.992969 86.137037 
 " style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
     <defs>
      <path d="M 0 1.5 
@@ -1015,16 +1085,16 @@ C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0
 C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 
 C -0.77937 1.341951 -0.397805 1.5 0 1.5 
 z
-" id="mb362add29c" style="stroke:#1f77b4;"/>
+" id="m677678fb2c" style="stroke:#1f77b4;"/>
     </defs>
-    <g clip-path="url(#p15ab6f59e1)">
-     <use style="fill:#1f77b4;stroke:#1f77b4;" x="73.694941" xlink:href="#mb362add29c" y="23.960364"/>
-     <use style="fill:#1f77b4;stroke:#1f77b4;" x="429.986832" xlink:href="#mb362add29c" y="137.018105"/>
+    <g clip-path="url(#p4f155a8e51)">
+     <use style="fill:#1f77b4;stroke:#1f77b4;" x="73.823804" xlink:href="#m677678fb2c" y="23.960364"/>
+     <use style="fill:#1f77b4;stroke:#1f77b4;" x="429.992969" xlink:href="#m677678fb2c" y="86.137037"/>
     </g>
    </g>
-   <g id="line2d_29">
-    <path clip-path="url(#p15ab6f59e1)" d="M 73.694941 151.290058 
-L 429.986832 287.167636 
+   <g id="line2d_34">
+    <path clip-path="url(#p4f155a8e51)" d="M 73.823804 179.842942 
+L 429.992969 281.091827 
 " style="fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;"/>
     <defs>
      <path d="M 0 1.5 
@@ -1037,26 +1107,75 @@ C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0
 C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 
 C -0.77937 1.341951 -0.397805 1.5 0 1.5 
 z
-" id="m52d3e4d600" style="stroke:#ff7f0e;"/>
+" id="md9d020bb03" style="stroke:#ff7f0e;"/>
+    </defs>
+    <g clip-path="url(#p4f155a8e51)">
+     <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="73.823804" xlink:href="#md9d020bb03" y="179.842942"/>
+     <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="429.992969" xlink:href="#md9d020bb03" y="281.091827"/>
+    </g>
+   </g>
+   <g id="line2d_35">
+    <path clip-path="url(#p4f155a8e51)" d="M 73.823804 45.980935 
+L 429.992969 141.908924 
+" style="fill:none;stroke:#2ca02c;stroke-linecap:square;stroke-width:1.5;"/>
+    <defs>
+     <path d="M 0 1.5 
+C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 
+C 1.341951 0.77937 1.5 0.397805 1.5 0 
+C 1.5 -0.397805 1.341951 -0.77937 1.06066 -1.06066 
+C 0.77937 -1.341951 0.397805 -1.5 0 -1.5 
+C -0.397805 -1.5 -0.77937 -1.341951 -1.06066 -1.06066 
+C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0 
+C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 
+C -0.77937 1.341951 -0.397805 1.5 0 1.5 
+z
+" id="mfae7bf72f6" style="stroke:#2ca02c;"/>
+    </defs>
+    <g clip-path="url(#p4f155a8e51)">
+     <use style="fill:#2ca02c;stroke:#2ca02c;" x="73.823804" xlink:href="#mfae7bf72f6" y="45.980935"/>
+     <use style="fill:#2ca02c;stroke:#2ca02c;" x="429.992969" xlink:href="#mfae7bf72f6" y="141.908924"/>
+    </g>
+   </g>
+   <g id="line2d_36">
+    <path clip-path="url(#p4f155a8e51)" d="M 73.823804 188.351626 
+L 429.992969 287.167636 
+" style="fill:none;stroke:#d62728;stroke-linecap:square;stroke-width:1.5;"/>
+    <defs>
+     <path d="M 0 1.5 
+C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 
+C 1.341951 0.77937 1.5 0.397805 1.5 0 
+C 1.5 -0.397805 1.341951 -0.77937 1.06066 -1.06066 
+C 0.77937 -1.341951 0.397805 -1.5 0 -1.5 
+C -0.397805 -1.5 -0.77937 -1.341951 -1.06066 -1.06066 
+C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0 
+C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 
+C -0.77937 1.341951 -0.397805 1.5 0 1.5 
+z
+" id="me87b41afb3" style="stroke:#d62728;"/>
     </defs>
-    <g clip-path="url(#p15ab6f59e1)">
-     <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="73.694941" xlink:href="#m52d3e4d600" y="151.290058"/>
-     <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="429.986832" xlink:href="#m52d3e4d600" y="287.167636"/>
+    <g clip-path="url(#p4f155a8e51)">
+     <use style="fill:#d62728;stroke:#d62728;" x="73.823804" xlink:href="#me87b41afb3" y="188.351626"/>
+     <use style="fill:#d62728;stroke:#d62728;" x="429.992969" xlink:href="#me87b41afb3" y="287.167636"/>
     </g>
    </g>
-   <g id="line2d_30">
-    <path clip-path="url(#p15ab6f59e1)" d="M 73.694941 29.948197 
-L 429.986832 146.237217 
+   <g id="line2d_37">
+    <path clip-path="url(#p4f155a8e51)" d="M 73.823804 133.142634 
+L 429.992969 197.665371 
 " style="fill:none;stroke:#000000;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-width:1.5;"/>
    </g>
-   <g id="line2d_31">
-    <path clip-path="url(#p15ab6f59e1)" d="M 73.694941 140.320701 
-L 429.986832 273.222438 
-" style="fill:none;stroke:#000000;stroke-dasharray:1.5,1.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+   <g id="line2d_38">
+    <path clip-path="url(#p4f155a8e51)" d="M 73.823804 133.142634 
+L 429.992969 229.926739 
+" style="fill:none;stroke:#000000;stroke-dasharray:4.5,4.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+   </g>
+   <g id="line2d_39">
+    <path clip-path="url(#p4f155a8e51)" d="M 73.823804 133.142634 
+L 429.992969 262.188107 
+" style="fill:none;stroke:#000000;stroke-dasharray:6,6;stroke-dashoffset:0;stroke-width:1.5;"/>
    </g>
    <g id="patch_3">
-    <path d="M 55.880346 300.328 
-L 55.880346 10.8 
+    <path d="M 56.015346 300.328 
+L 56.015346 10.8 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_4">
@@ -1065,42 +1184,42 @@ L 447.801427 10.8
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_5">
-    <path d="M 55.880346 300.328 
+    <path d="M 56.015346 300.328 
 L 447.801427 300.328 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_6">
-    <path d="M 55.880346 10.8 
+    <path d="M 56.015346 10.8 
 L 447.801427 10.8 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="legend_1">
     <g id="patch_7">
-     <path d="M 353.059239 77.5125 
-L 440.801427 77.5125 
-Q 442.801427 77.5125 442.801427 75.5125 
-L 442.801427 17.8 
-Q 442.801427 15.8 440.801427 15.8 
-L 353.059239 15.8 
-Q 351.059239 15.8 351.059239 17.8 
-L 351.059239 75.5125 
-Q 351.059239 77.5125 353.059239 77.5125 
+     <path d="M 60.915346 296.828 
+L 141.042377 296.828 
+Q 142.442377 296.828 142.442377 295.428 
+L 142.442377 224.205187 
+Q 142.442377 222.805187 141.042377 222.805187 
+L 60.915346 222.805187 
+Q 59.515346 222.805187 59.515346 224.205187 
+L 59.515346 295.428 
+Q 59.515346 296.828 60.915346 296.828 
 z
 " style="fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;"/>
     </g>
-    <g id="line2d_32">
-     <path d="M 355.059239 23.898438 
-L 375.059239 23.898438 
+    <g id="line2d_40">
+     <path d="M 62.315346 228.474094 
+L 76.315346 228.474094 
 " style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
     </g>
-    <g id="line2d_33">
+    <g id="line2d_41">
      <g>
-      <use style="fill:#1f77b4;stroke:#1f77b4;" x="365.059239" xlink:href="#mb362add29c" y="23.898438"/>
+      <use style="fill:#1f77b4;stroke:#1f77b4;" x="69.315346" xlink:href="#m677678fb2c" y="228.474094"/>
      </g>
     </g>
-    <g id="text_11">
-     <!-- max error -->
-     <g transform="translate(383.059239 27.398438)scale(0.1 -0.1)">
+    <g id="text_12">
+     <!-- max error I4O3 -->
+     <g transform="translate(81.915346 230.924094)scale(0.07 -0.07)">
       <defs>
        <path d="M 52 44.1875 
 Q 55.375 50.25 60.0625 53.125 
@@ -1146,6 +1265,33 @@ L 29.78125 35.203125
 L 44.28125 54.6875 
 z
 " id="DejaVuSans-120"/>
+       <path d="M 9.8125 72.90625 
+L 19.671875 72.90625 
+L 19.671875 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-73"/>
+       <path d="M 39.40625 66.21875 
+Q 28.65625 66.21875 22.328125 58.203125 
+Q 16.015625 50.203125 16.015625 36.375 
+Q 16.015625 22.609375 22.328125 14.59375 
+Q 28.65625 6.59375 39.40625 6.59375 
+Q 50.140625 6.59375 56.421875 14.59375 
+Q 62.703125 22.609375 62.703125 36.375 
+Q 62.703125 50.203125 56.421875 58.203125 
+Q 50.140625 66.21875 39.40625 66.21875 
+z
+M 39.40625 74.21875 
+Q 54.734375 74.21875 63.90625 63.9375 
+Q 73.09375 53.65625 73.09375 36.375 
+Q 73.09375 19.140625 63.90625 8.859375 
+Q 54.734375 -1.421875 39.40625 -1.421875 
+Q 24.03125 -1.421875 14.8125 8.828125 
+Q 5.609375 19.09375 5.609375 36.375 
+Q 5.609375 53.65625 14.8125 63.9375 
+Q 24.03125 74.21875 39.40625 74.21875 
+z
+" id="DejaVuSans-79"/>
       </defs>
       <use xlink:href="#DejaVuSans-109"/>
       <use x="97.412109" xlink:href="#DejaVuSans-97"/>
@@ -1156,21 +1302,85 @@ z
       <use x="350.544922" xlink:href="#DejaVuSans-114"/>
       <use x="389.408203" xlink:href="#DejaVuSans-111"/>
       <use x="450.589844" xlink:href="#DejaVuSans-114"/>
+      <use x="491.703125" xlink:href="#DejaVuSans-32"/>
+      <use x="523.490234" xlink:href="#DejaVuSans-73"/>
+      <use x="552.982422" xlink:href="#DejaVuSans-52"/>
+      <use x="616.605469" xlink:href="#DejaVuSans-79"/>
+      <use x="695.316406" xlink:href="#DejaVuSans-51"/>
      </g>
     </g>
-    <g id="line2d_34">
-     <path d="M 355.059239 38.576563 
-L 375.059239 38.576563 
+    <g id="line2d_42">
+     <path d="M 62.315346 238.748781 
+L 76.315346 238.748781 
 " style="fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;"/>
     </g>
-    <g id="line2d_35">
+    <g id="line2d_43">
      <g>
-      <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="365.059239" xlink:href="#m52d3e4d600" y="38.576563"/>
+      <use style="fill:#ff7f0e;stroke:#ff7f0e;" x="69.315346" xlink:href="#md9d020bb03" y="238.748781"/>
      </g>
     </g>
-    <g id="text_12">
-     <!-- mean error -->
-     <g transform="translate(383.059239 42.076563)scale(0.1 -0.1)">
+    <g id="text_13">
+     <!-- mean error I4O3 -->
+     <g transform="translate(81.915346 241.198781)scale(0.07 -0.07)">
+      <use xlink:href="#DejaVuSans-109"/>
+      <use x="97.412109" xlink:href="#DejaVuSans-101"/>
+      <use x="158.935547" xlink:href="#DejaVuSans-97"/>
+      <use x="220.214844" xlink:href="#DejaVuSans-110"/>
+      <use x="283.59375" xlink:href="#DejaVuSans-32"/>
+      <use x="315.380859" xlink:href="#DejaVuSans-101"/>
+      <use x="376.904297" xlink:href="#DejaVuSans-114"/>
+      <use x="416.267578" xlink:href="#DejaVuSans-114"/>
+      <use x="455.130859" xlink:href="#DejaVuSans-111"/>
+      <use x="516.3125" xlink:href="#DejaVuSans-114"/>
+      <use x="557.425781" xlink:href="#DejaVuSans-32"/>
+      <use x="589.212891" xlink:href="#DejaVuSans-73"/>
+      <use x="618.705078" xlink:href="#DejaVuSans-52"/>
+      <use x="682.328125" xlink:href="#DejaVuSans-79"/>
+      <use x="761.039062" xlink:href="#DejaVuSans-51"/>
+     </g>
+    </g>
+    <g id="line2d_44">
+     <path d="M 62.315346 249.023469 
+L 76.315346 249.023469 
+" style="fill:none;stroke:#2ca02c;stroke-linecap:square;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_45">
+     <g>
+      <use style="fill:#2ca02c;stroke:#2ca02c;" x="69.315346" xlink:href="#mfae7bf72f6" y="249.023469"/>
+     </g>
+    </g>
+    <g id="text_14">
+     <!-- max error I8O5 -->
+     <g transform="translate(81.915346 251.473469)scale(0.07 -0.07)">
+      <use xlink:href="#DejaVuSans-109"/>
+      <use x="97.412109" xlink:href="#DejaVuSans-97"/>
+      <use x="158.691406" xlink:href="#DejaVuSans-120"/>
+      <use x="217.871094" xlink:href="#DejaVuSans-32"/>
+      <use x="249.658203" xlink:href="#DejaVuSans-101"/>
+      <use x="311.181641" xlink:href="#DejaVuSans-114"/>
+      <use x="350.544922" xlink:href="#DejaVuSans-114"/>
+      <use x="389.408203" xlink:href="#DejaVuSans-111"/>
+      <use x="450.589844" xlink:href="#DejaVuSans-114"/>
+      <use x="491.703125" xlink:href="#DejaVuSans-32"/>
+      <use x="523.490234" xlink:href="#DejaVuSans-73"/>
+      <use x="552.982422" xlink:href="#DejaVuSans-56"/>
+      <use x="616.605469" xlink:href="#DejaVuSans-79"/>
+      <use x="695.316406" xlink:href="#DejaVuSans-53"/>
+     </g>
+    </g>
+    <g id="line2d_46">
+     <path d="M 62.315346 259.298156 
+L 76.315346 259.298156 
+" style="fill:none;stroke:#d62728;stroke-linecap:square;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_47">
+     <g>
+      <use style="fill:#d62728;stroke:#d62728;" x="69.315346" xlink:href="#me87b41afb3" y="259.298156"/>
+     </g>
+    </g>
+    <g id="text_15">
+     <!-- mean error I8O5 -->
+     <g transform="translate(81.915346 261.748156)scale(0.07 -0.07)">
       <use xlink:href="#DejaVuSans-109"/>
       <use x="97.412109" xlink:href="#DejaVuSans-101"/>
       <use x="158.935547" xlink:href="#DejaVuSans-97"/>
@@ -1181,17 +1391,22 @@ L 375.059239 38.576563
       <use x="416.267578" xlink:href="#DejaVuSans-114"/>
       <use x="455.130859" xlink:href="#DejaVuSans-111"/>
       <use x="516.3125" xlink:href="#DejaVuSans-114"/>
+      <use x="557.425781" xlink:href="#DejaVuSans-32"/>
+      <use x="589.212891" xlink:href="#DejaVuSans-73"/>
+      <use x="618.705078" xlink:href="#DejaVuSans-56"/>
+      <use x="682.328125" xlink:href="#DejaVuSans-79"/>
+      <use x="761.039062" xlink:href="#DejaVuSans-53"/>
      </g>
     </g>
-    <g id="line2d_36">
-     <path d="M 355.059239 53.254688 
-L 375.059239 53.254688 
+    <g id="line2d_48">
+     <path d="M 62.315346 269.572844 
+L 76.315346 269.572844 
 " style="fill:none;stroke:#000000;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-width:1.5;"/>
     </g>
-    <g id="line2d_37"/>
-    <g id="text_13">
-     <!-- $\propto f^{-3.5}$ -->
-     <g transform="translate(383.059239 56.754688)scale(0.1 -0.1)">
+    <g id="line2d_49"/>
+    <g id="text_16">
+     <!-- $\propto f^{-2}$ -->
+     <g transform="translate(81.915346 272.022844)scale(0.07 -0.07)">
       <defs>
        <path d="M 25.734375 17.71875 
 Q 33.796875 17.71875 38.625 29.4375 
@@ -1245,48 +1460,37 @@ Q 19.96875 68.171875 24.625 72.078125
 Q 29.296875 75.984375 39.3125 75.984375 
 z
 " id="DejaVuSans-Oblique-102"/>
-       <path d="M 10.796875 72.90625 
-L 49.515625 72.90625 
-L 49.515625 64.59375 
-L 19.828125 64.59375 
-L 19.828125 46.734375 
-Q 21.96875 47.46875 24.109375 47.828125 
-Q 26.265625 48.1875 28.421875 48.1875 
-Q 40.625 48.1875 47.75 41.5 
-Q 54.890625 34.8125 54.890625 23.390625 
-Q 54.890625 11.625 47.5625 5.09375 
-Q 40.234375 -1.421875 26.90625 -1.421875 
-Q 22.3125 -1.421875 17.546875 -0.640625 
-Q 12.796875 0.140625 7.71875 1.703125 
-L 7.71875 11.625 
-Q 12.109375 9.234375 16.796875 8.0625 
-Q 21.484375 6.890625 26.703125 6.890625 
-Q 35.15625 6.890625 40.078125 11.328125 
-Q 45.015625 15.765625 45.015625 23.390625 
-Q 45.015625 31 40.078125 35.4375 
-Q 35.15625 39.890625 26.703125 39.890625 
-Q 22.75 39.890625 18.8125 39.015625 
-Q 14.890625 38.140625 10.796875 36.28125 
-z
-" id="DejaVuSans-53"/>
       </defs>
+      <use transform="translate(19.482422 0.765625)" xlink:href="#DejaVuSans-8733"/>
+      <use transform="translate(110.400391 0.765625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(153.053177 39.046875)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
+      <use transform="translate(211.705521 39.046875)scale(0.7)" xlink:href="#DejaVuSans-50"/>
+     </g>
+    </g>
+    <g id="line2d_50">
+     <path d="M 62.315346 279.847531 
+L 76.315346 279.847531 
+" style="fill:none;stroke:#000000;stroke-dasharray:4.5,4.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_51"/>
+    <g id="text_17">
+     <!-- $\propto f^{-3}$ -->
+     <g transform="translate(81.915346 282.297531)scale(0.07 -0.07)">
       <use transform="translate(19.482422 0.765625)" xlink:href="#DejaVuSans-8733"/>
       <use transform="translate(110.400391 0.765625)" xlink:href="#DejaVuSans-Oblique-102"/>
       <use transform="translate(153.053177 39.046875)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
       <use transform="translate(211.705521 39.046875)scale(0.7)" xlink:href="#DejaVuSans-51"/>
-      <use transform="translate(256.241654 39.046875)scale(0.7)" xlink:href="#DejaVuSans-46"/>
-      <use transform="translate(278.49263 39.046875)scale(0.7)" xlink:href="#DejaVuSans-53"/>
      </g>
     </g>
-    <g id="line2d_38">
-     <path d="M 355.059239 67.932813 
-L 375.059239 67.932813 
-" style="fill:none;stroke:#000000;stroke-dasharray:1.5,1.5;stroke-dashoffset:0;stroke-width:1.5;"/>
+    <g id="line2d_52">
+     <path d="M 62.315346 290.122219 
+L 76.315346 290.122219 
+" style="fill:none;stroke:#000000;stroke-dasharray:6,6;stroke-dashoffset:0;stroke-width:1.5;"/>
     </g>
-    <g id="line2d_39"/>
-    <g id="text_14">
+    <g id="line2d_53"/>
+    <g id="text_18">
      <!-- $\propto f^{-4}$ -->
-     <g transform="translate(383.059239 71.432813)scale(0.1 -0.1)">
+     <g transform="translate(81.915346 292.572219)scale(0.07 -0.07)">
       <use transform="translate(19.482422 0.684375)" xlink:href="#DejaVuSans-8733"/>
       <use transform="translate(110.400391 0.684375)" xlink:href="#DejaVuSans-Oblique-102"/>
       <use transform="translate(153.053177 38.965625)scale(0.7)" xlink:href="#DejaVuSans-8722"/>
@@ -1297,8 +1501,8 @@ L 375.059239 67.932813
   </g>
  </g>
  <defs>
-  <clipPath id="p15ab6f59e1">
-   <rect height="289.528" width="391.921081" x="55.880346" y="10.8"/>
+  <clipPath id="p4f155a8e51">
+   <rect height="289.528" width="391.786081" x="56.015346" y="10.8"/>
   </clipPath>
  </defs>
 </svg>
diff --git a/examples/convergence/fields_temporal.py b/examples/convergence/fields_temporal.py
index 85ada49f..c7111c68 100644
--- a/examples/convergence/fields_temporal.py
+++ b/examples/convergence/fields_temporal.py
@@ -7,7 +7,7 @@ from TurTLE import DNS, PP
 
 from fields_base import *
 
-base_niterations = 128
+base_niterations = 512
 test_niterations = 32
 grid_size = 128
 
@@ -162,8 +162,8 @@ def plot_error_field(err_vs_t = False):
            marker = '.',
            label = 'NSVE vs NSE')
     fl = np.array(factor_list).astype(np.float)
-    for ee in [1, 2, 3]:
-        a.plot(fl, error_list[0][0] * fl**(-ee),
+    for ee in [2, 3]:
+        a.plot(fl[:2], error_list[0][0] * fl[:2]**(-ee),
                dashes = (ee, ee),
                color = 'black',
                label = '$\propto f^{{-{0}}}$'.format(ee),
diff --git a/examples/convergence/particles_temporal.py b/examples/convergence/particles_temporal.py
index 013126db..054a2538 100644
--- a/examples/convergence/particles_temporal.py
+++ b/examples/convergence/particles_temporal.py
@@ -3,7 +3,7 @@ import h5py
 import matplotlib.pyplot as plt
 
 import TurTLE
-from TurTLE import DNS, PP
+from TurTLE import DNS
 
 base_niterations = 256
 
@@ -17,11 +17,11 @@ neighbours_smoothness_list = [
         (3, 2)]
 
 def main():
-    #generate_initial_conditions()
+    generate_initial_conditions()
 
-    #run_simulations_particles()
-    plot_error_particles()
+    run_simulations_particles()
 
+    plot_error_particles()
     plot_traj_particles()
     return None
 
@@ -52,21 +52,6 @@ def generate_initial_conditions():
             '--kMeta',  '1.',
             '--niter_stat', '16',
             '--checkpoints_per_file', '{0}'.format(16)])
-
-# 3. Generate initial conditions for NSE runs at 1x, 2x and 4x the
-#    base resolution.
-    # create postprocess object
-    cc = PP()
-    # compute velocity field at last iteration
-    cc.launch([
-            'get_velocity',
-            '--np', '{0}'.format(nprocesses),
-            '--ntpp', '{0}'.format(nthreads_per_process),
-            '--simname', 'base',
-            '--precision', 'double',
-            '--iter0', '{0}'.format(base_niterations),
-            '--iter1', '{0}'.format(base_niterations)])
-    # we don't need to update "checkpoint" file after "get_velocity"
     return None
 
 def run_simulations_particles():
-- 
GitLab


From dd1359209bb454b08c5c54b8d66b63212c0d6e75 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Wed, 26 Jan 2022 08:50:02 +0100
Subject: [PATCH 22/24] updates convergence text

---
 documentation/sphinx_static/convergence.rst   |   17 +
 .../sphinx_static/convergence_particles.rst   |  320 +-
 documentation/sphinx_static/trajectories.svg  | 3181 ++++++++++++++---
 examples/convergence/particles_temporal.py    |    6 +-
 4 files changed, 2949 insertions(+), 575 deletions(-)

diff --git a/documentation/sphinx_static/convergence.rst b/documentation/sphinx_static/convergence.rst
index 4c05215f..5d0b9574 100644
--- a/documentation/sphinx_static/convergence.rst
+++ b/documentation/sphinx_static/convergence.rst
@@ -6,6 +6,23 @@ standard approaches to differential equations, one may use
 generic convergence tests to characterize algorithms and/or
 implementations.
 
+As an example usage of TurTLE, we show here how to characterize
+convergence for the field solver, or the AdamsBashforth
+particle solver.
+The purpose of this tutorial is to introduce TurTLE users to nontrivial
+workflows that involve keeping track of a number of simulations and
+prescribing their initial conditions.
+
+The field solver test is a fairly simple pursuit, showing basic
+operations with the `turtle` launcher.
+
+The particle solver test is also minimal within the methodological
+constraints imposed by the use of the Adams Bashforth integration
+method, leading to a relatively increased complexity.
+The example shows how to account for a number of technical details: full
+control over multi-step method initialization and full control of fluid
+solver forcing parameters.
+
 
 Navier-Stokes solution
 ----------------------
diff --git a/documentation/sphinx_static/convergence_particles.rst b/documentation/sphinx_static/convergence_particles.rst
index 0d4b2418..35e04080 100644
--- a/documentation/sphinx_static/convergence_particles.rst
+++ b/documentation/sphinx_static/convergence_particles.rst
@@ -96,9 +96,9 @@ We then define the function that runs the particle simulations,
 Because we use an Adams-Bashforth method, we need to know the values of
 the particle velocity (i.e. the right-hand-side of the ODE) at previous
 steps.
-TurTLE accomplishes this by using the Euler integration scheme for "time
-step 0", then using a 2nd order Adams-Bashforth, etc, until the desired
-number of right-hand-side values is stored.
+By default TurTLE accomplishes this by using the Euler integration scheme
+for "time step 0", then using a 2nd order Adams-Bashforth, etc, until
+the desired number of right-hand-side values is stored.
 Thus the code first integrates trajectories for 8 iterations, and the
 output will contain the additional information.
 This happens because such information is crucial for checkpointing ---
@@ -108,7 +108,7 @@ affecting the numerical solution.
 To put it simply, for the simulation "nsvep_base" the dataset
 "tracers0/rhs/0" contains only zeros, and TurTLE ignores them.
 However, the "tracers0/rhs/8" dataset for simulation "nsvep_1x" contains
-meaningful values (that are used because we request that `iter0` is
+meaningful values (that **are** used because we request that `iter0` is
 different from 0).
 
 .. code:: python
@@ -116,70 +116,109 @@ different from 0).
     def run_simulations_particles():
         # change these two values as neded.
         # number of MPI processes to use
-        nprocesses = 4
+        nprocesses = 8
         # number of OpenMP threads per MPI process to use
-        nthreads_per_process = 2
+        nthreads_per_process = 1
 
-    # 1. Run NSVEparticles for resolution 1x, for a few iterations, to build up rhs values.
+    # 1. Run NSVEparticles for a few iterations, to build up rhs values, consistent
+    #    with the relevant velocity field.
         factor = 1
-        # create dns object
-        cc = DNS()
-        # launch simulation
-        cc.launch([
+        for neighbours, smoothness in neighbours_smoothness_list:
+            interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+            # create dns object
+            cc = DNS()
+            # launch simulation
+            cc.launch([
                 'NSVEparticles',
                 '-n', '{0}'.format(factor*32),
                 '--np', '{0}'.format(nprocesses),
                 '--ntpp', '{0}'.format(nthreads_per_process),
-                '--src-simname', 'base_{0}x'.format(factor),
+                '--src-simname', 'base',
                 '--src-iteration', '{0}'.format(base_niterations),
-                '--simname', 'nsvep_base'.format(factor),
+                '--simname', 'nsvep_base_' + interp_name,
                 '--precision', 'double',
-                '--dtfactor', '0.3',
-                '--kMeta', '{0}'.format(1.0*factor),
-                '--niter_todo', '{0}'.format(8),
-                '--niter_out', '{0}'.format(8),
-                '--niter_stat', '{0}'.format(8),
+                '--dtfactor', '{0}'.format(base_particle_dt/4),
+                '--kMeta', '{0}'.format(factor*1.0),
+                '--niter_todo', '{0}'.format(20),
+                '--niter_out', '{0}'.format(1),
+                '--niter_stat', '{0}'.format(1),
                 '--nparticles', '{0}'.format(nparticles),
-                '--niter_part', '{0}'.format(8),
+                '--niter_part', '{0}'.format(1),
+                '--tracers0_neighbours', '{0}'.format(neighbours),
+                '--tracers0_smoothness', '{0}'.format(smoothness),
+                '--tracers0_integration_steps', '4',
                 '--cpp_random_particles', '{0}'.format(particle_random_seed)])
 
     # 2. Prepare initial conditions
-        for factor in [1, 2, 4]:
-            df = h5py.File('nsvep_{0}x_checkpoint_0.h5'.format(factor), 'w')
-            # field
-            df['vorticity/complex/{0}'.format(8*factor)] = h5py.ExternalLink(
-                'base_{0}x_checkpoint_0.h5'.format(factor),
-                'vorticity/complex/{0}'.format(base_niterations))
-            # particles
-            df['tracers0/state/{0}'.format(8*factor)] = h5py.ExternalLink(
-                    'nsvep_base_checkpoint_0.h5',
-                    'tracers0/state/8')
-            df['tracers0/rhs/{0}'.format(8*factor)] = h5py.ExternalLink(
-                    'nsvep_base_checkpoint_0.h5',
-                    'tracers0/rhs/8')
-            df.close()
+        for neighbours, smoothness in neighbours_smoothness_list:
+            interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+            for factor in [1, 2, 4]:
+                df = h5py.File('nsvep_{0}x_{1}_checkpoint_0.h5'.format(factor, interp_name), 'w')
+                # field
+                field_iteration = 16
+                df['vorticity/complex/{0}'.format(8*factor)] = h5py.ExternalLink(
+                    'nsvep_base_{0}_checkpoint_0.h5'.format(interp_name),
+                    'vorticity/complex/{0}'.format(field_iteration))
+                # particles
+                df['tracers0/state/{0}'.format(8*factor)] = h5py.ExternalLink(
+                        'nsvep_base_{0}_checkpoint_0.h5'.format(interp_name),
+                        'tracers0/state/16')
+                # copy rhs
+                source_file = h5py.File(
+                        'nsvep_base_{0}_checkpoint_0.h5'.format(interp_name), 'r')
+                rhs = source_file['tracers0/rhs/16'][()]
+                for tt in range(1, rhs.shape[0]):
+                    ii = 16 - tt*4//factor + 1
+                    #print(factor, tt, ii)
+                    rhs[tt] = source_file['tracers0/rhs/{0}'.format(16 - tt*4//factor + 1)][1]
+                df['tracers0/rhs/{0}'.format(8*factor)] = rhs
+                df.close()
 
     # 3. Run NSVEparticles
         for factor in [1, 2, 4]:
-            # create dns object
-            cc = DNS()
-            # launch simulation
-            cc.launch([
-                    'NSVEparticles',
-                    '-n', '{0}'.format(factor*32),
-                    '--np', '{0}'.format(nprocesses),
-                    '--ntpp', '{0}'.format(nthreads_per_process),
-                    '--simname', 'nsvep_{0}x'.format(factor),
-                    '--precision', 'double',
-                    '--dtfactor', '0.3',
-                    '--kMeta', '{0}'.format(1.0*factor),
-                    '--niter_todo', '{0}'.format(test_niterations*factor),
-                    '--niter_out', '{0}'.format(test_niterations*factor),
-                    '--niter_stat', '{0}'.format(4*factor),
-                    '--nparticles', '{0}'.format(nparticles),
-                    '--niter_part', '{0}'.format(2*factor),
-                    '--cpp_random_particles', '0'], # turn off cpp particle initialization
-                    iter0 = 8*factor)
+            # Test different interpolations.
+            # The loop iterates over number of neighbours and smoothness.
+            # The simulation names are defined based on "kernel size" and "order
+            # of polynomial".
+            # We do this to emphasize the one-to-one correspondence between
+            # neighbours and kernel size, and smoothness and order of polynomial.
+            for neighbours, smoothness in neighbours_smoothness_list:
+                interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+                source_file = h5py.File('nsvep_base_{0}.h5'.format(interp_name), 'r')
+                # create dns object
+                cc = DNS()
+                # launch simulation
+                cc.launch([
+                        'NSVEparticles',
+                        '-n', '{0}'.format(source_file['parameters/nx'][()]),
+                        '--np', '{0}'.format(nprocesses),
+                        '--ntpp', '{0}'.format(nthreads_per_process),
+                        '--simname', 'nsvep_{0}x_{1}'.format(factor, interp_name),
+                        '--precision', 'double',
+                        '--dtfactor', '{0}'.format(base_particle_dt/factor),
+                        '--niter_todo', '{0}'.format(test_niterations_particles*factor+8*factor),
+                        '--niter_out', '{0}'.format(test_niterations_particles*factor+8*factor),
+                        '--niter_stat', '{0}'.format(1),
+                        ## ensure fluid physics is the same
+                        '--dealias_type', '{0}'.format(source_file['parameters/dealias_type'][()]),
+                        '--energy', '{0}'.format(source_file['parameters/energy'][()]),
+                        '--famplitude', '{0}'.format(source_file['parameters/famplitude'][()]),
+                        '--fk0', '{0}'.format(source_file['parameters/fk0'][()]),
+                        '--fk1', '{0}'.format(source_file['parameters/fk1'][()]),
+                        '--fmode', '{0}'.format(source_file['parameters/fmode'][()]),
+                        '--friction_coefficient', '{0}'.format(source_file['parameters/friction_coefficient'][()]),
+                        '--injection_rate', '{0}'.format(source_file['parameters/injection_rate'][()]),
+                        '--nu', '{0}'.format(source_file['parameters/nu'][()]),
+                        '--forcing_type', '{0}'.format(str(source_file['parameters/forcing_type'][()], 'ascii')),
+                        ## particle params
+                        '--nparticles', '{0}'.format(nparticles),
+                        '--niter_part', '{0}'.format(1),
+                        '--tracers0_neighbours', '{0}'.format(neighbours),
+                        '--tracers0_smoothness', '{0}'.format(smoothness),
+                        '--tracers0_integration_steps', '4',
+                        '--cpp_random_particles', '0'], # turn off C++ particle initialization
+                        iter0 = 8*factor)
+                source_file.close()
         return None
 
 To compute the trajectory integration error, we proceed as explained
@@ -190,95 +229,146 @@ above, and compare each DNS with its corresponding double-the-resolution DNS:
     def plot_error_particles():
         f = plt.figure()
         a = f.add_subplot(111)
-        err_max_list = []
-        err_mean_list = []
         factor_list = [1, 2]
-        for factor in factor_list:
-            c1 = DNS(simname = 'nsvep_{0}x'.format(factor))
-            c2 = DNS(simname = 'nsvep_{0}x'.format(factor*2))
-            for cc in [c1, c2]:
-                cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
-            c1.compute_statistics(iter0 = 8*factor)
-            c2.compute_statistics(iter0 = 8*factor*2)
-            final_iter_x1 = c1.get_data_file()['iteration'][()]
-            final_iter_x2 = c2.get_data_file()['iteration'][()]
-            f1 = h5py.File(c1.simname + '_checkpoint_0.h5', 'r')
-            f2 = h5py.File(c2.simname + '_checkpoint_0.h5', 'r')
-            x1 = f1['tracers0/state/{0}'.format(final_iter_x1)][()]
-            x2 = f2['tracers0/state/{0}'.format(final_iter_x2)][()]
-            err_max_list.append(np.max(np.abs(x2 - x1)))
-            err_mean_list.append(np.mean(np.abs(x2 - x1)))
-            f1.close()
-            f2.close()
         factor_list = np.array(factor_list).astype(np.float)
-        err_max_list = np.array(err_max_list)
-        err_mean_list = np.array(err_mean_list)
-        a.plot(factor_list, err_max_list, marker = '.', label = 'max error')
-        a.plot(factor_list, err_mean_list, marker = '.', label = 'mean error')
-        a.plot(factor_list,
-               (1e-2)*factor_list**(-3),
-               color = 'black',
-               dashes = (2, 2),
-               label = '$\propto f^{-3}$')
-        a.plot(factor_list,
-               (1e-2)*factor_list**(-4),
-               color = 'black',
-               dashes = (1, 1),
-               label = '$\propto f^{-4}$')
+        for neighbours, smoothness in neighbours_smoothness_list:
+            interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+            err_max_list = []
+            err_mean_list = []
+            for factor in factor_list:
+                factor = int(factor)
+                c1 = DNS(simname = 'nsvep_{0}x_'.format(int(factor)) + interp_name)
+                c2 = DNS(simname = 'nsvep_{0}x_'.format(int(factor)*2) + interp_name)
+                for cc in [c1, c2]:
+                    cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
+                c1.compute_statistics(iter0 = 8*factor)
+                c2.compute_statistics(iter0 = 8*factor*2)
+                final_iter_x1 = c1.get_data_file()['iteration'][()]
+                final_iter_x2 = c2.get_data_file()['iteration'][()]
+                f1 = h5py.File(c1.simname + '_checkpoint_0.h5', 'r')
+                f2 = h5py.File(c2.simname + '_checkpoint_0.h5', 'r')
+                x1 = f1['tracers0/state/{0}'.format(final_iter_x1)][()]
+                x2 = f2['tracers0/state/{0}'.format(final_iter_x2)][()]
+                diff = np.sqrt(np.sum((x2-x1)**2, axis = -1))
+                err_max_list.append(np.max(diff))
+                err_mean_list.append(np.mean(diff))
+                f1.close()
+                f2.close()
+            err_max_list = np.array(err_max_list)
+            err_mean_list = np.array(err_mean_list)
+            a.plot(factor_list, err_max_list, marker = '.', label = 'max error ' + interp_name)
+            a.plot(factor_list, err_mean_list, marker = '.', label = 'mean error ' + interp_name)
+        for ee in [2, 3, 4]:
+            a.plot(factor_list,
+                   (1e-4)*factor_list**(-ee),
+                   color = 'black',
+                   dashes = (ee, ee),
+                   label = '$\propto f^{{-{0}}}$'.format(ee))
         a.set_xscale('log')
         a.set_yscale('log')
         a.set_xlabel('resolution factor f')
         a.set_ylabel('absolute trajectory error [DNS units]')
-        a.legend(loc = 'best')
+        a.legend(loc = 'best', fontsize = 7)
         f.tight_layout()
         f.savefig('err_vs_dt_particle.pdf')
-        f.savefig('err_vs_dt_particle.png')
+        f.savefig('err_vs_dt_particle.svg')
         plt.close(f)
         return None
 
-Note that we plot two error measures: the maximum error, as well as the
-mean error.
-
-.. image:: err_vs_dt_particle.svg
-
-The plot suggests that these converge at different rates: the mean error
-exhibits 4th order convergence in "factor", whereas the maximum error
-seems to converge like :math:`f^{3.5}` (closer to the limit :math:`f^3`
-imposed by the fluid solver error).
-While a more detailed investigation would be in order, I speculate that
-for this particular setup the increase of the spatial resolution along
-with the temporal resolution renders the interpolation errors (which should
-decrease the global order to 2) smaller than the simultaneous temporal
-integration errors.
-In any case the interplay of the different error sources is a fairly
-complex subject in itself, which we don't propose to address here in
-full.
-
 For the beginner's convenience, we also provide a method to plot
-individual particle trajectories:
+individual particle trajectories.
+Note that the second part of this function is in fact a sanity check for
+the initial conditions: the plot confirms that the data required for the
+multi-step method (explicitly placed in the checkpoint file) is
+consistent with the simulation parameters.
 
 .. code:: python
 
     def plot_traj_particles():
+        ###########################################################################
         f = plt.figure()
         a = f.add_subplot(111)
-        for factor in [1, 2, 4]:
-            cc = DNS(simname = 'nsvep_{0}x'.format(factor))
-            cc.compute_statistics(iter0 = 8*factor)
-            xx = read_trajectory(cc, 14, iter0 = 8*factor)
-            a.plot(xx[:, 0], xx[:, 1])
+        for neighbours, smoothness in neighbours_smoothness_list:
+            interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+            for factor in [1, 2, 4]:
+                cc = DNS(simname = 'nsvep_{0}x_'.format(factor) + interp_name)
+                cc.compute_statistics(iter0 = 8*factor)
+                tt = 3
+                xx = read_trajectory(cc, tt, iter0 = 8*factor)
+                a.plot(xx[:, 0],
+                       xx[:, 1],
+                       label = interp_name + '$f = {0}$'.format(factor),
+                       marker = 'x',
+                       dashes = (4/factor, 3, 4/factor),
+                       alpha = 0.2)
+                #a.plot(xx[:, 0], xx[:, 1], dashes = (4/factor, 3, 4/factor), alpha = 0.2)
+        a.legend(loc = 'best', fontsize = 7)
+        a.set_xlabel('$x$ [code units]')
+        a.set_ylabel('$y$ [code units]')
         f.tight_layout()
         f.savefig('trajectories.pdf')
-        f.savefig('trajectories.png')
+        f.savefig('trajectories.svg')
         plt.close(f)
+        ###########################################################################
+        ###########################################################################
+        traj_index = 3
+        for neighbours, smoothness in neighbours_smoothness_list:
+            interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+            cc = DNS(simname = 'nsvep_base_' + interp_name)
+            cc.compute_statistics()
+            xx_base = read_trajectory(cc, traj_index, iter0 = 0, dset_name = 'velocity')
+            iter0 = 16
+            tt_base = np.array(range(iter0, iter0 + xx_base.shape[0]))*cc.parameters['dt']
+            f = plt.figure()
+            ax_counter = 1
+            for factor in [1, 2, 4]:
+                a = f.add_subplot(310 + ax_counter)
+                ax_counter += 1
+                a.plot(tt_base,
+                       xx_base[:, 2],
+                       label = 'base_' + interp_name,
+                       marker = '+',
+                       linewidth = 0.5,
+                       alpha = 0.2)
+                cc = DNS(simname = 'nsvep_{0}x_'.format(factor) + interp_name)
+                cc.compute_statistics(iter0 = 8*factor)
+                xx = read_trajectory(cc, traj_index, iter0 = 8*factor, dset_name = 'velocity')
+                tt = np.array(range(8*factor, xx.shape[0]+8*factor))*cc.parameters['dt']
+                a.plot(tt,
+                       xx[:, 2],
+                       label = interp_name + '$f = {0}$'.format(factor),
+                       marker = 'x',
+                       dashes = (4/factor, 3, 4/factor),
+                       alpha = 0.2)
+                df = h5py.File(cc.simname + '_checkpoint_0.h5', 'r')
+                xx = df['tracers0/rhs/{0}'.format(8*factor)][()]
+                for rhs_index in [1, 2, 3]:
+                    a.scatter((8*factor - rhs_index)*cc.parameters['dt'],
+                              xx[rhs_index, traj_index, 2],
+                              marker = '*',
+                              zorder = -10,
+                              alpha = 0.5,
+                              color = 'black')
+                df.close()
+                a.legend(loc = 'best', fontsize = 7)
+                a.set_xlabel('$t$ [code units]')
+                a.set_ylabel('$v_y$ [code units]')
+            f.tight_layout()
+            f.savefig('velocities_{0}.pdf'.format(interp_name))
+            plt.close(f)
+        ###########################################################################
         return None
 
-    def read_trajectory(cc, traj_index, iter0):
+    def read_trajectory(
+            cc,
+            traj_index,
+            iter0,
+            dset_name = 'position'):
         cc.parameters['niter_part'] = cc.get_data_file()['parameters/niter_part'][()]
         df = cc.get_particle_file()
         xx = []
-        for ii in range(iter0, cc.get_data_file()['iteration'][()], cc.parameters['niter_part']):
-            xx.append(df['tracers0/position/{0}'.format(ii)][traj_index])
+        for ii in range(iter0, cc.get_data_file()['iteration'][()]+1, cc.parameters['niter_part']):
+            xx.append(df['tracers0/' + dset_name + '/{0}'.format(ii)][traj_index])
         df.close()
         return np.array(xx)
 
diff --git a/documentation/sphinx_static/trajectories.svg b/documentation/sphinx_static/trajectories.svg
index fd6796fa..5c6ec9a6 100644
--- a/documentation/sphinx_static/trajectories.svg
+++ b/documentation/sphinx_static/trajectories.svg
@@ -7,7 +7,7 @@
   <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <cc:Work>
     <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-    <dc:date>2022-01-07T21:18:20.267358</dc:date>
+    <dc:date>2022-01-20T07:20:04.265273</dc:date>
     <dc:format>image/svg+xml</dc:format>
     <dc:creator>
      <cc:Agent>
@@ -31,10 +31,10 @@ z
   </g>
   <g id="axes_1">
    <g id="patch_2">
-    <path d="M 63.47 301.9975 
+    <path d="M 50.69 301.9975 
 L 450 301.9975 
 L 450 10.8 
-L 63.47 10.8 
+L 50.69 10.8 
 z
 " style="fill:#ffffff;"/>
    </g>
@@ -44,15 +44,117 @@ z
       <defs>
        <path d="M 0 0 
 L 0 3.5 
-" id="m84bd32ba32" style="stroke:#000000;stroke-width:0.8;"/>
+" id="m78350b8f3e" style="stroke:#000000;stroke-width:0.8;"/>
       </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="65.389997" xlink:href="#m84bd32ba32" y="301.9975"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="92.807052" xlink:href="#m78350b8f3e" y="301.9975"/>
       </g>
      </g>
      <g id="text_1">
-      <!-- 5.60 -->
-      <g transform="translate(54.257185 316.595937)scale(0.1 -0.1)">
+      <!-- 1.3 -->
+      <g transform="translate(84.85549 316.595937)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 12.40625 8.296875 
+L 28.515625 8.296875 
+L 28.515625 63.921875 
+L 10.984375 60.40625 
+L 10.984375 69.390625 
+L 28.421875 72.90625 
+L 38.28125 72.90625 
+L 38.28125 8.296875 
+L 54.390625 8.296875 
+L 54.390625 0 
+L 12.40625 0 
+z
+" id="DejaVuSans-49"/>
+        <path d="M 10.6875 12.40625 
+L 21 12.40625 
+L 21 0 
+L 10.6875 0 
+z
+" id="DejaVuSans-46"/>
+        <path d="M 40.578125 39.3125 
+Q 47.65625 37.796875 51.625 33 
+Q 55.609375 28.21875 55.609375 21.1875 
+Q 55.609375 10.40625 48.1875 4.484375 
+Q 40.765625 -1.421875 27.09375 -1.421875 
+Q 22.515625 -1.421875 17.65625 -0.515625 
+Q 12.796875 0.390625 7.625 2.203125 
+L 7.625 11.71875 
+Q 11.71875 9.328125 16.59375 8.109375 
+Q 21.484375 6.890625 26.8125 6.890625 
+Q 36.078125 6.890625 40.9375 10.546875 
+Q 45.796875 14.203125 45.796875 21.1875 
+Q 45.796875 27.640625 41.28125 31.265625 
+Q 36.765625 34.90625 28.71875 34.90625 
+L 20.21875 34.90625 
+L 20.21875 43.015625 
+L 29.109375 43.015625 
+Q 36.375 43.015625 40.234375 45.921875 
+Q 44.09375 48.828125 44.09375 54.296875 
+Q 44.09375 59.90625 40.109375 62.90625 
+Q 36.140625 65.921875 28.71875 65.921875 
+Q 24.65625 65.921875 20.015625 65.03125 
+Q 15.375 64.15625 9.8125 62.3125 
+L 9.8125 71.09375 
+Q 15.4375 72.65625 20.34375 73.4375 
+Q 25.25 74.21875 29.59375 74.21875 
+Q 40.828125 74.21875 47.359375 69.109375 
+Q 53.90625 64.015625 53.90625 55.328125 
+Q 53.90625 49.265625 50.4375 45.09375 
+Q 46.96875 40.921875 40.578125 39.3125 
+z
+" id="DejaVuSans-51"/>
+       </defs>
+       <use xlink:href="#DejaVuSans-49"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_2">
+     <g id="line2d_2">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="169.734825" xlink:href="#m78350b8f3e" y="301.9975"/>
+      </g>
+     </g>
+     <g id="text_2">
+      <!-- 1.4 -->
+      <g transform="translate(161.783262 316.595937)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 37.796875 64.3125 
+L 12.890625 25.390625 
+L 37.796875 25.390625 
+z
+M 35.203125 72.90625 
+L 47.609375 72.90625 
+L 47.609375 25.390625 
+L 58.015625 25.390625 
+L 58.015625 17.1875 
+L 47.609375 17.1875 
+L 47.609375 0 
+L 37.796875 0 
+L 37.796875 17.1875 
+L 4.890625 17.1875 
+L 4.890625 26.703125 
+z
+" id="DejaVuSans-52"/>
+       </defs>
+       <use xlink:href="#DejaVuSans-49"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-52"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_3">
+     <g id="line2d_3">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="246.662597" xlink:href="#m78350b8f3e" y="301.9975"/>
+      </g>
+     </g>
+     <g id="text_3">
+      <!-- 1.5 -->
+      <g transform="translate(238.711035 316.595937)scale(0.1 -0.1)">
        <defs>
         <path d="M 10.796875 72.90625 
 L 49.515625 72.90625 
@@ -78,12 +180,23 @@ Q 22.75 39.890625 18.8125 39.015625
 Q 14.890625 38.140625 10.796875 36.28125 
 z
 " id="DejaVuSans-53"/>
-        <path d="M 10.6875 12.40625 
-L 21 12.40625 
-L 21 0 
-L 10.6875 0 
-z
-" id="DejaVuSans-46"/>
+       </defs>
+       <use xlink:href="#DejaVuSans-49"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_4">
+     <g id="line2d_4">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="323.59037" xlink:href="#m78350b8f3e" y="301.9975"/>
+      </g>
+     </g>
+     <g id="text_4">
+      <!-- 1.6 -->
+      <g transform="translate(315.638807 316.595937)scale(0.1 -0.1)">
+       <defs>
         <path d="M 33.015625 40.375 
 Q 26.375 40.375 22.484375 35.828125 
 Q 18.609375 31.296875 18.609375 23.390625 
@@ -114,194 +227,22 @@ Q 40.921875 74.21875 44.703125 73.484375
 Q 48.484375 72.75 52.59375 71.296875 
 z
 " id="DejaVuSans-54"/>
-        <path d="M 31.78125 66.40625 
-Q 24.171875 66.40625 20.328125 58.90625 
-Q 16.5 51.421875 16.5 36.375 
-Q 16.5 21.390625 20.328125 13.890625 
-Q 24.171875 6.390625 31.78125 6.390625 
-Q 39.453125 6.390625 43.28125 13.890625 
-Q 47.125 21.390625 47.125 36.375 
-Q 47.125 51.421875 43.28125 58.90625 
-Q 39.453125 66.40625 31.78125 66.40625 
-z
-M 31.78125 74.21875 
-Q 44.046875 74.21875 50.515625 64.515625 
-Q 56.984375 54.828125 56.984375 36.375 
-Q 56.984375 17.96875 50.515625 8.265625 
-Q 44.046875 -1.421875 31.78125 -1.421875 
-Q 19.53125 -1.421875 13.0625 8.265625 
-Q 6.59375 17.96875 6.59375 36.375 
-Q 6.59375 54.828125 13.0625 64.515625 
-Q 19.53125 74.21875 31.78125 74.21875 
-z
-" id="DejaVuSans-48"/>
-       </defs>
-       <use xlink:href="#DejaVuSans-53"/>
-       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-54"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-48"/>
-      </g>
-     </g>
-    </g>
-    <g id="xtick_2">
-     <g id="line2d_2">
-      <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="117.91104" xlink:href="#m84bd32ba32" y="301.9975"/>
-      </g>
-     </g>
-     <g id="text_2">
-      <!-- 5.62 -->
-      <g transform="translate(106.778227 316.595937)scale(0.1 -0.1)">
-       <defs>
-        <path d="M 19.1875 8.296875 
-L 53.609375 8.296875 
-L 53.609375 0 
-L 7.328125 0 
-L 7.328125 8.296875 
-Q 12.9375 14.109375 22.625 23.890625 
-Q 32.328125 33.6875 34.8125 36.53125 
-Q 39.546875 41.84375 41.421875 45.53125 
-Q 43.3125 49.21875 43.3125 52.78125 
-Q 43.3125 58.59375 39.234375 62.25 
-Q 35.15625 65.921875 28.609375 65.921875 
-Q 23.96875 65.921875 18.8125 64.3125 
-Q 13.671875 62.703125 7.8125 59.421875 
-L 7.8125 69.390625 
-Q 13.765625 71.78125 18.9375 73 
-Q 24.125 74.21875 28.421875 74.21875 
-Q 39.75 74.21875 46.484375 68.546875 
-Q 53.21875 62.890625 53.21875 53.421875 
-Q 53.21875 48.921875 51.53125 44.890625 
-Q 49.859375 40.875 45.40625 35.40625 
-Q 44.1875 33.984375 37.640625 27.21875 
-Q 31.109375 20.453125 19.1875 8.296875 
-z
-" id="DejaVuSans-50"/>
-       </defs>
-       <use xlink:href="#DejaVuSans-53"/>
-       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-54"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-50"/>
-      </g>
-     </g>
-    </g>
-    <g id="xtick_3">
-     <g id="line2d_3">
-      <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="170.432082" xlink:href="#m84bd32ba32" y="301.9975"/>
-      </g>
-     </g>
-     <g id="text_3">
-      <!-- 5.64 -->
-      <g transform="translate(159.29927 316.595937)scale(0.1 -0.1)">
-       <defs>
-        <path d="M 37.796875 64.3125 
-L 12.890625 25.390625 
-L 37.796875 25.390625 
-z
-M 35.203125 72.90625 
-L 47.609375 72.90625 
-L 47.609375 25.390625 
-L 58.015625 25.390625 
-L 58.015625 17.1875 
-L 47.609375 17.1875 
-L 47.609375 0 
-L 37.796875 0 
-L 37.796875 17.1875 
-L 4.890625 17.1875 
-L 4.890625 26.703125 
-z
-" id="DejaVuSans-52"/>
        </defs>
-       <use xlink:href="#DejaVuSans-53"/>
-       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-54"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-52"/>
-      </g>
-     </g>
-    </g>
-    <g id="xtick_4">
-     <g id="line2d_4">
-      <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="222.953125" xlink:href="#m84bd32ba32" y="301.9975"/>
-      </g>
-     </g>
-     <g id="text_4">
-      <!-- 5.66 -->
-      <g transform="translate(211.820312 316.595937)scale(0.1 -0.1)">
-       <use xlink:href="#DejaVuSans-53"/>
+       <use xlink:href="#DejaVuSans-49"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-54"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-54"/>
       </g>
      </g>
     </g>
     <g id="xtick_5">
      <g id="line2d_5">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="275.474167" xlink:href="#m84bd32ba32" y="301.9975"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="400.518142" xlink:href="#m78350b8f3e" y="301.9975"/>
       </g>
      </g>
      <g id="text_5">
-      <!-- 5.68 -->
-      <g transform="translate(264.341355 316.595937)scale(0.1 -0.1)">
-       <defs>
-        <path d="M 31.78125 34.625 
-Q 24.75 34.625 20.71875 30.859375 
-Q 16.703125 27.09375 16.703125 20.515625 
-Q 16.703125 13.921875 20.71875 10.15625 
-Q 24.75 6.390625 31.78125 6.390625 
-Q 38.8125 6.390625 42.859375 10.171875 
-Q 46.921875 13.96875 46.921875 20.515625 
-Q 46.921875 27.09375 42.890625 30.859375 
-Q 38.875 34.625 31.78125 34.625 
-z
-M 21.921875 38.8125 
-Q 15.578125 40.375 12.03125 44.71875 
-Q 8.5 49.078125 8.5 55.328125 
-Q 8.5 64.0625 14.71875 69.140625 
-Q 20.953125 74.21875 31.78125 74.21875 
-Q 42.671875 74.21875 48.875 69.140625 
-Q 55.078125 64.0625 55.078125 55.328125 
-Q 55.078125 49.078125 51.53125 44.71875 
-Q 48 40.375 41.703125 38.8125 
-Q 48.828125 37.15625 52.796875 32.3125 
-Q 56.78125 27.484375 56.78125 20.515625 
-Q 56.78125 9.90625 50.3125 4.234375 
-Q 43.84375 -1.421875 31.78125 -1.421875 
-Q 19.734375 -1.421875 13.25 4.234375 
-Q 6.78125 9.90625 6.78125 20.515625 
-Q 6.78125 27.484375 10.78125 32.3125 
-Q 14.796875 37.15625 21.921875 38.8125 
-z
-M 18.3125 54.390625 
-Q 18.3125 48.734375 21.84375 45.5625 
-Q 25.390625 42.390625 31.78125 42.390625 
-Q 38.140625 42.390625 41.71875 45.5625 
-Q 45.3125 48.734375 45.3125 54.390625 
-Q 45.3125 60.0625 41.71875 63.234375 
-Q 38.140625 66.40625 31.78125 66.40625 
-Q 25.390625 66.40625 21.84375 63.234375 
-Q 18.3125 60.0625 18.3125 54.390625 
-z
-" id="DejaVuSans-56"/>
-       </defs>
-       <use xlink:href="#DejaVuSans-53"/>
-       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-54"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-56"/>
-      </g>
-     </g>
-    </g>
-    <g id="xtick_6">
-     <g id="line2d_6">
-      <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="327.99521" xlink:href="#m84bd32ba32" y="301.9975"/>
-      </g>
-     </g>
-     <g id="text_6">
-      <!-- 5.70 -->
-      <g transform="translate(316.862397 316.595937)scale(0.1 -0.1)">
+      <!-- 1.7 -->
+      <g transform="translate(392.566579 316.595937)scale(0.1 -0.1)">
        <defs>
         <path d="M 8.203125 72.90625 
 L 55.078125 72.90625 
@@ -313,48 +254,15 @@ L 8.203125 64.59375
 z
 " id="DejaVuSans-55"/>
        </defs>
-       <use xlink:href="#DejaVuSans-53"/>
-       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-55"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-48"/>
-      </g>
-     </g>
-    </g>
-    <g id="xtick_7">
-     <g id="line2d_7">
-      <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="380.516252" xlink:href="#m84bd32ba32" y="301.9975"/>
-      </g>
-     </g>
-     <g id="text_7">
-      <!-- 5.72 -->
-      <g transform="translate(369.383439 316.595937)scale(0.1 -0.1)">
-       <use xlink:href="#DejaVuSans-53"/>
+       <use xlink:href="#DejaVuSans-49"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
        <use x="95.410156" xlink:href="#DejaVuSans-55"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-50"/>
       </g>
      </g>
     </g>
-    <g id="xtick_8">
-     <g id="line2d_8">
-      <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="433.037294" xlink:href="#m84bd32ba32" y="301.9975"/>
-      </g>
-     </g>
-     <g id="text_8">
-      <!-- 5.74 -->
-      <g transform="translate(421.904482 316.595937)scale(0.1 -0.1)">
-       <use xlink:href="#DejaVuSans-53"/>
-       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-55"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-52"/>
-      </g>
-     </g>
-    </g>
-    <g id="text_9">
+    <g id="text_6">
      <!-- $x$ [code units] -->
-     <g transform="translate(222.335 330.274062)scale(0.1 -0.1)">
+     <g transform="translate(215.945 330.274062)scale(0.1 -0.1)">
       <defs>
        <path d="M 60.015625 54.6875 
 L 34.90625 27.875 
@@ -605,196 +513,178 @@ z
    </g>
    <g id="matplotlib.axis_2">
     <g id="ytick_1">
-     <g id="line2d_9">
+     <g id="line2d_6">
       <defs>
        <path d="M 0 0 
 L -3.5 0 
-" id="m2a24216656" style="stroke:#000000;stroke-width:0.8;"/>
+" id="m64c81340d8" style="stroke:#000000;stroke-width:0.8;"/>
       </defs>
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="296.195636"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="50.69" xlink:href="#m64c81340d8" y="265.633067"/>
       </g>
      </g>
-     <g id="text_10">
-      <!-- 3.310 -->
-      <g transform="translate(27.841875 299.994855)scale(0.1 -0.1)">
+     <g id="text_7">
+      <!-- 5.2 -->
+      <g transform="translate(27.786875 269.432285)scale(0.1 -0.1)">
        <defs>
-        <path d="M 40.578125 39.3125 
-Q 47.65625 37.796875 51.625 33 
-Q 55.609375 28.21875 55.609375 21.1875 
-Q 55.609375 10.40625 48.1875 4.484375 
-Q 40.765625 -1.421875 27.09375 -1.421875 
-Q 22.515625 -1.421875 17.65625 -0.515625 
-Q 12.796875 0.390625 7.625 2.203125 
-L 7.625 11.71875 
-Q 11.71875 9.328125 16.59375 8.109375 
-Q 21.484375 6.890625 26.8125 6.890625 
-Q 36.078125 6.890625 40.9375 10.546875 
-Q 45.796875 14.203125 45.796875 21.1875 
-Q 45.796875 27.640625 41.28125 31.265625 
-Q 36.765625 34.90625 28.71875 34.90625 
-L 20.21875 34.90625 
-L 20.21875 43.015625 
-L 29.109375 43.015625 
-Q 36.375 43.015625 40.234375 45.921875 
-Q 44.09375 48.828125 44.09375 54.296875 
-Q 44.09375 59.90625 40.109375 62.90625 
-Q 36.140625 65.921875 28.71875 65.921875 
-Q 24.65625 65.921875 20.015625 65.03125 
-Q 15.375 64.15625 9.8125 62.3125 
-L 9.8125 71.09375 
-Q 15.4375 72.65625 20.34375 73.4375 
-Q 25.25 74.21875 29.59375 74.21875 
-Q 40.828125 74.21875 47.359375 69.109375 
-Q 53.90625 64.015625 53.90625 55.328125 
-Q 53.90625 49.265625 50.4375 45.09375 
-Q 46.96875 40.921875 40.578125 39.3125 
-z
-" id="DejaVuSans-51"/>
-        <path d="M 12.40625 8.296875 
-L 28.515625 8.296875 
-L 28.515625 63.921875 
-L 10.984375 60.40625 
-L 10.984375 69.390625 
-L 28.421875 72.90625 
-L 38.28125 72.90625 
-L 38.28125 8.296875 
-L 54.390625 8.296875 
-L 54.390625 0 
-L 12.40625 0 
+        <path d="M 19.1875 8.296875 
+L 53.609375 8.296875 
+L 53.609375 0 
+L 7.328125 0 
+L 7.328125 8.296875 
+Q 12.9375 14.109375 22.625 23.890625 
+Q 32.328125 33.6875 34.8125 36.53125 
+Q 39.546875 41.84375 41.421875 45.53125 
+Q 43.3125 49.21875 43.3125 52.78125 
+Q 43.3125 58.59375 39.234375 62.25 
+Q 35.15625 65.921875 28.609375 65.921875 
+Q 23.96875 65.921875 18.8125 64.3125 
+Q 13.671875 62.703125 7.8125 59.421875 
+L 7.8125 69.390625 
+Q 13.765625 71.78125 18.9375 73 
+Q 24.125 74.21875 28.421875 74.21875 
+Q 39.75 74.21875 46.484375 68.546875 
+Q 53.21875 62.890625 53.21875 53.421875 
+Q 53.21875 48.921875 51.53125 44.890625 
+Q 49.859375 40.875 45.40625 35.40625 
+Q 44.1875 33.984375 37.640625 27.21875 
+Q 31.109375 20.453125 19.1875 8.296875 
 z
-" id="DejaVuSans-49"/>
+" id="DejaVuSans-50"/>
        </defs>
-       <use xlink:href="#DejaVuSans-51"/>
+       <use xlink:href="#DejaVuSans-53"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-49"/>
-       <use x="222.65625" xlink:href="#DejaVuSans-48"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-50"/>
       </g>
      </g>
     </g>
     <g id="ytick_2">
-     <g id="line2d_10">
+     <g id="line2d_7">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="256.41876"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="50.69" xlink:href="#m64c81340d8" y="209.394596"/>
       </g>
      </g>
-     <g id="text_11">
-      <!-- 3.315 -->
-      <g transform="translate(27.841875 260.217979)scale(0.1 -0.1)">
-       <use xlink:href="#DejaVuSans-51"/>
+     <g id="text_8">
+      <!-- 5.4 -->
+      <g transform="translate(27.786875 213.193815)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-53"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-49"/>
-       <use x="222.65625" xlink:href="#DejaVuSans-53"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-52"/>
       </g>
      </g>
     </g>
     <g id="ytick_3">
-     <g id="line2d_11">
+     <g id="line2d_8">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="216.641884"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="50.69" xlink:href="#m64c81340d8" y="153.156126"/>
       </g>
      </g>
-     <g id="text_12">
-      <!-- 3.320 -->
-      <g transform="translate(27.841875 220.441103)scale(0.1 -0.1)">
-       <use xlink:href="#DejaVuSans-51"/>
+     <g id="text_9">
+      <!-- 5.6 -->
+      <g transform="translate(27.786875 156.955344)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-53"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-50"/>
-       <use x="222.65625" xlink:href="#DejaVuSans-48"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-54"/>
       </g>
      </g>
     </g>
     <g id="ytick_4">
-     <g id="line2d_12">
+     <g id="line2d_9">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="176.865008"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="50.69" xlink:href="#m64c81340d8" y="96.917655"/>
       </g>
      </g>
-     <g id="text_13">
-      <!-- 3.325 -->
-      <g transform="translate(27.841875 180.664226)scale(0.1 -0.1)">
-       <use xlink:href="#DejaVuSans-51"/>
+     <g id="text_10">
+      <!-- 5.8 -->
+      <g transform="translate(27.786875 100.716874)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 31.78125 34.625 
+Q 24.75 34.625 20.71875 30.859375 
+Q 16.703125 27.09375 16.703125 20.515625 
+Q 16.703125 13.921875 20.71875 10.15625 
+Q 24.75 6.390625 31.78125 6.390625 
+Q 38.8125 6.390625 42.859375 10.171875 
+Q 46.921875 13.96875 46.921875 20.515625 
+Q 46.921875 27.09375 42.890625 30.859375 
+Q 38.875 34.625 31.78125 34.625 
+z
+M 21.921875 38.8125 
+Q 15.578125 40.375 12.03125 44.71875 
+Q 8.5 49.078125 8.5 55.328125 
+Q 8.5 64.0625 14.71875 69.140625 
+Q 20.953125 74.21875 31.78125 74.21875 
+Q 42.671875 74.21875 48.875 69.140625 
+Q 55.078125 64.0625 55.078125 55.328125 
+Q 55.078125 49.078125 51.53125 44.71875 
+Q 48 40.375 41.703125 38.8125 
+Q 48.828125 37.15625 52.796875 32.3125 
+Q 56.78125 27.484375 56.78125 20.515625 
+Q 56.78125 9.90625 50.3125 4.234375 
+Q 43.84375 -1.421875 31.78125 -1.421875 
+Q 19.734375 -1.421875 13.25 4.234375 
+Q 6.78125 9.90625 6.78125 20.515625 
+Q 6.78125 27.484375 10.78125 32.3125 
+Q 14.796875 37.15625 21.921875 38.8125 
+z
+M 18.3125 54.390625 
+Q 18.3125 48.734375 21.84375 45.5625 
+Q 25.390625 42.390625 31.78125 42.390625 
+Q 38.140625 42.390625 41.71875 45.5625 
+Q 45.3125 48.734375 45.3125 54.390625 
+Q 45.3125 60.0625 41.71875 63.234375 
+Q 38.140625 66.40625 31.78125 66.40625 
+Q 25.390625 66.40625 21.84375 63.234375 
+Q 18.3125 60.0625 18.3125 54.390625 
+z
+" id="DejaVuSans-56"/>
+       </defs>
+       <use xlink:href="#DejaVuSans-53"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-50"/>
-       <use x="222.65625" xlink:href="#DejaVuSans-53"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-56"/>
       </g>
      </g>
     </g>
     <g id="ytick_5">
-     <g id="line2d_13">
-      <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="137.088132"/>
-      </g>
-     </g>
-     <g id="text_14">
-      <!-- 3.330 -->
-      <g transform="translate(27.841875 140.88735)scale(0.1 -0.1)">
-       <use xlink:href="#DejaVuSans-51"/>
-       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-51"/>
-       <use x="222.65625" xlink:href="#DejaVuSans-48"/>
-      </g>
-     </g>
-    </g>
-    <g id="ytick_6">
-     <g id="line2d_14">
-      <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="97.311255"/>
-      </g>
-     </g>
-     <g id="text_15">
-      <!-- 3.335 -->
-      <g transform="translate(27.841875 101.110474)scale(0.1 -0.1)">
-       <use xlink:href="#DejaVuSans-51"/>
-       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-51"/>
-       <use x="222.65625" xlink:href="#DejaVuSans-53"/>
-      </g>
-     </g>
-    </g>
-    <g id="ytick_7">
-     <g id="line2d_15">
-      <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="57.534379"/>
-      </g>
-     </g>
-     <g id="text_16">
-      <!-- 3.340 -->
-      <g transform="translate(27.841875 61.333598)scale(0.1 -0.1)">
-       <use xlink:href="#DejaVuSans-51"/>
-       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-52"/>
-       <use x="222.65625" xlink:href="#DejaVuSans-48"/>
-      </g>
-     </g>
-    </g>
-    <g id="ytick_8">
-     <g id="line2d_16">
+     <g id="line2d_10">
       <g>
-       <use style="stroke:#000000;stroke-width:0.8;" x="63.47" xlink:href="#m2a24216656" y="17.757503"/>
+       <use style="stroke:#000000;stroke-width:0.8;" x="50.69" xlink:href="#m64c81340d8" y="40.679185"/>
       </g>
      </g>
-     <g id="text_17">
-      <!-- 3.345 -->
-      <g transform="translate(27.841875 21.556722)scale(0.1 -0.1)">
-       <use xlink:href="#DejaVuSans-51"/>
+     <g id="text_11">
+      <!-- 6.0 -->
+      <g transform="translate(27.786875 44.478403)scale(0.1 -0.1)">
+       <defs>
+        <path d="M 31.78125 66.40625 
+Q 24.171875 66.40625 20.328125 58.90625 
+Q 16.5 51.421875 16.5 36.375 
+Q 16.5 21.390625 20.328125 13.890625 
+Q 24.171875 6.390625 31.78125 6.390625 
+Q 39.453125 6.390625 43.28125 13.890625 
+Q 47.125 21.390625 47.125 36.375 
+Q 47.125 51.421875 43.28125 58.90625 
+Q 39.453125 66.40625 31.78125 66.40625 
+z
+M 31.78125 74.21875 
+Q 44.046875 74.21875 50.515625 64.515625 
+Q 56.984375 54.828125 56.984375 36.375 
+Q 56.984375 17.96875 50.515625 8.265625 
+Q 44.046875 -1.421875 31.78125 -1.421875 
+Q 19.53125 -1.421875 13.0625 8.265625 
+Q 6.59375 17.96875 6.59375 36.375 
+Q 6.59375 54.828125 13.0625 64.515625 
+Q 19.53125 74.21875 31.78125 74.21875 
+z
+" id="DejaVuSans-48"/>
+       </defs>
+       <use xlink:href="#DejaVuSans-54"/>
        <use x="63.623047" xlink:href="#DejaVuSans-46"/>
-       <use x="95.410156" xlink:href="#DejaVuSans-51"/>
-       <use x="159.033203" xlink:href="#DejaVuSans-52"/>
-       <use x="222.65625" xlink:href="#DejaVuSans-53"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-48"/>
       </g>
      </g>
     </g>
-    <g id="text_18">
+    <g id="text_12">
      <!-- $y$ [code units] -->
-     <g transform="translate(21.741875 190.79875)rotate(-90)scale(0.1 -0.1)">
+     <g transform="translate(21.686875 190.79875)rotate(-90)scale(0.1 -0.1)">
       <defs>
        <path d="M 24.8125 -5.078125 
 Q 18.5625 -15.578125 14.625 -18.1875 
@@ -830,54 +720,2314 @@ z
      </g>
     </g>
    </g>
-   <g id="line2d_17">
-    <path clip-path="url(#pa8c46be0ca)" d="M 432.430455 24.03625 
-L 402.618367 57.63713 
-L 372.257093 88.686361 
-L 340.914332 119.552967 
-L 309.042687 148.500713 
-L 276.750387 175.435279 
-L 244.168498 200.219498 
-L 211.422089 222.736193 
-L 178.629899 242.894199 
-L 145.902052 260.633483 
-L 113.34051 275.923636 
-L 81.039545 288.76125 
-" style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
+   <g id="line2d_11">
+    <path clip-path="url(#p444e95376c)" d="M 369.666423 288.740154 
+L 377.756239 284.542414 
+L 385.483034 280.206496 
+L 392.794483 275.705775 
+L 399.638716 271.01483 
+L 402.869346 268.590509 
+L 405.96337 266.109957 
+L 408.913756 263.570753 
+L 411.713127 260.970831 
+L 414.353718 258.308572 
+L 416.827387 255.582891 
+L 419.125695 252.793329 
+L 421.240068 249.940128 
+L 423.162057 247.024283 
+L 424.88368 244.047579 
+L 426.397866 241.012579 
+L 427.698957 237.922582 
+L 428.783248 234.781535 
+L 429.647954 231.592887 
+L 430.290438 228.358295 
+L 430.713195 225.081129 
+L 430.918877 221.76338 
+L 430.912275 218.406915 
+L 430.694702 215.013392 
+L 430.272394 211.584404 
+L 429.650889 208.121489 
+L 428.835854 204.626258 
+L 427.8334 201.100501 
+L 426.649488 197.546278 
+L 425.289671 193.965983 
+L 423.758904 190.362392 
+L 422.061432 186.738676 
+L 420.20076 183.098388 
+L 418.179698 179.445416 
+L 416.002461 175.784451 
+L 413.676104 172.12108 
+L 411.20209 168.459255 
+L 408.584305 164.80408 
+L 405.826236 161.160067 
+L 402.930955 157.531662 
+L 399.902011 153.923127 
+L 396.743534 150.338534 
+L 390.058411 143.256247 
+L 382.925155 136.311828 
+L 375.40626 129.526555 
+L 367.572751 122.915813 
+L 359.487995 116.506246 
+L 351.217864 110.325976 
+L 342.825917 104.401422 
+L 334.371975 98.75303 
+L 325.908974 93.395537 
+L 317.483839 88.337535 
+L 309.139761 83.581426 
+L 300.918339 79.123857 
+L 292.85824 74.957735 
+L 284.986263 71.076825 
+L 277.325388 67.473759 
+L 269.889476 64.147967 
+L 262.686672 61.094013 
+L 255.716609 58.302297 
+L 245.675261 54.574304 
+L 236.067692 51.341671 
+L 226.791445 48.532075 
+L 217.719607 46.06895 
+L 208.711086 43.87602 
+L 199.618972 41.880503 
+L 187.114982 39.412519 
+L 173.880183 37.042213 
+L 155.87764 34.063016 
+L 135.796094 30.964405 
+L 117.899693 28.429621 
+L 98.121598 25.905421 
+L 81.95633 24.03625 
+L 81.95633 24.03625 
+" style="fill:none;stroke:#1f77b4;stroke-dasharray:6,4.5,6;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    <defs>
+     <path d="M -3 3 
+L 3 -3 
+M -3 -3 
+L 3 3 
+" id="ma85ef77801" style="stroke:#1f77b4;stroke-opacity:0.2;"/>
+    </defs>
+    <g clip-path="url(#p444e95376c)">
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="369.666423" xlink:href="#ma85ef77801" y="288.740154"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="373.75351" xlink:href="#ma85ef77801" y="286.656793"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="377.756239" xlink:href="#ma85ef77801" y="284.542414"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="381.668295" xlink:href="#ma85ef77801" y="282.393433"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="385.483034" xlink:href="#ma85ef77801" y="280.206496"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="389.193929" xlink:href="#ma85ef77801" y="277.97835"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="392.794483" xlink:href="#ma85ef77801" y="275.705775"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="396.278238" xlink:href="#ma85ef77801" y="273.385618"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="399.638716" xlink:href="#ma85ef77801" y="271.01483"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="402.869346" xlink:href="#ma85ef77801" y="268.590509"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="405.96337" xlink:href="#ma85ef77801" y="266.109957"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="408.913756" xlink:href="#ma85ef77801" y="263.570753"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="411.713127" xlink:href="#ma85ef77801" y="260.970831"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="414.353718" xlink:href="#ma85ef77801" y="258.308572"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="416.827387" xlink:href="#ma85ef77801" y="255.582891"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="419.125695" xlink:href="#ma85ef77801" y="252.793329"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="421.240068" xlink:href="#ma85ef77801" y="249.940128"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="423.162057" xlink:href="#ma85ef77801" y="247.024283"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="424.88368" xlink:href="#ma85ef77801" y="244.047579"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="426.397866" xlink:href="#ma85ef77801" y="241.012579"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="427.698957" xlink:href="#ma85ef77801" y="237.922582"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="428.783248" xlink:href="#ma85ef77801" y="234.781535"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="429.647954" xlink:href="#ma85ef77801" y="231.592887"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="430.290438" xlink:href="#ma85ef77801" y="228.358295"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="430.713195" xlink:href="#ma85ef77801" y="225.081129"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="430.918877" xlink:href="#ma85ef77801" y="221.76338"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="430.912275" xlink:href="#ma85ef77801" y="218.406915"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="430.694702" xlink:href="#ma85ef77801" y="215.013392"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="430.272394" xlink:href="#ma85ef77801" y="211.584404"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="429.650889" xlink:href="#ma85ef77801" y="208.121489"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="428.835854" xlink:href="#ma85ef77801" y="204.626258"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="427.8334" xlink:href="#ma85ef77801" y="201.100501"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="426.649488" xlink:href="#ma85ef77801" y="197.546278"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="425.289671" xlink:href="#ma85ef77801" y="193.965983"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="423.758904" xlink:href="#ma85ef77801" y="190.362392"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="422.061432" xlink:href="#ma85ef77801" y="186.738676"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="420.20076" xlink:href="#ma85ef77801" y="183.098388"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="418.179698" xlink:href="#ma85ef77801" y="179.445416"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="416.002461" xlink:href="#ma85ef77801" y="175.784451"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="413.676104" xlink:href="#ma85ef77801" y="172.12108"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="411.20209" xlink:href="#ma85ef77801" y="168.459255"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="408.584305" xlink:href="#ma85ef77801" y="164.80408"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="405.826236" xlink:href="#ma85ef77801" y="161.160067"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="402.930955" xlink:href="#ma85ef77801" y="157.531662"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="399.902011" xlink:href="#ma85ef77801" y="153.923127"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="396.743534" xlink:href="#ma85ef77801" y="150.338534"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="393.460416" xlink:href="#ma85ef77801" y="146.781722"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="390.058411" xlink:href="#ma85ef77801" y="143.256247"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="386.544163" xlink:href="#ma85ef77801" y="139.76533"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="382.925155" xlink:href="#ma85ef77801" y="136.311828"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="379.209599" xlink:href="#ma85ef77801" y="132.898209"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="375.40626" xlink:href="#ma85ef77801" y="129.526555"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="371.524256" xlink:href="#ma85ef77801" y="126.19859"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="367.572751" xlink:href="#ma85ef77801" y="122.915813"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="363.55772" xlink:href="#ma85ef77801" y="119.683992"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="359.487995" xlink:href="#ma85ef77801" y="116.506246"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="355.37213" xlink:href="#ma85ef77801" y="113.385628"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="351.217864" xlink:href="#ma85ef77801" y="110.325976"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="347.033222" xlink:href="#ma85ef77801" y="107.330329"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="342.825917" xlink:href="#ma85ef77801" y="104.401422"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="338.603225" xlink:href="#ma85ef77801" y="101.541644"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="334.371975" xlink:href="#ma85ef77801" y="98.75303"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="330.138557" xlink:href="#ma85ef77801" y="96.037237"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="325.908974" xlink:href="#ma85ef77801" y="93.395537"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="321.688915" xlink:href="#ma85ef77801" y="90.828807"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="317.483839" xlink:href="#ma85ef77801" y="88.337535"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="313.299048" xlink:href="#ma85ef77801" y="85.921827"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="309.139761" xlink:href="#ma85ef77801" y="83.581426"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="305.011145" xlink:href="#ma85ef77801" y="81.315738"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="300.918339" xlink:href="#ma85ef77801" y="79.123857"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="296.866432" xlink:href="#ma85ef77801" y="77.004607"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="292.85824" xlink:href="#ma85ef77801" y="74.957735"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="288.896988" xlink:href="#ma85ef77801" y="72.982281"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="284.986263" xlink:href="#ma85ef77801" y="71.076825"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="281.128557" xlink:href="#ma85ef77801" y="69.240226"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="277.325388" xlink:href="#ma85ef77801" y="67.473759"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="273.578568" xlink:href="#ma85ef77801" y="65.776541"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="269.889476" xlink:href="#ma85ef77801" y="64.147967"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="266.258764" xlink:href="#ma85ef77801" y="62.587485"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="262.686672" xlink:href="#ma85ef77801" y="61.094013"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="259.172913" xlink:href="#ma85ef77801" y="59.666172"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="255.716609" xlink:href="#ma85ef77801" y="58.302297"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="252.316318" xlink:href="#ma85ef77801" y="57.00048"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="248.970041" xlink:href="#ma85ef77801" y="55.758588"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="245.675261" xlink:href="#ma85ef77801" y="54.574304"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="242.428973" xlink:href="#ma85ef77801" y="53.445144"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="239.227731" xlink:href="#ma85ef77801" y="52.368501"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="236.067692" xlink:href="#ma85ef77801" y="51.341671"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="232.944667" xlink:href="#ma85ef77801" y="50.361878"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="229.854166" xlink:href="#ma85ef77801" y="49.426299"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="226.791445" xlink:href="#ma85ef77801" y="48.532075"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="223.751551" xlink:href="#ma85ef77801" y="47.676344"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="220.729358" xlink:href="#ma85ef77801" y="46.856249"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="217.719607" xlink:href="#ma85ef77801" y="46.06895"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="214.716937" xlink:href="#ma85ef77801" y="45.311644"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="211.715919" xlink:href="#ma85ef77801" y="44.581569"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="208.711086" xlink:href="#ma85ef77801" y="43.87602"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="205.696955" xlink:href="#ma85ef77801" y="43.192356"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="202.668059" xlink:href="#ma85ef77801" y="42.528012"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="199.618972" xlink:href="#ma85ef77801" y="41.880503"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="196.544332" xlink:href="#ma85ef77801" y="41.247438"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="193.43887" xlink:href="#ma85ef77801" y="40.626523"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="190.297428" xlink:href="#ma85ef77801" y="40.015574"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="187.114982" xlink:href="#ma85ef77801" y="39.412519"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="183.88666" xlink:href="#ma85ef77801" y="38.815409"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="180.60775" xlink:href="#ma85ef77801" y="38.222423"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="177.273714" xlink:href="#ma85ef77801" y="37.631874"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="173.880183" xlink:href="#ma85ef77801" y="37.042213"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="170.422951" xlink:href="#ma85ef77801" y="36.452032"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="166.897962" xlink:href="#ma85ef77801" y="35.860069"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="163.30129" xlink:href="#ma85ef77801" y="35.265204"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="159.629105" xlink:href="#ma85ef77801" y="34.666465"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="155.87764" xlink:href="#ma85ef77801" y="34.063016"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="152.043152" xlink:href="#ma85ef77801" y="33.454162"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="148.121869" xlink:href="#ma85ef77801" y="32.839337"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="144.109828" xlink:href="#ma85ef77801" y="32.218475"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="140.002551" xlink:href="#ma85ef77801" y="31.593492"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="135.796094" xlink:href="#ma85ef77801" y="30.964405"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="131.486507" xlink:href="#ma85ef77801" y="30.332494"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="127.069724" xlink:href="#ma85ef77801" y="29.698759"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="122.541993" xlink:href="#ma85ef77801" y="29.064176"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="117.899693" xlink:href="#ma85ef77801" y="28.429621"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="113.13943" xlink:href="#ma85ef77801" y="27.795884"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="108.25809" xlink:href="#ma85ef77801" y="27.163623"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="103.252918" xlink:href="#ma85ef77801" y="26.533354"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="98.121598" xlink:href="#ma85ef77801" y="25.905421"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="92.862356" xlink:href="#ma85ef77801" y="25.279983"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="87.474061" xlink:href="#ma85ef77801" y="24.657005"/>
+     <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="81.95633" xlink:href="#ma85ef77801" y="24.03625"/>
+    </g>
+   </g>
+   <g id="line2d_12">
+    <path clip-path="url(#p444e95376c)" d="M 369.666423 288.740154 
+L 377.756088 284.542788 
+L 383.588135 281.305296 
+L 389.193864 277.97876 
+L 394.551307 274.552278 
+L 399.638644 271.01531 
+L 404.433763 267.35795 
+L 408.913623 263.571342 
+L 411.712984 260.971465 
+L 414.35358 258.309253 
+L 416.827276 255.58362 
+L 419.12564 252.794103 
+L 421.240102 249.940942 
+L 423.162215 247.02513 
+L 424.883997 244.048447 
+L 426.398373 241.013453 
+L 427.699673 237.923446 
+L 428.784101 234.782323 
+L 429.648408 231.593186 
+L 430.291482 228.358851 
+L 430.71424 225.081709 
+L 430.919868 221.763946 
+L 430.912302 218.407476 
+L 430.695132 215.013982 
+L 430.272999 211.585027 
+L 429.651362 208.122144 
+L 428.836189 204.626945 
+L 427.833602 201.101219 
+L 426.649568 197.547022 
+L 425.289642 193.966746 
+L 422.930616 188.553612 
+L 420.200534 183.099156 
+L 417.110481 177.616468 
+L 413.67582 172.12164 
+L 409.910608 166.631117 
+L 405.826066 161.160623 
+L 401.432902 155.725187 
+L 396.743578 150.339036 
+L 391.773964 145.01532 
+L 386.544227 139.765754 
+L 381.078889 134.600292 
+L 375.406103 129.526947 
+L 369.556276 124.551894 
+L 363.557108 119.68485 
+L 357.43497 114.938929 
+L 349.128198 108.820375 
+L 340.715252 102.963143 
+L 332.254273 97.386313 
+L 323.796507 92.103122 
+L 315.387675 87.120603 
+L 307.07037 82.43966 
+L 298.88597 78.055617 
+L 288.89587 72.982641 
+L 279.218618 68.349026 
+L 269.888039 64.14831 
+L 260.92095 60.372334 
+L 252.314606 57.000844 
+L 244.044447 54.003377 
+L 236.065773 51.342074 
+L 228.317601 48.974611 
+L 220.727185 46.856675 
+L 211.713567 44.582004 
+L 202.665524 42.528457 
+L 191.870237 40.320394 
+L 178.944985 37.927416 
+L 163.298176 35.265684 
+L 144.10637 32.219325 
+L 124.8165 29.38199 
+L 108.254581 27.16413 
+L 90.180889 24.968764 
+L 81.952859 24.036851 
+L 81.952859 24.036851 
+" style="fill:none;stroke:#ff7f0e;stroke-dasharray:3,4.5,3;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    <defs>
+     <path d="M -3 3 
+L 3 -3 
+M -3 -3 
+L 3 3 
+" id="mb7e8bbea43" style="stroke:#ff7f0e;stroke-opacity:0.2;"/>
+    </defs>
+    <g clip-path="url(#p444e95376c)">
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="369.666423" xlink:href="#mb7e8bbea43" y="288.740154"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="371.719962" xlink:href="#mb7e8bbea43" y="287.702345"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="373.753301" xlink:href="#mb7e8bbea43" y="286.657127"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="375.765619" xlink:href="#mb7e8bbea43" y="285.60408"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="377.756088" xlink:href="#mb7e8bbea43" y="284.542788"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="379.723882" xlink:href="#mb7e8bbea43" y="283.472835"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="381.668172" xlink:href="#mb7e8bbea43" y="282.393809"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="383.588135" xlink:href="#mb7e8bbea43" y="281.305296"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="385.482948" xlink:href="#mb7e8bbea43" y="280.206888"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="387.351796" xlink:href="#mb7e8bbea43" y="279.098178"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="389.193864" xlink:href="#mb7e8bbea43" y="277.97876"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="391.008343" xlink:href="#mb7e8bbea43" y="276.848234"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="392.794426" xlink:href="#mb7e8bbea43" y="275.706204"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="394.551307" xlink:href="#mb7e8bbea43" y="274.552278"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="396.278178" xlink:href="#mb7e8bbea43" y="273.38607"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="397.974229" xlink:href="#mb7e8bbea43" y="272.207204"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="399.638644" xlink:href="#mb7e8bbea43" y="271.01531"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="401.270598" xlink:href="#mb7e8bbea43" y="269.81003"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="402.869254" xlink:href="#mb7e8bbea43" y="268.591021"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="404.433763" xlink:href="#mb7e8bbea43" y="267.35795"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="405.963256" xlink:href="#mb7e8bbea43" y="266.110506"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="407.456846" xlink:href="#mb7e8bbea43" y="264.848393"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="408.913623" xlink:href="#mb7e8bbea43" y="263.571342"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="410.332655" xlink:href="#mb7e8bbea43" y="262.279106"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="411.712984" xlink:href="#mb7e8bbea43" y="260.971465"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="413.053628" xlink:href="#mb7e8bbea43" y="259.648232"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="414.35358" xlink:href="#mb7e8bbea43" y="258.309253"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="415.611812" xlink:href="#mb7e8bbea43" y="256.954408"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="416.827276" xlink:href="#mb7e8bbea43" y="255.58362"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="417.998909" xlink:href="#mb7e8bbea43" y="254.196849"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="419.12564" xlink:href="#mb7e8bbea43" y="252.794103"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="420.206393" xlink:href="#mb7e8bbea43" y="251.375435"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="421.240102" xlink:href="#mb7e8bbea43" y="249.940942"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="422.225717" xlink:href="#mb7e8bbea43" y="248.490775"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="423.162215" xlink:href="#mb7e8bbea43" y="247.02513"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="424.048617" xlink:href="#mb7e8bbea43" y="245.544255"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="424.883997" xlink:href="#mb7e8bbea43" y="244.048447"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="425.667504" xlink:href="#mb7e8bbea43" y="242.538049"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="426.398373" xlink:href="#mb7e8bbea43" y="241.013453"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="427.075942" xlink:href="#mb7e8bbea43" y="239.475094"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="427.699673" xlink:href="#mb7e8bbea43" y="237.923446"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="428.269168" xlink:href="#mb7e8bbea43" y="236.359024"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="428.784101" xlink:href="#mb7e8bbea43" y="234.782323"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="429.243864" xlink:href="#mb7e8bbea43" y="233.19356"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="429.648408" xlink:href="#mb7e8bbea43" y="231.593186"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="429.9976" xlink:href="#mb7e8bbea43" y="229.981516"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="430.291482" xlink:href="#mb7e8bbea43" y="228.358851"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="430.53025" xlink:href="#mb7e8bbea43" y="226.725488"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="430.71424" xlink:href="#mb7e8bbea43" y="225.081709"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="430.843917" xlink:href="#mb7e8bbea43" y="223.427779"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="430.919868" xlink:href="#mb7e8bbea43" y="221.763946"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="430.942629" xlink:href="#mb7e8bbea43" y="220.090441"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="430.912302" xlink:href="#mb7e8bbea43" y="218.407476"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="430.829646" xlink:href="#mb7e8bbea43" y="216.715257"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="430.695132" xlink:href="#mb7e8bbea43" y="215.013982"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="430.509361" xlink:href="#mb7e8bbea43" y="213.303842"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="430.272999" xlink:href="#mb7e8bbea43" y="211.585027"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="429.986753" xlink:href="#mb7e8bbea43" y="209.857728"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="429.651362" xlink:href="#mb7e8bbea43" y="208.122144"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="429.267584" xlink:href="#mb7e8bbea43" y="206.378477"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="428.836189" xlink:href="#mb7e8bbea43" y="204.626945"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="428.357943" xlink:href="#mb7e8bbea43" y="202.867776"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="427.833602" xlink:href="#mb7e8bbea43" y="201.101219"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="427.263907" xlink:href="#mb7e8bbea43" y="199.327538"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="426.649568" xlink:href="#mb7e8bbea43" y="197.547022"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="425.991266" xlink:href="#mb7e8bbea43" y="195.75998"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="425.289642" xlink:href="#mb7e8bbea43" y="193.966746"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="424.545298" xlink:href="#mb7e8bbea43" y="192.16768"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="423.758786" xlink:href="#mb7e8bbea43" y="190.363166"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="422.930616" xlink:href="#mb7e8bbea43" y="188.553612"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="422.061248" xlink:href="#mb7e8bbea43" y="186.739452"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="421.151097" xlink:href="#mb7e8bbea43" y="184.921141"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="420.200534" xlink:href="#mb7e8bbea43" y="183.099156"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="419.209888" xlink:href="#mb7e8bbea43" y="181.273993"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="418.179523" xlink:href="#mb7e8bbea43" y="179.446184"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="417.110481" xlink:href="#mb7e8bbea43" y="177.616468"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="416.003136" xlink:href="#mb7e8bbea43" y="175.785385"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="414.858059" xlink:href="#mb7e8bbea43" y="173.95357"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="413.67582" xlink:href="#mb7e8bbea43" y="172.12164"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="412.456883" xlink:href="#mb7e8bbea43" y="170.290196"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="411.201678" xlink:href="#mb7e8bbea43" y="168.459828"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="409.910608" xlink:href="#mb7e8bbea43" y="166.631117"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="408.58406" xlink:href="#mb7e8bbea43" y="164.804637"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="407.222417" xlink:href="#mb7e8bbea43" y="162.980953"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="405.826066" xlink:href="#mb7e8bbea43" y="161.160623"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="404.395409" xlink:href="#mb7e8bbea43" y="159.344194"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="402.930869" xlink:href="#mb7e8bbea43" y="157.532206"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="401.432902" xlink:href="#mb7e8bbea43" y="155.725187"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="399.901999" xlink:href="#mb7e8bbea43" y="153.923652"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="398.338696" xlink:href="#mb7e8bbea43" y="152.128106"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="396.743578" xlink:href="#mb7e8bbea43" y="150.339036"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="395.11728" xlink:href="#mb7e8bbea43" y="148.556915"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="393.460493" xlink:href="#mb7e8bbea43" y="146.782198"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="391.773964" xlink:href="#mb7e8bbea43" y="145.01532"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="390.058496" xlink:href="#mb7e8bbea43" y="143.256695"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="388.314946" xlink:href="#mb7e8bbea43" y="141.506717"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="386.544227" xlink:href="#mb7e8bbea43" y="139.765754"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="384.747299" xlink:href="#mb7e8bbea43" y="138.034152"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="382.92517" xlink:href="#mb7e8bbea43" y="136.312233"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="381.078889" xlink:href="#mb7e8bbea43" y="134.600292"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="379.209538" xlink:href="#mb7e8bbea43" y="132.898602"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="377.318232" xlink:href="#mb7e8bbea43" y="131.207412"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="375.406103" xlink:href="#mb7e8bbea43" y="129.526947"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="373.474302" xlink:href="#mb7e8bbea43" y="127.857411"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="371.523985" xlink:href="#mb7e8bbea43" y="126.198991"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="369.556276" xlink:href="#mb7e8bbea43" y="124.551894"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="367.571848" xlink:href="#mb7e8bbea43" y="122.916924"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="365.571802" xlink:href="#mb7e8bbea43" y="121.294409"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="363.557108" xlink:href="#mb7e8bbea43" y="119.68485"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="361.528725" xlink:href="#mb7e8bbea43" y="118.088775"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="359.48767" xlink:href="#mb7e8bbea43" y="116.506651"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="357.43497" xlink:href="#mb7e8bbea43" y="114.938929"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="355.371654" xlink:href="#mb7e8bbea43" y="113.38604"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="353.298748" xlink:href="#mb7e8bbea43" y="111.848393"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="351.217264" xlink:href="#mb7e8bbea43" y="110.326381"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="349.128198" xlink:href="#mb7e8bbea43" y="108.820375"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="347.032526" xlink:href="#mb7e8bbea43" y="107.330728"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="344.9312" xlink:href="#mb7e8bbea43" y="105.85777"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="342.825143" xlink:href="#mb7e8bbea43" y="104.401812"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="340.715252" xlink:href="#mb7e8bbea43" y="102.963143"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="338.602394" xlink:href="#mb7e8bbea43" y="101.542026"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="336.487409" xlink:href="#mb7e8bbea43" y="100.138707"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="334.371107" xlink:href="#mb7e8bbea43" y="98.753404"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="332.254273" xlink:href="#mb7e8bbea43" y="97.386313"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="330.137667" xlink:href="#mb7e8bbea43" y="96.037604"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="328.022028" xlink:href="#mb7e8bbea43" y="94.707426"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="325.908075" xlink:href="#mb7e8bbea43" y="93.395899"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="323.796507" xlink:href="#mb7e8bbea43" y="92.103122"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="321.688013" xlink:href="#mb7e8bbea43" y="90.829167"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="319.583267" xlink:href="#mb7e8bbea43" y="89.574082"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="317.482935" xlink:href="#mb7e8bbea43" y="88.337894"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="315.387675" xlink:href="#mb7e8bbea43" y="87.120603"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="313.298141" xlink:href="#mb7e8bbea43" y="85.922188"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="311.214981" xlink:href="#mb7e8bbea43" y="84.742605"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="309.138842" xlink:href="#mb7e8bbea43" y="83.581791"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="307.07037" xlink:href="#mb7e8bbea43" y="82.43966"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="305.010207" xlink:href="#mb7e8bbea43" y="81.316108"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="302.958994" xlink:href="#mb7e8bbea43" y="80.211012"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="300.917371" xlink:href="#mb7e8bbea43" y="79.124234"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="298.88597" xlink:href="#mb7e8bbea43" y="78.055617"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="296.865124" xlink:href="#mb7e8bbea43" y="77.005152"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="294.855272" xlink:href="#mb7e8bbea43" y="75.972739"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="292.85687" xlink:href="#mb7e8bbea43" y="74.958253"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="290.870276" xlink:href="#mb7e8bbea43" y="73.961599"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="288.89587" xlink:href="#mb7e8bbea43" y="72.982641"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="286.934024" xlink:href="#mb7e8bbea43" y="72.021228"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="284.985098" xlink:href="#mb7e8bbea43" y="71.077192"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="283.049417" xlink:href="#mb7e8bbea43" y="70.150398"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="281.127164" xlink:href="#mb7e8bbea43" y="69.241055"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="279.218618" xlink:href="#mb7e8bbea43" y="68.349026"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="277.323992" xlink:href="#mb7e8bbea43" y="67.474334"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="275.443466" xlink:href="#mb7e8bbea43" y="66.61697"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="273.577209" xlink:href="#mb7e8bbea43" y="65.776891"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="271.725363" xlink:href="#mb7e8bbea43" y="64.954033"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="269.888039" xlink:href="#mb7e8bbea43" y="64.14831"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="268.06532" xlink:href="#mb7e8bbea43" y="63.359616"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="266.257254" xlink:href="#mb7e8bbea43" y="62.587827"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="264.463856" xlink:href="#mb7e8bbea43" y="61.832795"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="262.685106" xlink:href="#mb7e8bbea43" y="61.094358"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="260.92095" xlink:href="#mb7e8bbea43" y="60.372334"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="259.171294" xlink:href="#mb7e8bbea43" y="59.666522"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="257.436013" xlink:href="#mb7e8bbea43" y="58.976706"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="255.714942" xlink:href="#mb7e8bbea43" y="58.302654"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="254.007885" xlink:href="#mb7e8bbea43" y="57.64412"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="252.314606" xlink:href="#mb7e8bbea43" y="57.000844"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="250.634841" xlink:href="#mb7e8bbea43" y="56.372552"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="248.968288" xlink:href="#mb7e8bbea43" y="55.758961"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="247.314618" xlink:href="#mb7e8bbea43" y="55.159773"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="245.673468" xlink:href="#mb7e8bbea43" y="54.574683"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="244.044447" xlink:href="#mb7e8bbea43" y="54.003377"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="242.427139" xlink:href="#mb7e8bbea43" y="53.445531"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="240.821098" xlink:href="#mb7e8bbea43" y="52.900817"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="239.225855" xlink:href="#mb7e8bbea43" y="52.368897"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="237.640918" xlink:href="#mb7e8bbea43" y="51.849431"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="236.065773" xlink:href="#mb7e8bbea43" y="51.342074"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="234.499886" xlink:href="#mb7e8bbea43" y="50.846477"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="232.942703" xlink:href="#mb7e8bbea43" y="50.362287"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="231.393654" xlink:href="#mb7e8bbea43" y="49.889151"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="229.852154" xlink:href="#mb7e8bbea43" y="49.426712"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="228.317601" xlink:href="#mb7e8bbea43" y="48.974611"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="226.789382" xlink:href="#mb7e8bbea43" y="48.532493"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="225.266872" xlink:href="#mb7e8bbea43" y="48.099997"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="223.749435" xlink:href="#mb7e8bbea43" y="47.676766"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="222.236424" xlink:href="#mb7e8bbea43" y="47.262444"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="220.727185" xlink:href="#mb7e8bbea43" y="46.856675"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="219.221058" xlink:href="#mb7e8bbea43" y="46.459104"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="217.717375" xlink:href="#mb7e8bbea43" y="46.06938"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="216.215463" xlink:href="#mb7e8bbea43" y="45.687153"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="214.714645" xlink:href="#mb7e8bbea43" y="45.312076"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="213.214241" xlink:href="#mb7e8bbea43" y="44.943807"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="211.713567" xlink:href="#mb7e8bbea43" y="44.582004"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="210.211939" xlink:href="#mb7e8bbea43" y="44.226332"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="208.708672" xlink:href="#mb7e8bbea43" y="43.876458"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="207.20308" xlink:href="#mb7e8bbea43" y="43.532055"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="205.69448" xlink:href="#mb7e8bbea43" y="43.192798"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="204.182188" xlink:href="#mb7e8bbea43" y="42.85837"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="202.665524" xlink:href="#mb7e8bbea43" y="42.528457"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="201.143812" xlink:href="#mb7e8bbea43" y="42.202752"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="199.616379" xlink:href="#mb7e8bbea43" y="41.880952"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="198.082557" xlink:href="#mb7e8bbea43" y="41.562762"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="196.541684" xlink:href="#mb7e8bbea43" y="41.247891"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="194.993104" xlink:href="#mb7e8bbea43" y="40.936056"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="193.436169" xlink:href="#mb7e8bbea43" y="40.62698"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="191.870237" xlink:href="#mb7e8bbea43" y="40.320394"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="190.294676" xlink:href="#mb7e8bbea43" y="40.016035"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="188.708862" xlink:href="#mb7e8bbea43" y="39.713647"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="187.112181" xlink:href="#mb7e8bbea43" y="39.412983"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="185.504029" xlink:href="#mb7e8bbea43" y="39.113803"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="183.883812" xlink:href="#mb7e8bbea43" y="38.815876"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="182.250945" xlink:href="#mb7e8bbea43" y="38.518978"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="180.604857" xlink:href="#mb7e8bbea43" y="38.222893"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="178.944985" xlink:href="#mb7e8bbea43" y="37.927416"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="177.270777" xlink:href="#mb7e8bbea43" y="37.632347"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="175.581693" xlink:href="#mb7e8bbea43" y="37.337498"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="173.877202" xlink:href="#mb7e8bbea43" y="37.042688"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="172.156784" xlink:href="#mb7e8bbea43" y="36.747746"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="170.419926" xlink:href="#mb7e8bbea43" y="36.452509"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="168.666128" xlink:href="#mb7e8bbea43" y="36.156824"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="166.894894" xlink:href="#mb7e8bbea43" y="35.860547"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="165.105737" xlink:href="#mb7e8bbea43" y="35.563543"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="163.298176" xlink:href="#mb7e8bbea43" y="35.265684"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="161.471736" xlink:href="#mb7e8bbea43" y="34.966855"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="159.625945" xlink:href="#mb7e8bbea43" y="34.666945"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="157.760333" xlink:href="#mb7e8bbea43" y="34.365857"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="155.874433" xlink:href="#mb7e8bbea43" y="34.063497"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="153.967777" xlink:href="#mb7e8bbea43" y="33.759785"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="152.039896" xlink:href="#mb7e8bbea43" y="33.454644"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="150.090316" xlink:href="#mb7e8bbea43" y="33.148009"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="148.118562" xlink:href="#mb7e8bbea43" y="32.83982"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="146.124091" xlink:href="#mb7e8bbea43" y="32.530216"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="144.10637" xlink:href="#mb7e8bbea43" y="32.219325"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="142.064896" xlink:href="#mb7e8bbea43" y="31.907201"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="139.999141" xlink:href="#mb7e8bbea43" y="31.594002"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="137.908586" xlink:href="#mb7e8bbea43" y="31.279852"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="135.792725" xlink:href="#mb7e8bbea43" y="30.964877"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="133.651055" xlink:href="#mb7e8bbea43" y="30.649203"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="131.48308" xlink:href="#mb7e8bbea43" y="30.332955"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="129.288314" xlink:href="#mb7e8bbea43" y="30.016257"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="127.066277" xlink:href="#mb7e8bbea43" y="29.699229"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="124.8165" xlink:href="#mb7e8bbea43" y="29.38199"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="122.538524" xlink:href="#mb7e8bbea43" y="29.064652"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="120.231903" xlink:href="#mb7e8bbea43" y="28.747323"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="117.896206" xlink:href="#mb7e8bbea43" y="28.430106"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="115.531014" xlink:href="#mb7e8bbea43" y="28.113095"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="113.135929" xlink:href="#mb7e8bbea43" y="27.796378"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="110.71057" xlink:href="#mb7e8bbea43" y="27.480033"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="108.254581" xlink:href="#mb7e8bbea43" y="27.16413"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="105.767628" xlink:href="#mb7e8bbea43" y="26.848728"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="103.249406" xlink:href="#mb7e8bbea43" y="26.533876"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="100.69964" xlink:href="#mb7e8bbea43" y="26.219611"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="98.11809" xlink:href="#mb7e8bbea43" y="25.905959"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="95.50455" xlink:href="#mb7e8bbea43" y="25.592935"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="92.858856" xlink:href="#mb7e8bbea43" y="25.28054"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="90.180889" xlink:href="#mb7e8bbea43" y="24.968764"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="87.470574" xlink:href="#mb7e8bbea43" y="24.657583"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="84.727888" xlink:href="#mb7e8bbea43" y="24.346961"/>
+     <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="81.952859" xlink:href="#mb7e8bbea43" y="24.036851"/>
+    </g>
    </g>
-   <g id="line2d_18">
-    <path clip-path="url(#pa8c46be0ca)" d="M 432.430455 24.03625 
-L 402.617034 56.55999 
-L 372.011161 88.425259 
-L 340.893594 118.392316 
-L 309.349251 146.370853 
-L 277.467431 172.274168 
-L 245.344311 196.017895 
-L 213.072042 217.523906 
-L 180.738382 236.727154 
-L 148.427602 253.57812 
-L 116.220754 268.042924 
-L 84.195865 280.103778 
-" style="fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;"/>
+   <g id="line2d_13">
+    <path clip-path="url(#p444e95376c)" d="M 369.666423 288.740154 
+L 376.76364 285.074491 
+L 383.58814 281.305297 
+L 389.19387 277.978761 
+L 394.551311 274.55228 
+L 399.638644 271.015314 
+L 403.655827 267.976269 
+L 407.456839 264.848402 
+L 411.027709 261.627234 
+L 414.35357 258.309266 
+L 417.418631 254.892249 
+L 419.671827 252.086772 
+L 421.73899 249.217825 
+L 423.61175 246.286598 
+L 425.282308 243.295067 
+L 426.743891 240.245982 
+L 427.991267 237.142813 
+L 429.020884 233.989387 
+L 429.829978 230.78874 
+L 430.417787 227.543482 
+L 430.785878 224.255989 
+L 430.937865 220.928379 
+L 430.877515 217.562502 
+L 430.608632 214.16 
+L 430.136073 210.722418 
+L 429.465469 207.251301 
+L 428.357924 202.86777 
+L 426.962243 198.43811 
+L 425.289599 193.96674 
+L 423.349826 189.458986 
+L 421.151037 184.921132 
+L 418.699597 180.360377 
+L 416.003058 175.785363 
+L 413.070839 171.205797 
+L 409.91054 166.631093 
+L 406.528492 162.07031 
+L 402.185974 156.628016 
+L 397.545017 151.232702 
+L 392.620838 145.89772 
+L 387.432858 140.635051 
+L 382.004907 135.454961 
+L 376.364611 130.365789 
+L 369.556093 124.551965 
+L 362.544461 118.885065 
+L 355.371533 113.386007 
+L 348.080993 108.073454 
+L 340.715108 102.963111 
+L 332.254123 97.386282 
+L 323.796355 92.103092 
+L 315.387522 87.120575 
+L 307.070214 82.439634 
+L 297.873992 77.528121 
+L 288.895698 72.982617 
+L 279.218438 68.349003 
+L 269.887847 64.148287 
+L 260.92075 60.372312 
+L 252.314401 57.000823 
+L 244.044238 54.003358 
+L 236.065559 51.342056 
+L 227.552518 48.752309 
+L 219.22083 46.459086 
+L 210.211702 44.226314 
+L 200.380609 42.041365 
+L 189.502842 39.864591 
+L 176.427884 37.484887 
+L 159.625709 34.666924 
+L 138.956776 31.437014 
+L 121.388621 28.905959 
+L 104.512265 26.691215 
+L 86.103126 24.502198 
+L 81.952714 24.036846 
+L 81.952714 24.036846 
+" style="fill:none;stroke:#2ca02c;stroke-dasharray:1.5,4.5,1.5;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    <defs>
+     <path d="M -3 3 
+L 3 -3 
+M -3 -3 
+L 3 3 
+" id="mee8b134b61" style="stroke:#2ca02c;stroke-opacity:0.2;"/>
+    </defs>
+    <g clip-path="url(#p444e95376c)">
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="369.666423" xlink:href="#mee8b134b61" y="288.740154"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="370.695667" xlink:href="#mee8b134b61" y="288.222149"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="371.719963" xlink:href="#mee8b134b61" y="287.702345"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="372.739209" xlink:href="#mee8b134b61" y="287.180688"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="373.753304" xlink:href="#mee8b134b61" y="286.657127"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="374.762142" xlink:href="#mee8b134b61" y="286.131608"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="375.765622" xlink:href="#mee8b134b61" y="285.60408"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="376.76364" xlink:href="#mee8b134b61" y="285.074491"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="377.756093" xlink:href="#mee8b134b61" y="284.542788"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="378.742876" xlink:href="#mee8b134b61" y="284.00892"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="379.723887" xlink:href="#mee8b134b61" y="283.472836"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="380.699022" xlink:href="#mee8b134b61" y="282.934482"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="381.668178" xlink:href="#mee8b134b61" y="282.393809"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="382.631251" xlink:href="#mee8b134b61" y="281.850764"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="383.58814" xlink:href="#mee8b134b61" y="281.305297"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="384.538742" xlink:href="#mee8b134b61" y="280.757355"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="385.482954" xlink:href="#mee8b134b61" y="280.206889"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="386.420675" xlink:href="#mee8b134b61" y="279.653847"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="387.351802" xlink:href="#mee8b134b61" y="279.098178"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="388.276234" xlink:href="#mee8b134b61" y="278.539833"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="389.19387" xlink:href="#mee8b134b61" y="277.978761"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="390.104608" xlink:href="#mee8b134b61" y="277.414912"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="391.008348" xlink:href="#mee8b134b61" y="276.848236"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="391.90499" xlink:href="#mee8b134b61" y="276.278683"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="392.794431" xlink:href="#mee8b134b61" y="275.706206"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="393.676572" xlink:href="#mee8b134b61" y="275.130754"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="394.551311" xlink:href="#mee8b134b61" y="274.55228"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="395.418548" xlink:href="#mee8b134b61" y="273.970736"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="396.278181" xlink:href="#mee8b134b61" y="273.386073"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="397.130109" xlink:href="#mee8b134b61" y="272.798246"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="397.974231" xlink:href="#mee8b134b61" y="272.207207"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="398.810443" xlink:href="#mee8b134b61" y="271.612912"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="399.638644" xlink:href="#mee8b134b61" y="271.015314"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="400.45873" xlink:href="#mee8b134b61" y="270.41437"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="401.270597" xlink:href="#mee8b134b61" y="269.810035"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="402.074139" xlink:href="#mee8b134b61" y="269.202268"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="402.869252" xlink:href="#mee8b134b61" y="268.591026"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="403.655827" xlink:href="#mee8b134b61" y="267.976269"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="404.433759" xlink:href="#mee8b134b61" y="267.357956"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="405.202936" xlink:href="#mee8b134b61" y="266.73605"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="405.96325" xlink:href="#mee8b134b61" y="266.110513"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="406.714589" xlink:href="#mee8b134b61" y="265.481308"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="407.456839" xlink:href="#mee8b134b61" y="264.848402"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="408.189886" xlink:href="#mee8b134b61" y="264.21176"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="408.913615" xlink:href="#mee8b134b61" y="263.571352"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="409.627908" xlink:href="#mee8b134b61" y="262.927146"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="410.332646" xlink:href="#mee8b134b61" y="262.279116"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="411.027709" xlink:href="#mee8b134b61" y="261.627234"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="411.712974" xlink:href="#mee8b134b61" y="260.971477"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="412.388319" xlink:href="#mee8b134b61" y="260.31182"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="413.053618" xlink:href="#mee8b134b61" y="259.648245"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="413.708744" xlink:href="#mee8b134b61" y="258.980732"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="414.35357" xlink:href="#mee8b134b61" y="258.309266"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="414.987967" xlink:href="#mee8b134b61" y="257.633834"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="415.611803" xlink:href="#mee8b134b61" y="256.954423"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="416.224947" xlink:href="#mee8b134b61" y="256.271025"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="416.827268" xlink:href="#mee8b134b61" y="255.583635"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="417.418631" xlink:href="#mee8b134b61" y="254.892249"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="417.998903" xlink:href="#mee8b134b61" y="254.196866"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="418.567949" xlink:href="#mee8b134b61" y="253.497488"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="419.125635" xlink:href="#mee8b134b61" y="252.794121"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="419.671827" xlink:href="#mee8b134b61" y="252.086772"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="420.206391" xlink:href="#mee8b134b61" y="251.375453"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="420.729194" xlink:href="#mee8b134b61" y="250.660177"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="421.240104" xlink:href="#mee8b134b61" y="249.940961"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="421.73899" xlink:href="#mee8b134b61" y="249.217825"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="422.225722" xlink:href="#mee8b134b61" y="248.490794"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="422.700176" xlink:href="#mee8b134b61" y="247.759892"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="423.162225" xlink:href="#mee8b134b61" y="247.025149"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="423.61175" xlink:href="#mee8b134b61" y="246.286598"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="424.048631" xlink:href="#mee8b134b61" y="245.544274"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="424.472757" xlink:href="#mee8b134b61" y="244.798216"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="424.884017" xlink:href="#mee8b134b61" y="244.048465"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="425.282308" xlink:href="#mee8b134b61" y="243.295067"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="425.66753" xlink:href="#mee8b134b61" y="242.538067"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="426.039591" xlink:href="#mee8b134b61" y="241.777517"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="426.398404" xlink:href="#mee8b134b61" y="241.01347"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="426.743891" xlink:href="#mee8b134b61" y="240.245982"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="427.07598" xlink:href="#mee8b134b61" y="239.47511"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="427.394607" xlink:href="#mee8b134b61" y="238.700915"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="427.699718" xlink:href="#mee8b134b61" y="237.923461"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="427.991267" xlink:href="#mee8b134b61" y="237.142813"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="428.269219" xlink:href="#mee8b134b61" y="236.359038"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="428.533507" xlink:href="#mee8b134b61" y="235.572179"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="428.784071" xlink:href="#mee8b134b61" y="234.782278"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.020884" xlink:href="#mee8b134b61" y="233.989387"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.243902" xlink:href="#mee8b134b61" y="233.193547"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.4531" xlink:href="#mee8b134b61" y="232.394798"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.648461" xlink:href="#mee8b134b61" y="231.593182"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.829978" xlink:href="#mee8b134b61" y="230.78874"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.997653" xlink:href="#mee8b134b61" y="229.98151"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.151498" xlink:href="#mee8b134b61" y="229.171533"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.291533" xlink:href="#mee8b134b61" y="228.358845"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.417787" xlink:href="#mee8b134b61" y="227.543482"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.530299" xlink:href="#mee8b134b61" y="226.725481"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.629114" xlink:href="#mee8b134b61" y="225.904877"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.714286" xlink:href="#mee8b134b61" y="225.081702"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.785878" xlink:href="#mee8b134b61" y="224.255989"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.843959" xlink:href="#mee8b134b61" y="223.427771"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.888607" xlink:href="#mee8b134b61" y="222.597077"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.919905" xlink:href="#mee8b134b61" y="221.763937"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.937865" xlink:href="#mee8b134b61" y="220.928379"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.94255" xlink:href="#mee8b134b61" y="220.090431"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.934019" xlink:href="#mee8b134b61" y="219.250118"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.91232" xlink:href="#mee8b134b61" y="218.407466"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.877515" xlink:href="#mee8b134b61" y="217.562502"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.829672" xlink:href="#mee8b134b61" y="216.715249"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.768859" xlink:href="#mee8b134b61" y="215.865731"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.695153" xlink:href="#mee8b134b61" y="215.013974"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.608632" xlink:href="#mee8b134b61" y="214.16"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.509377" xlink:href="#mee8b134b61" y="213.303834"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.397473" xlink:href="#mee8b134b61" y="212.445499"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.273009" xlink:href="#mee8b134b61" y="211.585019"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="430.136073" xlink:href="#mee8b134b61" y="210.722418"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.986757" xlink:href="#mee8b134b61" y="209.857721"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.825155" xlink:href="#mee8b134b61" y="208.990952"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.65136" xlink:href="#mee8b134b61" y="208.122137"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.465469" xlink:href="#mee8b134b61" y="207.251301"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.267577" xlink:href="#mee8b134b61" y="206.37847"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="429.057781" xlink:href="#mee8b134b61" y="205.503674"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="428.836176" xlink:href="#mee8b134b61" y="204.626938"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="428.602859" xlink:href="#mee8b134b61" y="203.748294"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="428.357924" xlink:href="#mee8b134b61" y="202.86777"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="428.101467" xlink:href="#mee8b134b61" y="201.985399"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="427.833579" xlink:href="#mee8b134b61" y="201.101213"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="427.554352" xlink:href="#mee8b134b61" y="200.215246"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="427.263878" xlink:href="#mee8b134b61" y="199.327533"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="426.962243" xlink:href="#mee8b134b61" y="198.43811"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="426.649534" xlink:href="#mee8b134b61" y="197.547016"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="426.325834" xlink:href="#mee8b134b61" y="196.654291"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="425.991227" xlink:href="#mee8b134b61" y="195.759974"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="425.645789" xlink:href="#mee8b134b61" y="194.864109"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="425.289599" xlink:href="#mee8b134b61" y="193.96674"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="424.922729" xlink:href="#mee8b134b61" y="193.067913"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="424.54525" xlink:href="#mee8b134b61" y="192.167674"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="424.157231" xlink:href="#mee8b134b61" y="191.266073"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="423.758735" xlink:href="#mee8b134b61" y="190.363159"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="423.349826" xlink:href="#mee8b134b61" y="189.458986"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="422.930562" xlink:href="#mee8b134b61" y="188.553605"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="422.500999" xlink:href="#mee8b134b61" y="187.647072"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="422.061191" xlink:href="#mee8b134b61" y="186.739444"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="421.611188" xlink:href="#mee8b134b61" y="185.830777"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="421.151037" xlink:href="#mee8b134b61" y="184.921132"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="420.680784" xlink:href="#mee8b134b61" y="184.010567"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="420.200472" xlink:href="#mee8b134b61" y="183.099146"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="419.710139" xlink:href="#mee8b134b61" y="182.186929"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="419.209825" xlink:href="#mee8b134b61" y="181.273982"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="418.699597" xlink:href="#mee8b134b61" y="180.360377"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="418.179587" xlink:href="#mee8b134b61" y="179.446207"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="417.64984" xlink:href="#mee8b134b61" y="178.531539"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="417.11045" xlink:href="#mee8b134b61" y="177.616457"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="416.561498" xlink:href="#mee8b134b61" y="176.701039"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="416.003058" xlink:href="#mee8b134b61" y="175.785363"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="415.435198" xlink:href="#mee8b134b61" y="174.869507"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="414.857985" xlink:href="#mee8b134b61" y="173.953547"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="414.271481" xlink:href="#mee8b134b61" y="173.037559"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="413.675747" xlink:href="#mee8b134b61" y="172.121617"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="413.070839" xlink:href="#mee8b134b61" y="171.205797"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="412.456812" xlink:href="#mee8b134b61" y="170.290173"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="411.833718" xlink:href="#mee8b134b61" y="169.374818"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="411.201608" xlink:href="#mee8b134b61" y="168.459805"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="410.560533" xlink:href="#mee8b134b61" y="167.545206"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="409.91054" xlink:href="#mee8b134b61" y="166.631093"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="409.251677" xlink:href="#mee8b134b61" y="165.717539"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="408.583994" xlink:href="#mee8b134b61" y="164.804613"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="407.907536" xlink:href="#mee8b134b61" y="163.892386"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="407.222352" xlink:href="#mee8b134b61" y="162.980929"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="406.528492" xlink:href="#mee8b134b61" y="162.07031"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="405.826003" xlink:href="#mee8b134b61" y="161.160598"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="405.114938" xlink:href="#mee8b134b61" y="160.251862"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="404.395348" xlink:href="#mee8b134b61" y="159.344169"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="403.667286" xlink:href="#mee8b134b61" y="158.437586"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="402.930809" xlink:href="#mee8b134b61" y="157.53218"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="402.185974" xlink:href="#mee8b134b61" y="156.628016"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="401.432843" xlink:href="#mee8b134b61" y="155.725159"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="400.671476" xlink:href="#mee8b134b61" y="154.823674"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="399.90194" xlink:href="#mee8b134b61" y="153.923624"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="399.124304" xlink:href="#mee8b134b61" y="153.025071"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="398.338638" xlink:href="#mee8b134b61" y="152.128076"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="397.545017" xlink:href="#mee8b134b61" y="151.232702"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="396.74352" xlink:href="#mee8b134b61" y="150.339006"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="395.934226" xlink:href="#mee8b134b61" y="149.447047"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="395.117221" xlink:href="#mee8b134b61" y="148.556884"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="394.292594" xlink:href="#mee8b134b61" y="147.668572"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="393.460434" xlink:href="#mee8b134b61" y="146.782166"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="392.620838" xlink:href="#mee8b134b61" y="145.89772"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="391.773904" xlink:href="#mee8b134b61" y="145.015287"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="390.919734" xlink:href="#mee8b134b61" y="144.134917"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="390.058434" xlink:href="#mee8b134b61" y="143.256661"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="389.190112" xlink:href="#mee8b134b61" y="142.380567"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="388.314882" xlink:href="#mee8b134b61" y="141.506682"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="387.432858" xlink:href="#mee8b134b61" y="140.635051"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="386.54416" xlink:href="#mee8b134b61" y="139.765719"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="385.648909" xlink:href="#mee8b134b61" y="138.898727"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="384.747229" xlink:href="#mee8b134b61" y="138.034116"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="383.839249" xlink:href="#mee8b134b61" y="137.171927"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="382.925097" xlink:href="#mee8b134b61" y="136.312197"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="382.004907" xlink:href="#mee8b134b61" y="135.454961"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="381.078812" xlink:href="#mee8b134b61" y="134.600256"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="380.14695" xlink:href="#mee8b134b61" y="133.748113"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="379.209458" xlink:href="#mee8b134b61" y="132.898566"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="378.266476" xlink:href="#mee8b134b61" y="132.051644"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="377.318147" xlink:href="#mee8b134b61" y="131.207376"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="376.364611" xlink:href="#mee8b134b61" y="130.365789"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="375.406014" xlink:href="#mee8b134b61" y="129.526911"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="374.442497" xlink:href="#mee8b134b61" y="128.690765"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="373.474208" xlink:href="#mee8b134b61" y="127.857376"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="372.501289" xlink:href="#mee8b134b61" y="127.026766"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="371.523886" xlink:href="#mee8b134b61" y="126.198956"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="370.542127" xlink:href="#mee8b134b61" y="125.373988"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="369.556093" xlink:href="#mee8b134b61" y="124.551965"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="368.565923" xlink:href="#mee8b134b61" y="123.732919"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="367.571725" xlink:href="#mee8b134b61" y="122.916929"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="366.573613" xlink:href="#mee8b134b61" y="122.104059"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="365.571708" xlink:href="#mee8b134b61" y="121.294376"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="364.566131" xlink:href="#mee8b134b61" y="120.487941"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="363.557007" xlink:href="#mee8b134b61" y="119.684817"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="362.544461" xlink:href="#mee8b134b61" y="118.885065"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="361.528619" xlink:href="#mee8b134b61" y="118.088742"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="360.509608" xlink:href="#mee8b134b61" y="117.295908"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="359.487558" xlink:href="#mee8b134b61" y="116.506619"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="358.462597" xlink:href="#mee8b134b61" y="115.72093"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="357.434853" xlink:href="#mee8b134b61" y="114.938897"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="356.404456" xlink:href="#mee8b134b61" y="114.160572"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="355.371533" xlink:href="#mee8b134b61" y="113.386007"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="354.336213" xlink:href="#mee8b134b61" y="112.615254"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="353.298622" xlink:href="#mee8b134b61" y="111.848361"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="352.258888" xlink:href="#mee8b134b61" y="111.085377"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="351.217134" xlink:href="#mee8b134b61" y="110.326349"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="350.173485" xlink:href="#mee8b134b61" y="109.571323"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="349.128065" xlink:href="#mee8b134b61" y="108.820343"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="348.080993" xlink:href="#mee8b134b61" y="108.073454"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="347.03239" xlink:href="#mee8b134b61" y="107.330696"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="345.982373" xlink:href="#mee8b134b61" y="106.592111"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="344.93106" xlink:href="#mee8b134b61" y="105.857738"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="343.878565" xlink:href="#mee8b134b61" y="105.127616"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="342.825001" xlink:href="#mee8b134b61" y="104.401781"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="341.770479" xlink:href="#mee8b134b61" y="103.680268"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="340.715108" xlink:href="#mee8b134b61" y="102.963111"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="339.658996" xlink:href="#mee8b134b61" y="102.250343"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="338.602248" xlink:href="#mee8b134b61" y="101.541995"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="337.54497" xlink:href="#mee8b134b61" y="100.838096"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="336.487262" xlink:href="#mee8b134b61" y="100.138676"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="335.429225" xlink:href="#mee8b134b61" y="99.443759"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="334.370958" xlink:href="#mee8b134b61" y="98.753373"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="333.312559" xlink:href="#mee8b134b61" y="98.06754"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="332.254123" xlink:href="#mee8b134b61" y="97.386282"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="331.195745" xlink:href="#mee8b134b61" y="96.70962"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="330.137517" xlink:href="#mee8b134b61" y="96.037574"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="329.079531" xlink:href="#mee8b134b61" y="95.37016"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="328.021878" xlink:href="#mee8b134b61" y="94.707395"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="326.964646" xlink:href="#mee8b134b61" y="94.049294"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="325.907923" xlink:href="#mee8b134b61" y="93.395869"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="324.851798" xlink:href="#mee8b134b61" y="92.747132"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="323.796355" xlink:href="#mee8b134b61" y="92.103092"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="322.741682" xlink:href="#mee8b134b61" y="91.463758"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="321.687861" xlink:href="#mee8b134b61" y="90.829137"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="320.634977" xlink:href="#mee8b134b61" y="90.199234"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="319.583114" xlink:href="#mee8b134b61" y="89.574054"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="318.532355" xlink:href="#mee8b134b61" y="88.953597"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="317.482782" xlink:href="#mee8b134b61" y="88.337866"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="316.434477" xlink:href="#mee8b134b61" y="87.726859"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="315.387522" xlink:href="#mee8b134b61" y="87.120575"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="314.341998" xlink:href="#mee8b134b61" y="86.519011"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="313.297987" xlink:href="#mee8b134b61" y="85.922161"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="312.255569" xlink:href="#mee8b134b61" y="85.330019"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="311.214826" xlink:href="#mee8b134b61" y="84.742579"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="310.175839" xlink:href="#mee8b134b61" y="84.15983"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="309.138687" xlink:href="#mee8b134b61" y="83.581765"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="308.103452" xlink:href="#mee8b134b61" y="83.00837"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="307.070214" xlink:href="#mee8b134b61" y="82.439634"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="306.039053" xlink:href="#mee8b134b61" y="81.875543"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="305.010049" xlink:href="#mee8b134b61" y="81.316082"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="303.983284" xlink:href="#mee8b134b61" y="80.761236"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="302.958836" xlink:href="#mee8b134b61" y="80.210988"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="301.936785" xlink:href="#mee8b134b61" y="79.665318"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="300.917211" xlink:href="#mee8b134b61" y="79.124209"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="299.900192" xlink:href="#mee8b134b61" y="78.587642"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="298.885766" xlink:href="#mee8b134b61" y="78.055617"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="297.873992" xlink:href="#mee8b134b61" y="77.528121"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="296.864925" xlink:href="#mee8b134b61" y="77.005145"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="295.858613" xlink:href="#mee8b134b61" y="76.48668"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="294.855106" xlink:href="#mee8b134b61" y="75.972714"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="293.854452" xlink:href="#mee8b134b61" y="75.463235"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="292.856702" xlink:href="#mee8b134b61" y="74.958229"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="291.861904" xlink:href="#mee8b134b61" y="74.457681"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="290.870106" xlink:href="#mee8b134b61" y="73.961575"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="289.881355" xlink:href="#mee8b134b61" y="73.469893"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="288.895698" xlink:href="#mee8b134b61" y="72.982617"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="287.913182" xlink:href="#mee8b134b61" y="72.499728"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="286.933851" xlink:href="#mee8b134b61" y="72.021205"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="285.95775" xlink:href="#mee8b134b61" y="71.547026"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="284.984923" xlink:href="#mee8b134b61" y="71.077169"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="284.015402" xlink:href="#mee8b134b61" y="70.611636"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="283.049215" xlink:href="#mee8b134b61" y="70.150442"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="282.086398" xlink:href="#mee8b134b61" y="69.693576"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="281.126978" xlink:href="#mee8b134b61" y="69.241046"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="280.170982" xlink:href="#mee8b134b61" y="68.792855"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="279.218438" xlink:href="#mee8b134b61" y="68.349003"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="278.269372" xlink:href="#mee8b134b61" y="67.909488"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="277.323808" xlink:href="#mee8b134b61" y="67.47431"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="276.381771" xlink:href="#mee8b134b61" y="67.043465"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="275.44328" xlink:href="#mee8b134b61" y="66.616947"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="274.508357" xlink:href="#mee8b134b61" y="66.19475"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="273.577021" xlink:href="#mee8b134b61" y="65.776868"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="272.649288" xlink:href="#mee8b134b61" y="65.363291"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="271.725172" xlink:href="#mee8b134b61" y="64.95401"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="270.804688" xlink:href="#mee8b134b61" y="64.549012"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="269.887847" xlink:href="#mee8b134b61" y="64.148287"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="268.974657" xlink:href="#mee8b134b61" y="63.751819"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="268.065126" xlink:href="#mee8b134b61" y="63.359593"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="267.159259" xlink:href="#mee8b134b61" y="62.971594"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="266.257058" xlink:href="#mee8b134b61" y="62.587804"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="265.358525" xlink:href="#mee8b134b61" y="62.208203"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="264.463659" xlink:href="#mee8b134b61" y="61.832773"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="263.572455" xlink:href="#mee8b134b61" y="61.461491"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="262.684908" xlink:href="#mee8b134b61" y="61.094336"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="261.80101" xlink:href="#mee8b134b61" y="60.731284"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="260.92075" xlink:href="#mee8b134b61" y="60.372312"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="260.044116" xlink:href="#mee8b134b61" y="60.017392"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="259.171093" xlink:href="#mee8b134b61" y="59.6665"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="258.301665" xlink:href="#mee8b134b61" y="59.319606"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="257.435811" xlink:href="#mee8b134b61" y="58.976684"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="256.57351" xlink:href="#mee8b134b61" y="58.637703"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="255.714739" xlink:href="#mee8b134b61" y="58.302633"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="254.859472" xlink:href="#mee8b134b61" y="57.971442"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="254.007681" xlink:href="#mee8b134b61" y="57.644099"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="253.159334" xlink:href="#mee8b134b61" y="57.320571"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="252.314401" xlink:href="#mee8b134b61" y="57.000823"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="251.472847" xlink:href="#mee8b134b61" y="56.684822"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="250.634635" xlink:href="#mee8b134b61" y="56.372532"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="249.799726" xlink:href="#mee8b134b61" y="56.063917"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="248.968081" xlink:href="#mee8b134b61" y="55.75894"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="248.139657" xlink:href="#mee8b134b61" y="55.457565"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="247.31441" xlink:href="#mee8b134b61" y="55.159753"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="246.492293" xlink:href="#mee8b134b61" y="54.865465"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="245.673259" xlink:href="#mee8b134b61" y="54.574664"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="244.857258" xlink:href="#mee8b134b61" y="54.287308"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="244.044238" xlink:href="#mee8b134b61" y="54.003358"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="243.234146" xlink:href="#mee8b134b61" y="53.722773"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="242.426929" xlink:href="#mee8b134b61" y="53.445512"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="241.622528" xlink:href="#mee8b134b61" y="53.171534"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="240.820887" xlink:href="#mee8b134b61" y="52.900798"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="240.021945" xlink:href="#mee8b134b61" y="52.63326"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="239.225643" xlink:href="#mee8b134b61" y="52.368878"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="238.431917" xlink:href="#mee8b134b61" y="52.10761"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="237.640705" xlink:href="#mee8b134b61" y="51.849412"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="236.851941" xlink:href="#mee8b134b61" y="51.594242"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="236.065559" xlink:href="#mee8b134b61" y="51.342056"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="235.281491" xlink:href="#mee8b134b61" y="51.092809"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="234.49967" xlink:href="#mee8b134b61" y="50.846458"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="233.720025" xlink:href="#mee8b134b61" y="50.60296"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="232.942486" xlink:href="#mee8b134b61" y="50.362269"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="232.166981" xlink:href="#mee8b134b61" y="50.124341"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="231.393436" xlink:href="#mee8b134b61" y="49.889133"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="230.621779" xlink:href="#mee8b134b61" y="49.656598"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="229.851935" xlink:href="#mee8b134b61" y="49.426693"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="229.083827" xlink:href="#mee8b134b61" y="49.199373"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="228.317381" xlink:href="#mee8b134b61" y="48.974593"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="227.552518" xlink:href="#mee8b134b61" y="48.752309"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="226.789161" xlink:href="#mee8b134b61" y="48.532475"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="226.027231" xlink:href="#mee8b134b61" y="48.315046"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="225.26665" xlink:href="#mee8b134b61" y="48.099979"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="224.507336" xlink:href="#mee8b134b61" y="47.887228"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="223.749211" xlink:href="#mee8b134b61" y="47.676748"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="222.992192" xlink:href="#mee8b134b61" y="47.468496"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="222.236198" xlink:href="#mee8b134b61" y="47.262426"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="221.481148" xlink:href="#mee8b134b61" y="47.058495"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="220.726958" xlink:href="#mee8b134b61" y="46.856657"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="219.973547" xlink:href="#mee8b134b61" y="46.656868"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="219.22083" xlink:href="#mee8b134b61" y="46.459086"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="218.468724" xlink:href="#mee8b134b61" y="46.263265"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="217.717146" xlink:href="#mee8b134b61" y="46.069362"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="216.96601" xlink:href="#mee8b134b61" y="45.877333"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="216.215232" xlink:href="#mee8b134b61" y="45.687135"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="215.464728" xlink:href="#mee8b134b61" y="45.498724"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="214.714413" xlink:href="#mee8b134b61" y="45.312058"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="213.964201" xlink:href="#mee8b134b61" y="45.127094"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="213.214007" xlink:href="#mee8b134b61" y="44.943789"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="212.463745" xlink:href="#mee8b134b61" y="44.7621"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="211.713331" xlink:href="#mee8b134b61" y="44.581986"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="210.962679" xlink:href="#mee8b134b61" y="44.403405"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="210.211702" xlink:href="#mee8b134b61" y="44.226314"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="209.460316" xlink:href="#mee8b134b61" y="44.050673"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="208.708434" xlink:href="#mee8b134b61" y="43.87644"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="207.955971" xlink:href="#mee8b134b61" y="43.703575"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="207.202841" xlink:href="#mee8b134b61" y="43.532037"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="206.448959" xlink:href="#mee8b134b61" y="43.361785"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="205.694239" xlink:href="#mee8b134b61" y="43.19278"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="204.938597" xlink:href="#mee8b134b61" y="43.024982"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="204.181946" xlink:href="#mee8b134b61" y="42.858352"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="203.424203" xlink:href="#mee8b134b61" y="42.692851"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="202.665282" xlink:href="#mee8b134b61" y="42.528439"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="201.905098" xlink:href="#mee8b134b61" y="42.36508"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="201.143569" xlink:href="#mee8b134b61" y="42.202734"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="200.380609" xlink:href="#mee8b134b61" y="42.041365"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="199.616135" xlink:href="#mee8b134b61" y="41.880934"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="198.850064" xlink:href="#mee8b134b61" y="41.721406"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="198.082312" xlink:href="#mee8b134b61" y="41.562744"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="197.312798" xlink:href="#mee8b134b61" y="41.404911"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="196.541438" xlink:href="#mee8b134b61" y="41.247873"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="195.768152" xlink:href="#mee8b134b61" y="41.091593"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="194.992858" xlink:href="#mee8b134b61" y="40.936038"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="194.215475" xlink:href="#mee8b134b61" y="40.781172"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="193.435922" xlink:href="#mee8b134b61" y="40.626962"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="192.65412" xlink:href="#mee8b134b61" y="40.473374"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="191.86999" xlink:href="#mee8b134b61" y="40.320375"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="191.083452" xlink:href="#mee8b134b61" y="40.167933"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="190.294429" xlink:href="#mee8b134b61" y="40.016016"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="189.502842" xlink:href="#mee8b134b61" y="39.864591"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="188.708615" xlink:href="#mee8b134b61" y="39.713628"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="187.911671" xlink:href="#mee8b134b61" y="39.563096"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="187.111935" xlink:href="#mee8b134b61" y="39.412964"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="186.30933" xlink:href="#mee8b134b61" y="39.263204"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="185.503783" xlink:href="#mee8b134b61" y="39.113785"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="184.695219" xlink:href="#mee8b134b61" y="38.964679"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="183.883566" xlink:href="#mee8b134b61" y="38.815857"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="183.06875" xlink:href="#mee8b134b61" y="38.667293"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="182.2507" xlink:href="#mee8b134b61" y="38.518959"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="181.429344" xlink:href="#mee8b134b61" y="38.370828"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="180.604612" xlink:href="#mee8b134b61" y="38.222874"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="179.776434" xlink:href="#mee8b134b61" y="38.075072"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="178.94474" xlink:href="#mee8b134b61" y="37.927396"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="178.109463" xlink:href="#mee8b134b61" y="37.779823"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="177.270533" xlink:href="#mee8b134b61" y="37.632328"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="176.427884" xlink:href="#mee8b134b61" y="37.484887"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="175.58145" xlink:href="#mee8b134b61" y="37.337478"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="174.731163" xlink:href="#mee8b134b61" y="37.190079"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="173.876959" xlink:href="#mee8b134b61" y="37.042668"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="173.018774" xlink:href="#mee8b134b61" y="36.895224"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="172.156542" xlink:href="#mee8b134b61" y="36.747726"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="171.2902" xlink:href="#mee8b134b61" y="36.600154"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="170.419685" xlink:href="#mee8b134b61" y="36.452489"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="169.544935" xlink:href="#mee8b134b61" y="36.304712"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="168.665888" xlink:href="#mee8b134b61" y="36.156804"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="167.782481" xlink:href="#mee8b134b61" y="36.008748"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="166.894654" xlink:href="#mee8b134b61" y="35.860527"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="166.002347" xlink:href="#mee8b134b61" y="35.712123"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="165.105498" xlink:href="#mee8b134b61" y="35.563522"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="164.204049" xlink:href="#mee8b134b61" y="35.414707"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="163.297939" xlink:href="#mee8b134b61" y="35.265663"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="162.387109" xlink:href="#mee8b134b61" y="35.116377"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="161.4715" xlink:href="#mee8b134b61" y="34.966834"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="160.551053" xlink:href="#mee8b134b61" y="34.81702"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="159.625709" xlink:href="#mee8b134b61" y="34.666924"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="158.695411" xlink:href="#mee8b134b61" y="34.516533"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="157.760099" xlink:href="#mee8b134b61" y="34.365835"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="156.819714" xlink:href="#mee8b134b61" y="34.21482"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="155.8742" xlink:href="#mee8b134b61" y="34.063476"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="154.923496" xlink:href="#mee8b134b61" y="33.911794"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="153.967545" xlink:href="#mee8b134b61" y="33.759763"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="153.006287" xlink:href="#mee8b134b61" y="33.607376"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="152.039665" xlink:href="#mee8b134b61" y="33.454623"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="151.067618" xlink:href="#mee8b134b61" y="33.301496"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="150.090087" xlink:href="#mee8b134b61" y="33.147987"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="149.107012" xlink:href="#mee8b134b61" y="32.99409"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="148.118326" xlink:href="#mee8b134b61" y="32.839822"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="147.123961" xlink:href="#mee8b134b61" y="32.685198"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="146.123854" xlink:href="#mee8b134b61" y="32.530224"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="145.117938" xlink:href="#mee8b134b61" y="32.37492"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="144.106146" xlink:href="#mee8b134b61" y="32.219301"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="143.088413" xlink:href="#mee8b134b61" y="32.063382"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="142.064675" xlink:href="#mee8b134b61" y="31.907178"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="141.034865" xlink:href="#mee8b134b61" y="31.750705"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="139.99892" xlink:href="#mee8b134b61" y="31.593979"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="138.956776" xlink:href="#mee8b134b61" y="31.437014"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="137.908368" xlink:href="#mee8b134b61" y="31.279828"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="136.853633" xlink:href="#mee8b134b61" y="31.122436"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="135.792509" xlink:href="#mee8b134b61" y="30.964853"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="134.724932" xlink:href="#mee8b134b61" y="30.807096"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="133.650841" xlink:href="#mee8b134b61" y="30.64918"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="132.570174" xlink:href="#mee8b134b61" y="30.49112"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="131.482869" xlink:href="#mee8b134b61" y="30.332932"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="130.388866" xlink:href="#mee8b134b61" y="30.174632"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="129.288105" xlink:href="#mee8b134b61" y="30.016234"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="128.180526" xlink:href="#mee8b134b61" y="29.857754"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="127.06607" xlink:href="#mee8b134b61" y="29.699207"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="125.944679" xlink:href="#mee8b134b61" y="29.540607"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="124.816295" xlink:href="#mee8b134b61" y="29.381968"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="123.680862" xlink:href="#mee8b134b61" y="29.223305"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="122.538322" xlink:href="#mee8b134b61" y="29.064631"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="121.388621" xlink:href="#mee8b134b61" y="28.905959"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="120.231704" xlink:href="#mee8b134b61" y="28.747303"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="119.067518" xlink:href="#mee8b134b61" y="28.588674"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="117.896009" xlink:href="#mee8b134b61" y="28.430086"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="116.717127" xlink:href="#mee8b134b61" y="28.27155"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="115.53082" xlink:href="#mee8b134b61" y="28.113076"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="114.33704" xlink:href="#mee8b134b61" y="27.954676"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="113.135738" xlink:href="#mee8b134b61" y="27.79636"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="111.926868" xlink:href="#mee8b134b61" y="27.638137"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="110.710383" xlink:href="#mee8b134b61" y="27.480016"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="109.48624" xlink:href="#mee8b134b61" y="27.322005"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="108.254397" xlink:href="#mee8b134b61" y="27.164113"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="107.014812" xlink:href="#mee8b134b61" y="27.006347"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="105.767447" xlink:href="#mee8b134b61" y="26.848712"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="104.512265" xlink:href="#mee8b134b61" y="26.691215"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="103.249229" xlink:href="#mee8b134b61" y="26.533861"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="101.978307" xlink:href="#mee8b134b61" y="26.376653"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="100.699467" xlink:href="#mee8b134b61" y="26.219597"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="99.41268" xlink:href="#mee8b134b61" y="26.062694"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="98.11792" xlink:href="#mee8b134b61" y="25.905946"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="96.815162" xlink:href="#mee8b134b61" y="25.749356"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="95.504384" xlink:href="#mee8b134b61" y="25.592924"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="94.185567" xlink:href="#mee8b134b61" y="25.436648"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="92.858695" xlink:href="#mee8b134b61" y="25.28053"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="91.523754" xlink:href="#mee8b134b61" y="25.124566"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="90.180732" xlink:href="#mee8b134b61" y="24.968755"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="88.829623" xlink:href="#mee8b134b61" y="24.813093"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="87.470421" xlink:href="#mee8b134b61" y="24.657576"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="86.103126" xlink:href="#mee8b134b61" y="24.502198"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="84.727739" xlink:href="#mee8b134b61" y="24.346956"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="83.344266" xlink:href="#mee8b134b61" y="24.191841"/>
+     <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="81.952714" xlink:href="#mee8b134b61" y="24.036846"/>
+    </g>
    </g>
-   <g id="line2d_19">
-    <path clip-path="url(#pa8c46be0ca)" d="M 432.430455 24.03625 
-L 402.505403 57.163355 
-L 371.897487 89.076571 
-L 340.786047 119.099901 
-L 309.257063 147.123687 
-L 277.39723 173.053166 
-L 245.296254 196.803343 
-L 213.040959 218.300705 
-L 180.715219 237.48656 
-L 148.402179 254.317713 
-L 116.187369 268.765081 
-L 84.153834 280.815671 
-" style="fill:none;stroke:#2ca02c;stroke-linecap:square;stroke-width:1.5;"/>
+   <g id="line2d_14">
+    <path clip-path="url(#p444e95376c)" d="M 369.97072 288.76125 
+L 378.217139 284.547929 
+L 386.100185 280.181013 
+L 393.564916 275.638159 
+L 397.1232 273.294339 
+L 400.556055 270.89915 
+L 403.856182 268.450503 
+L 407.015959 265.946541 
+L 410.02736 263.38568 
+L 412.881919 260.766652 
+L 415.570732 258.088549 
+L 418.084536 255.350858 
+L 420.413853 252.553494 
+L 422.549221 249.696807 
+L 424.481471 246.781578 
+L 426.202062 243.808992 
+L 427.703402 240.780587 
+L 428.979134 237.698187 
+L 430.024318 234.563833 
+L 430.835369 231.37972 
+L 431.409701 228.14822 
+L 431.746979 224.87166 
+L 431.84878 221.552317 
+L 431.718701 218.192388 
+L 431.362228 214.794082 
+L 430.78654 211.359574 
+L 430.000073 207.89106 
+L 429.012031 204.390823 
+L 427.831884 200.86128 
+L 426.468895 197.305025 
+L 424.931731 193.72486 
+L 423.228193 190.123808 
+L 421.365077 186.505105 
+L 419.348151 182.872176 
+L 417.182234 179.228608 
+L 414.871452 175.578129 
+L 412.42042 171.924661 
+L 409.832975 168.272219 
+L 404.262633 160.98679 
+L 398.187032 153.755048 
+L 391.634145 146.61025 
+L 384.639204 139.584782 
+L 377.248722 132.709132 
+L 369.521564 126.010942 
+L 361.527594 119.514348 
+L 353.340054 113.240821 
+L 345.027129 107.209974 
+L 336.646238 101.439844 
+L 328.242811 95.946643 
+L 319.852907 90.744209 
+L 311.507656 85.843343 
+L 303.237026 81.251176 
+L 295.071238 76.970688 
+L 287.03972 73.000742 
+L 279.168646 69.336549 
+L 271.478063 65.969862 
+L 263.980814 62.889047 
+L 256.68201 60.079269 
+L 249.578813 57.522906 
+L 242.660497 55.200142 
+L 232.588108 52.107023 
+L 222.800806 49.415926 
+L 213.18347 47.050739 
+L 203.601814 44.937441 
+L 193.90997 43.006511 
+L 180.558175 40.608673 
+L 166.406267 38.303197 
+L 147.13944 35.428149 
+L 125.673487 32.496755 
+L 106.642225 30.111477 
+L 85.769209 27.707352 
+L 68.842656 25.898847 
+L 68.842656 25.898847 
+" style="fill:none;stroke:#d62728;stroke-dasharray:6,4.5,6;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    <defs>
+     <path d="M -3 3 
+L 3 -3 
+M -3 -3 
+L 3 3 
+" id="m6d92a482c2" style="stroke:#d62728;stroke-opacity:0.2;"/>
+    </defs>
+    <g clip-path="url(#p444e95376c)">
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="369.97072" xlink:href="#m6d92a482c2" y="288.76125"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="374.135905" xlink:href="#m6d92a482c2" y="286.672322"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="378.217139" xlink:href="#m6d92a482c2" y="284.547929"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="382.207523" xlink:href="#m6d92a482c2" y="282.385111"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="386.100185" xlink:href="#m6d92a482c2" y="280.181013"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="389.888269" xlink:href="#m6d92a482c2" y="277.932898"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="393.564916" xlink:href="#m6d92a482c2" y="275.638159"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="397.1232" xlink:href="#m6d92a482c2" y="273.294339"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="400.556055" xlink:href="#m6d92a482c2" y="270.89915"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="403.856182" xlink:href="#m6d92a482c2" y="268.450503"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="407.015959" xlink:href="#m6d92a482c2" y="265.946541"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="410.02736" xlink:href="#m6d92a482c2" y="263.38568"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="412.881919" xlink:href="#m6d92a482c2" y="260.766652"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="415.570732" xlink:href="#m6d92a482c2" y="258.088549"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="418.084536" xlink:href="#m6d92a482c2" y="255.350858"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="420.413853" xlink:href="#m6d92a482c2" y="252.553494"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="422.549221" xlink:href="#m6d92a482c2" y="249.696807"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="424.481471" xlink:href="#m6d92a482c2" y="246.781578"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="426.202062" xlink:href="#m6d92a482c2" y="243.808992"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="427.703402" xlink:href="#m6d92a482c2" y="240.780587"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="428.979134" xlink:href="#m6d92a482c2" y="237.698187"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="430.024318" xlink:href="#m6d92a482c2" y="234.563833"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="430.835369" xlink:href="#m6d92a482c2" y="231.37972"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="431.409701" xlink:href="#m6d92a482c2" y="228.14822"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="431.746979" xlink:href="#m6d92a482c2" y="224.87166"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="431.84878" xlink:href="#m6d92a482c2" y="221.552317"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="431.718701" xlink:href="#m6d92a482c2" y="218.192388"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="431.362228" xlink:href="#m6d92a482c2" y="214.794082"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="430.78654" xlink:href="#m6d92a482c2" y="211.359574"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="430.000073" xlink:href="#m6d92a482c2" y="207.89106"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="429.012031" xlink:href="#m6d92a482c2" y="204.390823"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="427.831884" xlink:href="#m6d92a482c2" y="200.86128"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="426.468895" xlink:href="#m6d92a482c2" y="197.305025"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="424.931731" xlink:href="#m6d92a482c2" y="193.72486"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="423.228193" xlink:href="#m6d92a482c2" y="190.123808"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="421.365077" xlink:href="#m6d92a482c2" y="186.505105"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="419.348151" xlink:href="#m6d92a482c2" y="182.872176"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="417.182234" xlink:href="#m6d92a482c2" y="179.228608"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="414.871452" xlink:href="#m6d92a482c2" y="175.578129"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="412.42042" xlink:href="#m6d92a482c2" y="171.924661"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="409.832975" xlink:href="#m6d92a482c2" y="168.272219"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="407.112588" xlink:href="#m6d92a482c2" y="164.624881"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="404.262633" xlink:href="#m6d92a482c2" y="160.98679"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="401.286346" xlink:href="#m6d92a482c2" y="157.362121"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="398.187032" xlink:href="#m6d92a482c2" y="153.755048"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="394.968279" xlink:href="#m6d92a482c2" y="150.169725"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="391.634145" xlink:href="#m6d92a482c2" y="146.61025"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="388.189315" xlink:href="#m6d92a482c2" y="143.080638"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="384.639204" xlink:href="#m6d92a482c2" y="139.584782"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="380.99001" xlink:href="#m6d92a482c2" y="136.126426"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="377.248722" xlink:href="#m6d92a482c2" y="132.709132"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="373.423086" xlink:href="#m6d92a482c2" y="129.33626"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="369.521564" xlink:href="#m6d92a482c2" y="126.010942"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="365.553273" xlink:href="#m6d92a482c2" y="122.736067"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="361.527594" xlink:href="#m6d92a482c2" y="119.514348"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="357.453556" xlink:href="#m6d92a482c2" y="116.348437"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="353.340054" xlink:href="#m6d92a482c2" y="113.240821"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="349.195388" xlink:href="#m6d92a482c2" y="110.193897"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="345.027129" xlink:href="#m6d92a482c2" y="107.209974"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="340.842074" xlink:href="#m6d92a482c2" y="104.291258"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="336.646238" xlink:href="#m6d92a482c2" y="101.439844"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="332.444918" xlink:href="#m6d92a482c2" y="98.657699"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="328.242811" xlink:href="#m6d92a482c2" y="95.946643"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="324.044161" xlink:href="#m6d92a482c2" y="93.308326"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="319.852907" xlink:href="#m6d92a482c2" y="90.744209"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="315.672829" xlink:href="#m6d92a482c2" y="88.255542"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="311.507656" xlink:href="#m6d92a482c2" y="85.843343"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="307.361128" xlink:href="#m6d92a482c2" y="83.508384"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="303.237026" xlink:href="#m6d92a482c2" y="81.251176"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="299.139145" xlink:href="#m6d92a482c2" y="79.071957"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="295.071238" xlink:href="#m6d92a482c2" y="76.970688"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="291.036946" xlink:href="#m6d92a482c2" y="74.94711"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="287.03972" xlink:href="#m6d92a482c2" y="73.000742"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="283.082706" xlink:href="#m6d92a482c2" y="71.130863"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="279.168646" xlink:href="#m6d92a482c2" y="69.336549"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="275.299816" xlink:href="#m6d92a482c2" y="67.616666"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="271.478063" xlink:href="#m6d92a482c2" y="65.969862"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="267.704767" xlink:href="#m6d92a482c2" y="64.394577"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="263.980814" xlink:href="#m6d92a482c2" y="62.889047"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="260.306596" xlink:href="#m6d92a482c2" y="61.451321"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="256.68201" xlink:href="#m6d92a482c2" y="60.079269"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="253.106449" xlink:href="#m6d92a482c2" y="58.770605"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="249.578813" xlink:href="#m6d92a482c2" y="57.522906"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="246.097513" xlink:href="#m6d92a482c2" y="56.33363"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="242.660497" xlink:href="#m6d92a482c2" y="55.200142"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="239.265267" xlink:href="#m6d92a482c2" y="54.11973"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="235.908906" xlink:href="#m6d92a482c2" y="53.089625"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="232.588108" xlink:href="#m6d92a482c2" y="52.107023"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="229.299206" xlink:href="#m6d92a482c2" y="51.169095"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="226.038204" xlink:href="#m6d92a482c2" y="50.273006"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="222.800806" xlink:href="#m6d92a482c2" y="49.415926"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="219.582452" xlink:href="#m6d92a482c2" y="48.595041"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="216.378341" xlink:href="#m6d92a482c2" y="47.807562"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="213.18347" xlink:href="#m6d92a482c2" y="47.050739"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="209.99266" xlink:href="#m6d92a482c2" y="46.321867"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="206.800586" xlink:href="#m6d92a482c2" y="45.618295"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="203.601814" xlink:href="#m6d92a482c2" y="44.937441"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="200.390829" xlink:href="#m6d92a482c2" y="44.276792"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="197.162072" xlink:href="#m6d92a482c2" y="43.633926"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="193.90997" xlink:href="#m6d92a482c2" y="43.006511"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="190.628974" xlink:href="#m6d92a482c2" y="42.392324"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="187.313592" xlink:href="#m6d92a482c2" y="41.789255"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="183.95842" xlink:href="#m6d92a482c2" y="41.195321"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="180.558175" xlink:href="#m6d92a482c2" y="40.608673"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="177.107717" xlink:href="#m6d92a482c2" y="40.027608"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="173.602074" xlink:href="#m6d92a482c2" y="39.450575"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="170.036456" xlink:href="#m6d92a482c2" y="38.87618"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="166.406267" xlink:href="#m6d92a482c2" y="38.303197"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="162.707105" xlink:href="#m6d92a482c2" y="37.730565"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="158.934765" xlink:href="#m6d92a482c2" y="37.15739"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="155.085234" xlink:href="#m6d92a482c2" y="36.582947"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="151.154678" xlink:href="#m6d92a482c2" y="36.006669"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="147.13944" xlink:href="#m6d92a482c2" y="35.428149"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="143.03602" xlink:href="#m6d92a482c2" y="34.84712"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="138.840998" xlink:href="#m6d92a482c2" y="34.263444"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="134.55105" xlink:href="#m6d92a482c2" y="33.677096"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="130.162936" xlink:href="#m6d92a482c2" y="33.088149"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="125.673487" xlink:href="#m6d92a482c2" y="32.496755"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="121.079614" xlink:href="#m6d92a482c2" y="31.903126"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="116.378327" xlink:href="#m6d92a482c2" y="31.307517"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="111.566764" xlink:href="#m6d92a482c2" y="30.710206"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="106.642225" xlink:href="#m6d92a482c2" y="30.111477"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="101.602226" xlink:href="#m6d92a482c2" y="29.511602"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="96.444561" xlink:href="#m6d92a482c2" y="28.910827"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="91.167367" xlink:href="#m6d92a482c2" y="28.309357"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="85.769209" xlink:href="#m6d92a482c2" y="27.707352"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="80.249156" xlink:href="#m6d92a482c2" y="27.104913"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="74.606865" xlink:href="#m6d92a482c2" y="26.502084"/>
+     <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="68.842656" xlink:href="#m6d92a482c2" y="25.898847"/>
+    </g>
+   </g>
+   <g id="line2d_15">
+    <path clip-path="url(#p444e95376c)" d="M 369.97072 288.76125 
+L 378.217168 284.547948 
+L 384.16654 281.288426 
+L 389.888306 277.932939 
+L 395.359299 274.472586 
+L 400.556016 270.899221 
+L 405.454012 267.205635 
+L 410.027221 263.385799 
+L 412.881766 260.766789 
+L 415.570586 258.088703 
+L 418.08442 255.351027 
+L 420.413797 252.553673 
+L 422.549249 249.69699 
+L 424.481605 246.781758 
+L 426.202312 243.80916 
+L 427.703764 240.780735 
+L 428.979586 237.698309 
+L 430.024817 234.563926 
+L 430.835793 231.379801 
+L 431.410243 228.148263 
+L 431.747646 224.871661 
+L 431.849508 221.552286 
+L 431.719405 218.192354 
+L 431.362854 214.794048 
+L 430.787035 211.359538 
+L 430.000393 207.891028 
+L 429.01215 204.390798 
+L 427.831795 200.861263 
+L 426.468613 197.305012 
+L 424.099799 191.926732 
+L 421.364431 186.505073 
+L 418.282858 181.051435 
+L 414.870956 175.578058 
+L 411.142964 170.097965 
+L 407.111927 164.624759 
+L 402.789428 159.172372 
+L 398.186443 153.754877 
+L 393.314834 148.386301 
+L 388.18883 143.080403 
+L 382.826084 137.850423 
+L 377.248182 132.70884 
+L 371.480635 127.667161 
+L 365.552527 122.735755 
+L 359.495025 117.923985 
+L 351.269854 111.709368 
+L 342.93486 105.742088 
+L 334.544444 100.039761 
+L 326.141306 94.618065 
+L 317.759785 89.490144 
+L 309.430387 84.665939 
+L 301.183091 80.151584 
+L 293.048101 75.949 
+L 285.054326 72.056094 
+L 277.226666 68.467191 
+L 269.583452 65.173197 
+L 262.135583 62.161657 
+L 253.104482 58.770439 
+L 244.371589 55.759929 
+L 235.90682 53.089485 
+L 227.663327 50.715865 
+L 219.580221 48.59491 
+L 209.990325 46.321737 
+L 200.388395 44.276665 
+L 188.973399 42.089402 
+L 175.359523 39.738555 
+L 158.932179 37.157261 
+L 140.947593 34.555477 
+L 121.077114 31.902992 
+L 101.599892 29.511504 
+L 80.247082 27.104891 
+L 68.840733 25.898877 
+L 68.840733 25.898877 
+" style="fill:none;stroke:#9467bd;stroke-dasharray:3,4.5,3;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    <defs>
+     <path d="M -3 3 
+L 3 -3 
+M -3 -3 
+L 3 3 
+" id="me6acc25a23" style="stroke:#9467bd;stroke-opacity:0.2;"/>
+    </defs>
+    <g clip-path="url(#p444e95376c)">
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="369.97072" xlink:href="#me6acc25a23" y="288.76125"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="372.063383" xlink:href="#me6acc25a23" y="287.721036"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="374.13592" xlink:href="#me6acc25a23" y="286.672332"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="376.18747" xlink:href="#me6acc25a23" y="285.614761"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="378.217168" xlink:href="#me6acc25a23" y="284.547948"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="380.224153" xlink:href="#me6acc25a23" y="283.471527"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="382.207563" xlink:href="#me6acc25a23" y="282.385137"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="384.16654" xlink:href="#me6acc25a23" y="281.288426"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="386.100227" xlink:href="#me6acc25a23" y="280.181047"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="388.007768" xlink:href="#me6acc25a23" y="279.062661"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="389.888306" xlink:href="#me6acc25a23" y="277.932939"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="391.740983" xlink:href="#me6acc25a23" y="276.791559"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="393.564937" xlink:href="#me6acc25a23" y="275.638209"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="395.359299" xlink:href="#me6acc25a23" y="274.472586"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="397.123195" xlink:href="#me6acc25a23" y="273.294398"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="398.855735" xlink:href="#me6acc25a23" y="272.103366"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="400.556016" xlink:href="#me6acc25a23" y="270.899221"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="402.223121" xlink:href="#me6acc25a23" y="269.681709"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="403.856107" xlink:href="#me6acc25a23" y="268.450588"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="405.454012" xlink:href="#me6acc25a23" y="267.205635"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="407.015848" xlink:href="#me6acc25a23" y="265.946642"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="408.540599" xlink:href="#me6acc25a23" y="264.67342"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="410.027221" xlink:href="#me6acc25a23" y="263.385799"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="411.474644" xlink:href="#me6acc25a23" y="262.08363"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="412.881766" xlink:href="#me6acc25a23" y="260.766789"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="414.247463" xlink:href="#me6acc25a23" y="259.435172"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="415.570586" xlink:href="#me6acc25a23" y="258.088703"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="416.849965" xlink:href="#me6acc25a23" y="256.72733"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="418.08442" xlink:href="#me6acc25a23" y="255.351027"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="419.272761" xlink:href="#me6acc25a23" y="253.959798"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="420.413797" xlink:href="#me6acc25a23" y="252.553673"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="421.506347" xlink:href="#me6acc25a23" y="251.132709"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="422.549249" xlink:href="#me6acc25a23" y="249.69699"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="423.541367" xlink:href="#me6acc25a23" y="248.246627"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="424.481605" xlink:href="#me6acc25a23" y="246.781758"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="425.368916" xlink:href="#me6acc25a23" y="245.302541"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="426.202312" xlink:href="#me6acc25a23" y="243.80916"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="426.980875" xlink:href="#me6acc25a23" y="242.301817"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="427.703764" xlink:href="#me6acc25a23" y="240.780735"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="428.370223" xlink:href="#me6acc25a23" y="239.246148"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="428.979586" xlink:href="#me6acc25a23" y="237.698309"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="429.531279" xlink:href="#me6acc25a23" y="236.137478"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="430.024817" xlink:href="#me6acc25a23" y="234.563926"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="430.459768" xlink:href="#me6acc25a23" y="232.977937"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="430.835793" xlink:href="#me6acc25a23" y="231.379801"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="431.152661" xlink:href="#me6acc25a23" y="229.769811"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="431.410243" xlink:href="#me6acc25a23" y="228.148263"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="431.608531" xlink:href="#me6acc25a23" y="226.51545"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="431.747646" xlink:href="#me6acc25a23" y="224.871661"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="431.827843" xlink:href="#me6acc25a23" y="223.217181"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="431.849508" xlink:href="#me6acc25a23" y="221.552286"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="431.81315" xlink:href="#me6acc25a23" y="219.877252"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="431.719405" xlink:href="#me6acc25a23" y="218.192354"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="431.569021" xlink:href="#me6acc25a23" y="216.497862"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="431.362854" xlink:href="#me6acc25a23" y="214.794048"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="431.101849" xlink:href="#me6acc25a23" y="213.081182"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="430.787035" xlink:href="#me6acc25a23" y="211.359538"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="430.419503" xlink:href="#me6acc25a23" y="209.629393"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="430.000393" xlink:href="#me6acc25a23" y="207.891028"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="429.530879" xlink:href="#me6acc25a23" y="206.144731"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="429.01215" xlink:href="#me6acc25a23" y="204.390798"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="428.445396" xlink:href="#me6acc25a23" y="202.629536"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="427.831795" xlink:href="#me6acc25a23" y="200.861263"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="427.172497" xlink:href="#me6acc25a23" y="199.086307"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="426.468613" xlink:href="#me6acc25a23" y="197.305012"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="425.721207" xlink:href="#me6acc25a23" y="195.517735"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="424.931287" xlink:href="#me6acc25a23" y="193.724847"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="424.099799" xlink:href="#me6acc25a23" y="191.926732"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="423.227627" xlink:href="#me6acc25a23" y="190.123789"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="422.315587" xlink:href="#me6acc25a23" y="188.316428"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="421.364431" xlink:href="#me6acc25a23" y="186.505073"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="420.374849" xlink:href="#me6acc25a23" y="184.690159"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="419.347467" xlink:href="#me6acc25a23" y="182.872128"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="418.282858" xlink:href="#me6acc25a23" y="181.051435"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="417.181542" xlink:href="#me6acc25a23" y="179.228541"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="416.044059" xlink:href="#me6acc25a23" y="177.403921"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="414.870956" xlink:href="#me6acc25a23" y="175.578058"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="413.662738" xlink:href="#me6acc25a23" y="173.751444"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="412.419912" xlink:href="#me6acc25a23" y="171.924578"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="411.142964" xlink:href="#me6acc25a23" y="170.097965"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="409.832358" xlink:href="#me6acc25a23" y="168.272115"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="408.488538" xlink:href="#me6acc25a23" y="166.44754"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="407.111927" xlink:href="#me6acc25a23" y="164.624759"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="405.702938" xlink:href="#me6acc25a23" y="162.804289"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="404.261971" xlink:href="#me6acc25a23" y="160.986653"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="402.789428" xlink:href="#me6acc25a23" y="159.172372"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="401.285713" xlink:href="#me6acc25a23" y="157.361968"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="399.75124" xlink:href="#me6acc25a23" y="155.555963"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="398.186443" xlink:href="#me6acc25a23" y="153.754877"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="396.591779" xlink:href="#me6acc25a23" y="151.959229"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="394.967735" xlink:href="#me6acc25a23" y="150.169534"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="393.314834" xlink:href="#me6acc25a23" y="148.386301"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="391.633638" xlink:href="#me6acc25a23" y="146.610037"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="389.924753" xlink:href="#me6acc25a23" y="144.841241"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="388.18883" xlink:href="#me6acc25a23" y="143.080403"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="386.426569" xlink:href="#me6acc25a23" y="141.328007"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="384.638721" xlink:href="#me6acc25a23" y="139.584525"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="382.826084" xlink:href="#me6acc25a23" y="137.850423"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="380.989508" xlink:href="#me6acc25a23" y="136.12615"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="379.129892" xlink:href="#me6acc25a23" y="134.412147"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="377.248182" xlink:href="#me6acc25a23" y="132.70884"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="375.34537" xlink:href="#me6acc25a23" y="131.016643"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="373.422495" xlink:href="#me6acc25a23" y="129.335956"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="371.480635" xlink:href="#me6acc25a23" y="127.667161"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="369.520913" xlink:href="#me6acc25a23" y="126.010629"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="367.544488" xlink:href="#me6acc25a23" y="124.366712"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="365.552527" xlink:href="#me6acc25a23" y="122.735755"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="363.54619" xlink:href="#me6acc25a23" y="121.118097"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="361.526641" xlink:href="#me6acc25a23" y="119.514066"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="359.495025" xlink:href="#me6acc25a23" y="117.923985"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="357.452464" xlink:href="#me6acc25a23" y="116.348168"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="355.400049" xlink:href="#me6acc25a23" y="114.786925"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="353.338841" xlink:href="#me6acc25a23" y="113.240559"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="351.269854" xlink:href="#me6acc25a23" y="111.709368"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="349.194063" xlink:href="#me6acc25a23" y="110.193644"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="347.112392" xlink:href="#me6acc25a23" y="108.69367"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="345.025716" xlink:href="#me6acc25a23" y="107.209728"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="342.93486" xlink:href="#me6acc25a23" y="105.742088"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="340.8406" xlink:href="#me6acc25a23" y="104.291018"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="338.743663" xlink:href="#me6acc25a23" y="102.856774"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="336.644731" xlink:href="#me6acc25a23" y="101.439608"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="334.544444" xlink:href="#me6acc25a23" y="100.039761"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="332.443403" xlink:href="#me6acc25a23" y="98.657466"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="330.342177" xlink:href="#me6acc25a23" y="97.292945"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="328.241306" xlink:href="#me6acc25a23" y="95.946411"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="326.141306" xlink:href="#me6acc25a23" y="94.618065"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="324.042675" xlink:href="#me6acc25a23" y="93.308095"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="321.945897" xlink:href="#me6acc25a23" y="92.016678"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="319.851444" xlink:href="#me6acc25a23" y="90.743978"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="317.759785" xlink:href="#me6acc25a23" y="89.490144"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="315.671384" xlink:href="#me6acc25a23" y="88.255311"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="313.586707" xlink:href="#me6acc25a23" y="87.039599"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="311.506218" xlink:href="#me6acc25a23" y="85.843112"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="309.430387" xlink:href="#me6acc25a23" y="84.665939"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="307.359685" xlink:href="#me6acc25a23" y="83.508153"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="305.294585" xlink:href="#me6acc25a23" y="82.369809"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="303.235562" xlink:href="#me6acc25a23" y="81.250946"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="301.183091" xlink:href="#me6acc25a23" y="80.151584"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="299.137646" xlink:href="#me6acc25a23" y="79.071728"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="297.099693" xlink:href="#me6acc25a23" y="78.011364"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="295.069694" xlink:href="#me6acc25a23" y="76.970469"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="293.048101" xlink:href="#me6acc25a23" y="75.949"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="291.035353" xlink:href="#me6acc25a23" y="74.946904"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="289.031875" xlink:href="#me6acc25a23" y="73.964111"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="287.038071" xlink:href="#me6acc25a23" y="73.00054"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="285.054326" xlink:href="#me6acc25a23" y="72.056094"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="283.080997" xlink:href="#me6acc25a23" y="71.130665"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="281.118415" xlink:href="#me6acc25a23" y="70.224131"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="279.166881" xlink:href="#me6acc25a23" y="69.336356"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="277.226666" xlink:href="#me6acc25a23" y="68.467191"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="275.298016" xlink:href="#me6acc25a23" y="67.616475"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="273.381144" xlink:href="#me6acc25a23" y="66.784031"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="271.476238" xlink:href="#me6acc25a23" y="65.969673"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="269.583452" xlink:href="#me6acc25a23" y="65.173197"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="267.702913" xlink:href="#me6acc25a23" y="64.39439"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="265.834717" xlink:href="#me6acc25a23" y="63.633025"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="263.978929" xlink:href="#me6acc25a23" y="62.888864"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="262.135583" xlink:href="#me6acc25a23" y="62.161657"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="260.304682" xlink:href="#me6acc25a23" y="61.451143"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="258.486197" xlink:href="#me6acc25a23" y="60.75705"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="256.680068" xlink:href="#me6acc25a23" y="60.079096"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="254.886204" xlink:href="#me6acc25a23" y="59.416992"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="253.104482" xlink:href="#me6acc25a23" y="58.770439"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="251.334749" xlink:href="#me6acc25a23" y="58.139128"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="249.576821" xlink:href="#me6acc25a23" y="57.522745"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="247.830485" xlink:href="#me6acc25a23" y="56.920971"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="246.095498" xlink:href="#me6acc25a23" y="56.333476"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="244.371589" xlink:href="#me6acc25a23" y="55.759929"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="242.658459" xlink:href="#me6acc25a23" y="55.199993"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="240.955782" xlink:href="#me6acc25a23" y="54.653327"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="239.263205" xlink:href="#me6acc25a23" y="54.119586"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="237.580352" xlink:href="#me6acc25a23" y="53.598422"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="235.90682" xlink:href="#me6acc25a23" y="53.089485"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="234.242185" xlink:href="#me6acc25a23" y="52.592425"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="232.585997" xlink:href="#me6acc25a23" y="52.106886"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="230.937788" xlink:href="#me6acc25a23" y="51.632517"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="229.297068" xlink:href="#me6acc25a23" y="51.168961"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="227.663327" xlink:href="#me6acc25a23" y="50.715865"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="226.036036" xlink:href="#me6acc25a23" y="50.272874"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="224.414651" xlink:href="#me6acc25a23" y="49.839635"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="222.798608" xlink:href="#me6acc25a23" y="49.415795"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="221.187329" xlink:href="#me6acc25a23" y="49.001003"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="219.580221" xlink:href="#me6acc25a23" y="48.59491"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="217.976677" xlink:href="#me6acc25a23" y="48.197168"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="216.376077" xlink:href="#me6acc25a23" y="47.807432"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="214.777789" xlink:href="#me6acc25a23" y="47.425359"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="213.181171" xlink:href="#me6acc25a23" y="47.050609"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="211.58557" xlink:href="#me6acc25a23" y="46.682847"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="209.990325" xlink:href="#me6acc25a23" y="46.321737"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="208.394766" xlink:href="#me6acc25a23" y="45.966952"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="206.798217" xlink:href="#me6acc25a23" y="45.618166"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="205.199994" xlink:href="#me6acc25a23" y="45.275058"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="203.599411" xlink:href="#me6acc25a23" y="44.937312"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="201.995776" xlink:href="#me6acc25a23" y="44.604616"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="200.388395" xlink:href="#me6acc25a23" y="44.276665"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="198.776571" xlink:href="#me6acc25a23" y="43.953157"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="197.159608" xlink:href="#me6acc25a23" y="43.633799"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="195.53681" xlink:href="#me6acc25a23" y="43.318302"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="193.90748" xlink:href="#me6acc25a23" y="43.006385"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="192.270927" xlink:href="#me6acc25a23" y="42.697773"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="190.626461" xlink:href="#me6acc25a23" y="42.392199"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="188.973399" xlink:href="#me6acc25a23" y="42.089402"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="187.31106" xlink:href="#me6acc25a23" y="41.789131"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="185.638773" xlink:href="#me6acc25a23" y="41.491141"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="183.955872" xlink:href="#me6acc25a23" y="41.195197"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="182.261702" xlink:href="#me6acc25a23" y="40.901073"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="180.555614" xlink:href="#me6acc25a23" y="40.60855"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="178.836972" xlink:href="#me6acc25a23" y="40.31742"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="177.105147" xlink:href="#me6acc25a23" y="40.027485"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="175.359523" xlink:href="#me6acc25a23" y="39.738555"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="173.599497" xlink:href="#me6acc25a23" y="39.450451"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="171.824474" xlink:href="#me6acc25a23" y="39.163004"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="170.033874" xlink:href="#me6acc25a23" y="38.876056"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="168.227129" xlink:href="#me6acc25a23" y="38.589458"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="166.403682" xlink:href="#me6acc25a23" y="38.303072"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="164.562989" xlink:href="#me6acc25a23" y="38.016771"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="162.704518" xlink:href="#me6acc25a23" y="37.730438"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="160.827751" xlink:href="#me6acc25a23" y="37.443966"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="158.932179" xlink:href="#me6acc25a23" y="37.157261"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="157.017307" xlink:href="#me6acc25a23" y="36.870236"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="155.08265" xlink:href="#me6acc25a23" y="36.582815"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="153.127734" xlink:href="#me6acc25a23" y="36.294934"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="151.152098" xlink:href="#me6acc25a23" y="36.006536"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="149.155289" xlink:href="#me6acc25a23" y="35.717574"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="147.136866" xlink:href="#me6acc25a23" y="35.428013"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="145.096394" xlink:href="#me6acc25a23" y="35.137822"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="143.033444" xlink:href="#me6acc25a23" y="34.846981"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="140.947593" xlink:href="#me6acc25a23" y="34.555477"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="138.838424" xlink:href="#me6acc25a23" y="34.263303"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="136.705525" xlink:href="#me6acc25a23" y="33.97046"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="134.548487" xlink:href="#me6acc25a23" y="33.676955"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="132.366908" xlink:href="#me6acc25a23" y="33.382799"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="130.160389" xlink:href="#me6acc25a23" y="33.088009"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="127.928536" xlink:href="#me6acc25a23" y="32.792606"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="125.670961" xlink:href="#me6acc25a23" y="32.496617"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="123.387279" xlink:href="#me6acc25a23" y="32.200068"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="121.077114" xlink:href="#me6acc25a23" y="31.902992"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="118.740095" xlink:href="#me6acc25a23" y="31.60542"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="116.375859" xlink:href="#me6acc25a23" y="31.307388"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="113.984053" xlink:href="#me6acc25a23" y="31.008932"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="111.564334" xlink:href="#me6acc25a23" y="30.710085"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="109.116369" xlink:href="#me6acc25a23" y="30.410886"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="106.639839" xlink:href="#me6acc25a23" y="30.111367"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="104.134442" xlink:href="#me6acc25a23" y="29.811562"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="101.599892" xlink:href="#me6acc25a23" y="29.511504"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="99.03592" xlink:href="#me6acc25a23" y="29.211223"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="96.442283" xlink:href="#me6acc25a23" y="28.910744"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="93.818759" xlink:href="#me6acc25a23" y="28.610094"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="91.165153" xlink:href="#me6acc25a23" y="28.309293"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="88.481299" xlink:href="#me6acc25a23" y="28.008359"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="85.767063" xlink:href="#me6acc25a23" y="27.707307"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="83.022345" xlink:href="#me6acc25a23" y="27.406149"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="80.247082" xlink:href="#me6acc25a23" y="27.104891"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="77.44125" xlink:href="#me6acc25a23" y="26.803537"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="74.604866" xlink:href="#me6acc25a23" y="26.502087"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="71.737992" xlink:href="#me6acc25a23" y="26.200536"/>
+     <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="68.840733" xlink:href="#me6acc25a23" y="25.898877"/>
+    </g>
+   </g>
+   <g id="line2d_16">
+    <path clip-path="url(#p444e95376c)" d="M 369.97072 288.76125 
+L 377.205106 285.082533 
+L 384.166542 281.288428 
+L 389.888307 277.932942 
+L 395.359297 274.47259 
+L 400.55601 270.899227 
+L 404.659496 267.829861 
+L 408.540586 264.673428 
+L 412.183298 261.42706 
+L 415.570573 258.088714 
+L 418.68442 254.657289 
+L 420.966201 251.845053 
+L 423.051727 248.973643 
+L 424.931948 246.043942 
+L 426.598518 243.05723 
+L 428.044113 240.015121 
+L 429.262698 236.919506 
+L 430.249657 233.772472 
+L 431.00166 230.57627 
+L 431.51683 227.333244 
+L 431.795128 224.045736 
+L 431.838582 220.716014 
+L 431.651273 217.346285 
+L 431.239165 213.938723 
+L 430.609797 210.495504 
+L 429.771856 207.018845 
+L 428.73468 203.511056 
+L 427.172457 199.086299 
+L 425.331445 194.62196 
+L 423.22756 190.123778 
+L 420.87433 185.598021 
+L 418.282781 181.05142 
+L 415.461864 176.491098 
+L 411.785594 171.01119 
+L 407.804219 165.535872 
+L 403.529534 160.079038 
+L 398.972516 154.654748 
+L 394.14477 149.27705 
+L 389.060039 143.959766 
+L 383.735354 138.716241 
+L 378.191634 133.559096 
+L 372.453755 128.500013 
+L 365.552391 122.735722 
+L 358.474888 117.134241 
+L 351.269682 111.709337 
+L 343.980576 106.473823 
+L 335.594526 100.737476 
+L 327.190971 95.279924 
+L 318.805041 90.114667 
+L 310.467493 85.25208 
+L 302.208273 80.698801 
+L 294.057605 76.457286 
+L 286.044694 72.52591 
+L 278.195109 68.899435 
+L 269.583211 65.173176 
+L 261.218329 61.804309 
+L 253.104225 58.770419 
+L 245.231913 56.044961 
+L 236.742175 53.342428 
+L 228.479075 50.941109 
+L 219.579926 48.594891 
+L 210.787636 46.501462 
+L 201.192274 44.440047 
+L 190.626125 42.39218 
+L 177.972401 40.172296 
+L 162.704169 37.730419 
+L 145.096047 35.137803 
+L 125.670622 32.496599 
+L 105.390445 29.961487 
+L 84.398221 27.55674 
+L 68.840455 25.898885 
+L 68.840455 25.898885 
+" style="fill:none;stroke:#8c564b;stroke-dasharray:1.5,4.5,1.5;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    <defs>
+     <path d="M -3 3 
+L 3 -3 
+M -3 -3 
+L 3 3 
+" id="m4f5604d9a2" style="stroke:#8c564b;stroke-opacity:0.2;"/>
+    </defs>
+    <g clip-path="url(#p444e95376c)">
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="369.97072" xlink:href="#m4f5604d9a2" y="288.76125"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="371.019513" xlink:href="#m4f5604d9a2" y="288.24218"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="372.063383" xlink:href="#m4f5604d9a2" y="287.721036"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="373.102222" xlink:href="#m4f5604d9a2" y="287.197769"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="374.135921" xlink:href="#m4f5604d9a2" y="286.672333"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="375.164374" xlink:href="#m4f5604d9a2" y="286.144679"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="376.187471" xlink:href="#m4f5604d9a2" y="285.614761"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="377.205106" xlink:href="#m4f5604d9a2" y="285.082533"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="378.21717" xlink:href="#m4f5604d9a2" y="284.547949"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="379.223555" xlink:href="#m4f5604d9a2" y="284.010962"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="380.224154" xlink:href="#m4f5604d9a2" y="283.471528"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="381.21886" xlink:href="#m4f5604d9a2" y="282.929602"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="382.207565" xlink:href="#m4f5604d9a2" y="282.385139"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="383.190161" xlink:href="#m4f5604d9a2" y="281.838095"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="384.166542" xlink:href="#m4f5604d9a2" y="281.288428"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="385.1366" xlink:href="#m4f5604d9a2" y="280.736093"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="386.100229" xlink:href="#m4f5604d9a2" y="280.181049"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="387.057321" xlink:href="#m4f5604d9a2" y="279.623253"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="388.007769" xlink:href="#m4f5604d9a2" y="279.062664"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="388.951467" xlink:href="#m4f5604d9a2" y="278.49924"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="389.888307" xlink:href="#m4f5604d9a2" y="277.932942"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="390.818181" xlink:href="#m4f5604d9a2" y="277.363729"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="391.740983" xlink:href="#m4f5604d9a2" y="276.791562"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="392.656603" xlink:href="#m4f5604d9a2" y="276.216402"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="393.564935" xlink:href="#m4f5604d9a2" y="275.638212"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="394.46587" xlink:href="#m4f5604d9a2" y="275.056953"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="395.359297" xlink:href="#m4f5604d9a2" y="274.47259"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="396.245108" xlink:href="#m4f5604d9a2" y="273.885084"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="397.123191" xlink:href="#m4f5604d9a2" y="273.294403"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="397.993436" xlink:href="#m4f5604d9a2" y="272.70051"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="398.85573" xlink:href="#m4f5604d9a2" y="272.103371"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="399.709959" xlink:href="#m4f5604d9a2" y="271.502954"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="400.55601" xlink:href="#m4f5604d9a2" y="270.899227"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="401.393767" xlink:href="#m4f5604d9a2" y="270.292157"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="402.223113" xlink:href="#m4f5604d9a2" y="269.681714"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="403.04393" xlink:href="#m4f5604d9a2" y="269.06787"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="403.856098" xlink:href="#m4f5604d9a2" y="268.450594"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="404.659496" xlink:href="#m4f5604d9a2" y="267.829861"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="405.454002" xlink:href="#m4f5604d9a2" y="267.205642"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="406.239491" xlink:href="#m4f5604d9a2" y="266.577913"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="407.015836" xlink:href="#m4f5604d9a2" y="265.946649"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="407.782911" xlink:href="#m4f5604d9a2" y="265.311828"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="408.540586" xlink:href="#m4f5604d9a2" y="264.673428"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="409.288729" xlink:href="#m4f5604d9a2" y="264.031427"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="410.027208" xlink:href="#m4f5604d9a2" y="263.385807"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="410.755887" xlink:href="#m4f5604d9a2" y="262.73655"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="411.47463" xlink:href="#m4f5604d9a2" y="262.08364"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="412.183298" xlink:href="#m4f5604d9a2" y="261.42706"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="412.881752" xlink:href="#m4f5604d9a2" y="260.766799"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="413.56985" xlink:href="#m4f5604d9a2" y="260.102843"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="414.24745" xlink:href="#m4f5604d9a2" y="259.435183"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="414.914405" xlink:href="#m4f5604d9a2" y="258.763809"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="415.570573" xlink:href="#m4f5604d9a2" y="258.088714"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="416.215805" xlink:href="#m4f5604d9a2" y="257.409893"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="416.849954" xlink:href="#m4f5604d9a2" y="256.727341"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="417.472872" xlink:href="#m4f5604d9a2" y="256.041056"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="418.08441" xlink:href="#m4f5604d9a2" y="255.351039"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="418.68442" xlink:href="#m4f5604d9a2" y="254.657289"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="419.272753" xlink:href="#m4f5604d9a2" y="253.95981"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="419.849259" xlink:href="#m4f5604d9a2" y="253.258607"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="420.413791" xlink:href="#m4f5604d9a2" y="252.553685"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="420.966201" xlink:href="#m4f5604d9a2" y="251.845053"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="421.506344" xlink:href="#m4f5604d9a2" y="251.132721"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="422.034074" xlink:href="#m4f5604d9a2" y="250.416699"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="422.549249" xlink:href="#m4f5604d9a2" y="249.697002"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="423.051727" xlink:href="#m4f5604d9a2" y="248.973643"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="423.54137" xlink:href="#m4f5604d9a2" y="248.246639"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="424.018043" xlink:href="#m4f5604d9a2" y="247.516008"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="424.481612" xlink:href="#m4f5604d9a2" y="246.781769"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="424.931948" xlink:href="#m4f5604d9a2" y="246.043942"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="425.368926" xlink:href="#m4f5604d9a2" y="245.302551"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="425.792425" xlink:href="#m4f5604d9a2" y="244.557619"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="426.202326" xlink:href="#m4f5604d9a2" y="243.809169"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="426.598518" xlink:href="#m4f5604d9a2" y="243.05723"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="426.980892" xlink:href="#m4f5604d9a2" y="242.301826"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="427.349347" xlink:href="#m4f5604d9a2" y="241.542987"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="427.703784" xlink:href="#m4f5604d9a2" y="240.780742"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="428.044113" xlink:href="#m4f5604d9a2" y="240.015121"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="428.370246" xlink:href="#m4f5604d9a2" y="239.246155"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="428.682103" xlink:href="#m4f5604d9a2" y="238.473876"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="428.97961" xlink:href="#m4f5604d9a2" y="237.698315"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="429.262698" xlink:href="#m4f5604d9a2" y="236.919506"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="429.531304" xlink:href="#m4f5604d9a2" y="236.137483"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="429.785368" xlink:href="#m4f5604d9a2" y="235.352279"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="430.024836" xlink:href="#m4f5604d9a2" y="234.563931"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="430.249657" xlink:href="#m4f5604d9a2" y="233.772472"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="430.459786" xlink:href="#m4f5604d9a2" y="232.977941"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="430.655185" xlink:href="#m4f5604d9a2" y="232.180372"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="430.835818" xlink:href="#m4f5604d9a2" y="231.379803"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.00166" xlink:href="#m4f5604d9a2" y="230.57627"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.152691" xlink:href="#m4f5604d9a2" y="229.769811"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.288898" xlink:href="#m4f5604d9a2" y="228.960463"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.410277" xlink:href="#m4f5604d9a2" y="228.148262"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.51683" xlink:href="#m4f5604d9a2" y="227.333244"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.608568" xlink:href="#m4f5604d9a2" y="226.515447"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.685511" xlink:href="#m4f5604d9a2" y="225.694906"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.747685" xlink:href="#m4f5604d9a2" y="224.871657"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.795128" xlink:href="#m4f5604d9a2" y="224.045736"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.827883" xlink:href="#m4f5604d9a2" y="223.217176"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.846002" xlink:href="#m4f5604d9a2" y="222.386013"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.849545" xlink:href="#m4f5604d9a2" y="221.552281"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.838582" xlink:href="#m4f5604d9a2" y="220.716014"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.813186" xlink:href="#m4f5604d9a2" y="219.877247"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.773441" xlink:href="#m4f5604d9a2" y="219.036014"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.719438" xlink:href="#m4f5604d9a2" y="218.192349"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.651273" xlink:href="#m4f5604d9a2" y="217.346285"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.56905" xlink:href="#m4f5604d9a2" y="216.497856"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.47288" xlink:href="#m4f5604d9a2" y="215.647097"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.362878" xlink:href="#m4f5604d9a2" y="214.794041"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.239165" xlink:href="#m4f5604d9a2" y="213.938723"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="431.101867" xlink:href="#m4f5604d9a2" y="213.081175"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="430.951117" xlink:href="#m4f5604d9a2" y="212.221433"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="430.787047" xlink:href="#m4f5604d9a2" y="211.359531"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="430.609797" xlink:href="#m4f5604d9a2" y="210.495504"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="430.419507" xlink:href="#m4f5604d9a2" y="209.629386"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="430.216323" xlink:href="#m4f5604d9a2" y="208.761213"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="430.00039" xlink:href="#m4f5604d9a2" y="207.891021"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="429.771856" xlink:href="#m4f5604d9a2" y="207.018845"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="429.530868" xlink:href="#m4f5604d9a2" y="206.144723"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="429.277577" xlink:href="#m4f5604d9a2" y="205.268693"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="429.012131" xlink:href="#m4f5604d9a2" y="204.390791"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="428.73468" xlink:href="#m4f5604d9a2" y="203.511056"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="428.44537" xlink:href="#m4f5604d9a2" y="202.629529"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="428.14435" xlink:href="#m4f5604d9a2" y="201.746248"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="427.831762" xlink:href="#m4f5604d9a2" y="200.861255"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="427.507751" xlink:href="#m4f5604d9a2" y="199.974591"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="427.172457" xlink:href="#m4f5604d9a2" y="199.086299"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="426.826017" xlink:href="#m4f5604d9a2" y="198.196422"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="426.468567" xlink:href="#m4f5604d9a2" y="197.305004"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="426.100236" xlink:href="#m4f5604d9a2" y="196.41209"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="425.721154" xlink:href="#m4f5604d9a2" y="195.517727"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="425.331445" xlink:href="#m4f5604d9a2" y="194.62196"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="424.931229" xlink:href="#m4f5604d9a2" y="193.724838"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="424.520622" xlink:href="#m4f5604d9a2" y="192.826409"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="424.099736" xlink:href="#m4f5604d9a2" y="191.926722"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="423.668681" xlink:href="#m4f5604d9a2" y="191.025828"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="423.22756" xlink:href="#m4f5604d9a2" y="190.123778"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="422.776474" xlink:href="#m4f5604d9a2" y="189.220623"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="422.315517" xlink:href="#m4f5604d9a2" y="188.316417"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="421.844783" xlink:href="#m4f5604d9a2" y="187.411211"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="421.364359" xlink:href="#m4f5604d9a2" y="186.505061"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="420.87433" xlink:href="#m4f5604d9a2" y="185.598021"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="420.374775" xlink:href="#m4f5604d9a2" y="184.690145"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="419.865771" xlink:href="#m4f5604d9a2" y="183.781491"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="419.347392" xlink:href="#m4f5604d9a2" y="182.872114"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="418.819706" xlink:href="#m4f5604d9a2" y="181.962071"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="418.282781" xlink:href="#m4f5604d9a2" y="181.05142"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="417.73668" xlink:href="#m4f5604d9a2" y="180.140219"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="417.181472" xlink:href="#m4f5604d9a2" y="179.228526"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="416.617223" xlink:href="#m4f5604d9a2" y="178.316401"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="416.043998" xlink:href="#m4f5604d9a2" y="177.403905"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="415.461864" xlink:href="#m4f5604d9a2" y="176.491098"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="414.870888" xlink:href="#m4f5604d9a2" y="175.578042"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="414.271133" xlink:href="#m4f5604d9a2" y="174.664797"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="413.662664" xlink:href="#m4f5604d9a2" y="173.751427"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="413.045544" xlink:href="#m4f5604d9a2" y="172.837994"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="412.419834" xlink:href="#m4f5604d9a2" y="171.92456"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="411.785594" xlink:href="#m4f5604d9a2" y="171.01119"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="411.142882" xlink:href="#m4f5604d9a2" y="170.097946"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="410.491757" xlink:href="#m4f5604d9a2" y="169.184893"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="409.832274" xlink:href="#m4f5604d9a2" y="168.272095"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="409.164488" xlink:href="#m4f5604d9a2" y="167.359616"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="408.488452" xlink:href="#m4f5604d9a2" y="166.44752"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="407.804219" xlink:href="#m4f5604d9a2" y="165.535872"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="407.11184" xlink:href="#m4f5604d9a2" y="164.624738"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="406.411367" xlink:href="#m4f5604d9a2" y="163.714181"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="405.70285" xlink:href="#m4f5604d9a2" y="162.804268"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="404.986339" xlink:href="#m4f5604d9a2" y="161.895062"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="404.261883" xlink:href="#m4f5604d9a2" y="160.986631"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="403.529534" xlink:href="#m4f5604d9a2" y="160.079038"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="402.78934" xlink:href="#m4f5604d9a2" y="159.172349"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="402.041353" xlink:href="#m4f5604d9a2" y="158.266629"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="401.285625" xlink:href="#m4f5604d9a2" y="157.361944"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="400.522206" xlink:href="#m4f5604d9a2" y="156.458359"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="399.751152" xlink:href="#m4f5604d9a2" y="155.555938"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="398.972516" xlink:href="#m4f5604d9a2" y="154.654748"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="398.186355" xlink:href="#m4f5604d9a2" y="153.754852"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="397.392727" xlink:href="#m4f5604d9a2" y="152.856315"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="396.591691" xlink:href="#m4f5604d9a2" y="151.959203"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="395.78331" xlink:href="#m4f5604d9a2" y="151.063579"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="394.967648" xlink:href="#m4f5604d9a2" y="150.169507"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="394.14477" xlink:href="#m4f5604d9a2" y="149.27705"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="393.314747" xlink:href="#m4f5604d9a2" y="148.386273"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="392.477649" xlink:href="#m4f5604d9a2" y="147.497239"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="391.63355" xlink:href="#m4f5604d9a2" y="146.610008"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="390.782529" xlink:href="#m4f5604d9a2" y="145.724645"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="389.924664" xlink:href="#m4f5604d9a2" y="144.841211"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="389.060039" xlink:href="#m4f5604d9a2" y="143.959766"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="388.188739" xlink:href="#m4f5604d9a2" y="143.080372"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="387.310855" xlink:href="#m4f5604d9a2" y="142.203089"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="386.426477" xlink:href="#m4f5604d9a2" y="141.327975"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="385.535702" xlink:href="#m4f5604d9a2" y="140.455091"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="384.638627" xlink:href="#m4f5604d9a2" y="139.584493"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="383.735354" xlink:href="#m4f5604d9a2" y="138.716241"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="382.825987" xlink:href="#m4f5604d9a2" y="137.85039"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="381.910636" xlink:href="#m4f5604d9a2" y="136.986997"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="380.989409" xlink:href="#m4f5604d9a2" y="136.126116"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="380.062422" xlink:href="#m4f5604d9a2" y="135.267804"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="379.12979" xlink:href="#m4f5604d9a2" y="134.412113"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="378.191634" xlink:href="#m4f5604d9a2" y="133.559096"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="377.248077" xlink:href="#m4f5604d9a2" y="132.708806"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="376.299243" xlink:href="#m4f5604d9a2" y="131.861293"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="375.345262" xlink:href="#m4f5604d9a2" y="131.016608"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="374.386264" xlink:href="#m4f5604d9a2" y="130.174801"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="373.422383" xlink:href="#m4f5604d9a2" y="129.33592"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="372.453755" xlink:href="#m4f5604d9a2" y="128.500013"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="371.48052" xlink:href="#m4f5604d9a2" y="127.667125"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="370.502818" xlink:href="#m4f5604d9a2" y="126.837304"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="369.520794" xlink:href="#m4f5604d9a2" y="126.010593"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="368.534594" xlink:href="#m4f5604d9a2" y="125.187036"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="367.544362" xlink:href="#m4f5604d9a2" y="124.366677"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="366.550246" xlink:href="#m4f5604d9a2" y="123.549558"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="365.552391" xlink:href="#m4f5604d9a2" y="122.735722"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="364.550943" xlink:href="#m4f5604d9a2" y="121.92521"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="363.546048" xlink:href="#m4f5604d9a2" y="121.118064"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="362.537851" xlink:href="#m4f5604d9a2" y="120.314325"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="361.526494" xlink:href="#m4f5604d9a2" y="119.514033"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="360.512121" xlink:href="#m4f5604d9a2" y="118.717229"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="359.494873" xlink:href="#m4f5604d9a2" y="117.923952"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="358.474888" xlink:href="#m4f5604d9a2" y="117.134241"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="357.452306" xlink:href="#m4f5604d9a2" y="116.348135"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="356.42726" xlink:href="#m4f5604d9a2" y="115.565673"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="355.399886" xlink:href="#m4f5604d9a2" y="114.786892"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="354.370314" xlink:href="#m4f5604d9a2" y="114.011831"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="353.338672" xlink:href="#m4f5604d9a2" y="113.240527"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="352.305087" xlink:href="#m4f5604d9a2" y="112.473017"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="351.269682" xlink:href="#m4f5604d9a2" y="111.709337"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="350.232575" xlink:href="#m4f5604d9a2" y="110.949523"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="349.193886" xlink:href="#m4f5604d9a2" y="110.193613"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="348.153728" xlink:href="#m4f5604d9a2" y="109.44164"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="347.112211" xlink:href="#m4f5604d9a2" y="108.69364"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="346.069444" xlink:href="#m4f5604d9a2" y="107.949647"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="345.025532" xlink:href="#m4f5604d9a2" y="107.209697"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="343.980576" xlink:href="#m4f5604d9a2" y="106.473823"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="342.934674" xlink:href="#m4f5604d9a2" y="105.742058"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="341.887922" xlink:href="#m4f5604d9a2" y="105.014436"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="340.840412" xlink:href="#m4f5604d9a2" y="104.290988"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="339.792233" xlink:href="#m4f5604d9a2" y="103.571747"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="338.743473" xlink:href="#m4f5604d9a2" y="102.856745"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="337.694215" xlink:href="#m4f5604d9a2" y="102.146012"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="336.644539" xlink:href="#m4f5604d9a2" y="101.439579"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="335.594526" xlink:href="#m4f5604d9a2" y="100.737476"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="334.544251" xlink:href="#m4f5604d9a2" y="100.039732"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="333.493788" xlink:href="#m4f5604d9a2" y="99.346376"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="332.443209" xlink:href="#m4f5604d9a2" y="98.657437"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="331.392585" xlink:href="#m4f5604d9a2" y="97.972941"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="330.341983" xlink:href="#m4f5604d9a2" y="97.292916"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="329.29147" xlink:href="#m4f5604d9a2" y="96.617388"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="328.241112" xlink:href="#m4f5604d9a2" y="95.946383"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="327.190971" xlink:href="#m4f5604d9a2" y="95.279924"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="326.141112" xlink:href="#m4f5604d9a2" y="94.618036"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="325.091595" xlink:href="#m4f5604d9a2" y="93.960743"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="324.042481" xlink:href="#m4f5604d9a2" y="93.308067"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="322.99383" xlink:href="#m4f5604d9a2" y="92.660029"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="321.945702" xlink:href="#m4f5604d9a2" y="92.016651"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="320.898155" xlink:href="#m4f5604d9a2" y="91.377952"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="319.851249" xlink:href="#m4f5604d9a2" y="90.743951"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="318.805041" xlink:href="#m4f5604d9a2" y="90.114667"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="317.759589" xlink:href="#m4f5604d9a2" y="89.490117"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="316.714953" xlink:href="#m4f5604d9a2" y="88.870317"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="315.671188" xlink:href="#m4f5604d9a2" y="88.255284"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="314.628355" xlink:href="#m4f5604d9a2" y="87.645031"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="313.58651" xlink:href="#m4f5604d9a2" y="87.039572"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="312.545713" xlink:href="#m4f5604d9a2" y="86.438919"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="311.506021" xlink:href="#m4f5604d9a2" y="85.843085"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="310.467493" xlink:href="#m4f5604d9a2" y="85.25208"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="309.430188" xlink:href="#m4f5604d9a2" y="84.665913"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="308.394166" xlink:href="#m4f5604d9a2" y="84.084593"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="307.359484" xlink:href="#m4f5604d9a2" y="83.508127"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="306.326204" xlink:href="#m4f5604d9a2" y="82.936522"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="305.294383" xlink:href="#m4f5604d9a2" y="82.369783"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="304.264081" xlink:href="#m4f5604d9a2" y="81.807915"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="303.235358" xlink:href="#m4f5604d9a2" y="81.25092"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="302.208273" xlink:href="#m4f5604d9a2" y="80.698801"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="301.182885" xlink:href="#m4f5604d9a2" y="80.151558"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="300.159254" xlink:href="#m4f5604d9a2" y="79.609193"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="299.137438" xlink:href="#m4f5604d9a2" y="79.071703"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="298.117494" xlink:href="#m4f5604d9a2" y="78.539086"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="297.099482" xlink:href="#m4f5604d9a2" y="78.01134"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="296.083459" xlink:href="#m4f5604d9a2" y="77.488462"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="295.069481" xlink:href="#m4f5604d9a2" y="76.970445"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="294.057605" xlink:href="#m4f5604d9a2" y="76.457286"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="293.047885" xlink:href="#m4f5604d9a2" y="75.948977"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="292.040378" xlink:href="#m4f5604d9a2" y="75.445511"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="291.035135" xlink:href="#m4f5604d9a2" y="74.946881"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="290.03221" xlink:href="#m4f5604d9a2" y="74.453076"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="289.031654" xlink:href="#m4f5604d9a2" y="73.964088"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="288.033517" xlink:href="#m4f5604d9a2" y="73.479906"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="287.037848" xlink:href="#m4f5604d9a2" y="73.000517"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="286.044694" xlink:href="#m4f5604d9a2" y="72.52591"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="285.0541" xlink:href="#m4f5604d9a2" y="72.056072"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="284.066111" xlink:href="#m4f5604d9a2" y="71.590988"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="283.080769" xlink:href="#m4f5604d9a2" y="71.130643"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="282.098114" xlink:href="#m4f5604d9a2" y="70.675023"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="281.118184" xlink:href="#m4f5604d9a2" y="70.224109"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="280.141017" xlink:href="#m4f5604d9a2" y="69.777886"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="279.166648" xlink:href="#m4f5604d9a2" y="69.336334"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="278.195109" xlink:href="#m4f5604d9a2" y="68.899435"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="277.226432" xlink:href="#m4f5604d9a2" y="68.467169"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="276.260646" xlink:href="#m4f5604d9a2" y="68.039516"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="275.29778" xlink:href="#m4f5604d9a2" y="67.616453"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="274.337859" xlink:href="#m4f5604d9a2" y="67.197959"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="273.380907" xlink:href="#m4f5604d9a2" y="66.78401"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="272.426946" xlink:href="#m4f5604d9a2" y="66.374582"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="271.475998" xlink:href="#m4f5604d9a2" y="65.969651"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="270.528081" xlink:href="#m4f5604d9a2" y="65.569191"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="269.583211" xlink:href="#m4f5604d9a2" y="65.173176"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="268.641403" xlink:href="#m4f5604d9a2" y="64.781577"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="267.70267" xlink:href="#m4f5604d9a2" y="64.394369"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="266.767023" xlink:href="#m4f5604d9a2" y="64.011521"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="265.834472" xlink:href="#m4f5604d9a2" y="63.633004"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="264.905024" xlink:href="#m4f5604d9a2" y="63.258789"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="263.978683" xlink:href="#m4f5604d9a2" y="62.888843"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="263.055453" xlink:href="#m4f5604d9a2" y="62.523137"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="262.135335" xlink:href="#m4f5604d9a2" y="62.161636"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="261.218329" xlink:href="#m4f5604d9a2" y="61.804309"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="260.304432" xlink:href="#m4f5604d9a2" y="61.451122"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="259.39364" xlink:href="#m4f5604d9a2" y="61.10204"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="258.485946" xlink:href="#m4f5604d9a2" y="60.757029"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="257.581341" xlink:href="#m4f5604d9a2" y="60.416053"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="256.679815" xlink:href="#m4f5604d9a2" y="60.079076"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="255.781356" xlink:href="#m4f5604d9a2" y="59.746061"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="254.885949" xlink:href="#m4f5604d9a2" y="59.416972"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="253.993578" xlink:href="#m4f5604d9a2" y="59.091771"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="253.104225" xlink:href="#m4f5604d9a2" y="58.770419"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="252.21787" xlink:href="#m4f5604d9a2" y="58.452877"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="251.33449" xlink:href="#m4f5604d9a2" y="58.139108"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="250.454063" xlink:href="#m4f5604d9a2" y="57.829071"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="249.576561" xlink:href="#m4f5604d9a2" y="57.522726"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="248.701958" xlink:href="#m4f5604d9a2" y="57.220033"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="247.830223" xlink:href="#m4f5604d9a2" y="56.920951"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="246.961327" xlink:href="#m4f5604d9a2" y="56.625439"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="246.095235" xlink:href="#m4f5604d9a2" y="56.333457"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="245.231913" xlink:href="#m4f5604d9a2" y="56.044961"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="244.371324" xlink:href="#m4f5604d9a2" y="55.75991"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="243.513431" xlink:href="#m4f5604d9a2" y="55.478262"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="242.658192" xlink:href="#m4f5604d9a2" y="55.199974"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="241.805568" xlink:href="#m4f5604d9a2" y="54.925004"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="240.955514" xlink:href="#m4f5604d9a2" y="54.653308"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="240.107985" xlink:href="#m4f5604d9a2" y="54.384843"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="239.262936" xlink:href="#m4f5604d9a2" y="54.119567"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="238.420317" xlink:href="#m4f5604d9a2" y="53.857434"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="237.580081" xlink:href="#m4f5604d9a2" y="53.598403"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="236.742175" xlink:href="#m4f5604d9a2" y="53.342428"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="235.906547" xlink:href="#m4f5604d9a2" y="53.089466"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="235.073144" xlink:href="#m4f5604d9a2" y="52.839474"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="234.241909" xlink:href="#m4f5604d9a2" y="52.592406"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="233.412787" xlink:href="#m4f5604d9a2" y="52.348218"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="232.58572" xlink:href="#m4f5604d9a2" y="52.106867"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="231.760647" xlink:href="#m4f5604d9a2" y="51.868309"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="230.937509" xlink:href="#m4f5604d9a2" y="51.632498"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="230.116243" xlink:href="#m4f5604d9a2" y="51.39939"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="229.296786" xlink:href="#m4f5604d9a2" y="51.168942"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="228.479075" xlink:href="#m4f5604d9a2" y="50.941109"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="227.663043" xlink:href="#m4f5604d9a2" y="50.715846"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="226.848624" xlink:href="#m4f5604d9a2" y="50.493109"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="226.035751" xlink:href="#m4f5604d9a2" y="50.272855"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="225.224353" xlink:href="#m4f5604d9a2" y="50.055039"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="224.414363" xlink:href="#m4f5604d9a2" y="49.839616"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="223.605708" xlink:href="#m4f5604d9a2" y="49.626543"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="222.798318" xlink:href="#m4f5604d9a2" y="49.415776"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="221.992118" xlink:href="#m4f5604d9a2" y="49.207271"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="221.187036" xlink:href="#m4f5604d9a2" y="49.000984"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="220.382997" xlink:href="#m4f5604d9a2" y="48.796872"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="219.579926" xlink:href="#m4f5604d9a2" y="48.594891"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="218.777746" xlink:href="#m4f5604d9a2" y="48.394998"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="217.976379" xlink:href="#m4f5604d9a2" y="48.197149"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="217.175749" xlink:href="#m4f5604d9a2" y="48.001302"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="216.375777" xlink:href="#m4f5604d9a2" y="47.807413"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="215.576382" xlink:href="#m4f5604d9a2" y="47.61544"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="214.777486" xlink:href="#m4f5604d9a2" y="47.42534"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="213.979008" xlink:href="#m4f5604d9a2" y="47.237071"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="213.180866" xlink:href="#m4f5604d9a2" y="47.05059"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="212.382978" xlink:href="#m4f5604d9a2" y="46.865856"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="211.585263" xlink:href="#m4f5604d9a2" y="46.682827"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="210.787636" xlink:href="#m4f5604d9a2" y="46.501462"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="209.990015" xlink:href="#m4f5604d9a2" y="46.321718"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="209.192316" xlink:href="#m4f5604d9a2" y="46.143556"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="208.394454" xlink:href="#m4f5604d9a2" y="45.966933"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="207.596344" xlink:href="#m4f5604d9a2" y="45.791811"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="206.797902" xlink:href="#m4f5604d9a2" y="45.618147"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="205.999041" xlink:href="#m4f5604d9a2" y="45.445904"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="205.199677" xlink:href="#m4f5604d9a2" y="45.275039"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="204.399722" xlink:href="#m4f5604d9a2" y="45.105516"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="203.599091" xlink:href="#m4f5604d9a2" y="44.937293"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="202.797697" xlink:href="#m4f5604d9a2" y="44.770333"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="201.995454" xlink:href="#m4f5604d9a2" y="44.604597"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="201.192274" xlink:href="#m4f5604d9a2" y="44.440047"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="200.38807" xlink:href="#m4f5604d9a2" y="44.276646"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="199.582756" xlink:href="#m4f5604d9a2" y="44.114355"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="198.776245" xlink:href="#m4f5604d9a2" y="43.953138"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="197.968448" xlink:href="#m4f5604d9a2" y="43.792959"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="197.15928" xlink:href="#m4f5604d9a2" y="43.63378"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="196.348652" xlink:href="#m4f5604d9a2" y="43.475567"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="195.536479" xlink:href="#m4f5604d9a2" y="43.318283"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="194.722673" xlink:href="#m4f5604d9a2" y="43.161895"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="193.907147" xlink:href="#m4f5604d9a2" y="43.006366"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="193.089816" xlink:href="#m4f5604d9a2" y="42.851664"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="192.270593" xlink:href="#m4f5604d9a2" y="42.697755"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="191.449391" xlink:href="#m4f5604d9a2" y="42.544604"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="190.626125" xlink:href="#m4f5604d9a2" y="42.39218"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="189.80071" xlink:href="#m4f5604d9a2" y="42.240451"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="188.973061" xlink:href="#m4f5604d9a2" y="42.089383"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="188.143092" xlink:href="#m4f5604d9a2" y="41.938947"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="187.310721" xlink:href="#m4f5604d9a2" y="41.789112"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="186.475862" xlink:href="#m4f5604d9a2" y="41.639847"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="185.638432" xlink:href="#m4f5604d9a2" y="41.491122"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="184.798349" xlink:href="#m4f5604d9a2" y="41.342909"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="183.955531" xlink:href="#m4f5604d9a2" y="41.195178"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="183.109894" xlink:href="#m4f5604d9a2" y="41.047903"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="182.261359" xlink:href="#m4f5604d9a2" y="40.901054"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="181.409845" xlink:href="#m4f5604d9a2" y="40.754605"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="180.55527" xlink:href="#m4f5604d9a2" y="40.608531"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="179.697558" xlink:href="#m4f5604d9a2" y="40.462805"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="178.836627" xlink:href="#m4f5604d9a2" y="40.317401"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="177.972401" xlink:href="#m4f5604d9a2" y="40.172296"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="177.104801" xlink:href="#m4f5604d9a2" y="40.027466"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="176.233752" xlink:href="#m4f5604d9a2" y="39.882887"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="175.359177" xlink:href="#m4f5604d9a2" y="39.738536"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="174.481001" xlink:href="#m4f5604d9a2" y="39.594392"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="173.59915" xlink:href="#m4f5604d9a2" y="39.450432"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="172.713549" xlink:href="#m4f5604d9a2" y="39.306637"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="171.824127" xlink:href="#m4f5604d9a2" y="39.162985"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="170.930809" xlink:href="#m4f5604d9a2" y="39.019458"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="170.033526" xlink:href="#m4f5604d9a2" y="38.876037"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="169.132207" xlink:href="#m4f5604d9a2" y="38.732703"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="168.226781" xlink:href="#m4f5604d9a2" y="38.589439"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="167.317179" xlink:href="#m4f5604d9a2" y="38.446227"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="166.403333" xlink:href="#m4f5604d9a2" y="38.303053"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="165.485176" xlink:href="#m4f5604d9a2" y="38.159899"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="164.56264" xlink:href="#m4f5604d9a2" y="38.016752"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="163.63566" xlink:href="#m4f5604d9a2" y="37.873596"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="162.704169" xlink:href="#m4f5604d9a2" y="37.730419"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="161.768105" xlink:href="#m4f5604d9a2" y="37.587207"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="160.827402" xlink:href="#m4f5604d9a2" y="37.443947"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="159.881998" xlink:href="#m4f5604d9a2" y="37.30063"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="158.93183" xlink:href="#m4f5604d9a2" y="37.157242"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="157.976837" xlink:href="#m4f5604d9a2" y="37.013774"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="157.016958" xlink:href="#m4f5604d9a2" y="36.870217"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="156.052133" xlink:href="#m4f5604d9a2" y="36.72656"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="155.082301" xlink:href="#m4f5604d9a2" y="36.582796"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="154.107405" xlink:href="#m4f5604d9a2" y="36.438917"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="153.127386" xlink:href="#m4f5604d9a2" y="36.294915"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="152.142187" xlink:href="#m4f5604d9a2" y="36.150783"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="151.15175" xlink:href="#m4f5604d9a2" y="36.006516"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="150.15602" xlink:href="#m4f5604d9a2" y="35.862109"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="149.154942" xlink:href="#m4f5604d9a2" y="35.717555"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="148.14846" xlink:href="#m4f5604d9a2" y="35.572851"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="147.136519" xlink:href="#m4f5604d9a2" y="35.427993"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="146.119066" xlink:href="#m4f5604d9a2" y="35.282978"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="145.096047" xlink:href="#m4f5604d9a2" y="35.137803"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="144.067408" xlink:href="#m4f5604d9a2" y="34.992464"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="143.033097" xlink:href="#m4f5604d9a2" y="34.846962"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="141.993061" xlink:href="#m4f5604d9a2" y="34.701293"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="140.947247" xlink:href="#m4f5604d9a2" y="34.555457"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="139.895603" xlink:href="#m4f5604d9a2" y="34.409454"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="138.838079" xlink:href="#m4f5604d9a2" y="34.263284"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="137.774621" xlink:href="#m4f5604d9a2" y="34.116946"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="136.70518" xlink:href="#m4f5604d9a2" y="33.970441"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="135.629705" xlink:href="#m4f5604d9a2" y="33.823771"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="134.548144" xlink:href="#m4f5604d9a2" y="33.676936"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="133.460447" xlink:href="#m4f5604d9a2" y="33.529938"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="132.366566" xlink:href="#m4f5604d9a2" y="33.38278"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="131.266449" xlink:href="#m4f5604d9a2" y="33.235463"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="130.160048" xlink:href="#m4f5604d9a2" y="33.08799"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="129.047313" xlink:href="#m4f5604d9a2" y="32.940365"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="127.928196" xlink:href="#m4f5604d9a2" y="32.792589"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="126.802648" xlink:href="#m4f5604d9a2" y="32.644666"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="125.670622" xlink:href="#m4f5604d9a2" y="32.496599"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="124.532068" xlink:href="#m4f5604d9a2" y="32.348393"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="123.386941" xlink:href="#m4f5604d9a2" y="32.200051"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="122.235193" xlink:href="#m4f5604d9a2" y="32.051577"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="121.076778" xlink:href="#m4f5604d9a2" y="31.902975"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="119.911649" xlink:href="#m4f5604d9a2" y="31.754249"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="118.73976" xlink:href="#m4f5604d9a2" y="31.605404"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="117.561068" xlink:href="#m4f5604d9a2" y="31.456444"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="116.375527" xlink:href="#m4f5604d9a2" y="31.307373"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="115.183093" xlink:href="#m4f5604d9a2" y="31.158196"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="113.983723" xlink:href="#m4f5604d9a2" y="31.008917"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="112.777375" xlink:href="#m4f5604d9a2" y="30.859541"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="111.564006" xlink:href="#m4f5604d9a2" y="30.710072"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="110.343575" xlink:href="#m4f5604d9a2" y="30.560514"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="109.116043" xlink:href="#m4f5604d9a2" y="30.410873"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="107.881369" xlink:href="#m4f5604d9a2" y="30.261151"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="106.639516" xlink:href="#m4f5604d9a2" y="30.111355"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="105.390445" xlink:href="#m4f5604d9a2" y="29.961487"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="104.134121" xlink:href="#m4f5604d9a2" y="29.811551"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="102.870509" xlink:href="#m4f5604d9a2" y="29.661553"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="101.599573" xlink:href="#m4f5604d9a2" y="29.511494"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="100.321282" xlink:href="#m4f5604d9a2" y="29.36138"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="99.035605" xlink:href="#m4f5604d9a2" y="29.211214"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="97.74251" xlink:href="#m4f5604d9a2" y="29.060998"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="96.441971" xlink:href="#m4f5604d9a2" y="28.910736"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="95.133959" xlink:href="#m4f5604d9a2" y="28.760432"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="93.818449" xlink:href="#m4f5604d9a2" y="28.610087"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="92.495419" xlink:href="#m4f5604d9a2" y="28.459705"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="91.164846" xlink:href="#m4f5604d9a2" y="28.309288"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="89.826711" xlink:href="#m4f5604d9a2" y="28.158837"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="88.480996" xlink:href="#m4f5604d9a2" y="28.008355"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="87.127684" xlink:href="#m4f5604d9a2" y="27.857844"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="85.766763" xlink:href="#m4f5604d9a2" y="27.707305"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="84.398221" xlink:href="#m4f5604d9a2" y="27.55674"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="83.022049" xlink:href="#m4f5604d9a2" y="27.406148"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="81.63824" xlink:href="#m4f5604d9a2" y="27.255532"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="80.246789" xlink:href="#m4f5604d9a2" y="27.104892"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="78.847696" xlink:href="#m4f5604d9a2" y="26.954228"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="77.440961" xlink:href="#m4f5604d9a2" y="26.80354"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="76.026587" xlink:href="#m4f5604d9a2" y="26.652827"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="74.604581" xlink:href="#m4f5604d9a2" y="26.502091"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="73.174951" xlink:href="#m4f5604d9a2" y="26.351329"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="71.73771" xlink:href="#m4f5604d9a2" y="26.200542"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="70.292872" xlink:href="#m4f5604d9a2" y="26.049728"/>
+     <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="68.840455" xlink:href="#m4f5604d9a2" y="25.898885"/>
+    </g>
    </g>
    <g id="patch_3">
-    <path d="M 63.47 301.9975 
-L 63.47 10.8 
+    <path d="M 50.69 301.9975 
+L 50.69 10.8 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_4">
@@ -886,39 +3036,70 @@ L 450 10.8
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_5">
-    <path d="M 63.47 301.9975 
+    <path d="M 50.69 301.9975 
 L 450 301.9975 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="patch_6">
-    <path d="M 63.47 10.8 
+    <path d="M 50.69 10.8 
 L 450 10.8 
 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
    </g>
    <g id="legend_1">
     <g id="patch_7">
-     <path d="M 70.47 62.834375 
-L 124.67 62.834375 
-Q 126.67 62.834375 126.67 60.834375 
-L 126.67 17.8 
-Q 126.67 15.8 124.67 15.8 
-L 70.47 15.8 
-Q 68.47 15.8 68.47 17.8 
-L 68.47 60.834375 
-Q 68.47 62.834375 70.47 62.834375 
+     <path d="M 390.64 78.048125 
+L 445.1 78.048125 
+Q 446.5 78.048125 446.5 76.648125 
+L 446.5 15.7 
+Q 446.5 14.3 445.1 14.3 
+L 390.64 14.3 
+Q 389.24 14.3 389.24 15.7 
+L 389.24 76.648125 
+Q 389.24 78.048125 390.64 78.048125 
 z
 " style="fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;"/>
     </g>
-    <g id="line2d_20">
-     <path d="M 72.47 23.898438 
-L 92.47 23.898438 
-" style="fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;"/>
-    </g>
-    <g id="line2d_21"/>
-    <g id="text_19">
-     <!-- $f = 1$ -->
-     <g transform="translate(100.47 27.398438)scale(0.1 -0.1)">
+    <g id="line2d_17">
+     <path d="M 392.04 19.968906 
+L 406.04 19.968906 
+" style="fill:none;stroke:#1f77b4;stroke-dasharray:6,4.5,6;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_18">
+     <g>
+      <use style="fill:#1f77b4;fill-opacity:0.2;stroke:#1f77b4;stroke-opacity:0.2;" x="399.04" xlink:href="#ma85ef77801" y="19.968906"/>
+     </g>
+    </g>
+    <g id="text_13">
+     <!-- I4O3$f = 1$ -->
+     <g transform="translate(411.64 22.418906)scale(0.07 -0.07)">
       <defs>
+       <path d="M 9.8125 72.90625 
+L 19.671875 72.90625 
+L 19.671875 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-73"/>
+       <path d="M 39.40625 66.21875 
+Q 28.65625 66.21875 22.328125 58.203125 
+Q 16.015625 50.203125 16.015625 36.375 
+Q 16.015625 22.609375 22.328125 14.59375 
+Q 28.65625 6.59375 39.40625 6.59375 
+Q 50.140625 6.59375 56.421875 14.59375 
+Q 62.703125 22.609375 62.703125 36.375 
+Q 62.703125 50.203125 56.421875 58.203125 
+Q 50.140625 66.21875 39.40625 66.21875 
+z
+M 39.40625 74.21875 
+Q 54.734375 74.21875 63.90625 63.9375 
+Q 73.09375 53.65625 73.09375 36.375 
+Q 73.09375 19.140625 63.90625 8.859375 
+Q 54.734375 -1.421875 39.40625 -1.421875 
+Q 24.03125 -1.421875 14.8125 8.828125 
+Q 5.609375 19.09375 5.609375 36.375 
+Q 5.609375 53.65625 14.8125 63.9375 
+Q 24.03125 74.21875 39.40625 74.21875 
+z
+" id="DejaVuSans-79"/>
        <path d="M 47.796875 75.984375 
 L 46.390625 68.5 
 L 37.796875 68.5 
@@ -951,45 +3132,131 @@ L 10.59375 17.1875
 z
 " id="DejaVuSans-61"/>
       </defs>
-      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
-      <use transform="translate(54.6875 0.015625)" xlink:href="#DejaVuSans-61"/>
-      <use transform="translate(157.958984 0.015625)" xlink:href="#DejaVuSans-49"/>
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-73"/>
+      <use transform="translate(29.492188 0.015625)" xlink:href="#DejaVuSans-52"/>
+      <use transform="translate(93.115234 0.015625)" xlink:href="#DejaVuSans-79"/>
+      <use transform="translate(171.826172 0.015625)" xlink:href="#DejaVuSans-51"/>
+      <use transform="translate(235.449219 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(290.136719 0.015625)" xlink:href="#DejaVuSans-61"/>
+      <use transform="translate(393.408203 0.015625)" xlink:href="#DejaVuSans-49"/>
+     </g>
+    </g>
+    <g id="line2d_19">
+     <path d="M 392.04 30.243594 
+L 406.04 30.243594 
+" style="fill:none;stroke:#ff7f0e;stroke-dasharray:3,4.5,3;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_20">
+     <g>
+      <use style="fill:#ff7f0e;fill-opacity:0.2;stroke:#ff7f0e;stroke-opacity:0.2;" x="399.04" xlink:href="#mb7e8bbea43" y="30.243594"/>
+     </g>
+    </g>
+    <g id="text_14">
+     <!-- I4O3$f = 2$ -->
+     <g transform="translate(411.64 32.693594)scale(0.07 -0.07)">
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-73"/>
+      <use transform="translate(29.492188 0.015625)" xlink:href="#DejaVuSans-52"/>
+      <use transform="translate(93.115234 0.015625)" xlink:href="#DejaVuSans-79"/>
+      <use transform="translate(171.826172 0.015625)" xlink:href="#DejaVuSans-51"/>
+      <use transform="translate(235.449219 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(290.136719 0.015625)" xlink:href="#DejaVuSans-61"/>
+      <use transform="translate(393.408203 0.015625)" xlink:href="#DejaVuSans-50"/>
      </g>
     </g>
+    <g id="line2d_21">
+     <path d="M 392.04 40.518281 
+L 406.04 40.518281 
+" style="fill:none;stroke:#2ca02c;stroke-dasharray:1.5,4.5,1.5;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    </g>
     <g id="line2d_22">
-     <path d="M 72.47 38.576563 
-L 92.47 38.576563 
-" style="fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;"/>
+     <g>
+      <use style="fill:#2ca02c;fill-opacity:0.2;stroke:#2ca02c;stroke-opacity:0.2;" x="399.04" xlink:href="#mee8b134b61" y="40.518281"/>
+     </g>
     </g>
-    <g id="line2d_23"/>
-    <g id="text_20">
-     <!-- $f = 2$ -->
-     <g transform="translate(100.47 42.076563)scale(0.1 -0.1)">
-      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
-      <use transform="translate(54.6875 0.015625)" xlink:href="#DejaVuSans-61"/>
-      <use transform="translate(157.958984 0.015625)" xlink:href="#DejaVuSans-50"/>
+    <g id="text_15">
+     <!-- I4O3$f = 4$ -->
+     <g transform="translate(411.64 42.968281)scale(0.07 -0.07)">
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-73"/>
+      <use transform="translate(29.492188 0.015625)" xlink:href="#DejaVuSans-52"/>
+      <use transform="translate(93.115234 0.015625)" xlink:href="#DejaVuSans-79"/>
+      <use transform="translate(171.826172 0.015625)" xlink:href="#DejaVuSans-51"/>
+      <use transform="translate(235.449219 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(290.136719 0.015625)" xlink:href="#DejaVuSans-61"/>
+      <use transform="translate(393.408203 0.015625)" xlink:href="#DejaVuSans-52"/>
      </g>
     </g>
+    <g id="line2d_23">
+     <path d="M 392.04 50.792969 
+L 406.04 50.792969 
+" style="fill:none;stroke:#d62728;stroke-dasharray:6,4.5,6;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    </g>
     <g id="line2d_24">
-     <path d="M 72.47 53.254688 
-L 92.47 53.254688 
-" style="fill:none;stroke:#2ca02c;stroke-linecap:square;stroke-width:1.5;"/>
+     <g>
+      <use style="fill:#d62728;fill-opacity:0.2;stroke:#d62728;stroke-opacity:0.2;" x="399.04" xlink:href="#m6d92a482c2" y="50.792969"/>
+     </g>
     </g>
-    <g id="line2d_25"/>
-    <g id="text_21">
-     <!-- $f = 4$ -->
-     <g transform="translate(100.47 56.754688)scale(0.1 -0.1)">
-      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
-      <use transform="translate(54.6875 0.015625)" xlink:href="#DejaVuSans-61"/>
-      <use transform="translate(157.958984 0.015625)" xlink:href="#DejaVuSans-52"/>
+    <g id="text_16">
+     <!-- I8O5$f = 1$ -->
+     <g transform="translate(411.64 53.242969)scale(0.07 -0.07)">
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-73"/>
+      <use transform="translate(29.492188 0.015625)" xlink:href="#DejaVuSans-56"/>
+      <use transform="translate(93.115234 0.015625)" xlink:href="#DejaVuSans-79"/>
+      <use transform="translate(171.826172 0.015625)" xlink:href="#DejaVuSans-53"/>
+      <use transform="translate(235.449219 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(290.136719 0.015625)" xlink:href="#DejaVuSans-61"/>
+      <use transform="translate(393.408203 0.015625)" xlink:href="#DejaVuSans-49"/>
+     </g>
+    </g>
+    <g id="line2d_25">
+     <path d="M 392.04 61.067656 
+L 406.04 61.067656 
+" style="fill:none;stroke:#9467bd;stroke-dasharray:3,4.5,3;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_26">
+     <g>
+      <use style="fill:#9467bd;fill-opacity:0.2;stroke:#9467bd;stroke-opacity:0.2;" x="399.04" xlink:href="#me6acc25a23" y="61.067656"/>
+     </g>
+    </g>
+    <g id="text_17">
+     <!-- I8O5$f = 2$ -->
+     <g transform="translate(411.64 63.517656)scale(0.07 -0.07)">
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-73"/>
+      <use transform="translate(29.492188 0.015625)" xlink:href="#DejaVuSans-56"/>
+      <use transform="translate(93.115234 0.015625)" xlink:href="#DejaVuSans-79"/>
+      <use transform="translate(171.826172 0.015625)" xlink:href="#DejaVuSans-53"/>
+      <use transform="translate(235.449219 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(290.136719 0.015625)" xlink:href="#DejaVuSans-61"/>
+      <use transform="translate(393.408203 0.015625)" xlink:href="#DejaVuSans-50"/>
+     </g>
+    </g>
+    <g id="line2d_27">
+     <path d="M 392.04 71.342344 
+L 406.04 71.342344 
+" style="fill:none;stroke:#8c564b;stroke-dasharray:1.5,4.5,1.5;stroke-dashoffset:0;stroke-opacity:0.2;stroke-width:1.5;"/>
+    </g>
+    <g id="line2d_28">
+     <g>
+      <use style="fill:#8c564b;fill-opacity:0.2;stroke:#8c564b;stroke-opacity:0.2;" x="399.04" xlink:href="#m4f5604d9a2" y="71.342344"/>
+     </g>
+    </g>
+    <g id="text_18">
+     <!-- I8O5$f = 4$ -->
+     <g transform="translate(411.64 73.792344)scale(0.07 -0.07)">
+      <use transform="translate(0 0.015625)" xlink:href="#DejaVuSans-73"/>
+      <use transform="translate(29.492188 0.015625)" xlink:href="#DejaVuSans-56"/>
+      <use transform="translate(93.115234 0.015625)" xlink:href="#DejaVuSans-79"/>
+      <use transform="translate(171.826172 0.015625)" xlink:href="#DejaVuSans-53"/>
+      <use transform="translate(235.449219 0.015625)" xlink:href="#DejaVuSans-Oblique-102"/>
+      <use transform="translate(290.136719 0.015625)" xlink:href="#DejaVuSans-61"/>
+      <use transform="translate(393.408203 0.015625)" xlink:href="#DejaVuSans-52"/>
      </g>
     </g>
    </g>
   </g>
  </g>
  <defs>
-  <clipPath id="pa8c46be0ca">
-   <rect height="291.1975" width="386.53" x="63.47" y="10.8"/>
+  <clipPath id="p444e95376c">
+   <rect height="291.1975" width="399.31" x="50.69" y="10.8"/>
   </clipPath>
  </defs>
 </svg>
diff --git a/examples/convergence/particles_temporal.py b/examples/convergence/particles_temporal.py
index 054a2538..53697edd 100644
--- a/examples/convergence/particles_temporal.py
+++ b/examples/convergence/particles_temporal.py
@@ -63,12 +63,12 @@ def run_simulations_particles():
 
 # 1. Run NSVEparticles for a few iterations, to build up rhs values, consistent
 #    with the relevant velocity field.
-    # create dns object
-    # launch simulation
     factor = 1
     for neighbours, smoothness in neighbours_smoothness_list:
         interp_name = 'I{0}O{1}'.format(2*neighbours+2, 2*smoothness+1)
+        # create dns object
         cc = DNS()
+        # launch simulation
         cc.launch([
             'NSVEparticles',
             '-n', '{0}'.format(factor*32),
@@ -157,7 +157,7 @@ def run_simulations_particles():
                     '--tracers0_neighbours', '{0}'.format(neighbours),
                     '--tracers0_smoothness', '{0}'.format(smoothness),
                     '--tracers0_integration_steps', '4',
-                    '--cpp_random_particles', '0'], # turn off cpp particle initialization
+                    '--cpp_random_particles', '0'], # turn off C++ particle initialization
                     iter0 = 8*factor)
             source_file.close()
     return None
-- 
GitLab


From 5162d638224e251c8d1b68cc6dab6a5a31e5fd98 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Thu, 27 Jan 2022 17:30:40 +0100
Subject: [PATCH 23/24] fixes typo, adds explanation

---
 .../sphinx_static/convergence_fields.rst      |  4 +--
 .../sphinx_static/convergence_particles.rst   | 25 ++++++++++++++++---
 examples/convergence/fields_temporal.py       |  4 +--
 examples/convergence/particles_temporal.py    |  4 +--
 4 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/documentation/sphinx_static/convergence_fields.rst b/documentation/sphinx_static/convergence_fields.rst
index 45b3aa25..5830e4e7 100644
--- a/documentation/sphinx_static/convergence_fields.rst
+++ b/documentation/sphinx_static/convergence_fields.rst
@@ -72,7 +72,7 @@ The full function is given below:
 .. code:: python
 
     def generate_initial_conditions():
-        # change these two values as neded.
+        # change these two values as needed.
         # number of MPI processes to use
         nprocesses = 8
         # number of OpenMP threads per MPI process to use
@@ -121,7 +121,7 @@ NSVE solvers):
 .. code:: python
 
     def run_simulations_field(err_vs_t = False):
-        # change these two values as neded.
+        # change these two values as needed.
         # number of MPI processes to use
         nprocesses = 8
         # number of OpenMP threads per MPI process to use
diff --git a/documentation/sphinx_static/convergence_particles.rst b/documentation/sphinx_static/convergence_particles.rst
index 35e04080..170033f7 100644
--- a/documentation/sphinx_static/convergence_particles.rst
+++ b/documentation/sphinx_static/convergence_particles.rst
@@ -63,7 +63,7 @@ run:
 .. code:: python
 
     def generate_initial_conditions():
-        # change these two values as neded.
+        # change these two values as needed.
         # number of MPI processes to use
         nprocesses = 8
         # number of OpenMP threads per MPI process to use
@@ -110,11 +110,26 @@ To put it simply, for the simulation "nsvep_base" the dataset
 However, the "tracers0/rhs/8" dataset for simulation "nsvep_1x" contains
 meaningful values (that **are** used because we request that `iter0` is
 different from 0).
+In order to generate consistent values of the "rhs" datasets, we first
+run a simulation at the highest resolution (smallest time-step), and
+then we extract the appropriate snapshots --- see also the second part
+of the trajectory plot function.
+
+Finally, the `launch` method is called in an unusual way for TurTLE.
+Firstly, we demand a DNS that starts at an iteration different from 0.
+Secondly, we manually copy the forcing parameters from the source
+simulation; since the source cannot be specified explicitly, the `DNS`
+class cannot search for the source parameters itself.
+Thirdly, I will note that one may in fact break this call by modifying
+the `iter0` and `checkpoints_per_file` values, since we have explicitly
+placed `iter0` in the `checkpoint` 0 file.
+However, a full discussion of the `iter0` and `checkpoint` subtleties is
+beyond the scope of this tutorial.
 
 .. code:: python
 
     def run_simulations_particles():
-        # change these two values as neded.
+        # change these two values as needed.
         # number of MPI processes to use
         nprocesses = 8
         # number of OpenMP threads per MPI process to use
@@ -147,7 +162,8 @@ different from 0).
                 '--tracers0_neighbours', '{0}'.format(neighbours),
                 '--tracers0_smoothness', '{0}'.format(smoothness),
                 '--tracers0_integration_steps', '4',
-                '--cpp_random_particles', '{0}'.format(particle_random_seed)])
+                '--cpp_random_particles', '{0}'.format(particle_random_seed),
+                '--checkpoints_per_file', '{0}'.format(16)])
 
     # 2. Prepare initial conditions
         for neighbours, smoothness in neighbours_smoothness_list:
@@ -216,7 +232,8 @@ different from 0).
                         '--tracers0_neighbours', '{0}'.format(neighbours),
                         '--tracers0_smoothness', '{0}'.format(smoothness),
                         '--tracers0_integration_steps', '4',
-                        '--cpp_random_particles', '0'], # turn off C++ particle initialization
+                        '--cpp_random_particles', '0', # turn off C++ particle initialization
+                        '--checkpoints_per_file', '{0}'.format(16)],
                         iter0 = 8*factor)
                 source_file.close()
         return None
diff --git a/examples/convergence/fields_temporal.py b/examples/convergence/fields_temporal.py
index c7111c68..d5e271be 100644
--- a/examples/convergence/fields_temporal.py
+++ b/examples/convergence/fields_temporal.py
@@ -21,7 +21,7 @@ def main():
     return None
 
 def generate_initial_conditions():
-    # change these two values as neded.
+    # change these two values as needed.
     # number of MPI processes to use
     nprocesses = 8
     # number of OpenMP threads per MPI process to use
@@ -65,7 +65,7 @@ def generate_initial_conditions():
     return None
 
 def run_simulations_field(err_vs_t = False):
-    # change these two values as neded.
+    # change these two values as needed.
     # number of MPI processes to use
     nprocesses = 8
     # number of OpenMP threads per MPI process to use
diff --git a/examples/convergence/particles_temporal.py b/examples/convergence/particles_temporal.py
index 53697edd..c7b0ac15 100644
--- a/examples/convergence/particles_temporal.py
+++ b/examples/convergence/particles_temporal.py
@@ -26,7 +26,7 @@ def main():
     return None
 
 def generate_initial_conditions():
-    # change these two values as neded.
+    # change these two values as needed.
     # number of MPI processes to use
     nprocesses = 8
     # number of OpenMP threads per MPI process to use
@@ -55,7 +55,7 @@ def generate_initial_conditions():
     return None
 
 def run_simulations_particles():
-    # change these two values as neded.
+    # change these two values as needed.
     # number of MPI processes to use
     nprocesses = 8
     # number of OpenMP threads per MPI process to use
-- 
GitLab


From 92839865fe676d306b78588b92cecb7aa4735baa Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Thu, 27 Jan 2022 17:39:58 +0100
Subject: [PATCH 24/24] adds comment

---
 documentation/sphinx_static/convergence_particles.rst | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/documentation/sphinx_static/convergence_particles.rst b/documentation/sphinx_static/convergence_particles.rst
index 170033f7..45fd4dab 100644
--- a/documentation/sphinx_static/convergence_particles.rst
+++ b/documentation/sphinx_static/convergence_particles.rst
@@ -123,8 +123,12 @@ class cannot search for the source parameters itself.
 Thirdly, I will note that one may in fact break this call by modifying
 the `iter0` and `checkpoints_per_file` values, since we have explicitly
 placed `iter0` in the `checkpoint` 0 file.
-However, a full discussion of the `iter0` and `checkpoint` subtleties is
-beyond the scope of this tutorial.
+While a full discussion of the `iter0` and `checkpoint` subtleties is
+beyond the scope of this tutorial, I will mention that it was a
+conscious choice to use a simple `iteration` to `checkpoint`
+correspondence, since we don't actually need anything smarter outside of
+extreme scenarios that need to be addressed individually anyway
+due to other complexities.
 
 .. code:: python
 
-- 
GitLab