diff --git a/.all-contributorsrc b/.all-contributorsrc
index 600933daeb..3a4d544b75 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -528,7 +528,8 @@
"avatar_url": "https://avatars.githubusercontent.com/u/74401230?v=4",
"profile": "https://github.com/agriyakhetarpal",
"contributions": [
- "infra"
+ "infra",
+ "code"
]
},
{
diff --git a/.gitignore b/.gitignore
index e0b2d092f2..8e3867aeb5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,6 +13,7 @@
!CMakeLists.txt
!pybamm/CITATIONS.txt
!pybamm/input/**/*.csv
+!tests/unit/test_parameters/*.csv
!benchmarks/benchmark_images/*.png
# running files
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index da36544414..c66dab806e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -4,7 +4,7 @@ ci:
repos:
- repo: https://github.com/pre-commit/mirrors-prettier
- rev: v3.0.0-alpha.3
+ rev: v3.0.0-alpha.4
hooks:
- id: prettier
exclude: assets/js/webapp\.js
@@ -15,6 +15,6 @@ repos:
- id: black
- repo: https://github.com/PyCQA/flake8
- rev: 5.0.4
+ rev: 6.0.0
hooks:
- id: flake8
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 662cfbdd10..b8d695b6a1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,14 +1,45 @@
# [Unreleased](https://github.com/pybamm-team/PyBaMM/)
+# [v22.11](https://github.com/pybamm-team/PyBaMM/tree/v22.11) - 2022-11-30
+
+## Features
+
+- Updated parameter sets so that interpolants are created explicitly in the parameter set python file. This does not change functionality but allows finer control, e.g. specifying a "cubic" interpolator instead of the default "linear" ([#2510](https://github.com/pybamm-team/PyBaMM/pull/2510))
+- Equivalent circuit models ([#2478](https://github.com/pybamm-team/PyBaMM/pull/2478))
+- New Idaklu solver options for jacobian type and linear solver, support Sundials v6 ([#2444](https://github.com/pybamm-team/PyBaMM/pull/2444))
+- Added `scale` and `reference` attributes to `Variable` objects, which can be use to make the ODE/DAE solver better conditioned ([#2440](https://github.com/pybamm-team/PyBaMM/pull/2440))
+- SEI reactions can now be asymmetric ([#2425](https://github.com/pybamm-team/PyBaMM/pull/2425))
+
+## Bug fixes
+
+- Switched from `pkg_resources` to `importlib_metadata` for handling entry points ([#2500](https://github.com/pybamm-team/PyBaMM/pull/2500))
+- Fixed some bugs related to processing `FunctionParameter` to `Interpolant` ([#2494](https://github.com/pybamm-team/PyBaMM/pull/2494))
+
+## Optimizations
+
+- `ParameterValues` now avoids trying to process children if a function parameter is an object that doesn't depend on its children ([#2477](https://github.com/pybamm-team/PyBaMM/pull/2477))
+- Implemented memoization via `cache` and `cached_property` from functools ([#2465](https://github.com/pybamm-team/PyBaMM/pull/2465))
+- Added more rules for simplifying expressions, especially around Concatenations. Also, meshes constructed from multiple domains are now cached ([#2443](https://github.com/pybamm-team/PyBaMM/pull/2443))
+- Added more rules for simplifying expressions. Constants in binary operators are now moved to the left by default (e.g. `x*2` returns `2*x`) ([#2424](https://github.com/pybamm-team/PyBaMM/pull/2424))
+
+## Breaking changes
+
+- Interpolants created from parameter data are now "linear" by default (was "cubic") ([#2494](https://github.com/pybamm-team/PyBaMM/pull/2494))
+- Renamed entry point for parameter sets to `pybamm_parameter_sets` ([#2475](https://github.com/pybamm-team/PyBaMM/pull/2475))
+- Removed code for generating `ModelingToolkit` problems ([#2432](https://github.com/pybamm-team/PyBaMM/pull/2432))
+- Removed `FirstOrder` and `Composite` lead-acid models, and some submodels specific to those models ([#2431](https://github.com/pybamm-team/PyBaMM/pull/2431))
+
# [v22.10.post1](https://github.com/pybamm-team/PyBaMM/tree/v22.10.post1) - 2022-10-31
+## Breaking changes
+
- Removed all julia generation code ([#2453](https://github.com/pybamm-team/PyBaMM/pull/2453)). Julia code will be hosted at [PyBaMM.jl](https://github.com/tinosulzer/PyBaMM.jl) from now on.
# [v22.10](https://github.com/pybamm-team/PyBaMM/tree/v22.10) - 2022-10-31
## Features
-- Third-party parameter sets can be added by registering entry points to `pybamm_parameter_set` ([#2396](https://github.com/pybamm-team/PyBaMM/pull/2396))
+- Third-party parameter sets can be added by registering entry points to ~~`pybamm_parameter_set`~~`pybamm_parameter_sets` ([#2396](https://github.com/pybamm-team/PyBaMM/pull/2396), changed in [#2475](https://github.com/pybamm-team/PyBaMM/pull/2475))
- Added three-dimensional interpolation ([#2380](https://github.com/pybamm-team/PyBaMM/pull/2380))
## Bug fixes
diff --git a/CITATION.cff b/CITATION.cff
index f659d44a5b..e4cce984ae 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -24,6 +24,6 @@ keywords:
- "expression tree"
- "python"
- "symbolic differentiation"
-version: "22.10"
+version: "22.11"
repository-code: "https://github.com/pybamm-team/PyBaMM"
title: "Python Battery Mathematical Modelling (PyBaMM)"
diff --git a/CMakeBuild.py b/CMakeBuild.py
index 8a2ed4716e..5b34bb27df 100644
--- a/CMakeBuild.py
+++ b/CMakeBuild.py
@@ -82,7 +82,10 @@ def run(self):
use_python_casadi = False
else:
use_python_casadi = True
+
+ build_type = os.getenv("PYBAMM_CPP_BUILD_TYPE", "RELEASE")
cmake_args = [
+ "-DCMAKE_BUILD_TYPE={}".format(build_type),
"-DPYTHON_EXECUTABLE={}".format(sys.executable),
"-DUSE_PYTHON_CASADI={}".format("TRUE" if use_python_casadi else "FALSE"),
]
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fc3bec444d..cc47ba99c0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,14 +35,20 @@ endif()
add_subdirectory(${PYBIND11_DIR})
pybind11_add_module(idaklu
- pybamm/solvers/c_solvers/idaklu_python.cpp
- pybamm/solvers/c_solvers/idaklu_python.hpp
+ pybamm/solvers/c_solvers/idaklu/casadi_functions.cpp
+ pybamm/solvers/c_solvers/idaklu/casadi_functions.hpp
+ pybamm/solvers/c_solvers/idaklu/casadi_solver.cpp
+ pybamm/solvers/c_solvers/idaklu/casadi_solver.hpp
+ pybamm/solvers/c_solvers/idaklu/casadi_sundials_functions.hpp
+ pybamm/solvers/c_solvers/idaklu/casadi_sundials_functions.cpp
+ pybamm/solvers/c_solvers/idaklu/common.hpp
+ pybamm/solvers/c_solvers/idaklu/python.hpp
+ pybamm/solvers/c_solvers/idaklu/python.cpp
+ pybamm/solvers/c_solvers/idaklu/solution.cpp
+ pybamm/solvers/c_solvers/idaklu/solution.hpp
+ pybamm/solvers/c_solvers/idaklu/options.hpp
+ pybamm/solvers/c_solvers/idaklu/options.cpp
pybamm/solvers/c_solvers/idaklu.cpp
- pybamm/solvers/c_solvers/idaklu.hpp
- pybamm/solvers/c_solvers/idaklu_casadi.cpp
- pybamm/solvers/c_solvers/idaklu_casadi.hpp
- pybamm/solvers/c_solvers/solution.cpp
- pybamm/solvers/c_solvers/solution.hpp
)
if (NOT DEFINED USE_PYTHON_CASADI)
diff --git a/FindSUNDIALS.cmake b/FindSUNDIALS.cmake
index 643b75bbd4..92a9b785e9 100644
--- a/FindSUNDIALS.cmake
+++ b/FindSUNDIALS.cmake
@@ -8,6 +8,8 @@
#
# * sundials_ida
# * sundials_sunlinsolklu
+# * sundials_sunlinsoldense
+# * sundials_sunlinsollapackdense
# * sundials_sunmatrix_sparse
# * sundials_nvecserial
#
@@ -31,6 +33,9 @@ find_path(SUNDIALS_INCLUDE_DIR
sundials/sundials_math.h
sundials/sundials_types.h
sunlinsol/sunlinsol_klu.h
+ sunlinsol/sunlinsol_dense.h
+ sunlinsol/sunlinsol_spbcgs.h
+ sunlinsol/sunlinsol_lapackdense.h
sunmatrix/sunmatrix_sparse.h
PATH_SUFFIXES
include
@@ -41,6 +46,9 @@ find_path(SUNDIALS_INCLUDE_DIR
set(SUNDIALS_WANT_COMPONENTS
sundials_idas
sundials_sunlinsolklu
+ sundials_sunlinsoldense
+ sundials_sunlinsolspbcgs
+ sundials_sunlinsollapackdense
sundials_sunmatrixsparse
sundials_nvecserial
)
diff --git a/README.md b/README.md
index 4299b067cb..e8fd36dc92 100644
--- a/README.md
+++ b/README.md
@@ -68,7 +68,9 @@ Additional supporting material can be found
Note that the examples on the default `develop` branch are tested on the latest `develop` commit. This may sometimes cause errors when running the examples on the pybamm pip package, which is synced to the `main` branch. You can switch to the `main` branch on github to see the version of the examples that is compatible with the latest pip release.
-
+## Versioning
+
+PyBaMM uses [CalVer](https://calver.org/), which means that we make new releases every month with the version number `YY.MM`. There is no difference between releases that increment the year and releases that increment the month; in particular, releases that increment the month may introduce breaking changes. Breaking changes for each release are communicated via the [CHANGELOG](CHANGELOG.md), and come with deprecation warnings or errors that are kept for at least one year (12 releases). If you find a breaking change that is not documented, or think it should be undone, please open an issue on [GitHub](https://github.com/pybamm-team/pybamm).
## 🚀 Installing PyBaMM
@@ -214,7 +216,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
ndrewwang 🐛 💻
MichaPhilipp 🐛
Alec Bills 💻
- Agriya Khetarpal 🚇
+ Agriya Khetarpal 🚇 💻
Alex Wadell 💻 ⚠️ 📖
diff --git a/benchmarks/different_model_options.py b/benchmarks/different_model_options.py
index 06af900037..b328398177 100644
--- a/benchmarks/different_model_options.py
+++ b/benchmarks/different_model_options.py
@@ -124,10 +124,12 @@ class TimeBuildModelSEI:
"none",
"constant",
"reaction limited",
+ "reaction limited (asymmetric)",
"solvent-diffusion limited",
"electron-migration limited",
"interstitial-diffusion limited",
"ec reaction limited",
+ "ec reaction limited (asymmetric)",
],
)
@@ -143,10 +145,12 @@ class TimeSolveSEI:
"none",
"constant",
"reaction limited",
+ "reaction limited (asymmetric)",
"solvent-diffusion limited",
"electron-migration limited",
"interstitial-diffusion limited",
"ec reaction limited",
+ "ec reaction limited (asymmetric)",
],
)
diff --git a/build-pure-wheel.sh b/build-pure-wheel.sh
deleted file mode 100755
index 68210be2ee..0000000000
--- a/build-pure-wheel.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-
-# This is script is to run inside a manylinux
-# docker image, i.e.
-# docker run -v `pwd`:/io quay.io/pypa/manylinux2014_x86_64 /io/build-wheel.sh
-#
-# Builds a pure python PyBaMM wheel, that is without the idaklu module extension.
-# In the following, clining the pybind11 is omitted, resulting in the extension module
-# compilation to be skipped.
-# This pure python wheel is mostly intended to Windows support.
-
-set -e -x
-cd /io
-
-# Build wheel!
-# Using python 3.7 but the resulting wheel is not
-# python version dependent
-for PYBIN in /opt/python/cp37-cp37m/bin; do
- "${PYBIN}/python" setup.py bdist_wheel -d /io/wheelhouse
-done
-
-echo "** --- All good ! --- **"
-ls /io/wheelhouse
diff --git a/build-wheel.sh b/build-wheel.sh
deleted file mode 100755
index 0174b7f06c..0000000000
--- a/build-wheel.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/bash
-
-# This is script is to run inside a manylinux
-# docker image, i.e.
-# docker run -v `pwd`:/io quay.io/pypa/manylinux2014_x86_64 /io/build-wheel.sh
-
-set -e -x
-# Compile wheels
-cd /io
-
-yum -y install openblas-devel
-
-# Update Cmake
-/opt/python/cp37-cp37m/bin/pip install cmake
-ln -s /opt/python/cp37-cp37m/bin/cmake /usr/bin/cmake
-
-# The wget python module is required to download
-# SuiteSparse and Sundials.
-# https://pypi.org/project/wget/
-/opt/python/cp37-cp37m/bin/pip install wget
-
-# Clone the pybind11 git repo next to the setup.py
-# Required to build the idaklu extension module.
-if [ ! -d "pybind11" ]
-then
- git clone https://github.com/pybind/pybind11.git
-fi
-
-
-# Download and build SuiteSparse/Sundials
-# in KLU_module_deps/
-/opt/python/cp37-cp37m/bin/python scripts/setup_KLU_module_build.py
-
-SUITESPARSE_DIR=KLU_module_deps/SuiteSparse-5.6.0
-SUNDIALS_DIR=KLU_module_deps/sundials5
-
-# Build wheels!
-for PYBIN in /opt/python/cp3[67]-cp3[67]m/bin; do
- "${PYBIN}/python" setup.py bdist_wheel\
- --suitesparse-root=${SUITESPARSE_DIR}\
- --sundials-root=${SUNDIALS_DIR}
-done
-
-# And repair them
-for whl in dist/*.whl; do
- auditwheel repair $whl -w /io/wheelhouse/
-done
-
-echo "** --- All good ! --- **"
-ls /io/wheelhouse
diff --git a/docs/conf.py b/docs/conf.py
index a849e89092..f39e6d8e8c 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -27,7 +27,7 @@
author = "The PyBaMM Team"
# The short X.Y version
-version = "22.10"
+version = "22.11"
# The full version, including alpha/beta/rc tags
release = version
diff --git a/docs/source/models/equivalent_circuit/index.rst b/docs/source/models/equivalent_circuit/index.rst
new file mode 100644
index 0000000000..750c0e4536
--- /dev/null
+++ b/docs/source/models/equivalent_circuit/index.rst
@@ -0,0 +1,7 @@
+Equivalent Circuit Models
+=========================
+
+.. toctree::
+ :maxdepth: 1
+
+ thevenin
diff --git a/docs/source/models/equivalent_circuit/thevenin.rst b/docs/source/models/equivalent_circuit/thevenin.rst
new file mode 100644
index 0000000000..cf73b04a0a
--- /dev/null
+++ b/docs/source/models/equivalent_circuit/thevenin.rst
@@ -0,0 +1,5 @@
+Thevenin Model
+==============
+
+.. autoclass:: pybamm.equivalent_circuit.Thevenin
+ :members:
diff --git a/docs/source/models/index.rst b/docs/source/models/index.rst
index 173ca722c1..5f944ce4a5 100644
--- a/docs/source/models/index.rst
+++ b/docs/source/models/index.rst
@@ -14,4 +14,5 @@ to see how these models can be solved, and compared, using PyBaMM.
base_models/index
lithium_ion/index
lead_acid/index
+ equivalent_circuit/index
submodels/index
diff --git a/docs/source/models/lead_acid/higher_order.rst b/docs/source/models/lead_acid/higher_order.rst
deleted file mode 100644
index 7a0b02264c..0000000000
--- a/docs/source/models/lead_acid/higher_order.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-Higher-Order Models
-===================
-
-.. autoclass:: pybamm.lead_acid.BaseHigherOrderModel
- :members:
-
-.. autoclass:: pybamm.lead_acid.FOQS
- :members:
-
-.. autoclass:: pybamm.lead_acid.Composite
- :members:
-
-.. autoclass:: pybamm.lead_acid.CompositeExtended
- :members:
diff --git a/docs/source/models/lead_acid/index.rst b/docs/source/models/lead_acid/index.rst
index 34003e8298..cf7b9b5852 100644
--- a/docs/source/models/lead_acid/index.rst
+++ b/docs/source/models/lead_acid/index.rst
@@ -6,5 +6,4 @@ Lead Acid Models
base_lead_acid_model
loqs
- higher_order
full
diff --git a/docs/source/models/submodels/current_collector/composite_potential_pair.rst b/docs/source/models/submodels/current_collector/composite_potential_pair.rst
deleted file mode 100644
index 38cfabd366..0000000000
--- a/docs/source/models/submodels/current_collector/composite_potential_pair.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-Composite Potential Pair models
-===============================
-
-.. autoclass:: pybamm.current_collector.BaseCompositePotentialPair
- :members:
-
-.. autoclass:: pybamm.current_collector.CompositePotentialPair2plus1D
- :members:
-
-.. autoclass:: pybamm.current_collector.CompositePotentialPair1plus1D
- :members:
diff --git a/docs/source/models/submodels/current_collector/index.rst b/docs/source/models/submodels/current_collector/index.rst
index b638ca80d8..91ca79fea2 100644
--- a/docs/source/models/submodels/current_collector/index.rst
+++ b/docs/source/models/submodels/current_collector/index.rst
@@ -5,8 +5,6 @@ Current Collector
:maxdepth: 1
base_current_collector
- composite_potential_pair
effective_resistance_current_collector
homogeneous_current_collector
potential_pair
- quite_conductive_potential_pair
diff --git a/docs/source/models/submodels/current_collector/quite_conductive_potential_pair.rst b/docs/source/models/submodels/current_collector/quite_conductive_potential_pair.rst
deleted file mode 100644
index cdf56df603..0000000000
--- a/docs/source/models/submodels/current_collector/quite_conductive_potential_pair.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-Quite Conductive Potential Pair models
-======================================
-
-.. autoclass:: pybamm.current_collector.BaseQuiteConductivePotentialPair
- :members:
-
-.. autoclass:: pybamm.current_collector.QuiteConductivePotentialPair1plus1D
- :members:
-
-.. autoclass:: pybamm.current_collector.QuiteConductivePotentialPair2plus1D
- :members:
diff --git a/docs/source/models/submodels/electrolyte_diffusion/composite_diffusion.rst b/docs/source/models/submodels/electrolyte_diffusion/composite_diffusion.rst
deleted file mode 100644
index 96e8a16d1a..0000000000
--- a/docs/source/models/submodels/electrolyte_diffusion/composite_diffusion.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Composite Model
-===============
-
-.. autoclass:: pybamm.electrolyte_diffusion.Composite
- :members:
diff --git a/docs/source/models/submodels/electrolyte_diffusion/index.rst b/docs/source/models/submodels/electrolyte_diffusion/index.rst
index 3afaa02739..6535f7f5e9 100644
--- a/docs/source/models/submodels/electrolyte_diffusion/index.rst
+++ b/docs/source/models/submodels/electrolyte_diffusion/index.rst
@@ -6,5 +6,4 @@ Electrolyte Diffusion
base_electrolyte_diffusion
constant_concentration
leading_order_diffusion
- composite_diffusion
full_diffusion
diff --git a/docs/source/models/submodels/equivalent_circuit_elements/index.rst b/docs/source/models/submodels/equivalent_circuit_elements/index.rst
new file mode 100644
index 0000000000..c88c0aed71
--- /dev/null
+++ b/docs/source/models/submodels/equivalent_circuit_elements/index.rst
@@ -0,0 +1,10 @@
+Equivalent Circuit Elements
+===========================
+
+.. toctree::
+
+ ocv_element
+ resistor_element
+ rc_element
+ thermal
+ voltage_model
diff --git a/docs/source/models/submodels/equivalent_circuit_elements/ocv_element.rst b/docs/source/models/submodels/equivalent_circuit_elements/ocv_element.rst
new file mode 100644
index 0000000000..f34a563edc
--- /dev/null
+++ b/docs/source/models/submodels/equivalent_circuit_elements/ocv_element.rst
@@ -0,0 +1,6 @@
+OCV Element
+===========
+
+.. autoclass:: pybamm.equivalent_circuit_elements.OCVElement
+ :members:
+
diff --git a/docs/source/models/submodels/equivalent_circuit_elements/rc_element.rst b/docs/source/models/submodels/equivalent_circuit_elements/rc_element.rst
new file mode 100644
index 0000000000..e783f4b291
--- /dev/null
+++ b/docs/source/models/submodels/equivalent_circuit_elements/rc_element.rst
@@ -0,0 +1,6 @@
+RC Element
+==========
+
+.. autoclass:: pybamm.equivalent_circuit_elements.RCElement
+ :members:
+
diff --git a/docs/source/models/submodels/equivalent_circuit_elements/resistor_element.rst b/docs/source/models/submodels/equivalent_circuit_elements/resistor_element.rst
new file mode 100644
index 0000000000..91d6e6d2c5
--- /dev/null
+++ b/docs/source/models/submodels/equivalent_circuit_elements/resistor_element.rst
@@ -0,0 +1,6 @@
+Resistor Element
+================
+
+.. autoclass:: pybamm.equivalent_circuit_elements.ResistorElement
+ :members:
+
diff --git a/docs/source/models/submodels/equivalent_circuit_elements/thermal.rst b/docs/source/models/submodels/equivalent_circuit_elements/thermal.rst
new file mode 100644
index 0000000000..c95ead818f
--- /dev/null
+++ b/docs/source/models/submodels/equivalent_circuit_elements/thermal.rst
@@ -0,0 +1,6 @@
+Thermal SubModel
+================
+
+.. autoclass:: pybamm.equivalent_circuit_elements.ThermalSubModel
+ :members:
+
diff --git a/docs/source/models/submodels/equivalent_circuit_elements/voltage_model.rst b/docs/source/models/submodels/equivalent_circuit_elements/voltage_model.rst
new file mode 100644
index 0000000000..bda725dfcb
--- /dev/null
+++ b/docs/source/models/submodels/equivalent_circuit_elements/voltage_model.rst
@@ -0,0 +1,6 @@
+Voltage Model
+=============
+
+.. autoclass:: pybamm.equivalent_circuit_elements.VoltageModel
+ :members:
+
diff --git a/docs/source/models/submodels/index.rst b/docs/source/models/submodels/index.rst
index 79a8ccb96a..3670073127 100644
--- a/docs/source/models/submodels/index.rst
+++ b/docs/source/models/submodels/index.rst
@@ -19,3 +19,4 @@ Submodels
porosity/index
thermal/index
transport_efficiency/index
+ equivalent_circuit_elements/index
diff --git a/docs/source/models/submodels/interface/first_order_kinetics.rst b/docs/source/models/submodels/interface/first_order_kinetics.rst
deleted file mode 100644
index f68d15c4b9..0000000000
--- a/docs/source/models/submodels/interface/first_order_kinetics.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-First-order Kinetics
-====================
-
-.. autoclass:: pybamm.kinetics.FirstOrderKinetics
- :members:
-
-.. autoclass:: pybamm.kinetics.InverseFirstOrderKinetics
- :members:
diff --git a/docs/source/models/submodels/interface/index.rst b/docs/source/models/submodels/interface/index.rst
index d59864fc7c..0267273966 100644
--- a/docs/source/models/submodels/interface/index.rst
+++ b/docs/source/models/submodels/interface/index.rst
@@ -7,7 +7,6 @@ Interface
base_interface
kinetics
inverse_butler_volmer
- first_order_kinetics
diffusion_limited
sei
open_circuit_potential
\ No newline at end of file
diff --git a/docs/source/models/submodels/oxygen_diffusion/composite_oxygen_diffusion.rst b/docs/source/models/submodels/oxygen_diffusion/composite_oxygen_diffusion.rst
deleted file mode 100644
index 0a3c42012a..0000000000
--- a/docs/source/models/submodels/oxygen_diffusion/composite_oxygen_diffusion.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Composite Model
-===============
-
-.. autoclass:: pybamm.oxygen_diffusion.Composite
- :members:
diff --git a/docs/source/models/submodels/oxygen_diffusion/first_order_oxygen_diffusion.rst b/docs/source/models/submodels/oxygen_diffusion/first_order_oxygen_diffusion.rst
deleted file mode 100644
index 9294a77de7..0000000000
--- a/docs/source/models/submodels/oxygen_diffusion/first_order_oxygen_diffusion.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-First-Order Model
-=================
-
-.. autoclass:: pybamm.oxygen_diffusion.FirstOrder
- :members:
diff --git a/docs/source/models/submodels/oxygen_diffusion/index.rst b/docs/source/models/submodels/oxygen_diffusion/index.rst
index 336259f45c..fccdb4611e 100644
--- a/docs/source/models/submodels/oxygen_diffusion/index.rst
+++ b/docs/source/models/submodels/oxygen_diffusion/index.rst
@@ -4,8 +4,6 @@ Oxygen Diffusion
.. toctree::
base_oxygen_diffusion
- composite_oxygen_diffusion
- first_order_oxygen_diffusion
full_oxygen_diffusion
leading_oxygen_diffusion
no_oxygen
diff --git a/docs/source/parameters/index.rst b/docs/source/parameters/index.rst
index 9d7585717d..85bb2eace2 100644
--- a/docs/source/parameters/index.rst
+++ b/docs/source/parameters/index.rst
@@ -10,3 +10,4 @@ Parameters
lithium_ion_parameters
lead_acid_parameters
parameter_sets
+ process_parameter_data
diff --git a/docs/source/parameters/process_parameter_data.rst b/docs/source/parameters/process_parameter_data.rst
new file mode 100644
index 0000000000..d34fa492fa
--- /dev/null
+++ b/docs/source/parameters/process_parameter_data.rst
@@ -0,0 +1,10 @@
+Process Parameter Data
+======================
+
+.. autofunction:: pybamm.parameters.process_1D_data
+
+.. autofunction:: pybamm.parameters.process_2D_data
+
+.. autofunction:: pybamm.parameters.process_2D_data_csv
+
+.. autofunction:: pybamm.parameters.process_3D_data_csv
diff --git a/examples/notebooks/models/lead-acid.ipynb b/examples/notebooks/models/lead-acid.ipynb
index d49c570907..2d61e46666 100644
--- a/examples/notebooks/models/lead-acid.ipynb
+++ b/examples/notebooks/models/lead-acid.ipynb
@@ -135,73 +135,6 @@
"loqs = pybamm.lead_acid.LOQS()"
]
},
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### \"Composite\" model\n",
- "\n",
- "#### Electrolyte Concentration\n",
- "\n",
- "$$\n",
- " \\frac{\\partial }{\\partial t}\\left(\\epsilon c\\right) = -\\frac{\\partial N}{\\partial x} + sj, \\\\ \n",
- " N = -\\frac{\\epsilon^b D(c)}{\\mathcal{C}_\\text{e}} \\frac{\\partial c}{\\partial x}\\\\\n",
- " N\\big|_{x=0}= N\\big|_{x=1}=0, \\\\ \n",
- " c\\big|_{t=0} = 1\n",
- "$$ \n",
- "\n",
- "#### Porosity\n",
- "\n",
- "$$\n",
- " \\frac{\\partial \\epsilon}{\\partial t} = -\\beta^\\text{surf}j, \\\\ \n",
- " \\epsilon\\big|_{t=0} = \\epsilon^0\n",
- "$$ \n",
- "\n",
- "#### Interfacial current density\n",
- "\n",
- "$$\n",
- "j = \\begin{cases}\n",
- " \\mathrm{I}/l_\\text{n}, \\quad &0 < x < l_\\text{n} \\\\\n",
- " 0, \\quad &l_\\text{n} < x < 1-l_\\text{p} \\\\\n",
- " -\\mathrm{I}/l_\\text{p}, \\quad &1-l_\\text{p} < x < 1 \n",
- " \\end{cases} \\\\\n",
- "$$\n",
- "\n",
- "#### Voltage \n",
- "\n",
- "$$ \n",
- "V = U_{\\text{eq}} + \\eta_r + \\eta_c + \\Delta\\Phi_{\\text{Elec}} + \\Delta\\Phi_{\\text{Solid}}\n",
- "$$ \n",
- "where \n",
- "\\begin{align}\n",
- " & U_{\\text{eq}} = U_p(\\bar{c}_p) - U_n(\\bar{c}_n), \\\\ \n",
- " &\\eta_{r} = -\\sinh^{-1}\\left(\\frac{\\mathcal{I}}{2\\bar{j}_{0n} l_n}\\right)\n",
- " -\\sinh^{-1}\\left(\\frac{\\mathcal{I}}{2\\bar{j}_{0p} l_p}\\right), \\\\\n",
- " &\\eta_c = \\mathcal{C}_e\\chi\\left(\\log(\\bar{c}_{p}) - \\log(\\bar{c}_{n})\\right), \\\\\n",
- " &\\Delta \\Phi_{\\text{Elec}}= -\\frac{\\mathcal{C}_e \\mathcal{I}}{\\kappa(\\bar{c})}\\left(\\frac{l_n}{3\\epsilon_n^b} + \\frac{l_s}{\\epsilon_{s}^b} + \\frac{l_p}{3\\epsilon_p^b} \\right),\n",
- " \\label{eqn:SPMe:electrolyte_ohmic_losses} \\\\\n",
- " &\\Delta \\Phi_{\\text{Solid}} = -\\frac{\\mathcal{I}}{3}\\left(\\frac{l_p}{\\sigma_p} + \\frac{l_n}{\\sigma_n} \\right), \n",
- "\\end{align} \n",
- "with \n",
- "\\begin{equation} \n",
- " \\bar{\\cdot}_{\\text{n}} = \\frac{1}{l_n}\\int_0^{l_n} \\cdot_{\\text{n}} \\, \\text{d}x, \\quad\n",
- " \\bar{\\cdot}_{\\text{p}} = \\frac{1}{l_p}\\int_{1-l_p}^{1} \\cdot_{\\text{p}} \\, \\text{d}x,\n",
- "\\end{equation}\n",
- "\n",
- "\n",
- "This model is implemented in PyBaMM as `Composite`\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [],
- "source": [
- "composite = pybamm.lead_acid.Composite()"
- ]
- },
{
"cell_type": "markdown",
"metadata": {},
@@ -218,12 +151,12 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# load models\n",
- "models = [loqs, composite, full]\n",
+ "models = [loqs, full]\n",
"\n",
"# process parameters\n",
"param = models[0].default_parameter_values\n",
@@ -241,7 +174,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
@@ -265,16 +198,15 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Solved the LOQS model in 125.991 ms\n",
- "Solved the Composite model in 1.442 s\n",
- "Solved the Full model in 1.688 s\n"
+ "Solved the LOQS model in 46.545 ms\n",
+ "Solved the Full model in 833.591 ms\n"
]
}
],
@@ -306,19 +238,17 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
- "image/png": "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\n",
+ "image/png": "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",
"text/plain": [
- ""
+ ""
]
},
- "metadata": {
- "needs_background": "light"
- },
+ "metadata": {},
"output_type": "display_data"
}
],
@@ -342,13 +272,13 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "e3b80bc0f08a4c26b23ffc501a822ef0",
+ "model_id": "1bf9e359ac394e759e5df3577b1986b1",
"version_major": 2,
"version_minor": 0
},
@@ -375,20 +305,28 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 9,
"metadata": {
"scrolled": false
},
"outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "At t = 0.0087774 and h = 2.16761e-39, the corrector convergence failed repeatedly or with |h| = hmin.\n",
+ "At t = 0.00384476 and h = 3.51822e-38, the corrector convergence failed repeatedly or with |h| = hmin.\n"
+ ]
+ },
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "9ff5f46a95004eb4b676868826f34be7",
+ "model_id": "32a89538e5ee46ad9d3737566e8600f6",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
- "interactive(children=(FloatSlider(value=0.0, description='t', max=3563.636363636364, step=35.63636363636364), …"
+ "interactive(children=(FloatSlider(value=0.0, description='t', max=3415.761176654425, step=34.15761176654425), …"
]
},
"metadata": {},
@@ -417,7 +355,7 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 10,
"metadata": {},
"outputs": [
{
@@ -428,7 +366,7 @@
"[2] Charles R. Harris, K. Jarrod Millman, Stéfan J. van der Walt, Ralf Gommers, Pauli Virtanen, David Cournapeau, Eric Wieser, Julian Taylor, Sebastian Berg, Nathaniel J. Smith, and others. Array programming with NumPy. Nature, 585(7825):357–362, 2020. doi:10.1038/s41586-020-2649-2.\n",
"[3] Valentin Sulzer, S. Jon Chapman, Colin P. Please, David A. Howey, and Charles W. Monroe. Faster Lead-Acid Battery Simulations from Porous-Electrode Theory: Part I. Physical Model. Journal of The Electrochemical Society, 166(12):A2363–A2371, 2019. doi:10.1149/2.0301910jes.\n",
"[4] Valentin Sulzer, S. Jon Chapman, Colin P. Please, David A. Howey, and Charles W. Monroe. Faster Lead-Acid Battery Simulations from Porous-Electrode Theory: Part II. Asymptotic Analysis. Journal of The Electrochemical Society, 166(12):A2372–A2382, 2019. doi:10.1149/2.0441908jes.\n",
- "[5] Valentin Sulzer, Scott G. Marquis, Robert Timms, Martin Robinson, and S. Jon Chapman. Python Battery Mathematical Modelling (PyBaMM). ECSarXiv. February, 2020. doi:10.1149/osf.io/67ckj.\n",
+ "[5] Valentin Sulzer, Scott G. Marquis, Robert Timms, Martin Robinson, and S. Jon Chapman. Python Battery Mathematical Modelling (PyBaMM). Journal of Open Research Software, 9(1):14, 2021. doi:10.5334/jors.309.\n",
"\n"
]
}
@@ -436,11 +374,18 @@
"source": [
"pybamm.print_citations()"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
}
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3 (ipykernel)",
+ "display_name": "Python 3.9.13 ('conda_jl')",
"language": "python",
"name": "python3"
},
@@ -454,7 +399,12 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.9.0"
+ "version": "3.9.13"
+ },
+ "vscode": {
+ "interpreter": {
+ "hash": "612adcc456652826e82b485a1edaef831aa6d5abc680d008e93d513dd8724f14"
+ }
}
},
"nbformat": 4,
diff --git a/examples/notebooks/solvers/dae-solver.ipynb b/examples/notebooks/solvers/dae-solver.ipynb
index b639f2a94c..30fb5b48fa 100644
--- a/examples/notebooks/solvers/dae-solver.ipynb
+++ b/examples/notebooks/solvers/dae-solver.ipynb
@@ -84,7 +84,7 @@
"outputs": [
{
"data": {
- "image/png": "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4ru27Ngq7c2BpAr3vwSGeFF/Dd5D273/dvAFy2r/91Gjf39e1+9fnoLv+pbm4fYd+D/LV4BHD7BO2P8eePS9K0edcrSh6/evpxz1rn7lqMf1+5crR2taj1f/CGvxgZ2Bb6Sm5cDd/rYx+PZyAiQA//X/4n0NdK2w7d3+7ZYAp4dp/Z8CG4A5/tsEf/uxwHz/L9p84Oow/g7+Ciz01zoVOKzCtr/xfzfLgKvCsX7/49HAA1W2C4vvAN+etPVACb7z7q8GRgIj/csNGOt/f/OBnDD7/Kur/3lga4XfgVx/e1f/Zz/X/+/rbi/qr+F7uKHC78BMKvwnINC/v3Cr37/OlfgGnKm4XVh8B/hOJ3PAvAr/Ts6IpN8DL2/V/Q1EORoO70E52rD1K0eVow1av3+dK1GO1ui2d0+DiIiIiIiISIMK92tARUREREREpJFQB1RERERERERCQh1QERERERERCQl1QEVERERERCQk1AEVERERERGRkFAHVCTCmVmqmV3ndR0iIiKRSDkqElrqgIpEvlRAwSkiInJwUlGOioSMOqAike8BoJuZzTGzh7wuRkREJMIoR0VCyJxzXtcgInVgZp2B95xzfbyuRUREJNIoR0VCS0dARUREREREJCTUARUREREREZGQUAdUJPLtAJK8LkJERCRCKUdFQkgdUJEI55zbDMwwswUaPEFERKR2lKMioaVBiERERERERCQkdARUREREREREQkIdUBEREREREQkJdUBFREREREQkJNQBFRERERERkZBQB1RERERERERCQh1QERERERERCQl1QEVERERERCQk/j+n2xQKO3wyjQAAAABJRU5ErkJggg==\n",
+ "image/png": "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4ru27Ngq7c2BpAr3vwSGeFF/Dd5D273/dvAFy2r/91Gjf39e1+9fnoLv+pbm4fYd+D/LV4BHD7BO2P8eePS9K0edcrSh6/evpxz1rn7lqMf1+5crR2taj1f/CGvxgZ2Bb6Sm5cDd/rYx+PZyAiQA//X/4n0NdK2w7d3+7ZYAp4dp/Z8CG4A5/tsEf/uxwHz/L9p84Oow/g7+Ciz01zoVOKzCtr/xfzfLgKvCsX7/49HAA1W2C4vvAN+etPVACb7z7q8GRgIj/csNGOt/f/OBnDD7/Kur/3lga4XfgVx/e1f/Zz/X/+/rbi/qr+F7uKHC78BMKvwnINC/v3Cr37/OlfgGnKm4XVh8B/hOJ3PAvAr/Ts6IpN8DL2/V/Q1EORoO70E52rD1K0eVow1av3+dK1GO1ui2d0+DiIiIiIiISIMK92tARUREREREpJFQB1RERERERERCQh1QERERERERCQl1QEVERERERCQk1AEVERERERGRkFAHVCTCmVmqmV3ndR0iIiKRSDkqElrqgIpEvlRAwSkiInJwUlGOioSMOqAike8BoJuZzTGzh7wuRkREJMIoR0VCyJxzXtcgInVgZp2B95xzfbyuRUREJNIoR0VCS0dARUREREREJCTUARUREREREZGQUAdUJPLtAJK8LkJERCRCKUdFQkgdUJEI55zbDMwwswUaPEFERKR2lKMioaVBiERERERERCQkdARUREREREREQkIdUBEREREREQkJdUBFREREREQkJNQBFRERERERkZBQB1RERERERERCQh1QERERERERCQl1QEVERERERCQk/j+n2xQKO3wyjQAAAABJRU5ErkJggg==",
"text/plain": [
""
]
@@ -172,7 +172,7 @@
"outputs": [
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6AAAAEYCAYAAABCw5uAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABVBklEQVR4nO3deXxU1f3/8dcnmSSTkAVIwpqwI7IjRNy30ipqkbrhXrUupWqt2q9Lq6X8sLbWpa5Y97rUqpRaRYsriAuKGpQdWWVJQAgBQoAkZDm/P2YISUggMcncmeT9fDzmkZlzz73zuTMJHz53Ocecc4iIiIiIiIg0tyivAxAREREREZHWQQWoiIiIiIiIhIQKUBEREREREQkJFaAiIiIiIiISEipARUREREREJCR8Xr1xWlqa69Gjh1dvLyIickBz587d4pxL9zqOuiiPiohIOKsrj3pWgPbo0YPs7Gyv3l5EROSAzGyt1zEciPKoiIiEs7ryqC7BFRERERERkZBQASoiIiIiIiIhoQJUREREREREQsKze0BFRKRplJaWkpOTQ3FxsdehRCS/309GRgYxMTFehyIiIk1AeTG0GppHVYCKiES4nJwckpKS6NGjB2bmdTgRxTlHfn4+OTk59OzZ0+twRESkCSgvhs4PyaO6BFdEJMIVFxeTmpqqJPsDmBmpqak6Si4i0oIoL4bOD8mjBy1AzexZM9tsZovqWG5m9rCZrTSzBWY2vAExN86CKfDAIJjYNvBzwZSQvbWISDhRkv3hmuqzM7NMM/vQzJaY2WIz+00tferMmWZ2qZmtCD4ubZKgDkZ5VERaKOXF0GnoZ12fM6DPAaMPsPxUoG/wcTXw9wZF8EMtmAJvXg8F6wEX+Pnm9UqeIiLilTLgt865AcCRwLVmNqBGn1pzppm1B/4IHAGMBP5oZu2aNVrlURER8cBBC1Dn3MfA1gN0GQu84ALmAG3NrHNTBVinGZOgtKh6W2lRoF1ERCKOc44f/ehH7NixY79lL730EkOGDGHw4MEcffTRzJ8/v3IdgIkTJ1a+3r59O4899ljlunl5eYwefaDjqE0W/0bn3NfB54XAUqBrjW515cxTgPedc1udc9uA9znwwd/GUx4VEWk269ev56STTmLAgAEMHDiQhx56qHLZc889x5o1aypzWFN68MEHeeGFFxoUT20xPffcc2zYsKFy+fnnn8+KFSuaJMamuAe0K7C+yusc9k+4AJjZ1WaWbWbZeXl5jXvXgpyGtYuISFibPn06Q4cOJTk5eb9lPXv25KOPPmLhwoX84Q9/4OqrrwYChem9995LcXEx99xzDy+99NJ+BWh6ejqdO3dm9uzZIdsXM+sBHAZ8UWNRXTmzXrlUeVREJDL4fD7uv/9+lixZwpw5c5g8eTKzZ8/myiuvZP369Xz66aeMHz++Sd+zrKyMZ599lgsvvLBe8SxZsoTc3NxaY6pZgP7qV7/innvuaZI4QzoIkXPuSedclnMuKz09vXEbS8loWLuIiDSbf/7zn4wcOZJhw4bxy1/+ki+++IIhQ4ZQXFzMrl27GDhwIIsWLWLWrFkcf/zxnH766fTr14/x48dTUVEBBIrJsWPH1rr9o48+mnbtAlekHnnkkeTkBIqkiy++mIyMDO699166devGxRdfzG233caqVasYNmwYN998MwA/+9nPeOmll0LwSYCZJQL/AW5wzu1/OrcRlEdFRCJD586dGT48cJt/UlIS/fv3Z/fu3dx1110888wzvPLKK/z974E7F1etWsXo0aMZMWIExx13HN9++y1lZWUcfvjhzJo1C4Df/e533H777QD06NGDW265hcGDBzNy5EhWrlwJwMyZMxk+fDg+3/4TndQWT25uLl27dt0vpqlTp5Kdnc1FF13EsGHDKCoq4rjjjuODDz6grKys0Z9NU0zDkgtkVnmdEWxrXqMmBO5VqXL5UFm0H9+oCc3+1iIi4er/vbmYJRuatOZhQJdk/jhmYJ3Lly5dyquvvsrs2bOJiYnhmmuuYdmyZZxxxhnccccdFBUVcfHFFzNo0CBmzZrFl19+yZIlS+jevTujR4/mtdde45xzzmH27Nk88cQTB43nmWee4dRTTwXgX//6F7m5udx8882sW7eOf/3rX9x9990sWrSIefPmVa6TlZXFHXfc0ejP4mDMLIZA8fmSc+61WrrUlTNzgRNrtM9qniiDasmjFb54opRHRaQF8SIv1rRmzRq++eYb+vXrxx133MEvfvELevbsybXXXsvf//53rr76ah5//HH69u3LF198wTXXXMPMmTN57rnnOOecc3jkkUd45513+OKLfRfVpKSksHDhQl544QVuuOEG3nrrLWbPns2IESPqHc8RRxzBhg0b+OMf/7hfTI8++ij33XcfWVlZ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\n",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6AAAAEYCAYAAABCw5uAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABVBklEQVR4nO3deXxU1f3/8dcnmSSTkAVIwpqwI7IjRNy30ipqkbrhXrUupWqt2q9Lq6X8sLbWpa5Y97rUqpRaRYsriAuKGpQdWWVJQAgBQoAkZDm/P2YISUggMcncmeT9fDzmkZlzz73zuTMJHz53Ocecc4iIiIiIiIg0tyivAxAREREREZHWQQWoiIiIiIiIhIQKUBEREREREQkJFaAiIiIiIiISEipARUREREREJCR8Xr1xWlqa69Gjh1dvLyIickBz587d4pxL9zqOuiiPiohIOKsrj3pWgPbo0YPs7Gyv3l5EROSAzGyt1zEciPKoiIiEs7ryqC7BFRERERERkZBQASoiIiIiIiIhoQJUREREREREQsKze0BFRKRplJaWkpOTQ3FxsdehRCS/309GRgYxMTFehyIiIk1AeTG0GppHVYCKiES4nJwckpKS6NGjB2bmdTgRxTlHfn4+OTk59OzZ0+twRESkCSgvhs4PyaO6BFdEJMIVFxeTmpqqJPsDmBmpqak6Si4i0oIoL4bOD8mjBy1AzexZM9tsZovqWG5m9rCZrTSzBWY2vAExN86CKfDAIJjYNvBzwZSQvbWISDhRkv3hmuqzM7NMM/vQzJaY2WIz+00tferMmWZ2qZmtCD4ubZKgDkZ5VERaKOXF0GnoZ12fM6DPAaMPsPxUoG/wcTXw9wZF8EMtmAJvXg8F6wEX+Pnm9UqeIiLilTLgt865AcCRwLVmNqBGn1pzppm1B/4IHAGMBP5oZu2aNVrlURER8cBBC1Dn3MfA1gN0GQu84ALmAG3NrHNTBVinGZOgtKh6W2lRoF1ERCKOc44f/ehH7NixY79lL730EkOGDGHw4MEcffTRzJ8/v3IdgIkTJ1a+3r59O4899ljlunl5eYwefaDjqE0W/0bn3NfB54XAUqBrjW515cxTgPedc1udc9uA9znwwd/GUx4VEWk269ev56STTmLAgAEMHDiQhx56qHLZc889x5o1aypzWFN68MEHeeGFFxoUT20xPffcc2zYsKFy+fnnn8+KFSuaJMamuAe0K7C+yusc9k+4AJjZ1WaWbWbZeXl5jXvXgpyGtYuISFibPn06Q4cOJTk5eb9lPXv25KOPPmLhwoX84Q9/4OqrrwYChem9995LcXEx99xzDy+99NJ+BWh6ejqdO3dm9uzZIdsXM+sBHAZ8UWNRXTmzXrlUeVREJDL4fD7uv/9+lixZwpw5c5g8eTKzZ8/myiuvZP369Xz66aeMHz++Sd+zrKyMZ599lgsvvLBe8SxZsoTc3NxaY6pZgP7qV7/innvuaZI4QzoIkXPuSedclnMuKz09vXEbS8loWLuIiDSbf/7zn4wcOZJhw4bxy1/+ki+++IIhQ4ZQXFzMrl27GDhwIIsWLWLWrFkcf/zxnH766fTr14/x48dTUVEBBIrJsWPH1rr9o48+mnbtAlekHnnkkeTkBIqkiy++mIyMDO699166devGxRdfzG233caqVasYNmwYN998MwA/+9nPeOmll0LwSYCZJQL/AW5wzu1/OrcRlEdFRCJD586dGT48cJt/UlIS/fv3Z/fu3dx1110888wzvPLKK/z974E7F1etWsXo0aMZMWIExx13HN9++y1lZWUcfvjhzJo1C4Df/e533H777QD06NGDW265hcGDBzNy5EhWrlwJwMyZMxk+fDg+3/4TndQWT25uLl27dt0vpqlTp5Kdnc1FF13EsGHDKCoq4rjjjuODDz6grKys0Z9NU0zDkgtkVnmdEWxrXqMmBO5VqXL5UFm0H9+oCc3+1iIi4er/vbmYJRuatOZhQJdk/jhmYJ3Lly5dyquvvsrs2bOJiYnhmmuuYdmyZZxxxhnccccdFBUVcfHFFzNo0CBmzZrFl19+yZIlS+jevTujR4/mtdde45xzzmH27Nk88cQTB43nmWee4dRTTwXgX//6F7m5udx8882sW7eOf/3rX9x9990sWrSIefPmVa6TlZXFHXfc0ejP4mDMLIZA8fmSc+61WrrUlTNzgRNrtM9qniiDasmjFb54opRHRaQF8SIv1rRmzRq++eYb+vXrxx133MEvfvELevbsybXXXsvf//53rr76ah5//HH69u3LF198wTXXXMPMmTN57rnnOOecc3jkkUd45513+OKLfRfVpKSksHDhQl544QVuuOEG3nrrLWbPns2IESPqHc8RRxzBhg0b+OMf/7hfTI8++ij33XcfWVlZlev16dOH+fPn1+s9DqQpCtBpwHVm9gqBwRMKnHMbm2C7BzZkXODnjEm4ghw2WRov+n/O/w0+F415JSISOjNmzGDu3LkcfvjhABQVFdGhQwcmTJjA4Ycfjt/v5+GHH67sP3LkSHr16gXABRdcwKeffso555zD1q1bSUpKOuB7ffjhhzzzzDN8+umnleubGRMnTuSWW27BOcfatWv3W69Dhw7VLiVqDhYYBvAZYKlz7m91dKs1Z5rZu8Cfqww8dDLwu2YNuEYe3ehS+SD9l/x8b7uIiDTazp07Ofvss3nwwQfp1q0bTz31FM899xzHHXccF198MTt37uSzzz7j3HPPrVynpKQEgIEDB3LJJZfw05/+lM8//5zY2NjKPhdccEHlzxtvvBGAjRs30r9//3rHk5ycTHJy8n4x1WVvLm32AtTMXiZwVDbNzHIIjNIXA+CcexyYDpwGrAR2A5c3KqKGGDIOhozDgJlfrGPyfxdyzOp8ju6dFrIQRETCSUOOyDYV5xyXXnopf/nLX6q1b9y4kZ07d1JaWkpxcTFt2rQB9h+ufe9rn89HRUUFUVFRTJ48maeeegoI3BvapUsXFixYwJVXXsnbb79NampqtXX3DkJU11DwxcXFxMfHN80O1+0Y4BJgoZnNC7b9HugGB86ZzrmtZnYn8FVwvUnOuQMNANg0quTRf/xvCc/OXsOPtu0mo11Cs7+1iEgoeJEX9yotLeXss8/moosu4qyzzqpsv+yyyyqfV1RU0LZt22pX7VS1cOFC2rZty+bNm6u1V813e5/Hx8dXzse5fv16xowZA8D48eMZP358nfHUjKkuTZVL6zMK7gXOuc7OuRjnXIZz7hnn3OPBREpwJL9rnXO9nXODnXPZjY7qBzhreFfSEmN56uPVXry9iEirNWrUKKZOnVqZHLdu3cratWv55S9/yZ133slFF13ErbfeWtn/yy+/5LvvvqOiooJXX32VY489FoB+/fqxenXg3/Brr72WefPmMW/ePLp06cK6des466yzePHFFznkkEMOGE9SUhKFhYXV2pYvX86gQYOacrf345z71Dlnzrkhzrlhwcf0+uZM59yzzrk+wcc/mjXYWlx+TM9AITp7TajfWkSkxXHOccUVV9C/f39uuummOvslJyfTs2dP/v3vf1eut3ek99dee42tW7fy8ccf8+tf/5rt27dXrvfqq69W/jzqqKMA6N+/f+X9oJmZmZV5dPz48fWOZ6/mzKUhHYSoOfljovn5UT34cFkeyzcVHnwFERFpEgMGDOBPf/oTJ598MkOGDOEnP/kJzz//PDExMVx44YXcdtttfPXVV8ycOROAww8/nOuuu47+/fvTs2dPzjzzTABOP/30ysEWapo0aRL5+flcc801DBs2rNo9KTWlpqZyzDHHMGjQoMpBiD788ENOP/30pt3xFqZL23jGDO3CK1+uo6Co1OtwREQi2uzZs3nxxReZOXMmw4YNY9iwYUyfPr3Wvi+99BLPPPMMQ4cOZeDAgbzxxhts2bKF2267jaeffppDDjmE6667jt/85jeV62zbto0hQ4bw0EMP8cADDwBw6qmn8vHHHzc6HgicER0/fnzlIESbNm0iPj6eTp06NeJTCbDmmH+mPrKyslx2dtOeLN22aw9H3T2DMUO6cO+5Q5t02yIi4Wrp0qUHvecjXMyaNYv77ruPt956a79lGzdu5Oc//znvv/9+k7/v8ccfzxtvvFE5km5NtX2GZjbXOVd3peux5sijSzbs4LSHP+HW0YfyqxN7N+m2RURCJZLy4g/Ro0cPsrOzSUvb/7bDM888k3vuuYe+ffs26Xs+8MADJCcnc8UVV9S6vCF5tMWcAQVo1yaWcVmZvD4vl007ir0OR0REGqBz585cddVV7NjRtKMV5uXlcdNNN9VZfMo+A7okc1zfNP4x+ztKysq9DkdERBro7rvvZuPGph8Ptm3btlx66aVNsq0WVYACXHlsL8ornO5hEREJQyeeeGKtZz/3GjduHMnJyU36nunp6fzsZz9r0m22ZFcd14vNhSW8Ma95Rw0WEZEfZs2aNbWe/YTAeArHH398k7/n5ZdfXuv8oj9EiytAu6UmcOqgzrz0xVp2ljR+olQREZHW5Li+aRzaKYmnPl5NRYU3t+mIiEjL1eIKUICrj+9FYXEZL83Zfy44ERERqZuZ8csTerFi805mfLv54CuIiIg0QIssQIdmtuXYPmk89cl3FJfqHhYREZGGGDOkC5nt43n0w5V4NVihiIi0TC2yAAW49qQ+bNlZwpTs9V6HIiIiElF80VGMP6E389dvZ/bKfK/DERGRFqTFFqBH9mrPiO7teOKj1ZSWV3gdjoiISEQ5Z0QGHZPjePTDFV6HIiIiLUiLLUDNjOtO6kPu9iJe/ybX63BERMLHginwwCCY2Dbwc8EUryOSMBTni+aq43oxZ/VW5q7d6nU4IiLNR3kxpFpsAQpwYr90BnRO5u+zVlGukfxERAJJ9c3roWA94AI/37y+0cl2zZo1DBo0qPL1fffdx8SJExsXq3juwiO60S4hhkdnrvQ6FBGR5tFMefG2225j8uTJla8nTpzIfffd18hgW4YWXYCaGdee1IfVW3bx9qKmn5BVRCTizJgEpUXV20qLAu0iNSTE+vjFMT35cFkeizcUeB2OiEjTa6a8eN555zFlyr4idsqUKZx33nmN2mZL0aILUIDRgzrRK70Nkz9cpZH8REQKchrWLq3ez4/uQVKcj8c+XOV1KCIiTa+Z8uJhhx3G5s2b2bBhA/Pnz6ddu3ZkZmY2apstRYsvQKOjjGtO7MPSjTv4cJnmMxORVi4lo2Ht9eTz+aio2DfgW3FxcaO2J+EjJT6GS47qzvRFG1m5eafX4YiINK1myosA5557LlOnTuXVV1/V2c8qWnwBCjB2WBcy2sXz6EzNZyYirdyoCRATX70tJj7Q3ggdO3Zk8+bN5OfnU1JSwltvvdWo7Ul4ueLYnsT5ovj7LJ0FFZEWppnyIgQuw33llVeYOnUq5557bqO311K0igI0JjqKX57Qm6/XbeezVZrPTERasSHjYMzDkJIJWODnmIcD7Y0QExPDhAkTGDlyJD/5yU849NBDmyZeCQupiXFcMLIbr8/LZV3+bq/DERFpOs2UFwEGDhxIYWEhXbt2pXPnzo2PtYXweR1AqJw7IoPJM1fy4AfLObp3KmbmdUgiIt4YMq5JEmtN119/Pddff32Tb1fCw/gTevPSF+t49MMV3HPOUK/DERFpOs2UFwEWLlzYLNuNZK3iDCiAPyaaa0/qzVdrtvHpyi1ehyMiIhJROib7uXBkN/7zdS5rtuzyOhwREYlQraYABRh3eCZdUvw88P5y3QsqIiJNysyeNbPNZraojuU3m9m84GORmZWbWfvgsjVmtjC4LDu0kdffNSf2xhdlPKJ5QUVE5AdqVQVonC+aa3/Uh4yctyi5dwBMbAsPDGr0RLMiIl7TQbUfrgk/u+eA0Qd4n3udc8Occ8OA3wEfOee2VulyUnB5VlMF1NQ6JPu5+MjulM9/hdL7lUdFRKThWs09oHudFzeHs2Kfwb+7JNBQsB7eDN6z1EzXfouINCe/309+fj6pqbq/vaGcc+Tn5+P3+5tiWx+bWY96dr8AeLnRb+qB33SYR4zvaWIK9wQalEdFRKQBWl0B6vvwTnyUVG8sLYIZk5Q4RSQiZWRkkJOTQ15entehRCS/309GRuPne6svM0sgcKb0uirNDnjPzBzwhHPuyTrWvRq4GqBbt27NHWqtkmf/GWxP9UblURERqadWV4BSkNOwdhGRMBcTE0PPnj29DkPqbwwwu8blt8c653LNrAPwvpl965z7uOaKwcL0SYCsrCxvrrtWHhURkUZoVfeAApBSx1HuutpFRESa1vnUuPzWOZcb/LkZ+C8w0oO46kd5VEQk5EpKSjjvvPPo06cPRxxxBGvWrNmvz/r16znppJMYMGAAAwcO5KGHHgp9oPXQ+grQURMgJr5ak4uJD7SLiIg0IzNLAU4A3qjS1sbMkvY+B04Gah1JNyzUkkdRHhURaVbPPPMM7dq1Y+XKldx4443ceuut+/Xx+Xzcf//9LFmyhDlz5jB58mSWLFniQbQH1voK0CHjYMzDkJKJw8ipSGPBYbpvRUREGsfMXgY+B/qZWY6ZXWFm481sfJVuZwLvOeeqTqTZEfjUzOYDXwL/c869E7rIG6hmHnVp5B73V+VREZGg2267jcmTJ1e+njhxIvfdd1+jtvnGG29w6aWXAnDOOecwY8aM/UZx79y5M8OHDwcgKSmJ/v37k5ub26j3bQ6t7x5QCCTJIeMoL6/gsoc+gW/hnVMq8EW3vnpcRESahnPugnr0eY7AdC1V21YDQ5snqmYSzKM7dpdy2j0zOXx1e5453uugRET2d8MNNzBv3rwm3eawYcN48MEH61x+3nnnccMNN3DttdcCMGXKFN599939+h133HEUFhbu137ffffx4x//uFpbbm4umZmZQOBMZ0pKCvn5+aSlpdUaw5o1a/jmm2844ogj6rtbIdM6C9AgX3QU/3dyP8b/cy6vfZ3LuMMzvQ5JREQkYqQkxDD+xN7c884yvlqzlcN7tPc6JBERzx122GFs3ryZDRs2kJeXR7t27SqLx6o++eSTZnn/nTt3cvbZZ/Pggw+SnJzcLO/RGK26AAU4ZWBHhmW25YEPlnPGsC74Y6K9DklERCRiXH50T56bvYa/vv0t/x5/lOaiFZGwcqAzlc3p3HPPZerUqXz//fecd955tfZpyBnQrl27sn79ejIyMigrK6OgoIDU1NT91i0tLeXss8/moosu4qyzzmqanWlirb4ANTNuHX0oFzw1hxc/X8tVx/fyOiQREZGIER8bzW9+3Jfb/7uImd9uZlT/jl6HJCLiufPOO4+rrrqKLVu28NFHH9XapyFnQM844wyef/55jjrqKKZOncqPfvSj/Q74Oee44oor6N+/PzfddFOj4m9OuukROKp3Kscfks7kWSvZUVzqdTgiIiIRZVxWJj1SE7jnnWWUV3gzPamISDgZOHAghYWFdO3alc6dOzd6e1dccQX5+fn06dOHv/3tb9x9990AbNiwgdNOOw2A2bNn8+KLLzJz5kyGDRvGsGHDmD59eqPfu6m1+jOge91ySj9++sinPPXxan57cj+vwxEREYkYMdFR/Pbkfvz65W94Y14uZw3XnKAiIgsXLmyybfn9fv7973/v196lS5fKIvPYY4/db2TccKQzoEGDuqYwZmgXnv7kOzYXFnsdjoiISEQ5fXBnBnVN5m/vL6ekrNzrcEREJEypAK3itz85hNLyCh6dudLrUERERCJKVJRxyymHkrOtiJe/WOd1OCIiEqbqVYCa2WgzW2ZmK83stlqWdzOzD83sGzNbYGanNX2oza9HWhvOOzyTf32xjrX5uw6+goiIiFQ6rm8aR/VK5ZGZK9lZUuZ1OCLSikXCpagtRUM/64MWoGYWDUwGTgUGABeY2YAa3e4ApjjnDgPOBx5rUBRh5Dej+hITHcU97yzzOhQREZGIYmbceuqh5O/awxMfrfI6HBFppfx+P/n5+SpCQ8A5R35+Pn6/v97r1GcQopHASufcagAzewUYCyyp+t7A3llOU4AN9Y4gzHRI9vPLE3rx4AcruHzNVrI0qbaIiEi9DctsyxlDu/Dkx6u5YGQ3urSN9zokEWllMjIyyMnJIS8vz+tQWgW/309GRv0Hn6tPAdoVWF/ldQ5wRI0+E4H3zOzXQBvgx0Swq4/vxctfruPO/y3lv786mqgoTaotIiJSX7eM7sc7i7/n3neX8cB5w7wOR0RamZiYGHr27Ol1GFKHphqE6ALgOedcBnAa8KKZ7bdtM7vazLLNLDucj0gkxPq4+ZRDmb9+O28uiNiTuSIiIp7IaJfAlcf25L/f5LIgZ7vX4YiISBipTwGaC2RWeZ0RbKvqCmAKgHPuc8APpNXckHPuSedclnMuKz09/YdFHCJnHdaVgV2SueedZRSXajh5ERGRhvjVib1JS4zlT28t1X1YIiJSqT4F6FdAXzPraWaxBAYZmlajzzpgFICZ9SdQgIbvKc56iIoybj+9P7nbi3h29ndehyMiIhJRkvwx3PiTQ/hyzVbeXbzJ63BERCRMHLQAdc6VAdcB7wJLCYx2u9jMJpnZGcFuvwWuMrP5wMvAZa4FHO48uncaP+7fkcc+XMWWnSVehyMiIhJRzsvKpG+HRO5+eyl7yiq8DkdERMJAve4Bdc5Nd84d4pzr7Zy7K9g2wTk3Lfh8iXPuGOfcUOfcMOfce80ZdCj97rRDKS4t54H3l3sdioiISETxRUdx++n9WZO/mxfnrPU6HBERCQNNNQhRi9U7PZGLj+zOy1+uY9n3hV6HIyIiElFO7NeB4/qm8dAHy9m2a4/X4YiIiMdUgNbDb0b1ZVzcHNo/NRw3sS08MAgWTPE6LBERkYhwx+kD+FHZR/DgIFAeFRFp1VSA1kO7Va/zp6gnSS/fjOGgYD28eb2Sp4iIVDKzZ81ss5ktqmP5iWZWYGbzgo8JVZaNNrNlZrbSzG4LXdSh0W/z29wT8zTtSjeB8qiISKumArQ+ZkzCV1Fcva20CGZM8iYeEREJR88Bow/S55PgWAnDnHOTAMwsGpgMnAoMAC4wswHNGmmozZhErKsxmJ/yqIhIq6QCtD4KchrWLiIirY5z7mNg6w9YdSSw0jm32jm3B3gFGNukwXlNeVRERIJUgNZHSkbD2kVERGp3lJnNN7O3zWxgsK0rsL5Kn5xgW8uhPCoiIkEqQOtj1ASIia/WVGJxgXYREZH6+Rro7pwbCjwCvN7QDZjZ1WaWbWbZeXl5TR1f86klj+6J8iuPioi0QipA62PIOBjzMKRkAkZhXGduLrmCD+NO9DoyERGJEM65Hc65ncHn04EYM0sDcoHMKl0zgm21beNJ51yWcy4rPT292WNuMjXy6LaYjty65wpWdjrN68hERCTEfF4HEDGGjAs8gNiychY9+AkL31zC0b1TifNFexyciIiEOzPrBGxyzjkzG0ngIHA+sB3oa2Y9CRSe5wMXehZoc6mSR8t3lvDBfbPY8uZiXvjFSMzM4+BERCRUdAb0B4jzRTNhzAC+27KLpz/5zutwREQkDJjZy8DnQD8zyzGzK8xsvJmND3Y5B1hkZvOBh4HzXUAZcB3wLrAUmOKcW+zFPoRKWmIcN/3kED5ZsYV3Fn3vdTgiIhJCOgP6A53YrwOnDurEwzNW8NMhneme2sbrkERExEPOuQsOsvxR4NE6lk0HpjdHXOHqkiO78+/sHCa+uZhj+6aR5I/xOiQREQkBnQFthD+OGUhMdBR/eGMxzjmvwxEREYkYvugo/nzWYDYXlnD/e8u9DkdEREJEBWgjdErx89uTD+Hj5Xm8tWCj1+GIiIhElGGZbbnkyO48//kaFuRs9zocEREJARWgjfTzo3owuGsK/+/NJRQUlXodjoiISET5v1P6kZ4Yx+//u5Cy8gqvwxERkWamArSRoqOMv5w1mK27Srj33W+9DkdERCSiJPtjmDBmAItyd/D852u9DkdERJqZCtAmMKhrCpce3YOXvljH1+u2eR2OiIhIRDl9cGdO7JfO395bxsaCIq/DERGRZqQCtIn89uR+dEzy8/vXFlKqS4hERETqzcy4c+wgyp1j4rQWPQONiEirpwK0iSTG+Zh4xkC+/b6QZz7V3KAiIiINkdk+getH9eXdxZt4d7HmBhURaalUgDahUwZ25JSBHfnb+8tZlbfT63BEREQiylXH9WJA52TueH0RBbs1sJ+ISEukArQJ7b2EKD4mmlunLqCiQnODioiI1FdMdBT3nDOErbv2cOf/lngdjoiINAMVoE2sQ7KfCT8dQPbabbzw+RqvwxEREYkog7qmMP6EXkydm8OsZZu9DkdERJqYCtBmcNbwrpzYL52/vrOM9Vt3ex2OiIhIRPn1j/rSp0Miv39tIYXFuhRXRKQlUQHaDMyMP585mDFRn+KfPBQ3sS08MAgWTPE6NBERkbDnj4nmnnOGcPjODyi7fyAoj4qItBg+rwNoqbqse5M/Rz+Fr7w40FCwHt68PvB8yDjvAhMREYkAw7e/z6C4Z4ktVR4VEWlJdAa0ucyYhK+iuHpbaRHMmORNPCIiIpFkxiRilUdFRFocFaDNpSCnYe0iIiKyj/KoiEiLpAK0uaRkNKxdRERE9lEeFRFpkVSANpdREyAmvlpTkYtl08hbPApIREQkgtSWR4lj93G3exSQiIg0BRWgzWXIOBjzMKRkAkZ5UgaTbDxXz+tNWXmF19GJiIiEtxp5dE9iV35fdiW3rTjU68hERKQRNApucxoyrnKkvmjgmAUbePlf3/DYrFVcP6qvt7GJiIiEuyp5NBboNWMF97+/nJ8M6MiYoV28jU1ERH4QnQENoZ8O6cIZQ7vw8IwVLMwp8DocERFpQmb2rJltNrNFdSy/yMwWmNlCM/vMzIZWWbYm2D7PzLJDF3Vk+dWJvRmW2ZY7Xl/E9wXFB19BRETCjgrQELtz7CDSEuO44dVvKC4t9zocERFpOs8Bow+w/DvgBOfcYOBO4Mkay09yzg1zzmU1U3wRzxcdxd/GDaWkrJxb/rMA55zXIYmISAOpAA2xlIQY7j13CKvydvGX6Uu9DkdERJqIc+5jYOsBln/mnNsWfDkH0HCuP0Cv9ERuP60/Hy/P4/nP1ngdjoiINJAKUA8c1zedXxzTk+c/X8sHSzZ5HY6IiITeFcDbVV474D0zm2tmV9e1kpldbWbZZpadl5fX7EGGq4uP7M6PDu3An9/+liUbdngdjoiINIAKUI/cemo/BnZJ5uap83Ufi4hIK2JmJxEoQG+t0nysc244cCpwrZkdX9u6zrknnXNZzrms9PT0EEQbnsyMe88ZQtv4GH798tfs3lPmdUgiIlJP9SpAzWy0mS0zs5VmdlsdfcaZ2RIzW2xm/2raMFueOF80j1xwGCVlFdzw6jeUV+g+FhGRls7MhgBPA2Odc/l7251zucGfm4H/AiO9iTBypCbG8cB5w1i9ZReT3lzidTgiIlJPBy1AzSwamEzgqOwA4AIzG1CjT1/gd8AxzrmBwA1NH2rL0ys9kf93xkDmrN7K32et9DocERFpRmbWDXgNuMQ5t7xKexszS9r7HDgZqHUkXanumD5p/OqE3rzy1XreWrDB63BERKQe6nMGdCSw0jm32jm3B3gFGFujz1XA5L2DKwSP4Eo9nDMigzOGduGBD1Ywd22dY1eIiEiYM7OXgc+BfmaWY2ZXmNl4Mxsf7DIBSAUeqzHdSkfgUzObD3wJ/M85907IdyBC3fiTQzisW1t+99pC1m/d7XU4IiJyEPUpQLsC66u8zgm2VXUIcIiZzTazOWZW6zD0Gjxhf2bGXWcOoktbP9e/PI+ColKvQxIRkR/AOXeBc66zcy7GOZfhnHvGOfe4c+7x4PIrnXPtglOtVE63EjzAOzT4GOicu8vbPYksMdFRPHz+YeDgN698Q1l5hdchiYjIATTVIEQ+oC9wInAB8JSZta3ZSYMn1C7JH8PD5x/Gph3F3Pzv+ZrXTEREpAEy2yfw57MG8/W67dz33vKDryAiIp6pTwGaC2RWeZ0RbKsqB5jmnCt1zn0HLCdQkEo9HdatHbedeijvLdnE059853U4IiIiEWXM0C5ceEQ3Hv9oFe9rijMRkbBVnwL0K6CvmfU0s1jgfGBajT6vEzj7iZmlEbgkd3XThdk6XHFsT0YP7MTi956m5N4BMLEtPDAIFkzxOjQREZGwN+GnAxjUNZkPpjxC2f0DlUdFRMKQ72AdnHNlZnYd8C4QDTzrnFtsZpOAbOfctOCyk81sCVAO3Fx1eHmpHzPjbwOWE7XqaeJ2lQQaC9bDm9cHng8Z511wIiIiYc4fE83zWWtJePcJfIV7Ao3KoyIiYeWgBSiAc246ML1G24Qqzx1wU/AhjZDw8V1ASfXG0iKYMUmJU0RE5CBS59wN7KneqDwqIhI2mmoQImkqBTkNaxcREZF9lEdFRMKaCtBwk5LRsHYRERHZR3lURCSsqQANN6MmQEx8taYiYskbeatHAYmIiESQWvJoMXHsOu73HgUkIiJVqQANN0PGwZiHISUTMMqSMpjEeC74ohuFxaVeRyciIhLeauTRkjZd+V3ZlYyf35uy8gqvoxMRafXqNQiRhNiQcZUDJfiAMau2MOWZL7nx1fk8eckIoqLM2/hERETCWZU8Ggcc+dU6bv3PQv76zrfcfvoAb2MTEWnldAY0AhzdO40/nN6fD5Zu4sEPlnsdjoiISEQ57/BuXHpUd5765Dte+1qDEYmIeEkFaIS49OgejMvK4OGZK5m+cKPX4YiIiESUO346gCN7tee21xYyf/12r8MREWm1VIBGCDPjzp8N4rBubfntlPks3bjD65BEREQiRkx0FI9dNIL0xDiufjGbzTuKvQ5JRKRVUgEaQeJ80Txx8QiS431c9UI2W3ftOfhKIiIiAkD7NrE89fMsdhSVMf6fcykpK/c6JBGRVkcFaITpkOzniUuy2FxYwtUvZFNcquQpIiJSXwO6JHP/uKF8vW47t05dgHPO65BERFoVFaARaFhmW+4/dyjZa7dxi5KniIhIg5w2uDP/d/IhvD5vAw9+sMLrcEREWhVNwxKhxgztwrqtu7n33WX0SE3gppP7eR2SiIhIxLj2pD6syd/NQzNW0CMtgTMPy/A6JBGRVkEFaAS75sTerM3fxcMzV9IttQ3njFDyFBERqQ8z489nDiZ3WxG3TF1Al5R4juiV6nVYIiItni7BjWBmxl1nDuaYPqnM/u9jFN/bHya2hQcGwYIpXocnItKqmNmzZrbZzBbVsdzM7GEzW2lmC8xseJVll5rZiuDj0tBF3brF+qJ4/OIRdGufwH9feJDS+wYoj4qINDOdAY1wMdFRPDXsO6Jynsa/qyTQWLAe3rw+8HzIOO+CExFpXZ4DHgVeqGP5qUDf4OMI4O/AEWbWHvgjkAU4YK6ZTXPObWv2iIWUhBhePSqHNu89TszO4OjyyqMiIs1GZ0BbgIRP7sJPSfXG0iKYMcmbgEREWiHn3MfA1gN0GQu84ALmAG3NrDNwCvC+c25rsOh8Hxjd/BHLXmlf3E08NaY2Ux4VEWkWKkBbgoKchrWLiIgXugLrq7zOCbbV1b4fM7vazLLNLDsvL6/ZAm11lEdFREJGBWhLkFL74EMVybX+/0VERCKUc+5J51yWcy4rPT3d63BajjryqKujXUREfjgVoC3BqAkQE1+tabeL5Vn/JZRXaI5QEZEwkQtkVnmdEWyrq11CpY48Oi31Co8CEhFpuVSAtgRDxsGYhyElEzBIyeTLwRP507rB3PH6IpxTESoiEgamAT8PjoZ7JFDgnNsIvAucbGbtzKwdcHKwTUKlRh51KZn8r8fv+M2SQ3jq49VeRyci0qJoFNyWYsi4aiP1nQhck/gtj81aRXpiLDed3M+z0EREWgMze5nAP79pZpZDYGTbGADn3OPAdOA0YCWwG7g8uGyrmd0JfBXc1CTn3IEGM5LmUCWPGnBWhWPWy99w1/SlpCbGctZwXY4rItIUVIC2YDef0o/8nXt4eOZKkuNjuPK4Xl6HJCLSYjnnLjjIcgdcW8eyZ4FnmyMu+WGio4y/nTeU7UV7uHnqAhLjfJw8sJPXYYmIRDxdgtuCmRl3nTmI0wZ34k//W8o/56z1OiQREZGIEeeL5olLshjcNYXr/vUNHy3XyMMiIo2lArSF80VH8eB5hzHq0A7c8foips7VkPIiIiL1lRjn4/nLR9KnQyJXv5DN56vyvQ5JRCSiqQBtBWJ9UUy+aDjH9knjlqnzeWvBBq9DEhERiRgpCTH888oj6NY+gSue/4q5a7d5HZKISMRSAdpK+GOiefLnI8jq3p4bXpnH+0s2eR2SiIhIxGjfJpaXrjyCjsl+LvvHlyzKLfA6JBGRiKQCtBVJiPXxzGVZDOyawrUvfa17WURERBqgQ7Kfl648gmR/DJc88wXffr/D65BERCKOCtBWJskfwwvBe1neePFBiu/pDxPbwgODYMEUr8MTEREJa13axvPyVUcS54vmhSfuZc99A5RHRUQaQNOwtEIpCTH8+5j1RL/1FP7dJYHGgvXw5vWB51XmExUREZHquqUm8OaJG0h87wlidyqPiog0hM6AtlJtPvkzfkqqN5YWwYxJ3gQkIiISQdK/+CvxyqMiIg2mArS1KqhjOpa62kVERGQf5VERkR9EBWhrlZJRa/Pu+M4hDkRERCQC1ZFHS9p0CXEgIiKRRQVoazVqAsTEV2sqJo7f7/gZU7LXexSUiIhIhKgjj95ReCazV27xKCgRkfCnArS1GjIOxjwMKZmAQUomdsbD5Pf6GbdMXcDTn6z2OkIREZHwVUseLTn1ARa2P4XL//EV7yz63usIRUTCkjnnPHnjrKwsl52d7cl7S91Kysq58dV5TF/4Pded1IffnnwIZuZ1WCIiIWdmc51zWV7HURfl0fBUsLuUy5/7knnrt3P3WUMYd3im1yGJiHiirjxarzOgZjbazJaZ2Uozu+0A/c42M2dmYZuw5cDifNE8csFwzj88k0c/XMkf3lhERYU3BylEREQiTUpCDP+88giO6ZPGLf9ZwFMf64oiEZGqDlqAmlk0MBk4FRgAXGBmA2rplwT8BviiqYOU0IqOMv5y1mDGn9Cbf85Zx29enceesgqvwxIREYkICbE+nr40i9MHd+au6Uu5991v8eqKMxGRcOOrR5+RwErn3GoAM3sFGAssqdHvTuCvwM1NGqF4wsy47dRDSYmP4a/vfMuOolIeu2g4beLq8ysjIiLSusX5onn4gsNIjvcx+cNVbN1Vyp1jB+KL1vAbItK61edfwa5A1WFRc4JtlcxsOJDpnPvfgTZkZlebWbaZZefl5TU4WAm9X53Ym7vPGsynK7dw3pOfs3lHsdchiYiIRIToKOPPZw7mmhN78/KX67jqhWx2lZR5HZaIiKcafRjOzKKAvwG/PVhf59yTzrks51xWenp6Y99aQuT8kd14+tIsVuft4szHPmPjJy/AA4NgYtvAzwVTvA5RREQkLJkZt4w+lLvOHMRHy/M478nPKfjiJeVREWm16lOA5gJVh3DLCLbtlQQMAmaZ2RrgSGCaBiJqWU7q14EpvzyKk/bMou2M30LBesAFfr55vZKniLR6Bxuwz8weMLN5wcdyM9teZVl5lWXTQhq4hMRFR3Tn6UuzODTvHWLfvlF5VERarfrc0PcV0NfMehIoPM8HLty70DlXAKTtfW1ms4D/c85pbPgWZlDXFCa2+Q++wj3VF5QWwYxJgTnRRERaoSoD9v2EwK0qX5nZNOdc5XgJzrkbq/T/NXBYlU0UOeeGhShc8ciPDu3Iscn/JXZnSfUFyqMi0ooc9Ayoc64MuA54F1gKTHHOLTazSWZ2RnMHKOHFV5hb+4KCnNAGIiISXioH7HPO7QH2DthXlwuAl0MSmYSV2J0bal+gPCoirUS9hjR1zk0Hptdom1BH3xMbH5aErZSM4GVD1VUkd238DcUiIpGrtgH7jqito5l1B3oCM6s0+80sGygD7nbOvV7HulcDVwN069at8VFL6NWRR11KBuZBOCIioaaaQRpm1ASIia/WtNvF8rfy89lYUORRUCIiEeV8YKpzrrxKW3fnXBaBW1weNLPeta2owfxagDry6JMxF1NYXOpRUCIioaMCVBpmyDgY8zCkZAIGKZmsPurPPLdzJGMemc3X67Z5HaGIiBcONmBfVedT4/Jb51xu8OdqYBbV7w+VlqSWPDp36P/j3g1DOPOxz1izZZfXEYqINCtzznnyxllZWS47W+MUtRTLNxVy5fPZfF9QzF/OGszZIzK8DklEpFHMbG7wrGR9+vqA5cAoAoXnV8CFzrnFNfodCrwD9HTBBGxm7YDdzrkSM0sDPgfGVh3AqDbKoy3LZ6u2cM1LX+McPHbRcI7pk3bwlUREwlhdeVRnQKVJHNIxiTeuPYYR3dvx23/PZ9KbSygtr/A6LBGRkGjAgH3nA6+46kd/+wPZZjYf+JDAPaAHLD6l5Tm6dxrTrj2Wjslx/PzZL3n6k9V4dZJARKQ56QyoNKnS8gru+t9SnvtsDVnd2zH5ouF0TPZ7HZaISIM15AyoF5RHW6bC4lJ+O2U+7y3ZxOmDO/PXc4aQGFevMSNFRMKKzoBKSMRERzHxjIE8dP4wFm/YwekPf8qc1flehyUiIhIRkvwxPHHJCG479VDeXrSRsY9+yopNhV6HJSLSZFSASrMYO6wrb1x3DMl+Hxc9/QUzpjyCe2AQTGwLDwyCBVO8DlFERCQsmRnjT+jNS1ceSUFRKWMnz2buW08E8qfyqIhEOBWg0mwO6ZjEG9cdw+0ZCzlq8SSsYD3gAvOfvXm9kqeIiMgBHNU7lbd+fRxXtc2m/1d3BOcPVR4VkcimAlSaVZI/hstLXiTB9lRfUFoEMyZ5E5SIiEiE6JTi5wZ7WXlURFoMFaDS7Kwgp9Z2V0e7iIiI7GMFdUwpqzwqIhFIBag0v5Ta5wTdEp3O5h3FIQ5GREQkwtSRR7f6OrCzpCzEwYiINI4KUGl+oyZATHy1prJoP3eXjuPUhz7hw2WbPQpMREQkAtSSR0uj/EwqOpufPvwJC3MKPApMRKThVIBK8xsyDsY8DCmZgEFKJr6xj/Cr624jPSmOy//xFROnLaZoT7nXkYqIiISfWvJozM8e4cIrb6akrIKz/j6bx2atpLzCm7ndRUQawpzz5h8rTaAtAMWl5fz1nW/5x+w19Eprw/3jhnJYt3ZehyUiUucE2uFCeVQAtu/ew+//u5DpC79neLe23D9uGD3T2ngdlohInXlUZ0DFU/6YaP44ZiD/uuoISsoqOPvvn3Hvu9+yp6zC69BERETCXtuEWCZfOJyHzh/Gys07Oe2hT3jh8zVU6GyoiIQpFaASFo7uncY7NxzHOSMymPzhKsZOns3SjTsCc5xp4m0REZE6mRljh3XlvRtP4PCe7ZnwxmJ+/uyXbJvzT+VQEQk7KkAlbCT5Y7jnnKE8/fMs8gpLeHLy3ZS+/mtNvC0iIlIPnVL8PH/54dx15iA6r5uG/50blUNFJOyoAJWw8+MBHXnvxuO5wz+VmIoa07Ro4m0REZE6mRkXHdGdv6T8l3j2VF+oHCoiYcDndQAitWnfJhbK6pieRRNvi4iIHJCvcEOt7a4gBwtxLCIiVekMqISvOibeLk7oHOJAREREIkwdOTQvKo1FuZo3VES8owJUwlctE28XE8ct23/GTa/OI6+wxKPAREREwlwtObQs2s9D7kLGTp7Nn6cvZVdJmUfBiUhrpgJUwlctE29HjX2Y7idexpsLNvCj+2fx3OzvKCvXlC0iIiLV1JJDfWMf4Zab/8A5wzN48uPVjLr/I95asAGv5oQXkdbJvPpHRxNoS2OsytvJxGmL+WTFFg7tlMSdPxvE4T3aex2WiLQgdU2gHS6UR6Ux5q7dxoQ3FrF4ww6O7p3KpLED6dMhyeuwRKQFqSuP6gyoRKTe6Ym88IuR/P2i4ewoKuXcxz/npinBy3I1d6iIeMDMRpvZMjNbaWa31bL8MjPLM7N5wceVVZZdamYrgo9LQxu5tEYjurdj2nXHcufYgSzKLWD0g5/wl+lL2VlSpjwqIs1Ko+BKxDIzTh3cmRP6pfPozJU89clqYhZP5U/RT+2bvmXvvGcQuBxJRKQZmFk0MBn4CZADfGVm05xzS2p0fdU5d12NddsDfwSyAAfMDa67LQShSysWHWVcclQPTh3cmXve+ZYnPl5N0dxXmMDj+MqVR0WkeegMqES8hFgft4w+lHduOJ6bfa9q7lAR8cJIYKVzbrVzbg/wCjC2nuueArzvnNsaLDrfB0Y3U5wi+0lLjOOec4byn18dzXXupX3F517KoyLShFSASovROz2RtPK82hdq7lARaV5dgfVVXucE22o628wWmNlUM8ts4LoizWpE93akV2ypfaHyqIg0ERWg0rLUMe/ZVl8HNmwvCnEwIiLVvAn0cM4NIXCW8/mGbsDMrjazbDPLzsur44CbSCNYHXl0e2xHCnaXhjgaEWmJVIBKy1LLvGelUX7+VHIuJ903i7v+t4Stu/Z4FJyItGC5QGaV1xnBtkrOuXzn3N4JjJ8GRtR33SrbeNI5l+Wcy0pPT2+SwEWqqSWP7rE4Ju46i+Pumcljs1aye4/mDxWRH04FqLQstcx7FvOzR/jtb+9gzNAuPPPpdxz315n87f3l7CjWkVwRaTJfAX3NrKeZxQLnA9OqdjCzzlVengEsDT5/FzjZzNqZWTvg5GCbSOjVkkdjz3yUX173Ow7v0Z573lnG8ffM4vnP1lBSVu51tCISgTQPqLQqKzcX8rf3lzN94fe0TYjhVyf05udH9SD+2/8EBlgoyAlcxjtqgkb7E2nlGjoPqJmdBjwIRAPPOufuMrNJQLZzbpqZ/YVA4VkGbAV+5Zz7NrjuL4DfBzd1l3PuHwd7P+VR8cLctVu5551lfPHdVrq2jec3P+7LWYd1xbd4qvKoiFRTVx5VASqt0qLcAu57bxmzluVxScIX/JEn8FUdPTcmPnAEWMlTpNVqaAEaasqj4hXnHJ+u3MK97y5jQU4BV6Zkc1vZY9VHz1UeFWn1VICK1OLL77bS88UjSK/YvP/ClEy4cVHogxKRsKACVOTAnHO8u3gTh/3nWDq6WgbFUh4VadXqyqO6B1RatZE925NWUftIkk5DzouIiNTJzBg9qBMdXO1TtyiPikht6lWAmtloM1tmZivN7LZalt9kZkuCc5vNMLPuTR+qSPOoa8j5jaTy8IwVFBRpsCIREZG61JVHN5HGi5+vobhUgxWJyD4HLUDNLBqYDJwKDAAuMLMBNbp9A2QF5zabCtzT1IGKNJtahpyviI7nf2lX8bf3l3PM3TO5639LNI+oiIhIbWrJo+XRfl5Ovow/vLGYY//6IY/OXME2TYMmIoCvHn1GAiudc6sBzOwVYCywZG8H59yHVfrPAS5uyiBFmtXeARKqjN4XNWoCVw0ZxzEbdvDEx6t4dvYanp29hp8O6cxVx/ViUNeUwDoLpmjUPxERad1qyaPRoyZww+BzOWJ1Pk98tJr73lvO5A9XcW5WBlcc25PuqW2UQ0VaqYMOQmRm5wCjnXNXBl9fAhzhnLuujv6PAt875/5Uy7KrgasBunXrNmLt2rWNDF8kNHK3F/Hc7O94+cv17Cwp46heqdzRbSED5v4BK61yZlSj/om0GBqESKTpLPu+kKc/Wc3r83Ipq3DckbmIy/IfILpcOVSkpQrJIERmdjGQBdxb23Ln3JPOuSznXFZ6enpTvrVIs+raNp7bTx/AZ7/7Eb8/7VDW5O8i5bO7qxefAKVFgaO5IiIiUqlfpyTuPXcos2/9Edec2JtTNz9ZvfgE5VCRVqI+BWgukFnldUawrRoz+zFwO3CGc66kacITCS/J/hiuPr43H99yEl2j8mvvpFH/REREatUh2c/NpxxKZ2rPoRo5V6Tlq08B+hXQ18x6mlkscD4wrWoHMzsMeIJA8VnLhIoiLUtMdFSdo/7lRafz7uLvKSuvCHFUIiIikaGuHLrBpfKrf87ls1Vb8GquehFpXgctQJ1zZcB1wLvAUmCKc26xmU0yszOC3e4FEoF/m9k8M5tWx+ZEWo5aRv0rjfLzKBfyyxfncvw9H/LIjBVsLNDouSIiItXUNgK9L57s3tfx+ep8LnzqC05+4GOem/0d23dr9FyRluSggxA1Fw2eIC1CLSP4lQ08hxnfbubFz9fy6cotRBkcf0g652VlMqp/R2KXTNWofyIRQIMQiTSzOkbBLS4tZ9r8DfxzzloW5BQQ64vilIGdOC8rk6N7pxK16N/KoyIRoK48qgJUpBmty9/NlOz1TJ2bw/c7irkofg5/tCeJrSje10mj/omEJRWgIt5bvKGAKV+t5/V5GygoKuWypC+5vfxxYpRHRcKeClARD5VXOD5enseQqceQWlbLbdIpmXDjotAHJiJ1UgEqEj6KS8t5d/H3HP3miaSXK4+KRIKQTMMiIrWLjjJOOrQDqWV5tS53BTn8b8FGikvLQxyZiIhI+PPHRDN2WFfSy+vOox8tz9MAgCIRwOd1ACKtSkoGFKzfr/l7Urn2X1+TFOdj9KBO/OywrhzZK5XoKAt0qOM+GRERkValjjy6kVQuffZL0hLj+OmQzpx5WFeGZKRgpjwqEm5UgIqE0qgJ8Ob1gcm294qJp+NP/8JLbY7gv9/k8vai7/n33Bw6Jsdx+uAuXJwwh55zfo/tXadgfWAboOQpIiKtSx15NP30u3jcN4I35uXyry/X8dxna+iZ1oafDunM+f45dPnkVuVRkTChe0BFQu0gR2GLS8uZsXQzr8/L5aPlecyMuo6MqC37b0f3u4g0K90DKhKmDpJHC4pKeWfRRt6Yt4E5q/P5OOZ65VERD2gQIpEIVFhcSuLd6Rj7/506jPI/bMUXrVu5RZqDClCRyJe/s4T293WsM4+6CduI2nu7i4g0KQ1CJBKBkvwxWEpGrctyK1IZ8acP+M0r3zBtfmB4ehEREdknNTHugHn0qLtn8LvXFvDBkk0U7dFAgCKhoHtARcJdLfe7OF88+cNv4ye7OjLz2828MW8Dvijj8B7tGdW/Az/u35EeaW006IJICJnZaOAhIBp42jl3d43lNwFXAmVAHvAL59za4LJyYGGw6zrn3BkhC1ykpasjj24YcjMjCtvx5vyNvPzlevwxURzbJ41R/Tsy6tAOdFgzTTlUpBnoElyRSHCAQrK8wjFv/TY+WLqZGUs3sXzTTgCuSsnm5tLHiNVk3SI/SEMuwTWzaGA58BMgB/gKuMA5t6RKn5OAL5xzu83sV8CJzrnzgst2OucSGxKf8qhIAxwgj+4pq+CL7/KZsXQzHyzdRM62Is6I+pR7Yp/BT8m+bSiHijSI7gEVaSXWb93NB0s38dOZJ9c6WXdpYld8v128b2h6EalVAwvQo4CJzrlTgq9/B+Cc+0sd/Q8DHnXOHRN8rQJUJAw451i+aSed/5FFcsn3+y3f5e/M9vHf0LVtvAfRiUSWuvKoLsEVaWEy2ydw+TE94f3aJ+uOLtzAMXfP5Li+6Rx3SBrH9E6jXZvYfR102a7ID9EVqDo5YQ5wxAH6XwG8XeW138yyCVyee7dz7vXaVjKzq4GrAbp169aYeEWkFmZGv05JULKp1uXxRd8z8O6Z9Epvw/F90zmubxpH9kqlTVyV/1Irj4ockApQkZaqjsm6i+I7MTSjLdMXbeTV7PWYwYDOyRzZK5WfRc9m0Nw/YGWaK02kuZjZxUAWcEKV5u7OuVwz6wXMNLOFzrlVNdd1zj0JPAmBM6AhCVikNaojh5YndeGOH/fnkxVbeOWrwHyjvihjaGZbjuzVnjE2m35f3q48KnIAKkBFWqo6Jutuc9ok/j5kBGXlFczPKeDTFVuYszqff85Zy+VRd2NRRdW3U1oUOJKrxClyILlAZpXXGcG2aszsx8DtwAnOucqby5xzucGfq81sFnAYsF8BKiIhUkcOjTl5IlcO6cWVx/WiuLSc7DXb+HTlFr74Lp/HP1rNBb4/K4+KHIQKUJGWam+iq+MyIF90FCO6t2NE93b8hr4Ul5YTd1d+rZuqKMhh0rTFlf276N4XkZq+AvqaWU8Chef5wIVVOwTv+3wCGO2c21ylvR2w2zlXYmZpwDHAPSGLXET2d5AcCuCPiebYvmkc2zcNgJ0lZbT5S9159J63v2VE93YM79aW1MS4Zt8FkXClAlSkJRsyrt5HXP0x0XVecpQfnc6rX63nuc/WANA5xc/w7u0Y0S1QkA7okkxMtKYVltbLOVdmZtcB7xKYhuVZ59xiM5sEZDvnpgH3AonAv4ODgO2dbqU/8ISZVRCYn/vuqqPnNrcbbriBefPmhertRCJMWvABvPEY8NiBu+eUQlnJfs2lFsPX/xjH3sE//THRJPl9JMXFkOj3kRAb3bRhi/wAw4YN48EHH2z291EBKiL71HHJUfqYu1g48GS+/b6Q7DVbmbtuO1+v3cb/FmwEwB8TxZCMtgzv1o5hmSkMzmhLlxS/RtqVVsU5Nx2YXqNtQpXnP65jvc+Awc0bnYiERLsesGUFuIp9bRZFTFovDk9ox66ScgqLS9lZUsb23aXkFQaK1egoI8kfQ2Kcj8Q4H23ionVgV1osFaAiss8BLjnyAYO6pjCoawqXHRPotrGgiK/Xbmfu2m3MXbeNpz9ZTVlF4OhuWmIsg7sGitGhGSkMzkihQ5Lfm/0SkTqF4mi3SKtSz1FwnXOszd9dmUO/XruNZZsK2e5gO9Alxc+QjLYMzkhhaEZbBndNISUhJuS7I9LUNA+oiDSZ4tJylm7cwcLcAhbkFLAgZzsrN+8kWJPSKdnPkIwUhmSkMLBrCgM6J9MhKU5nSiUsNWQeUC8oj4q0PDtLyli8N4fmFrAwZztr8ndXLu+emsCQjLYM6ZrCwC7J9O+cXH0qNZEwonlARaTZ+WOiOaxbOw7r1q6ybVdJGUs27mD++u0szC1gYU4B7y3ZN79a+zaxHNopif6dk4OPJPp2SCLWp0uPRESkdUmM83FEr1SO6JVa2VawuzRwYDd3OwvWF/D12m28OX9D5fKOyXFVcmgyAzon0TMtkegoHdyV8KQCVESaVZs4H4f3aM/hPdpXtu0oLmXphh0s3biDpRsL+fb7HfxzzlpKygL3zPiijD4dEvcVpB2T6NshkS4p8UQpoYqISCuSkhBTbbRdgC07S4I5NJBHl27cwacrtlTeBhPni6JfpyT6dwrk0UM6JtGnQyLpuupIwoAuwRWRsFBe4fhuy64qCTWQVL/fUVzZJyE2mj4dEumTnkifjon07RBIqN3aJ+hIrzQ5XYIrIpFkT1kFKzfv3JdDvw/k0a279lT2Sfb76NsxiT7pifTtmEifDon07ZikgQOlWegSXBEJa9HBs559OiQyZmiXyvZtu/awMm8nKzbtZMXmQlZu3slnq/J57Zvcyj6xvih6pbWpXL9nWht6pLahR1obUuI1YIOIiLR8sb4oBnRJZkCX5Mo25xx5hSWs2LyTlZsDeXTFpp18sHQTr2bvm3at8gBvh0R6p1fNowkkxKpckKal3ygRCWvt2sRyeJvql/BC4DLeVZt3VibVlZt3Mj9nO28Fp4bZq32bWHqkJtAjrQ09g0Vpz7TAz8Q4/RMoIiItl5nRIdlPh2Q/x/RJq7Zs66491YrSlZt38tnKfF77Ordav47JcfRI3Zc79xamPVLbBOYQF2kg/e9LRCJSsj9mvwGPIDAS79r83Xy3ZRdr8nexZssuvtuyi9krt+yXVNMS4+iRmkBm+wQy28WT0S6BjPbxZLZLoHOKH5/mYBMRkRaqfZtYRvZsz8ie1Q/wFhaXsjZ/d5UcGnj+/pJN5Fe5nBegc4qf7qkJZLYL5NKMdvGVPzsm+TVug9RKBaiItCj+mGj6dUqiX6ek/Zbt3lMWSKpbdvFdMLGuyd/Nl99t5Y15RZXTxUDgkuBOyX4y2wcK08x2+xJr13bxdEiK0yThIiLS4iT5Yyrn/a6poKiUtfmBA7trgoXp2vxdfLQ8j82FJdX6xkZH0aWtv7IgzaiaR9vGk5YYp/EbWikVoCLSaiTE+iqHqa9pT1kF3xcUs37bbnK27Wb91qLAz21FfLIij007qifWKIP0pDg6pcTTJcVPpxQ/nVP8dE6Jp3Pwdcdkv4pUERFpMVLiYwLzkGa03W9ZcWk5uduLWL91NznbioL5tIicrbt5b8OO/c6e+qKMjslV82f1HNpFRWqLpQJURITA4A3dUhPolppQ6/Li0nI2bC9i/bYicrcV8X1BERsLivl+RzHLNxXy0fI8du8pr7aOGaQnxlUm1Y7JcXRI9pOeGEd6chzpiXF0SI4jtY0SrIiIRDZ/TDS90wODGNVmV0lZZYG6YXswhxYUs6GgiEW5Bby/ZFPldGx7RUcZHZPi6Nw2PnBgN8lPhyr5Mz0p8LxdQqwu940gKkBFROrBHxNNr/REetWRWJ1zFJaUsXF7MRsLioJJtbiyUF2Vt5PZq7ZQWFy237pRBu3bxNEhKZBMq//0k54UR2piLKltYkn2xyjJiohIxGkT5+OQjoE5SWvjnGPb7tLKHLqxIJBP9xaqSzbs4MMdm/c72AuBs6lpe4vSxOq5tDKPtomlfWIsSXE+TTnjMRWgIiJNwMxI9seQ3Cmm1vtP9youLSevsITNhSXkFRZXeV5S+XzZ94Xk7SyhvGL/eZqjo4x2CYFitH2NR2ri/m3tE2I1mJKIiIQ9M6vMXQO77H//6V67Ssqq5c7NNXLphoJi5ucUkL+rBLd/GiU2Oop2bWJo3yZQlLZrUz2nplbJqe0SYmmbEKurlJqYClARkRDyx0QHRt1tX/ulvntVVDi27d7D5mBS3bqrhPyde9i2ew9bd+0hf2fg59KNgftqCopK69xWSnwM7dvEkhwfQ9v4GFLiY2ibEPhZ9dE2IbbaMg2vLyIi4aZNnI82cT56pLU5YL+y8gq27tpTWZjm79oTyKW79rBtVzCX7trD+m272bpzD4Ul+1+hBIGrlNomxNI2oWoOja2RP6s/Tw4+j/Mpj9ZGBaiISBiKijJSE+NITYyjf+eD9y8rr2Db7tJgQi1hazC5Vn0UFJWyffce1uTvoqColB1FpdRykrVSnC9qv+Sa5I8hMc5Hkt9Hot9Hkj+GpL2v44Kv/fte6+yriIh4wRcdVTkHan2UlJWzfXdp5QHeqrk0f9ceCnaXUlBUSt7OElbm7WT77tJab6upKj4mer8Dvol+H8l15NJEf/V8mhjna5FnX1WAioi0AL7oqOC9LnFA3ZcAV1VREbhvdUdRKduDiXV7UaBQLSgqrUy2e5flbi9mZ0khO4vLKCwuo+xA1WtQfEx0IKFWTbRxgQScGOcjITaaNnt/xvqIj42mTVw0CbE+2sT6SIiLJiF27+toFbQiItIs4nzRdEyOpmM9C1aA8grHjr05s6iU7ZX5c18u3ZdfS1m3dTeFxWUUFpeys6TsgAeB92oTG11ZpO4tWpOCuTQhLroyV1bm0CqvA/lzX55NiA2PglYFqIhIKxUVZZVHZDPbH7x/Vc45Ssoq2FFcWlmQ7iwJJNXCGq93lpSxo7gs2K+UvMISCovL2FVSxq495bXe61qXWF8UbYJJNCE2moQ4X7XXvz+tP51S6v+fBxERkR8qOspoF7yPtKGcc+zeU15n7qwtl+5t27C9iMLiMor2lLNrT/0K2b38MVGVObO2A733nTu02Q/2qgAVEZEGMzP8MdH4Y6LpUL8TrrVyzrGnvILdJeXsLi1nd7Ao3V1Sxu5gYt29p5xdJXsTbTm795Sxq6ScotLAz917Asm4qLScsoqKg7+piIiIx8ys8n7Whpx1rWnvAeG9uXJv7iyq9XUwhwZz6+6SfXl2664iSkrLQ3KGtF4FqJmNBh4CooGnnXN311geB7wAjADygfOcc2uaNlQREWlpzIw4XzRxvmjaeR1ME2hMvjSz3wFXAOXA9c65d0MYuoiIRKCqB4Tb/4AzsV446PlVM4sGJgOnAgOAC8xsQI1uVwDbnHN9gAeAvzZ1oCIiIuGsMfky2O98YCAwGngsuD0REZEWpT4X+I4EVjrnVjvn9gCvAGNr9BkLPB98PhUYZZrhVUREWpfG5MuxwCvOuRLn3HfAyuD2REREWpT6FKBdgfVVXucE22rt45wrAwqA1JobMrOrzSzbzLLz8vJ+WMQiIiLhqTH5sj7rKo+KiEjEC+l49s65J51zWc65rPT09FC+tYiISMRTHhURkUhXnwI0F8is8joj2FZrHzPzASkEBlcQERFpLRqTL+uzroiISMSrTwH6FdDXzHqaWSyBQRKm1egzDbg0+PwcYKZzrgEz0oiIiES8xuTLacD5ZhZnZj2BvsCXIYpbREQkZA46DYtzrszMrgPeJTCs/LPOucVmNgnIds5NA54BXjSzlcBWAklXRESk1WhMvgz2mwIsAcqAa51z5Z7siIiISDMyr05UZmVluezsbE/eW0RE5GDMbK5zLsvrOOqiPCoiIuGsrjwa0kGIREREREREpPXy7AyomeUBa5toc2nAliballcifR8iPX6I/H1Q/N6L9H1Q/NV1d86F7VCzyqP7ifR9UPzei/R9iPT4IfL3QfFXV2se9awAbUpmlh3Ol0nVR6TvQ6THD5G/D4rfe5G+D4q/9WoJn12k74Pi916k70Okxw+Rvw+Kv350Ca6IiIiIiIiEhApQERERERERCYmWUoA+6XUATSDS9yHS44fI3wfF771I3wfF33q1hM8u0vdB8Xsv0vch0uOHyN8HxV8PLeIeUBEREREREQl/LeUMqIiIiIiIiIQ5FaAiIiIiIiISEmFfgJrZaDNbZmYrzey2WpbHmdmrweVfmFmPKst+F2xfZmanhDTwfTEcLP6bzGyJmS0wsxlm1r3KsnIzmxd8TAtt5NViPNg+XGZmeVVivbLKskvNbEXwcWloI6+M4WDxP1Al9uVmtr3KMs+/AzN71sw2m9miOpabmT0c3L8FZja8yrJw+PwPFv9FwbgXmtlnZja0yrI1wfZ5ZpYduqj3i/Fg+3CimRVU+V2ZUGXZAX//QqEe8d9cJfZFwd/79sFlnn8HZpZpZh8G/61cbGa/qaVPWP8deEl5VHm0sZRHPf/8lUeVRxsl7PKocy5sH0A0sAroBcQC84EBNfpcAzwefH4+8Grw+YBg/zigZ3A70WEY/0lAQvD5r/bGH3y9M0K+g8uAR2tZtz2wOvizXfB5u3CLv0b/XwPPhtl3cDwwHFhUx/LTgLcBA44EvgiXz7+e8R+9Ny7g1L3xB1+vAdIi4Ds4EXirsb9/XsVfo+8YYGY4fQdAZ2B48HkSsLyWf4fC+u/Aw89OeTQyvoPLUB5tzn1QHg3/7+BElEebM/6wyqPhfgZ0JLDSObfaObcHeAUYW6PPWOD54POpwCgzs2D7K865Eufcd8DK4PZC6aDxO+c+dM7tDr6cA2SEOMaDqc93UJdTgPedc1udc9uA94HRzRRnXRoa/wXAyyGJrJ6ccx8DWw/QZSzwgguYA7Q1s86Ex+d/0Pidc58F44Pw/Buoz3dQl8b8/TSZBsYfjn8DG51zXwefFwJLga41uoX134GHlEe9pzzqMeVR7ymPeivc8mi4F6BdgfVVXuew/4dV2cc5VwYUAKn1XLe5NTSGKwgcedjLb2bZZjbHzH7WDPHVR3334ezg6fqpZpbZwHWbU71jCF621ROYWaU5HL6Dg6lrH8Ph82+omn8DDnjPzOaa2dUexVRfR5nZfDN728wGBtsi6jswswQCSeU/VZrD6juwwOWhhwFf1FjUkv4OmpLyqPf/hiuPev8dHExL+vdDedRDyqP142vMytJ0zOxiIAs4oUpzd+dcrpn1Amaa2ULn3CpvIjygN4GXnXMlZvZLAkfSf+RxTD/E+cBU51x5lbZI+Q4inpmdRCBxHlul+djg598BeN/Mvg0ehQw3XxP4XdlpZqcBrwN9vQ3pBxkDzHbOVT3KGzbfgZklEkjqNzjndngRg4Qv5dGwoDzqIeXRsKA8Wg/hfgY0F8is8joj2FZrHzPzASlAfj3XbW71isHMfgzcDpzhnCvZ2+6cyw3+XA3MInC0ItQOug/OufwqcT8NjKjvuiHQkBjOp8YlE2HyHRxMXfsYDp9/vZjZEAK/O2Odc/l726t8/puB/xL6y//qxTm3wzm3M/h8OhBjZmlE0HcQdKC/AU+/AzOLIZA0X3LOvVZLl4j/O2gmyqN4/m+48iiefwcHE/H/fiiPhg3l0fpwHt4Qe7AHgTO0qwlczrH3xuOBNfpcS/XBE6YEnw+k+uAJqwn94An1if8wAjdX963R3g6ICz5PA1bgzU3X9dmHzlWenwnMcftuWv4uuC/tgs/bh1v8wX6HErhJ3MLtOwi+fw/qvnH/dKrfNP5luHz+9Yy/G4F7y46u0d4GSKry/DNgtBfx12MfOu393SGQWNYFv496/f55HX9weQqB+1vahNt3EPwsXwAePECfsP878Oh7Vx51yqPNHX+wn/Kod/Erj3ocf3C58mh94/Hql7ABH9hpBEZqWgXcHmybROAoJ4Af+HfwD+9LoFeVdW8PrrcMODVM4/8A2ATMCz6mBduPBhYG/9AWAleE8XfwF2BxMNYPgUOrrPuL4HezErg8HOMPvp4I3F1jvbD4DggcSdsIlBK47v4KYDwwPrjcgMnB/VsIZIXZ53+w+J8GtlX5G8gOtvcKfvbzg79ft3sRfz334boqfwNzqPKfgNp+/8It/mCfywgMOFN1vbD4DghcTuaABVV+T06LpL8DLx8H+zcQ5dFw2Afl0eaNX3lUebRZ4w/2uQzl0Xo99h5pEBEREREREWlW4X4PqIiIiIiIiLQQKkBFREREREQkJFSAioiIiIiISEioABUREREREZGQUAEqIiIiIiIiIaECVCTCmVlbM7vG6zhEREQikfKoSGipABWJfG0BJU4REZEfpi3KoyIhowJUJPLdDfQ2s3lmdq/XwYiIiEQY5VGREDLnnNcxiEgjmFkP4C3n3CCvYxEREYk0yqMioaUzoCIiIiIiIhISKkBFREREREQkJFSAikS+QiDJ6yBEREQilPKoSAipABWJcM65fGC2mS3S4AkiIiINozwqEloahEhERERERERCQmdARUREREREJCRUgIqIiIiIiEhIqAAVERERERGRkFABKiIiIiIiIiGhAlRERERERERCQgWoiIiIiIiIhIQKUBEREREREQmJ/w8gNgG2ifzKXQAAAABJRU5ErkJggg==",
"text/plain": [
""
]
@@ -292,7 +292,7 @@
"\n",
"print(f\"y0_guess={model.concatenated_initial_conditions.evaluate().flatten()}\")\n",
"dae_solver.set_up(model)\n",
- "dae_solver._set_initial_conditions(model, {}, True)\n",
+ "dae_solver._set_initial_conditions(model, 0, {}, True)\n",
"print(f\"y0_fixed={model.y0}\")"
]
},
diff --git a/examples/notebooks/spatial_methods/finite-volumes.ipynb b/examples/notebooks/spatial_methods/finite-volumes.ipynb
index 607c0d9aa0..136840c8ad 100644
--- a/examples/notebooks/spatial_methods/finite-volumes.ipynb
+++ b/examples/notebooks/spatial_methods/finite-volumes.ipynb
@@ -55,8 +55,6 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "\u001b[33mWARNING: You are using pip version 20.2.4; however, version 21.0.1 is available.\n",
- "You should consider upgrading via the '/Users/vsulzer/Documents/Energy_storage/PyBaMM/.tox/dev/bin/python -m pip install --upgrade pip' command.\u001b[0m\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
@@ -182,14 +180,12 @@
},
{
"data": {
- "image/png": "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",
+ "image/png": "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/WRpknDz5s1avny5Vq9erd27d2v27NmaO3euamtre21fWVmppUuX6t5779XevXv16quvaufOnbrvvvuiHDkAAPGv1J8rh61rWmcwvRIsHTZDpf5cK8JCElm5cqVefPFFbdq0Sfv379eKFStUW1sbmj5cXFyspUuXhtovWLBAZWVl2rBhgw4ePKg//vGPevDBBzVjxgyNGTPGqo8BAACQECydbvzMM8/o3nvvDSX5SktL9fvf/14bNmxQSUlJj/Y7duzQFVdcoQcffFCSNH78eH3jG9/Qd7/73ajGDQBAIlg4zasJI9269dnKHu9tKcpXjtdjQVRIJn6/Xw0NDVqzZo3q6+uVk5Oj8vJyjRs3TpJUX18f9vD4a1/7mk6dOqXnnntO//qv/6q0tDTddNNNWrdunVUfAQAAIGFYNpKwvb1du3btUmFhYVh9YWGh3n333V7PmTVrlgKBgMrLy2Wapj766CP98pe/1Pz586MRMgAACSu4T8QF9osAIub+++/X4cOH1dbWpl27dukf/uEfQu+99NJLevPNN8PaP/DAA9q7d69Onz6to0eP6mc/+5m8Xm+UowYAAEg8liUJT5w4oY6Ojh4LU48aNarHAtZBs2bN0ssvvyy/3y+n06nRo0crLS1Nzz777AV/Tltbm1paWsJeAACgS4bbqUy3S1O8Hj25KEdTvB5lul3KcDutDg0AAABAFFm+cYnxqSELpmn2qAvat2+fHnzwQX3nO9/Rrl279Prrr+vQoUOhdWt6U1JSIo/HE3plZ2cPavwAAMSamkCT7ty4QzWBpj7bZnmGqnLVHL1WlK9/un6cXivKV+WqOcryDI18oAAAAABihmVJwhEjRshut/cYNXj8+PEeowuDSkpKlJ+fr29961uaOnWqbrnlFq1fv16bNm1SfX19r+cUFxerubk59Dpy5MigfxYAAGJJWVWdth9sUFlVXb/auxz20AM6wzDkctgjGR4AAACAGGRZktDpdCovL08VFRVh9RUVFZo1a1av55w+fVo2W3jIdnvXf2RM0+ztFLlcLqWmpoa9AABINIHG03o/0KwP6pq1tfqoJGlr9VF9UNes9wPNCjSetjhCAAAAALHM0t2NV65cqbvuukvTp0/XzJkztXHjRtXW1oamDxcXF6uurk4//elPJUkLFizQP//zP2vDhg265ZZbVF9fr+XLl2vGjBka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",
"text/plain": [
- ""
+ ""
]
},
- "metadata": {
- "needs_background": "light"
- },
+ "metadata": {},
"output_type": "display_data"
}
],
@@ -288,8 +284,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "method self.evaluate() not implemented\n",
- " for symbol u of type \n"
+ "method self.evaluate() not implemented for symbol u of type \n"
]
}
],
@@ -353,14 +348,12 @@
"outputs": [
{
"data": {
- "image/png": "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Q0mZ0DmwbOj8WDZ03iwbOqcGgXI3Bdc5l2tmo4Av8HWymuycW2xm44Ak59w0YBK+y+Ur8TWfGOZd4uDh57F7HKgOvFvQt2mdc26QZ6GDhJ/HTkrg5/H7AuhnZkuAPOBO51yln7ng57G7HXjJzG7F1zzhSr3o5mNmb+P7Ay224H6eB4BwAOfcC/ju7zkLWAnsBUZ4k1TKms6BZUPnx7Kh82bZ0Dk1OJiOp4iIiIiIiARCeZyCKyIiIiIiIuWQClAREREREREJCBWgIiIiIiIiEhAqQEVERERERCQgVICKiIiIiIhIQKgAFRERERERkYBQASoiIiIiUsB89DeySBnRL5dIBWVm3c0s2cwizayamS02sw5e5xIREQk2ZtbMzJab2RRgEdDY60wiFZU557zOICJlxMweBCKBKCDVOfewx5FERESCjpk1A1YDvZxzcz2OI1KhqQAVqcDMrAowH8jEd1LN8ziSiIhI0CkoQL9xzjX3OotIRacpuCIVWwxQHaiB70qoiIiIFG+P1wFEKgMVoCIV24vA34E3gUc9ziIiIiIilVyY1wFEpGyY2RVAjnPuLTMLBWab2WnOua+9ziYiIiIilZPuARUREREREZGA0BRcERERERERCQgVoCIiIiIiIhIQKkBFREREREQkIFSAioiIiIiISECoABUREREREZGAUAEqIiIiIiIiAaECVERERERERALi/wFLJhCJmaU8agAAAABJRU5ErkJggg==",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAABQoAAAGGCAYAAAAzYLzoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAACOcklEQVR4nOzdeVxU9f7H8dfMsIODIsqiiLiU4i6uqJUtLmlmZdqmLVrZrnZLvVa37P4yb5staouZWWnaYlmpZd1yg1xITcV9Q1kFlQGRbWZ+f4xyRUBBgWF5Px+PeUxz5nvOfA6anPmcz/f7MdjtdjsiIiIiIiIiIiJSqxmdHYCIiIiIiIiIiIg4nxKFIiIiIiIiIiIiokShiIiIiIiIiIiIKFEoIiIiIiIiIiIiKFEoIiIiIiIiIiIiKFEoIiIiIiIiIiIiKFEoIiIiIiIiIiIiKFEoIiIiIiIiIiIigIuzAygvNpuNhIQE6tSpg8FgcHY4IiIiIlWa3W4nIyOD4OBgjMbqde9Y130iIiIipVeW674akyhMSEggJCTE2WGIiIiIVCtHjhyhcePGzg6jTHTdJyIiIlJ2pbnuqzGJwjp16gCOkzabzU6ORkRERKRqs1gshISEFFxDVSe67hMREREpvbJc99WYROHZaSdms1kXjCIiIiKlVB2n7uq6T0RERKTsSnPdV70WpBEREREREREREZEKoUShiIiIiIiIiIiIKFEoIiIiIiIiIiIiNWiNwtKw2Wzk5uY6O4wazdXVFZPJ5OwwRERERERERKSKsVqt5OXlOTuMGqc8czG1JlGYm5vLwYMHsdlszg6lxqtbty6BgYHVcnF0ERERERERESlfdrudpKQkTp486exQaqzyysXUikSh3W4nMTERk8lESEgIRqNmXFcEu91OVlYWKSkpAAQFBTk5IhERERERERFxtrNJwoYNG+Ll5aXConJU3rmYWpEozM/PJysri+DgYLy8vJwdTo3m6ekJQEpKCg0bNtQ0ZBERkRpu9erVvPbaa8TExJCYmMiSJUsYOnToBfdZtWoVEyZMYMeOHQQHB/Pss88yduzYyglYREREKpXVai1IEtavX9/Z4dRI5ZmLqRWldVarFQA3NzcnR1I7nE3Gat0BERGRMrBZ4eAa2Pa149lmdXZEpXLq1Ck6dOjAe++9V6rxBw8e5MYbb6RPnz5s3ryZf/7znzz55JN88803FRzpJaimfyYiIiJVydncgAq3KlZ55WJqRUXhWSptrRz6OYuIiJRR7FJYMREsCf/bZg6GAdMhfIjz4iqFgQMHMnDgwFKPf//992nSpAkzZswAoHXr1mzatInXX3+d2267rYKivATV+M9ERESkKlKuoGKV18+3VlQUioiIiFRZsUth8ajCCSkAS6Jje+xS58RVQaKjo+nXr1+hbf3792fTpk1VZzZCLfszERERETlLicIaYu/evQQEBODl5cW6deucHY6IiIiUhs3qqFrDXsybZ7atmFSjprwmJSUREBBQaFtAQAD5+fmkpqYWu09OTg4Wi6XQo8LUwj8TERERcY6rrrqKBQsWXHDMtm3baNy4MadOnaqUmJQorAESEhLo168fvXv3ZvTo0QwePJht27YVGffiiy/SqlUrvL29qVevHtdffz3r168v9phhYWGsWLGC3bt307dvXwICAvDw8KBZs2Y899xzVeeOv4iISHV2OKpo1VohdrDEO8bVIOdPjbHb7cVuP2vatGn4+voWPEJCQiouuFL+mUx5+0PunbuBp77czL++386bK/fwybqD/LA1gej9aexLySQ9K6/g3ERERETO9eOPP5KUlMQdd9xxwXHt2rWjW7duvPXWW5USV61ao7AmOnHiREGScN68eZhMJurUqUP//v1Zu3YtzZo1Kxh7xRVX8N5779GsWTNOnz7NW2+9Rb9+/di3bx8NGjQoGPf333+TlpZG3759iY+PZ9SoUXTu3Jm6deuydetWHnzwQWw2G6+88oozTllERKTmyEwu33HVQGBgIElJSYW2paSk4OLiUmInxMmTJzNhwoSC1xaLpeKShaX8WWccO8qq5CYXHedmMuLv44Z/HXca+Ljj7+NOgzruNDS7E2j2ILiuJ0G+Hvh5u2ntJhERkVrknXfe4f7778doLLmGLy8vD1dXV+6//37Gjh3L5MmTL6ujcWkoUViFHTt2jHbt2vHkk0/yz3/+E4D169fTp08ffvzxR3r37s2NN95I7969mTVrVsFfrldeeQVvb2/69evH2rVrCQwMBOCuu+4qdPw333yTjz/+mL///pvrrruuYPv3339P//79cXd3p1mzZoWSjaGhofzxxx+sWbOmok9fRESk5vMJuPiYsoyrBnr27MkPP/xQaNsvv/xCly5dcHV1LXYfd3d33N3dKyO8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",
"text/plain": [
- ""
+ ""
]
},
- "metadata": {
- "needs_background": "light"
- },
+ "metadata": {},
"output_type": "display_data"
}
],
@@ -490,14 +483,12 @@
"outputs": [
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEGCAYAAAB1iW6ZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAqHElEQVR4nO3deXhV1dXH8e9KCAljmCICQaEWJ8IchgooKigOgAMCiqJWRFHAgm21yqso9q1FCxX1dUCoEw60WgXHOiuKkqCCEgcQVAKIDBJIyJz9/nGT9Ca5SS7kJnf6fZ6Hx+Sck3vXSeJis87ae5tzDhERCX8xwQ5AREQCQwldRCRCKKGLiEQIJXQRkQihhC4iEiEaBeuN27Vr57p06RKstxcRCUtr1qzZ5ZxL8nUuaAm9S5cupKenB+vtRUTCkpn9UN25WksuZrbEzH42sy+rOW9mttDMNprZOjPrW5dgRUTk0PhTQ38UGFnD+TOAbqV/pgAP1D0sERE5WLUmdOfc+8CeGi4ZAzzuPD4GWplZh0AFKCIi/glEDb0TsMXr88zSY9srX2hmU/CM4jniiCOqvFBhYSGZmZnk5eUFICyR+peQkEBycjJxcXHBDkWkYR+KOuceBh4GSE1NrbKITGZmJi1atKBLly6YWUOGJnLQnHPs3r2bzMxMunbtGuxwRALSh74V6Oz1eXLpsYOWl5dH27ZtlcwlLJgZbdu21b8oJWQEIqEvByaVdrsMArKcc1XKLf5SMpdwot9XCSX+tC0+DawCjjGzTDO7wsyuNrOrSy95BdgEbAQWAdfUW7QiImGspMTx55cz2LLnQL28fq01dOfchbWcd8C1AYsoRGVnZzNs2DD27NnDypUr6dixY/m5iRMnkp6eTlxcHAMGDOChhx7SQzIRqeKetzaw6IPN/CqpORcOqNoYUlday8UPRUVFjBs3jksuuYS77rqLMWPGsG/fvvLzEydO5Ouvv+aLL74gNzeXRx55JIjRikgoejNjB/e8tYHz+yYzoX/n2r/gEARt6n8oSktL44orrmD16tUUFxczYMAAnn32WRYsWMAZZ5zB9OnTAYiNjWXChAm8+OKLxMXFceaZZ5a/xoABA8jMzAzWLYhIKFm3DN66HZeVyfGuLde2vZTp546st2cvFqwt6FJTU13ltVy++uorjjvuOABuW7GejG37fH3pITu+Y0tuHdW9xmtmz55NXl4eubm5JCcn86c//cnv1y8sLGTgwIHcc889DB06tK7hSpjw/r0VKbduGayYAYW55YdKGjUhZvRC6DnukF/WzNY451J9ndMIvZJbbrmF/v37k5CQwMKFCw/qa6+55hpOPPFEJXMRgbdur5DMAWKKcj3H65DQaxKyCb22kXR92b17N9nZ2RQWFpKXl0ezZs38+rrbbruNnTt38tBDD9VzhCISFrKqKb1WdzwA9FC0kquuuoq5c+cyceJEbrjhBr++5pFHHuH111/n6aefJiZG31IRgbym1SxplZhcb++p7OPl8ccfJy4ujosuuogbb7yRtLQ03n777Vq/7uqrr2bHjh385je/oXfv3tx+++0NEK2IhKotew5w24Gx5BFf8URcEzj1lnp735AtuQTDpEmTmDRpEuDpZPnkk0/8+rqioqL6DEtEwkheYTFXP7mGHxnCrBFHk7D6r54yS2KyJ5nXU/0clNBFRALGOcdN//6C9dv2seSyVJKObQ+DL2mw91fJRUQkQB5f9QPPf7qV3w3vxinHtm/w91dCFxEJgNWb9zD3pQyGH3cYM07pFpQYVHIRETlUXjNBk2nLZS0mMX3cTcTEBGcVTo3QRUQORdlM0KwtGI6O7OKm4gdI3PDvoIWkhC4icihqmgkaJEro9axLly7s2rULgNzcXE466SSKi4tr/JoJEyawYcOGeo1rzpw53H333Yf0td9//z1PPfWUX9du376ds88++5DepzZl6xDNmTOn/HNfx3744Qf69u1L79696d69Ow8++GCF17nzzjtZunQpDz74ID169KB3794MGTKEjIwMAL744gsuu+yyerkHCWNBmAlam/CuoZfWrxqqx7NMUVERjRod/LduyZIlnHfeecTGxtZ43dSpU5k3bx6LFi061BDrVVlCv+iii2q9dv78+Vx55ZX1Esff//53WrZsSU5ODjfffDMnnXQS69evr3Js2LBhrFq1ivj4eLKzs0lJSWH06NHla9q//vrrLFu2jPj4eK6+2rNvy/Lly5k1axavvfYaPXr0IDMzkx9//NHn5uYSnXKbdqDJgW1VT9TjTNDahO8I3at+Bc7z3xUzPMfraO7cuRxzzDEMGTKECy+8kLvvvpthw4bxu9/9jtTUVO655x5WrFjBwIED6dOnD8OHD2fHjh2AZy2Y0047je7duzN58mS8V7NcunQpY8aMAeDdd9+tMHKdNm0ajz76KABDhw7lzTff9Dlh6bvvvmPkyJH069ePoUOH8vXXX5OVlcWRRx5JSUkJADk5OXTu3JnCwkIWLVpE//796dWrF+effz4HDlTdKWXYsGGUrXy5a9cuunTpAngS99ChQ+nbty99+/blo48+AuDGG2/kgw8+oHfv3ixYsIDi4mL+8Ic/0L9/f3r27FlhPZvnnnuOkSNHAnDiiSfy+eefl58bMmQIa9eurfXnkZaWRs+ePcnLyyMnJ4fu3bvz5ZdfMnPmTHbu3MnChQsZOXIkp512ms9jjRs3Jj7eM2MvPz+//PsEsG/fPgoKCkhKSqJly5blx3NycioscTpq1CieeeaZWmOV6LBhx35uzTm/wWeC1iZ8E7qP+hWFda9fpaWl8dxzz7F27VpeffVVvJf4LSgoID09neuvv54hQ4bw8ccf89lnnzFhwgTmzZsHeBbpGjJkCOvXr+fcc8/lxx9/LP/aTZs2lSfLmsTExPDrX//aZ7KbMmUK9957L2vWrOHuu+/mmmuuITExkd69e/Pee+8B8NJLL3H66acTFxfHeeedR1paGmvXruW4445j8eLFfn8vDjvsMN544w0+/fRTnn32WWbMmAF4ShRDhw7l888/Z+bMmSxevJjExETS0tJIS0tj0aJFbN68mc2bN9O6devyZHrFFVeU/6X17bffkpeXR69evXjnnXfo3bt3lT8nnHACAP3792f06NHMnj2bP/7xj1x88cWkpKRwzz33kJSUxIwZM3jttdd44403fB4D2LJlCz179qRz587ccMMN5aPzN998k1NPPbX8nu+//36OOuoo/vjHP1ZYbTM1NZUPPvjA7++dRK69BwqY/Hg6b8cNI3fkfEjsDJjnv6PqtjRuXYVvyaWe6lcffvghY8aMISEhgYSEBEaNGlV+bvz48eUfZ2ZmMn78eLZv305BQQFdu3YF4P333+f5558H4KyzzqJ169aAZ+TbqlUrv+M47LDD2LZtG/369Ss/lp2dzUcffcQFF1xQfiw/P788tmeffZaTTz6ZZ555hmuu8Wzt+uWXXzJ79mz27t1LdnY2p59+ut8xFBYWMm3aND7//HNiY2P59ttvfV73n//8h3Xr1vGvf/0LgKysLDZs2EDz5s1JSkoqv+6CCy5g7ty53HXXXSxZsqS8Ln3yySdXGLn74mtZ4xkzZmBmzJkzhzlz5uCcY/jw4VWOAXTu3Jl169axbds2zjnnHMaOHUv79u157bXXuPzyy8vf59prr+Xaa6/lqaee4o477uCxxx4D/vvzkOhWVFzCtKc+Y/vePJ6eMojWR7aGQRcHO6xy4ZvQE5NLyy0+jtcT76V0p0+fzqxZsxg9ejTvvvtu+UO46jRp0oS8vLzyzxs1alThn/7e58o+b9KkSYVjJSUltGrVymfyGz16NDfddBN79uxhzZo1nHLKKQBcdtllvPDCC/Tq1YtHH32Ud999t8rXesfiHceCBQto3749a9eupaSkhISEBJ/35pzj3nvvrfKXxWeffVbh9Zo2bcqIESN48cUXWbZsGWvWrAHgnXfeYebMmVVet2nTpuVlHl/LGpeVRMq+994lEl/HADp27EhKSgoffPABY8eOZfXq1TzwwANV3nvChAlMnTq1/HNfPw+JPn9+5StWbtzFvLE96Xdk62CHU0X4llxOvcVTr/IWgPrV4MGDWbFiBXl5eWRnZ/PSSy/5vC4rK4tOnToBlI/iwFMnLusAefXVV/nll18AaN26NcXFxeUJ7sgjjyQjI4P8/Hz27t3LW2+9VeH1v/32W1JSUioca9myJV27duWf//wn4EmkZWWZ5s2b079/f6677jrOPvvs8gev+/fvp0OHDhQWFrJ06VKf99KlS5fy5Fo2yi67xw4dOhATE8MTTzxR3p3TokUL9u/fX37d6aefzgMPPEBhYWF57Dk5ORx99NF8//33Fd5r8uTJzJgxg/79+5f/66VshF75T1kyh0Nb1rhMZmYmubme8twvv/zCypUrOeaYY1i/fj3HHnts+ffKu7Po5Zdfplu3/8728/XzkCiwbhksSIE5rcj567HsXvUklw/uwrjU+tkTtK7CN6H3HOepVwW4flVWr+3ZsydnnHEGPXr0IDExscp1c+bM4YILLqBfv360a9eu/Pitt97K+++/T/fu3Xn++ecrdEWcdtpprFy5EvCUAMaNG0dKSgrjxo2jT58+5dft2LGDJk2acPjhhwOeJFhWy1+6dCmLFy+mV69edO/enRdffLH868aPH8+TTz5ZoTQ0d+5cBg4cyODBgzn22GN93vPvf/97HnjgAfr06VPeYgmeHZgee+wxevXqxddff13+L5SePXsSGxtLr169WLBgAZMnT+b444+nb9++pKSk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",
+ "image/png": "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OuLj43Ht2jV07doVrq6uSElJweuvv46ePXvqbinFxcVh2LBheue9+eabGDhwIPz8/JCfn49t27Zh79692L17t964/fv3IyIiotrxEdE9Ms7o16paXrtSI2ptAWspA6uSxeJ2tb4IKC8vT4wePVo4OzsLb29vsWTJEhEWFiZmzpwphNAuYF26dGm582bMmCEaNWokXF1dxciRI8XSpUuFu7u73ph3331XeHh4CFdXVzFu3Djx+uuvl1vcOWrUKN17lTpw4IDo0KGDcHJyEr179xY7duwot4D1X//6l3jhhRf0zuvTp48YN26c3rHNmzeLzp07C6VSKRo0aCD+8Y9/iC+++EJvzLfffisAiH/84x/lPueWLVtE8+bNhaOjowgPDxdxcXECgEhKShJCGF5wu3LlSuHn5ydcXFxEZGSkePfdd/UWsJ44cUKEhoYKR0dH0bp1a7Fjx45y1zkuLk60atVK2Nvb6527e/du0aNHD1GvXj2hUqlEWFiYWL16te75nJwcUa9ePXHmzJlyn2Xt2rUCgDh69Gi554yVmZkpvLy89BbSFhcXi7CwMDFixIhqv64QQvz4448iPDxcuLu7CycnJ9G6dWvxxhtv6K5tQUGBcHJyEmfPntU7b8KECcLf318olUrRuHFj8eijj4o9e/bojbl8+bJwcHAQly5dqvD9uYCVyEjqElH0QVuhnivPLlBTGbuAVRLCxGIHMsjLy4O7uztyc3P1/pULaG8ZXLhwAQEBAQ+0IBMateytlW/duoUmTZpg8eLFmDhxYq2/38mTJ9GvXz/8+eefcHMzrmTw9evXERgYiMTERAQEBNRyhJbn9ddfR25urt56CQB49913sW3btnLrdCzFF198gbfeesvgbaiqzJgxA7m5uVi9enWFY2rs95jIyt0tVuP9pR9gzq1FgFS2WNi9WfURG4H2Qw2cXfcq+/6+n23vprmfwk672KfD09o/6yARSUpKwtatW3H+/HmcOHFCt76i7FR4benQoQM++OADvYJmVblw4QJiY2OZiFRg9uzZ8Pf31605KSgowLFjx7BixQpMmTJF5uiqz9XVFe+//361zvX09KzyFhsRGSc6/jTW53TEG3YzIFx99Z9U+ZpVImIKzozIKCkpCZMmTcIff/wBpVKJkJAQLFmyBB06dJA7NKoh48ePx9atWzF8+HBs2bJFbzcR/c2S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",
"text/plain": [
- ""
+ ""
]
},
- "metadata": {
- "needs_background": "light"
- },
+ "metadata": {},
"output_type": "display_data"
}
],
@@ -572,14 +563,12 @@
},
{
"data": {
- "image/png": "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txy55SGMD3JoZNeVp2lv12effcYjjzyCv79/um1q1apFbGwsBw4cuNPwslxGE358fDzr1q2jefPm2RDVzW3bto3k5GSqVKlyw77k5GSefvrptMJ3QKZWM/U04Y8CHhCRGKCNax0RqS8ik640EpFVwH+A1iISKyJtPTxv1qodCc9vhZGn4fmt1Gw7kPnDI6hauiBPf76RN+Zt49Jlq7FvXDbPTB3JlQUju9566y2qVatGs2bNePTRRxkzZgwtW7bkueeeo379+kyYMIF58+bRqFEj6tatS5s2bTh2LPV7qPj4eB588EFq1qzJwIEDr3mi/PPPP6dz585A6h3l/Pnz0/b1798/rexyx44dmT59utvYRo8eTYMGDahduzavv/46ACNGjOCDDz5IazNy5EjGjBnD2bNnad26NfXq1aNWrVrMmXPjveGKFSvo0KFD2vrQoUOZMmUKAG+++SYNGjQgNDSUwYMHo6rMmjWL6OhoevfuTVhYGBcuXGDDhg20aNGC8PBw2rZty5EjqTdo//3vf2nXrh0Ay5Yto0uXLmnnWbx4MV27ds3Qf49jx47RtWtX6tSpQ506dfj+++8BePfddwkNDSU0NJTx48cDcO7cOdq3b0+dOnUIDQ1lxowZN1x7SP0L58UXX6ROnTqsXbuWiIgIlixZkvaPeadOnfjyyy8zFN8tqapXvsLDw9XbXExK1pFzt2rFl7/Rzu+v1thT550OyWSR7du3Z7zxuzVVXy984+vdmh7F8OOPP2qdOnX0woUL+ttvv2nVqlV19OjR2qJFC3366afT2p08eVJTUlJUVfXTTz/VF154QVVVhw0bpm+88Yaqqn7zzTcKaFxcnF68eFHLlCmT9vnZs2dr3759VVX14sWLGhwcrOfPp/5ur169Wjt06HBDbAsXLtRBgwZpSkqKJicna/v27XXlypW6ceNGbd68eVq76tWr64EDBzQpKUkTEhJUVTUuLk7vvvvutJgLFCigqqrLly/X9u3bp312yJAhOnnyZFVVjY+PT9vep08fnTt3rqqqtmjRQtevX6+qqpcuXdImTZro8ePHVVV1+vTpOmDAAFVV7du3b9pnUlJStFq1amntHn300bR9kZGRWqdOnRteU6dOTds/btw4VVW9fPmynj59WqOjozU0NFTPnj2rZ86c0Ro1aujGjRt11qxZOnDgwLS4T58+raqqzZs3182bN6dtB3TGjBnXXN82bdpodHR02nrVqlX1xIkTN/x3cPd7CkRrOnnVnqW+DXnz+PF6x5o0qFScP87aTPuJqxgXGUar35V2OjTjpPRGcHk4smvNmjV07tyZwMBAAgMD6dixY9q+nj17pi3HxsbSs2dPjhw5wqVLl6hcuTIAUVFRzJ49G0gtr1CsWOpzkSdOnKBo0aJpn3/ooYd49tlnuXjxIt999x3NmzdPK6R2pYrm9RYtWsSiRYuoW7cuAGfPniUmJoYnnniC48ePc/jwYeLi4ihWrBghISEkJSXx5z//maioKPz8/Dh06BDHjh3jrrvcjQe50fLly3nnnXc4f/48J0+epGbNmtdcD4AdO3awdetWHnjgASC1e6Rs2bJA6tPGpUqlzoUhIjz++OP8+9//ZsCAAaxdu5Zp06YBpN2Fp2fZsmVpbf39/SlSpAirV6+ma9euaUXpHnnkEVatWkW7du148cUXefnll+nQoQMRERE3xHLlON26dbvmPFeu+5Wy1plVzdQS/h14uFZZapQtzNOfb2TAlPU80/JuXnjgXvL42zgen5TOyC6K3FjCOLNcXfFy2LBhvPDCC3Tq1IkVK1YwcuTIm342KCiIxMTEtPXAwEBatmzJwoULmTFjBr169Urbl14VTVXlT3/6E08++eQN+3r06MGsWbM4evRo2j9Mn3/+OXFxcWzYsIGAgAAqVap0TQxwY1XPK/sTExN55plniI6OJiQkhJEjR97w2Ssx1axZk7Vr197yZx4wYAAdO3YkMDCQHj16pNUR6tmzJzt27Ljh8y+88AJ9+/a9YfvN3HvvvWzcuJEFCxbw6quv0rp1a1577TW31//671Kuv+6ZVc3UMtQdqlSyAF89cx+9GoTw4Yrd9PnnDxw/c+MvofEBbkZ2ERCUut0DTZs2Zd68eSQmJnL27Fm++cZ9ZZKEhATKly8PwNSpU9O2N2/enC+++AKAb7/9Nm2kR7FixUhOTr4m6fTs2ZPJkyen3ZlesXPnTkJDQ284Z9u2bfnss884e/YsAIcOHeL48eNpx5o+fTqzZs2iR48eaTGWLl2agIAAli9fzv79+284ZsWKFdm+fTsXL17k9OnTLF26FPhf4i9ZsiRnz569ZlrHQoUKceZM6jOd1apVIy4uLi3hJyUlsW3bNgCqV6/Orl270j5Xrlw5ypUrx9tvv82AAQPSts+YMSOtQunVryvJvnXr1nz00UdA6l8QCQkJRERE8PXXX3P+/HnOnTvHV199RUREBIcPHyZ//vz06dOHl156iY0bN7qNxZ2rr7tmYjVTS/geCAzwZ1S32oztUYdNB0/z8ITVrN1tswb5HDcju+g4MXW7Bxo0aECnTp2oXbs2Dz30ELVq1Uqb4ORqI0eOpEePHoSHh1OyZMm07a+//jpRUVHUrFmT2bNnU6FChbR9Dz74IKtXr75mfeXKlbRp04a8efOmbV++fDnt27cHIDo6moEDB6a1f+yxx2jSpAm1atWie/fuaYm3Zs2anDlzhvLly6d1qfTu3Zvo6Ghq1arFtGnT+N3vfnfDzxESEkJkZCShoaFERkamdRcVLVqUQYMGERoaStu2bWnQoEHaZ/r3789TTz1FWFgYycnJzJo1i5dffpk6deoQFhaW9qWqu4qhvXv3JiQk5LaK5E2YMIHly5dTq1YtwsPD2b59O/Xq1aN///40bNiQRo0aMXDgQOrWrcuWLVto2LAhYWFhvPHGG7z66qvpxnK1Y8eOERQUlNbdlanVTNPr3Hf65Y1f2t7Mr0d+01ZjlmvlEd/o+8tiNDk5xemQjAdu60vbLHTmzBlVVT137pyGh4frhg0bMuW4GzZs0D59+ty0TWJiojZq1EiTkpIy5ZxOa9q0qZ46dSptfciQITpp0qRsj+P8+fPaqFEjvXz5stv977777jVxDR8+XJcsWeK27e1+aWt3+Jmk2l2FmDu0Ge1rl2P0wh08MXU9p85dcjosk8MNHjyYsLAw6tWrR7du3ahXr16mHLdevXq0atXqpg9eHThwgFGjRuWaOvljx45Ne6YgPDyczZs306dPn2yPIygoiDfeeINDhw653V+0aFH69euXtp6Z1Ux9uh5+VlBV/v3DAd6at51ShfLx/mN1qVvBbdVo48VyUz18k3tlaz18cyMR4fHGFZn1dBNEIPLjtXy2eq9No5gD2X8z483u5PfTEn4WqR1clPnDImhxb2ne/GY7Q77YyJlEm0YxpwgMDCQ+Pt6SvvFKqkp8fDyBgYG39Tnr0sliqsqnq/bw9+92EFIsiPcfq0do+RtHWhjvkpSURGxsrNvx3sZ4g8DAQIKDgwkICLhm+826dCzhZ5P1+04y7IufOHn+Eq91qEHvRhUQEafDMsbkMtaH7wUaVCrOgmcjaFKlBK9+vZVhX/5kXTzGmGxlCT8bFS+Ql8n9G/DHdtX4dutROr63mq2HEpwOyxjjIyzhZzM/P+GZllWZPrgxiUkpPPLR9/x73X77ctAYk+Us4TvEuniMMdnNEr6D3HXxbDtsXTzGmKxhCd9hV7p4vhyU2sXT9cPv+fwH6+IxxmQ+jxK+iBQXkcUiEuN6v6GGgIiEichaEdkmIptFpKe7Y/m6hpWLM394M5pUKcErX21l6sejSXm3ZrbPkWqMyb08vcMfASxV1XuApa71650H+qpqTaAdMF5Einp43lypRMF8TO7fgE/q7iHyyGj8fosls+dINcb4Lk8TfmfgyowLU4Eu1zdQ1Z2qGuNaPgwcB0pd386k8vMTHjz8MfnlukqbSRdg6ZvOBGWMyRU8TfhlVPWIa/koUOZmjUWkIZAX2J3O/sEiEi0i0XFxcR6GloOlMxeqejhHqjHGt90y4YvIEhHZ6ubV+ep2rsL76X7TKCJlgX8BA1Q1xV0bVf1EVeurav2rJ/n1OenMhXpMStooHmPMHbtlwlfVNqoa6uY1BzjmSuRXEvpxd8cQkcLAfOAVVV2XmT9AruRmjtRk/yA+8HvMRvEYY+6Yp106c4ErU7P0A+Zc30BE8gJfAdNUddb1+40bbuZI9e88keeef4XGrlE8w6dvsge1jDG3xaNqmSJSApgJVAD2A5GqelJE6gNPqepAEekDTAa2XfXR/qq66WbHzm3VMjNLSory0crdjF20g4olCvD+Y3WpWc7KLRtjUll55Fzohz3xDJ/+E6fOJ/F6xxo81tDKLRtjrDxyrtSoSgkWDI+wLh5jTIZZws/BShTMx5T+DXipbTXmbz5Mp/fX2CgeY0y6LOHncH5+wpBWqbV4zl+6TNcPrdyyMcY9S/i5xNVdPK9+vZWhX/xEwgXr4jHG/I8l/FzkShfPy+1+x3fbjtJ+4io2HTztdFjGGC9hCT+X8fMTnm55NzOfbIIqdP/oez6N2kNKinXxGOPrLOHnUuEVi7FgeAStq5fmrwt+4Ymp64k/e9HpsIwxDrKEn4sVyR/AP/qE82bnmqzZFc/DE1exdne802EZYxxiCT+XExH6NqnEV0Puo0DePPSetI5xi3eSbF08xvgcS/g+oma5Iswb1owuYeWZsDSGxz5dx9GERKfDMsZkI0v4PqRAvjy82zOMsT3qsOVQAg9PXMXyX90WODXG5EKW8H1Qt/Bg5g1rRulC+RgwZT1/nb+dS5fdTlFgjMlFLOH7qLtLFeTrIU15vHFFPl21lx7/+J4D8eedDssYk4Us4fuwwAB/3uoSyke967HnxDnaT1zFN5sPOx2WMSaLWMI3PFSrLAuGR3B36YIM/eIn/jR7C4lJyU6HZYzJZJbwDQAhxfPzn6ea8GSLKnz54wE6v7+GmGNnnA7LGJOJbAIUc4MVO47z4syfOX8pmc/C99J47wdIQmzq5OqtX0udgtEY45WybAIUESkuIotFJMb1XsxNm4oislFENonINhF5ypNzmqzXslppFjwbwTMlNlLnp9eQhIOAQsJBmDccNs90OkRjzB3wtEtnBLBUVe8BlrrWr3cEaKKqYUAjYISIlPPwvCaLlSkcyFD9gvxy6dodSRdg6ZvOBGWM8YinCb8zMNW1PBXocn0DVb2kqleqduXLhHOabCIJsW63azrbjTHezdPkW0ZVj7iWjwJl3DUSkRAR2QwcBP6uqm7H/onIYBGJFpHouLg4D0MzHisS7HZzvH8p4s5Y5U1jcppbJnwRWSIiW928Ol/dTlO//XX7DbCqHlTV2kBVoJ+IuP2HQVU/UdX6qlq/VKlSd/DjmEzV+jUICLpm02W/QP52KZKHJkSxcqf9o2xMTnLLhK+qbVQ11M1rDnBMRMoCuN5vWpjFdWe/FYjIjOBNFqsdCR0nQpEQQKBICHm6vMfgISMoUSAf/T77kbe/2c7FyzZm35icwKNhmSIyGohX1VEiMgIorqp/vK5NsKvNBdconh+Abqq65WbHtmGZ3i0xKZm/zv+Ff63bT2j5wkzsVZcqpQo6HZYxPi/LhmUCo4AHRCQGaONaR0Tqi8gkV5vqwA8i8jOwEhhzq2RvvN+VsgyfPB5O7KkLdHhvNTOjD+Ktz3UYY+zBK5MJjiYk8vyMTazdE0/HOuX4a9dQCgcGOB2WMT4pK+/wjeGuIoH8e2AjXmpbjQVbjvDwhFVs2H/K6bCMMdexhG8yhb+fMKRVVf7zVBNEIPLjtby3NMamUjTGi1jCN5mqXoVizB8eQftaZRm7eCePfbqOIwkXnA7LGIMlfJMFCgcGMKFXGGNcUyk+NGEVC7cddTosY3yeJXyTJUSE7uHBzB8eQUix/Dz5rw288pXV2TfGSZbwTZaqXLIA/336PgY3r8LnPxyg0/ur2XHU6uwb4wRL+CbL5c3jx58frs603zfk5LkkOr6/mmlr99mYfWOymSV8k22a31uK756LoOndJXhtzjYGTo3mxFkrwmZMdrGEb7JVyYL5+Kx/A17vWINVu07QbnwUy3fctASTMSaTWMI32U5EGNC0MvOGNqNkwXwMmLye1+dstS90jclilvCNY6rdVYivhzTliWaVmbp2Px3fW832w785HZYxuZYlfOOowAB//tKhBtN+35DTF5Lo8sEaJq3aQ4o9oWtMprOEb7xC83tLsfC55rSoVoq35/9C389+5GhCotNhGZOrWMI3XqN4gbx88ng4f3ukFhv2n6LdhCi+23rk1h80xmSIJXzjVUSERxtWYP7wZoQUy89T/97Iy7M2k7hxOowLhZFFU983z3Q6VGNynDxOB2CMO1VKFeS/T9/H+CU7ObRqKmz9J+Aas59wEOYNT12uHelYjMbkNHaHb7xW3jx+/LHd73in6NcEct0DWkkXYOmbzgRmTA7lUcIXkeIislhEYlzvxW7StrCIxIrI+56c0/iefOfS6cdPiM3eQIzJ4Ty9wx8BLFXVe4ClrvX0vAVEeXg+44uKBLvdfD7ormwOxJiczdOE3xmY6lqeCnRx10hEwoEywCIPz2d8UevXICDomk2J5GNEQleGf/kTCReSHArMmJzF04RfRlWv/L19lNSkfg0R8QPGAn+41cFEZLCIRItIdFxcnIehmVyjdiR0nAhFQgCBIiEEdHmPqq1/z/wtR2g3Porvd51wOkpjvJ7cqkStiCwB3P3t/AowVVWLXtX2lKpe048vIkOB/Kr6joj0B+qr6tBbBVa/fn2Njo6+9U9gfNrPB0/z/IxN7Dlxjt83rcwf21UjMMDf6bCMcYyIbFDV+u723XJYpqq2ucmBj4lIWVU9IiJlAXdlD5sAESLyDFAQyCsiZ1X1Zv39xmRInZCizB8ewahvf+GzNXtZFRPHuJ5hhJYv4nRoxngdT7t05gL9XMv9gDnXN1DV3qpaQVUrkdqtM82SvclMQXn9eaNzKNN+35DfElPr8by/LIbLySlOh2aMV/E04Y8CHhCRGKCNax0RqS8ikzwNzpjbcaUeT7vQuxizaCeRH69l34lzTodljNe4ZR++U6wP33hizqZD/OXrrVxOUV5tX4NHG4YgIk6HZUyWu1kfvj1pa3KlzmHlWfh8c+pVKMafv9rCE1OjOX7Gqm8a32YJ3+RaZYsEMe33DRnZsQZrdp2g7Tirvml8myV8k6v5+Qn9m1Zm/vAIgl3VN1+c+TO/JdrDWsb3WMI3PqFq6YLMfuY+hre+h683HeKh8atYtyfe6bCMyVaW8I3PCPD344UH7mXWU03Im8ePRz9dx1/nb7fJ043PsIRvfE7dCsWYP7wZvRtV4NNVe+n8/hq2HkpwOixjspwlfOOT8ufNw9tdajFlQANOnb9Elw/WMH7JTpLsYS2Ti1nCNz6tZbXSLHq+OR1ql2X8khi6friGncfOOB2WMVnCEr7xeUXz52V8r7r8o084R04n0mHiaj5asZvkFO98KNGYO2UJ3xiXdqF3sej55rSuXpq/f/cr3f/xPXvizjodljGZxhK+MVcpUTAfH/aux4ReYeyJO8dDE1bxz9V7SbG7fZMLWMI35joiQuew8ix+vjnNqpbkrW+20+vTdRyIPw+bZ8K4UBhZNPV980ynwzUmw6x4mjE3oar8Z0Msb83bTjuN4m95JpEn5aqaPAFBqbNx1Y50LkhjrmLF04y5QyJCZP0QFj7fnJcDZl6b7AGSLsDSN50JzpjbdMsZr4wxUK5oEJqczjzLCbHZG4wxd8ju8I3JICkS7HZ7cqHy2RyJMXfGEr4xGdX6tdQ++6tc0Ly8cuYRvvopFm/9PsyYKzxK+CJSXEQWi0iM671YOu2SRWST6zXXk3Ma45jakalf0BYJAQSKhPDbg2PZWbodz8/4mYFTozmaYJOsGO/l0SgdEXkHOKmqo0RkBFBMVV920+6sqha8nWPbKB2TUySnKJPX7GXMoh0E+Pvxlw416BEebFMqGkdk5SidzsBU1/JUoIuHxzMmx/H3EwZGVOHbZ5tTvWxh/jhrM/0mr+fQ6QtOh2bMNTxN+GVU9cqccUeBMum0CxSRaBFZJyJd0juYiAx2tYuOi0tnRIQxXqpyyQJMH9SYNzrVJHrfSdqOi+LzH/bbU7rGa9yyS0dElgB3udn1CjBVVYte1faUqt7Qjy8i5VX1kIhUAZYBrVV1983Oa106Jic7ePI8I2ZvZs2ueJpUKcHfu9WmQon8TodlfIBHXTqq2kZVQ9285gDHRKSs6yRlgePpHOOQ630PsAKoe4c/izE5Qkjx/Pz7iUb8X9dabDmUQNvxUUxZYzV5jLM87dKZC/RzLfcD5lzfQESKiUg+13JJoCmw3cPzGuP1RITHGlVg0fPNaVi5OCPnbafnJ2vZe+Kc06EZH+Vpwh8FPCAiMUAb1zoiUl9EJrnaVAeiReRnYDkwSlUt4RufUa5oEFMGNGB099rsOHqGduOj+DRqj9XbN9nOiqcZk42O/ZbIK19tZckvxwgLKcro7rW5p0whp8MyuYgVTzPGS5QpHMinfcOZ0CuM/fHnaD9xNR8s32Vz6ZpsYQnfmGx2pd7+oudb8ECNMoxeuIOO763m54OnnQ7N5HKW8I1xSKlC+figdz0+eTycU+cv0fXDNbz9zXbOX7rsdGgml7KEb4zDHqx5F4tfaMGjDSswafVeHhwXRdROe/DQZD5L+MZ4gcKBAfy1ay1mPtmEvP5+9P3sR16c+TOnzl1yOjSTi1jCN8aLNKxcnAXPRjC0VVXmbDpEm3dXMvfnw1Z62WQKS/jGeJnAAH/+0LYa84Y1I7hYEMO//ImBU6M5bMXYjIcs4RvjpaqXLczsZ5rylw41+H53PA+8u5Jpa/ellmfYPBPGhcLIoqnvm2c6Ha7JAWxOW2O8mL+f8ESzyjxYowx//moLr83ZRvz3/+bZC+/jd9l1x59wEOYNT12uHelcsMbr2R2+MTlASPH8TPt9Q96NrEPPM5P/l+yvSLoAS990JjiTY1jCNyaHEBEeqRdMWeLdN0iIzd6ATI5jCd+YHEaKBLvdnly4fDZHYnIaS/jG5DStX4OAoGs2nde8vPrbI/wn+qAN4TTpsoRvTE5TOxI6ToQiIYBAkRBOtxnLzjIP8dKszfT6ZB27jp91Okrjhaw8sjG5REqKMiP6IH9b8AsXkpJ5usXdPNOqKoEB/k6HZrKRlUc2xgf4+QmPNqzA0hdb0r5WWSYu28VDE1axZtcJp0MzXsKjhC8ixUVksYjEuN5vmMDc1a6CiCwSkV9EZLuIVPLkvMaY9JUqlI/xveryrycaoqr0nvQDz8/YxImzF50OzTjM0zv8EcBSVb0HWOpad2caMFpVqwMNSWeyc2NM5om4pxTfPdecYfdX5ZvNh2k9diXTfzxgE6n7ME8Tfmdgqmt5KtDl+gYiUgPIo6qLAVT1rKqe9/C8xpgMCAzw58UHq/HtsxFUu6sQI2ZvIfLjtew4esbp0IwDPE34ZVT1iGv5KFDGTZt7gdMiMltEfhKR0SJi3yIZk42qli7EjMGNead7bXbFneXhiat4+5vtnL1ok634klsmfBFZIiJb3bw6X91OU4f7uPtbMQ8QAfwBaABUAfqnc67BIhItItFxcTYBhDGZSUSIrB/CshdbElk/mEmr99J67Aorv+xDPBqWKSI7gJaqekREygIrVLXadW0aA39X1Rau9ceBxqo65GbHtmGZxmStnw6c4i9ztrL10G/cd3cJ3uxck6qlCzkdlvFQVg7LnAv0cy33A+a4abMeKCoipVzr9wPbPTyvMcZDdSsUY86QZrzVuSZbDyXw0IRVjPr2V5tTNxfzNOGPAh4QkRigjWsdEakvIpMAVDWZ1O6cpSKyBRDgUw/Pa4zJBP5+wuNNKrHsDy3pHFaef6zcTZuxK/l2yxHr5smF7ElbY0ya9ftO8pevt/Lr0TM0v7cUb3SqSeWSBZwOy9wGe9LWGJMhDSoV55thzXi9Yw1+2n+KtuOiGLtoBxcuJTsdmskElvCNMdfI4+/HgKaVWfpiC9rXLst7y3bxwLiVLN5+zOnQjIcs4Rtj3CpdOJBxPcOYPrgx+fP6M2haNP0n/8juOKvEmVNZH74x5paSklOY+v0+JiyJIfFyMgOaVub5MpsIivpr6kxbRYJT6/TbnLqOu1kfvk1iboy5pQB/PwZGVKFzWHnGLNzBsTXTIOCfgKsgm02kniNYl44xJsNKFcrH37vXZnTROQRxXfVNm0jd61nCN8bctrznDrvdrjaRulezhG+MuX3pTKR+REvwSdRuLl1OyeaATEZYwjfG3D43E6mn5AliXqlB/N+CX2k3PorlO2zaC29jCd8Yc/vcTKTu12kiTw4dweT+DVBgwOT1PDFlPXtPnHM6WuNiwzKNMZnu0uUUJq/Zy8SlMVxKTqFvk0oMv/8eiuQPcDq0XM9KKxhjslXePH482eJulr/Ukm71gvlszV5ajlnO1O/3kZRs/ftOsYRvjMkypQsFMqpbbeYPi6B62cK8Pncb7cZHsezXY1aN0wGW8I0xWa5GucJ8PrARk/rWRxV+PyWavp/9yK9Hf3M6NJ9iCd8Yky1EhDY1yrDw+ea83rEGm2MTeHjCKv40ewtxZy7e+gDGY5bwjTHZKsBVjXPlSy3pf19l/hN9kFZjVvDhil0kJlkZ5qxkCd8Y44ii+fPyWscaLHq+OU3uLsE73+2g9diVzLNJ1bOMRwlfRIqLyGIRiXG9F3PTppWIbLrqlSgiXTw5rzEm96hSqiCf9q3PFwMbUTgogGFf/kS3j75n/b6TToeW63g0Dl9E3gFOquooERkBFFPVl2/SvjiwCwhW1fM3O7aNwzfG9ySnKP/dEMvYxTs49ttFHqhRhpfbVaNq6UJOh5ZjZOU4/M7AVNfyVKDLLdp3B769VbI3xvgmfz8hskEIK/7QipfaVmPt7ngeHBfFn2Zv4fhviU6Hl+N5mvDLqOoR1/JRoMwt2vcCvvTwnMaYXC4orz9DWlVl5Ust6dukErM2HKTF6BWMXbSDM4lJToeXY92yS0dElgB3udn1CjBVVYte1faUqt7Qj+/aVxbYDJRTVbf/xURkMDAYoEKFCuH79+/PyM9gjMnlDsSfZ/SiHcz7+TAlCuRleOt7eLRhBfLmsXEn17tZl46nffg7gJaqesSV0FeoarV02j4L1FTVwRk5tvXhG2Outzn2NH9b8Ctr98RTsUR+XmpbjfasRpa+aVMtumRlH/5coJ9ruR8w5yZtH8W6c4wxHqgdXJQvBjVi8oAGBObxZ9H097g4e2jqFIvo/6Za3DzT6VC9kqd3+CWAmUAFYD8QqaonRaQ+8JSqDnS1qwSsAUJUNUOVk+wO3xhzM8kpSuLo6hS4cOTGnUVC4Pmt2R+UF8iyScxVNR5o7WZ7NDDwqvV9QHlPzmWMMVfz9xMKXDjqdp8mxCLZHE9OYN94GGNyrnSmWjykJfjjrJ85dPpCNgfk3SzhG2NyLjdTLWqeIH6oPJSvfzpMq9EreGPeNk6cteJs4GGXjjHGOOrKaJyrRulI69foVjuSxqcv8N7SGKat3c+M9Qf5fdPKDGpehSJBvjvrlk1xaIzJ1XbHnWXc4p18s/kIhQPz8FTLu+l/XyXy582d97tZNg4/K1nCN8Zkpm2HExi7aCfLfj1OqUL5GNqqKr0ahpAvj7/ToWUqS/jGGOMSve8k7yzcwY97T1K2SCDPtKpKZP3gXJP4LeEbY8xVVJU1u+IZt2QnG/afolyRQIbcX5Ue4SE5vlyDJXxjjHFDVVkVc4JxS3by04HTlC8axJBWVekeHpxjE78lfGOMuQlVJSrmBOMW72TTwdMEFwtiaKuqdAsPJsA/ZyV+S/jGGJMBqsqKnXGMX7yTn2MTCCkexLBW99C1Xvkck/gt4RtjzG1QVVbsiGPckp1sjk2gQvH8DL2/Kl3ren/it4RvjDF3QFVZ9utxxi+JYcuhBIKLBfF0y7vpHu69o3os4RtjjAeuJP73lu1i08HTlCmcj0ERVXisUQWve4DLEr4xxmQCVeX73fG8v2wXa/fEU7xAXp5oVpnHm1Sk8M6vrinx4NRELFlWHtkYY3yJiNC0akmaVi3Jhv0neX/ZLkYv3MGBlVN42+9TAlJcE61fmYgFvGr2LbvDN8YYD2w9lEDZyfUpcfn4jTsdmIjF7vCNMSaLhJYvApfj3O7ztolYPBpfJCLFRWSxiMS43oul0+4dEdkmIr+IyEQR8aZrYIwxnrnJRCzDvvyJrYcSsjkg9zwdUDoCWKqq9wBLXevXEJH7gKZAbSAUaAC08PC8xhjjPdxMxJKSJ4gNdw9l+a/H6fDeavpM+oFVMXE42Y3uaZdOZ6Cla3kqsAJ4+bo2CgQCeQEBAoBjHp7XGGO8h5uJWPxav0bn2pG0Skziix8O8NnqvTz+zx+pUbYwT7aoQvtaZcmTzQ9xefSlrYicVtWirmUBTl1Zv67dGFInNRfgfVV9JZ3jDQYGA1SoUCF8//79dxybMcZ4k4uXk5nz02E+jtrN7rhzBBcLYlBEFXrUD87UsfwejcMXkSXAXW52vQJMvTrBi8gpVb2mH19EqgITgJ6uTYuBP6rqqpud10bpGGNyo5QUZemvx/nHyt1s2H+KYvkDeLxJJfo1qUiJgvk8Pr5Ho3RUtc1NDnxMRMqq6hERKQu4GZdEV2Cdqp51feZboAlw04RvjDG5kZ+f8ECNMjxQowzR+07yj5V7mLg0ho9X7qZbeDBPNKvM3aUKZs25Pfz8XKCfa7kfMMdNmwNACxHJIyIBpH5h+4uH5zXGmByvfqXiTOpXnyUvNKdr3fLM2hBL67ErGfLFxiz5ctfThD8KeEBEYoA2rnVEpL6ITHK1mQXsBrYAPwM/q+o8D89rjDG5RtXShRjVrTbfj7ifZ1vfQ6US+cmK0ev2pK0xxuQiN+vD9+7CzsYYYzKNJXxjjPERlvCNMcZHWMI3xhgfYQnfGGN8hCV8Y4zxEZbwjTHGR1jCN8YYH+G1D16JSBxg5TKhJHDC6SC8iF2Pa9n1+B+7Fqkqqmopdzu8NuGbVCISnd5Tc77Irse17Hr8j12LW7MuHWOM8RGW8I0xxkdYwvd+nzgdgJex63Etux7/Y9fiFqwP3xhjfITd4RtjjI+whG+MMT7CEr6XEJF2IrJDRHaJyAg3+18Qke0isllElopIRSfizC63uh5XtesmIioiuXY4XkauhYhEun4/tonIF9kdY3bKwP8rFURkuYj85Pr/5WEn4vRKqmovh1+AP6nTQFYB8pI6FWSN69q0AvK7lp8GZjgdt5PXw9WuEBAFrAPqOx23g78b9wA/AcVc66Wdjtvh6/EJ8LRruQawz+m4veVld/jeoSGwS1X3qOolYDrQ+eoGqrpcVc+7VtcBwdkcY3a65fVweQv4O5CYncFls4xci0HAB6p6CkBVj2dzjNkpI9dDgcKu5SLA4WyMz6tZwvcO5YGDV63Hural5wng2yyNyFm3vB4iUg8IUdX52RmYAzLyu3EvcK+IrBGRdSLSLtuiy34ZuR4jgT4iEgssAIZlT2jeL4/TAZjbIyJ9gPpAC6djcYqI+AHvAv0dDsVb5CG1W6clqX/5RYlILVU97WRQDnoUmKKqY0WkCfAvEQlV1RSnA3Oa3eF7h0NAyFXrwa5t1xCRNsArQCdVvZhNsTnhVtejEBAKrBCRfUBjYG4u/eI2I78bscBcVU1S1b3ATlL/AciNMnI9ngBmAqjqWiCQ1MJqPs8SvndYD9wjIpVFJC/QC5h7dQMRqQt8TGqyz819tHCL66GqCapaUlUrqWolUr/T6KSq0c6Em6Vu+bsBfE3q3T0iUpLULp492RhjdsrI9TgAtAYQkeqkJvy4bI3SS1nC9wKqehkYCiwEfgFmquo2EXlTRDq5mo0GCgL/EZFNInL9L3mukcHr4RMyeC0WAvEish1YDrykqvHORJy1Mng9XgQGicjPwJdAf3UN2fF1VlrBGGN8hN3hG2OMj7CEb4wxPsISvjHG+AhL+MYY4yMs4RtjjI+whG+MMT7CEr4xxvgIS/jGZJCINHDVVw8UkQKu2vOhTsdlTEbZg1fG3AYReZvUR/WDgFhV/ZvDIRmTYZbwjbkNrvot60mtwX+fqiY7HJIxGWZdOsbcnhKk1jQqROqdvjE5ht3hG3MbXEXrpgOVgbKqOtThkIzJMJsAxZgMEpG+QJKqfiEi/sD3InK/qi5zOjZjMsLu8I0xxkdYH74xxvgIS/jGGOMjLOEbY4yPsIRvjDE+whK+Mcb4CEv4xhjjIyzhG2OMj/h/Xek0rd0IeycAAAAASUVORK5CYII=",
+ "image/png": "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",
"text/plain": [
- ""
+ ""
]
},
- "metadata": {
- "needs_background": "light"
- },
+ "metadata": {},
"output_type": "display_data"
}
],
@@ -618,8 +607,7 @@
"For a Dirichlet boundary condition $u=a$ on the left-hand boundary, we set the value of the left ghost node to be equal to\n",
"$$2*a-u[0],$$\n",
"where $u[0]$ is the value of $u$ in the left-most cell in the domain. Similarly, for a Dirichlet condition $u=b$ on the right-hand boundary, we set the right ghost node to be\n",
- "$$2*b-u[-1].$$\n",
- "Note also that the size of the gradient matrix is now (41,42) instead of (39,40), to account for the presence of boundary conditions in the State Vector."
+ "$$2*b-u[-1].$$"
]
},
{
@@ -635,12 +623,12 @@
"text": [
"The gradient object is:\n",
"+\n",
- "├── @\n",
- "│ ├── Sparse Matrix (41, 40)\n",
- "│ └── y[0:40]\n",
- "└── Column vector of length 41\n",
- "The value of u on the left-hand boundary is [-40.]\n",
- "The value of u on the right-hand boundary is [80.]\n"
+ "├── Column vector of length 41\n",
+ "└── @\n",
+ " ├── Sparse Matrix (41, 40)\n",
+ " └── y[0:40]\n",
+ "The value of u on the left-hand boundary is [1.]\n",
+ "The value of u on the right-hand boundary is [1.67902865]\n"
]
}
],
@@ -649,9 +637,10 @@
"grad_u_disc = disc.process_symbol(grad_u)\n",
"print(\"The gradient object is:\")\n",
"(grad_u_disc.render())\n",
- "u_eval = grad_u_disc.children[1].evaluate(y=y)\n",
- "print(\"The value of u on the left-hand boundary is {}\".format((u_eval[0] + u_eval[1]) / 2))\n",
- "print(\"The value of u on the right-hand boundary is {}\".format((u_eval[-2] + u_eval[-1]) / 2))"
+ "u_eval = grad_u_disc.evaluate(y=y)\n",
+ "dx = np.diff(macro_mesh.nodes)[-1]\n",
+ "print(\"The value of u on the left-hand boundary is {}\".format(y[0] - dx*u_eval[0]/2))\n",
+ "print(\"The value of u on the right-hand boundary is {}\".format(y[1] + dx*u_eval[-1]/2))"
]
},
{
@@ -666,7 +655,7 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": 20,
"metadata": {
"tags": []
},
@@ -677,10 +666,10 @@
"text": [
"The gradient object is:\n",
"+\n",
- "├── @\n",
- "│ ├── Sparse Matrix (41, 40)\n",
- "│ └── y[0:40]\n",
- "└── Column vector of length 41\n",
+ "├── Column vector of length 41\n",
+ "└── @\n",
+ " ├── Sparse Matrix (41, 40)\n",
+ " └── y[0:40]\n",
"The gradient on the left-hand boundary is [3.]\n",
"The gradient of u on the right-hand boundary is [4.]\n"
]
@@ -705,7 +694,7 @@
},
{
"cell_type": "code",
- "execution_count": 19,
+ "execution_count": 21,
"metadata": {
"tags": []
},
@@ -716,13 +705,11 @@
"text": [
"The gradient object is:\n",
"+\n",
- "├── +\n",
- "│ ├── @\n",
- "│ │ ├── Sparse Matrix (41, 40)\n",
- "│ │ └── y[0:40]\n",
- "│ └── Column vector of length 41\n",
- "└── Column vector of length 41\n",
- "The value of u on the left-hand boundary is [0.]\n",
+ "├── Column vector of length 41\n",
+ "└── @\n",
+ " ├── Sparse Matrix (41, 40)\n",
+ " └── y[0:40]\n",
+ "The value of u on the left-hand boundary is [0.00036458]\n",
"The gradient on the right-hand boundary is [6.]\n"
]
}
@@ -761,7 +748,7 @@
},
{
"cell_type": "code",
- "execution_count": 20,
+ "execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
@@ -777,7 +764,7 @@
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": 23,
"metadata": {
"tags": []
},
@@ -787,10 +774,10 @@
"output_type": "stream",
"text": [
"+\n",
- "├── @\n",
- "│ ├── Sparse Matrix (40, 40)\n",
- "│ └── y[0:40]\n",
- "└── Column vector of length 40\n"
+ "├── Column vector of length 40\n",
+ "└── @\n",
+ " ├── Sparse Matrix (40, 40)\n",
+ " └── y[0:40]\n"
]
}
],
@@ -809,7 +796,7 @@
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": 24,
"metadata": {
"tags": []
},
@@ -834,7 +821,7 @@
"source": [
"print(\"div(grad) matrix is:\\n\")\n",
"print(\"1/dx^2 * \\n{}\".format(\n",
- " macro_mesh.d_edges[:,np.newaxis]**2 * div_grad_u_disc.left.left.entries.toarray()\n",
+ " macro_mesh.d_edges[:,np.newaxis]**2 * div_grad_u_disc.right.left.entries.toarray()\n",
"))"
]
},
@@ -854,7 +841,7 @@
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": 25,
"metadata": {
"tags": []
},
@@ -864,7 +851,7 @@
"output_type": "stream",
"text": [
"int(u) = [[0.08330729]] is approximately equal to 1/12, 0.08333333333333333\n",
- "int(v/r^2) = [[10.57864347]] is approximately equal to 4 * pi * sin(1), 10.574236256325824\n"
+ "int(v/r^2) = [[11.07985772]] is approximately equal to 4 * pi * sin(1), 10.574236256325824\n"
]
}
],
@@ -890,7 +877,7 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": 26,
"metadata": {
"tags": []
},
@@ -909,7 +896,9 @@
"\n",
"@\n",
"├── Sparse Matrix (1, 10)\n",
- "└── y[40:50]\n"
+ "└── *\n",
+ " ├── Column vector of length 10\n",
+ " └── y[40:50]\n"
]
}
],
@@ -922,7 +911,7 @@
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": 27,
"metadata": {},
"outputs": [
{
@@ -933,7 +922,7 @@
" 1., 1., 1., 1., 1., 1., 1., 1.]])"
]
},
- "execution_count": 25,
+ "execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
@@ -942,27 +931,6 @@
"int_u_disc.children[0].evaluate() / macro_mesh.d_edges"
]
},
- {
- "cell_type": "code",
- "execution_count": 26,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "matrix([[12.56637061, 12.56637061, 12.56637061, 12.56637061, 12.56637061,\n",
- " 12.56637061, 12.56637061, 12.56637061, 12.56637061, 12.56637061]])"
- ]
- },
- "execution_count": 26,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "int_v_over_r2_disc.children[0].evaluate() / micro_mesh.d_edges"
- ]
- },
{
"cell_type": "markdown",
"metadata": {},
@@ -982,7 +950,7 @@
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
@@ -1013,19 +981,17 @@
},
{
"cell_type": "code",
- "execution_count": 28,
+ "execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
- "image/png": "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",
+ "image/png": "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LKRSqUbiNhe6xOD+/fuQSjUvoTY2NgB+n4Fg6SztumhumMuYy6oxlzGXAcxlurK066Il0/Wab6l8fHzg5uamEY+Kigrs27fPYuIhhMDMmTOxY8cO/Oc//4GPj4/G+9YQg9oIIVBeXm414x86dGiNn1sCAwMxadIk5OTkoHPnzlYRh0eVl5fj9OnTUCgU+j8PtF7qxEKkpKQImUwmPv/8c6FUKsWsWbNEixYtREFBgRBCiLlz54rIyEh1+7y8POHk5CRef/11oVQqxeeffy5kMpnYtm2bqYbQZNrGYPPmzcLW1lasXLlSY+ntO3fumGoIeqFtHB5nCStCahuD0tJS4enpKcaPHy9yc3PFvn37RLdu3cQrr7xiqiE0mbYxSE5OFra2tmLVqlXi/PnzIj09XQQGBor+/fubaghNVlpaKrKzs0V2drYAIJYvXy6ys7PFhQsXhBDWcV00N8xlzGXVmMuYy4RgLhOCuczSNXSOW5qGzuelS5cKuVwuduzYIU6ePCleeukloVAoRElJiYl7rh/Tpk0TcrlcpKWlaeTs+/fvq9tYegxiY2PF/v37RX5+vjhx4oR45513hFQqFXv37hVCWP746/Lo6sZCWH4c3njjDZGWliby8vLEkSNHxOjRo4WLi4v62qfP8VttkVAIIVauXCk6deok7OzsRN++fdVLqQshxOTJk8XgwYM12qelpYk+ffoIOzs74e3tLZKSkozcY/3TJgaDBw8WAGq8Jk+ebPyO65m258KjLOGDlRDax+D06dPi2WefFY6OjsLT01PMnj1bI2GbI21j8PHHHws/Pz/h6OgoFAqFmDRpkigsLDRyr/Xnp59+qvf/uLVcF80NcxlzWTXmMuYyIZjLmMssX33nuKVp6HxWqVRi4cKFws3NTdjb24tBgwaJkydPmrbTelTb2AGI5ORkdRtLj8HUqVPV53u7du3E0KFD1QVCISx//HV5vEho6XGIiIgQCoVCyGQy4e7uLl544QWRm5urfl+f45cIYSX3EhAREREREREREVGtrPKZhERERERERERERPQ7FgmJiIiIiIiIiIisHIuEREREREREREREVo5FQiIiIiIiIiIiIivHIiEREREREREREZGVY5GQiIiIiIiIiIjIyrFISEREREREREREZOVYJCQiIiIiIiIiIrJyLBISERERERERkcUaMmQIZs2apfP+BQUFkEgkyMnJ0VufiJojW1N3gIiIiIiIiIjIUHbs2AGZTGbqbhA1eywSEhEREZFRVVRUwM7OztTdICIiK9G6dWtTd4HILPB2Y6Jm6saNG3Bzc8P777+v3nb06FHY2dlh7969JuwZERGRdoYMGYKZM2di9uzZaNu2LYYNG2bqLhERkRV59HZjb29vvP/++5g6dSpcXFzg5eWFNWvWaLTPyMhAnz594ODggMDAQGRnZ9f4nkqlEs899xycnZ3RoUMHREZG4ubNmwCAtLQ02NnZ4cCBA+r2y5YtQ9u2bXH16lXDDZSoiVgkJGqm2rVrh/Xr1yM+Ph6ZmZm4e/cu/vSnP2H69OkICwszdfeIiIi0smHDBtja2uLgwYP47LPPTN0dIiKyYsuWLVMX/6ZPn45p06bhv//9LwDg3r17GD16NHr06IGsrCzEx8fjzTff1Nj/6tWrGDx4MHr37o3MzEzs2bMH169fx4QJEwD8XpSMjIxEcXExjh8/jri4OKxduxYKhcLo4yVqLIkQQpi6E0RUtxkzZuDHH39Ev379cPz4cRw7dgwODg6m7hYREVGjDRkyBMXFxbXOxCAiIjK0IUOGoHfv3khMTIS3tzcGDhyITZs2AQCEEHBzc8OiRYsQHR2NNWvWIDY2FpcuXYKTkxMAYPXq1Zg2bRqys7PRu3dvLFiwAEePHsUPP/ygPkZhYSE6duyIM2fOoHv37qioqMCAAQPQrVs35ObmIjg4GGvXrjXJ+Ikai88kJGrmPvroI/Tq1Qv/+Mc/kJmZyQIhERGZpcDAQFN3gYiICADg7++v/rNEIoGbmxuKiooAAKdPn8ZTTz2lLhACQHBwsMb+WVlZ+Omnn+Ds7Fzje58/fx7du3eHnZ0dvvzyS/j7+6NTp05ITEw0zGCI9IhFQqJmLi8vD1euXIFKpcKFCxc0EhoREZG5aNGiham7QEREBAA1VjqWSCRQqVQAqmYWNkSlUmHMmDFISEio8d6jtxMfOnQIAHD79m3cvn2buZCaPT6TkKgZq6iowKRJkxAREYH33nsPUVFRuH79uqm7RUREREREZJH8/Pxw/PhxPHjwQL3tyJEjGm369u2L3NxceHt7o2vXrhqv6kLg+fPn8frrr2Pt2rUYMGAA/vznP6sLkUTNFYuERM1YXFwciouL8fHHH+Ptt9+Gr68voqKiTN0tIiIiIiIiizRx4kRIpVJERUVBqVRi9+7d+OijjzTazJgxA7dv38ZLL72EjIwM5OXlYe/evZg6dSoqKytRWVmJyMhIhIWF4eWXX0ZycjJOnTqFZcuWmWhURI3DIiFRM5WWlobExERs2rQJrq6ukEql2LRpE9LT05GUlGTq7hEREREREVkcZ2dnfPvtt1AqlejTpw/i4uJq3Fbs7u6OgwcPorKyEsOHD0evXr0QExMDuVwOqVSKxYsXo6CgAGvWrAEAuLm5Yd26dZg3bx5ycnJMMCqixuHqxkRERERERERERFaOMwmJiIiIiIiIiIisHIuEREREREREREREVo5FQiIiIiIiIiIiIivHIiEREREREREREZGVY5GQiIiIiIiIiIjIyrFISEREREREREREZOVYJCQiIiIiIiIiIrJyLBISERERERERERFZORYJiYiIiIiIiIiIrByLhERERERERERERFaORUIiIiIiIiIiIiIrxyIhERERERERERGRlft/XtgbOqd0K2wAAAAASUVORK5CYII=",
"text/plain": [
- ""
+ ""
]
},
- "metadata": {
- "needs_background": "light"
- },
+ "metadata": {},
"output_type": "display_data"
}
],
@@ -1060,19 +1026,17 @@
},
{
"cell_type": "code",
- "execution_count": 29,
+ "execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
- "image/png": "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",
+ "image/png": "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",
"text/plain": [
- ""
+ ""
]
},
- "metadata": {
- "needs_background": "light"
- },
+ "metadata": {},
"output_type": "display_data"
}
],
@@ -1122,13 +1086,13 @@
},
{
"cell_type": "code",
- "execution_count": 30,
+ "execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "981ca5da060e40f59a45c5830b64afaf",
+ "model_id": "a8807565aaf548f48ddf00a2e1d3f865",
"version_major": 2,
"version_minor": 0
},
@@ -1178,13 +1142,13 @@
},
{
"cell_type": "code",
- "execution_count": 31,
+ "execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "f83ad987884941ef907dae01b011ef17",
+ "model_id": "b50896a3c984451282cb4f0efb8389c9",
"version_major": 2,
"version_minor": 0
},
@@ -1210,13 +1174,13 @@
},
{
"cell_type": "code",
- "execution_count": 32,
+ "execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "2bcaabdc61674c02b24ff1af8cf8c8a4",
+ "model_id": "a40d1df3cf9745d78ca7b1450ce128b3",
"version_major": 2,
"version_minor": 0
},
@@ -1264,7 +1228,7 @@
},
{
"cell_type": "code",
- "execution_count": 33,
+ "execution_count": 34,
"metadata": {},
"outputs": [
{
@@ -1273,7 +1237,7 @@
"text": [
"[1] Joel A. E. Andersson, Joris Gillis, Greg Horn, James B. Rawlings, and Moritz Diehl. CasADi – A software framework for nonlinear optimization and optimal control. Mathematical Programming Computation, 11(1):1–36, 2019. doi:10.1007/s12532-018-0139-4.\n",
"[2] Charles R. Harris, K. Jarrod Millman, Stéfan J. van der Walt, Ralf Gommers, Pauli Virtanen, David Cournapeau, Eric Wieser, Julian Taylor, Sebastian Berg, Nathaniel J. Smith, and others. Array programming with NumPy. Nature, 585(7825):357–362, 2020. doi:10.1038/s41586-020-2649-2.\n",
- "[3] Valentin Sulzer, Scott G. Marquis, Robert Timms, Martin Robinson, and S. Jon Chapman. Python Battery Mathematical Modelling (PyBaMM). ECSarXiv. February, 2020. doi:10.1149/osf.io/67ckj.\n",
+ "[3] Valentin Sulzer, Scott G. Marquis, Robert Timms, Martin Robinson, and S. Jon Chapman. Python Battery Mathematical Modelling (PyBaMM). Journal of Open Research Software, 9(1):14, 2021. doi:10.5334/jors.309.\n",
"\n"
]
}
@@ -1292,7 +1256,7 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3 (ipykernel)",
+ "display_name": "Python 3.9.13 ('conda_jl')",
"language": "python",
"name": "python3"
},
@@ -1306,7 +1270,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.9.0"
+ "version": "3.9.13"
},
"toc": {
"base_numbering": 1,
@@ -1320,6 +1284,11 @@
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
+ },
+ "vscode": {
+ "interpreter": {
+ "hash": "612adcc456652826e82b485a1edaef831aa6d5abc680d008e93d513dd8724f14"
+ }
}
},
"nbformat": 4,
diff --git a/examples/scripts/calendar_ageing.py b/examples/scripts/calendar_ageing.py
index 5201f0a7ce..b33b4d35c7 100644
--- a/examples/scripts/calendar_ageing.py
+++ b/examples/scripts/calendar_ageing.py
@@ -7,10 +7,12 @@
pb.lithium_ion.SPM({"SEI": "reaction limited"}),
pb.lithium_ion.SPMe({"SEI": "reaction limited"}),
pb.lithium_ion.SPM(
- {"SEI": "reaction limited", "surface form": "algebraic"}, name="Algebraic SPM"
+ {"SEI": "reaction limited", "surface form": "algebraic"},
+ name="Algebraic SPM",
),
pb.lithium_ion.SPMe(
- {"SEI": "reaction limited", "surface form": "algebraic"}, name="Algebraic SPMe"
+ {"SEI": "reaction limited", "surface form": "algebraic"},
+ name="Algebraic SPMe",
),
pb.lithium_ion.DFN({"SEI": "reaction limited"}),
]
diff --git a/examples/scripts/compare_comsol/compare_comsol_DFN.py b/examples/scripts/compare_comsol/compare_comsol_DFN.py
index 1d17f7ba33..1b0497eecd 100644
--- a/examples/scripts/compare_comsol/compare_comsol_DFN.py
+++ b/examples/scripts/compare_comsol/compare_comsol_DFN.py
@@ -78,7 +78,7 @@ def get_interp_fun(variable_name, domain):
comsol_x = comsol_variables["x"]
# Make sure to use dimensional space
- pybamm_x = mesh.combine_submeshes(*domain).nodes * L_x
+ pybamm_x = mesh[domain].nodes * L_x
variable = interp.interp1d(comsol_x, variable, axis=0)(pybamm_x)
fun = pybamm.Interpolant(
@@ -88,7 +88,7 @@ def get_interp_fun(variable_name, domain):
)
fun.domains = {"primary": domain}
- fun.mesh = mesh.combine_submeshes(*domain)
+ fun.mesh = mesh[domain]
fun.secondary_mesh = None
return fun
diff --git a/examples/scripts/compare_lead_acid.py b/examples/scripts/compare_lead_acid.py
index 9f73046d35..dedf321298 100644
--- a/examples/scripts/compare_lead_acid.py
+++ b/examples/scripts/compare_lead_acid.py
@@ -6,12 +6,7 @@
pybamm.set_logging_level("INFO")
# load models
-models = [
- pybamm.lead_acid.LOQS(),
- pybamm.lead_acid.FOQS(),
- pybamm.lead_acid.Composite(),
- pybamm.lead_acid.Full(),
-]
+models = [pybamm.lead_acid.LOQS(), pybamm.lead_acid.Full()]
# create and run simulations
sims = []
diff --git a/examples/scripts/experiment_drive_cycle.py b/examples/scripts/experiment_drive_cycle.py
index 2ead334dad..e3e852fa99 100644
--- a/examples/scripts/experiment_drive_cycle.py
+++ b/examples/scripts/experiment_drive_cycle.py
@@ -30,13 +30,15 @@ def map_drive_cycle(x, min_op_value, max_op_value):
experiment = pybamm.Experiment(
[
- "Charge at 1 A until 4.0 V",
- "Hold at 4.0 V until 50 mA",
- "Rest for 30 minutes",
- "Run US06_A (A)",
- "Rest for 30 minutes",
- "Run US06_W (W)",
- "Rest for 30 minutes",
+ (
+ "Charge at 1 A until 4.0 V",
+ "Hold at 4.0 V until 50 mA",
+ "Rest for 30 minutes",
+ "Run US06_A (A)",
+ "Rest for 30 minutes",
+ "Run US06_W (W)",
+ "Rest for 30 minutes",
+ ),
],
drive_cycles={
"US06_A": drive_cycle_current,
diff --git a/examples/scripts/experimental_protocols/cccv.py b/examples/scripts/experimental_protocols/cccv.py
index cdba610154..6851438cf4 100644
--- a/examples/scripts/experimental_protocols/cccv.py
+++ b/examples/scripts/experimental_protocols/cccv.py
@@ -4,7 +4,7 @@
import pybamm
import matplotlib.pyplot as plt
-pybamm.set_logging_level("INFO")
+pybamm.set_logging_level("NOTICE")
experiment = pybamm.Experiment(
[
(
diff --git a/examples/scripts/run_ecm.py b/examples/scripts/run_ecm.py
new file mode 100644
index 0000000000..c86d5bce02
--- /dev/null
+++ b/examples/scripts/run_ecm.py
@@ -0,0 +1,44 @@
+import pybamm
+
+pybamm.set_logging_level("INFO")
+
+# options = {"number of rc elements": 2}
+options = {}
+model = pybamm.equivalent_circuit.Thevenin(options=options)
+
+parameter_values = model.default_parameter_values
+# parameter_values.update(
+# {
+# "R2 [Ohm]": 0.3e-3,
+# "C2 [F]": 1000 / 0.3e-3,
+# "Element-2 initial overpotential [V]": 0,
+# },
+# check_already_exists=False,
+# )
+
+experiment = pybamm.Experiment(
+ [
+ (
+ "Discharge at C/10 for 10 hours or until 3.3 V",
+ "Rest for 1 hour",
+ "Charge at 100 A until 4.1 V (1 second period)",
+ "Hold at 4.1 V until 5 A (1 seconds period)",
+ "Rest for 1 hour",
+ ),
+ ]
+)
+
+sim = pybamm.Simulation(model, experiment=experiment, parameter_values=parameter_values)
+sim.solve()
+sim.plot(
+ output_variables=[
+ "SoC",
+ "Open circuit voltage [V]",
+ "Current [A]",
+ "Cell temperature [degC]",
+ "Entropic change [V/K]",
+ "R0 [Ohm]",
+ "R1 [Ohm]",
+ "C1 [F]",
+ ]
+)
diff --git a/postBuild b/postBuild
deleted file mode 100755
index dee8b9cc12..0000000000
--- a/postBuild
+++ /dev/null
@@ -1 +0,0 @@
-pip install .
diff --git a/pybamm/__init__.py b/pybamm/__init__.py
index 7013fb5876..753085663d 100644
--- a/pybamm/__init__.py
+++ b/pybamm/__init__.py
@@ -111,6 +111,7 @@
)
from .models.full_battery_models import lead_acid
from .models.full_battery_models import lithium_ion
+from .models.full_battery_models import equivalent_circuit
#
# Submodel classes
@@ -132,6 +133,7 @@
thermal,
transport_efficiency,
particle_mechanics,
+ equivalent_circuit_elements,
)
from .models.submodels.interface import kinetics
from .models.submodels.interface import sei
@@ -161,6 +163,7 @@
from .parameters.thermal_parameters import thermal_parameters, ThermalParameters
from .parameters.lithium_ion_parameters import LithiumIonParameters
from .parameters.lead_acid_parameters import LeadAcidParameters
+from .parameters.ecm_parameters import EcmParameters
from .parameters.size_distribution_parameters import *
from .parameters.parameter_sets import parameter_sets
from .parameters_cli import add_parameter, remove_parameter, edit_parameter
diff --git a/pybamm/discretisations/discretisation.py b/pybamm/discretisations/discretisation.py
index 2068295c2b..f2dff27cd7 100644
--- a/pybamm/discretisations/discretisation.py
+++ b/pybamm/discretisations/discretisation.py
@@ -60,7 +60,7 @@ def __init__(self, mesh=None, spatial_methods=None):
)
)
- self.bcs = {}
+ self._bcs = {}
self.y_slices = {}
self._discretised_symbols = {}
self.external_variables = {}
@@ -187,7 +187,7 @@ def process_model(
pybamm.logger.verbose(
"Discretise boundary conditions for {}".format(model.name)
)
- self.bcs = self.process_boundary_conditions(model)
+ self._bcs = self.process_boundary_conditions(model)
pybamm.logger.verbose(
"Set internal boundary conditions for {}".format(model.name)
)
@@ -489,7 +489,9 @@ def process_initial_conditions(self, model):
"""
# Discretise initial conditions
- processed_initial_conditions = self.process_dict(model.initial_conditions)
+ processed_initial_conditions = self.process_dict(
+ model.initial_conditions, ics=True
+ )
# Concatenate initial conditions into a single vector
# check that all initial conditions are set
@@ -728,7 +730,7 @@ def create_mass_matrix(self, model):
return mass_matrix, mass_matrix_inv
- def process_dict(self, var_eqn_dict):
+ def process_dict(self, var_eqn_dict, ics=False):
"""Discretise a dictionary of {variable: equation}, broadcasting if necessary
(can be model.rhs, model.algebraic, model.initial_conditions or
model.variables).
@@ -739,6 +741,9 @@ def process_dict(self, var_eqn_dict):
Equations ({variable: equation} dict) to dicretise
(can be model.rhs, model.algebraic, model.initial_conditions or
model.variables)
+ ics : bool, optional
+ Whether the equations are initial conditions. If True, the equations are
+ scaled by the reference value of the variable, if given
Returns
-------
@@ -750,14 +755,25 @@ def process_dict(self, var_eqn_dict):
for eqn_key, eqn in var_eqn_dict.items():
# Broadcast if the equation evaluates to a number (e.g. Scalar)
if np.prod(eqn.shape_for_testing) == 1 and not isinstance(eqn_key, str):
- eqn = pybamm.FullBroadcast(eqn, broadcast_domains=eqn_key.domains)
+ if eqn_key.domain == []:
+ eqn = eqn * pybamm.Vector([1])
+ else:
+ eqn = pybamm.FullBroadcast(eqn, broadcast_domains=eqn_key.domains)
pybamm.logger.debug("Discretise {!r}".format(eqn_key))
-
processed_eqn = self.process_symbol(eqn)
- new_var_eqn_dict[eqn_key] = processed_eqn
+ # Calculate scale if the key has a scale
+ scale = getattr(eqn_key, "scale", 1)
+ if ics:
+ reference = getattr(eqn_key, "reference", 0)
+ else:
+ reference = 0
+ if scale != 1 or reference != 0:
+ processed_eqn = (processed_eqn - reference) / scale
+
+ new_var_eqn_dict[eqn_key] = processed_eqn
return new_var_eqn_dict
def process_symbol(self, symbol):
@@ -784,14 +800,15 @@ def process_symbol(self, symbol):
# Assign mesh as an attribute to the processed variable
if symbol.domain != []:
- discretised_symbol.mesh = self.mesh.combine_submeshes(*symbol.domain)
+ discretised_symbol.mesh = self.mesh[symbol.domain]
else:
discretised_symbol.mesh = None
+
# Assign secondary mesh
if symbol.domains["secondary"] != []:
- discretised_symbol.secondary_mesh = self.mesh.combine_submeshes(
- *symbol.domains["secondary"]
- )
+ discretised_symbol.secondary_mesh = self.mesh[
+ symbol.domains["secondary"]
+ ]
else:
discretised_symbol.secondary_mesh = None
return discretised_symbol
@@ -897,13 +914,9 @@ def _process_symbol(self, symbol):
elif isinstance(symbol, pybamm.Broadcast):
# Broadcast new_child to the domain specified by symbol.domain
# Different discretisations may broadcast differently
- if symbol.domain == []:
- out = disc_child * pybamm.Vector([1])
- else:
- out = spatial_method.broadcast(
- disc_child, symbol.domains, symbol.broadcast_type
- )
- return out
+ return spatial_method.broadcast(
+ disc_child, symbol.domains, symbol.broadcast_type
+ )
elif isinstance(symbol, pybamm.DeltaFunction):
return spatial_method.delta_function(symbol, disc_child)
@@ -935,7 +948,9 @@ def _process_symbol(self, symbol):
return symbol._function_new_copy(disc_children)
elif isinstance(symbol, pybamm.VariableDot):
- return pybamm.StateVectorDot(
+ # Add symbol's reference and multiply by the symbol's scale
+ # so that the state vector is of order 1
+ return symbol.reference + symbol.scale * pybamm.StateVectorDot(
*self.y_slices[symbol.get_variable()],
domains=symbol.domains,
)
@@ -982,11 +997,29 @@ def _process_symbol(self, symbol):
symbol.name
)
)
- return pybamm.StateVector(*y_slices, domains=symbol.domains)
+ # Add symbol's reference and multiply by the symbol's scale
+ # so that the state vector is of order 1
+ return symbol.reference + symbol.scale * pybamm.StateVector(
+ *y_slices, domains=symbol.domains
+ )
elif isinstance(symbol, pybamm.SpatialVariable):
return spatial_method.spatial_variable(symbol)
+ elif isinstance(symbol, pybamm.ConcatenationVariable):
+ # create new children without scale and reference
+ # the scale and reference will be applied to the concatenation instead
+ new_children = []
+ for child in symbol.children:
+ child = child.create_copy()
+ child._scale = 1
+ child._reference = 0
+ child.set_id()
+ new_children.append(self.process_symbol(child))
+ new_symbol = spatial_method.concatenation(new_children)
+ # apply scale to the whole concatenation
+ return symbol.reference + symbol.scale * new_symbol
+
elif isinstance(symbol, pybamm.Concatenation):
new_children = [self.process_symbol(child) for child in symbol.children]
new_symbol = spatial_method.concatenation(new_children)
diff --git a/pybamm/expression_tree/averages.py b/pybamm/expression_tree/averages.py
index 69f9d6275c..629be58a14 100644
--- a/pybamm/expression_tree/averages.py
+++ b/pybamm/expression_tree/averages.py
@@ -144,36 +144,25 @@ def x_average(symbol):
else: # pragma: no cover
# It should be impossible to get here
raise NotImplementedError
- # If symbol is a concatenation of Broadcasts, its average value is the
- # thickness-weighted average of the symbols being broadcasted
- elif isinstance(symbol, pybamm.Concatenation) and all(
- isinstance(child, pybamm.Broadcast) for child in symbol.children
+ # If symbol is a concatenation, its average value is the
+ # thickness-weighted average of the average of its children
+ elif isinstance(symbol, pybamm.Concatenation) and not isinstance(
+ symbol, pybamm.ConcatenationVariable
):
geo = pybamm.geometric_parameters
- l_n = geo.n.l
- l_s = geo.s.l
- l_p = geo.p.l
- if symbol.domain == ["negative electrode", "separator", "positive electrode"]:
- a, b, c = [orp.orphans[0] for orp in symbol.orphans]
- out = (l_n * a + l_s * b + l_p * c) / (l_n + l_s + l_p)
- elif symbol.domain == ["separator", "positive electrode"]:
- b, c = [orp.orphans[0] for orp in symbol.orphans]
- out = (l_s * b + l_p * c) / (l_s + l_p)
- # To respect domains we may need to broadcast the child back out
- child = symbol.children[0]
- # If symbol being returned doesn't have empty domain, return it
- if out.domain != []:
- return out
- # Otherwise we may need to broadcast it
- elif child.domains["secondary"] == []:
- return out
- else:
- domain = child.domains["secondary"]
- if child.domains["tertiary"] == []:
- return pybamm.PrimaryBroadcast(out, domain)
- else:
- auxiliary_domains = {"secondary": child.domains["tertiary"]}
- return pybamm.FullBroadcast(out, domain, auxiliary_domains)
+ ls = {
+ ("negative electrode",): geo.n.l,
+ ("separator",): geo.s.l,
+ ("positive electrode",): geo.p.l,
+ ("separator", "positive electrode"): geo.s.l + geo.p.l,
+ }
+ out = sum(
+ ls[tuple(orp.domain)] * x_average(orp) for orp in symbol.orphans
+ ) / sum(ls[tuple(orp.domain)] for orp in symbol.orphans)
+ return out
+ # Average of a sum is sum of averages
+ elif isinstance(symbol, (pybamm.Addition, pybamm.Subtraction)):
+ return _sum_of_averages(symbol, x_average)
# Otherwise, use Integral to calculate average value
else:
return XAverage(symbol)
@@ -210,6 +199,9 @@ def z_average(symbol):
# If symbol is a Broadcast, its average value is its child
elif isinstance(symbol, pybamm.Broadcast):
return symbol.reduce_one_dimension()
+ # Average of a sum is sum of averages
+ elif isinstance(symbol, (pybamm.Addition, pybamm.Subtraction)):
+ return _sum_of_averages(symbol, z_average)
# Otherwise, define a ZAverage
else:
return ZAverage(symbol)
@@ -243,6 +235,9 @@ def yz_average(symbol):
# If symbol is a Broadcast, its average value is its child
elif isinstance(symbol, pybamm.Broadcast):
return symbol.reduce_one_dimension()
+ # Average of a sum is sum of averages
+ elif isinstance(symbol, (pybamm.Addition, pybamm.Subtraction)):
+ return _sum_of_averages(symbol, yz_average)
# Otherwise, define a YZAverage
else:
return YZAverage(symbol)
@@ -288,6 +283,9 @@ def r_average(symbol):
and has_particle_domain
):
return symbol.reduce_one_dimension()
+ # Average of a sum is sum of averages
+ elif isinstance(symbol, (pybamm.Addition, pybamm.Subtraction)):
+ return _sum_of_averages(symbol, r_average)
else:
return RAverage(symbol)
@@ -343,3 +341,10 @@ def size_average(symbol, f_a_dist=None):
elif ["positive particle size"] in symbol.domains.values():
f_a_dist = geo.p.prim.f_a_dist(R)
return SizeAverage(symbol, f_a_dist)
+
+
+def _sum_of_averages(symbol, average_function):
+ if isinstance(symbol, pybamm.Addition):
+ return average_function(symbol.left) + average_function(symbol.right)
+ elif isinstance(symbol, pybamm.Subtraction):
+ return average_function(symbol.left) - average_function(symbol.right)
diff --git a/pybamm/expression_tree/binary_operators.py b/pybamm/expression_tree/binary_operators.py
index e1cdd0b288..d2e557e401 100644
--- a/pybamm/expression_tree/binary_operators.py
+++ b/pybamm/expression_tree/binary_operators.py
@@ -6,11 +6,12 @@
import numpy as np
import sympy
from scipy.sparse import csr_matrix, issparse
+import functools
import pybamm
-def preprocess_binary(left, right):
+def _preprocess_binary(left, right):
if isinstance(left, numbers.Number):
left = pybamm.Scalar(left)
if isinstance(right, numbers.Number):
@@ -54,7 +55,7 @@ class BinaryOperator(pybamm.Symbol):
"""
def __init__(self, name, left, right):
- left, right = preprocess_binary(left, right)
+ left, right = _preprocess_binary(left, right)
domains = self.get_children_domains([left, right])
super().__init__(name, children=[left, right], domains=domains)
@@ -267,8 +268,6 @@ def _binary_jac(self, left_jac, right_jac):
left, right = self.orphans
if left.evaluates_to_constant_number():
return left * right_jac
- elif right.evaluates_to_constant_number():
- return right * left_jac
else:
return right * left_jac + left * right_jac
@@ -356,8 +355,6 @@ def _binary_jac(self, left_jac, right_jac):
left, right = self.orphans
if left.evaluates_to_constant_number():
return -left / right**2 * right_jac
- elif right.evaluates_to_constant_number():
- return left_jac / right
else:
return (right * left_jac - left * right_jac) / right**2
@@ -431,7 +428,7 @@ def _evaluates_on_edges(self, dimension):
def inner(left, right):
"""Return inner product of two symbols."""
- left, right = preprocess_binary(left, right)
+ left, right = _preprocess_binary(left, right)
# simplify multiply by scalar zero, being careful about shape
if pybamm.is_scalar_zero(left):
return pybamm.zeros_like(right)
@@ -664,8 +661,8 @@ def _sympy_operator(self, left, right):
return sympy.Max(left, right)
-def simplify_elementwise_binary_broadcasts(left, right):
- left, right = preprocess_binary(left, right)
+def _simplify_elementwise_binary_broadcasts(left, right):
+ left, right = _preprocess_binary(left, right)
def unpack_broadcast_recursive(symbol):
if isinstance(symbol, pybamm.Broadcast):
@@ -692,7 +689,7 @@ def unpack_broadcast_recursive(symbol):
return left, right
-def simplified_binary_broadcast_concatenation(left, right, operator):
+def _simplified_binary_broadcast_concatenation(left, right, operator):
"""
Check if there are concatenations or broadcasts that we can commute the operator
with
@@ -714,16 +711,8 @@ def simplified_binary_broadcast_concatenation(left, right, operator):
return left._concatenation_new_copy(
[operator(child, right) for child in left.orphans]
)
- elif (
- isinstance(right, pybamm.Concatenation)
- and not any(
- isinstance(child, (pybamm.Variable, pybamm.StateVector))
- for child in right.children
- )
- and (
- all(child.is_constant() for child in left.children)
- or all(child.is_constant() for child in right.children)
- )
+ elif isinstance(right, pybamm.Concatenation) and not isinstance(
+ right, pybamm.ConcatenationVariable
):
return left._concatenation_new_copy(
[
@@ -741,10 +730,10 @@ def simplified_binary_broadcast_concatenation(left, right, operator):
def simplified_power(left, right):
- left, right = simplify_elementwise_binary_broadcasts(left, right)
+ left, right = _simplify_elementwise_binary_broadcasts(left, right)
# Check for Concatenations and Broadcasts
- out = simplified_binary_broadcast_concatenation(left, right, simplified_power)
+ out = _simplified_binary_broadcast_concatenation(left, right, simplified_power)
if out is not None:
return out
@@ -790,20 +779,22 @@ def simplified_addition(left, right):
(Zero Matrix) + (Zero Scalar)
should return (Zero Matrix), not (Zero Scalar).
"""
- left, right = simplify_elementwise_binary_broadcasts(left, right)
+ left, right = _simplify_elementwise_binary_broadcasts(left, right)
+
+ # Move constant to always be on the left
+ if right.is_constant() and not left.is_constant():
+ left, right = right, left
# Check for Concatenations and Broadcasts
- out = simplified_binary_broadcast_concatenation(left, right, simplified_addition)
+ out = _simplified_binary_broadcast_concatenation(left, right, simplified_addition)
if out is not None:
return out
# anything added by a scalar zero returns the other child
- elif pybamm.is_scalar_zero(left):
+ if pybamm.is_scalar_zero(left):
return right
- elif pybamm.is_scalar_zero(right):
- return left
# Check matrices after checking scalars
- elif pybamm.is_matrix_zero(left):
+ if pybamm.is_matrix_zero(left):
if right.evaluates_to_number():
return right * pybamm.ones_like(left)
# If left object is zero and has size smaller than or equal to right object in
@@ -820,20 +811,6 @@ def simplified_addition(left, right):
for dim in left.domains.keys()
):
return right
- elif pybamm.is_matrix_zero(right):
- if left.evaluates_to_number():
- return left * pybamm.ones_like(right)
- # See comment above
- elif all(
- left_dim_size >= right_dim_size
- for left_dim_size, right_dim_size in zip(
- left.shape_for_testing, right.shape_for_testing
- )
- ) and all(
- left.evaluates_on_edges(dim) == right.evaluates_on_edges(dim)
- for dim in left.domains.keys()
- ):
- return left
# Return constant if both sides are constant
if left.is_constant() and right.is_constant():
@@ -855,42 +832,29 @@ def simplified_addition(left, right):
new_sum.copy_domains(Addition(left, right))
return new_sum
- if isinstance(right, Addition) and left.is_constant():
- # Simplify a + (b + c) to (a + b) + c if (a + b) is constant
- if right.left.is_constant():
- r_left, r_right = right.orphans
- return (left + r_left) + r_right
- # Simplify a + (b + c) to (a + c) + b if (a + c) is constant
- elif right.right.is_constant():
- r_left, r_right = right.orphans
- return (left + r_right) + r_left
- elif isinstance(right, Subtraction) and left.is_constant():
- # Simplify a + (b - c) to (a + b) - c if (a + b) is constant
- if right.left.is_constant():
+ # Turn a + (-b) into a - b
+ if isinstance(right, pybamm.Negate):
+ return left - right.orphans[0]
+ # Turn (-a) + b into b - a
+ # check for is_constant() to avoid infinite recursion
+ if isinstance(left, pybamm.Negate) and not left.is_constant():
+ return right - left.orphans[0]
+
+ if left.is_constant():
+ if isinstance(right, (Addition, Subtraction)) and right.left.is_constant():
+ # Simplify a + (b +- c) to (a + b) +- c if (a + b) is constant
r_left, r_right = right.orphans
- return (left + r_left) - r_right
- # Simplify a + (b - c) to (a - c) + b if (a - c) is constant
- elif right.right.is_constant():
- r_left, r_right = right.orphans
- return (left - r_right) + r_left
- if isinstance(left, Addition) and right.is_constant():
- # Simplify (a + b) + c to a + (b + c) if (b + c) is constant
- if left.right.is_constant():
- l_left, l_right = left.orphans
- return l_left + (l_right + right)
- # Simplify (a + b) + c to (a + c) + b if (a + c) is constant
- elif left.left.is_constant():
- l_left, l_right = left.orphans
- return (l_left + right) + l_right
- elif isinstance(left, Subtraction) and right.is_constant():
- # Simplify (a - b) + c to a + (c - b) if (c - b) is constant
- if left.right.is_constant():
- l_left, l_right = left.orphans
- return l_left + (right - l_right)
- # Simplify (a - b) + c to (a + c) - b if (a + c) is constant
- elif left.left.is_constant():
- l_left, l_right = left.orphans
- return (l_left + right) - l_right
+ return right._binary_new_copy(left + r_left, r_right)
+ if isinstance(left, Subtraction):
+ if right == left.right:
+ # Simplify (a - b) + b to a
+ # Make sure shape is preserved
+ return left.left * pybamm.ones_like(left.right)
+ if isinstance(right, Subtraction):
+ if left == right.right:
+ # Simplify a + (b - a) to b
+ # Make sure shape is preserved
+ return right.left * pybamm.ones_like(right.right)
return pybamm.simplify_if_constant(Addition(left, right))
@@ -903,18 +867,23 @@ def simplified_subtraction(left, right):
(Zero Matrix) - (Zero Scalar)
should return (Zero Matrix), not -(Zero Scalar).
"""
- left, right = simplify_elementwise_binary_broadcasts(left, right)
+ left, right = _simplify_elementwise_binary_broadcasts(left, right)
+
+ # Move constant to always be on the left
+ # For a subtraction, this means (var - constant) becomes (-constant + var)
+ if right.is_constant() and not left.is_constant():
+ return -right + left
# Check for Concatenations and Broadcasts
- out = simplified_binary_broadcast_concatenation(left, right, simplified_subtraction)
+ out = _simplified_binary_broadcast_concatenation(
+ left, right, simplified_subtraction
+ )
if out is not None:
return out
# anything added by a scalar zero returns the other child
if pybamm.is_scalar_zero(left):
return -right
- if pybamm.is_scalar_zero(right):
- return left
# Check matrices after checking scalars
if pybamm.is_matrix_zero(left):
if right.evaluates_to_number():
@@ -930,20 +899,6 @@ def simplified_subtraction(left, right):
for dim in left.domains.keys()
):
return -right
- if pybamm.is_matrix_zero(right):
- if left.evaluates_to_number():
- return left * pybamm.ones_like(right)
- # See comments in simplified_addition
- elif all(
- left_dim_size >= right_dim_size
- for left_dim_size, right_dim_size in zip(
- left.shape_for_testing, right.shape_for_testing
- )
- ) and all(
- left.evaluates_on_edges(dim) == right.evaluates_on_edges(dim)
- for dim in left.domains.keys()
- ):
- return left
# Return constant if both sides are constant
if left.is_constant() and right.is_constant():
@@ -953,51 +908,50 @@ def simplified_subtraction(left, right):
if left == right:
return pybamm.zeros_like(left)
- if isinstance(right, Addition) and left.is_constant():
- # Simplify a - (b + c) to (a - b) - c if (a - b) is constant
- if right.left.is_constant():
- r_left, r_right = right.orphans
- return (left - r_left) - r_right
- # Simplify a - (b + c) to (a - c) - b if (a - c) is constant
- elif right.right.is_constant():
- r_left, r_right = right.orphans
- return (left - r_right) - r_left
- elif isinstance(right, Subtraction) and left.is_constant():
- # Simplify a - (b - c) to (a - b) + c if (a - b) is constant
- if right.left.is_constant():
- r_left, r_right = right.orphans
- return (left - r_left) + r_right
- # Simplify a - (b - c) to (a + c) - b if (a + c) is constant
- elif right.right.is_constant():
+ # Turn a - (-b) into a + b
+ if isinstance(right, pybamm.Negate):
+ return left + right.orphans[0]
+
+ if left.is_constant():
+ if isinstance(right, (Addition, Subtraction)) and right.left.is_constant():
+ # Simplify a - (b +- c) to (a - b) -+ c if (a - b) is constant
r_left, r_right = right.orphans
- return (left + r_right) - r_left
- if isinstance(left, Addition) and right.is_constant():
- # Simplify (a + b) - c to a + (b - c) if (b - c) is constant
- if left.right.is_constant():
- l_left, l_right = left.orphans
- return l_left + (l_right - right)
- # Simplify (a + b) - c to (a - c) + b if (a - c) is constant
- elif left.left.is_constant():
- l_left, l_right = left.orphans
- return (l_left - right) + l_right
- elif isinstance(left, Subtraction) and right.is_constant():
- # Simplify (a - b) - c to a - (c + b) if (c + b) is constant
- if left.right.is_constant():
- l_left, l_right = left.orphans
- return l_left - (right + l_right)
- # Simplify (a - b) - c to (a - c) - b if (a - c) is constant
- elif left.left.is_constant():
- l_left, l_right = left.orphans
- return (l_left - right) - l_right
+ return right._binary_new_copy(left - r_left, -r_right)
+ elif isinstance(left, Addition):
+ if right == left.right:
+ # Simplify (b + a) - a to b
+ return left.left
+ if right == left.left:
+ # Simplify (a + b) - a to b
+ return left.right
+ elif isinstance(left, Subtraction):
+ if right == left.left:
+ # Simplify (b - a) - b to -a
+ return -left.right
+ elif isinstance(right, Addition):
+ if left == right.left:
+ # Simplify a - (a + b) to -b
+ return -right.right
+ if left == right.right:
+ # Simplify a - (b + a) to -b
+ return -right.left
+ elif isinstance(right, Subtraction):
+ if left == right.left:
+ # Simplify a - (a - b) to b
+ return right.right
return pybamm.simplify_if_constant(Subtraction(left, right))
def simplified_multiplication(left, right):
- left, right = simplify_elementwise_binary_broadcasts(left, right)
+ left, right = _simplify_elementwise_binary_broadcasts(left, right)
+
+ # Move constant to always be on the left
+ if right.is_constant() and not left.is_constant():
+ left, right = right, left
# Check for Concatenations and Broadcasts
- out = simplified_binary_broadcast_concatenation(
+ out = _simplified_binary_broadcast_concatenation(
left, right, simplified_multiplication
)
if out is not None:
@@ -1006,24 +960,18 @@ def simplified_multiplication(left, right):
# simplify multiply by scalar zero, being careful about shape
if pybamm.is_scalar_zero(left):
return pybamm.zeros_like(right)
- if pybamm.is_scalar_zero(right):
- return pybamm.zeros_like(left)
# if one of the children is a zero matrix, we have to be careful about shapes
- if pybamm.is_matrix_zero(left) or pybamm.is_matrix_zero(right):
+ if pybamm.is_matrix_zero(left):
return pybamm.zeros_like(Multiplication(left, right))
# anything multiplied by a scalar one returns itself
if pybamm.is_scalar_one(left):
return right
- if pybamm.is_scalar_one(right):
- return left
# anything multiplied by a scalar negative one returns negative itself
if pybamm.is_scalar_minus_one(left):
return -right
- if pybamm.is_scalar_minus_one(right):
- return -left
# Return constant if both sides are constant
if left.is_constant() and right.is_constant():
@@ -1041,109 +989,80 @@ def simplified_multiplication(left, right):
):
if pybamm.is_matrix_one(left):
return right
- elif pybamm.is_matrix_one(right):
- return left
# also check for negative one
if pybamm.is_matrix_minus_one(left):
return -right
- elif pybamm.is_matrix_minus_one(right):
- return -left
except NotImplementedError:
pass
- # Simplify (B @ c) * a to (a * B) @ c if (a * B) is constant
- # This is a common construction that appears from discretisation of spatial
- # operators
- if (
- isinstance(left, MatrixMultiplication)
- and left.left.is_constant()
- and right.is_constant()
- and not (right.ndim_for_testing == 2 and right.shape_for_testing[1] > 1)
- ):
- l_left, l_right = left.orphans
- new_left = right * l_left
- # be careful about domains to avoid weird errors
- new_left.clear_domains()
- new_mul = new_left @ l_right
- # Keep the domain of the old left
- new_mul.copy_domains(left)
- return new_mul
-
- elif isinstance(left, Multiplication) and right.is_constant():
- # Simplify (a * b) * c to (a * c) * b if (a * c) is constant
- if left.left.is_constant():
- l_left, l_right = left.orphans
- return (l_left * right) * l_right
- # Simplify (a * b) * c to a * (b * c) if (b * c) is constant
- elif left.right.is_constant():
- l_left, l_right = left.orphans
- return l_left * (l_right * right)
- elif isinstance(left, Division) and right.is_constant():
- # Simplify (a / b) * c to a * (c / b) if (c / b) is constant
- if left.right.is_constant():
- l_left, l_right = left.orphans
- return l_left * (right / l_right)
-
- # Simplify a * (B @ c) to (a * B) @ c if (a * B) is constant
- if (
- isinstance(right, MatrixMultiplication)
- and right.left.is_constant()
- and left.is_constant()
- and not (left.ndim_for_testing == 2 and left.shape_for_testing[1] > 1)
- ):
- r_left, r_right = right.orphans
- new_left = left * r_left
- # be careful about domains to avoid weird errors
- new_left.clear_domains()
- new_mul = new_left @ r_right
- # Keep the domain of the old right
- new_mul.copy_domains(right)
- return new_mul
-
- elif isinstance(right, Multiplication) and left.is_constant():
- # Simplify a * (b * c) to (a * b) * c if (a * b) is constant
- if right.left.is_constant():
- r_left, r_right = right.orphans
- return (left * r_left) * r_right
- # Simplify a * (b * c) to (a * c) * b if (a * c) is constant
- elif right.right.is_constant():
- r_left, r_right = right.orphans
- return (left * r_right) * r_left
- elif isinstance(right, Division) and left.is_constant():
- # Simplify a * (b / c) to (a / c) * b if (a / c) is constant
- if right.right.is_constant():
- r_left, r_right = right.orphans
- return (left / r_right) * r_left
-
- # Simplify a * (b + c) to (a * b) + (a * c) if (a * b) or (a * c) is constant
- # This is a common construction that appears from discretisation of spatial
- # operators
- # Also do this for cases like a * (b @ c + d) where (a * b) is constant
- elif isinstance(right, (Addition, Subtraction)):
- mul_classes = (Multiplication, MatrixMultiplication, Division)
+ if left.is_constant():
+ # Simplify a * (B @ c) to (a * B) @ c if (a * B) is constant
if (
- right.left.is_constant()
- or right.right.is_constant()
- or (isinstance(right.left, mul_classes) and right.left.left.is_constant())
- or (isinstance(right.right, mul_classes) and right.right.left.is_constant())
+ isinstance(right, MatrixMultiplication)
+ and right.left.is_constant()
+ and not (left.ndim_for_testing == 2 and left.shape_for_testing[1] > 1)
):
r_left, r_right = right.orphans
- if (r_left.domain == right.domain or r_left.domain == []) and (
- r_right.domain == right.domain or r_right.domain == []
+ new_left = left * r_left
+ # be careful about domains to avoid weird errors
+ new_left.clear_domains()
+ new_mul = new_left @ r_right
+ # Keep the domain of the old right
+ new_mul.copy_domains(right)
+ return new_mul
+
+ elif isinstance(right, Multiplication):
+ # Simplify a * (b * c) to (a * b) * c if (a * b) is constant
+ if right.left.is_constant():
+ r_left, r_right = right.orphans
+ return (left * r_left) * r_right
+ elif isinstance(right, Division):
+ # Simplify a * (b / c) to (a * b) / c if (a * c) is constant
+ if right.left.is_constant():
+ r_left, r_right = right.orphans
+ return (left * r_left) / r_right
+
+ # Simplify a * (b + c) to (a * b) + (a * c) if (a * b) is constant
+ # This is a common construction that appears from discretisation of spatial
+ # operators
+ # Also do this for cases like a * (b @ c + d) where (a * b) is constant
+ elif isinstance(right, (Addition, Subtraction)):
+ mul_classes = (Multiplication, MatrixMultiplication)
+ if (
+ right.left.is_constant()
+ or (
+ isinstance(right.left, mul_classes)
+ and right.left.left.is_constant()
+ )
+ or (
+ isinstance(right.right, mul_classes)
+ and right.right.left.is_constant()
+ )
):
- if isinstance(right, Addition):
- return (left * r_left) + (left * r_right)
- elif isinstance(right, Subtraction):
- return (left * r_left) - (left * r_right)
+ r_left, r_right = right.orphans
+ if (r_left.domain == right.domain or r_left.domain == []) and (
+ r_right.domain == right.domain or r_right.domain == []
+ ):
+ if isinstance(right, Addition):
+ return (left * r_left) + (left * r_right)
+ elif isinstance(right, Subtraction):
+ return (left * r_left) - (left * r_right)
+
+ # Cancelling out common terms
+ if isinstance(left, Division):
+ # Simplify (a / b) * b to a
+ if left.right == right:
+ return left.left
+ if isinstance(right, Division):
+ # Simplify a * (b / a) to b
+ if left == right.right:
+ return right.left
# Negation simplifications
if isinstance(left, pybamm.Negate) and isinstance(right, pybamm.Negate):
# Double negation cancels out
return left.orphans[0] * right.orphans[0]
- elif isinstance(left, pybamm.Negate) and right.is_constant():
- # Simplify (-a) * b to a * (-b) if (-b) is constant
- return left.orphans[0] * (-right)
elif isinstance(right, pybamm.Negate) and left.is_constant():
# Simplify a * (-b) to (-a) * b if (-a) is constant
return (-left) * right.orphans[0]
@@ -1152,10 +1071,19 @@ def simplified_multiplication(left, right):
def simplified_division(left, right):
- left, right = simplify_elementwise_binary_broadcasts(left, right)
+ left, right = _simplify_elementwise_binary_broadcasts(left, right)
+
+ # anything divided by zero raises error
+ if pybamm.is_scalar_zero(right):
+ raise ZeroDivisionError
+
+ # Move constant to always be on the left
+ # For a division, this means (var / constant) becomes (1/constant * var)
+ if right.is_constant() and not left.is_constant():
+ return (1 / right) * left
# Check for Concatenations and Broadcasts
- out = simplified_binary_broadcast_concatenation(left, right, simplified_division)
+ out = _simplified_binary_broadcast_concatenation(left, right, simplified_division)
if out is not None:
return out
@@ -1167,120 +1095,53 @@ def simplified_division(left, right):
if pybamm.is_matrix_zero(left):
return pybamm.zeros_like(Division(left, right))
- # anything divided by zero raises error
- if pybamm.is_scalar_zero(right):
- raise ZeroDivisionError
-
- # anything divided by one is itself
- if pybamm.is_scalar_one(right):
- return left
-
# a symbol divided by itself is 1s of the same shape
if left == right:
return pybamm.ones_like(left)
- # anything multiplied by a matrix one returns itself if
- # - the shapes are the same
- # - both left and right evaluate on edges, or both evaluate on nodes, in all
- # dimensions
- # (and possibly more generally, but not implemented here)
- try:
- if left.shape_for_testing == right.shape_for_testing and all(
- left.evaluates_on_edges(dim) == right.evaluates_on_edges(dim)
- for dim in left.domains.keys()
- ):
- if pybamm.is_matrix_one(right):
- return left
- # also check for negative one
- if pybamm.is_matrix_minus_one(right):
- return -left
-
- except NotImplementedError:
- pass
-
# Return constant if both sides are constant
if left.is_constant() and right.is_constant():
return pybamm.simplify_if_constant(Division(left, right))
- # Simplify (B @ c) / a to (B / a) @ c if (B / a) is constant
- # This is a common construction that appears from discretisation of averages
- elif isinstance(left, MatrixMultiplication) and right.is_constant():
- l_left, l_right = left.orphans
- new_left = l_left / right
- if new_left.is_constant():
- # be careful about domains to avoid weird errors
- new_left.clear_domains()
- new_division = new_left @ l_right
- # Keep the domain of the old left
- new_division.copy_domains(left)
- return new_division
-
- if isinstance(left, Multiplication) and right.is_constant():
- # Simplify (a * b) / c to (a / c) * b if (a / c) is constant
- if left.left.is_constant():
- l_left, l_right = left.orphans
- return (l_left / right) * l_right
- # Simplify (a * b) / c to a * (b / c) if (b / c) is constant
- elif left.right.is_constant():
- l_left, l_right = left.orphans
- return l_left * (l_right / right)
- elif isinstance(left, Division) and right.is_constant():
- # Simplify (a / b) / c to (a / c) / b if (a / c) is constant
- if left.left.is_constant():
- l_left, l_right = left.orphans
- return (l_left / right) / l_right
- # Simplify (a / b) / c to a / (b * c) if (b * c) is constant
- elif left.right.is_constant():
- l_left, l_right = left.orphans
- return l_left / (l_right * right)
-
- if isinstance(right, Multiplication) and left.is_constant():
- # Simplify a / (b * c) to (a / b) / c if (a / b) is constant
- if right.left.is_constant():
- r_left, r_right = right.orphans
- return (left / r_left) / r_right
- # Simplify a / (b * c) to (a / c) / b if (a / c) is constant
- elif right.right.is_constant():
- r_left, r_right = right.orphans
- return (left / r_right) / r_left
- elif isinstance(right, Division) and left.is_constant():
- # Simplify a / (b / c) to (a / b) * c if (a / b) is constant
- if right.left.is_constant():
- r_left, r_right = right.orphans
- return (left / r_left) * r_right
- # Simplify a / (b / c) to (a * c) / b if (a * c) is constant
- elif right.right.is_constant():
+ if left.is_constant():
+ if isinstance(right, (Multiplication, Division)) and right.left.is_constant():
r_left, r_right = right.orphans
- return (left * r_right) / r_left
+ # Simplify a / (b */ c) to (a / b) /* c if (a / b) is constant
+ if isinstance(right, Multiplication):
+ return (left / r_left) / r_right
+ elif isinstance(right, Division):
+ return (left / r_left) * r_right
# Cancelling out common terms
- if isinstance(left, Multiplication) and isinstance(right, Multiplication):
- if left.left == right.left:
- _, l_right = left.orphans
- _, r_right = right.orphans
- return l_right / r_right
- if left.right == right.right:
- l_left, _ = left.orphans
- r_left, _ = right.orphans
- return l_left / r_left
+ if isinstance(left, Multiplication):
+ if left.left == right:
+ return left.right
+ elif left.right == right:
+ return left.left
+ elif isinstance(right, Multiplication):
+ if left.left == right.left:
+ _, l_right = left.orphans
+ _, r_right = right.orphans
+ return l_right / r_right
+ if left.right == right.right:
+ l_left, _ = left.orphans
+ r_left, _ = right.orphans
+ return l_left / r_left
# Negation simplifications
- if isinstance(left, pybamm.Negate) and isinstance(right, pybamm.Negate):
- # Double negation cancels out
- return left.orphans[0] / right.orphans[0]
- elif isinstance(left, pybamm.Negate) and right.is_constant():
- # Simplify (-a) / b to a / (-b) if (-b) is constant
- return left.orphans[0] / (-right)
-
- if isinstance(right, pybamm.Negate) and left.is_constant():
- # Simplify a / (-b) to (-a) / b if (-a) is constant
- return (-left) / right.orphans[0]
+ if isinstance(right, pybamm.Negate):
+ if isinstance(left, pybamm.Negate):
+ # Double negation cancels out
+ return left.orphans[0] / right.orphans[0]
+ elif left.is_constant():
+ # Simplify a / (-b) to (-a) / b if (-a) is constant
+ return (-left) / right.orphans[0]
return pybamm.simplify_if_constant(Division(left, right))
def simplified_matrix_multiplication(left, right):
- left, right = preprocess_binary(left, right)
+ left, right = _preprocess_binary(left, right)
if pybamm.is_matrix_zero(left) or pybamm.is_matrix_zero(right):
return pybamm.zeros_like(MatrixMultiplication(left, right))
@@ -1289,15 +1150,6 @@ def simplified_matrix_multiplication(left, right):
if right.left.evaluates_to_constant_number():
r_left, r_right = right.orphans
return (left * r_left) @ r_right
- # Simplify A @ (b * c) to (A * c) @ b if (A * c) is constant
- elif right.right.evaluates_to_constant_number():
- r_left, r_right = right.orphans
- return (left * r_right) @ r_left
- elif isinstance(right, Division) and left.is_constant():
- # Simplify A @ (b / c) to (A / c) @ b if (A / c) is constant
- if right.right.evaluates_to_constant_number():
- r_left, r_right = right.orphans
- return (left / r_right) @ r_left
# Simplify A @ (B @ c) to (A @ B) @ c if (A @ B) is constant
# This is a common construction that appears from discretisation of spatial
@@ -1327,12 +1179,12 @@ def simplified_matrix_multiplication(left, right):
(right.left.is_constant() or right.right.is_constant())
# these lines should work but don't, possibly because of poorly
# conditioned model?
- # or (
- # isinstance(right.left, MatrixMultiplication)
- # and right.left.left.is_constant()
- # and isinstance(right.right, MatrixMultiplication)
- # and right.right.left.is_constant()
- # )
+ or (
+ isinstance(right.left, MatrixMultiplication)
+ and right.left.left.is_constant()
+ and isinstance(right.right, MatrixMultiplication)
+ and right.right.left.is_constant()
+ )
) and not (
right.left.size_for_testing == 1 or right.right.size_for_testing == 1
):
@@ -1352,10 +1204,16 @@ def minimum(left, right):
Returns the smaller of two objects, possibly with a smoothing approximation.
Not to be confused with :meth:`pybamm.min`, which returns min function of child.
"""
+ # Check for Concatenations and Broadcasts
+ left, right = _simplify_elementwise_binary_broadcasts(left, right)
+ out = _simplified_binary_broadcast_concatenation(left, right, minimum)
+ if out is not None:
+ return out
+
k = pybamm.settings.min_smoothing
# Return exact approximation if that is the setting or the outcome is a constant
# (i.e. no need for smoothing)
- if k == "exact" or (pybamm.is_constant(left) and pybamm.is_constant(right)):
+ if k == "exact" or (left.is_constant() and right.is_constant()):
out = Minimum(left, right)
else:
out = pybamm.softminus(left, right, k)
@@ -1367,16 +1225,61 @@ def maximum(left, right):
Returns the larger of two objects, possibly with a smoothing approximation.
Not to be confused with :meth:`pybamm.max`, which returns max function of child.
"""
+ # Check for Concatenations and Broadcasts
+ left, right = _simplify_elementwise_binary_broadcasts(left, right)
+ out = _simplified_binary_broadcast_concatenation(left, right, maximum)
+ if out is not None:
+ return out
+
k = pybamm.settings.max_smoothing
# Return exact approximation if that is the setting or the outcome is a constant
# (i.e. no need for smoothing)
- if k == "exact" or (pybamm.is_constant(left) and pybamm.is_constant(right)):
+ if k == "exact" or (left.is_constant() and right.is_constant()):
out = Maximum(left, right)
else:
out = pybamm.softplus(left, right, k)
return pybamm.simplify_if_constant(out)
+def _heaviside(left, right, equal):
+ """return a :class:`EqualHeaviside` object, or a smooth approximation."""
+ # Check for Concatenations and Broadcasts
+ left, right = _simplify_elementwise_binary_broadcasts(left, right)
+ out = _simplified_binary_broadcast_concatenation(
+ left, right, functools.partial(_heaviside, equal=equal)
+ )
+ if out is not None:
+ return out
+
+ if (
+ left.is_constant()
+ and isinstance(right, BinaryOperator)
+ and right.left.is_constant()
+ ):
+ if isinstance(right, Addition):
+ # simplify heaviside(a, b + var) to heaviside(a - b, var)
+ return _heaviside(left - right.left, right.right, equal=equal)
+ # elif isinstance(right, Multiplication):
+ # # simplify heaviside(a, b * var) to heaviside(a/b, var)
+ # if right.left.evaluate() > 0:
+ # return _heaviside(left / right.left, right.right, equal=equal)
+ # else:
+ # # maintain the sign of each side
+ # return _heaviside(left / -right.left, -right.right, equal=equal)
+
+ k = pybamm.settings.heaviside_smoothing
+ # Return exact approximation if that is the setting or the outcome is a constant
+ # (i.e. no need for smoothing)
+ if k == "exact" or (left.is_constant() and right.is_constant()):
+ if equal is True:
+ out = pybamm.EqualHeaviside(left, right)
+ else:
+ out = pybamm.NotEqualHeaviside(left, right)
+ else:
+ out = pybamm.sigmoid(left, right, k)
+ return pybamm.simplify_if_constant(out)
+
+
def softminus(left, right, k):
"""
Softplus approximation to the minimum function. k is the smoothing parameter,
diff --git a/pybamm/expression_tree/broadcasts.py b/pybamm/expression_tree/broadcasts.py
index 2c235ecd6d..8c66ee9c97 100644
--- a/pybamm/expression_tree/broadcasts.py
+++ b/pybamm/expression_tree/broadcasts.py
@@ -87,6 +87,8 @@ def check_and_set_domains(self, child, broadcast_domain):
# Can only do primary broadcast from current collector to electrode,
# particle-size or particle or from electrode to particle-size or particle.
# Note e.g. current collector to particle *is* allowed
+ if broadcast_domain == []:
+ raise pybamm.DomainError("Cannot Broadcast an object into empty domain.")
if child.domain == []:
pass
elif child.domain == ["current collector"] and not (
@@ -430,7 +432,10 @@ def __init__(
def check_and_set_domains(self, child, broadcast_domains):
"""See :meth:`Broadcast.check_and_set_domains`"""
-
+ if broadcast_domains["primary"] == []:
+ raise pybamm.DomainError(
+ """Cannot do full broadcast to an empty primary domain"""
+ )
# Variables on the current collector can only be broadcast to 'primary'
if child.domain == ["current collector"]:
raise pybamm.DomainError(
@@ -544,6 +549,10 @@ def full_like(symbols, fill_value):
return array_type(entries, domains=sum_symbol.domains)
except NotImplementedError:
+ if sum_symbol.shape_for_testing == (1, 1) or sum_symbol.shape_for_testing == (
+ 1,
+ ):
+ return pybamm.Scalar(fill_value)
if sum_symbol.evaluates_on_edges("primary"):
return FullBroadcastToEdges(
fill_value, broadcast_domains=sum_symbol.domains
diff --git a/pybamm/expression_tree/concatenations.py b/pybamm/expression_tree/concatenations.py
index b3abef26f6..1e1d66df7f 100644
--- a/pybamm/expression_tree/concatenations.py
+++ b/pybamm/expression_tree/concatenations.py
@@ -42,6 +42,7 @@ def __init__(self, *children, name=None, check_domain=True, concat_fun=None):
else:
domains = {"primary": []}
self.concatenation_function = concat_fun
+
super().__init__(name, children, domains=domains)
def __str__(self):
@@ -260,7 +261,7 @@ def _get_auxiliary_domain_repeats(self, auxiliary_domains):
mesh_pts = 1
for level, dom in auxiliary_domains.items():
if level != "primary" and dom != []:
- mesh_pts *= self.full_mesh.combine_submeshes(*dom).npts
+ mesh_pts *= self.full_mesh[dom].npts
return mesh_pts
@property
@@ -364,9 +365,22 @@ def __init__(self, *children):
name = intersect(children[0].name, children[1].name)
for child in children[2:]:
name = intersect(name, child.name)
- name = name.capitalize()
- if name == "":
+ if len(name) == 0:
name = None
+ # name is unchanged if its length is 1
+ elif len(name) > 1:
+ name = name[0].capitalize() + name[1:]
+
+ if len(children) > 0:
+ if all(child.scale == children[0].scale for child in children):
+ self._scale = children[0].scale
+ else:
+ raise ValueError("Cannot concatenate symbols with different scales")
+ if all(child.reference == children[0].reference for child in children):
+ self._reference = children[0].reference
+ else:
+ raise ValueError("Cannot concatenate symbols with different references")
+
super().__init__(*children, name=name)
# Overly tight bounds, can edit later if required
self.bounds = (
diff --git a/pybamm/expression_tree/interpolant.py b/pybamm/expression_tree/interpolant.py
index fdea90b306..eafe887a15 100644
--- a/pybamm/expression_tree/interpolant.py
+++ b/pybamm/expression_tree/interpolant.py
@@ -68,12 +68,12 @@ def __init__(
x1, x2 = x
if y.ndim != 2:
raise ValueError("y should be two-dimensional if len(x)=2")
- if x1.shape[0] != y.shape[1]:
+ if x1.shape[0] != y.shape[0]:
raise ValueError(
"len(x1) should equal y=shape[1], "
f"but x1.shape={x1.shape} and y.shape={y.shape}"
)
- if x2 is not None and x2.shape[0] != y.shape[0]:
+ if x2 is not None and x2.shape[0] != y.shape[1]:
raise ValueError(
"len(x2) should equal y=shape[0], "
f"but x2.shape={x2.shape} and y.shape={y.shape}"
@@ -153,9 +153,18 @@ def __init__(
"interpolator should be 'linear' or 'cubic' if x is two-dimensional"
)
else:
- interpolating_function = interpolate.interp2d(
- x1, x2, y, kind=interpolator
+ if extrapolate:
+ fill_value = None
+ else:
+ fill_value = np.nan
+ interpolating_function = interpolate.RegularGridInterpolator(
+ (x1, x2),
+ y,
+ method=interpolator,
+ bounds_error=False,
+ fill_value=fill_value,
)
+
elif len(x) == 3:
self.dimension = 3
@@ -241,13 +250,7 @@ def _function_evaluate(self, evaluated_children):
children_eval_flat.append(child)
if self.dimension == 1:
return self.function(*children_eval_flat).flatten()[:, np.newaxis]
- elif self.dimension == 2:
- res = self.function(*children_eval_flat)
- if res.ndim > 1:
- return np.diagonal(res)[:, np.newaxis]
- else:
- return res[:, np.newaxis]
- elif self.dimension == 3:
+ elif self.dimension in [2, 3]:
# If the children are scalars, we need to add a dimension
shapes = []
diff --git a/pybamm/expression_tree/operations/evaluate_python.py b/pybamm/expression_tree/operations/evaluate_python.py
index 4c0ab71dc6..b5e526ba96 100644
--- a/pybamm/expression_tree/operations/evaluate_python.py
+++ b/pybamm/expression_tree/operations/evaluate_python.py
@@ -210,14 +210,9 @@ def find_symbols(symbol, constant_symbols, variable_symbols, output_jax=False):
children_vars[0], children_vars[1]
)
elif scipy.sparse.issparse(dummy_eval_right):
- if output_jax and is_scalar(dummy_eval_left):
- symbol_str = "{1}.scalar_multiply({0})".format(
- children_vars[0], children_vars[1]
- )
- else:
- symbol_str = "{1}.multiply({0})".format(
- children_vars[0], children_vars[1]
- )
+ symbol_str = "{1}.multiply({0})".format(
+ children_vars[0], children_vars[1]
+ )
else:
symbol_str = "{0} * {1}".format(children_vars[0], children_vars[1])
elif isinstance(symbol, pybamm.Division):
diff --git a/pybamm/expression_tree/scalar.py b/pybamm/expression_tree/scalar.py
index caa8a6e688..912368197b 100644
--- a/pybamm/expression_tree/scalar.py
+++ b/pybamm/expression_tree/scalar.py
@@ -45,7 +45,7 @@ def set_id(self):
"""See :meth:`pybamm.Symbol.set_id()`."""
# We must include the value in the hash, since different scalars can be
# indistinguishable by class and name alone
- self._id = hash((self.__class__, self.name) + tuple(str(self._value)))
+ self._id = hash((self.__class__, str(self.value)))
def _base_evaluate(self, t=None, y=None, y_dot=None, inputs=None):
"""See :meth:`pybamm.Symbol._base_evaluate()`."""
diff --git a/pybamm/expression_tree/state_vector.py b/pybamm/expression_tree/state_vector.py
index 68c6a4fe5d..ad0c456a2a 100644
--- a/pybamm/expression_tree/state_vector.py
+++ b/pybamm/expression_tree/state_vector.py
@@ -49,7 +49,7 @@ def __init__(
raise TypeError("all y_slices must be slice objects")
if name is None:
if y_slices[0].start is None:
- name = base_name + "[:{:d}".format(y_slice.stop)
+ name = base_name + "[0:{:d}".format(y_slice.stop)
else:
name = base_name + "[{:d}:{:d}".format(
y_slices[0].start, y_slices[0].stop
diff --git a/pybamm/expression_tree/symbol.py b/pybamm/expression_tree/symbol.py
index cc064934fb..32c226fe56 100644
--- a/pybamm/expression_tree/symbol.py
+++ b/pybamm/expression_tree/symbol.py
@@ -8,6 +8,7 @@
import sympy
from anytree.exporter import DotExporter
from scipy.sparse import csr_matrix, issparse
+from functools import lru_cache, cached_property
import pybamm
from pybamm.expression_tree.printing.print_name import prettify_print_name
@@ -200,7 +201,12 @@ class Symbol:
"""
def __init__(
- self, name, children=None, domain=None, auxiliary_domains=None, domains=None
+ self,
+ name,
+ children=None,
+ domain=None,
+ auxiliary_domains=None,
+ domains=None,
):
super(Symbol, self).__init__()
self.name = name
@@ -404,6 +410,14 @@ def set_id(self):
+ tuple([(k, tuple(v)) for k, v in self.domains.items() if v != []])
)
+ @property
+ def scale(self):
+ return self._scale
+
+ @property
+ def reference(self):
+ return self._reference
+
def __eq__(self, other):
try:
return self._id == other._id
@@ -574,47 +588,19 @@ def __rpow__(self, other):
def __lt__(self, other):
"""return a :class:`NotEqualHeaviside` object, or a smooth approximation."""
- k = pybamm.settings.heaviside_smoothing
- # Return exact approximation if that is the setting or the outcome is a constant
- # (i.e. no need for smoothing)
- if k == "exact" or (is_constant(self) and is_constant(other)):
- out = pybamm.NotEqualHeaviside(self, other)
- else:
- out = pybamm.sigmoid(self, other, k)
- return pybamm.simplify_if_constant(out)
+ return pybamm.expression_tree.binary_operators._heaviside(self, other, False)
def __le__(self, other):
"""return a :class:`EqualHeaviside` object, or a smooth approximation."""
- k = pybamm.settings.heaviside_smoothing
- # Return exact approximation if that is the setting or the outcome is a constant
- # (i.e. no need for smoothing)
- if k == "exact" or (is_constant(self) and is_constant(other)):
- out = pybamm.EqualHeaviside(self, other)
- else:
- out = pybamm.sigmoid(self, other, k)
- return pybamm.simplify_if_constant(out)
+ return pybamm.expression_tree.binary_operators._heaviside(self, other, True)
def __gt__(self, other):
"""return a :class:`NotEqualHeaviside` object, or a smooth approximation."""
- k = pybamm.settings.heaviside_smoothing
- # Return exact approximation if that is the setting or the outcome is a constant
- # (i.e. no need for smoothing)
- if k == "exact" or (is_constant(self) and is_constant(other)):
- out = pybamm.NotEqualHeaviside(other, self)
- else:
- out = pybamm.sigmoid(other, self, k)
- return pybamm.simplify_if_constant(out)
+ return pybamm.expression_tree.binary_operators._heaviside(other, self, False)
def __ge__(self, other):
"""return a :class:`EqualHeaviside` object, or a smooth approximation."""
- k = pybamm.settings.heaviside_smoothing
- # Return exact approximation if that is the setting or the outcome is a constant
- # (i.e. no need for smoothing)
- if k == "exact" or (is_constant(self) and is_constant(other)):
- out = pybamm.EqualHeaviside(other, self)
- else:
- out = pybamm.sigmoid(other, self, k)
- return pybamm.simplify_if_constant(out)
+ return pybamm.expression_tree.binary_operators._heaviside(other, self, True)
def __neg__(self):
"""return a :class:`Negate` object."""
@@ -625,6 +611,9 @@ def __neg__(self):
# Move negation inside the broadcast
# Apply recursively
return self._unary_new_copy(-self.orphans[0])
+ elif isinstance(self, pybamm.Subtraction):
+ # negation flips the subtraction
+ return self.right - self.left
elif isinstance(self, pybamm.Concatenation) and all(
child.is_constant() for child in self.children
):
@@ -640,7 +629,7 @@ def __abs__(self):
elif isinstance(self, pybamm.Broadcast):
# Move absolute value inside the broadcast
# Apply recursively
- abs_self_not_broad = pybamm.simplify_if_constant(abs(self.orphans[0]))
+ abs_self_not_broad = abs(self.orphans[0])
return self._unary_new_copy(abs_self_not_broad)
else:
k = pybamm.settings.abs_smoothing
@@ -839,6 +828,7 @@ def evaluates_to_number(self):
def evaluates_to_constant_number(self):
return self.evaluates_to_number() and self.is_constant()
+ @lru_cache
def evaluates_on_edges(self, dimension):
"""
Returns True if a symbol evaluates on an edge, i.e. symbol contains a gradient
@@ -857,12 +847,9 @@ def evaluates_on_edges(self, dimension):
Whether the symbol evaluates on edges (in the finite volume discretisation
sense)
"""
- try:
- return self._saved_evaluates_on_edges[dimension]
- except KeyError:
- eval_on_edges = self._evaluates_on_edges(dimension)
- self._saved_evaluates_on_edges[dimension] = eval_on_edges
- return eval_on_edges
+ eval_on_edges = self._evaluates_on_edges(dimension)
+ self._saved_evaluates_on_edges[dimension] = eval_on_edges
+ return eval_on_edges
def _evaluates_on_edges(self, dimension):
# Default behaviour: return False
@@ -906,48 +893,39 @@ def new_copy(self):
obj._print_name = self.print_name
return obj
- @property
+ @cached_property
def size(self):
"""
Size of an object, found by evaluating it with appropriate t and y
"""
- try:
- return self._saved_size
- except AttributeError:
- self._saved_size = np.prod(self.shape)
- return self._saved_size
+ return np.prod(self.shape)
- @property
+ @cached_property
def shape(self):
"""
Shape of an object, found by evaluating it with appropriate t and y.
"""
+ # Default behaviour is to try to evaluate the object directly
+ # Try with some large y, to avoid having to unpack (slow)
try:
- return self._saved_shape
- except AttributeError:
- # Default behaviour is to try to evaluate the object directly
- # Try with some large y, to avoid having to unpack (slow)
- try:
- y = np.nan * np.ones((1000, 1))
- evaluated_self = self.evaluate(0, y, y, inputs="shape test")
- # If that fails, fall back to calculating how big y should really be
- except ValueError:
- unpacker = pybamm.SymbolUnpacker(pybamm.StateVector)
- state_vectors_in_node = unpacker.unpack_symbol(self)
- min_y_size = max(
- max(len(x._evaluation_array) for x in state_vectors_in_node), 1
- )
- # Pick a y that won't cause RuntimeWarnings
- y = np.nan * np.ones((min_y_size, 1))
- evaluated_self = self.evaluate(0, y, y, inputs="shape test")
-
- # Return shape of evaluated object
- if isinstance(evaluated_self, numbers.Number):
- self._saved_shape = ()
- else:
- self._saved_shape = evaluated_self.shape
+ y = np.nan * np.ones((1000, 1))
+ evaluated_self = self.evaluate(0, y, y, inputs="shape test")
+ # If that fails, fall back to calculating how big y should really be
+ except ValueError:
+ unpacker = pybamm.SymbolUnpacker(pybamm.StateVector)
+ state_vectors_in_node = unpacker.unpack_symbol(self)
+ min_y_size = max(
+ max(len(x._evaluation_array) for x in state_vectors_in_node), 1
+ )
+ # Pick a y that won't cause RuntimeWarnings
+ y = np.nan * np.ones((min_y_size, 1))
+ evaluated_self = self.evaluate(0, y, y, inputs="shape test")
- return self._saved_shape
+ # Return shape of evaluated object
+ if isinstance(evaluated_self, numbers.Number):
+ return ()
+ else:
+ return evaluated_self.shape
@property
def size_for_testing(self):
diff --git a/pybamm/expression_tree/unary_operators.py b/pybamm/expression_tree/unary_operators.py
index c6ab47c116..860fb1dbaa 100644
--- a/pybamm/expression_tree/unary_operators.py
+++ b/pybamm/expression_tree/unary_operators.py
@@ -965,6 +965,9 @@ def __init__(self, children, initial_condition):
def _unary_new_copy(self, child):
return self.__class__(child, self.initial_condition)
+ def is_constant(self):
+ return False
+
class BoundaryGradient(BoundaryOperator):
"""
@@ -1084,7 +1087,10 @@ def grad(symbol):
"""
# Gradient of a broadcast is zero
if isinstance(symbol, pybamm.PrimaryBroadcast):
- new_child = pybamm.PrimaryBroadcast(0, symbol.child.domain)
+ if symbol.child.domain == []:
+ new_child = pybamm.Scalar(0)
+ else:
+ new_child = pybamm.PrimaryBroadcast(0, symbol.child.domain)
return pybamm.PrimaryBroadcastToEdges(new_child, symbol.domain)
elif isinstance(symbol, pybamm.FullBroadcast):
return pybamm.FullBroadcastToEdges(0, broadcast_domains=symbol.domains)
@@ -1110,7 +1116,10 @@ def div(symbol):
"""
# Divergence of a broadcast is zero
if isinstance(symbol, pybamm.PrimaryBroadcastToEdges):
- new_child = pybamm.PrimaryBroadcast(0, symbol.child.domain)
+ if symbol.child.domain == []:
+ new_child = pybamm.Scalar(0)
+ else:
+ new_child = pybamm.PrimaryBroadcast(0, symbol.child.domain)
return pybamm.PrimaryBroadcast(new_child, symbol.domain)
# Divergence commutes with Negate operator
if isinstance(symbol, pybamm.Negate):
@@ -1245,6 +1254,14 @@ def boundary_value(symbol, side):
def sign(symbol):
"""Returns a :class:`Sign` object."""
+ if isinstance(symbol, pybamm.Broadcast):
+ # Move sign inside the broadcast
+ # Apply recursively
+ return symbol._unary_new_copy(sign(symbol.orphans[0]))
+ elif isinstance(symbol, pybamm.Concatenation) and not isinstance(
+ symbol, pybamm.ConcatenationVariable
+ ):
+ return pybamm.concatenation(*[sign(child) for child in symbol.orphans])
return pybamm.simplify_if_constant(Sign(symbol))
diff --git a/pybamm/expression_tree/variable.py b/pybamm/expression_tree/variable.py
index 17efb7f5b8..61f6ed8f55 100644
--- a/pybamm/expression_tree/variable.py
+++ b/pybamm/expression_tree/variable.py
@@ -18,7 +18,6 @@ class VariableBase(pybamm.Symbol):
Parameters
----------
-
name : str
name of the node
domain : iterable of str
@@ -39,6 +38,14 @@ class VariableBase(pybamm.Symbol):
Physical bounds on the variable
print_name : str, optional
The name to use for printing. Default is None, in which case self.name is used.
+ scale : float or :class:`pybamm.Symbol`, optional
+ The scale of the variable, used for scaling the model when solving. The state
+ vector representing this variable will be multiplied by this scale.
+ Default is 1.
+ reference : float or :class:`pybamm.Symbol`, optional
+ The reference value of the variable, used for scaling the model when solving.
+ This value will be added to the state vector representing this variable.
+ Default is 0.
*Extends:* :class:`Symbol`
"""
@@ -51,9 +58,16 @@ def __init__(
domains=None,
bounds=None,
print_name=None,
+ scale=1,
+ reference=0,
):
+ self._scale = scale
+ self._reference = reference
super().__init__(
- name, domain=domain, auxiliary_domains=auxiliary_domains, domains=domains
+ name,
+ domain=domain,
+ auxiliary_domains=auxiliary_domains,
+ domains=domains,
)
if bounds is None:
bounds = (-np.inf, np.inf)
@@ -66,6 +80,12 @@ def __init__(
self.bounds = bounds
self.print_name = print_name
+ def set_id(self):
+ self._id = hash(
+ (self.__class__, self.name, self.scale, self.reference)
+ + tuple([(k, tuple(v)) for k, v in self.domains.items() if v != []])
+ )
+
def create_copy(self):
"""See :meth:`pybamm.Symbol.new_copy()`."""
return self.__class__(
@@ -73,6 +93,8 @@ def create_copy(self):
domains=self.domains,
bounds=self.bounds,
print_name=self._raw_print_name,
+ scale=self.scale,
+ reference=self.reference,
)
def _evaluate_for_shape(self):
@@ -117,33 +139,26 @@ class Variable(VariableBase):
Physical bounds on the variable
print_name : str, optional
The name to use for printing. Default is None, in which case self.name is used.
+ scale : float or :class:`pybamm.Symbol`, optional
+ The scale of the variable, used for scaling the model when solving. The state
+ vector representing this variable will be multiplied by this scale.
+ Default is 1.
+ reference : float or :class:`pybamm.Symbol`, optional
+ The reference value of the variable, used for scaling the model when solving.
+ This value will be added to the state vector representing this variable.
+ Default is 0.
*Extends:* :class:`VariableBase`
"""
- def __init__(
- self,
- name,
- domain=None,
- auxiliary_domains=None,
- domains=None,
- bounds=None,
- print_name=None,
- ):
- super().__init__(
- name,
- domain=domain,
- auxiliary_domains=auxiliary_domains,
- domains=domains,
- bounds=bounds,
- print_name=print_name,
- )
-
def diff(self, variable):
if variable == self:
return pybamm.Scalar(1)
elif variable == pybamm.t:
- return pybamm.VariableDot(self.name + "'", domains=self.domains)
+ # reference gets differentiated out
+ return pybamm.VariableDot(
+ self.name + "'", domains=self.domains, scale=self.scale
+ )
else:
return pybamm.Scalar(0)
@@ -180,28 +195,18 @@ class VariableDot(VariableBase):
but ignored.
print_name : str, optional
The name to use for printing. Default is None, in which case self.name is used.
+ scale : float or :class:`pybamm.Symbol`, optional
+ The scale of the variable, used for scaling the model when solving. The state
+ vector representing this variable will be multiplied by this scale.
+ Default is 1.
+ reference : float or :class:`pybamm.Symbol`, optional
+ The reference value of the variable, used for scaling the model when solving.
+ This value will be added to the state vector representing this variable.
+ Default is 0.
*Extends:* :class:`VariableBase`
"""
- def __init__(
- self,
- name,
- domain=None,
- auxiliary_domains=None,
- domains=None,
- bounds=None,
- print_name=None,
- ):
- super().__init__(
- name,
- domain=domain,
- auxiliary_domains=auxiliary_domains,
- domains=domains,
- bounds=bounds,
- print_name=print_name,
- )
-
def get_variable(self):
"""
return a :class:`.Variable` corresponding to this VariableDot
@@ -209,7 +214,7 @@ def get_variable(self):
Note: Variable._jac adds a dash to the name of the corresponding VariableDot, so
we remove this here
"""
- return Variable(self.name[:-1], domains=self.domains)
+ return Variable(self.name[:-1], domains=self.domains, scale=self.scale)
def diff(self, variable):
if variable == self:
@@ -246,13 +251,32 @@ class ExternalVariable(Variable):
'domain' and 'auxiliary_domains', or just 'domains', should be provided
(not both). In future, the 'domain' and 'auxiliary_domains' arguments may be
deprecated.
+ scale : float or :class:`pybamm.Symbol`, optional
+ The scale of the variable, used for scaling the model when solving. The state
+ vector representing this variable will be multiplied by this scale.
+ Default is 1.
+ reference : float or :class:`pybamm.Symbol`, optional
+ The reference value of the variable, used for scaling the model when solving.
+ This value will be added to the state vector representing this variable.
+ Default is 0.
*Extends:* :class:`pybamm.Variable`
"""
- def __init__(self, name, size, domain=None, auxiliary_domains=None, domains=None):
+ def __init__(
+ self,
+ name,
+ size,
+ domain=None,
+ auxiliary_domains=None,
+ domains=None,
+ scale=1,
+ reference=0,
+ ):
self._size = size
- super().__init__(name, domain, auxiliary_domains, domains)
+ super().__init__(
+ name, domain, auxiliary_domains, domains, scale=scale, reference=reference
+ )
@property
def size(self):
diff --git a/pybamm/models/submodels/interface/kinetics/first_order_kinetics/__init__.py b/pybamm/input/parameters/ecm/__init__.py
similarity index 100%
rename from pybamm/models/submodels/interface/kinetics/first_order_kinetics/__init__.py
rename to pybamm/input/parameters/ecm/__init__.py
diff --git a/pybamm/input/parameters/ecm/data/ecm_example_c1.csv b/pybamm/input/parameters/ecm/data/ecm_example_c1.csv
new file mode 100644
index 0000000000..bc87a76a2c
--- /dev/null
+++ b/pybamm/input/parameters/ecm/data/ecm_example_c1.csv
@@ -0,0 +1,3865 @@
+Temperature [degC],Current [A],SoC,C1 [F]
+-20,-400,0.0,8898.358573585827
+-20,-400,0.05,9306.408805841977
+-20,-400,0.1,9704.585692669109
+-20,-400,0.15000000000000002,10085.32357947827
+-20,-400,0.2,10440.312405831746
+-20,-400,0.25,10760.805716894489
+-20,-400,0.30000000000000004,11038.040215325931
+-20,-400,0.35000000000000003,11263.745029855478
+-20,-400,0.4,11430.697772392863
+-20,-400,0.45,11533.266346621709
+-20,-400,0.5,11567.866145661577
+-20,-400,0.55,11533.266346621707
+-20,-400,0.6000000000000001,11430.697772392863
+-20,-400,0.65,11263.745029855478
+-20,-400,0.7000000000000001,11038.040215325931
+-20,-400,0.75,10760.805716894489
+-20,-400,0.8,10440.312405831746
+-20,-400,0.8500000000000001,10085.32357947827
+-20,-400,0.9,9704.585692669109
+-20,-400,0.9500000000000001,9306.408805841975
+-20,-400,1.0,8898.358573585827
+-20,-350,0.0,8941.76520077405
+-20,-350,0.05,9351.805921968036
+-20,-350,0.1,9751.925135072373
+-20,-350,0.15000000000000002,10134.520279865968
+-20,-350,0.2,10491.240759030929
+-20,-350,0.25,10813.297452098856
+-20,-350,0.30000000000000004,11091.884313937278
+-20,-350,0.35000000000000003,11318.690127562093
+-20,-350,0.4,11486.457273721608
+-20,-350,0.45,11589.52618245889
+-20,-350,0.5,11624.294761006267
+-20,-350,0.55,11589.526182458889
+-20,-350,0.6000000000000001,11486.457273721608
+-20,-350,0.65,11318.690127562093
+-20,-350,0.7000000000000001,11091.884313937278
+-20,-350,0.75,10813.297452098856
+-20,-350,0.8,10491.240759030929
+-20,-350,0.8500000000000001,10134.520279865968
+-20,-350,0.9,9751.925135072373
+-20,-350,0.9500000000000001,9351.805921968034
+-20,-350,1.0,8941.76520077405
+-20,-300,0.0,8985.597383130786
+-20,-300,0.05,9397.648107860035
+-20,-300,0.1,9799.72868965606
+-20,-300,0.15000000000000002,10184.199300845705
+-20,-300,0.2,10542.66840981049
+-20,-300,0.25,10866.303812158163
+-20,-300,0.30000000000000004,11146.256295868345
+-20,-300,0.35000000000000003,11374.1739026972
+-20,-300,0.4,11542.763436828087
+-20,-300,0.45,11646.33758531408
+-20,-300,0.5,11681.276598070024
+-20,-300,0.55,11646.337585314079
+-20,-300,0.6000000000000001,11542.763436828087
+-20,-300,0.65,11374.1739026972
+-20,-300,0.7000000000000001,11146.256295868345
+-20,-300,0.75,10866.303812158163
+-20,-300,0.8,10542.66840981049
+-20,-300,0.8500000000000001,10184.199300845705
+-20,-300,0.9,9799.72868965606
+-20,-300,0.9500000000000001,9397.648107860034
+-20,-300,1.0,8985.597383130786
+-20,-250,0.0,9029.861409648673
+-20,-250,0.05,9443.941940903682
+-20,-250,0.1,9848.00321522087
+-20,-250,0.15000000000000002,10234.367770308
+-20,-250,0.2,10594.602736952414
+-20,-250,0.25,10919.832402365837
+-20,-250,0.30000000000000004,11201.163962350454
+-20,-250,0.35000000000000003,11430.20431601098
+-20,-250,0.4,11599.624340457784
+-20,-250,0.45,11703.708706424004
+-20,-250,0.5,11738.819832543275
+-20,-250,0.55,11703.708706424002
+-20,-250,0.6000000000000001,11599.624340457784
+-20,-250,0.65,11430.20431601098
+-20,-250,0.7000000000000001,11201.163962350454
+-20,-250,0.75,10919.832402365837
+-20,-250,0.8,10594.602736952414
+-20,-250,0.8500000000000001,10234.367770308
+-20,-250,0.9,9848.00321522087
+-20,-250,0.9500000000000001,9443.94194090368
+-20,-250,1.0,9029.861409648673
+-20,-200,0.0,9074.563693854854
+-20,-200,0.05,9490.694128729936
+-20,-200,0.1,9896.75570638533
+-20,-200,0.15000000000000002,10285.032957289719
+-20,-200,0.2,10647.051265353168
+-20,-200,0.25,10973.890978615173
+-20,-200,0.30000000000000004,11256.615269094762
+-20,-200,0.35000000000000003,11486.789485892221
+-20,-200,0.4,11657.048223331334
+-20,-200,0.45,11761.647858436001
+-20,-200,0.5,11796.93280201131
+-20,-200,0.55,11761.647858435997
+-20,-200,0.6000000000000001,11657.048223331334
+-20,-200,0.65,11486.789485892221
+-20,-200,0.7000000000000001,11256.615269094762
+-20,-200,0.75,10973.890978615173
+-20,-200,0.8,10647.051265353168
+-20,-200,0.8500000000000001,10285.032957289719
+-20,-200,0.9,9896.75570638533
+-20,-200,0.9500000000000001,9490.694128729936
+-20,-200,1.0,9074.563693854854
+-20,-150,0.0,9119.710776908858
+-20,-150,0.05,9537.911512454963
+-20,-150,0.1,9945.993296964361
+-20,-150,0.15000000000000002,10336.202275485193
+-20,-150,0.2,10700.021669658408
+-20,-150,0.25,11028.487451145598
+-20,-150,0.30000000000000004,11312.618330135036
+-20,-150,0.35000000000000003,11543.937692289697
+-20,-150,0.4,11715.043488124029
+-20,-150,0.45,11820.163519423248
+-20,-150,0.5,11855.624009981519
+-20,-150,0.55,11820.163519423244
+-20,-150,0.6000000000000001,11715.043488124029
+-20,-150,0.65,11543.937692289697
+-20,-150,0.7000000000000001,11312.618330135036
+-20,-150,0.75,11028.487451145598
+-20,-150,0.8,10700.021669658408
+-20,-150,0.8500000000000001,10336.202275485193
+-20,-150,0.9,9945.993296964361
+-20,-150,0.9500000000000001,9537.91151245496
+-20,-150,1.0,9119.710776908858
+-20,-100,0.0,9165.309330793401
+-20,-100,0.05,9585.601070017237
+-20,-100,0.1,9995.723263449183
+-20,-100,0.15000000000000002,10387.883286862618
+-20,-100,0.2,10753.5217780067
+-20,-100,0.25,11083.629888401325
+-20,-100,0.30000000000000004,11369.181421785708
+-20,-100,0.35000000000000003,11601.657380751143
+-20,-100,0.4,11773.618705564648
+-20,-100,0.45,11879.26433702036
+-20,-100,0.5,11914.902130031423
+-20,-100,0.55,11879.264337020359
+-20,-100,0.6000000000000001,11773.618705564648
+-20,-100,0.65,11601.657380751143
+-20,-100,0.7000000000000001,11369.181421785708
+-20,-100,0.75,11083.629888401325
+-20,-100,0.8,10753.5217780067
+-20,-100,0.8500000000000001,10387.883286862618
+-20,-100,0.9,9995.723263449183
+-20,-100,0.9500000000000001,9585.601070017234
+-20,-100,1.0,9165.309330793401
+-20,-50,0.0,9211.36616160141
+-20,-50,0.05,9633.769919615312
+-20,-50,0.1,10045.953028592143
+-20,-50,0.15000000000000002,10440.083705389565
+-20,-50,0.2,10807.559575886131
+-20,-50,0.25,11139.326521006356
+-20,-50,0.30000000000000004,11426.312986719307
+-20,-50,0.35000000000000003,11659.957166584063
+-20,-50,0.4,11832.782618657939
+-20,-50,0.45,11938.95913268378
+-20,-50,0.5,11974.776010081834
+-20,-50,0.55,11938.959132683778
+-20,-50,0.6000000000000001,11832.782618657939
+-20,-50,0.65,11659.957166584063
+-20,-50,0.7000000000000001,11426.312986719307
+-20,-50,0.75,11139.326521006356
+-20,-50,0.8,10807.559575886131
+-20,-50,0.8500000000000001,10440.083705389565
+-20,-50,0.9,10045.953028592143
+-20,-50,0.9500000000000001,9633.76991961531
+-20,-50,1.0,9211.36616160141
+-20,0,0.0,9257.888212922628
+-20,0,0.05,9682.425323249734
+-20,0,0.1,10096.690165100184
+-20,0,0.15000000000000002,10492.811400871333
+-20,0,0.2,10862.143210107777
+-20,0,0.25,11195.585745859924
+-20,0,0.30000000000000004,11484.021638167385
+-20,0,0.35000000000000003,11718.845839142572
+-20,0,0.4,11892.544147034996
+-20,0,0.45,11999.256906081175
+-20,0,0.5,12035.254676799419
+-20,0,0.55,11999.256906081173
+-20,0,0.6000000000000001,11892.544147034996
+-20,0,0.65,11718.845839142572
+-20,0,0.7000000000000001,11484.021638167385
+-20,0,0.75,11195.585745859924
+-20,0,0.8,10862.143210107777
+-20,0,0.8500000000000001,10492.811400871333
+-20,0,0.9,10096.690165100184
+-20,0,0.9500000000000001,9682.425323249732
+-20,0,1.0,9257.888212922628
+-20,50,0.0,9211.36616160141
+-20,50,0.05,9633.769919615312
+-20,50,0.1,10045.953028592143
+-20,50,0.15000000000000002,10440.083705389565
+-20,50,0.2,10807.559575886131
+-20,50,0.25,11139.326521006356
+-20,50,0.30000000000000004,11426.312986719307
+-20,50,0.35000000000000003,11659.957166584063
+-20,50,0.4,11832.782618657939
+-20,50,0.45,11938.95913268378
+-20,50,0.5,11974.776010081834
+-20,50,0.55,11938.959132683778
+-20,50,0.6000000000000001,11832.782618657939
+-20,50,0.65,11659.957166584063
+-20,50,0.7000000000000001,11426.312986719307
+-20,50,0.75,11139.326521006356
+-20,50,0.8,10807.559575886131
+-20,50,0.8500000000000001,10440.083705389565
+-20,50,0.9,10045.953028592143
+-20,50,0.9500000000000001,9633.76991961531
+-20,50,1.0,9211.36616160141
+-20,100,0.0,9165.309330793401
+-20,100,0.05,9585.601070017237
+-20,100,0.1,9995.723263449183
+-20,100,0.15000000000000002,10387.883286862618
+-20,100,0.2,10753.5217780067
+-20,100,0.25,11083.629888401325
+-20,100,0.30000000000000004,11369.181421785708
+-20,100,0.35000000000000003,11601.657380751143
+-20,100,0.4,11773.618705564648
+-20,100,0.45,11879.26433702036
+-20,100,0.5,11914.902130031423
+-20,100,0.55,11879.264337020359
+-20,100,0.6000000000000001,11773.618705564648
+-20,100,0.65,11601.657380751143
+-20,100,0.7000000000000001,11369.181421785708
+-20,100,0.75,11083.629888401325
+-20,100,0.8,10753.5217780067
+-20,100,0.8500000000000001,10387.883286862618
+-20,100,0.9,9995.723263449183
+-20,100,0.9500000000000001,9585.601070017234
+-20,100,1.0,9165.309330793401
+-20,150,0.0,9119.710776908858
+-20,150,0.05,9537.911512454963
+-20,150,0.1,9945.993296964361
+-20,150,0.15000000000000002,10336.202275485193
+-20,150,0.2,10700.021669658408
+-20,150,0.25,11028.487451145598
+-20,150,0.30000000000000004,11312.618330135036
+-20,150,0.35000000000000003,11543.937692289697
+-20,150,0.4,11715.043488124029
+-20,150,0.45,11820.163519423248
+-20,150,0.5,11855.624009981519
+-20,150,0.55,11820.163519423244
+-20,150,0.6000000000000001,11715.043488124029
+-20,150,0.65,11543.937692289697
+-20,150,0.7000000000000001,11312.618330135036
+-20,150,0.75,11028.487451145598
+-20,150,0.8,10700.021669658408
+-20,150,0.8500000000000001,10336.202275485193
+-20,150,0.9,9945.993296964361
+-20,150,0.9500000000000001,9537.91151245496
+-20,150,1.0,9119.710776908858
+-20,200,0.0,9074.563693854854
+-20,200,0.05,9490.694128729936
+-20,200,0.1,9896.75570638533
+-20,200,0.15000000000000002,10285.032957289719
+-20,200,0.2,10647.051265353168
+-20,200,0.25,10973.890978615173
+-20,200,0.30000000000000004,11256.615269094762
+-20,200,0.35000000000000003,11486.789485892221
+-20,200,0.4,11657.048223331334
+-20,200,0.45,11761.647858436001
+-20,200,0.5,11796.93280201131
+-20,200,0.55,11761.647858435997
+-20,200,0.6000000000000001,11657.048223331334
+-20,200,0.65,11486.789485892221
+-20,200,0.7000000000000001,11256.615269094762
+-20,200,0.75,10973.890978615173
+-20,200,0.8,10647.051265353168
+-20,200,0.8500000000000001,10285.032957289719
+-20,200,0.9,9896.75570638533
+-20,200,0.9500000000000001,9490.694128729936
+-20,200,1.0,9074.563693854854
+-20,250,0.0,9029.861409648673
+-20,250,0.05,9443.941940903682
+-20,250,0.1,9848.00321522087
+-20,250,0.15000000000000002,10234.367770308
+-20,250,0.2,10594.602736952414
+-20,250,0.25,10919.832402365837
+-20,250,0.30000000000000004,11201.163962350454
+-20,250,0.35000000000000003,11430.20431601098
+-20,250,0.4,11599.624340457784
+-20,250,0.45,11703.708706424004
+-20,250,0.5,11738.819832543275
+-20,250,0.55,11703.708706424002
+-20,250,0.6000000000000001,11599.624340457784
+-20,250,0.65,11430.20431601098
+-20,250,0.7000000000000001,11201.163962350454
+-20,250,0.75,10919.832402365837
+-20,250,0.8,10594.602736952414
+-20,250,0.8500000000000001,10234.367770308
+-20,250,0.9,9848.00321522087
+-20,250,0.9500000000000001,9443.94194090368
+-20,250,1.0,9029.861409648673
+-20,300,0.0,8985.597383130786
+-20,300,0.05,9397.648107860035
+-20,300,0.1,9799.72868965606
+-20,300,0.15000000000000002,10184.199300845705
+-20,300,0.2,10542.66840981049
+-20,300,0.25,10866.303812158163
+-20,300,0.30000000000000004,11146.256295868345
+-20,300,0.35000000000000003,11374.1739026972
+-20,300,0.4,11542.763436828087
+-20,300,0.45,11646.33758531408
+-20,300,0.5,11681.276598070024
+-20,300,0.55,11646.337585314079
+-20,300,0.6000000000000001,11542.763436828087
+-20,300,0.65,11374.1739026972
+-20,300,0.7000000000000001,11146.256295868345
+-20,300,0.75,10866.303812158163
+-20,300,0.8,10542.66840981049
+-20,300,0.8500000000000001,10184.199300845705
+-20,300,0.9,9799.72868965606
+-20,300,0.9500000000000001,9397.648107860034
+-20,300,1.0,8985.597383130786
+-20,350,0.0,8941.76520077405
+-20,350,0.05,9351.805921968036
+-20,350,0.1,9751.925135072373
+-20,350,0.15000000000000002,10134.520279865968
+-20,350,0.2,10491.240759030929
+-20,350,0.25,10813.297452098856
+-20,350,0.30000000000000004,11091.884313937278
+-20,350,0.35000000000000003,11318.690127562093
+-20,350,0.4,11486.457273721608
+-20,350,0.45,11589.52618245889
+-20,350,0.5,11624.294761006267
+-20,350,0.55,11589.526182458889
+-20,350,0.6000000000000001,11486.457273721608
+-20,350,0.65,11318.690127562093
+-20,350,0.7000000000000001,11091.884313937278
+-20,350,0.75,10813.297452098856
+-20,350,0.8,10491.240759030929
+-20,350,0.8500000000000001,10134.520279865968
+-20,350,0.9,9751.925135072373
+-20,350,0.9500000000000001,9351.805921968034
+-20,350,1.0,8941.76520077405
+-20,400,0.0,8898.358573585827
+-20,400,0.05,9306.408805841977
+-20,400,0.1,9704.585692669109
+-20,400,0.15000000000000002,10085.32357947827
+-20,400,0.2,10440.312405831746
+-20,400,0.25,10760.805716894489
+-20,400,0.30000000000000004,11038.040215325931
+-20,400,0.35000000000000003,11263.745029855478
+-20,400,0.4,11430.697772392863
+-20,400,0.45,11533.266346621709
+-20,400,0.5,11567.866145661577
+-20,400,0.55,11533.266346621707
+-20,400,0.6000000000000001,11430.697772392863
+-20,400,0.65,11263.745029855478
+-20,400,0.7000000000000001,11038.040215325931
+-20,400,0.75,10760.805716894489
+-20,400,0.8,10440.312405831746
+-20,400,0.8500000000000001,10085.32357947827
+-20,400,0.9,9704.585692669109
+-20,400,0.9500000000000001,9306.408805841975
+-20,400,1.0,8898.358573585827
+-20,450,0.0,8855.371334099906
+-20,450,0.05,9261.450309195397
+-20,450,0.1,9657.703636182785
+-20,450,0.15000000000000002,10036.6022095291
+-20,450,0.2,10389.876114016135
+-20,450,0.25,10708.821148213841
+-20,450,0.30000000000000004,10984.71634955141
+-20,450,0.35000000000000003,11209.330802658109
+-20,450,0.4,11375.477010207389
+-20,450,0.45,11477.550084077648
+-20,450,0.5,11511.982734329878
+-20,450,0.55,11477.550084077644
+-20,450,0.6000000000000001,11375.477010207389
+-20,450,0.65,11209.330802658109
+-20,450,0.7000000000000001,10984.71634955141
+-20,450,0.75,10708.821148213841
+-20,450,0.8,10389.876114016135
+-20,450,0.8500000000000001,10036.6022095291
+-20,450,0.9,9657.703636182785
+-20,450,0.9500000000000001,9261.450309195396
+-20,450,1.0,8855.371334099906
+-20,500,0.0,8812.797433455195
+-20,500,0.05,9216.924105785803
+-20,500,0.1,9611.272368701137
+-20,500,0.15000000000000002,9988.349314290977
+-20,500,0.2,10339.924786544903
+-20,500,0.25,10657.336431155121
+-20,500,0.30000000000000004,10931.90521325549
+-20,500,0.35000000000000003,11155.439789183793
+-20,500,0.4,11320.787216889083
+-20,500,0.45,11422.369554827272
+-20,500,0.5,11456.636663491752
+-20,500,0.55,11422.369554827268
+-20,500,0.6000000000000001,11320.787216889083
+-20,500,0.65,11155.439789183793
+-20,500,0.7000000000000001,10931.90521325549
+-20,500,0.75,10657.336431155121
+-20,500,0.8,10339.924786544903
+-20,500,0.8500000000000001,9988.349314290977
+-20,500,0.9,9611.272368701137
+-20,500,0.9500000000000001,9216.924105785802
+-20,500,1.0,8812.797433455195
+-20,550,0.0,8770.63093855828
+-20,550,0.05,9172.823990447117
+-20,550,0.1,9565.285419568596
+-20,550,0.15000000000000002,9940.558169246526
+-20,550,0.2,10290.451462207368
+-20,550,0.25,10606.344390814666
+-20,550,0.30000000000000004,10879.59944668489
+-20,550,0.35000000000000003,11102.064479187698
+-20,550,0.4,11266.62077087526
+-20,550,0.45,11367.717068919008
+-20,550,0.5,11401.820220125765
+-20,550,0.55,11367.717068919006
+-20,550,0.6000000000000001,11266.62077087526
+-20,550,0.65,11102.064479187698
+-20,550,0.7000000000000001,10879.59944668489
+-20,550,0.75,10606.344390814666
+-20,550,0.8,10290.451462207368
+-20,550,0.8500000000000001,9940.558169246526
+-20,550,0.9,9565.285419568596
+-20,550,0.9500000000000001,9172.823990447116
+-20,550,1.0,8770.63093855828
+-20,600,0.0,8728.86602932705
+-20,600,0.05,9129.143876206892
+-20,600,0.1,9519.736441380173
+-20,600,0.15000000000000002,9893.222177964399
+-20,600,0.2,10241.449312387333
+-20,600,0.25,10555.837988953643
+-20,600,0.30000000000000004,10827.791830272105
+-20,600,0.35000000000000003,11049.19750547728
+-20,600,0.4,11212.970195775855
+-20,600,0.45,11313.585082876534
+-20,600,0.5,11347.525838125164
+-20,600,0.55,11313.585082876532
+-20,600,0.6000000000000001,11212.970195775855
+-20,600,0.65,11049.19750547728
+-20,600,0.7000000000000001,10827.791830272105
+-20,600,0.75,10555.837988953643
+-20,600,0.8,10241.449312387333
+-20,600,0.8500000000000001,9893.222177964399
+-20,600,0.9,9519.736441380173
+-20,600,0.9500000000000001,9129.14387620689
+-20,600,1.0,8728.86602932705
+-20,650,0.0,8687.496996012704
+-20,650,0.05,9085.877791485533
+-20,650,0.1,9474.619207060838
+-20,650,0.15000000000000002,9846.334869064092
+-20,650,0.2,10192.911637921045
+-20,650,0.25,10505.81032075955
+-20,650,0.30000000000000004,10776.47528131347
+-20,650,0.35000000000000003,10996.831640522412
+-20,650,0.4,11159.828156933316
+-20,650,0.45,11259.966196227833
+-20,650,0.5,11293.746094816515
+-20,650,0.55,11259.966196227831
+-20,650,0.6000000000000001,11159.828156933316
+-20,650,0.65,10996.831640522412
+-20,650,0.7000000000000001,10776.47528131347
+-20,650,0.75,10505.81032075955
+-20,650,0.8,10192.911637921045
+-20,650,0.8500000000000001,9846.334869064092
+-20,650,0.9,9474.619207060838
+-20,650,0.9500000000000001,9085.87779148553
+-20,650,1.0,8687.496996012704
+-20,700,0.0,8646.518236597549
+-20,700,0.05,9043.01987737475
+-20,700,0.1,9429.92760702753
+-20,700,0.15000000000000002,9799.88989326662
+-20,700,0.2,10144.831866044056
+-20,700,0.25,10456.254611699364
+-20,700,0.30000000000000004,10725.642850741235
+-20,700,0.35000000000000003,10944.959793161455
+-20,700,0.4,11107.187458079856
+-20,700,0.45,11206.853148132417
+-20,700,0.5,11240.473707576813
+-20,700,0.55,11206.853148132415
+-20,700,0.6000000000000001,11107.187458079856
+-20,700,0.65,10944.959793161455
+-20,700,0.7000000000000001,10725.642850741235
+-20,700,0.75,10456.254611699364
+-20,700,0.8,10144.831866044056
+-20,700,0.8500000000000001,9799.88989326662
+-20,700,0.9,9429.92760702753
+-20,700,0.9500000000000001,9043.019877374749
+-20,700,1.0,8646.518236597549
+-10,-400,0.0,12768.435214813806
+-10,-400,0.05,13353.954770119026
+-10,-400,0.1,13925.306861793579
+-10,-400,0.15000000000000002,14471.635378603265
+-10,-400,0.2,14981.016046261686
+-10,-400,0.25,15440.898399309719
+-10,-400,0.30000000000000004,15838.707804635444
+-10,-400,0.35000000000000003,16162.576221283298
+-10,-400,0.4,16402.140098080974
+-10,-400,0.45,16549.317825780607
+-10,-400,0.5,16598.965779257946
+-10,-400,0.55,16549.3178257806
+-10,-400,0.6000000000000001,16402.140098080974
+-10,-400,0.65,16162.576221283298
+-10,-400,0.7000000000000001,15838.707804635444
+-10,-400,0.75,15440.898399309719
+-10,-400,0.8,14981.016046261686
+-10,-400,0.8500000000000001,14471.635378603265
+-10,-400,0.9,13925.306861793579
+-10,-400,0.9500000000000001,13353.954770119022
+-10,-400,1.0,12768.435214813806
+-10,-350,0.0,12830.720264642165
+-10,-350,0.05,13419.096012900094
+-10,-350,0.1,13993.235187948672
+-10,-350,0.15000000000000002,14542.228721913529
+-10,-350,0.2,15054.094173316622
+-10,-350,0.25,15516.219854916108
+-10,-350,0.30000000000000004,15915.96979392635
+-10,-350,0.35000000000000003,16241.418056509074
+-10,-350,0.4,16482.15053758381
+-10,-350,0.45,16630.046205418563
+-10,-350,0.5,16679.936344034813
+-10,-350,0.55,16630.046205418555
+-10,-350,0.6000000000000001,16482.15053758381
+-10,-350,0.65,16241.418056509074
+-10,-350,0.7000000000000001,15915.96979392635
+-10,-350,0.75,15516.219854916108
+-10,-350,0.8,15054.094173316622
+-10,-350,0.8500000000000001,14542.228721913529
+-10,-350,0.9,13993.235187948672
+-10,-350,0.9500000000000001,13419.096012900094
+-10,-350,1.0,12830.720264642165
+-10,-300,0.0,12893.61595221394
+-10,-300,0.05,13484.87589531627
+-10,-300,0.1,14061.829478085674
+-10,-300,0.15000000000000002,14613.514156824865
+-10,-300,0.2,15127.888752597582
+-10,-300,0.25,15592.279756165695
+-10,-300,0.30000000000000004,15993.989253700498
+-10,-300,0.35000000000000003,16321.032850903724
+-10,-300,0.4,16562.945393160197
+-10,-300,0.45,16711.566039758847
+-10,-300,0.5,16761.70073787812
+-10,-300,0.55,16711.566039758844
+-10,-300,0.6000000000000001,16562.945393160197
+-10,-300,0.65,16321.032850903724
+-10,-300,0.7000000000000001,15993.989253700498
+-10,-300,0.75,15592.279756165695
+-10,-300,0.8,15127.888752597582
+-10,-300,0.8500000000000001,14613.514156824865
+-10,-300,0.9,14061.829478085674
+-10,-300,0.9500000000000001,13484.875895316267
+-10,-300,1.0,12893.61595221394
+-10,-250,0.0,12957.131301732235
+-10,-250,0.05,13551.303855391721
+-10,-250,0.1,14131.099574036838
+-10,-250,0.15000000000000002,14685.501911291987
+-10,-250,0.2,15202.41037206851
+-10,-250,0.25,15669.089016048289
+-10,-250,0.30000000000000004,16072.777378102965
+-10,-250,0.35000000000000003,16401.432027509163
+-10,-250,0.4,16644.536257165917
+-10,-250,0.45,16793.88902517638
+-10,-250,0.5,16844.270692251906
+-10,-250,0.55,16793.889025176373
+-10,-250,0.6000000000000001,16644.536257165917
+-10,-250,0.65,16401.432027509163
+-10,-250,0.7000000000000001,16072.777378102965
+-10,-250,0.75,15669.089016048289
+-10,-250,0.8,15202.41037206851
+-10,-250,0.8500000000000001,14685.501911291987
+-10,-250,0.9,14131.099574036838
+-10,-250,0.9500000000000001,13551.30385539172
+-10,-250,1.0,12957.131301732235
+-10,-200,0.0,13021.275516097247
+-10,-200,0.05,13618.389518042171
+-10,-200,0.1,14201.055512522165
+-10,-200,0.15000000000000002,14758.202415803331
+-10,-200,0.2,15277.669829355977
+-10,-200,0.25,15746.658763652487
+-10,-200,0.30000000000000004,16152.345582945056
+-10,-200,0.35000000000000003,16482.627235566135
+-10,-200,0.4,16726.934951508323
+-10,-200,0.45,16877.027089657448
+-10,-200,0.5,16927.65817092642
+-10,-200,0.55,16877.027089657444
+-10,-200,0.6000000000000001,16726.934951508323
+-10,-200,0.65,16482.627235566135
+-10,-200,0.7000000000000001,16152.345582945056
+-10,-200,0.75,15746.658763652487
+-10,-200,0.8,15277.669829355977
+-10,-200,0.8500000000000001,14758.202415803331
+-10,-200,0.9,14201.055512522165
+-10,-200,0.9500000000000001,13618.389518042171
+-10,-200,1.0,13021.275516097247
+-10,-150,0.0,13086.057981351463
+-10,-150,0.05,13686.142699723976
+-10,-150,0.1,14271.707529997402
+-10,-150,0.15000000000000002,14831.626308419267
+-10,-150,0.2,15353.678136964714
+-10,-150,0.25,15825.000349541306
+-10,-150,0.30000000000000004,16232.705511218417
+-10,-150,0.35000000000000003,16564.630356141093
+-10,-150,0.4,16810.15353335662
+-10,-150,0.45,16960.992398561222
+-10,-150,0.5,17011.875375756903
+-10,-150,0.55,16960.992398561215
+-10,-150,0.6000000000000001,16810.15353335662
+-10,-150,0.65,16564.630356141093
+-10,-150,0.7000000000000001,16232.705511218417
+-10,-150,0.75,15825.000349541306
+-10,-150,0.8,15353.678136964714
+-10,-150,0.8500000000000001,14831.626308419267
+-10,-150,0.9,14271.707529997402
+-10,-150,0.9500000000000001,13686.142699723976
+-10,-150,1.0,13086.057981351463
+-10,-100,0.0,13151.488271258217
+-10,-100,0.05,13754.573413222595
+-10,-100,0.1,14343.066067647389
+-10,-100,0.15000000000000002,14905.784439961364
+-10,-100,0.2,15430.446527649536
+-10,-100,0.25,15904.12535128901
+-10,-100,0.30000000000000004,16313.869038774508
+-10,-100,0.35000000000000003,16647.4535079218
+-10,-100,0.4,16894.204301023405
+-10,-100,0.45,17045.797360554025
+-10,-100,0.5,17096.934752635683
+-10,-100,0.55,17045.79736055402
+-10,-100,0.6000000000000001,16894.204301023405
+-10,-100,0.65,16647.4535079218
+-10,-100,0.7000000000000001,16313.869038774508
+-10,-100,0.75,15904.12535128901
+-10,-100,0.8,15430.446527649536
+-10,-100,0.8500000000000001,14905.784439961364
+-10,-100,0.9,14343.066067647389
+-10,-100,0.9500000000000001,13754.573413222593
+-10,-100,1.0,13151.488271258217
+-10,-50,0.0,13217.576152018311
+-10,-50,0.05,13823.691872585523
+-10,-50,0.1,14415.14177653004
+-10,-50,0.15000000000000002,14980.687879358155
+-10,-50,0.2,15507.986459949281
+-10,-50,0.25,15984.045579184936
+-10,-50,0.30000000000000004,16395.848280175385
+-10,-50,0.35000000000000003,16731.109053187738
+-10,-50,0.4,16979.099800023523
+-10,-50,0.45,17131.45463372264
+-10,-50,0.5,17182.848997623805
+-10,-50,0.55,17131.45463372263
+-10,-50,0.6000000000000001,16979.099800023523
+-10,-50,0.65,16731.109053187738
+-10,-50,0.7000000000000001,16395.848280175385
+-10,-50,0.75,15984.045579184936
+-10,-50,0.8,15507.986459949281
+-10,-50,0.8500000000000001,14980.687879358155
+-10,-50,0.9,14415.14177653004
+-10,-50,0.9500000000000001,13823.69187258552
+-10,-50,1.0,13217.576152018311
+-10,0,0.0,13284.331587129514
+-10,0,0.05,13893.508498204641
+-10,0,0.1,14487.945522876149
+-10,0,0.15000000000000002,15056.347919152891
+-10,0,0.2,15586.30962388842
+-10,0,0.25,16064.77308211011
+-10,0,0.30000000000000004,16478.655594721724
+-10,0,0.35000000000000003,16815.609603961413
+-10,0,0.4,17064.85282931657
+-10,0,0.45,17217.97713187275
+-10,0,0.5,17269.631063268367
+-10,0,0.55,17217.977131872747
+-10,0,0.6000000000000001,17064.85282931657
+-10,0,0.65,16815.609603961413
+-10,0,0.7000000000000001,16478.655594721724
+-10,0,0.75,16064.77308211011
+-10,0,0.8,15586.30962388842
+-10,0,0.8500000000000001,15056.347919152891
+-10,0,0.9,14487.945522876149
+-10,0,0.9500000000000001,13893.508498204641
+-10,0,1.0,13284.331587129514
+-10,50,0.0,13217.576152018311
+-10,50,0.05,13823.691872585523
+-10,50,0.1,14415.14177653004
+-10,50,0.15000000000000002,14980.687879358155
+-10,50,0.2,15507.986459949281
+-10,50,0.25,15984.045579184936
+-10,50,0.30000000000000004,16395.848280175385
+-10,50,0.35000000000000003,16731.109053187738
+-10,50,0.4,16979.099800023523
+-10,50,0.45,17131.45463372264
+-10,50,0.5,17182.848997623805
+-10,50,0.55,17131.45463372263
+-10,50,0.6000000000000001,16979.099800023523
+-10,50,0.65,16731.109053187738
+-10,50,0.7000000000000001,16395.848280175385
+-10,50,0.75,15984.045579184936
+-10,50,0.8,15507.986459949281
+-10,50,0.8500000000000001,14980.687879358155
+-10,50,0.9,14415.14177653004
+-10,50,0.9500000000000001,13823.69187258552
+-10,50,1.0,13217.576152018311
+-10,100,0.0,13151.488271258217
+-10,100,0.05,13754.573413222595
+-10,100,0.1,14343.066067647389
+-10,100,0.15000000000000002,14905.784439961364
+-10,100,0.2,15430.446527649536
+-10,100,0.25,15904.12535128901
+-10,100,0.30000000000000004,16313.869038774508
+-10,100,0.35000000000000003,16647.4535079218
+-10,100,0.4,16894.204301023405
+-10,100,0.45,17045.797360554025
+-10,100,0.5,17096.934752635683
+-10,100,0.55,17045.79736055402
+-10,100,0.6000000000000001,16894.204301023405
+-10,100,0.65,16647.4535079218
+-10,100,0.7000000000000001,16313.869038774508
+-10,100,0.75,15904.12535128901
+-10,100,0.8,15430.446527649536
+-10,100,0.8500000000000001,14905.784439961364
+-10,100,0.9,14343.066067647389
+-10,100,0.9500000000000001,13754.573413222593
+-10,100,1.0,13151.488271258217
+-10,150,0.0,13086.057981351463
+-10,150,0.05,13686.142699723976
+-10,150,0.1,14271.707529997402
+-10,150,0.15000000000000002,14831.626308419267
+-10,150,0.2,15353.678136964714
+-10,150,0.25,15825.000349541306
+-10,150,0.30000000000000004,16232.705511218417
+-10,150,0.35000000000000003,16564.630356141093
+-10,150,0.4,16810.15353335662
+-10,150,0.45,16960.992398561222
+-10,150,0.5,17011.875375756903
+-10,150,0.55,16960.992398561215
+-10,150,0.6000000000000001,16810.15353335662
+-10,150,0.65,16564.630356141093
+-10,150,0.7000000000000001,16232.705511218417
+-10,150,0.75,15825.000349541306
+-10,150,0.8,15353.678136964714
+-10,150,0.8500000000000001,14831.626308419267
+-10,150,0.9,14271.707529997402
+-10,150,0.9500000000000001,13686.142699723976
+-10,150,1.0,13086.057981351463
+-10,200,0.0,13021.275516097247
+-10,200,0.05,13618.389518042171
+-10,200,0.1,14201.055512522165
+-10,200,0.15000000000000002,14758.202415803331
+-10,200,0.2,15277.669829355977
+-10,200,0.25,15746.658763652487
+-10,200,0.30000000000000004,16152.345582945056
+-10,200,0.35000000000000003,16482.627235566135
+-10,200,0.4,16726.934951508323
+-10,200,0.45,16877.027089657448
+-10,200,0.5,16927.65817092642
+-10,200,0.55,16877.027089657444
+-10,200,0.6000000000000001,16726.934951508323
+-10,200,0.65,16482.627235566135
+-10,200,0.7000000000000001,16152.345582945056
+-10,200,0.75,15746.658763652487
+-10,200,0.8,15277.669829355977
+-10,200,0.8500000000000001,14758.202415803331
+-10,200,0.9,14201.055512522165
+-10,200,0.9500000000000001,13618.389518042171
+-10,200,1.0,13021.275516097247
+-10,250,0.0,12957.131301732235
+-10,250,0.05,13551.303855391721
+-10,250,0.1,14131.099574036838
+-10,250,0.15000000000000002,14685.501911291987
+-10,250,0.2,15202.41037206851
+-10,250,0.25,15669.089016048289
+-10,250,0.30000000000000004,16072.777378102965
+-10,250,0.35000000000000003,16401.432027509163
+-10,250,0.4,16644.536257165917
+-10,250,0.45,16793.88902517638
+-10,250,0.5,16844.270692251906
+-10,250,0.55,16793.889025176373
+-10,250,0.6000000000000001,16644.536257165917
+-10,250,0.65,16401.432027509163
+-10,250,0.7000000000000001,16072.777378102965
+-10,250,0.75,15669.089016048289
+-10,250,0.8,15202.41037206851
+-10,250,0.8500000000000001,14685.501911291987
+-10,250,0.9,14131.099574036838
+-10,250,0.9500000000000001,13551.30385539172
+-10,250,1.0,12957.131301732235
+-10,300,0.0,12893.61595221394
+-10,300,0.05,13484.87589531627
+-10,300,0.1,14061.829478085674
+-10,300,0.15000000000000002,14613.514156824865
+-10,300,0.2,15127.888752597582
+-10,300,0.25,15592.279756165695
+-10,300,0.30000000000000004,15993.989253700498
+-10,300,0.35000000000000003,16321.032850903724
+-10,300,0.4,16562.945393160197
+-10,300,0.45,16711.566039758847
+-10,300,0.5,16761.70073787812
+-10,300,0.55,16711.566039758844
+-10,300,0.6000000000000001,16562.945393160197
+-10,300,0.65,16321.032850903724
+-10,300,0.7000000000000001,15993.989253700498
+-10,300,0.75,15592.279756165695
+-10,300,0.8,15127.888752597582
+-10,300,0.8500000000000001,14613.514156824865
+-10,300,0.9,14061.829478085674
+-10,300,0.9500000000000001,13484.875895316267
+-10,300,1.0,12893.61595221394
+-10,350,0.0,12830.720264642165
+-10,350,0.05,13419.096012900094
+-10,350,0.1,13993.235187948672
+-10,350,0.15000000000000002,14542.228721913529
+-10,350,0.2,15054.094173316622
+-10,350,0.25,15516.219854916108
+-10,350,0.30000000000000004,15915.96979392635
+-10,350,0.35000000000000003,16241.418056509074
+-10,350,0.4,16482.15053758381
+-10,350,0.45,16630.046205418563
+-10,350,0.5,16679.936344034813
+-10,350,0.55,16630.046205418555
+-10,350,0.6000000000000001,16482.15053758381
+-10,350,0.65,16241.418056509074
+-10,350,0.7000000000000001,15915.96979392635
+-10,350,0.75,15516.219854916108
+-10,350,0.8,15054.094173316622
+-10,350,0.8500000000000001,14542.228721913529
+-10,350,0.9,13993.235187948672
+-10,350,0.9500000000000001,13419.096012900094
+-10,350,1.0,12830.720264642165
+-10,400,0.0,12768.435214813806
+-10,400,0.05,13353.954770119026
+-10,400,0.1,13925.306861793579
+-10,400,0.15000000000000002,14471.635378603265
+-10,400,0.2,14981.016046261686
+-10,400,0.25,15440.898399309719
+-10,400,0.30000000000000004,15838.707804635444
+-10,400,0.35000000000000003,16162.576221283298
+-10,400,0.4,16402.140098080974
+-10,400,0.45,16549.317825780607
+-10,400,0.5,16598.965779257946
+-10,400,0.55,16549.3178257806
+-10,400,0.6000000000000001,16402.140098080974
+-10,400,0.65,16162.576221283298
+-10,400,0.7000000000000001,15838.707804635444
+-10,400,0.75,15440.898399309719
+-10,400,0.8,14981.016046261686
+-10,400,0.8500000000000001,14471.635378603265
+-10,400,0.9,13925.306861793579
+-10,400,0.9500000000000001,13353.954770119022
+-10,400,1.0,12768.435214813806
+-10,450,0.0,12706.75195290649
+-10,450,0.05,13289.442911326181
+-10,450,0.1,13858.034847968493
+-10,450,0.15000000000000002,14401.724096581029
+-10,450,0.2,14908.643988067188
+-10,450,0.25,15366.304687235759
+-10,450,0.30000000000000004,15762.192307994694
+-10,450,0.35000000000000003,16084.496142919614
+-10,450,0.4,16322.902706302806
+-10,450,0.45,16469.36943048698
+-10,450,0.5,16518.77753877844
+-10,450,0.55,16469.369430486975
+-10,450,0.6000000000000001,16322.902706302806
+-10,450,0.65,16084.496142919614
+-10,450,0.7000000000000001,15762.192307994694
+-10,450,0.75,15366.304687235759
+-10,450,0.8,14908.643988067188
+-10,450,0.8500000000000001,14401.724096581029
+-10,450,0.9,13858.034847968493
+-10,450,0.9500000000000001,13289.442911326178
+-10,450,1.0,12706.75195290649
+-10,500,0.0,12645.661799286749
+-10,500,0.05,13225.551358867879
+-10,500,0.1,13791.40968043018
+-10,500,0.15000000000000002,14332.48503842439
+-10,500,0.2,14836.96781504763
+-10,500,0.25,15292.42822239328
+-10,500,0.30000000000000004,15686.412537283179
+-10,500,0.35000000000000003,16007.16683454019
+-10,500,0.4,16244.427212522503
+-10,500,0.45,16390.189769763485
+-10,500,0.5,16439.360339072773
+-10,500,0.55,16390.189769763478
+-10,500,0.6000000000000001,16244.427212522503
+-10,500,0.65,16007.16683454019
+-10,500,0.7000000000000001,15686.412537283179
+-10,500,0.75,15292.42822239328
+-10,500,0.8,14836.96781504763
+-10,500,0.8500000000000001,14332.48503842439
+-10,500,0.9,13791.40968043018
+-10,500,0.9500000000000001,13225.551358867879
+-10,500,1.0,12645.661799286749
+-10,550,0.0,12585.156240438488
+-10,550,0.05,13162.27120882545
+-10,550,0.1,13725.42207430372
+-10,550,0.15000000000000002,14263.90855498695
+-10,550,0.2,14765.97753842061
+-10,550,0.25,15219.258709367476
+-10,550,0.30000000000000004,15611.357931841634
+-10,550,0.35000000000000003,15930.577519542392
+-10,550,0.4,16166.702680405173
+-10,550,0.45,16311.767809142606
+-10,550,0.5,16360.703112570032
+-10,550,0.55,16311.767809142602
+-10,550,0.6000000000000001,16166.702680405173
+-10,550,0.65,15930.577519542392
+-10,550,0.7000000000000001,15611.357931841634
+-10,550,0.75,15219.258709367476
+-10,550,0.8,14765.97753842061
+-10,550,0.8500000000000001,14263.90855498695
+-10,550,0.9,13725.42207430372
+-10,550,0.9500000000000001,13162.271208825448
+-10,550,1.0,12585.156240438488
+-10,600,0.0,12525.226925007824
+-10,600,0.05,13099.59372687866
+-10,600,0.1,13660.06292156894
+-10,600,0.15000000000000002,14195.985180915584
+-10,600,0.2,14695.663359666225
+-10,600,0.25,15146.786048846676
+-10,600,0.30000000000000004,15537.018132166198
+-10,600,0.35000000000000003,15854.717626592188
+-10,600,0.4,16089.718381927049
+-10,600,0.45,16234.092724337166
+-10,600,0.5,16282.795002510175
+-10,600,0.55,16234.09272433716
+-10,600,0.6000000000000001,16089.718381927049
+-10,600,0.65,15854.717626592188
+-10,600,0.7000000000000001,15537.018132166198
+-10,600,0.75,15146.786048846676
+-10,600,0.8,14695.663359666225
+-10,600,0.8500000000000001,14195.985180915584
+-10,600,0.9,13660.06292156894
+-10,600,0.9500000000000001,13099.59372687866
+-10,600,1.0,12525.226925007824
+-10,650,0.0,12465.865659960396
+-10,650,0.05,13037.51034428682
+-10,650,0.1,13595.323286869563
+-10,650,0.15000000000000002,14128.705630295131
+-10,650,0.2,14626.01566601852
+-10,650,0.25,15075.000332975365
+-10,650,0.30000000000000004,15463.382975141714
+-10,650,0.35000000000000003,15779.576784760002
+-10,650,0.4,16013.463792439246
+-10,650,0.45,16157.15389625974
+-10,650,0.5,16205.625357948518
+-10,650,0.55,16157.153896259735
+-10,650,0.6000000000000001,16013.463792439246
+-10,650,0.65,15779.576784760002
+-10,650,0.7000000000000001,15463.382975141714
+-10,650,0.75,15075.000332975365
+-10,650,0.8,14626.01566601852
+-10,650,0.8500000000000001,14128.705630295131
+-10,650,0.9,13595.323286869563
+-10,650,0.9500000000000001,13037.510344286819
+-10,650,1.0,12465.865659960396
+-10,700,0.0,12407.064406847376
+-10,700,0.05,12976.01265398358
+-10,700,0.1,13531.194403440932
+-10,700,0.15000000000000002,14062.060792416381
+-10,700,0.2,14557.025026084468
+-10,700,0.25,15003.891840838687
+-10,700,0.30000000000000004,15390.442489409912
+-10,700,0.35000000000000003,15705.14481879415
+-10,700,0.4,15937.928585871134
+-10,700,0.45,16080.940906183041
+-10,700,0.5,16129.18372890159
+-10,700,0.55,16080.940906183037
+-10,700,0.6000000000000001,15937.928585871134
+-10,700,0.65,15705.14481879415
+-10,700,0.7000000000000001,15390.442489409912
+-10,700,0.75,15003.891840838687
+-10,700,0.8,14557.025026084468
+-10,700,0.8500000000000001,14062.060792416381
+-10,700,0.9,13531.194403440932
+-10,700,0.9500000000000001,12976.012653983576
+-10,700,1.0,12407.064406847376
+0,-400,0.0,17843.602798425607
+0,-400,0.05,18661.853288779806
+0,-400,0.1,19460.30506539706
+0,-400,0.15000000000000002,20223.78695549546
+0,-400,0.2,20935.635052304417
+0,-400,0.25,21578.310360886786
+0,-400,0.30000000000000004,22134.240112550855
+0,-400,0.35000000000000003,22586.838985348877
+0,-400,0.4,22921.624148175186
+0,-400,0.45,23127.301732755026
+0,-400,0.5,23196.683637953294
+0,-400,0.55,23127.301732755022
+0,-400,0.6000000000000001,22921.624148175186
+0,-400,0.65,22586.838985348877
+0,-400,0.7000000000000001,22134.240112550855
+0,-400,0.75,21578.310360886786
+0,-400,0.8,20935.635052304417
+0,-400,0.8500000000000001,20223.78695549546
+0,-400,0.9,19460.30506539706
+0,-400,0.9500000000000001,18661.853288779803
+0,-400,1.0,17843.602798425607
+0,-350,0.0,17930.644763295983
+0,-350,0.05,18752.886719456783
+0,-350,0.1,19555.23338278924
+0,-350,0.15000000000000002,20322.439574790562
+0,-350,0.2,21037.760101340053
+0,-350,0.25,21683.570411427703
+0,-350,0.30000000000000004,22242.21201553891
+0,-350,0.35000000000000003,22697.01868771643
+0,-350,0.4,23033.436948897997
+0,-350,0.45,23240.117838768474
+0,-350,0.5,23309.838192284773
+0,-350,0.55,23240.11783876847
+0,-350,0.6000000000000001,23033.436948897997
+0,-350,0.65,22697.01868771643
+0,-350,0.7000000000000001,22242.21201553891
+0,-350,0.75,21683.570411427703
+0,-350,0.8,21037.760101340053
+0,-350,0.8500000000000001,20322.439574790562
+0,-350,0.9,19555.23338278924
+0,-350,0.9500000000000001,18752.88671945678
+0,-350,1.0,17930.644763295983
+0,-300,0.0,18018.540080763116
+0,-300,0.05,18844.812634748232
+0,-300,0.1,19651.092369959777
+0,-300,0.15000000000000002,20422.05937662777
+0,-300,0.2,21140.886376346618
+0,-300,0.25,21789.862423248418
+0,-300,0.30000000000000004,22351.242466595468
+0,-300,0.35000000000000003,22808.27858324445
+0,-300,0.4,23146.34595354946
+0,-300,0.45,23354.03998503694
+0,-300,0.5,23424.102104992053
+0,-300,0.55,23354.039985036936
+0,-300,0.6000000000000001,23146.34595354946
+0,-300,0.65,22808.27858324445
+0,-300,0.7000000000000001,22351.242466595468
+0,-300,0.75,21789.862423248418
+0,-300,0.8,21140.886376346618
+0,-300,0.8500000000000001,20422.05937662777
+0,-300,0.9,19651.092369959777
+0,-300,0.9500000000000001,18844.812634748232
+0,-300,1.0,18018.540080763116
+0,-250,0.0,18107.30136194914
+0,-250,0.05,18937.64422408197
+0,-250,0.1,19747.895780649233
+0,-250,0.15000000000000002,20522.660654345153
+0,-250,0.2,21245.028673767047
+0,-250,0.25,21897.201647008267
+0,-250,0.30000000000000004,22461.34710928806
+0,-250,0.35000000000000003,22920.63463537866
+0,-250,0.4,23260.36736218763
+0,-250,0.45,23469.08451698294
+0,-250,0.5,23539.49177053389
+0,-250,0.55,23469.084516982934
+0,-250,0.6000000000000001,23260.36736218763
+0,-250,0.65,22920.63463537866
+0,-250,0.7000000000000001,22461.34710928806
+0,-250,0.75,21897.201647008267
+0,-250,0.8,21245.028673767047
+0,-250,0.8500000000000001,20522.660654345153
+0,-250,0.9,19747.895780649233
+0,-250,0.9500000000000001,18937.644224081967
+0,-250,1.0,18107.30136194914
+0,-200,0.0,18196.941467701363
+0,-200,0.05,19031.394938062575
+0,-200,0.1,19845.657640949477
+0,-200,0.15000000000000002,20624.257984317155
+0,-200,0.2,21350.202083043117
+0,-200,0.25,22005.603635359792
+0,-200,0.30000000000000004,22572.541896957802
+0,-200,0.35000000000000003,23034.103123672616
+0,-200,0.4,23375.51769566381
+0,-200,0.45,23585.268103700673
+0,-200,0.5,23656.023908011775
+0,-200,0.55,23585.26810370067
+0,-200,0.6000000000000001,23375.51769566381
+0,-200,0.65,23034.103123672616
+0,-200,0.7000000000000001,22572.541896957802
+0,-200,0.75,22005.603635359792
+0,-200,0.8,21350.202083043117
+0,-200,0.8500000000000001,20624.257984317155
+0,-200,0.9,19845.657640949477
+0,-200,0.9500000000000001,19031.39493806257
+0,-200,1.0,18196.941467701363
+0,-150,0.0,18287.47351480436
+0,-150,0.05,19126.07849496836
+0,-150,0.1,19944.392256078583
+0,-150,0.15000000000000002,20726.86623299535
+0,-150,0.2,21456.42199390403
+0,-150,0.25,22115.084250461085
+0,-150,0.30000000000000004,22684.843100425256
+0,-150,0.35000000000000003,23148.700651651092
+0,-150,0.4,23491.813803602432
+0,-150,0.45,23702.607746007645
+0,-150,0.5,23773.715569245665
+0,-150,0.55,23702.60774600764
+0,-150,0.6000000000000001,23491.813803602432
+0,-150,0.65,23148.700651651092
+0,-150,0.7000000000000001,22684.843100425256
+0,-150,0.75,22115.084250461085
+0,-150,0.8,21456.42199390403
+0,-150,0.8500000000000001,20726.86623299535
+0,-150,0.9,19944.392256078583
+0,-150,0.9500000000000001,19126.078494968355
+0,-150,1.0,18287.47351480436
+0,-100,0.0,18378.910882378375
+0,-100,0.05,19221.7088874432
+0,-100,0.1,20044.114217358972
+0,-100,0.15000000000000002,20830.500564160327
+0,-100,0.2,21563.70410387355
+0,-100,0.25,22225.65967171339
+0,-100,0.30000000000000004,22798.26731592738
+0,-100,0.35000000000000003,23264.444154909343
+0,-100,0.4,23609.272872620448
+0,-100,0.45,23821.120784737683
+0,-100,0.5,23892.584147091893
+0,-100,0.55,23821.120784737675
+0,-100,0.6000000000000001,23609.272872620448
+0,-100,0.65,23264.444154909343
+0,-100,0.7000000000000001,22798.26731592738
+0,-100,0.75,22225.65967171339
+0,-100,0.8,21563.70410387355
+0,-100,0.8500000000000001,20830.500564160327
+0,-100,0.9,20044.114217358972
+0,-100,0.9500000000000001,19221.708887443194
+0,-100,1.0,18378.910882378375
+0,-50,0.0,18471.267218470733
+0,-50,0.05,19318.300389390148
+0,-50,0.1,20144.838409406002
+0,-50,0.15000000000000002,20935.17644639229
+0,-50,0.2,21672.064426003566
+0,-50,0.25,22337.34640373205
+0,-50,0.30000000000000004,22912.831473293852
+0,-50,0.35000000000000003,23381.35090945663
+0,-50,0.4,23727.912434794416
+0,-50,0.45,23940.8249092841
+0,-50,0.5,24012.64738401195
+0,-50,0.55,23940.824909284096
+0,-50,0.6000000000000001,23727.912434794416
+0,-50,0.65,23381.35090945663
+0,-50,0.7000000000000001,22912.831473293852
+0,-50,0.75,22337.34640373205
+0,-50,0.8,21672.064426003566
+0,-50,0.8500000000000001,20935.17644639229
+0,-50,0.9,20144.838409406002
+0,-50,0.9500000000000001,19318.300389390144
+0,-50,1.0,18471.267218470733
+0,0,0.0,18564.556446846847
+0,0,0.05,19415.867563073938
+0,0,0.1,20246.580017534314
+0,0,0.15000000000000002,21040.909660768008
+0,0,0.2,21781.51929684197
+0,0,0.25,22450.16128455898
+0,0,0.30000000000000004,23028.552844371086
+0,0,0.35000000000000003,23499.438540312465
+0,0,0.4,23847.750376384287
+0,0,0.45,24061.738166401698
+0,0,0.5,24133.9233809009
+0,0,0.55,24061.738166401694
+0,0,0.6000000000000001,23847.750376384287
+0,0,0.65,23499.438540312465
+0,0,0.7000000000000001,23028.552844371086
+0,0,0.75,22450.16128455898
+0,0,0.8,21781.51929684197
+0,0,0.8500000000000001,21040.909660768008
+0,0,0.9,20246.580017534314
+0,0,0.9500000000000001,19415.867563073934
+0,0,1.0,18564.556446846847
+0,50,0.0,18471.267218470733
+0,50,0.05,19318.300389390148
+0,50,0.1,20144.838409406002
+0,50,0.15000000000000002,20935.17644639229
+0,50,0.2,21672.064426003566
+0,50,0.25,22337.34640373205
+0,50,0.30000000000000004,22912.831473293852
+0,50,0.35000000000000003,23381.35090945663
+0,50,0.4,23727.912434794416
+0,50,0.45,23940.8249092841
+0,50,0.5,24012.64738401195
+0,50,0.55,23940.824909284096
+0,50,0.6000000000000001,23727.912434794416
+0,50,0.65,23381.35090945663
+0,50,0.7000000000000001,22912.831473293852
+0,50,0.75,22337.34640373205
+0,50,0.8,21672.064426003566
+0,50,0.8500000000000001,20935.17644639229
+0,50,0.9,20144.838409406002
+0,50,0.9500000000000001,19318.300389390144
+0,50,1.0,18471.267218470733
+0,100,0.0,18378.910882378375
+0,100,0.05,19221.7088874432
+0,100,0.1,20044.114217358972
+0,100,0.15000000000000002,20830.500564160327
+0,100,0.2,21563.70410387355
+0,100,0.25,22225.65967171339
+0,100,0.30000000000000004,22798.26731592738
+0,100,0.35000000000000003,23264.444154909343
+0,100,0.4,23609.272872620448
+0,100,0.45,23821.120784737683
+0,100,0.5,23892.584147091893
+0,100,0.55,23821.120784737675
+0,100,0.6000000000000001,23609.272872620448
+0,100,0.65,23264.444154909343
+0,100,0.7000000000000001,22798.26731592738
+0,100,0.75,22225.65967171339
+0,100,0.8,21563.70410387355
+0,100,0.8500000000000001,20830.500564160327
+0,100,0.9,20044.114217358972
+0,100,0.9500000000000001,19221.708887443194
+0,100,1.0,18378.910882378375
+0,150,0.0,18287.47351480436
+0,150,0.05,19126.07849496836
+0,150,0.1,19944.392256078583
+0,150,0.15000000000000002,20726.86623299535
+0,150,0.2,21456.42199390403
+0,150,0.25,22115.084250461085
+0,150,0.30000000000000004,22684.843100425256
+0,150,0.35000000000000003,23148.700651651092
+0,150,0.4,23491.813803602432
+0,150,0.45,23702.607746007645
+0,150,0.5,23773.715569245665
+0,150,0.55,23702.60774600764
+0,150,0.6000000000000001,23491.813803602432
+0,150,0.65,23148.700651651092
+0,150,0.7000000000000001,22684.843100425256
+0,150,0.75,22115.084250461085
+0,150,0.8,21456.42199390403
+0,150,0.8500000000000001,20726.86623299535
+0,150,0.9,19944.392256078583
+0,150,0.9500000000000001,19126.078494968355
+0,150,1.0,18287.47351480436
+0,200,0.0,18196.941467701363
+0,200,0.05,19031.394938062575
+0,200,0.1,19845.657640949477
+0,200,0.15000000000000002,20624.257984317155
+0,200,0.2,21350.202083043117
+0,200,0.25,22005.603635359792
+0,200,0.30000000000000004,22572.541896957802
+0,200,0.35000000000000003,23034.103123672616
+0,200,0.4,23375.51769566381
+0,200,0.45,23585.268103700673
+0,200,0.5,23656.023908011775
+0,200,0.55,23585.26810370067
+0,200,0.6000000000000001,23375.51769566381
+0,200,0.65,23034.103123672616
+0,200,0.7000000000000001,22572.541896957802
+0,200,0.75,22005.603635359792
+0,200,0.8,21350.202083043117
+0,200,0.8500000000000001,20624.257984317155
+0,200,0.9,19845.657640949477
+0,200,0.9500000000000001,19031.39493806257
+0,200,1.0,18196.941467701363
+0,250,0.0,18107.30136194914
+0,250,0.05,18937.64422408197
+0,250,0.1,19747.895780649233
+0,250,0.15000000000000002,20522.660654345153
+0,250,0.2,21245.028673767047
+0,250,0.25,21897.201647008267
+0,250,0.30000000000000004,22461.34710928806
+0,250,0.35000000000000003,22920.63463537866
+0,250,0.4,23260.36736218763
+0,250,0.45,23469.08451698294
+0,250,0.5,23539.49177053389
+0,250,0.55,23469.084516982934
+0,250,0.6000000000000001,23260.36736218763
+0,250,0.65,22920.63463537866
+0,250,0.7000000000000001,22461.34710928806
+0,250,0.75,21897.201647008267
+0,250,0.8,21245.028673767047
+0,250,0.8500000000000001,20522.660654345153
+0,250,0.9,19747.895780649233
+0,250,0.9500000000000001,18937.644224081967
+0,250,1.0,18107.30136194914
+0,300,0.0,18018.540080763116
+0,300,0.05,18844.812634748232
+0,300,0.1,19651.092369959777
+0,300,0.15000000000000002,20422.05937662777
+0,300,0.2,21140.886376346618
+0,300,0.25,21789.862423248418
+0,300,0.30000000000000004,22351.242466595468
+0,300,0.35000000000000003,22808.27858324445
+0,300,0.4,23146.34595354946
+0,300,0.45,23354.03998503694
+0,300,0.5,23424.102104992053
+0,300,0.55,23354.039985036936
+0,300,0.6000000000000001,23146.34595354946
+0,300,0.65,22808.27858324445
+0,300,0.7000000000000001,22351.242466595468
+0,300,0.75,21789.862423248418
+0,300,0.8,21140.886376346618
+0,300,0.8500000000000001,20422.05937662777
+0,300,0.9,19651.092369959777
+0,300,0.9500000000000001,18844.812634748232
+0,300,1.0,18018.540080763116
+0,350,0.0,17930.644763295983
+0,350,0.05,18752.886719456783
+0,350,0.1,19555.23338278924
+0,350,0.15000000000000002,20322.439574790562
+0,350,0.2,21037.760101340053
+0,350,0.25,21683.570411427703
+0,350,0.30000000000000004,22242.21201553891
+0,350,0.35000000000000003,22697.01868771643
+0,350,0.4,23033.436948897997
+0,350,0.45,23240.117838768474
+0,350,0.5,23309.838192284773
+0,350,0.55,23240.11783876847
+0,350,0.6000000000000001,23033.436948897997
+0,350,0.65,22697.01868771643
+0,350,0.7000000000000001,22242.21201553891
+0,350,0.75,21683.570411427703
+0,350,0.8,21037.760101340053
+0,350,0.8500000000000001,20322.439574790562
+0,350,0.9,19555.23338278924
+0,350,0.9500000000000001,18752.88671945678
+0,350,1.0,17930.644763295983
+0,400,0.0,17843.602798425607
+0,400,0.05,18661.853288779806
+0,400,0.1,19460.30506539706
+0,400,0.15000000000000002,20223.78695549546
+0,400,0.2,20935.635052304417
+0,400,0.25,21578.310360886786
+0,400,0.30000000000000004,22134.240112550855
+0,400,0.35000000000000003,22586.838985348877
+0,400,0.4,22921.624148175186
+0,400,0.45,23127.301732755026
+0,400,0.5,23196.683637953294
+0,400,0.55,23127.301732755022
+0,400,0.6000000000000001,22921.624148175186
+0,400,0.65,22586.838985348877
+0,400,0.7000000000000001,22134.240112550855
+0,400,0.75,21578.310360886786
+0,400,0.8,20935.635052304417
+0,400,0.8500000000000001,20223.78695549546
+0,400,0.9,19460.30506539706
+0,400,0.9500000000000001,18661.853288779803
+0,400,1.0,17843.602798425607
+0,450,0.0,17757.401818723072
+0,450,0.05,18571.69940815768
+0,450,0.1,19366.293929815434
+0,450,0.15000000000000002,20126.087501604183
+0,450,0.2,20834.496718718405
+0,450,0.25,21474.067315665114
+0,450,0.30000000000000004,22027.31141635496
+0,450,0.35000000000000003,22477.72382116845
+0,450,0.4,22810.891664367584
+0,450,0.45,23015.57563742771
+0,450,0.5,23084.622364339997
+0,450,0.55,23015.575637427708
+0,450,0.6000000000000001,22810.891664367584
+0,450,0.65,22477.72382116845
+0,450,0.7000000000000001,22027.31141635496
+0,450,0.75,21474.067315665114
+0,450,0.8,20834.496718718405
+0,450,0.8500000000000001,20126.087501604183
+0,450,0.9,19366.293929815434
+0,450,0.9500000000000001,18571.699408157678
+0,450,1.0,17757.401818723072
+0,500,0.0,17672.029694594592
+0,500,0.05,18482.412391772305
+0,500,0.1,19273.18674746055
+0,500,0.15000000000000002,20029.327465538776
+0,500,0.2,20734.33086910918
+0,500,0.25,21370.826607416722
+0,500,0.30000000000000004,21921.4108806994
+0,500,0.35000000000000003,22369.657841258984
+0,500,0.4,22701.223915981194
+0,500,0.45,22904.923831478536
+0,500,0.5,22973.638602972973
+0,500,0.55,22904.923831478533
+0,500,0.6000000000000001,22701.223915981194
+0,500,0.65,22369.657841258984
+0,500,0.7000000000000001,21921.4108806994
+0,500,0.75,21370.826607416722
+0,500,0.8,20734.33086910918
+0,500,0.8500000000000001,20029.327465538776
+0,500,0.9,19273.18674746055
+0,500,0.9500000000000001,18482.412391772305
+0,500,1.0,17672.029694594592
+0,550,0.0,17587.47452859175
+0,550,0.05,18393.979796596363
+0,550,0.1,19180.970542927247
+0,550,0.15000000000000002,19933.49336283285
+0,550,0.2,20635.1235443766
+0,550,0.25,21268.57384852956
+0,550,0.30000000000000004,21816.52374729893
+0,550,0.35000000000000003,22262.625985559178
+0,550,0.4,22592.605619732487
+0,550,0.45,22795.33089448582
+0,550,0.5,22863.716887169277
+0,550,0.55,22795.330894485814
+0,550,0.6000000000000001,22592.605619732487
+0,550,0.65,22262.625985559178
+0,550,0.7000000000000001,21816.52374729893
+0,550,0.75,21268.57384852956
+0,550,0.8,20635.1235443766
+0,550,0.8500000000000001,19933.49336283285
+0,550,0.9,19180.970542927247
+0,550,0.9500000000000001,18393.979796596363
+0,550,1.0,17587.47452859175
+0,600,0.0,17503.72464988417
+0,600,0.05,18306.38941661257
+0,600,0.1,19089.632587960925
+0,600,0.15000000000000002,19838.571965866977
+0,600,0.2,20536.861051308144
+0,600,0.25,21167.29492544132
+0,600,0.30000000000000004,21712.635538978455
+0,600,0.35000000000000003,22156.61348086604
+0,600,0.4,22485.021783448043
+0,600,0.45,22686.781699750172
+0,600,0.5,22754.842044849425
+0,600,0.55,22686.781699750165
+0,600,0.6000000000000001,22485.021783448043
+0,600,0.65,22156.61348086604
+0,600,0.7000000000000001,21712.635538978455
+0,600,0.75,21167.29492544132
+0,600,0.8,20536.861051308144
+0,600,0.8500000000000001,19838.571965866977
+0,600,0.9,19089.632587960925
+0,600,0.9500000000000001,18306.38941661257
+0,600,1.0,17503.72464988417
+0,650,0.0,17420.76860888946
+0,650,0.05,18219.629277197346
+0,650,0.1,18999.160395600924
+0,650,0.15000000000000002,19744.5502977823
+0,650,0.2,20439.529956278246
+0,650,0.25,21066.975992145395
+0,650,0.30000000000000004,21609.732053011736
+0,650,0.35000000000000003,22051.60583403729
+0,650,0.4,22378.457699166298
+0,650,0.45,22579.261407334296
+0,650,0.5,22646.9991915563
+0,650,0.55,22579.261407334292
+0,650,0.6000000000000001,22378.457699166298
+0,650,0.65,22051.60583403729
+0,650,0.7000000000000001,21609.732053011736
+0,650,0.75,21066.975992145395
+0,650,0.8,20439.529956278246
+0,650,0.8500000000000001,19744.5502977823
+0,650,0.9,18999.160395600924
+0,650,0.9500000000000001,18219.629277197342
+0,650,1.0,17420.76860888946
+0,700,0.0,17338.595172055073
+0,700,0.05,18133.687629663393
+0,700,0.1,18909.541714489595
+0,700,0.15000000000000002,19651.415626566344
+0,700,0.2,20343.11707912599
+0,700,0.25,20967.603463880554
+0,700,0.30000000000000004,21507.799354648472
+0,700,0.35000000000000003,21947.58882538617
+0,700,0.4,22272.898936434383
+0,700,0.45,22472.755457299696
+0,700,0.5,22540.173723671596
+0,700,0.55,22472.755457299692
+0,700,0.6000000000000001,22272.898936434383
+0,700,0.65,21947.58882538617
+0,700,0.7000000000000001,21507.799354648472
+0,700,0.75,20967.603463880554
+0,700,0.8,20343.11707912599
+0,700,0.8500000000000001,19651.415626566344
+0,700,0.9,18909.541714489595
+0,700,0.9500000000000001,18133.68762966339
+0,700,1.0,17338.595172055073
+10,-400,0.0,24353.486040049942
+10,-400,0.05,25470.258931669294
+10,-400,0.1,26560.0099430075
+10,-400,0.15000000000000002,27602.033000928448
+10,-400,0.2,28573.584704029723
+10,-400,0.25,29450.72730424645
+10,-400,0.30000000000000004,30209.476958077226
+10,-400,0.35000000000000003,30827.19751905057
+10,-400,0.4,31284.12238346337
+10,-400,0.45,31564.8373400448
+10,-400,0.5,31659.531852064934
+10,-400,0.55,31564.837340044796
+10,-400,0.6000000000000001,31284.12238346337
+10,-400,0.65,30827.19751905057
+10,-400,0.7000000000000001,30209.476958077226
+10,-400,0.75,29450.72730424645
+10,-400,0.8,28573.584704029723
+10,-400,0.8500000000000001,27602.033000928448
+10,-400,0.9,26560.0099430075
+10,-400,0.9500000000000001,25470.258931669294
+10,-400,1.0,24353.486040049942
+10,-350,0.0,24472.283532928242
+10,-350,0.05,25594.504097189634
+10,-350,0.1,26689.57096711973
+10,-350,0.15000000000000002,27736.67706434762
+10,-350,0.2,28712.968044049387
+10,-350,0.25,29594.389388657408
+10,-350,0.30000000000000004,30356.84026031175
+10,-350,0.35000000000000003,30977.57409231424
+10,-350,0.4,31436.72785850466
+10,-350,0.45,31718.812156337703
+10,-350,0.5,31813.968592806716
+10,-350,0.55,31718.8121563377
+10,-350,0.6000000000000001,31436.72785850466
+10,-350,0.65,30977.57409231424
+10,-350,0.7000000000000001,30356.84026031175
+10,-350,0.75,29594.389388657408
+10,-350,0.8,28712.968044049387
+10,-350,0.8500000000000001,27736.67706434762
+10,-350,0.9,26689.57096711973
+10,-350,0.9500000000000001,25594.504097189634
+10,-350,1.0,24472.283532928242
+10,-300,0.0,24592.245707109258
+10,-300,0.05,25719.967352568012
+10,-300,0.1,26820.40219735071
+10,-300,0.15000000000000002,27872.64116760422
+10,-300,0.2,28853.717887402563
+10,-300,0.25,29739.45992487632
+10,-300,0.30000000000000004,30505.64830080347
+10,-300,0.35000000000000003,31129.42494570793
+10,-300,0.4,31590.82946565419
+10,-300,0.45,31874.29652965308
+10,-300,0.5,31969.91941924204
+10,-300,0.55,31874.296529653075
+10,-300,0.6000000000000001,31590.82946565419
+10,-300,0.65,31129.42494570793
+10,-300,0.7000000000000001,30505.64830080347
+10,-300,0.75,29739.45992487632
+10,-300,0.8,28853.717887402563
+10,-300,0.8500000000000001,27872.64116760422
+10,-300,0.9,26820.40219735071
+10,-300,0.9500000000000001,25719.967352568012
+10,-300,1.0,24592.245707109258
+10,-250,0.0,24713.38977463197
+10,-250,0.05,25846.66669913239
+10,-250,0.1,26952.52240521943
+10,-250,0.15000000000000002,28009.944818676166
+10,-250,0.2,28995.85442871982
+10,-250,0.25,29885.959727461915
+10,-250,0.30000000000000004,30655.922430364084
+10,-250,0.35000000000000003,31282.77186662275
+10,-250,0.4,31746.449315238697
+10,-250,0.45,32031.312768715412
+10,-250,0.5,32127.40670702156
+10,-250,0.55,32031.31276871541
+10,-250,0.6000000000000001,31746.449315238697
+10,-250,0.65,31282.77186662275
+10,-250,0.7000000000000001,30655.922430364084
+10,-250,0.75,29885.959727461915
+10,-250,0.8,28995.85442871982
+10,-250,0.8500000000000001,28009.944818676166
+10,-250,0.9,26952.52240521943
+10,-250,0.9500000000000001,25846.666699132384
+10,-250,1.0,24713.38977463197
+10,-200,0.0,24835.733288367766
+10,-200,0.05,25974.620494672647
+10,-200,0.1,27085.950733958143
+10,-200,0.15000000000000002,28148.607911837928
+10,-200,0.2,29139.398262525363
+10,-200,0.25,30033.91002314242
+10,-200,0.30000000000000004,30807.684422593607
+10,-200,0.35000000000000003,31437.637073883252
+10,-200,0.4,31903.609955413143
+10,-200,0.45,32189.88362400608
+10,-200,0.5,32286.4532748781
+10,-200,0.55,32189.883624006077
+10,-200,0.6000000000000001,31903.609955413143
+10,-200,0.65,31437.637073883252
+10,-200,0.7000000000000001,30807.684422593607
+10,-200,0.75,30033.91002314242
+10,-200,0.8,29139.398262525363
+10,-200,0.8500000000000001,28148.607911837928
+10,-200,0.9,27085.950733958143
+10,-200,0.9500000000000001,25974.620494672643
+10,-200,1.0,24835.733288367766
+10,-150,0.0,24959.294150498954
+10,-150,0.05,26103.847462307836
+10,-150,0.1,27220.706707758927
+10,-150,0.15000000000000002,28288.65073726996
+10,-150,0.2,29284.370393184698
+10,-150,0.25,30183.332461068505
+10,-150,0.30000000000000004,30960.95648439756
+10,-150,0.35000000000000003,31594.043228479695
+10,-150,0.4,32062.334383052017
+10,-150,0.45,32350.032298752387
+10,-150,0.5,32447.082395648642
+10,-150,0.55,32350.03229875238
+10,-150,0.6000000000000001,32062.334383052017
+10,-150,0.65,31594.043228479695
+10,-150,0.7000000000000001,30960.95648439756
+10,-150,0.75,30183.332461068505
+10,-150,0.8,29284.370393184698
+10,-150,0.8500000000000001,28288.65073726996
+10,-150,0.9,27220.706707758927
+10,-150,0.9500000000000001,26103.847462307836
+10,-150,1.0,24959.294150498954
+10,-100,0.0,25084.090621251446
+10,-100,0.05,26234.366699619375
+10,-100,0.1,27356.810241297724
+10,-100,0.15000000000000002,28430.093990956306
+10,-100,0.2,29430.792245150613
+10,-100,0.25,30334.249123373847
+10,-100,0.30000000000000004,31115.761266819543
+10,-100,0.35000000000000003,31752.01344462209
+10,-100,0.4,32222.646054967274
+10,-100,0.45,32511.78246024614
+10,-100,0.5,32609.31780762688
+10,-100,0.55,32511.782460246137
+10,-100,0.6000000000000001,32222.646054967274
+10,-100,0.65,31752.01344462209
+10,-100,0.7000000000000001,31115.761266819543
+10,-100,0.75,30334.249123373847
+10,-100,0.8,29430.792245150613
+10,-100,0.8500000000000001,28430.093990956306
+10,-100,0.9,27356.810241297724
+10,-100,0.9500000000000001,26234.366699619375
+10,-100,1.0,25084.090621251446
+10,-50,0.0,25210.141327890895
+10,-50,0.05,26366.197688059674
+10,-50,0.1,27494.28164954545
+10,-50,0.15000000000000002,28572.95878488071
+10,-50,0.2,29578.685673518205
+10,-50,0.25,30486.68253605412
+10,-50,0.30000000000000004,31272.121876200545
+10,-50,0.35000000000000003,31911.57130112773
+10,-50,0.4,32384.568899464597
+10,-50,0.45,32675.15825150366
+10,-50,0.5,32773.18372625817
+10,-50,0.55,32675.158251503657
+10,-50,0.6000000000000001,32384.568899464597
+10,-50,0.65,31911.57130112773
+10,-50,0.7000000000000001,31272.121876200545
+10,-50,0.75,30486.68253605412
+10,-50,0.8,29578.685673518205
+10,-50,0.8500000000000001,28572.95878488071
+10,-50,0.9,27494.28164954545
+10,-50,0.9500000000000001,26366.19768805967
+10,-50,1.0,25210.141327890895
+10,0,0.0,25337.46527399136
+10,0,0.05,26499.360302645833
+10,0,0.1,27633.14165787649
+10,0,0.15000000000000002,28717.266657531618
+10,0,0.2,29728.072974899613
+10,0,0.25,30640.655680175605
+10,0,0.30000000000000004,31430.061885676307
+10,0,0.35000000000000003,32072.740853153628
+10,0,0.4,32548.12732824977
+10,0,0.45,32840.184303278926
+10,0,0.5,32938.70485618877
+10,0,0.55,32840.184303278926
+10,0,0.6000000000000001,32548.12732824977
+10,0,0.65,32072.740853153628
+10,0,0.7000000000000001,31430.061885676307
+10,0,0.75,30640.655680175605
+10,0,0.8,29728.072974899613
+10,0,0.8500000000000001,28717.266657531618
+10,0,0.9,27633.14165787649
+10,0,0.9500000000000001,26499.360302645833
+10,0,1.0,25337.46527399136
+10,50,0.0,25210.141327890895
+10,50,0.05,26366.197688059674
+10,50,0.1,27494.28164954545
+10,50,0.15000000000000002,28572.95878488071
+10,50,0.2,29578.685673518205
+10,50,0.25,30486.68253605412
+10,50,0.30000000000000004,31272.121876200545
+10,50,0.35000000000000003,31911.57130112773
+10,50,0.4,32384.568899464597
+10,50,0.45,32675.15825150366
+10,50,0.5,32773.18372625817
+10,50,0.55,32675.158251503657
+10,50,0.6000000000000001,32384.568899464597
+10,50,0.65,31911.57130112773
+10,50,0.7000000000000001,31272.121876200545
+10,50,0.75,30486.68253605412
+10,50,0.8,29578.685673518205
+10,50,0.8500000000000001,28572.95878488071
+10,50,0.9,27494.28164954545
+10,50,0.9500000000000001,26366.19768805967
+10,50,1.0,25210.141327890895
+10,100,0.0,25084.090621251446
+10,100,0.05,26234.366699619375
+10,100,0.1,27356.810241297724
+10,100,0.15000000000000002,28430.093990956306
+10,100,0.2,29430.792245150613
+10,100,0.25,30334.249123373847
+10,100,0.30000000000000004,31115.761266819543
+10,100,0.35000000000000003,31752.01344462209
+10,100,0.4,32222.646054967274
+10,100,0.45,32511.78246024614
+10,100,0.5,32609.31780762688
+10,100,0.55,32511.782460246137
+10,100,0.6000000000000001,32222.646054967274
+10,100,0.65,31752.01344462209
+10,100,0.7000000000000001,31115.761266819543
+10,100,0.75,30334.249123373847
+10,100,0.8,29430.792245150613
+10,100,0.8500000000000001,28430.093990956306
+10,100,0.9,27356.810241297724
+10,100,0.9500000000000001,26234.366699619375
+10,100,1.0,25084.090621251446
+10,150,0.0,24959.294150498954
+10,150,0.05,26103.847462307836
+10,150,0.1,27220.706707758927
+10,150,0.15000000000000002,28288.65073726996
+10,150,0.2,29284.370393184698
+10,150,0.25,30183.332461068505
+10,150,0.30000000000000004,30960.95648439756
+10,150,0.35000000000000003,31594.043228479695
+10,150,0.4,32062.334383052017
+10,150,0.45,32350.032298752387
+10,150,0.5,32447.082395648642
+10,150,0.55,32350.03229875238
+10,150,0.6000000000000001,32062.334383052017
+10,150,0.65,31594.043228479695
+10,150,0.7000000000000001,30960.95648439756
+10,150,0.75,30183.332461068505
+10,150,0.8,29284.370393184698
+10,150,0.8500000000000001,28288.65073726996
+10,150,0.9,27220.706707758927
+10,150,0.9500000000000001,26103.847462307836
+10,150,1.0,24959.294150498954
+10,200,0.0,24835.733288367766
+10,200,0.05,25974.620494672647
+10,200,0.1,27085.950733958143
+10,200,0.15000000000000002,28148.607911837928
+10,200,0.2,29139.398262525363
+10,200,0.25,30033.91002314242
+10,200,0.30000000000000004,30807.684422593607
+10,200,0.35000000000000003,31437.637073883252
+10,200,0.4,31903.609955413143
+10,200,0.45,32189.88362400608
+10,200,0.5,32286.4532748781
+10,200,0.55,32189.883624006077
+10,200,0.6000000000000001,31903.609955413143
+10,200,0.65,31437.637073883252
+10,200,0.7000000000000001,30807.684422593607
+10,200,0.75,30033.91002314242
+10,200,0.8,29139.398262525363
+10,200,0.8500000000000001,28148.607911837928
+10,200,0.9,27085.950733958143
+10,200,0.9500000000000001,25974.620494672643
+10,200,1.0,24835.733288367766
+10,250,0.0,24713.38977463197
+10,250,0.05,25846.66669913239
+10,250,0.1,26952.52240521943
+10,250,0.15000000000000002,28009.944818676166
+10,250,0.2,28995.85442871982
+10,250,0.25,29885.959727461915
+10,250,0.30000000000000004,30655.922430364084
+10,250,0.35000000000000003,31282.77186662275
+10,250,0.4,31746.449315238697
+10,250,0.45,32031.312768715412
+10,250,0.5,32127.40670702156
+10,250,0.55,32031.31276871541
+10,250,0.6000000000000001,31746.449315238697
+10,250,0.65,31282.77186662275
+10,250,0.7000000000000001,30655.922430364084
+10,250,0.75,29885.959727461915
+10,250,0.8,28995.85442871982
+10,250,0.8500000000000001,28009.944818676166
+10,250,0.9,26952.52240521943
+10,250,0.9500000000000001,25846.666699132384
+10,250,1.0,24713.38977463197
+10,300,0.0,24592.245707109258
+10,300,0.05,25719.967352568012
+10,300,0.1,26820.40219735071
+10,300,0.15000000000000002,27872.64116760422
+10,300,0.2,28853.717887402563
+10,300,0.25,29739.45992487632
+10,300,0.30000000000000004,30505.64830080347
+10,300,0.35000000000000003,31129.42494570793
+10,300,0.4,31590.82946565419
+10,300,0.45,31874.29652965308
+10,300,0.5,31969.91941924204
+10,300,0.55,31874.296529653075
+10,300,0.6000000000000001,31590.82946565419
+10,300,0.65,31129.42494570793
+10,300,0.7000000000000001,30505.64830080347
+10,300,0.75,29739.45992487632
+10,300,0.8,28853.717887402563
+10,300,0.8500000000000001,27872.64116760422
+10,300,0.9,26820.40219735071
+10,300,0.9500000000000001,25719.967352568012
+10,300,1.0,24592.245707109258
+10,350,0.0,24472.283532928242
+10,350,0.05,25594.504097189634
+10,350,0.1,26689.57096711973
+10,350,0.15000000000000002,27736.67706434762
+10,350,0.2,28712.968044049387
+10,350,0.25,29594.389388657408
+10,350,0.30000000000000004,30356.84026031175
+10,350,0.35000000000000003,30977.57409231424
+10,350,0.4,31436.72785850466
+10,350,0.45,31718.812156337703
+10,350,0.5,31813.968592806716
+10,350,0.55,31718.8121563377
+10,350,0.6000000000000001,31436.72785850466
+10,350,0.65,30977.57409231424
+10,350,0.7000000000000001,30356.84026031175
+10,350,0.75,29594.389388657408
+10,350,0.8,28712.968044049387
+10,350,0.8500000000000001,27736.67706434762
+10,350,0.9,26689.57096711973
+10,350,0.9500000000000001,25594.504097189634
+10,350,1.0,24472.283532928242
+10,400,0.0,24353.486040049942
+10,400,0.05,25470.258931669294
+10,400,0.1,26560.0099430075
+10,400,0.15000000000000002,27602.033000928448
+10,400,0.2,28573.584704029723
+10,400,0.25,29450.72730424645
+10,400,0.30000000000000004,30209.476958077226
+10,400,0.35000000000000003,30827.19751905057
+10,400,0.4,31284.12238346337
+10,400,0.45,31564.8373400448
+10,400,0.5,31659.531852064934
+10,400,0.55,31564.837340044796
+10,400,0.6000000000000001,31284.12238346337
+10,400,0.65,30827.19751905057
+10,400,0.7000000000000001,30209.476958077226
+10,400,0.75,29450.72730424645
+10,400,0.8,28573.584704029723
+10,400,0.8500000000000001,27602.033000928448
+10,400,0.9,26560.0099430075
+10,400,0.9500000000000001,25470.258931669294
+10,400,1.0,24353.486040049942
+10,450,0.0,24235.836349035217
+10,450,0.05,25347.214202530802
+10,450,0.1,26431.700716229683
+10,450,0.15000000000000002,27468.689846334597
+10,450,0.2,28435.548062947455
+10,450,0.25,29308.4532592984
+10,450,0.30000000000000004,30063.537455864298
+10,450,0.35000000000000003,30678.27385953825
+10,450,0.4,31132.991357456307
+10,450,0.45,31412.35020313637
+10,450,0.5,31506.587253745784
+10,450,0.55,31412.350203136368
+10,450,0.6000000000000001,31132.991357456307
+10,450,0.65,30678.27385953825
+10,450,0.7000000000000001,30063.537455864298
+10,450,0.75,29308.4532592984
+10,450,0.8,28435.548062947455
+10,450,0.8500000000000001,27468.689846334597
+10,450,0.9,26431.700716229683
+10,450,0.9500000000000001,25347.2142025308
+10,450,1.0,24235.836349035217
+10,500,0.0,24119.317905049465
+10,500,0.05,25225.352595787863
+10,500,0.1,26304.625232017042
+10,500,0.15000000000000002,27336.628837457985
+10,500,0.2,28298.83869726021
+10,500,0.25,29167.54723401331
+10,500,0.30000000000000004,29919.001218095713
+10,500,0.35000000000000003,30530.78215829047
+10,500,0.4,30983.313514391608
+10,500,0.45,31261.329288698213
+10,500,0.5,31355.11327656431
+10,500,0.55,31261.32928869821
+10,500,0.6000000000000001,30983.313514391608
+10,500,0.65,30530.78215829047
+10,500,0.7000000000000001,29919.001218095713
+10,500,0.75,29167.54723401331
+10,500,0.8,28298.83869726021
+10,500,0.8500000000000001,27336.628837457985
+10,500,0.9,26304.625232017042
+10,500,0.9500000000000001,25225.352595787852
+10,500,1.0,24119.317905049465
+10,550,0.0,24003.91447009708
+10,550,0.05,25104.65712882237
+10,550,0.1,26178.765781146147
+10,550,0.15000000000000002,27205.831570293118
+10,550,0.2,28163.437555168053
+10,550,0.25,29027.98959174531
+10,550,0.30000000000000004,29775.848102219657
+10,550,0.35000000000000003,30384.70186088239
+10,550,0.4,30835.067995183996
+10,550,0.45,31111.75355047478
+10,550,0.5,31205.088811126203
+10,550,0.55,31111.753550474776
+10,550,0.6000000000000001,30835.067995183996
+10,550,0.65,30384.70186088239
+10,550,0.7000000000000001,29775.848102219657
+10,550,0.75,29027.98959174531
+10,550,0.8,28163.437555168053
+10,550,0.8500000000000001,27205.831570293118
+10,550,0.9,26178.765781146147
+10,550,0.9500000000000001,25104.657128822364
+10,550,1.0,24003.91447009708
+10,600,0.0,23889.610115477564
+10,600,0.05,24985.11114249464
+10,600,0.1,26054.10499171212
+10,600,0.15000000000000002,27076.279991386953
+10,600,0.2,28029.325947762492
+10,600,0.25,28889.76106987985
+10,600,0.30000000000000004,29634.058349351944
+10,600,0.35000000000000003,30240.01280440199
+10,600,0.4,30688.23433806407
+10,600,0.45,30963.602343091567
+10,600,0.5,31056.493150120838
+10,600,0.55,30963.602343091563
+10,600,0.6000000000000001,30688.23433806407
+10,600,0.65,30240.01280440199
+10,600,0.7000000000000001,29634.058349351944
+10,600,0.75,28889.76106987985
+10,600,0.8,28029.325947762492
+10,600,0.8500000000000001,27076.279991386953
+10,600,0.9,26054.10499171212
+10,600,0.9500000000000001,24985.111142494636
+10,600,1.0,23889.610115477564
+10,650,0.0,23776.389214456347
+10,650,0.05,24866.69829347808
+10,650,0.1,25930.62582113528
+10,650,0.15000000000000002,26947.956389532043
+10,650,0.2,27896.485540427126
+10,650,0.25,28752.84277097047
+10,650,0.30000000000000004,29493.612575184405
+10,650,0.35000000000000003,30096.695208172598
+10,650,0.4,30542.792469163294
+10,650,0.45,30816.855412555586
+10,650,0.5,30909.30597879325
+10,650,0.55,30816.855412555582
+10,650,0.6000000000000001,30542.792469163294
+10,650,0.65,30096.695208172598
+10,650,0.7000000000000001,29493.612575184405
+10,650,0.75,28752.84277097047
+10,650,0.8,27896.485540427126
+10,650,0.8500000000000001,26947.956389532043
+10,650,0.9,25930.62582113528
+10,650,0.9500000000000001,24866.698293478075
+10,650,1.0,23776.389214456347
+10,700,0.0,23664.236435142873
+10,700,0.05,24749.40254681073
+10,700,0.1,25808.31154839408
+10,700,0.15000000000000002,26820.843387694626
+10,700,0.2,27764.89834448171
+10,700,0.25,28617.216154126265
+10,700,0.30000000000000004,29354.491761150508
+10,700,0.35000000000000003,29954.72966473782
+10,700,0.4,30398.72269336535
+10,700,0.45,30671.49288702466
+10,700,0.5,30763.50736568574
+10,700,0.55,30671.49288702466
+10,700,0.6000000000000001,30398.72269336535
+10,700,0.65,29954.72966473782
+10,700,0.7000000000000001,29354.491761150508
+10,700,0.75,28617.216154126265
+10,700,0.8,27764.89834448171
+10,700,0.8500000000000001,26820.843387694626
+10,700,0.9,25808.31154839408
+10,700,0.9500000000000001,24749.402546810725
+10,700,1.0,23664.236435142873
+20,-400,0.0,32540.488023311133
+20,-400,0.05,34032.690611668935
+20,-400,0.1,35488.787273745365
+20,-400,0.15000000000000002,36881.11109878332
+20,-400,0.2,38179.27295153833
+20,-400,0.25,39351.2878421437
+20,-400,0.30000000000000004,40365.10918922182
+20,-400,0.35000000000000003,41190.491168748275
+20,-400,0.4,41801.022164332484
+20,-400,0.45,42176.10611196857
+20,-400,0.5,42302.634430304475
+20,-400,0.55,42176.10611196856
+20,-400,0.6000000000000001,41801.022164332484
+20,-400,0.65,41190.491168748275
+20,-400,0.7000000000000001,40365.10918922182
+20,-400,0.75,39351.2878421437
+20,-400,0.8,38179.27295153833
+20,-400,0.8500000000000001,36881.11109878332
+20,-400,0.9,35488.787273745365
+20,-400,0.9500000000000001,34032.69061166892
+20,-400,1.0,32540.488023311133
+20,-350,0.0,32699.222111229723
+20,-350,0.05,34198.7037366039
+20,-350,0.1,35661.903309227055
+20,-350,0.15000000000000002,37061.01895780178
+20,-350,0.2,38365.5133073995
+20,-350,0.25,39543.2453438127
+20,-350,0.30000000000000004,40562.01216087657
+20,-350,0.35000000000000003,41391.420393961685
+20,-350,0.4,42004.92958952435
+20,-350,0.45,42381.84321495379
+20,-350,0.5,42508.988744598646
+20,-350,0.55,42381.843214953784
+20,-350,0.6000000000000001,42004.92958952435
+20,-350,0.65,41391.420393961685
+20,-350,0.7000000000000001,40562.01216087657
+20,-350,0.75,39543.2453438127
+20,-350,0.8,38365.5133073995
+20,-350,0.8500000000000001,37061.01895780178
+20,-350,0.9,35661.903309227055
+20,-350,0.9500000000000001,34198.70373660389
+20,-350,1.0,32699.222111229723
+20,-300,0.0,32859.51241569653
+20,-300,0.05,34366.3444411951
+20,-300,0.1,35836.71656074287
+20,-300,0.15000000000000002,37242.69061935963
+20,-300,0.2,38553.57954910243
+20,-300,0.25,39737.08478177256
+20,-300,0.30000000000000004,40760.84555382204
+20,-300,0.35000000000000003,41594.31951353993
+20,-300,0.4,42210.836107120056
+20,-300,0.45,42589.597348360425
+20,-300,0.5,42717.3661404055
+20,-300,0.55,42589.59734836042
+20,-300,0.6000000000000001,42210.836107120056
+20,-300,0.65,41594.31951353993
+20,-300,0.7000000000000001,40760.84555382204
+20,-300,0.75,39737.08478177256
+20,-300,0.8,38553.57954910243
+20,-300,0.8500000000000001,37242.69061935963
+20,-300,0.9,35836.71656074287
+20,-300,0.9500000000000001,34366.344441195084
+20,-300,1.0,32859.51241569653
+20,-250,0.0,33021.381934985686
+20,-250,0.05,34535.63677834384
+20,-250,0.1,36013.25211030318
+20,-250,0.15000000000000002,37426.15214950426
+20,-250,0.2,38743.498660181765
+20,-250,0.25,39932.833967889674
+20,-250,0.30000000000000004,40961.637896451706
+20,-250,0.35000000000000003,41799.2176392224
+20,-250,0.4,42418.771260357105
+20,-250,0.45,42799.39832051983
+20,-250,0.5,42927.796515481394
+20,-250,0.55,42799.398320519824
+20,-250,0.6000000000000001,42418.771260357105
+20,-250,0.65,41799.2176392224
+20,-250,0.7000000000000001,40961.637896451706
+20,-250,0.75,39932.833967889674
+20,-250,0.8,38743.498660181765
+20,-250,0.8500000000000001,37426.15214950426
+20,-250,0.9,36013.25211030318
+20,-250,0.9500000000000001,34535.63677834383
+20,-250,1.0,33021.381934985686
+20,-200,0.0,33184.854122782635
+20,-200,0.05,34706.605277246534
+20,-200,0.1,36191.53553659181
+20,-200,0.15000000000000002,37611.4301304424
+20,-200,0.2,38935.29815849949
+20,-200,0.25,40130.521264760406
+20,-200,0.30000000000000004,41164.4182820777
+20,-200,0.35000000000000003,42006.144459218536
+20,-200,0.4,42628.765177487585
+20,-200,0.45,43011.27653002735
+20,-200,0.5,43140.31035961743
+20,-200,0.55,43011.276530027346
+20,-200,0.6000000000000001,42628.765177487585
+20,-200,0.65,42006.144459218536
+20,-200,0.7000000000000001,41164.4182820777
+20,-200,0.75,40130.521264760406
+20,-200,0.8,38935.29815849949
+20,-200,0.8500000000000001,37611.4301304424
+20,-200,0.9,36191.53553659181
+20,-200,0.9500000000000001,34706.60527724652
+20,-200,1.0,33184.854122782635
+20,-150,0.0,33349.95289951291
+20,-150,0.05,34879.274955242785
+20,-150,0.1,36371.59292732113
+20,-150,0.15000000000000002,37798.55167337993
+20,-150,0.2,39129.00610953681
+20,-150,0.25,40330.175599410955
+20,-150,0.30000000000000004,41369.21638298356
+20,-150,0.35000000000000003,42215.13025254799
+20,-150,0.4,42840.848586330816
+20,-150,0.45,43225.262980425505
+20,-150,0.5,43354.93876936678
+20,-150,0.55,43225.26298042549
+20,-150,0.6000000000000001,42840.848586330816
+20,-150,0.65,42215.13025254799
+20,-150,0.7000000000000001,41369.21638298356
+20,-150,0.75,40330.175599410955
+20,-150,0.8,39129.00610953681
+20,-150,0.8500000000000001,37798.55167337993
+20,-150,0.9,36371.59292732113
+20,-150,0.9500000000000001,34879.27495524278
+20,-150,1.0,33349.95289951291
+20,-100,0.0,33516.70266401046
+20,-100,0.05,35053.671330018995
+20,-100,0.1,36553.45089195773
+20,-100,0.15000000000000002,37987.54443174683
+20,-100,0.2,39324.65114008448
+20,-100,0.25,40531.82647740801
+20,-100,0.30000000000000004,41576.062464898474
+20,-100,0.35000000000000003,42426.205903810725
+20,-100,0.4,43055.05282926246
+20,-100,0.45,43441.38929532763
+20,-100,0.5,43571.713463213615
+20,-100,0.55,43441.38929532762
+20,-100,0.6000000000000001,43055.05282926246
+20,-100,0.65,42426.205903810725
+20,-100,0.7000000000000001,41576.062464898474
+20,-100,0.75,40531.82647740801
+20,-100,0.8,39324.65114008448
+20,-100,0.8500000000000001,37987.54443174683
+20,-100,0.9,36553.45089195773
+20,-100,0.9500000000000001,35053.67133001899
+20,-100,1.0,33516.70266401046
+20,-50,0.0,33685.12830553816
+20,-50,0.05,35229.8204321799
+20,-50,0.1,36737.136574831886
+20,-50,0.15000000000000002,38178.43661482092
+20,-50,0.2,39522.262452346215
+20,-50,0.25,40735.50399739498
+20,-50,0.30000000000000004,41784.98740190802
+20,-50,0.35000000000000003,42639.40291840274
+20,-50,0.4,43271.40987865574
+20,-50,0.45,43659.68773399762
+20,-50,0.5,43790.66679719961
+20,-50,0.55,43659.68773399761
+20,-50,0.6000000000000001,43271.40987865574
+20,-50,0.65,42639.40291840274
+20,-50,0.7000000000000001,41784.98740190802
+20,-50,0.75,40735.50399739498
+20,-50,0.8,39522.262452346215
+20,-50,0.8500000000000001,38178.43661482092
+20,-50,0.9,36737.136574831886
+20,-50,0.9500000000000001,35229.820432179884
+20,-50,1.0,33685.12830553816
+20,0,0.0,33855.25521617218
+20,0,0.05,35407.748818201006
+20,0,0.1,36922.67766864417
+20,0,0.15000000000000002,38371.25700176447
+20,0,0.2,39721.869838469174
+20,0,0.25,40941.23886606869
+20,0,0.30000000000000004,41996.02269181665
+20,0,0.35000000000000003,42854.75343819265
+20,0,0.4,43489.95235279036
+20,0,0.45,43880.19120740164
+20,0,0.5,44011.83178102385
+20,0,0.55,43880.191207401636
+20,0,0.6000000000000001,43489.95235279036
+20,0,0.65,42854.75343819265
+20,0,0.7000000000000001,41996.02269181665
+20,0,0.75,40941.23886606869
+20,0,0.8,39721.869838469174
+20,0,0.8500000000000001,38371.25700176447
+20,0,0.9,36922.67766864417
+20,0,0.9500000000000001,35407.74881820099
+20,0,1.0,33855.25521617218
+20,50,0.0,33685.12830553816
+20,50,0.05,35229.8204321799
+20,50,0.1,36737.136574831886
+20,50,0.15000000000000002,38178.43661482092
+20,50,0.2,39522.262452346215
+20,50,0.25,40735.50399739498
+20,50,0.30000000000000004,41784.98740190802
+20,50,0.35000000000000003,42639.40291840274
+20,50,0.4,43271.40987865574
+20,50,0.45,43659.68773399762
+20,50,0.5,43790.66679719961
+20,50,0.55,43659.68773399761
+20,50,0.6000000000000001,43271.40987865574
+20,50,0.65,42639.40291840274
+20,50,0.7000000000000001,41784.98740190802
+20,50,0.75,40735.50399739498
+20,50,0.8,39522.262452346215
+20,50,0.8500000000000001,38178.43661482092
+20,50,0.9,36737.136574831886
+20,50,0.9500000000000001,35229.820432179884
+20,50,1.0,33685.12830553816
+20,100,0.0,33516.70266401046
+20,100,0.05,35053.671330018995
+20,100,0.1,36553.45089195773
+20,100,0.15000000000000002,37987.54443174683
+20,100,0.2,39324.65114008448
+20,100,0.25,40531.82647740801
+20,100,0.30000000000000004,41576.062464898474
+20,100,0.35000000000000003,42426.205903810725
+20,100,0.4,43055.05282926246
+20,100,0.45,43441.38929532763
+20,100,0.5,43571.713463213615
+20,100,0.55,43441.38929532762
+20,100,0.6000000000000001,43055.05282926246
+20,100,0.65,42426.205903810725
+20,100,0.7000000000000001,41576.062464898474
+20,100,0.75,40531.82647740801
+20,100,0.8,39324.65114008448
+20,100,0.8500000000000001,37987.54443174683
+20,100,0.9,36553.45089195773
+20,100,0.9500000000000001,35053.67133001899
+20,100,1.0,33516.70266401046
+20,150,0.0,33349.95289951291
+20,150,0.05,34879.274955242785
+20,150,0.1,36371.59292732113
+20,150,0.15000000000000002,37798.55167337993
+20,150,0.2,39129.00610953681
+20,150,0.25,40330.175599410955
+20,150,0.30000000000000004,41369.21638298356
+20,150,0.35000000000000003,42215.13025254799
+20,150,0.4,42840.848586330816
+20,150,0.45,43225.262980425505
+20,150,0.5,43354.93876936678
+20,150,0.55,43225.26298042549
+20,150,0.6000000000000001,42840.848586330816
+20,150,0.65,42215.13025254799
+20,150,0.7000000000000001,41369.21638298356
+20,150,0.75,40330.175599410955
+20,150,0.8,39129.00610953681
+20,150,0.8500000000000001,37798.55167337993
+20,150,0.9,36371.59292732113
+20,150,0.9500000000000001,34879.27495524278
+20,150,1.0,33349.95289951291
+20,200,0.0,33184.854122782635
+20,200,0.05,34706.605277246534
+20,200,0.1,36191.53553659181
+20,200,0.15000000000000002,37611.4301304424
+20,200,0.2,38935.29815849949
+20,200,0.25,40130.521264760406
+20,200,0.30000000000000004,41164.4182820777
+20,200,0.35000000000000003,42006.144459218536
+20,200,0.4,42628.765177487585
+20,200,0.45,43011.27653002735
+20,200,0.5,43140.31035961743
+20,200,0.55,43011.276530027346
+20,200,0.6000000000000001,42628.765177487585
+20,200,0.65,42006.144459218536
+20,200,0.7000000000000001,41164.4182820777
+20,200,0.75,40130.521264760406
+20,200,0.8,38935.29815849949
+20,200,0.8500000000000001,37611.4301304424
+20,200,0.9,36191.53553659181
+20,200,0.9500000000000001,34706.60527724652
+20,200,1.0,33184.854122782635
+20,250,0.0,33021.381934985686
+20,250,0.05,34535.63677834384
+20,250,0.1,36013.25211030318
+20,250,0.15000000000000002,37426.15214950426
+20,250,0.2,38743.498660181765
+20,250,0.25,39932.833967889674
+20,250,0.30000000000000004,40961.637896451706
+20,250,0.35000000000000003,41799.2176392224
+20,250,0.4,42418.771260357105
+20,250,0.45,42799.39832051983
+20,250,0.5,42927.796515481394
+20,250,0.55,42799.398320519824
+20,250,0.6000000000000001,42418.771260357105
+20,250,0.65,41799.2176392224
+20,250,0.7000000000000001,40961.637896451706
+20,250,0.75,39932.833967889674
+20,250,0.8,38743.498660181765
+20,250,0.8500000000000001,37426.15214950426
+20,250,0.9,36013.25211030318
+20,250,0.9500000000000001,34535.63677834383
+20,250,1.0,33021.381934985686
+20,300,0.0,32859.51241569653
+20,300,0.05,34366.3444411951
+20,300,0.1,35836.71656074287
+20,300,0.15000000000000002,37242.69061935963
+20,300,0.2,38553.57954910243
+20,300,0.25,39737.08478177256
+20,300,0.30000000000000004,40760.84555382204
+20,300,0.35000000000000003,41594.31951353993
+20,300,0.4,42210.836107120056
+20,300,0.45,42589.597348360425
+20,300,0.5,42717.3661404055
+20,300,0.55,42589.59734836042
+20,300,0.6000000000000001,42210.836107120056
+20,300,0.65,41594.31951353993
+20,300,0.7000000000000001,40760.84555382204
+20,300,0.75,39737.08478177256
+20,300,0.8,38553.57954910243
+20,300,0.8500000000000001,37242.69061935963
+20,300,0.9,35836.71656074287
+20,300,0.9500000000000001,34366.344441195084
+20,300,1.0,32859.51241569653
+20,350,0.0,32699.222111229723
+20,350,0.05,34198.7037366039
+20,350,0.1,35661.903309227055
+20,350,0.15000000000000002,37061.01895780178
+20,350,0.2,38365.5133073995
+20,350,0.25,39543.2453438127
+20,350,0.30000000000000004,40562.01216087657
+20,350,0.35000000000000003,41391.420393961685
+20,350,0.4,42004.92958952435
+20,350,0.45,42381.84321495379
+20,350,0.5,42508.988744598646
+20,350,0.55,42381.843214953784
+20,350,0.6000000000000001,42004.92958952435
+20,350,0.65,41391.420393961685
+20,350,0.7000000000000001,40562.01216087657
+20,350,0.75,39543.2453438127
+20,350,0.8,38365.5133073995
+20,350,0.8500000000000001,37061.01895780178
+20,350,0.9,35661.903309227055
+20,350,0.9500000000000001,34198.70373660389
+20,350,1.0,32699.222111229723
+20,400,0.0,32540.488023311133
+20,400,0.05,34032.690611668935
+20,400,0.1,35488.787273745365
+20,400,0.15000000000000002,36881.11109878332
+20,400,0.2,38179.27295153833
+20,400,0.25,39351.2878421437
+20,400,0.30000000000000004,40365.10918922182
+20,400,0.35000000000000003,41190.491168748275
+20,400,0.4,41801.022164332484
+20,400,0.45,42176.10611196857
+20,400,0.5,42302.634430304475
+20,400,0.55,42176.10611196856
+20,400,0.6000000000000001,41801.022164332484
+20,400,0.65,41190.491168748275
+20,400,0.7000000000000001,40365.10918922182
+20,400,0.75,39351.2878421437
+20,400,0.8,38179.27295153833
+20,400,0.8500000000000001,36881.11109878332
+20,400,0.9,35488.787273745365
+20,400,0.9500000000000001,34032.69061166892
+20,400,1.0,32540.488023311133
+20,450,0.0,32383.287598077746
+20,450,0.05,33868.28147827923
+20,450,0.1,35317.34385696399
+20,450,0.15000000000000002,36702.94147994862
+20,450,0.2,37994.8320194053
+20,450,0.25,39161.18500232658
+20,450,0.30000000000000004,40170.10866173766
+20,450,0.35000000000000003,40991.50328870602
+20,450,0.4,41599.084859190785
+20,450,0.45,41972.356807079836
+20,450,0.5,42098.27387750107
+20,450,0.55,41972.35680707983
+20,450,0.6000000000000001,41599.084859190785
+20,450,0.65,40991.50328870602
+20,450,0.7000000000000001,40170.10866173766
+20,450,0.75,39161.18500232658
+20,450,0.8,37994.8320194053
+20,450,0.8500000000000001,36702.94147994862
+20,450,0.9,35317.34385696399
+20,450,0.9500000000000001,33868.28147827922
+20,450,1.0,32383.287598077746
+20,500,0.0,32227.598715394673
+20,500,0.05,33705.453201941345
+20,500,0.1,35147.54893457474
+20,500,0.15000000000000002,36526.48503052579
+20,500,0.2,37812.16455777354
+20,500,0.25,38972.91007443077
+20,500,0.30000000000000004,39976.98313932546
+20,500,0.35000000000000003,40794.428753664164
+20,500,0.4,41399.08925890621
+20,500,0.45,41770.56663012272
+20,500,0.5,41895.87833001308
+20,500,0.55,41770.56663012271
+20,500,0.6000000000000001,41399.08925890621
+20,500,0.65,40794.428753664164
+20,500,0.7000000000000001,39976.98313932546
+20,500,0.75,38972.91007443077
+20,500,0.8,37812.16455777354
+20,500,0.8500000000000001,36526.48503052579
+20,500,0.9,35147.54893457474
+20,500,0.9500000000000001,33705.45320194133
+20,500,1.0,32227.598715394673
+20,550,0.0,32073.399678478916
+20,550,0.05,33544.18309092727
+20,550,0.1,34979.378843978695
+20,550,0.15000000000000002,36351.71715956634
+20,550,0.2,37631.24511012869
+20,550,0.25,38786.43682048613
+20,550,0.30000000000000004,39785.70570803682
+20,550,0.35000000000000003,40599.24009934041
+20,550,0.4,41201.00749211718
+20,550,0.45,41570.70745964367
+20,550,0.5,41695.419582022594
+20,550,0.55,41570.707459643665
+20,550,0.6000000000000001,41201.00749211718
+20,550,0.65,40599.24009934041
+20,550,0.7000000000000001,39785.70570803682
+20,550,0.75,38786.43682048613
+20,550,0.8,37631.24511012869
+20,550,0.8500000000000001,36351.71715956634
+20,550,0.9,34979.378843978695
+20,550,0.9500000000000001,33544.18309092726
+20,550,1.0,32073.399678478916
+20,600,0.0,31920.66920381949
+20,600,0.05,33384.44888573238
+20,600,0.1,34812.81037329307
+20,600,0.15000000000000002,36178.61374452078
+20,600,0.2,37452.04870484237
+20,600,0.25,38601.73950229334
+20,600,0.30000000000000004,39596.24996656998
+20,600,0.35000000000000003,40405.91038458164
+20,600,0.4,41004.8122183452
+20,600,0.45,41372.75170983584
+20,600,0.5,41496.86996496534
+20,600,0.55,41372.75170983583
+20,600,0.6000000000000001,41004.8122183452
+20,600,0.65,40405.91038458164
+20,600,0.7000000000000001,39596.24996656998
+20,600,0.75,38601.73950229334
+20,600,0.8,37452.04870484237
+20,600,0.8500000000000001,36178.61374452078
+20,600,0.9,34812.81037329307
+20,600,0.9500000000000001,33384.44888573237
+20,600,1.0,31920.66920381949
+20,650,0.0,31769.38641138433
+20,650,0.05,33226.22874883318
+20,650,0.1,34647.820750670835
+20,650,0.15000000000000002,36007.15112013917
+20,650,0.2,37274.55084368197
+20,650,0.25,38418.792869581055
+20,650,0.30000000000000004,39408.590014121786
+20,650,0.35000000000000003,40214.41317896752
+20,650,0.4,40810.47661541465
+20,650,0.45,41176.67231784609
+20,650,0.5,41300.20233479963
+20,650,0.55,41176.67231784609
+20,650,0.6000000000000001,40810.47661541465
+20,650,0.65,40214.41317896752
+20,650,0.7000000000000001,39408.590014121786
+20,650,0.75,38418.792869581055
+20,650,0.8,37274.55084368197
+20,650,0.8500000000000001,36007.15112013917
+20,650,0.9,34647.820750670835
+20,650,0.9500000000000001,33226.228748833164
+20,650,1.0,31769.38641138433
+20,700,0.0,31619.53081510421
+20,700,0.05,33069.5012547349
+20,700,0.1,34484.387633922386
+20,700,0.15000000000000002,35837.30606768568
+20,700,0.2,37098.72749064574
+20,700,0.25,38237.57214849812
+20,700,0.30000000000000004,39222.70043858346
+20,700,0.35000000000000003,40024.72255076484
+20,700,0.4,40617.97436722872
+20,700,0.45,40982.44273144116
+20,700,0.5,41105.39005963548
+20,700,0.55,40982.44273144115
+20,700,0.6000000000000001,40617.97436722872
+20,700,0.65,40024.72255076484
+20,700,0.7000000000000001,39222.70043858346
+20,700,0.75,38237.57214849812
+20,700,0.8,37098.72749064574
+20,700,0.8500000000000001,35837.30606768568
+20,700,0.9,34484.387633922386
+20,700,0.9500000000000001,33069.50125473489
+20,700,1.0,31619.53081510421
+30,-400,0.0,42656.31299045655
+30,-400,0.05,44612.394921635976
+30,-400,0.1,46521.146717779804
+30,-400,0.15000000000000002,48346.3006866552
+30,-400,0.2,50048.02065667285
+30,-400,0.25,51584.378500087
+30,-400,0.30000000000000004,52913.36535075717
+30,-400,0.35000000000000003,53995.332899312096
+30,-400,0.4,54795.65897983549
+30,-400,0.45,55287.34485303441
+30,-400,0.5,55453.206887593515
+30,-400,0.55,55287.3448530344
+30,-400,0.6000000000000001,54795.65897983549
+30,-400,0.65,53995.332899312096
+30,-400,0.7000000000000001,52913.36535075717
+30,-400,0.75,51584.378500087
+30,-400,0.8,50048.02065667285
+30,-400,0.8500000000000001,48346.3006866552
+30,-400,0.9,46521.146717779804
+30,-400,0.9500000000000001,44612.39492163597
+30,-400,1.0,42656.31299045655
+30,-350,0.0,42864.39256601976
+30,-350,0.05,44830.0163602781
+30,-350,0.1,46748.079140793365
+30,-350,0.15000000000000002,48582.136299760845
+30,-350,0.2,50292.15734280297
+30,-350,0.25,51836.009614721566
+30,-350,0.30000000000000004,53171.47932807794
+30,-350,0.35000000000000003,54258.72476711363
+30,-350,0.4,55062.95487729811
+30,-350,0.45,55557.03921817117
+30,-350,0.5,55723.710335825686
+30,-350,0.55,55557.039218171165
+30,-350,0.6000000000000001,55062.95487729811
+30,-350,0.65,54258.72476711363
+30,-350,0.7000000000000001,53171.47932807794
+30,-350,0.75,51836.009614721566
+30,-350,0.8,50292.15734280297
+30,-350,0.8500000000000001,48582.136299760845
+30,-350,0.9,46748.079140793365
+30,-350,0.9500000000000001,44830.016360278096
+30,-350,1.0,42864.39256601976
+30,-300,0.0,43074.51213742181
+30,-300,0.05,45049.77134243633
+30,-300,0.1,46977.23639148352
+30,-300,0.15000000000000002,48820.28402672045
+30,-300,0.2,50538.687525855916
+30,-300,0.25,52090.10770106824
+30,-300,0.30000000000000004,53432.12383458812
+30,-300,0.35000000000000003,54524.698908128885
+30,-300,0.4,55332.87132277505
+30,-300,0.45,55829.377645711225
+30,-300,0.5,55996.86577864837
+30,-300,0.55,55829.37764571122
+30,-300,0.6000000000000001,55332.87132277505
+30,-300,0.65,54524.698908128885
+30,-300,0.7000000000000001,53432.12383458812
+30,-300,0.75,52090.10770106824
+30,-300,0.8,50538.687525855916
+30,-300,0.8500000000000001,48820.28402672045
+30,-300,0.9,46977.23639148352
+30,-300,0.9500000000000001,45049.771342436325
+30,-300,1.0,43074.51213742181
+30,-250,0.0,43286.70185238449
+30,-250,0.05,45271.69139831041
+30,-250,0.1,47208.651349077045
+30,-250,0.15000000000000002,49060.77803670431
+30,-250,0.2,50787.64657770743
+30,-250,0.25,52346.70921683705
+30,-250,0.30000000000000004,53695.33626727083
+30,-250,0.35000000000000003,54793.293484031
+30,-250,0.4,55605.44704357692
+30,-250,0.45,56104.39921046844
+30,-250,0.5,56272.71240809984
+30,-250,0.55,56104.399210468415
+30,-250,0.6000000000000001,55605.44704357692
+30,-250,0.65,54793.293484031
+30,-250,0.7000000000000001,53695.33626727083
+30,-250,0.75,52346.70921683705
+30,-250,0.8,50787.64657770743
+30,-250,0.8500000000000001,49060.77803670431
+30,-250,0.9,47208.651349077045
+30,-250,0.9500000000000001,45271.6913983104
+30,-250,1.0,43286.70185238449
+30,-200,0.0,43500.99245561411
+30,-200,0.05,45495.808682460454
+30,-200,0.1,47442.35754387446
+30,-200,0.15000000000000002,49303.653175499865
+30,-200,0.2,51039.070570666365
+30,-200,0.25,52605.85134167288
+30,-200,0.30000000000000004,53961.15476364344
+30,-200,0.35000000000000003,55064.54741216977
+30,-200,0.4,55880.721533891636
+30,-200,0.45,56382.14376101529
+30,-200,0.5,56551.29019229834
+30,-200,0.55,56382.143761015286
+30,-200,0.6000000000000001,55880.721533891636
+30,-200,0.65,55064.54741216977
+30,-200,0.7000000000000001,53961.15476364344
+30,-200,0.75,52605.85134167288
+30,-200,0.8,51039.070570666365
+30,-200,0.8500000000000001,49303.653175499865
+30,-200,0.9,47442.35754387446
+30,-200,0.9500000000000001,45495.80868246045
+30,-200,1.0,43500.99245561411
+30,-150,0.0,43717.41530365199
+30,-150,0.05,45722.155989338375
+30,-150,0.1,47678.389173445976
+30,-150,0.15000000000000002,49548.944982343164
+30,-150,0.2,51292.99629489855
+30,-150,0.25,52867.571995114035
+30,-150,0.30000000000000004,54229.618220179
+30,-150,0.35000000000000003,55338.500384369625
+30,-150,0.4,56158.73507386126
+30,-150,0.45,56662.6519389308
+30,-150,0.5,56832.63989474759
+30,-150,0.55,56662.651938930794
+30,-150,0.6000000000000001,56158.73507386126
+30,-150,0.65,55338.500384369625
+30,-150,0.7000000000000001,54229.618220179
+30,-150,0.75,52867.571995114035
+30,-150,0.8,51292.99629489855
+30,-150,0.8500000000000001,49548.944982343164
+30,-150,0.9,47678.389173445976
+30,-150,0.9500000000000001,45722.15598933837
+30,-150,1.0,43717.41530365199
+30,-100,0.0,43936.00238017025
+30,-100,0.05,45950.76676928507
+30,-100,0.1,47916.7811193132
+30,-100,0.15000000000000002,49796.68970725486
+30,-100,0.2,51549.46127637304
+30,-100,0.25,53131.90985508961
+30,-100,0.30000000000000004,54500.766311279884
+30,-100,0.35000000000000003,55615.192886291465
+30,-100,0.4,56439.52874923056
+30,-100,0.45,56945.965198625454
+30,-100,0.5,57116.80309422132
+30,-100,0.55,56945.96519862543
+30,-100,0.6000000000000001,56439.52874923056
+30,-100,0.65,55615.192886291465
+30,-100,0.7000000000000001,54500.766311279884
+30,-100,0.75,53131.90985508961
+30,-100,0.8,51549.46127637304
+30,-100,0.8500000000000001,49796.68970725486
+30,-100,0.9,47916.7811193132
+30,-100,0.9500000000000001,45950.76676928505
+30,-100,1.0,43936.00238017025
+30,-50,0.0,44156.786311728894
+30,-50,0.05,46181.67514501011
+30,-50,0.1,48157.56896413387
+30,-50,0.15000000000000002,50046.92432889936
+30,-50,0.2,51808.50379534979
+30,-50,0.25,53398.90437697448
+30,-50,0.30000000000000004,54774.639508824
+30,-50,0.35000000000000003,55894.666217378355
+30,-50,0.4,56723.1444715885
+30,-50,0.45,57232.12582776428
+30,-50,0.5,57403.82220524757
+30,-50,0.55,57232.12582776426
+30,-50,0.6000000000000001,56723.1444715885
+30,-50,0.65,55894.666217378355
+30,-50,0.7000000000000001,54774.639508824
+30,-50,0.75,53398.90437697448
+30,-50,0.8,51808.50379534979
+30,-50,0.8500000000000001,50046.92432889936
+30,-50,0.9,48157.56896413387
+30,-50,0.9500000000000001,46181.6751450101
+30,-50,1.0,44156.786311728894
+30,0,0.0,44379.80038401035
+30,0,0.05,46414.91592857077
+30,0,0.1,48400.78900940727
+30,0,0.15000000000000002,50299.68657298471
+30,0,0.2,52070.16290542731
+30,0,0.25,53668.59581322183
+30,0,0.30000000000000004,55051.27910230291
+30,0,0.35000000000000003,56176.96251140551
+30,0,0.4,57009.62499922278
+30,0,0.45,57521.17696830854
+30,0,0.5,57693.74049921346
+30,0,0.55,57521.17696830853
+30,0,0.6000000000000001,57009.62499922278
+30,0,0.65,56176.96251140551
+30,0,0.7000000000000001,55051.27910230291
+30,0,0.75,53668.59581322183
+30,0,0.8,52070.16290542731
+30,0,0.8500000000000001,50299.68657298471
+30,0,0.9,48400.78900940727
+30,0,0.9500000000000001,46414.915928570765
+30,0,1.0,44379.80038401035
+30,50,0.0,44156.786311728894
+30,50,0.05,46181.67514501011
+30,50,0.1,48157.56896413387
+30,50,0.15000000000000002,50046.92432889936
+30,50,0.2,51808.50379534979
+30,50,0.25,53398.90437697448
+30,50,0.30000000000000004,54774.639508824
+30,50,0.35000000000000003,55894.666217378355
+30,50,0.4,56723.1444715885
+30,50,0.45,57232.12582776428
+30,50,0.5,57403.82220524757
+30,50,0.55,57232.12582776426
+30,50,0.6000000000000001,56723.1444715885
+30,50,0.65,55894.666217378355
+30,50,0.7000000000000001,54774.639508824
+30,50,0.75,53398.90437697448
+30,50,0.8,51808.50379534979
+30,50,0.8500000000000001,50046.92432889936
+30,50,0.9,48157.56896413387
+30,50,0.9500000000000001,46181.6751450101
+30,50,1.0,44156.786311728894
+30,100,0.0,43936.00238017025
+30,100,0.05,45950.76676928507
+30,100,0.1,47916.7811193132
+30,100,0.15000000000000002,49796.68970725486
+30,100,0.2,51549.46127637304
+30,100,0.25,53131.90985508961
+30,100,0.30000000000000004,54500.766311279884
+30,100,0.35000000000000003,55615.192886291465
+30,100,0.4,56439.52874923056
+30,100,0.45,56945.965198625454
+30,100,0.5,57116.80309422132
+30,100,0.55,56945.96519862543
+30,100,0.6000000000000001,56439.52874923056
+30,100,0.65,55615.192886291465
+30,100,0.7000000000000001,54500.766311279884
+30,100,0.75,53131.90985508961
+30,100,0.8,51549.46127637304
+30,100,0.8500000000000001,49796.68970725486
+30,100,0.9,47916.7811193132
+30,100,0.9500000000000001,45950.76676928505
+30,100,1.0,43936.00238017025
+30,150,0.0,43717.41530365199
+30,150,0.05,45722.155989338375
+30,150,0.1,47678.389173445976
+30,150,0.15000000000000002,49548.944982343164
+30,150,0.2,51292.99629489855
+30,150,0.25,52867.571995114035
+30,150,0.30000000000000004,54229.618220179
+30,150,0.35000000000000003,55338.500384369625
+30,150,0.4,56158.73507386126
+30,150,0.45,56662.6519389308
+30,150,0.5,56832.63989474759
+30,150,0.55,56662.651938930794
+30,150,0.6000000000000001,56158.73507386126
+30,150,0.65,55338.500384369625
+30,150,0.7000000000000001,54229.618220179
+30,150,0.75,52867.571995114035
+30,150,0.8,51292.99629489855
+30,150,0.8500000000000001,49548.944982343164
+30,150,0.9,47678.389173445976
+30,150,0.9500000000000001,45722.15598933837
+30,150,1.0,43717.41530365199
+30,200,0.0,43500.99245561411
+30,200,0.05,45495.808682460454
+30,200,0.1,47442.35754387446
+30,200,0.15000000000000002,49303.653175499865
+30,200,0.2,51039.070570666365
+30,200,0.25,52605.85134167288
+30,200,0.30000000000000004,53961.15476364344
+30,200,0.35000000000000003,55064.54741216977
+30,200,0.4,55880.721533891636
+30,200,0.45,56382.14376101529
+30,200,0.5,56551.29019229834
+30,200,0.55,56382.143761015286
+30,200,0.6000000000000001,55880.721533891636
+30,200,0.65,55064.54741216977
+30,200,0.7000000000000001,53961.15476364344
+30,200,0.75,52605.85134167288
+30,200,0.8,51039.070570666365
+30,200,0.8500000000000001,49303.653175499865
+30,200,0.9,47442.35754387446
+30,200,0.9500000000000001,45495.80868246045
+30,200,1.0,43500.99245561411
+30,250,0.0,43286.70185238449
+30,250,0.05,45271.69139831041
+30,250,0.1,47208.651349077045
+30,250,0.15000000000000002,49060.77803670431
+30,250,0.2,50787.64657770743
+30,250,0.25,52346.70921683705
+30,250,0.30000000000000004,53695.33626727083
+30,250,0.35000000000000003,54793.293484031
+30,250,0.4,55605.44704357692
+30,250,0.45,56104.39921046844
+30,250,0.5,56272.71240809984
+30,250,0.55,56104.399210468415
+30,250,0.6000000000000001,55605.44704357692
+30,250,0.65,54793.293484031
+30,250,0.7000000000000001,53695.33626727083
+30,250,0.75,52346.70921683705
+30,250,0.8,50787.64657770743
+30,250,0.8500000000000001,49060.77803670431
+30,250,0.9,47208.651349077045
+30,250,0.9500000000000001,45271.6913983104
+30,250,1.0,43286.70185238449
+30,300,0.0,43074.51213742181
+30,300,0.05,45049.77134243633
+30,300,0.1,46977.23639148352
+30,300,0.15000000000000002,48820.28402672045
+30,300,0.2,50538.687525855916
+30,300,0.25,52090.10770106824
+30,300,0.30000000000000004,53432.12383458812
+30,300,0.35000000000000003,54524.698908128885
+30,300,0.4,55332.87132277505
+30,300,0.45,55829.377645711225
+30,300,0.5,55996.86577864837
+30,300,0.55,55829.37764571122
+30,300,0.6000000000000001,55332.87132277505
+30,300,0.65,54524.698908128885
+30,300,0.7000000000000001,53432.12383458812
+30,300,0.75,52090.10770106824
+30,300,0.8,50538.687525855916
+30,300,0.8500000000000001,48820.28402672045
+30,300,0.9,46977.23639148352
+30,300,0.9500000000000001,45049.771342436325
+30,300,1.0,43074.51213742181
+30,350,0.0,42864.39256601976
+30,350,0.05,44830.0163602781
+30,350,0.1,46748.079140793365
+30,350,0.15000000000000002,48582.136299760845
+30,350,0.2,50292.15734280297
+30,350,0.25,51836.009614721566
+30,350,0.30000000000000004,53171.47932807794
+30,350,0.35000000000000003,54258.72476711363
+30,350,0.4,55062.95487729811
+30,350,0.45,55557.03921817117
+30,350,0.5,55723.710335825686
+30,350,0.55,55557.039218171165
+30,350,0.6000000000000001,55062.95487729811
+30,350,0.65,54258.72476711363
+30,350,0.7000000000000001,53171.47932807794
+30,350,0.75,51836.009614721566
+30,350,0.8,50292.15734280297
+30,350,0.8500000000000001,48582.136299760845
+30,350,0.9,46748.079140793365
+30,350,0.9500000000000001,44830.016360278096
+30,350,1.0,42864.39256601976
+30,400,0.0,42656.31299045655
+30,400,0.05,44612.394921635976
+30,400,0.1,46521.146717779804
+30,400,0.15000000000000002,48346.3006866552
+30,400,0.2,50048.02065667285
+30,400,0.25,51584.378500087
+30,400,0.30000000000000004,52913.36535075717
+30,400,0.35000000000000003,53995.332899312096
+30,400,0.4,54795.65897983549
+30,400,0.45,55287.34485303441
+30,400,0.5,55453.206887593515
+30,400,0.55,55287.3448530344
+30,400,0.6000000000000001,54795.65897983549
+30,400,0.65,53995.332899312096
+30,400,0.7000000000000001,52913.36535075717
+30,400,0.75,51584.378500087
+30,400,0.8,50048.02065667285
+30,400,0.8500000000000001,48346.3006866552
+30,400,0.9,46521.146717779804
+30,400,0.9500000000000001,44612.39492163597
+30,400,1.0,42656.31299045655
+30,450,0.0,42450.24384557512
+30,450,0.05,44396.876105589436
+30,450,0.1,46296.40687856348
+30,450,0.15000000000000002,48112.74367850712
+30,450,0.2,49806.24277910439
+30,450,0.25,51335.17860395132
+30,450,0.30000000000000004,52657.74522828975
+30,450,0.35000000000000003,53734.485880474844
+30,450,0.4,54530.94565143049
+30,450,0.45,55020.256230556
+30,450,0.5,55185.316999247654
+30,450,0.55,55020.256230555984
+30,450,0.6000000000000001,54530.94565143049
+30,450,0.65,53734.485880474844
+30,450,0.7000000000000001,52657.74522828975
+30,450,0.75,51335.17860395132
+30,450,0.8,49806.24277910439
+30,450,0.8500000000000001,48112.74367850712
+30,450,0.9,46296.40687856348
+30,450,0.9500000000000001,44396.87610558943
+30,450,1.0,42450.24384557512
+30,500,0.0,42246.156134779085
+30,500,0.05,44183.42958585102
+30,500,0.1,46073.82799933961
+30,500,0.15000000000000002,47881.43241082198
+30,500,0.2,49566.78968882023
+30,500,0.25,51088.37486066308
+30,500,0.30000000000000004,52404.58299161528
+30,500,0.35000000000000003,53476.14700604948
+30,500,0.4,54268.77764349091
+30,500,0.45,54755.735767909086
+30,500,0.5,54920.0029752128
+30,500,0.55,54755.73576790907
+30,500,0.6000000000000001,54268.77764349091
+30,500,0.65,53476.14700604948
+30,500,0.7000000000000001,52404.58299161528
+30,500,0.75,51088.37486066308
+30,500,0.8,49566.78968882023
+30,500,0.8500000000000001,47881.43241082198
+30,500,0.9,46073.82799933961
+30,500,0.9500000000000001,44183.429585851016
+30,500,1.0,42246.156134779085
+30,550,0.0,42044.02141643086
+30,550,0.05,43972.025616540726
+30,550,0.1,45853.37906154373
+30,550,0.15000000000000002,47652.33464809078
+30,550,0.2,49329.628015667986
+30,550,0.25,50843.93287568384
+30,550,0.30000000000000004,52153.84336007644
+30,550,0.35000000000000003,53220.28027396313
+30,550,0.4,54009.11842031633
+30,550,0.45,54493.74660155545
+30,550,0.5,54657.22784136013
+30,550,0.55,54493.74660155544
+30,550,0.6000000000000001,54009.11842031633
+30,550,0.65,53220.28027396313
+30,550,0.7000000000000001,52153.84336007644
+30,550,0.75,50843.93287568384
+30,550,0.8,49329.628015667986
+30,550,0.8500000000000001,47652.33464809078
+30,550,0.9,45853.37906154373
+30,550,0.9500000000000001,43972.02561654072
+30,550,1.0,42044.02141643086
+30,600,0.0,41843.81179063833
+30,600,0.05,43762.63501836672
+30,600,0.1,45635.029637441134
+30,600,0.15000000000000002,47425.418768814154
+30,600,0.2,49094.72502511717
+30,600,0.25,50601.818909609145
+30,600,0.30000000000000004,51905.491725028456
+30,600,0.35000000000000003,52966.85036789662
+30,600,0.4,53751.93214212434
+30,600,0.45,54234.252570119475
+30,600,0.5,54396.95532782983
+30,600,0.55,54234.25257011945
+30,600,0.6000000000000001,53751.93214212434
+30,600,0.65,52966.85036789662
+30,600,0.7000000000000001,51905.491725028456
+30,600,0.75,50601.818909609145
+30,600,0.8,49094.72502511717
+30,600,0.8500000000000001,47425.418768814154
+30,600,0.9,45635.029637441134
+30,600,0.9500000000000001,43762.63501836671
+30,600,1.0,41843.81179063833
+30,650,0.0,41645.499886417296
+30,650,0.05,43555.22916519911
+30,650,0.1,45418.74987612626
+30,650,0.15000000000000002,47200.653750952486
+30,650,0.2,48862.048603197196
+30,650,0.25,50361.99986264418
+30,650,0.30000000000000004,51659.49413391458
+30,650,0.35000000000000003,52715.82264103456
+30,650,0.4,53497.18364855977
+30,650,0.45,53977.21819774925
+30,650,0.5,54139.149852342496
+30,650,0.55,53977.21819774923
+30,650,0.6000000000000001,53497.18364855977
+30,650,0.65,52715.82264103456
+30,650,0.7000000000000001,51659.49413391458
+30,650,0.75,50361.99986264418
+30,650,0.8,48862.048603197196
+30,650,0.8500000000000001,47200.653750952486
+30,650,0.9,45418.74987612626
+30,650,0.9500000000000001,43555.2291651991
+30,650,1.0,41645.499886417296
+30,700,0.0,41449.05884921721
+30,700,0.05,43349.779971023636
+30,700,0.1,45204.51048991811
+30,700,0.15000000000000002,46978.00915778761
+30,700,0.2,48631.567241861354
+30,700,0.25,50124.44325951849
+30,700,0.30000000000000004,51415.817274792345
+30,700,0.35000000000000003,52467.163100274964
+30,700,0.4,53244.83844267034
+30,700,0.45,53722.60867794854
+30,700,0.5,53883.776503982386
+30,700,0.55,53722.60867794853
+30,700,0.6000000000000001,53244.83844267034
+30,700,0.65,52467.163100274964
+30,700,0.7000000000000001,51415.817274792345
+30,700,0.75,50124.44325951849
+30,700,0.8,48631.567241861354
+30,700,0.8500000000000001,46978.00915778761
+30,700,0.9,45204.51048991811
+30,700,0.9500000000000001,43349.77997102363
+30,700,1.0,41449.05884921721
+40,-400,0.0,54958.43935712518
+40,-400,0.05,57478.65741292256
+40,-400,0.1,59937.89527203251
+40,-400,0.15000000000000002,62289.42560092654
+40,-400,0.2,64481.92343345012
+40,-400,0.25,66461.36852489557
+40,-400,0.30000000000000004,68173.63660712093
+40,-400,0.35000000000000003,69567.64475585466
+40,-400,0.4,70598.78573543749
+40,-400,0.45,71232.27434123901
+40,-400,0.5,71445.97116426274
+40,-400,0.55,71232.27434123901
+40,-400,0.6000000000000001,70598.78573543749
+40,-400,0.65,69567.64475585466
+40,-400,0.7000000000000001,68173.63660712093
+40,-400,0.75,66461.36852489557
+40,-400,0.8,64481.92343345012
+40,-400,0.8500000000000001,62289.42560092654
+40,-400,0.9,59937.89527203251
+40,-400,0.9500000000000001,57478.657412922556
+40,-400,1.0,54958.43935712518
+40,-350,0.0,55226.52930520872
+40,-350,0.05,57759.041107619756
+40,-350,0.1,60230.27524896925
+40,-350,0.15000000000000002,62593.27645751643
+40,-350,0.2,64796.46940141818
+40,-350,0.25,66785.570322578
+40,-350,0.30000000000000004,68506.19093203373
+40,-350,0.35000000000000003,69906.99912051737
+40,-350,0.4,70943.17005609817
+40,-350,0.45,71579.74885022068
+40,-350,0.5,71794.48809677134
+40,-350,0.55,71579.74885022067
+40,-350,0.6000000000000001,70943.17005609817
+40,-350,0.65,69906.99912051737
+40,-350,0.7000000000000001,68506.19093203373
+40,-350,0.75,66785.570322578
+40,-350,0.8,64796.46940141818
+40,-350,0.8500000000000001,62593.27645751643
+40,-350,0.9,60230.27524896925
+40,-350,0.9500000000000001,57759.04110761974
+40,-350,1.0,55226.52930520872
+40,-300,0.0,55497.2475861166
+40,-300,0.05,58042.17366206887
+40,-300,0.1,60525.521696268115
+40,-300,0.15000000000000002,62900.106244072886
+40,-300,0.2,65114.09915338591
+40,-300,0.25,67112.9505692573
+40,-300,0.30000000000000004,68842.00559346525
+40,-300,0.35000000000000003,70249.68048875521
+40,-300,0.4,71290.93069362806
+40,-300,0.45,71930.62997203549
+40,-300,0.5,72146.42186195159
+40,-300,0.55,71930.62997203546
+40,-300,0.6000000000000001,71290.93069362806
+40,-300,0.65,70249.68048875521
+40,-300,0.7000000000000001,68842.00559346525
+40,-300,0.75,67112.9505692573
+40,-300,0.8,65114.09915338591
+40,-300,0.8500000000000001,62900.106244072886
+40,-300,0.9,60525.521696268115
+40,-300,0.9500000000000001,58042.17366206885
+40,-300,1.0,55497.2475861166
+40,-250,0.0,55770.63304220585
+40,-250,0.05,58328.09569981305
+40,-250,0.1,60823.67697556009
+40,-250,0.15000000000000002,63209.95898419148
+40,-250,0.2,65434.858262515896
+40,-250,0.25,67443.55623708616
+40,-250,0.30000000000000004,69181.12877372863
+40,-250,0.35000000000000003,70595.73802810868
+40,-250,0.4,71642.11754433559
+40,-250,0.45,72284.96805071547
+40,-250,0.5,72501.82295486762
+40,-250,0.55,72284.96805071546
+40,-250,0.6000000000000001,71642.11754433559
+40,-250,0.65,70595.73802810868
+40,-250,0.7000000000000001,69181.12877372863
+40,-250,0.75,67443.55623708616
+40,-250,0.8,65434.858262515896
+40,-250,0.8500000000000001,63209.95898419148
+40,-250,0.9,60823.67697556009
+40,-250,0.9500000000000001,58328.09569981304
+40,-250,1.0,55770.63304220585
+40,-200,0.0,56046.72528498905
+40,-200,0.05,58616.84864882202
+40,-200,0.1,61124.784287320275
+40,-200,0.15000000000000002,63522.87957322212
+40,-200,0.2,65758.79320440952
+40,-200,0.25,67777.43522835885
+40,-200,0.30000000000000004,69523.60960924214
+40,-200,0.35000000000000003,70945.22187973298
+40,-200,0.4,71996.78149257485
+40,-200,0.45,72642.81442720415
+40,-200,0.5,72860.74287048577
+40,-200,0.55,72642.81442720414
+40,-200,0.6000000000000001,71996.78149257485
+40,-200,0.65,70945.22187973298
+40,-200,0.7000000000000001,69523.60960924214
+40,-200,0.75,67777.43522835885
+40,-200,0.8,65758.79320440952
+40,-200,0.8500000000000001,63522.87957322212
+40,-200,0.9,61124.784287320275
+40,-200,0.9500000000000001,58616.84864882201
+40,-200,1.0,56046.72528498905
+40,-150,0.0,56325.56471426761
+40,-150,0.05,58908.47476150274
+40,-150,0.1,61428.88769173482
+40,-150,0.15000000000000002,63838.91379995457
+40,-150,0.2,66085.95137955586
+40,-150,0.25,68114.6363986492
+40,-150,0.30000000000000004,69869.49821426324
+40,-150,0.35000000000000003,71298.18318261723
+40,-150,0.4,72354.974435324
+40,-150,0.45,73004.22146415543
+40,-150,0.5,73223.23412854789
+40,-150,0.55,73004.22146415542
+40,-150,0.6000000000000001,72354.974435324
+40,-150,0.65,71298.18318261723
+40,-150,0.7000000000000001,69869.49821426324
+40,-150,0.75,68114.6363986492
+40,-150,0.8,66085.95137955586
+40,-150,0.8500000000000001,63838.91379995457
+40,-150,0.9,61428.88769173482
+40,-150,0.9500000000000001,58908.47476150272
+40,-150,1.0,56325.56471426761
+40,-100,0.0,56607.192537838935
+40,-100,0.05,59203.01713531024
+40,-100,0.1,61736.03213019348
+40,-100,0.15000000000000002,64158.10836895434
+40,-100,0.2,66416.38113645362
+40,-100,0.25,68455.20958064245
+40,-100,0.30000000000000004,70218.84570533456
+40,-100,0.35000000000000003,71654.67409853032
+40,-100,0.4,72716.7493075006
+40,-100,0.45,73369.24257147619
+40,-100,0.5,73589.35029919063
+40,-100,0.55,73369.24257147619
+40,-100,0.6000000000000001,72716.7493075006
+40,-100,0.65,71654.67409853032
+40,-100,0.7000000000000001,70218.84570533456
+40,-100,0.75,68455.20958064245
+40,-100,0.8,66416.38113645362
+40,-100,0.8500000000000001,64158.10836895434
+40,-100,0.9,61736.03213019348
+40,-100,0.9500000000000001,59203.01713531023
+40,-100,1.0,56607.192537838935
+40,-50,0.0,56891.65079179793
+40,-50,0.05,59500.51973398015
+40,-50,0.1,62046.26344743064
+40,-50,0.15000000000000002,64480.510923572205
+40,-50,0.2,66750.13179543079
+40,-50,0.25,68799.20560868588
+40,-50,0.30000000000000004,70571.70422646689
+40,-50,0.35000000000000003,72014.7478377189
+40,-50,0.4,73082.16010804083
+40,-50,0.45,73737.93223263939
+40,-50,0.5,73959.14602933731
+40,-50,0.55,73737.93223263937
+40,-50,0.6000000000000001,73082.16010804083
+40,-50,0.65,72014.7478377189
+40,-50,0.7000000000000001,70571.70422646689
+40,-50,0.75,68799.20560868588
+40,-50,0.8,66750.13179543079
+40,-50,0.8500000000000001,64480.510923572205
+40,-50,0.9,62046.26344743064
+40,-50,0.9500000000000001,59500.51973398014
+40,-50,1.0,56891.65079179793
+40,0,0.0,57178.98236145347
+40,0,0.05,59801.02740940428
+40,0,0.1,62359.628414336854
+40,0,0.15000000000000002,64806.17006965085
+40,0,0.2,67087.25367318549
+40,0,0.25,69146.67634408327
+40,0,0.30000000000000004,70928.12697508541
+40,0,0.35000000000000003,72378.45868538416
+40,0,0.4,73451.2619267683
+40,0,0.45,74110.34603179414
+40,0,0.5,74332.67706988951
+40,0,0.55,74110.34603179412
+40,0,0.6000000000000001,73451.2619267683
+40,0,0.65,72378.45868538416
+40,0,0.7000000000000001,70928.12697508541
+40,0,0.75,69146.67634408327
+40,0,0.8,67087.25367318549
+40,0,0.8500000000000001,64806.17006965085
+40,0,0.9,62359.628414336854
+40,0,0.9500000000000001,59801.02740940427
+40,0,1.0,57178.98236145347
+40,50,0.0,56891.65079179793
+40,50,0.05,59500.51973398015
+40,50,0.1,62046.26344743064
+40,50,0.15000000000000002,64480.510923572205
+40,50,0.2,66750.13179543079
+40,50,0.25,68799.20560868588
+40,50,0.30000000000000004,70571.70422646689
+40,50,0.35000000000000003,72014.7478377189
+40,50,0.4,73082.16010804083
+40,50,0.45,73737.93223263939
+40,50,0.5,73959.14602933731
+40,50,0.55,73737.93223263937
+40,50,0.6000000000000001,73082.16010804083
+40,50,0.65,72014.7478377189
+40,50,0.7000000000000001,70571.70422646689
+40,50,0.75,68799.20560868588
+40,50,0.8,66750.13179543079
+40,50,0.8500000000000001,64480.510923572205
+40,50,0.9,62046.26344743064
+40,50,0.9500000000000001,59500.51973398014
+40,50,1.0,56891.65079179793
+40,100,0.0,56607.192537838935
+40,100,0.05,59203.01713531024
+40,100,0.1,61736.03213019348
+40,100,0.15000000000000002,64158.10836895434
+40,100,0.2,66416.38113645362
+40,100,0.25,68455.20958064245
+40,100,0.30000000000000004,70218.84570533456
+40,100,0.35000000000000003,71654.67409853032
+40,100,0.4,72716.7493075006
+40,100,0.45,73369.24257147619
+40,100,0.5,73589.35029919063
+40,100,0.55,73369.24257147619
+40,100,0.6000000000000001,72716.7493075006
+40,100,0.65,71654.67409853032
+40,100,0.7000000000000001,70218.84570533456
+40,100,0.75,68455.20958064245
+40,100,0.8,66416.38113645362
+40,100,0.8500000000000001,64158.10836895434
+40,100,0.9,61736.03213019348
+40,100,0.9500000000000001,59203.01713531023
+40,100,1.0,56607.192537838935
+40,150,0.0,56325.56471426761
+40,150,0.05,58908.47476150274
+40,150,0.1,61428.88769173482
+40,150,0.15000000000000002,63838.91379995457
+40,150,0.2,66085.95137955586
+40,150,0.25,68114.6363986492
+40,150,0.30000000000000004,69869.49821426324
+40,150,0.35000000000000003,71298.18318261723
+40,150,0.4,72354.974435324
+40,150,0.45,73004.22146415543
+40,150,0.5,73223.23412854789
+40,150,0.55,73004.22146415542
+40,150,0.6000000000000001,72354.974435324
+40,150,0.65,71298.18318261723
+40,150,0.7000000000000001,69869.49821426324
+40,150,0.75,68114.6363986492
+40,150,0.8,66085.95137955586
+40,150,0.8500000000000001,63838.91379995457
+40,150,0.9,61428.88769173482
+40,150,0.9500000000000001,58908.47476150272
+40,150,1.0,56325.56471426761
+40,200,0.0,56046.72528498905
+40,200,0.05,58616.84864882202
+40,200,0.1,61124.784287320275
+40,200,0.15000000000000002,63522.87957322212
+40,200,0.2,65758.79320440952
+40,200,0.25,67777.43522835885
+40,200,0.30000000000000004,69523.60960924214
+40,200,0.35000000000000003,70945.22187973298
+40,200,0.4,71996.78149257485
+40,200,0.45,72642.81442720415
+40,200,0.5,72860.74287048577
+40,200,0.55,72642.81442720414
+40,200,0.6000000000000001,71996.78149257485
+40,200,0.65,70945.22187973298
+40,200,0.7000000000000001,69523.60960924214
+40,200,0.75,67777.43522835885
+40,200,0.8,65758.79320440952
+40,200,0.8500000000000001,63522.87957322212
+40,200,0.9,61124.784287320275
+40,200,0.9500000000000001,58616.84864882201
+40,200,1.0,56046.72528498905
+40,250,0.0,55770.63304220585
+40,250,0.05,58328.09569981305
+40,250,0.1,60823.67697556009
+40,250,0.15000000000000002,63209.95898419148
+40,250,0.2,65434.858262515896
+40,250,0.25,67443.55623708616
+40,250,0.30000000000000004,69181.12877372863
+40,250,0.35000000000000003,70595.73802810868
+40,250,0.4,71642.11754433559
+40,250,0.45,72284.96805071547
+40,250,0.5,72501.82295486762
+40,250,0.55,72284.96805071546
+40,250,0.6000000000000001,71642.11754433559
+40,250,0.65,70595.73802810868
+40,250,0.7000000000000001,69181.12877372863
+40,250,0.75,67443.55623708616
+40,250,0.8,65434.858262515896
+40,250,0.8500000000000001,63209.95898419148
+40,250,0.9,60823.67697556009
+40,250,0.9500000000000001,58328.09569981304
+40,250,1.0,55770.63304220585
+40,300,0.0,55497.2475861166
+40,300,0.05,58042.17366206887
+40,300,0.1,60525.521696268115
+40,300,0.15000000000000002,62900.106244072886
+40,300,0.2,65114.09915338591
+40,300,0.25,67112.9505692573
+40,300,0.30000000000000004,68842.00559346525
+40,300,0.35000000000000003,70249.68048875521
+40,300,0.4,71290.93069362806
+40,300,0.45,71930.62997203549
+40,300,0.5,72146.42186195159
+40,300,0.55,71930.62997203546
+40,300,0.6000000000000001,71290.93069362806
+40,300,0.65,70249.68048875521
+40,300,0.7000000000000001,68842.00559346525
+40,300,0.75,67112.9505692573
+40,300,0.8,65114.09915338591
+40,300,0.8500000000000001,62900.106244072886
+40,300,0.9,60525.521696268115
+40,300,0.9500000000000001,58042.17366206885
+40,300,1.0,55497.2475861166
+40,350,0.0,55226.52930520872
+40,350,0.05,57759.041107619756
+40,350,0.1,60230.27524896925
+40,350,0.15000000000000002,62593.27645751643
+40,350,0.2,64796.46940141818
+40,350,0.25,66785.570322578
+40,350,0.30000000000000004,68506.19093203373
+40,350,0.35000000000000003,69906.99912051737
+40,350,0.4,70943.17005609817
+40,350,0.45,71579.74885022068
+40,350,0.5,71794.48809677134
+40,350,0.55,71579.74885022067
+40,350,0.6000000000000001,70943.17005609817
+40,350,0.65,69906.99912051737
+40,350,0.7000000000000001,68506.19093203373
+40,350,0.75,66785.570322578
+40,350,0.8,64796.46940141818
+40,350,0.8500000000000001,62593.27645751643
+40,350,0.9,60230.27524896925
+40,350,0.9500000000000001,57759.04110761974
+40,350,1.0,55226.52930520872
+40,400,0.0,54958.43935712518
+40,400,0.05,57478.65741292256
+40,400,0.1,59937.89527203251
+40,400,0.15000000000000002,62289.42560092654
+40,400,0.2,64481.92343345012
+40,400,0.25,66461.36852489557
+40,400,0.30000000000000004,68173.63660712093
+40,400,0.35000000000000003,69567.64475585466
+40,400,0.4,70598.78573543749
+40,400,0.45,71232.27434123901
+40,400,0.5,71445.97116426274
+40,400,0.55,71232.27434123901
+40,400,0.6000000000000001,70598.78573543749
+40,400,0.65,69567.64475585466
+40,400,0.7000000000000001,68173.63660712093
+40,400,0.75,66461.36852489557
+40,400,0.8,64481.92343345012
+40,400,0.8500000000000001,62289.42560092654
+40,400,0.9,59937.89527203251
+40,400,0.9500000000000001,57478.657412922556
+40,400,1.0,54958.43935712518
+40,450,0.0,54692.93965008594
+40,450,0.05,57200.98273943019
+40,450,0.1,59648.34022240916
+40,450,0.15000000000000002,61988.51050140516
+40,450,0.2,64170.41655696003
+40,450,0.25,66140.29911173185
+40,450,0.30000000000000004,67844.29536747301
+40,450,0.35000000000000003,69231.56917732398
+40,450,0.4,70257.7287995175
+40,450,0.45,70888.15707389005
+40,450,0.5,71100.82154511171
+40,450,0.55,70888.15707389003
+40,450,0.6000000000000001,70257.7287995175
+40,450,0.65,69231.56917732398
+40,450,0.7000000000000001,67844.29536747301
+40,450,0.75,66140.29911173185
+40,450,0.8,64170.41655696003
+40,450,0.8500000000000001,61988.51050140516
+40,450,0.9,59648.34022240916
+40,450,0.9500000000000001,57200.982739430176
+40,450,1.0,54692.93965008594
+40,500,0.0,54429.99282484513
+40,500,0.05,56925.97801472139
+40,500,0.1,59361.569355955275
+40,500,0.15000000000000002,61690.48881630224
+40,500,0.2,63861.904938897715
+40,500,0.25,65822.31690446389
+40,500,0.30000000000000004,67518.120870514
+40,500,0.35000000000000003,68898.72509474069
+40,500,0.4,69919.95125721212
+40,500,0.45,70547.3486264194
+40,500,0.5,70758.99067229868
+40,500,0.55,70547.34862641939
+40,500,0.6000000000000001,69919.95125721212
+40,500,0.65,68898.72509474069
+40,500,0.7000000000000001,67518.120870514
+40,500,0.75,65822.31690446389
+40,500,0.8,63861.904938897715
+40,500,0.8500000000000001,61690.48881630224
+40,500,0.9,59361.569355955275
+40,500,0.9500000000000001,56925.978014721375
+40,500,1.0,54429.99282484513
+40,550,0.0,54169.56223716646
+40,550,0.05,56653.60491417249
+40,550,0.1,59077.542708319124
+40,550,0.15000000000000002,61395.31901335344
+40,550,0.2,63556.3455851231
+40,550,0.25,65507.37758913153
+40,550,0.30000000000000004,67195.06766060724
+40,550,0.35000000000000003,68569.06612299551
+40,550,0.4,69585.40603588575
+40,550,0.45,70209.80150380498
+40,550,0.5,70420.4309083164
+40,550,0.55,70209.80150380496
+40,550,0.6000000000000001,69585.40603588575
+40,550,0.65,68569.06612299551
+40,550,0.7000000000000001,67195.06766060724
+40,550,0.75,65507.37758913153
+40,550,0.8,63556.3455851231
+40,550,0.8500000000000001,61395.31901335344
+40,550,0.9,59077.542708319124
+40,550,0.9500000000000001,56653.60491417247
+40,550,1.0,54169.56223716646
+40,600,0.0,53911.611940799
+40,600,0.05,56383.82584315261
+40,600,0.1,58796.22107637475
+40,600,0.15000000000000002,61102.960351385074
+40,600,0.2,63253.69632043203
+40,600,0.25,65195.43769584994
+40,600,0.30000000000000004,66875.09114793767
+40,600,0.35000000000000003,68242.54676050505
+40,600,0.4,69254.04695952439
+40,600,0.45,69875.46911569161
+40,600,0.5,70085.09552303869
+40,600,0.55,69875.46911569161
+40,600,0.6000000000000001,69254.04695952439
+40,600,0.65,68242.54676050505
+40,600,0.7000000000000001,66875.09114793767
+40,600,0.75,65195.43769584994
+40,600,0.8,63253.69632043203
+40,600,0.8500000000000001,61102.960351385074
+40,600,0.9,58796.22107637475
+40,600,0.9500000000000001,56383.8258431526
+40,600,1.0,53911.611940799
+40,650,0.0,53656.106670937384
+40,650,0.05,56116.603919725356
+40,650,0.1,58517.566000183404
+40,650,0.15000000000000002,60813.3728615681
+40,650,0.2,62953.915769150364
+40,650,0.25,64886.45457880801
+40,650,0.30000000000000004,66558.14758799486
+40,650,0.35000000000000003,67919.12236827517
+40,650,0.4,68925.82872748874
+40,650,0.45,69544.30575495373
+40,650,0.5,69752.9386722186
+40,650,0.55,69544.30575495373
+40,650,0.6000000000000001,68925.82872748874
+40,650,0.65,67919.12236827517
+40,650,0.7000000000000001,66558.14758799486
+40,650,0.75,64886.45457880801
+40,650,0.8,62953.915769150364
+40,650,0.8500000000000001,60813.3728615681
+40,650,0.9,58517.566000183404
+40,650,0.9500000000000001,56116.60391972534
+40,650,1.0,53656.106670937384
+40,700,0.0,53403.01182814994
+40,700,0.05,55851.90295783985
+40,700,0.1,58241.53974546555
+40,700,0.15000000000000002,60526.51732920221
+40,700,0.2,62656.963336277004
+40,700,0.25,64580.38639683249
+40,700,0.30000000000000004,66244.19406163637
+40,700,0.35000000000000003,67598.74914955688
+40,700,0.4,68600.7068938685
+40,700,0.45,69216.26657686433
+40,700,0.5,69423.91537659492
+40,700,0.55,69216.26657686432
+40,700,0.6000000000000001,68600.7068938685
+40,700,0.65,67598.74914955688
+40,700,0.7000000000000001,66244.19406163637
+40,700,0.75,64580.38639683249
+40,700,0.8,62656.963336277004
+40,700,0.8500000000000001,60526.51732920221
+40,700,0.9,58241.53974546555
+40,700,0.9500000000000001,55851.90295783984
+40,700,1.0,53403.01182814994
+50,-400,0.0,69706.66799966262
+50,-400,0.05,72903.19259819905
+50,-400,0.1,76022.37281842403
+50,-400,0.15000000000000002,79004.94193510151
+50,-400,0.2,81785.80180465833
+50,-400,0.25,84296.43572052226
+50,-400,0.30000000000000004,86468.19503774944
+50,-400,0.35000000000000003,88236.2886071679
+50,-400,0.4,89544.1387347445
+50,-400,0.45,90347.62552299246
+50,-400,0.5,90618.66839956143
+50,-400,0.55,90347.62552299244
+50,-400,0.6000000000000001,89544.1387347445
+50,-400,0.65,88236.2886071679
+50,-400,0.7000000000000001,86468.19503774944
+50,-400,0.75,84296.43572052226
+50,-400,0.8,81785.80180465833
+50,-400,0.8500000000000001,79004.94193510151
+50,-400,0.9,76022.37281842403
+50,-400,0.9500000000000001,72903.19259819905
+50,-400,1.0,69706.66799966262
+50,-350,0.0,70046.70052649025
+50,-350,0.05,73258.81792794638
+50,-350,0.1,76393.21366144074
+50,-350,0.15000000000000002,79390.33189576055
+50,-350,0.2,82184.75693541276
+50,-350,0.25,84707.63784598824
+50,-350,0.30000000000000004,86889.99111110432
+50,-350,0.35000000000000003,88666.70952720288
+50,-350,0.4,89980.93941149935
+50,-350,0.45,90788.34564749488
+50,-350,0.5,91060.71068443735
+50,-350,0.55,90788.34564749485
+50,-350,0.6000000000000001,89980.93941149935
+50,-350,0.65,88666.70952720288
+50,-350,0.7000000000000001,86889.99111110432
+50,-350,0.75,84707.63784598824
+50,-350,0.8,82184.75693541276
+50,-350,0.8500000000000001,79390.33189576055
+50,-350,0.9,76393.21366144074
+50,-350,0.9500000000000001,73258.81792794637
+50,-350,1.0,70046.70052649025
+50,-300,0.0,70390.06670554167
+50,-300,0.05,73617.92978053435
+50,-300,0.1,76767.6901989968
+50,-300,0.15000000000000002,79779.5001893672
+50,-300,0.2,82587.6233909785
+50,-300,0.25,85122.8713648411
+50,-300,0.30000000000000004,87315.92244008032
+50,-300,0.35000000000000003,89101.35026017933
+50,-300,0.4,90422.02244783021
+50,-300,0.45,91233.38655753159
+50,-300,0.5,91507.08671720416
+50,-300,0.55,91233.38655753157
+50,-300,0.6000000000000001,90422.02244783021
+50,-300,0.65,89101.35026017933
+50,-300,0.7000000000000001,87315.92244008032
+50,-300,0.75,85122.8713648411
+50,-300,0.8,82587.6233909785
+50,-300,0.8500000000000001,79779.5001893672
+50,-300,0.9,76767.6901989968
+50,-300,0.9500000000000001,73617.92978053434
+50,-300,1.0,70390.06670554167
+50,-250,0.0,70736.8158026133
+50,-250,0.05,73980.57968093107
+50,-250,0.1,77145.85616056823
+50,-250,0.15000000000000002,80172.50265335424
+50,-250,0.2,82994.45897418531
+50,-250,0.25,85542.1958543231
+50,-250,0.30000000000000004,87746.0501368295
+50,-250,0.35000000000000003,89540.27316786497
+50,-250,0.4,90867.45112983925
+50,-250,0.45,91682.8121070761
+50,-250,0.5,91957.8605433973
+50,-250,0.55,91682.81210707608
+50,-250,0.6000000000000001,90867.45112983925
+50,-250,0.65,89540.27316786497
+50,-250,0.7000000000000001,87746.0501368295
+50,-250,0.75,85542.1958543231
+50,-250,0.8,82994.45897418531
+50,-250,0.8500000000000001,80172.50265335424
+50,-250,0.9,77145.85616056823
+50,-250,0.9500000000000001,73980.57968093106
+50,-250,1.0,70736.8158026133
+50,-200,0.0,71086.99805906188
+50,-200,0.05,74346.82017440101
+50,-200,0.1,77527.76633958094
+50,-200,0.15000000000000002,80569.39623084609
+50,-200,0.2,83405.32263247334
+50,-200,0.25,85965.67207142367
+50,-200,0.30000000000000004,88180.43652364548
+50,-200,0.35000000000000003,89983.54184691381
+50,-200,0.4,91317.28999681864
+50,-200,0.45,92136.68741453686
+50,-200,0.5,92413.09747678046
+50,-200,0.55,92136.68741453685
+50,-200,0.6000000000000001,91317.28999681864
+50,-200,0.65,89983.54184691381
+50,-200,0.7000000000000001,88180.43652364548
+50,-200,0.75,85965.67207142367
+50,-200,0.8,83405.32263247334
+50,-200,0.8500000000000001,80569.39623084609
+50,-200,0.9,77527.76633958094
+50,-200,0.9500000000000001,74346.820174401
+50,-200,1.0,71086.99805906188
+50,-150,0.0,71440.66471607216
+50,-150,0.05,74716.70485188562
+50,-150,0.1,77913.47661987737
+50,-150,0.15000000000000002,80970.23899816372
+50,-150,0.2,83820.27448636625
+50,-150,0.25,86393.3619822268
+50,-150,0.30000000000000004,88619.14516306661
+50,-150,0.35000000000000003,90431.22115958501
+50,-150,0.4,91771.60487242472
+50,-150,0.45,92595.07889421117
+50,-150,0.5,92872.8641308938
+50,-150,0.55,92595.07889421115
+50,-150,0.6000000000000001,91771.60487242472
+50,-150,0.65,90431.22115958501
+50,-150,0.7000000000000001,88619.14516306661
+50,-150,0.75,86393.3619822268
+50,-150,0.8,83820.27448636625
+50,-150,0.8500000000000001,80970.23899816372
+50,-150,0.9,77913.47661987737
+50,-150,0.9500000000000001,74716.7048518856
+50,-150,1.0,71440.66471607216
+50,-100,0.0,71797.8680396525
+50,-100,0.05,75090.28837614504
+50,-100,0.1,78303.04400297675
+50,-100,0.15000000000000002,81375.09019315455
+50,-100,0.2,84239.37585879807
+50,-100,0.25,86825.32879213792
+50,-100,0.30000000000000004,89062.24088888193
+50,-100,0.35000000000000003,90883.37726538294
+50,-100,0.4,92230.46289678683
+50,-100,0.45,93058.05428868224
+50,-100,0.5,93337.22845154826
+50,-100,0.55,93058.05428868221
+50,-100,0.6000000000000001,92230.46289678683
+50,-100,0.65,90883.37726538294
+50,-100,0.7000000000000001,89062.24088888193
+50,-100,0.75,86825.32879213792
+50,-100,0.8,84239.37585879807
+50,-100,0.8500000000000001,81375.09019315455
+50,-100,0.9,78303.04400297675
+50,-100,0.9500000000000001,75090.28837614502
+50,-100,1.0,71797.8680396525
+50,-50,0.0,72158.66134638443
+50,-50,0.05,75467.62650868848
+50,-50,0.1,78696.52663615753
+50,-50,0.15000000000000002,81784.01024437643
+50,-50,0.2,84662.6893053247
+50,-50,0.25,87261.63697702304
+50,-50,0.30000000000000004,89509.7898380723
+50,-50,0.35000000000000003,91340.0776536512
+50,-50,0.4,92693.93255958473
+50,-50,0.45,93525.68270219318
+50,-50,0.5,93806.25975029977
+50,-50,0.55,93525.68270219317
+50,-50,0.6000000000000001,92693.93255958473
+50,-50,0.65,91340.0776536512
+50,-50,0.7000000000000001,89509.7898380723
+50,-50,0.75,87261.63697702304
+50,-50,0.8,84662.6893053247
+50,-50,0.8500000000000001,81784.01024437643
+50,-50,0.9,78696.52663615753
+50,-50,0.9500000000000001,75467.62650868847
+50,-50,1.0,72158.66134638443
+50,0,0.0,72523.09902995202
+50,0,0.05,75848.77613752024
+50,0,0.1,79093.98384139065
+50,0,0.15000000000000002,82197.06080116621
+50,0,0.2,85090.27864525057
+50,0,0.25,87702.35231529083
+50,0,0.30000000000000004,89961.85948371912
+50,0,0.35000000000000003,91801.39117715447
+50,0,0.4,93162.08373412811
+50,0,0.45,93998.03463503256
+50,0,0.5,94280.02873893765
+50,0,0.55,93998.03463503254
+50,0,0.6000000000000001,93162.08373412811
+50,0,0.65,91801.39117715447
+50,0,0.7000000000000001,89961.85948371912
+50,0,0.75,87702.35231529083
+50,0,0.8,85090.27864525057
+50,0,0.8500000000000001,82197.06080116621
+50,0,0.9,79093.98384139065
+50,0,0.9500000000000001,75848.77613752022
+50,0,1.0,72523.09902995202
+50,50,0.0,72158.66134638443
+50,50,0.05,75467.62650868848
+50,50,0.1,78696.52663615753
+50,50,0.15000000000000002,81784.01024437643
+50,50,0.2,84662.6893053247
+50,50,0.25,87261.63697702304
+50,50,0.30000000000000004,89509.7898380723
+50,50,0.35000000000000003,91340.0776536512
+50,50,0.4,92693.93255958473
+50,50,0.45,93525.68270219318
+50,50,0.5,93806.25975029977
+50,50,0.55,93525.68270219317
+50,50,0.6000000000000001,92693.93255958473
+50,50,0.65,91340.0776536512
+50,50,0.7000000000000001,89509.7898380723
+50,50,0.75,87261.63697702304
+50,50,0.8,84662.6893053247
+50,50,0.8500000000000001,81784.01024437643
+50,50,0.9,78696.52663615753
+50,50,0.9500000000000001,75467.62650868847
+50,50,1.0,72158.66134638443
+50,100,0.0,71797.8680396525
+50,100,0.05,75090.28837614504
+50,100,0.1,78303.04400297675
+50,100,0.15000000000000002,81375.09019315455
+50,100,0.2,84239.37585879807
+50,100,0.25,86825.32879213792
+50,100,0.30000000000000004,89062.24088888193
+50,100,0.35000000000000003,90883.37726538294
+50,100,0.4,92230.46289678683
+50,100,0.45,93058.05428868224
+50,100,0.5,93337.22845154826
+50,100,0.55,93058.05428868221
+50,100,0.6000000000000001,92230.46289678683
+50,100,0.65,90883.37726538294
+50,100,0.7000000000000001,89062.24088888193
+50,100,0.75,86825.32879213792
+50,100,0.8,84239.37585879807
+50,100,0.8500000000000001,81375.09019315455
+50,100,0.9,78303.04400297675
+50,100,0.9500000000000001,75090.28837614502
+50,100,1.0,71797.8680396525
+50,150,0.0,71440.66471607216
+50,150,0.05,74716.70485188562
+50,150,0.1,77913.47661987737
+50,150,0.15000000000000002,80970.23899816372
+50,150,0.2,83820.27448636625
+50,150,0.25,86393.3619822268
+50,150,0.30000000000000004,88619.14516306661
+50,150,0.35000000000000003,90431.22115958501
+50,150,0.4,91771.60487242472
+50,150,0.45,92595.07889421117
+50,150,0.5,92872.8641308938
+50,150,0.55,92595.07889421115
+50,150,0.6000000000000001,91771.60487242472
+50,150,0.65,90431.22115958501
+50,150,0.7000000000000001,88619.14516306661
+50,150,0.75,86393.3619822268
+50,150,0.8,83820.27448636625
+50,150,0.8500000000000001,80970.23899816372
+50,150,0.9,77913.47661987737
+50,150,0.9500000000000001,74716.7048518856
+50,150,1.0,71440.66471607216
+50,200,0.0,71086.99805906188
+50,200,0.05,74346.82017440101
+50,200,0.1,77527.76633958094
+50,200,0.15000000000000002,80569.39623084609
+50,200,0.2,83405.32263247334
+50,200,0.25,85965.67207142367
+50,200,0.30000000000000004,88180.43652364548
+50,200,0.35000000000000003,89983.54184691381
+50,200,0.4,91317.28999681864
+50,200,0.45,92136.68741453686
+50,200,0.5,92413.09747678046
+50,200,0.55,92136.68741453685
+50,200,0.6000000000000001,91317.28999681864
+50,200,0.65,89983.54184691381
+50,200,0.7000000000000001,88180.43652364548
+50,200,0.75,85965.67207142367
+50,200,0.8,83405.32263247334
+50,200,0.8500000000000001,80569.39623084609
+50,200,0.9,77527.76633958094
+50,200,0.9500000000000001,74346.820174401
+50,200,1.0,71086.99805906188
+50,250,0.0,70736.8158026133
+50,250,0.05,73980.57968093107
+50,250,0.1,77145.85616056823
+50,250,0.15000000000000002,80172.50265335424
+50,250,0.2,82994.45897418531
+50,250,0.25,85542.1958543231
+50,250,0.30000000000000004,87746.0501368295
+50,250,0.35000000000000003,89540.27316786497
+50,250,0.4,90867.45112983925
+50,250,0.45,91682.8121070761
+50,250,0.5,91957.8605433973
+50,250,0.55,91682.81210707608
+50,250,0.6000000000000001,90867.45112983925
+50,250,0.65,89540.27316786497
+50,250,0.7000000000000001,87746.0501368295
+50,250,0.75,85542.1958543231
+50,250,0.8,82994.45897418531
+50,250,0.8500000000000001,80172.50265335424
+50,250,0.9,77145.85616056823
+50,250,0.9500000000000001,73980.57968093106
+50,250,1.0,70736.8158026133
+50,300,0.0,70390.06670554167
+50,300,0.05,73617.92978053435
+50,300,0.1,76767.6901989968
+50,300,0.15000000000000002,79779.5001893672
+50,300,0.2,82587.6233909785
+50,300,0.25,85122.8713648411
+50,300,0.30000000000000004,87315.92244008032
+50,300,0.35000000000000003,89101.35026017933
+50,300,0.4,90422.02244783021
+50,300,0.45,91233.38655753159
+50,300,0.5,91507.08671720416
+50,300,0.55,91233.38655753157
+50,300,0.6000000000000001,90422.02244783021
+50,300,0.65,89101.35026017933
+50,300,0.7000000000000001,87315.92244008032
+50,300,0.75,85122.8713648411
+50,300,0.8,82587.6233909785
+50,300,0.8500000000000001,79779.5001893672
+50,300,0.9,76767.6901989968
+50,300,0.9500000000000001,73617.92978053434
+50,300,1.0,70390.06670554167
+50,350,0.0,70046.70052649025
+50,350,0.05,73258.81792794638
+50,350,0.1,76393.21366144074
+50,350,0.15000000000000002,79390.33189576055
+50,350,0.2,82184.75693541276
+50,350,0.25,84707.63784598824
+50,350,0.30000000000000004,86889.99111110432
+50,350,0.35000000000000003,88666.70952720288
+50,350,0.4,89980.93941149935
+50,350,0.45,90788.34564749488
+50,350,0.5,91060.71068443735
+50,350,0.55,90788.34564749485
+50,350,0.6000000000000001,89980.93941149935
+50,350,0.65,88666.70952720288
+50,350,0.7000000000000001,86889.99111110432
+50,350,0.75,84707.63784598824
+50,350,0.8,82184.75693541276
+50,350,0.8500000000000001,79390.33189576055
+50,350,0.9,76393.21366144074
+50,350,0.9500000000000001,73258.81792794637
+50,350,1.0,70046.70052649025
+50,400,0.0,69706.66799966262
+50,400,0.05,72903.19259819905
+50,400,0.1,76022.37281842403
+50,400,0.15000000000000002,79004.94193510151
+50,400,0.2,81785.80180465833
+50,400,0.25,84296.43572052226
+50,400,0.30000000000000004,86468.19503774944
+50,400,0.35000000000000003,88236.2886071679
+50,400,0.4,89544.1387347445
+50,400,0.45,90347.62552299246
+50,400,0.5,90618.66839956143
+50,400,0.55,90347.62552299244
+50,400,0.6000000000000001,89544.1387347445
+50,400,0.65,88236.2886071679
+50,400,0.7000000000000001,86468.19503774944
+50,400,0.75,84296.43572052226
+50,400,0.8,81785.80180465833
+50,400,0.8500000000000001,79004.94193510151
+50,400,0.9,76022.37281842403
+50,400,0.9500000000000001,72903.19259819905
+50,400,1.0,69706.66799966262
+50,450,0.0,69369.92081125846
+50,450,0.05,72551.00326197589
+50,450,0.1,75655.1149787215
+50,450,0.15000000000000002,78623.2755489416
+50,450,0.2,81390.7013128484
+50,450,0.25,83889.2065624521
+50,450,0.30000000000000004,86050.47428877481
+50,450,0.35000000000000003,87810.02634336517
+50,450,0.4,89111.55835438342
+50,450,0.45,89911.1635639442
+50,450,0.5,90180.89705463602
+50,450,0.55,89911.16356394418
+50,450,0.6000000000000001,89111.55835438342
+50,450,0.65,87810.02634336517
+50,450,0.7000000000000001,86050.47428877481
+50,450,0.75,83889.2065624521
+50,450,0.8,81390.7013128484
+50,450,0.8500000000000001,78623.2755489416
+50,450,0.9,75655.1149787215
+50,450,0.9500000000000001,72551.00326197587
+50,450,1.0,69369.92081125846
+50,500,0.0,69036.41157658894
+50,500,0.05,72202.20036167793
+50,500,0.1,75291.38846440072
+50,500,0.15000000000000002,78245.27903187937
+50,500,0.2,80999.39986422892
+50,500,0.25,83485.89306936337
+50,500,0.30000000000000004,85636.77008546339
+50,500,0.35000000000000003,87387.8627551759
+50,500,0.4,88683.13740075658
+50,500,0.45,89478.89835450215
+50,500,0.5,89747.33504956563
+50,500,0.55,89478.89835450212
+50,500,0.6000000000000001,88683.13740075658
+50,500,0.65,87387.8627551759
+50,500,0.7000000000000001,85636.77008546339
+50,500,0.75,83485.89306936337
+50,500,0.8,80999.39986422892
+50,500,0.8500000000000001,78245.27903187937
+50,500,0.9,75291.38846440072
+50,500,0.9500000000000001,72202.20036167791
+50,500,1.0,69036.41157658894
+50,550,0.0,68706.0938178493
+50,550,0.05,71856.73528817708
+50,550,0.1,74931.14258658064
+50,550,0.15000000000000002,77870.899706368
+50,550,0.2,80611.8429270795
+50,550,0.25,83086.4390355387
+50,550,0.30000000000000004,85227.0247740497
+50,550,0.35000000000000003,86969.73900993583
+50,550,0.4,88258.81616917401
+50,550,0.45,89050.76965424136
+50,550,0.5,89317.92196320408
+50,550,0.55,89050.76965424135
+50,550,0.6000000000000001,88258.81616917401
+50,550,0.65,86969.73900993583
+50,550,0.7000000000000001,85227.0247740497
+50,550,0.75,83086.4390355387
+50,550,0.8,80611.8429270795
+50,550,0.8500000000000001,77870.899706368
+50,550,0.9,74931.14258658064
+50,550,0.9500000000000001,71856.73528817706
+50,550,1.0,68706.0938178493
+50,600,0.0,68378.9219425262
+50,600,0.05,71514.56035823336
+50,600,0.1,74574.32762188262
+50,600,0.15000000000000002,77500.08589824243
+50,600,0.2,80227.97700837911
+50,600,0.25,82690.78932584565
+50,600,0.30000000000000004,84821.18179893517
+50,600,0.35000000000000003,86555.5973956028
+50,600,0.4,87838.53609217794
+50,600,0.45,88626.71837017355
+50,600,0.5,88892.59852528405
+50,600,0.55,88626.71837017353
+50,600,0.6000000000000001,87838.53609217794
+50,600,0.65,86555.5973956028
+50,600,0.7000000000000001,84821.18179893517
+50,600,0.75,82690.78932584565
+50,600,0.8,80227.97700837911
+50,600,0.8500000000000001,77500.08589824243
+50,600,0.9,74574.32762188262
+50,600,0.9500000000000001,71514.56035823334
+50,600,1.0,68378.9219425262
+50,650,0.0,68054.85122241944
+50,650,0.05,71175.62879255455
+50,650,0.1,74220.89478955143
+50,650,0.15000000000000002,77132.7869129427
+50,650,0.2,79847.74962919249
+50,650,0.25,82298.88985036772
+50,650,0.30000000000000004,84419.18567666534
+50,650,0.35000000000000003,86145.38129420183
+50,650,0.4,87422.23971259415
+50,650,0.45,88206.68652955662
+50,650,0.5,88471.30658914527
+50,650,0.55,88206.68652955661
+50,650,0.6000000000000001,87422.23971259415
+50,650,0.65,86145.38129420183
+50,650,0.7000000000000001,84419.18567666534
+50,650,0.75,82298.88985036772
+50,650,0.8,79847.74962919249
+50,650,0.8500000000000001,77132.7869129427
+50,650,0.9,74220.89478955143
+50,650,0.9500000000000001,71175.62879255452
+50,650,1.0,68054.85122241944
+50,700,0.0,67733.83777325708
+50,700,0.05,70839.89469447645
+50,700,0.1,73870.79622922334
+50,700,0.15000000000000002,76768.95301240995
+50,700,0.2,79471.1093007529
+50,700,0.25,81910.68753975276
+50,700,0.30000000000000004,84020.98197064333
+50,700,0.35000000000000003,85739.03515602164
+50,700,0.4,87009.87065734607
+50,700,0.45,87790.61725347379
+50,700,0.5,88053.9891052342
+50,700,0.55,87790.61725347377
+50,700,0.6000000000000001,87009.87065734607
+50,700,0.65,85739.03515602164
+50,700,0.7000000000000001,84020.98197064333
+50,700,0.75,81910.68753975276
+50,700,0.8,79471.1093007529
+50,700,0.8500000000000001,76768.95301240995
+50,700,0.9,73870.79622922334
+50,700,0.9500000000000001,70839.89469447642
+50,700,1.0,67733.83777325708
diff --git a/pybamm/input/parameters/ecm/data/ecm_example_dudt.csv b/pybamm/input/parameters/ecm/data/ecm_example_dudt.csv
new file mode 100644
index 0000000000..962c90bb81
--- /dev/null
+++ b/pybamm/input/parameters/ecm/data/ecm_example_dudt.csv
@@ -0,0 +1,101 @@
+OCV [V],Temperature [degC],dUdT [V/K]
+3.1,-20,-0.0010576663320507884
+3.1,0,-0.001269199598460946
+3.1,20,-0.0014807328648711038
+3.1,40,-0.0015864994980761826
+3.15,-20,-0.0008144336478441427
+3.15,0,-0.0009773203774129712
+3.15,20,-0.0011402071069817998
+3.15,40,-0.001221650471766214
+3.1999999999999997,-20,-0.000607206498346391
+3.1999999999999997,0,-0.0007286477980156691
+3.1999999999999997,20,-0.0008500890976849473
+3.1999999999999997,40,-0.0009108097475195864
+3.2499999999999996,-20,-0.0004332237633991043
+3.2499999999999996,0,-0.0005198685160789251
+3.2499999999999996,20,-0.000606513268758746
+3.2499999999999996,40,-0.0006498356450986564
+3.2999999999999994,-20,-0.00028972432284410377
+3.2999999999999994,0,-0.00034766918741292453
+3.2999999999999994,20,-0.00040561405198174524
+3.2999999999999994,40,-0.00043458648426615565
+3.349999999999999,-20,-0.00017394705652298836
+3.349999999999999,0,-0.00020873646782758603
+3.349999999999999,20,-0.0002435258791321837
+3.349999999999999,40,-0.00026092058478448255
+3.399999999999999,-20,-8.313084427744033e-05
+3.399999999999999,0,-9.97570131329284e-05
+3.399999999999999,20,-0.00011638318198841646
+3.399999999999999,40,-0.0001246962664161605
+3.449999999999999,-20,-1.4514565949169667e-05
+3.449999999999999,0,-1.74174791390036e-05
+3.449999999999999,20,-2.032039232883753e-05
+3.449999999999999,40,-2.17718489237545e-05
+3.4999999999999987,-20,3.4662898620113625e-05
+3.4999999999999987,0,4.1595478344136346e-05
+3.4999999999999987,20,4.852805806815907e-05
+3.4999999999999987,40,5.199434793017044e-05
+3.5499999999999985,-20,6.716266958867179e-05
+3.5499999999999985,0,8.059520350640614e-05
+3.5499999999999985,20,9.40277374241405e-05
+3.5499999999999985,40,0.00010074400438300768
+3.5999999999999983,-20,8.574586711496135e-05
+3.5999999999999983,0,0.00010289504053795362
+3.5999999999999983,20,0.00012004421396094588
+3.5999999999999983,40,0.00012861880067244202
+3.649999999999998,-20,9.317361135710578e-05
+3.649999999999998,0,0.00011180833362852693
+3.649999999999998,20,0.00013044305589994808
+3.649999999999998,40,0.00013976041703565867
+3.699999999999998,-20,9.220702247364487e-05
+3.699999999999998,0,0.00011064842696837384
+3.699999999999998,20,0.0001290898314631028
+3.699999999999998,40,0.0001383105337104673
+3.749999999999998,-20,8.560722062261883e-05
+3.749999999999998,0,0.0001027286647471426
+3.749999999999998,20,0.00011985010887166635
+3.749999999999998,40,0.00012841083093392824
+3.7999999999999976,-20,7.613532596253969e-05
+3.7999999999999976,0,9.136239115504763e-05
+3.7999999999999976,20,0.00010658945634755556
+3.7999999999999976,40,0.00011420298894380954
+3.8499999999999974,-20,6.65524586516697e-05
+3.8499999999999974,0,7.986295038200363e-05
+3.8499999999999974,20,9.317344211233757e-05
+3.8499999999999974,40,9.982868797750455e-05
+3.8999999999999972,-20,5.96197388482711e-05
+3.8999999999999972,0,7.154368661792532e-05
+3.8999999999999972,20,8.346763438757953e-05
+3.8999999999999972,40,8.942960827240665e-05
+3.949999999999997,-20,5.809828671071715e-05
+3.949999999999997,0,6.971794405286058e-05
+3.949999999999997,20,8.133760139500401e-05
+3.949999999999997,40,8.714743006607573e-05
+3.999999999999997,-20,6.474922239715908e-05
+3.999999999999997,0,7.76990668765909e-05
+3.999999999999997,20,9.06489113560227e-05
+3.999999999999997,40,9.712383359573862e-05
+4.049999999999997,-20,8.233366606616443e-05
+4.049999999999997,0,9.880039927939732e-05
+4.049999999999997,20,0.0001152671324926302
+4.049999999999997,40,0.00012350049909924665
+4.099999999999996,-20,0.00011361273787588444
+4.099999999999996,0,0.00013633528545106132
+4.099999999999996,20,0.0001590578330262382
+4.099999999999996,40,0.00017041910681382666
+4.149999999999997,-20,0.0001613475579846091
+4.149999999999997,0,0.0001936170695815309
+4.149999999999997,20,0.0002258865811784527
+4.149999999999997,40,0.00024202133697691364
+4.199999999999996,-20,0.00022829924655071165
+4.199999999999996,0,0.000273959095860854
+4.199999999999996,20,0.0003196189451709963
+4.199999999999996,40,0.0003424488698260675
+4.2499999999999964,-20,0.0003172289237324821
+4.2499999999999964,0,0.00038067470847897856
+4.2499999999999964,20,0.00044412049322547494
+4.2499999999999964,40,0.0004758433855987232
+4.299999999999995,-20,0.00043089770968818275
+4.299999999999995,0,0.0005170772516258193
+4.299999999999995,20,0.0006032567935634558
+4.299999999999995,40,0.0006463465645322741
diff --git a/pybamm/input/parameters/ecm/data/ecm_example_ocv.csv b/pybamm/input/parameters/ecm/data/ecm_example_ocv.csv
new file mode 100644
index 0000000000..53a6b9e671
--- /dev/null
+++ b/pybamm/input/parameters/ecm/data/ecm_example_ocv.csv
@@ -0,0 +1,111 @@
+# SoC,OCV [V]
+-0.05,2.5554448268104863
+-0.04,2.6965888919665
+-0.03,2.8354243224771927
+-0.019999999999999997,2.9688823518713066
+-0.009999999999999995,3.0922350590723373
+6.938893903907228e-18,3.2
+0.010000000000000009,3.287757008219401
+0.020000000000000004,3.3538087399146304
+0.030000000000000013,3.399652870803843
+0.04000000000000002,3.4291922391832723
+0.05000000000000002,3.447386944382996
+0.06000000000000001,3.4590176950801275
+0.07000000000000002,3.4678233620936925
+0.08000000000000003,3.476084048710994
+0.09000000000000001,3.484703007570683
+0.10000000000000002,3.493689095797286
+0.11000000000000003,3.502728275706306
+0.12000000000000004,3.511554074568407
+0.13000000000000006,3.52005791717772
+0.14,3.5282594966721414
+0.15000000000000002,3.5362495945389743
+0.16000000000000003,3.54414179665201
+0.17000000000000004,3.552029381461937
+0.18000000000000005,3.5599442209911114
+0.19000000000000006,3.567823637742663
+0.20000000000000007,3.575499973015437
+0.21000000000000008,3.5827344436581194
+0.22000000000000008,3.5893034627842035
+0.23000000000000004,3.595101950719793
+0.24000000000000005,3.600193518404891
+0.25000000000000006,3.604767946222255
+0.26000000000000006,3.609043147354448
+0.2700000000000001,3.6131853781770666
+0.2800000000000001,3.6172840846165255
+0.2900000000000001,3.6213636610560163
+0.3000000000000001,3.625399887548962
+0.3100000000000001,3.6293293141200134
+0.32000000000000006,3.633062478797201
+0.33000000000000007,3.636514052629894
+0.3400000000000001,3.639642639606244
+0.3500000000000001,3.642472401747954
+0.3600000000000001,3.645077134196744
+0.3700000000000001,3.6475402964452446
+0.3800000000000001,3.649923562924022
+0.39000000000000007,3.6522631255377758
+0.4000000000000001,3.6545895448555097
+0.4100000000000001,3.6569578058385055
+0.4200000000000001,3.659475082751738
+0.4300000000000001,3.6623081482556623
+0.4400000000000001,3.6656474871617903
+0.4500000000000001,3.6696287502556433
+0.46000000000000013,3.6742607079162277
+0.47000000000000014,3.6794229802710614
+0.48000000000000015,3.6849392547522477
+0.49000000000000016,3.6906629553905184
+0.5000000000000001,3.696514081906836
+0.51,3.702464088074995
+0.52,3.708507645219953
+0.53,3.7146559216846993
+0.54,3.72095761586353
+0.55,3.727524135177248
+0.56,3.7345192853103426
+0.5700000000000001,3.7420921767089457
+0.5800000000000001,3.7502885120747163
+0.5900000000000001,3.7590139474670865
+0.6000000000000001,3.7680813164841256
+0.6100000000000001,3.7772917411260822
+0.6200000000000001,3.7864838975250996
+0.6300000000000001,3.795543437865191
+0.6400000000000001,3.8044043491054382
+0.6500000000000001,3.8130546000779613
+0.6600000000000001,3.8215280651851105
+0.6700000000000002,3.8298810784317276
+0.68,3.838150769770771
+0.6900000000000001,3.8463391694495197
+0.7000000000000001,3.8544195939296437
+0.7100000000000001,3.8623610194708395
+0.7200000000000001,3.8701558472829687
+0.7300000000000001,3.8778352453709797
+0.7400000000000001,3.8854698198772133
+0.7500000000000001,3.8931673013836945
+0.7600000000000001,3.901069309830101
+0.7700000000000001,3.909328377731613
+0.7800000000000001,3.918055574865001
+0.7900000000000001,3.9272703874096235
+0.8000000000000002,3.9369014049848503
+0.8100000000000002,3.946844523009681
+0.8200000000000002,3.9570308391676554
+0.8300000000000001,3.9674513572541916
+0.8400000000000001,3.9781282266671383
+0.8500000000000001,3.989066142653668
+0.8600000000000001,4.000226310865759
+0.8700000000000001,4.0115370888768265
+0.8800000000000001,4.022921399397572
+0.8900000000000001,4.034315589427299
+0.9000000000000001,4.045675064656122
+0.9100000000000001,4.056981508878426
+0.9200000000000002,4.06826731640655
+0.9300000000000002,4.079662167637995
+0.9400000000000002,4.091443679530856
+0.9500000000000002,4.104036431774488
+0.9600000000000002,4.11789599455039
+0.9700000000000002,4.13330096876768
+0.9800000000000002,4.150199674158731
+0.9900000000000002,4.168247564719721
+1.0000000000000002,4.187000000000001
+1.0100000000000002,4.206096470888324
+1.0200000000000002,4.225326533329351
+1.0300000000000002,4.244597752168409
+1.0400000000000003,4.263879004150728
diff --git a/pybamm/input/parameters/ecm/data/ecm_example_r0.csv b/pybamm/input/parameters/ecm/data/ecm_example_r0.csv
new file mode 100644
index 0000000000..41f35ccad5
--- /dev/null
+++ b/pybamm/input/parameters/ecm/data/ecm_example_r0.csv
@@ -0,0 +1,3865 @@
+Temperature [degC],Current [A],SoC,R0 [Ohm]
+-20,-400,0.0,0.002247605536977195
+-20,-400,0.05,0.0021490566788174253
+-20,-400,0.1,0.0020608813846744738
+-20,-400,0.15000000000000002,0.001983079654548341
+-20,-400,0.2,0.0019156514884390249
+-20,-400,0.25,0.0018585968863465267
+-20,-400,0.30000000000000004,0.0018119158482708465
+-20,-400,0.35000000000000003,0.001775608374211984
+-20,-400,0.4,0.0017496744641699394
+-20,-400,0.45,0.001734114118144713
+-20,-400,0.5,0.0017289273361363038
+-20,-400,0.55,0.0017341141181447133
+-20,-400,0.6000000000000001,0.0017496744641699394
+-20,-400,0.65,0.001775608374211984
+-20,-400,0.7000000000000001,0.0018119158482708465
+-20,-400,0.75,0.0018585968863465267
+-20,-400,0.8,0.0019156514884390249
+-20,-400,0.8500000000000001,0.001983079654548341
+-20,-400,0.9,0.0020608813846744738
+-20,-400,0.9500000000000001,0.0021490566788174258
+-20,-400,1.0,0.002247605536977195
+-20,-350,0.0,0.0022366948304870147
+-20,-350,0.05,0.0021386243648425832
+-20,-350,0.1,0.002050877106108093
+-20,-350,0.15000000000000002,0.0019734530542835425
+-20,-350,0.2,0.001906352209368932
+-20,-350,0.25,0.0018495745713642616
+-20,-350,0.30000000000000004,0.0018031201402695315
+-20,-350,0.35000000000000003,0.001766988916084741
+-20,-350,0.4,0.001741180898809891
+-20,-350,0.45,0.001725696088444981
+-20,-350,0.5,0.001720534484990011
+-20,-350,0.55,0.0017256960884449815
+-20,-350,0.6000000000000001,0.001741180898809891
+-20,-350,0.65,0.001766988916084741
+-20,-350,0.7000000000000001,0.0018031201402695315
+-20,-350,0.75,0.0018495745713642616
+-20,-350,0.8,0.001906352209368932
+-20,-350,0.8500000000000001,0.0019734530542835425
+-20,-350,0.9,0.002050877106108093
+-20,-350,0.9500000000000001,0.0021386243648425837
+-20,-350,1.0,0.0022366948304870147
+-20,-300,0.0,0.0022257841239968343
+-20,-300,0.05,0.0021281920508677415
+-20,-300,0.1,0.0020408728275417122
+-20,-300,0.15000000000000002,0.001963826454018745
+-20,-300,0.2,0.00189705293029884
+-20,-300,0.25,0.001840552256381997
+-20,-300,0.30000000000000004,0.0017943244322682168
+-20,-300,0.35000000000000003,0.0017583694579574986
+-20,-300,0.4,0.001732687333449843
+-20,-300,0.45,0.0017172780587452496
+-20,-300,0.5,0.0017121416338437183
+-20,-300,0.55,0.00171727805874525
+-20,-300,0.6000000000000001,0.001732687333449843
+-20,-300,0.65,0.0017583694579574986
+-20,-300,0.7000000000000001,0.0017943244322682168
+-20,-300,0.75,0.001840552256381997
+-20,-300,0.8,0.00189705293029884
+-20,-300,0.8500000000000001,0.001963826454018745
+-20,-300,0.9,0.0020408728275417122
+-20,-300,0.9500000000000001,0.002128192050867742
+-20,-300,1.0,0.0022257841239968343
+-20,-250,0.0,0.002214873417506653
+-20,-250,0.05,0.0021177597368928994
+-20,-250,0.1,0.002030868548975331
+-20,-250,0.15000000000000002,0.001954199853753947
+-20,-250,0.2,0.0018877536512287474
+-20,-250,0.25,0.0018315299413997324
+-20,-250,0.30000000000000004,0.0017855287242669019
+-20,-250,0.35000000000000003,0.001749749999830256
+-20,-250,0.4,0.0017241937680897946
+-20,-250,0.45,0.0017088600290455177
+-20,-250,0.5,0.0017037487826974255
+-20,-250,0.55,0.0017088600290455181
+-20,-250,0.6000000000000001,0.0017241937680897946
+-20,-250,0.65,0.001749749999830256
+-20,-250,0.7000000000000001,0.0017855287242669019
+-20,-250,0.75,0.0018315299413997324
+-20,-250,0.8,0.0018877536512287474
+-20,-250,0.8500000000000001,0.001954199853753947
+-20,-250,0.9,0.002030868548975331
+-20,-250,0.9500000000000001,0.0021177597368929
+-20,-250,1.0,0.002214873417506653
+-20,-200,0.0,0.002203962711016473
+-20,-200,0.05,0.002107327422918058
+-20,-200,0.1,0.0020208642704089503
+-20,-200,0.15000000000000002,0.0019445732534891496
+-20,-200,0.2,0.0018784543721586553
+-20,-200,0.25,0.001822507626417468
+-20,-200,0.30000000000000004,0.0017767330162655874
+-20,-200,0.35000000000000003,0.0017411305417030136
+-20,-200,0.4,0.0017157002027297465
+-20,-200,0.45,0.0017004419993457865
+-20,-200,0.5,0.001695355931551133
+-20,-200,0.55,0.001700441999345787
+-20,-200,0.6000000000000001,0.0017157002027297465
+-20,-200,0.65,0.0017411305417030136
+-20,-200,0.7000000000000001,0.0017767330162655874
+-20,-200,0.75,0.001822507626417468
+-20,-200,0.8,0.0018784543721586553
+-20,-200,0.8500000000000001,0.0019445732534891496
+-20,-200,0.9,0.0020208642704089503
+-20,-200,0.9500000000000001,0.0021073274229180586
+-20,-200,1.0,0.002203962711016473
+-20,-150,0.0,0.002193052004526292
+-20,-150,0.05,0.002096895108943216
+-20,-150,0.1,0.002010859991842569
+-20,-150,0.15000000000000002,0.0019349466532243517
+-20,-150,0.2,0.0018691550930885628
+-20,-150,0.25,0.0018134853114352028
+-20,-150,0.30000000000000004,0.0017679373082642722
+-20,-150,0.35000000000000003,0.0017325110835757704
+-20,-150,0.4,0.001707206637369698
+-20,-150,0.45,0.0016920239696460546
+-20,-150,0.5,0.0016869630804048398
+-20,-150,0.55,0.001692023969646055
+-20,-150,0.6000000000000001,0.001707206637369698
+-20,-150,0.65,0.0017325110835757704
+-20,-150,0.7000000000000001,0.0017679373082642722
+-20,-150,0.75,0.0018134853114352028
+-20,-150,0.8,0.0018691550930885628
+-20,-150,0.8500000000000001,0.0019349466532243517
+-20,-150,0.9,0.002010859991842569
+-20,-150,0.9500000000000001,0.0020968951089432165
+-20,-150,1.0,0.002193052004526292
+-20,-100,0.0,0.0021821412980361117
+-20,-100,0.05,0.0020864627949683744
+-20,-100,0.1,0.0020008557132761883
+-20,-100,0.15000000000000002,0.001925320052959554
+-20,-100,0.2,0.0018598558140184706
+-20,-100,0.25,0.0018044629964529383
+-20,-100,0.30000000000000004,0.0017591416002629577
+-20,-100,0.35000000000000003,0.001723891625448528
+-20,-100,0.4,0.0016987130720096501
+-20,-100,0.45,0.0016836059399463232
+-20,-100,0.5,0.0016785702292585474
+-20,-100,0.55,0.0016836059399463234
+-20,-100,0.6000000000000001,0.0016987130720096501
+-20,-100,0.65,0.001723891625448528
+-20,-100,0.7000000000000001,0.0017591416002629577
+-20,-100,0.75,0.0018044629964529383
+-20,-100,0.8,0.0018598558140184706
+-20,-100,0.8500000000000001,0.001925320052959554
+-20,-100,0.9,0.0020008557132761883
+-20,-100,0.9500000000000001,0.0020864627949683744
+-20,-100,1.0,0.0021821412980361117
+-20,-50,0.0,0.0021712305915459313
+-20,-50,0.05,0.0020760304809935323
+-20,-50,0.1,0.0019908514347098073
+-20,-50,0.15000000000000002,0.0019156934526947562
+-20,-50,0.2,0.001850556534948378
+-20,-50,0.25,0.0017954406814706737
+-20,-50,0.30000000000000004,0.0017503458922616428
+-20,-50,0.35000000000000003,0.0017152721673212854
+-20,-50,0.4,0.0016902195066496016
+-20,-50,0.45,0.0016751879102465915
+-20,-50,0.5,0.0016701773781122545
+-20,-50,0.55,0.001675187910246592
+-20,-50,0.6000000000000001,0.0016902195066496016
+-20,-50,0.65,0.0017152721673212854
+-20,-50,0.7000000000000001,0.0017503458922616428
+-20,-50,0.75,0.0017954406814706737
+-20,-50,0.8,0.001850556534948378
+-20,-50,0.8500000000000001,0.0019156934526947562
+-20,-50,0.9,0.0019908514347098073
+-20,-50,0.9500000000000001,0.0020760304809935327
+-20,-50,1.0,0.0021712305915459313
+-20,0,0.0,0.002160319885055751
+-20,0,0.05,0.00206559816701869
+-20,0,0.1,0.0019808471561434263
+-20,0,0.15000000000000002,0.0019060668524299583
+-20,0,0.2,0.001841257255878286
+-20,0,0.25,0.0017864183664884088
+-20,0,0.30000000000000004,0.001741550184260328
+-20,0,0.35000000000000003,0.0017066527091940426
+-20,0,0.4,0.0016817259412895535
+-20,0,0.45,0.0016667698805468596
+-20,0,0.5,0.0016617845269659617
+-20,0,0.55,0.00166676988054686
+-20,0,0.6000000000000001,0.0016817259412895535
+-20,0,0.65,0.0017066527091940426
+-20,0,0.7000000000000001,0.001741550184260328
+-20,0,0.75,0.0017864183664884088
+-20,0,0.8,0.001841257255878286
+-20,0,0.8500000000000001,0.0019060668524299583
+-20,0,0.9,0.0019808471561434263
+-20,0,0.9500000000000001,0.0020655981670186906
+-20,0,1.0,0.002160319885055751
+-20,50,0.0,0.0021712305915459313
+-20,50,0.05,0.0020760304809935323
+-20,50,0.1,0.0019908514347098073
+-20,50,0.15000000000000002,0.0019156934526947562
+-20,50,0.2,0.001850556534948378
+-20,50,0.25,0.0017954406814706737
+-20,50,0.30000000000000004,0.0017503458922616428
+-20,50,0.35000000000000003,0.0017152721673212854
+-20,50,0.4,0.0016902195066496016
+-20,50,0.45,0.0016751879102465915
+-20,50,0.5,0.0016701773781122545
+-20,50,0.55,0.001675187910246592
+-20,50,0.6000000000000001,0.0016902195066496016
+-20,50,0.65,0.0017152721673212854
+-20,50,0.7000000000000001,0.0017503458922616428
+-20,50,0.75,0.0017954406814706737
+-20,50,0.8,0.001850556534948378
+-20,50,0.8500000000000001,0.0019156934526947562
+-20,50,0.9,0.0019908514347098073
+-20,50,0.9500000000000001,0.0020760304809935327
+-20,50,1.0,0.0021712305915459313
+-20,100,0.0,0.0021821412980361117
+-20,100,0.05,0.0020864627949683744
+-20,100,0.1,0.0020008557132761883
+-20,100,0.15000000000000002,0.001925320052959554
+-20,100,0.2,0.0018598558140184706
+-20,100,0.25,0.0018044629964529383
+-20,100,0.30000000000000004,0.0017591416002629577
+-20,100,0.35000000000000003,0.001723891625448528
+-20,100,0.4,0.0016987130720096501
+-20,100,0.45,0.0016836059399463232
+-20,100,0.5,0.0016785702292585474
+-20,100,0.55,0.0016836059399463234
+-20,100,0.6000000000000001,0.0016987130720096501
+-20,100,0.65,0.001723891625448528
+-20,100,0.7000000000000001,0.0017591416002629577
+-20,100,0.75,0.0018044629964529383
+-20,100,0.8,0.0018598558140184706
+-20,100,0.8500000000000001,0.001925320052959554
+-20,100,0.9,0.0020008557132761883
+-20,100,0.9500000000000001,0.0020864627949683744
+-20,100,1.0,0.0021821412980361117
+-20,150,0.0,0.002193052004526292
+-20,150,0.05,0.002096895108943216
+-20,150,0.1,0.002010859991842569
+-20,150,0.15000000000000002,0.0019349466532243517
+-20,150,0.2,0.0018691550930885628
+-20,150,0.25,0.0018134853114352028
+-20,150,0.30000000000000004,0.0017679373082642722
+-20,150,0.35000000000000003,0.0017325110835757704
+-20,150,0.4,0.001707206637369698
+-20,150,0.45,0.0016920239696460546
+-20,150,0.5,0.0016869630804048398
+-20,150,0.55,0.001692023969646055
+-20,150,0.6000000000000001,0.001707206637369698
+-20,150,0.65,0.0017325110835757704
+-20,150,0.7000000000000001,0.0017679373082642722
+-20,150,0.75,0.0018134853114352028
+-20,150,0.8,0.0018691550930885628
+-20,150,0.8500000000000001,0.0019349466532243517
+-20,150,0.9,0.002010859991842569
+-20,150,0.9500000000000001,0.0020968951089432165
+-20,150,1.0,0.002193052004526292
+-20,200,0.0,0.002203962711016473
+-20,200,0.05,0.002107327422918058
+-20,200,0.1,0.0020208642704089503
+-20,200,0.15000000000000002,0.0019445732534891496
+-20,200,0.2,0.0018784543721586553
+-20,200,0.25,0.001822507626417468
+-20,200,0.30000000000000004,0.0017767330162655874
+-20,200,0.35000000000000003,0.0017411305417030136
+-20,200,0.4,0.0017157002027297465
+-20,200,0.45,0.0017004419993457865
+-20,200,0.5,0.001695355931551133
+-20,200,0.55,0.001700441999345787
+-20,200,0.6000000000000001,0.0017157002027297465
+-20,200,0.65,0.0017411305417030136
+-20,200,0.7000000000000001,0.0017767330162655874
+-20,200,0.75,0.001822507626417468
+-20,200,0.8,0.0018784543721586553
+-20,200,0.8500000000000001,0.0019445732534891496
+-20,200,0.9,0.0020208642704089503
+-20,200,0.9500000000000001,0.0021073274229180586
+-20,200,1.0,0.002203962711016473
+-20,250,0.0,0.002214873417506653
+-20,250,0.05,0.0021177597368928994
+-20,250,0.1,0.002030868548975331
+-20,250,0.15000000000000002,0.001954199853753947
+-20,250,0.2,0.0018877536512287474
+-20,250,0.25,0.0018315299413997324
+-20,250,0.30000000000000004,0.0017855287242669019
+-20,250,0.35000000000000003,0.001749749999830256
+-20,250,0.4,0.0017241937680897946
+-20,250,0.45,0.0017088600290455177
+-20,250,0.5,0.0017037487826974255
+-20,250,0.55,0.0017088600290455181
+-20,250,0.6000000000000001,0.0017241937680897946
+-20,250,0.65,0.001749749999830256
+-20,250,0.7000000000000001,0.0017855287242669019
+-20,250,0.75,0.0018315299413997324
+-20,250,0.8,0.0018877536512287474
+-20,250,0.8500000000000001,0.001954199853753947
+-20,250,0.9,0.002030868548975331
+-20,250,0.9500000000000001,0.0021177597368929
+-20,250,1.0,0.002214873417506653
+-20,300,0.0,0.0022257841239968343
+-20,300,0.05,0.0021281920508677415
+-20,300,0.1,0.0020408728275417122
+-20,300,0.15000000000000002,0.001963826454018745
+-20,300,0.2,0.00189705293029884
+-20,300,0.25,0.001840552256381997
+-20,300,0.30000000000000004,0.0017943244322682168
+-20,300,0.35000000000000003,0.0017583694579574986
+-20,300,0.4,0.001732687333449843
+-20,300,0.45,0.0017172780587452496
+-20,300,0.5,0.0017121416338437183
+-20,300,0.55,0.00171727805874525
+-20,300,0.6000000000000001,0.001732687333449843
+-20,300,0.65,0.0017583694579574986
+-20,300,0.7000000000000001,0.0017943244322682168
+-20,300,0.75,0.001840552256381997
+-20,300,0.8,0.00189705293029884
+-20,300,0.8500000000000001,0.001963826454018745
+-20,300,0.9,0.0020408728275417122
+-20,300,0.9500000000000001,0.002128192050867742
+-20,300,1.0,0.0022257841239968343
+-20,350,0.0,0.0022366948304870147
+-20,350,0.05,0.0021386243648425832
+-20,350,0.1,0.002050877106108093
+-20,350,0.15000000000000002,0.0019734530542835425
+-20,350,0.2,0.001906352209368932
+-20,350,0.25,0.0018495745713642616
+-20,350,0.30000000000000004,0.0018031201402695315
+-20,350,0.35000000000000003,0.001766988916084741
+-20,350,0.4,0.001741180898809891
+-20,350,0.45,0.001725696088444981
+-20,350,0.5,0.001720534484990011
+-20,350,0.55,0.0017256960884449815
+-20,350,0.6000000000000001,0.001741180898809891
+-20,350,0.65,0.001766988916084741
+-20,350,0.7000000000000001,0.0018031201402695315
+-20,350,0.75,0.0018495745713642616
+-20,350,0.8,0.001906352209368932
+-20,350,0.8500000000000001,0.0019734530542835425
+-20,350,0.9,0.002050877106108093
+-20,350,0.9500000000000001,0.0021386243648425837
+-20,350,1.0,0.0022366948304870147
+-20,400,0.0,0.002247605536977195
+-20,400,0.05,0.0021490566788174253
+-20,400,0.1,0.0020608813846744738
+-20,400,0.15000000000000002,0.001983079654548341
+-20,400,0.2,0.0019156514884390249
+-20,400,0.25,0.0018585968863465267
+-20,400,0.30000000000000004,0.0018119158482708465
+-20,400,0.35000000000000003,0.001775608374211984
+-20,400,0.4,0.0017496744641699394
+-20,400,0.45,0.001734114118144713
+-20,400,0.5,0.0017289273361363038
+-20,400,0.55,0.0017341141181447133
+-20,400,0.6000000000000001,0.0017496744641699394
+-20,400,0.65,0.001775608374211984
+-20,400,0.7000000000000001,0.0018119158482708465
+-20,400,0.75,0.0018585968863465267
+-20,400,0.8,0.0019156514884390249
+-20,400,0.8500000000000001,0.001983079654548341
+-20,400,0.9,0.0020608813846744738
+-20,400,0.9500000000000001,0.0021490566788174258
+-20,400,1.0,0.002247605536977195
+-20,450,0.0,0.0022585162434673755
+-20,450,0.05,0.0021594889927922674
+-20,450,0.1,0.0020708856632408548
+-20,450,0.15000000000000002,0.0019927062548131384
+-20,450,0.2,0.001924950767509117
+-20,450,0.25,0.0018676192013287911
+-20,450,0.30000000000000004,0.001820711556272161
+-20,450,0.35000000000000003,0.0017842278323392264
+-20,450,0.4,0.0017581680295299879
+-20,450,0.45,0.0017425321478444441
+-20,450,0.5,0.0017373201872825962
+-20,450,0.55,0.0017425321478444446
+-20,450,0.6000000000000001,0.0017581680295299879
+-20,450,0.65,0.0017842278323392264
+-20,450,0.7000000000000001,0.001820711556272161
+-20,450,0.75,0.0018676192013287911
+-20,450,0.8,0.001924950767509117
+-20,450,0.8500000000000001,0.0019927062548131384
+-20,450,0.9,0.0020708856632408548
+-20,450,0.9500000000000001,0.0021594889927922674
+-20,450,1.0,0.0022585162434673755
+-20,500,0.0,0.0022694269499575564
+-20,500,0.05,0.0021699213067671095
+-20,500,0.1,0.0020808899418072358
+-20,500,0.15000000000000002,0.0020023328550779363
+-20,500,0.2,0.0019342500465792094
+-20,500,0.25,0.0018766415163110558
+-20,500,0.30000000000000004,0.0018295072642734761
+-20,500,0.35000000000000003,0.0017928472904664692
+-20,500,0.4,0.0017666615948900362
+-20,500,0.45,0.001750950177544176
+-20,500,0.5,0.0017457130384288895
+-20,500,0.55,0.0017509501775441764
+-20,500,0.6000000000000001,0.0017666615948900362
+-20,500,0.65,0.0017928472904664692
+-20,500,0.7000000000000001,0.0018295072642734761
+-20,500,0.75,0.0018766415163110558
+-20,500,0.8,0.0019342500465792094
+-20,500,0.8500000000000001,0.0020023328550779363
+-20,500,0.9,0.0020808899418072358
+-20,500,0.9500000000000001,0.0021699213067671095
+-20,500,1.0,0.0022694269499575564
+-20,550,0.0,0.0022803376564477363
+-20,550,0.05,0.002180353620741951
+-20,550,0.1,0.0020908942203736163
+-20,550,0.15000000000000002,0.002011959455342734
+-20,550,0.2,0.0019435493256493017
+-20,550,0.25,0.0018856638312933207
+-20,550,0.30000000000000004,0.0018383029722747906
+-20,550,0.35000000000000003,0.0018014667485937116
+-20,550,0.4,0.0017751551602500843
+-20,550,0.45,0.0017593682072439077
+-20,550,0.5,0.001754105889575182
+-20,550,0.55,0.0017593682072439079
+-20,550,0.6000000000000001,0.0017751551602500843
+-20,550,0.65,0.0018014667485937116
+-20,550,0.7000000000000001,0.0018383029722747906
+-20,550,0.75,0.0018856638312933207
+-20,550,0.8,0.0019435493256493017
+-20,550,0.8500000000000001,0.002011959455342734
+-20,550,0.9,0.0020908942203736163
+-20,550,0.9500000000000001,0.0021803536207419512
+-20,550,1.0,0.0022803376564477363
+-20,600,0.0,0.0022912483629379176
+-20,600,0.05,0.002190785934716793
+-20,600,0.1,0.0021008984989399977
+-20,600,0.15000000000000002,0.0020215860556075317
+-20,600,0.2,0.0019528486047193942
+-20,600,0.25,0.0018946861462755854
+-20,600,0.30000000000000004,0.0018470986802761056
+-20,600,0.35000000000000003,0.0018100862067209546
+-20,600,0.4,0.0017836487256101326
+-20,600,0.45,0.0017677862369436395
+-20,600,0.5,0.0017624987407214748
+-20,600,0.55,0.0017677862369436398
+-20,600,0.6000000000000001,0.0017836487256101326
+-20,600,0.65,0.0018100862067209546
+-20,600,0.7000000000000001,0.0018470986802761056
+-20,600,0.75,0.0018946861462755854
+-20,600,0.8,0.0019528486047193942
+-20,600,0.8500000000000001,0.0020215860556075317
+-20,600,0.9,0.0021008984989399977
+-20,600,0.9500000000000001,0.0021907859347167933
+-20,600,1.0,0.0022912483629379176
+-20,650,0.0,0.002302159069428098
+-20,650,0.05,0.0022012182486916346
+-20,650,0.1,0.0021109027775063783
+-20,650,0.15000000000000002,0.0020312126558723292
+-20,650,0.2,0.0019621478837894865
+-20,650,0.25,0.0019037084612578499
+-20,650,0.30000000000000004,0.0018558943882774203
+-20,650,0.35000000000000003,0.001818705664848197
+-20,650,0.4,0.0017921422909701807
+-20,650,0.45,0.0017762042666433706
+-20,650,0.5,0.0017708915918677676
+-20,650,0.55,0.001776204266643371
+-20,650,0.6000000000000001,0.0017921422909701807
+-20,650,0.65,0.001818705664848197
+-20,650,0.7000000000000001,0.0018558943882774203
+-20,650,0.75,0.0019037084612578499
+-20,650,0.8,0.0019621478837894865
+-20,650,0.8500000000000001,0.0020312126558723292
+-20,650,0.9,0.0021109027775063783
+-20,650,0.9500000000000001,0.002201218248691635
+-20,650,1.0,0.002302159069428098
+-20,700,0.0,0.0023130697759182785
+-20,700,0.05,0.0022116505626664767
+-20,700,0.1,0.0021209070560727597
+-20,700,0.15000000000000002,0.0020408392561371276
+-20,700,0.2,0.001971447162859579
+-20,700,0.25,0.0019127307762401146
+-20,700,0.30000000000000004,0.0018646900962787352
+-20,700,0.35000000000000003,0.0018273251229754398
+-20,700,0.4,0.001800635856330229
+-20,700,0.45,0.0017846222963431024
+-20,700,0.5,0.0017792844430140602
+-20,700,0.55,0.0017846222963431029
+-20,700,0.6000000000000001,0.001800635856330229
+-20,700,0.65,0.0018273251229754398
+-20,700,0.7000000000000001,0.0018646900962787352
+-20,700,0.75,0.0019127307762401146
+-20,700,0.8,0.001971447162859579
+-20,700,0.8500000000000001,0.0020408392561371276
+-20,700,0.9,0.0021209070560727597
+-20,700,0.9500000000000001,0.002211650562666477
+-20,700,1.0,0.0023130697759182785
+-10,-400,0.0,0.0015663626484783517
+-10,-400,0.05,0.0014976836708143007
+-10,-400,0.1,0.00143623405922015
+-10,-400,0.15000000000000002,0.0013820138136958994
+-10,-400,0.2,0.0013350229342415489
+-10,-400,0.25,0.0012952614208570983
+-10,-400,0.30000000000000004,0.0012627292735425482
+-10,-400,0.35000000000000003,0.0012374264922978976
+-10,-400,0.4,0.0012193530771231476
+-10,-400,0.45,0.0012085090280182975
+-10,-400,0.5,0.0012048943449833474
+-10,-400,0.55,0.0012085090280182977
+-10,-400,0.6000000000000001,0.0012193530771231476
+-10,-400,0.65,0.0012374264922978976
+-10,-400,0.7000000000000001,0.0012627292735425482
+-10,-400,0.75,0.0012952614208570983
+-10,-400,0.8,0.0013350229342415489
+-10,-400,0.8500000000000001,0.0013820138136958994
+-10,-400,0.9,0.00143623405922015
+-10,-400,0.9500000000000001,0.001497683670814301
+-10,-400,1.0,0.0015663626484783517
+-10,-350,0.0,0.001558758946301272
+-10,-350,0.05,0.0014904133617326778
+-10,-350,0.1,0.0014292620492239354
+-10,-350,0.15000000000000002,0.0013753050087750454
+-10,-350,0.2,0.0013285422403860074
+-10,-350,0.25,0.001288973744056821
+-10,-350,0.30000000000000004,0.001256599519787487
+-10,-350,0.35000000000000003,0.0012314195675780047
+-10,-350,0.4,0.0012134338874283748
+-10,-350,0.45,0.0012026424793385969
+-10,-350,0.5,0.001199045343308671
+-10,-350,0.55,0.001202642479338597
+-10,-350,0.6000000000000001,0.0012134338874283748
+-10,-350,0.65,0.0012314195675780047
+-10,-350,0.7000000000000001,0.001256599519787487
+-10,-350,0.75,0.001288973744056821
+-10,-350,0.8,0.0013285422403860074
+-10,-350,0.8500000000000001,0.0013753050087750454
+-10,-350,0.9,0.0014292620492239354
+-10,-350,0.9500000000000001,0.001490413361732678
+-10,-350,1.0,0.001558758946301272
+-10,-300,0.0,0.0015511552441241929
+-10,-300,0.05,0.001483143052651055
+-10,-300,0.1,0.0014222900392277214
+-10,-300,0.15000000000000002,0.001368596203854192
+-10,-300,0.2,0.0013220615465304659
+-10,-300,0.25,0.001282686067256544
+-10,-300,0.30000000000000004,0.0012504697660324264
+-10,-300,0.35000000000000003,0.0012254126428581122
+-10,-300,0.4,0.0012075146977336025
+-10,-300,0.45,0.0011967759306588965
+-10,-300,0.5,0.0011931963416339946
+-10,-300,0.55,0.001196775930658897
+-10,-300,0.6000000000000001,0.0012075146977336025
+-10,-300,0.65,0.0012254126428581122
+-10,-300,0.7000000000000001,0.0012504697660324264
+-10,-300,0.75,0.001282686067256544
+-10,-300,0.8,0.0013220615465304659
+-10,-300,0.8500000000000001,0.001368596203854192
+-10,-300,0.9,0.0014222900392277214
+-10,-300,0.9500000000000001,0.0014831430526510553
+-10,-300,1.0,0.0015511552441241929
+-10,-250,0.0,0.0015435515419471135
+-10,-250,0.05,0.0014758727435694322
+-10,-250,0.1,0.0014153180292315068
+-10,-250,0.15000000000000002,0.0013618873989333377
+-10,-250,0.2,0.0013155808526749242
+-10,-250,0.25,0.0012763983904562667
+-10,-250,0.30000000000000004,0.0012443400122773654
+-10,-250,0.35000000000000003,0.0012194057181382195
+-10,-250,0.4,0.0012015955080388297
+-10,-250,0.45,0.0011909093819791959
+-10,-250,0.5,0.001187347339959318
+-10,-250,0.55,0.001190909381979196
+-10,-250,0.6000000000000001,0.0012015955080388297
+-10,-250,0.65,0.0012194057181382195
+-10,-250,0.7000000000000001,0.0012443400122773654
+-10,-250,0.75,0.0012763983904562667
+-10,-250,0.8,0.0013155808526749242
+-10,-250,0.8500000000000001,0.0013618873989333377
+-10,-250,0.9,0.0014153180292315068
+-10,-250,0.9500000000000001,0.0014758727435694322
+-10,-250,1.0,0.0015435515419471135
+-10,-200,0.0,0.001535947839770034
+-10,-200,0.05,0.0014686024344878095
+-10,-200,0.1,0.0014083460192352926
+-10,-200,0.15000000000000002,0.001355178594012484
+-10,-200,0.2,0.0013091001588193829
+-10,-200,0.25,0.0012701107136559896
+-10,-200,0.30000000000000004,0.0012382102585223045
+-10,-200,0.35000000000000003,0.0012133987934183268
+-10,-200,0.4,0.0011956763183440574
+-10,-200,0.45,0.0011850428332994955
+-10,-200,0.5,0.0011814983382846416
+-10,-200,0.55,0.001185042833299496
+-10,-200,0.6000000000000001,0.0011956763183440574
+-10,-200,0.65,0.0012133987934183268
+-10,-200,0.7000000000000001,0.0012382102585223045
+-10,-200,0.75,0.0012701107136559896
+-10,-200,0.8,0.0013091001588193829
+-10,-200,0.8500000000000001,0.001355178594012484
+-10,-200,0.9,0.0014083460192352926
+-10,-200,0.9500000000000001,0.0014686024344878097
+-10,-200,1.0,0.001535947839770034
+-10,-150,0.0,0.0015283441375929547
+-10,-150,0.05,0.0014613321254061864
+-10,-150,0.1,0.0014013740092390782
+-10,-150,0.15000000000000002,0.00134846978909163
+-10,-150,0.2,0.0013026194649638412
+-10,-150,0.25,0.0012638230368557123
+-10,-150,0.30000000000000004,0.0012320805047672436
+-10,-150,0.35000000000000003,0.0012073918686984339
+-10,-150,0.4,0.0011897571286492846
+-10,-150,0.45,0.0011791762846197948
+-10,-150,0.5,0.0011756493366099651
+-10,-150,0.55,0.0011791762846197953
+-10,-150,0.6000000000000001,0.0011897571286492846
+-10,-150,0.65,0.0012073918686984339
+-10,-150,0.7000000000000001,0.0012320805047672436
+-10,-150,0.75,0.0012638230368557123
+-10,-150,0.8,0.0013026194649638412
+-10,-150,0.8500000000000001,0.00134846978909163
+-10,-150,0.9,0.0014013740092390782
+-10,-150,0.9500000000000001,0.0014613321254061866
+-10,-150,1.0,0.0015283441375929547
+-10,-100,0.0,0.0015207404354158755
+-10,-100,0.05,0.001454061816324564
+-10,-100,0.1,0.001394401999242864
+-10,-100,0.15000000000000002,0.0013417609841707761
+-10,-100,0.2,0.0012961387711082999
+-10,-100,0.25,0.0012575353600554353
+-10,-100,0.30000000000000004,0.0012259507510121827
+-10,-100,0.35000000000000003,0.0012013849439785414
+-10,-100,0.4,0.0011838379389545123
+-10,-100,0.45,0.0011733097359400944
+-10,-100,0.5,0.0011698003349352888
+-10,-100,0.55,0.0011733097359400949
+-10,-100,0.6000000000000001,0.0011838379389545123
+-10,-100,0.65,0.0012013849439785414
+-10,-100,0.7000000000000001,0.0012259507510121827
+-10,-100,0.75,0.0012575353600554353
+-10,-100,0.8,0.0012961387711082999
+-10,-100,0.8500000000000001,0.0013417609841707761
+-10,-100,0.9,0.001394401999242864
+-10,-100,0.9500000000000001,0.001454061816324564
+-10,-100,1.0,0.0015207404354158755
+-10,-50,0.0,0.001513136733238796
+-10,-50,0.05,0.001446791507242941
+-10,-50,0.1,0.0013874299892466498
+-10,-50,0.15000000000000002,0.0013350521792499224
+-10,-50,0.2,0.0012896580772527584
+-10,-50,0.25,0.001251247683255158
+-10,-50,0.30000000000000004,0.0012198209972571216
+-10,-50,0.35000000000000003,0.0011953780192586487
+-10,-50,0.4,0.0011779187492597396
+-10,-50,0.45,0.001167443187260394
+-10,-50,0.5,0.0011639513332606123
+-10,-50,0.55,0.0011674431872603943
+-10,-50,0.6000000000000001,0.0011779187492597396
+-10,-50,0.65,0.0011953780192586487
+-10,-50,0.7000000000000001,0.0012198209972571216
+-10,-50,0.75,0.001251247683255158
+-10,-50,0.8,0.0012896580772527584
+-10,-50,0.8500000000000001,0.0013350521792499224
+-10,-50,0.9,0.0013874299892466498
+-10,-50,0.9500000000000001,0.0014467915072429412
+-10,-50,1.0,0.001513136733238796
+-10,0,0.0,0.0015055330310617167
+-10,0,0.05,0.0014395211981613181
+-10,0,0.1,0.0013804579792504354
+-10,0,0.15000000000000002,0.0013283433743290685
+-10,0,0.2,0.0012831773833972167
+-10,0,0.25,0.001244960006454881
+-10,0,0.30000000000000004,0.0012136912435020608
+-10,0,0.35000000000000003,0.001189371094538756
+-10,0,0.4,0.0011719995595649672
+-10,0,0.45,0.0011615766385806934
+-10,0,0.5,0.0011581023315859358
+-10,0,0.55,0.0011615766385806939
+-10,0,0.6000000000000001,0.0011719995595649672
+-10,0,0.65,0.001189371094538756
+-10,0,0.7000000000000001,0.0012136912435020608
+-10,0,0.75,0.001244960006454881
+-10,0,0.8,0.0012831773833972167
+-10,0,0.8500000000000001,0.0013283433743290685
+-10,0,0.9,0.0013804579792504354
+-10,0,0.9500000000000001,0.0014395211981613183
+-10,0,1.0,0.0015055330310617167
+-10,50,0.0,0.001513136733238796
+-10,50,0.05,0.001446791507242941
+-10,50,0.1,0.0013874299892466498
+-10,50,0.15000000000000002,0.0013350521792499224
+-10,50,0.2,0.0012896580772527584
+-10,50,0.25,0.001251247683255158
+-10,50,0.30000000000000004,0.0012198209972571216
+-10,50,0.35000000000000003,0.0011953780192586487
+-10,50,0.4,0.0011779187492597396
+-10,50,0.45,0.001167443187260394
+-10,50,0.5,0.0011639513332606123
+-10,50,0.55,0.0011674431872603943
+-10,50,0.6000000000000001,0.0011779187492597396
+-10,50,0.65,0.0011953780192586487
+-10,50,0.7000000000000001,0.0012198209972571216
+-10,50,0.75,0.001251247683255158
+-10,50,0.8,0.0012896580772527584
+-10,50,0.8500000000000001,0.0013350521792499224
+-10,50,0.9,0.0013874299892466498
+-10,50,0.9500000000000001,0.0014467915072429412
+-10,50,1.0,0.001513136733238796
+-10,100,0.0,0.0015207404354158755
+-10,100,0.05,0.001454061816324564
+-10,100,0.1,0.001394401999242864
+-10,100,0.15000000000000002,0.0013417609841707761
+-10,100,0.2,0.0012961387711082999
+-10,100,0.25,0.0012575353600554353
+-10,100,0.30000000000000004,0.0012259507510121827
+-10,100,0.35000000000000003,0.0012013849439785414
+-10,100,0.4,0.0011838379389545123
+-10,100,0.45,0.0011733097359400944
+-10,100,0.5,0.0011698003349352888
+-10,100,0.55,0.0011733097359400949
+-10,100,0.6000000000000001,0.0011838379389545123
+-10,100,0.65,0.0012013849439785414
+-10,100,0.7000000000000001,0.0012259507510121827
+-10,100,0.75,0.0012575353600554353
+-10,100,0.8,0.0012961387711082999
+-10,100,0.8500000000000001,0.0013417609841707761
+-10,100,0.9,0.001394401999242864
+-10,100,0.9500000000000001,0.001454061816324564
+-10,100,1.0,0.0015207404354158755
+-10,150,0.0,0.0015283441375929547
+-10,150,0.05,0.0014613321254061864
+-10,150,0.1,0.0014013740092390782
+-10,150,0.15000000000000002,0.00134846978909163
+-10,150,0.2,0.0013026194649638412
+-10,150,0.25,0.0012638230368557123
+-10,150,0.30000000000000004,0.0012320805047672436
+-10,150,0.35000000000000003,0.0012073918686984339
+-10,150,0.4,0.0011897571286492846
+-10,150,0.45,0.0011791762846197948
+-10,150,0.5,0.0011756493366099651
+-10,150,0.55,0.0011791762846197953
+-10,150,0.6000000000000001,0.0011897571286492846
+-10,150,0.65,0.0012073918686984339
+-10,150,0.7000000000000001,0.0012320805047672436
+-10,150,0.75,0.0012638230368557123
+-10,150,0.8,0.0013026194649638412
+-10,150,0.8500000000000001,0.00134846978909163
+-10,150,0.9,0.0014013740092390782
+-10,150,0.9500000000000001,0.0014613321254061866
+-10,150,1.0,0.0015283441375929547
+-10,200,0.0,0.001535947839770034
+-10,200,0.05,0.0014686024344878095
+-10,200,0.1,0.0014083460192352926
+-10,200,0.15000000000000002,0.001355178594012484
+-10,200,0.2,0.0013091001588193829
+-10,200,0.25,0.0012701107136559896
+-10,200,0.30000000000000004,0.0012382102585223045
+-10,200,0.35000000000000003,0.0012133987934183268
+-10,200,0.4,0.0011956763183440574
+-10,200,0.45,0.0011850428332994955
+-10,200,0.5,0.0011814983382846416
+-10,200,0.55,0.001185042833299496
+-10,200,0.6000000000000001,0.0011956763183440574
+-10,200,0.65,0.0012133987934183268
+-10,200,0.7000000000000001,0.0012382102585223045
+-10,200,0.75,0.0012701107136559896
+-10,200,0.8,0.0013091001588193829
+-10,200,0.8500000000000001,0.001355178594012484
+-10,200,0.9,0.0014083460192352926
+-10,200,0.9500000000000001,0.0014686024344878097
+-10,200,1.0,0.001535947839770034
+-10,250,0.0,0.0015435515419471135
+-10,250,0.05,0.0014758727435694322
+-10,250,0.1,0.0014153180292315068
+-10,250,0.15000000000000002,0.0013618873989333377
+-10,250,0.2,0.0013155808526749242
+-10,250,0.25,0.0012763983904562667
+-10,250,0.30000000000000004,0.0012443400122773654
+-10,250,0.35000000000000003,0.0012194057181382195
+-10,250,0.4,0.0012015955080388297
+-10,250,0.45,0.0011909093819791959
+-10,250,0.5,0.001187347339959318
+-10,250,0.55,0.001190909381979196
+-10,250,0.6000000000000001,0.0012015955080388297
+-10,250,0.65,0.0012194057181382195
+-10,250,0.7000000000000001,0.0012443400122773654
+-10,250,0.75,0.0012763983904562667
+-10,250,0.8,0.0013155808526749242
+-10,250,0.8500000000000001,0.0013618873989333377
+-10,250,0.9,0.0014153180292315068
+-10,250,0.9500000000000001,0.0014758727435694322
+-10,250,1.0,0.0015435515419471135
+-10,300,0.0,0.0015511552441241929
+-10,300,0.05,0.001483143052651055
+-10,300,0.1,0.0014222900392277214
+-10,300,0.15000000000000002,0.001368596203854192
+-10,300,0.2,0.0013220615465304659
+-10,300,0.25,0.001282686067256544
+-10,300,0.30000000000000004,0.0012504697660324264
+-10,300,0.35000000000000003,0.0012254126428581122
+-10,300,0.4,0.0012075146977336025
+-10,300,0.45,0.0011967759306588965
+-10,300,0.5,0.0011931963416339946
+-10,300,0.55,0.001196775930658897
+-10,300,0.6000000000000001,0.0012075146977336025
+-10,300,0.65,0.0012254126428581122
+-10,300,0.7000000000000001,0.0012504697660324264
+-10,300,0.75,0.001282686067256544
+-10,300,0.8,0.0013220615465304659
+-10,300,0.8500000000000001,0.001368596203854192
+-10,300,0.9,0.0014222900392277214
+-10,300,0.9500000000000001,0.0014831430526510553
+-10,300,1.0,0.0015511552441241929
+-10,350,0.0,0.001558758946301272
+-10,350,0.05,0.0014904133617326778
+-10,350,0.1,0.0014292620492239354
+-10,350,0.15000000000000002,0.0013753050087750454
+-10,350,0.2,0.0013285422403860074
+-10,350,0.25,0.001288973744056821
+-10,350,0.30000000000000004,0.001256599519787487
+-10,350,0.35000000000000003,0.0012314195675780047
+-10,350,0.4,0.0012134338874283748
+-10,350,0.45,0.0012026424793385969
+-10,350,0.5,0.001199045343308671
+-10,350,0.55,0.001202642479338597
+-10,350,0.6000000000000001,0.0012134338874283748
+-10,350,0.65,0.0012314195675780047
+-10,350,0.7000000000000001,0.001256599519787487
+-10,350,0.75,0.001288973744056821
+-10,350,0.8,0.0013285422403860074
+-10,350,0.8500000000000001,0.0013753050087750454
+-10,350,0.9,0.0014292620492239354
+-10,350,0.9500000000000001,0.001490413361732678
+-10,350,1.0,0.001558758946301272
+-10,400,0.0,0.0015663626484783517
+-10,400,0.05,0.0014976836708143007
+-10,400,0.1,0.00143623405922015
+-10,400,0.15000000000000002,0.0013820138136958994
+-10,400,0.2,0.0013350229342415489
+-10,400,0.25,0.0012952614208570983
+-10,400,0.30000000000000004,0.0012627292735425482
+-10,400,0.35000000000000003,0.0012374264922978976
+-10,400,0.4,0.0012193530771231476
+-10,400,0.45,0.0012085090280182975
+-10,400,0.5,0.0012048943449833474
+-10,400,0.55,0.0012085090280182977
+-10,400,0.6000000000000001,0.0012193530771231476
+-10,400,0.65,0.0012374264922978976
+-10,400,0.7000000000000001,0.0012627292735425482
+-10,400,0.75,0.0012952614208570983
+-10,400,0.8,0.0013350229342415489
+-10,400,0.8500000000000001,0.0013820138136958994
+-10,400,0.9,0.00143623405922015
+-10,400,0.9500000000000001,0.001497683670814301
+-10,400,1.0,0.0015663626484783517
+-10,450,0.0,0.0015739663506554311
+-10,450,0.05,0.0015049539798959234
+-10,450,0.1,0.0014432060692163642
+-10,450,0.15000000000000002,0.0013887226186167533
+-10,450,0.2,0.0013415036280970901
+-10,450,0.25,0.0013015490976573754
+-10,450,0.30000000000000004,0.001268859027297609
+-10,450,0.35000000000000003,0.0012434334170177903
+-10,450,0.4,0.00122527226681792
+-10,450,0.45,0.0012143755766979977
+-10,450,0.5,0.0012107433466580237
+-10,450,0.55,0.0012143755766979981
+-10,450,0.6000000000000001,0.00122527226681792
+-10,450,0.65,0.0012434334170177903
+-10,450,0.7000000000000001,0.001268859027297609
+-10,450,0.75,0.0013015490976573754
+-10,450,0.8,0.0013415036280970901
+-10,450,0.8500000000000001,0.0013887226186167533
+-10,450,0.9,0.0014432060692163642
+-10,450,0.9500000000000001,0.0015049539798959238
+-10,450,1.0,0.0015739663506554311
+-10,500,0.0,0.0015815700528325105
+-10,500,0.05,0.0015122242889775463
+-10,500,0.1,0.0014501780792125787
+-10,500,0.15000000000000002,0.0013954314235376073
+-10,500,0.2,0.0013479843219526319
+-10,500,0.25,0.0013078367744576527
+-10,500,0.30000000000000004,0.00127498878105267
+-10,500,0.35000000000000003,0.0012494403417376832
+-10,500,0.4,0.0012311914565126926
+-10,500,0.45,0.0012202421253776983
+-10,500,0.5,0.0012165923483327004
+-10,500,0.55,0.0012202421253776987
+-10,500,0.6000000000000001,0.0012311914565126926
+-10,500,0.65,0.0012494403417376832
+-10,500,0.7000000000000001,0.00127498878105267
+-10,500,0.75,0.0013078367744576527
+-10,500,0.8,0.0013479843219526319
+-10,500,0.8500000000000001,0.0013954314235376073
+-10,500,0.9,0.0014501780792125787
+-10,500,0.9500000000000001,0.0015122242889775465
+-10,500,1.0,0.0015815700528325105
+-10,550,0.0,0.0015891737550095897
+-10,550,0.05,0.0015194945980591692
+-10,550,0.1,0.0014571500892087929
+-10,550,0.15000000000000002,0.001402140228458461
+-10,550,0.2,0.0013544650158081734
+-10,550,0.25,0.0013141244512579297
+-10,550,0.30000000000000004,0.0012811185348077308
+-10,550,0.35000000000000003,0.0012554472664575757
+-10,550,0.4,0.0012371106462074652
+-10,550,0.45,0.0012261086740573987
+-10,550,0.5,0.0012224413500073767
+-10,550,0.55,0.0012261086740573991
+-10,550,0.6000000000000001,0.0012371106462074652
+-10,550,0.65,0.0012554472664575757
+-10,550,0.7000000000000001,0.0012811185348077308
+-10,550,0.75,0.0013141244512579297
+-10,550,0.8,0.0013544650158081734
+-10,550,0.8500000000000001,0.001402140228458461
+-10,550,0.9,0.0014571500892087929
+-10,550,0.9500000000000001,0.0015194945980591694
+-10,550,1.0,0.0015891737550095897
+-10,600,0.0,0.0015967774571866693
+-10,600,0.05,0.001526764907140792
+-10,600,0.1,0.0014641220992050073
+-10,600,0.15000000000000002,0.0014088490333793151
+-10,600,0.2,0.0013609457096637149
+-10,600,0.25,0.0013204121280582072
+-10,600,0.30000000000000004,0.0012872482885627919
+-10,600,0.35000000000000003,0.0012614541911774683
+-10,600,0.4,0.001243029835902238
+-10,600,0.45,0.0012319752227370993
+-10,600,0.5,0.0012282903516820532
+-10,600,0.55,0.0012319752227370996
+-10,600,0.6000000000000001,0.001243029835902238
+-10,600,0.65,0.0012614541911774683
+-10,600,0.7000000000000001,0.0012872482885627919
+-10,600,0.75,0.0013204121280582072
+-10,600,0.8,0.0013609457096637149
+-10,600,0.8500000000000001,0.0014088490333793151
+-10,600,0.9,0.0014641220992050073
+-10,600,0.9500000000000001,0.0015267649071407923
+-10,600,1.0,0.0015967774571866693
+-10,650,0.0,0.0016043811593637485
+-10,650,0.05,0.0015340352162224148
+-10,650,0.1,0.0014710941092012215
+-10,650,0.15000000000000002,0.0014155578383001689
+-10,650,0.2,0.0013674264035192561
+-10,650,0.25,0.0013266998048584843
+-10,650,0.30000000000000004,0.0012933780423178528
+-10,650,0.35000000000000003,0.001267461115897361
+-10,650,0.4,0.0012489490255970103
+-10,650,0.45,0.0012378417714167995
+-10,650,0.5,0.0012341393533567297
+-10,650,0.55,0.0012378417714168002
+-10,650,0.6000000000000001,0.0012489490255970103
+-10,650,0.65,0.001267461115897361
+-10,650,0.7000000000000001,0.0012933780423178528
+-10,650,0.75,0.0013266998048584843
+-10,650,0.8,0.0013674264035192561
+-10,650,0.8500000000000001,0.0014155578383001689
+-10,650,0.9,0.0014710941092012215
+-10,650,0.9500000000000001,0.001534035216222415
+-10,650,1.0,0.0016043811593637485
+-10,700,0.0,0.001611984861540828
+-10,700,0.05,0.0015413055253040379
+-10,700,0.1,0.0014780661191974359
+-10,700,0.15000000000000002,0.0014222666432210228
+-10,700,0.2,0.001373907097374798
+-10,700,0.25,0.0013329874816587614
+-10,700,0.30000000000000004,0.0012995077960729136
+-10,700,0.35000000000000003,0.001273468040617254
+-10,700,0.4,0.001254868215291783
+-10,700,0.45,0.0012437083200965001
+-10,700,0.5,0.0012399883550314062
+-10,700,0.55,0.0012437083200965006
+-10,700,0.6000000000000001,0.001254868215291783
+-10,700,0.65,0.001273468040617254
+-10,700,0.7000000000000001,0.0012995077960729136
+-10,700,0.75,0.0013329874816587614
+-10,700,0.8,0.001373907097374798
+-10,700,0.8500000000000001,0.0014222666432210228
+-10,700,0.9,0.0014780661191974359
+-10,700,0.9500000000000001,0.0015413055253040379
+-10,700,1.0,0.001611984861540828
+0,-400,0.0,0.0011208498768961982
+0,-400,0.05,0.0010717049207553647
+0,-400,0.1,0.0010277331178925138
+0,-400,0.15000000000000002,0.0009889344683076454
+0,-400,0.2,0.0009553089720007596
+0,-400,0.25,0.0009268566289718561
+0,-400,0.30000000000000004,0.000903577439220935
+0,-400,0.35000000000000003,0.0008854714027479965
+0,-400,0.4,0.0008725385195530405
+0,-400,0.45,0.0008647787896360667
+0,-400,0.5,0.0008621922129970754
+0,-400,0.55,0.0008647787896360669
+0,-400,0.6000000000000001,0.0008725385195530405
+0,-400,0.65,0.0008854714027479965
+0,-400,0.7000000000000001,0.000903577439220935
+0,-400,0.75,0.0009268566289718561
+0,-400,0.8,0.0009553089720007596
+0,-400,0.8500000000000001,0.0009889344683076454
+0,-400,0.9,0.0010277331178925138
+0,-400,0.9500000000000001,0.0010717049207553647
+0,-400,1.0,0.0011208498768961982
+0,-350,0.0,0.0011154088580763136
+0,-350,0.05,0.0010665024696837366
+0,-350,0.1,0.001022744122174589
+0,-350,0.15000000000000002,0.0009841338155488703
+0,-350,0.2,0.0009506715498065811
+0,-350,0.25,0.0009223573249477207
+0,-350,0.30000000000000004,0.0008991911409722896
+0,-350,0.35000000000000003,0.0008811729978802877
+0,-350,0.4,0.0008683028956717149
+0,-350,0.45,0.0008605808343465711
+0,-350,0.5,0.0008580068139048566
+0,-350,0.55,0.0008605808343465712
+0,-350,0.6000000000000001,0.0008683028956717149
+0,-350,0.65,0.0008811729978802877
+0,-350,0.7000000000000001,0.0008991911409722896
+0,-350,0.75,0.0009223573249477207
+0,-350,0.8,0.0009506715498065811
+0,-350,0.8500000000000001,0.0009841338155488703
+0,-350,0.9,0.001022744122174589
+0,-350,0.9500000000000001,0.0010665024696837366
+0,-350,1.0,0.0011154088580763136
+0,-300,0.0,0.0011099678392564292
+0,-300,0.05,0.0010613000186121086
+0,-300,0.1,0.0010177551264566641
+0,-300,0.15000000000000002,0.0009793331627900954
+0,-300,0.2,0.0009460341276124027
+0,-300,0.25,0.0009178580209235857
+0,-300,0.30000000000000004,0.0008948048427236445
+0,-300,0.35000000000000003,0.0008768745930125791
+0,-300,0.4,0.0008640672717903895
+0,-300,0.45,0.0008563828790570758
+0,-300,0.5,0.0008538214148126378
+0,-300,0.55,0.000856382879057076
+0,-300,0.6000000000000001,0.0008640672717903895
+0,-300,0.65,0.0008768745930125791
+0,-300,0.7000000000000001,0.0008948048427236445
+0,-300,0.75,0.0009178580209235857
+0,-300,0.8,0.0009460341276124027
+0,-300,0.8500000000000001,0.0009793331627900954
+0,-300,0.9,0.0010177551264566641
+0,-300,0.9500000000000001,0.0010613000186121089
+0,-300,1.0,0.0011099678392564292
+0,-250,0.0,0.0011045268204365446
+0,-250,0.05,0.0010560975675404805
+0,-250,0.1,0.0010127661307387393
+0,-250,0.15000000000000002,0.0009745325100313203
+0,-250,0.2,0.0009413967054182241
+0,-250,0.25,0.0009133587168994504
+0,-250,0.30000000000000004,0.0008904185444749991
+0,-250,0.35000000000000003,0.0008725761881448703
+0,-250,0.4,0.0008598316479090641
+0,-250,0.45,0.0008521849237675801
+0,-250,0.5,0.0008496360157204189
+0,-250,0.55,0.0008521849237675803
+0,-250,0.6000000000000001,0.0008598316479090641
+0,-250,0.65,0.0008725761881448703
+0,-250,0.7000000000000001,0.0008904185444749991
+0,-250,0.75,0.0009133587168994504
+0,-250,0.8,0.0009413967054182241
+0,-250,0.8500000000000001,0.0009745325100313203
+0,-250,0.9,0.0010127661307387393
+0,-250,0.9500000000000001,0.0010560975675404807
+0,-250,1.0,0.0011045268204365446
+0,-200,0.0,0.0010990858016166605
+0,-200,0.05,0.0010508951164688526
+0,-200,0.1,0.0010077771350208145
+0,-200,0.15000000000000002,0.0009697318572725456
+0,-200,0.2,0.0009367592832240459
+0,-200,0.25,0.0009088594128753151
+0,-200,0.30000000000000004,0.0008860322462263537
+0,-200,0.35000000000000003,0.0008682777832771615
+0,-200,0.4,0.0008555960240277387
+0,-200,0.45,0.0008479869684780848
+0,-200,0.5,0.0008454506166282001
+0,-200,0.55,0.000847986968478085
+0,-200,0.6000000000000001,0.0008555960240277387
+0,-200,0.65,0.0008682777832771615
+0,-200,0.7000000000000001,0.0008860322462263537
+0,-200,0.75,0.0009088594128753151
+0,-200,0.8,0.0009367592832240459
+0,-200,0.8500000000000001,0.0009697318572725456
+0,-200,0.9,0.0010077771350208145
+0,-200,0.9500000000000001,0.0010508951164688528
+0,-200,1.0,0.0010990858016166605
+0,-150,0.0,0.0010936447827967757
+0,-150,0.05,0.0010456926653972247
+0,-150,0.1,0.0010027881393028894
+0,-150,0.15000000000000002,0.0009649312045137705
+0,-150,0.2,0.0009321218610298673
+0,-150,0.25,0.0009043601088511799
+0,-150,0.30000000000000004,0.0008816459479777084
+0,-150,0.35000000000000003,0.0008639793784094527
+0,-150,0.4,0.0008513604001464132
+0,-150,0.45,0.0008437890131885892
+0,-150,0.5,0.0008412652175359813
+0,-150,0.55,0.0008437890131885893
+0,-150,0.6000000000000001,0.0008513604001464132
+0,-150,0.65,0.0008639793784094527
+0,-150,0.7000000000000001,0.0008816459479777084
+0,-150,0.75,0.0009043601088511799
+0,-150,0.8,0.0009321218610298673
+0,-150,0.8500000000000001,0.0009649312045137705
+0,-150,0.9,0.0010027881393028894
+0,-150,0.9500000000000001,0.001045692665397225
+0,-150,1.0,0.0010936447827967757
+0,-100,0.0,0.0010882037639768913
+0,-100,0.05,0.0010404902143255968
+0,-100,0.1,0.0009977991435849648
+0,-100,0.15000000000000002,0.0009601305517549955
+0,-100,0.2,0.0009274844388356889
+0,-100,0.25,0.0008998608048270447
+0,-100,0.30000000000000004,0.0008772596497290631
+0,-100,0.35000000000000003,0.0008596809735417441
+0,-100,0.4,0.0008471247762650878
+0,-100,0.45,0.0008395910578990938
+0,-100,0.5,0.0008370798184437625
+0,-100,0.55,0.000839591057899094
+0,-100,0.6000000000000001,0.0008471247762650878
+0,-100,0.65,0.0008596809735417441
+0,-100,0.7000000000000001,0.0008772596497290631
+0,-100,0.75,0.0008998608048270447
+0,-100,0.8,0.0009274844388356889
+0,-100,0.8500000000000001,0.0009601305517549955
+0,-100,0.9,0.0009977991435849648
+0,-100,0.9500000000000001,0.0010404902143255968
+0,-100,1.0,0.0010882037639768913
+0,-50,0.0,0.001082762745157007
+0,-50,0.05,0.0010352877632539687
+0,-50,0.1,0.00099281014786704
+0,-50,0.15000000000000002,0.0009553298989962207
+0,-50,0.2,0.0009228470166415105
+0,-50,0.25,0.0008953615008029095
+0,-50,0.30000000000000004,0.0008728733514804178
+0,-50,0.35000000000000003,0.0008553825686740354
+0,-50,0.4,0.0008428891523837624
+0,-50,0.45,0.0008353931026095984
+0,-50,0.5,0.0008328944193515438
+0,-50,0.55,0.0008353931026095986
+0,-50,0.6000000000000001,0.0008428891523837624
+0,-50,0.65,0.0008553825686740354
+0,-50,0.7000000000000001,0.0008728733514804178
+0,-50,0.75,0.0008953615008029095
+0,-50,0.8,0.0009228470166415105
+0,-50,0.8500000000000001,0.0009553298989962207
+0,-50,0.9,0.00099281014786704
+0,-50,0.9500000000000001,0.001035287763253969
+0,-50,1.0,0.001082762745157007
+0,0,0.0,0.0010773217263371224
+0,0,0.05,0.0010300853121823408
+0,0,0.1,0.0009878211521491152
+0,0,0.15000000000000002,0.0009505292462374456
+0,0,0.2,0.0009182095944473321
+0,0,0.25,0.0008908621967787743
+0,0,0.30000000000000004,0.0008684870532317725
+0,0,0.35000000000000003,0.0008510841638063268
+0,0,0.4,0.000838653528502437
+0,0,0.45,0.0008311951473201029
+0,0,0.5,0.000828709020259325
+0,0,0.55,0.000831195147320103
+0,0,0.6000000000000001,0.000838653528502437
+0,0,0.65,0.0008510841638063268
+0,0,0.7000000000000001,0.0008684870532317725
+0,0,0.75,0.0008908621967787743
+0,0,0.8,0.0009182095944473321
+0,0,0.8500000000000001,0.0009505292462374456
+0,0,0.9,0.0009878211521491152
+0,0,0.9500000000000001,0.001030085312182341
+0,0,1.0,0.0010773217263371224
+0,50,0.0,0.001082762745157007
+0,50,0.05,0.0010352877632539687
+0,50,0.1,0.00099281014786704
+0,50,0.15000000000000002,0.0009553298989962207
+0,50,0.2,0.0009228470166415105
+0,50,0.25,0.0008953615008029095
+0,50,0.30000000000000004,0.0008728733514804178
+0,50,0.35000000000000003,0.0008553825686740354
+0,50,0.4,0.0008428891523837624
+0,50,0.45,0.0008353931026095984
+0,50,0.5,0.0008328944193515438
+0,50,0.55,0.0008353931026095986
+0,50,0.6000000000000001,0.0008428891523837624
+0,50,0.65,0.0008553825686740354
+0,50,0.7000000000000001,0.0008728733514804178
+0,50,0.75,0.0008953615008029095
+0,50,0.8,0.0009228470166415105
+0,50,0.8500000000000001,0.0009553298989962207
+0,50,0.9,0.00099281014786704
+0,50,0.9500000000000001,0.001035287763253969
+0,50,1.0,0.001082762745157007
+0,100,0.0,0.0010882037639768913
+0,100,0.05,0.0010404902143255968
+0,100,0.1,0.0009977991435849648
+0,100,0.15000000000000002,0.0009601305517549955
+0,100,0.2,0.0009274844388356889
+0,100,0.25,0.0008998608048270447
+0,100,0.30000000000000004,0.0008772596497290631
+0,100,0.35000000000000003,0.0008596809735417441
+0,100,0.4,0.0008471247762650878
+0,100,0.45,0.0008395910578990938
+0,100,0.5,0.0008370798184437625
+0,100,0.55,0.000839591057899094
+0,100,0.6000000000000001,0.0008471247762650878
+0,100,0.65,0.0008596809735417441
+0,100,0.7000000000000001,0.0008772596497290631
+0,100,0.75,0.0008998608048270447
+0,100,0.8,0.0009274844388356889
+0,100,0.8500000000000001,0.0009601305517549955
+0,100,0.9,0.0009977991435849648
+0,100,0.9500000000000001,0.0010404902143255968
+0,100,1.0,0.0010882037639768913
+0,150,0.0,0.0010936447827967757
+0,150,0.05,0.0010456926653972247
+0,150,0.1,0.0010027881393028894
+0,150,0.15000000000000002,0.0009649312045137705
+0,150,0.2,0.0009321218610298673
+0,150,0.25,0.0009043601088511799
+0,150,0.30000000000000004,0.0008816459479777084
+0,150,0.35000000000000003,0.0008639793784094527
+0,150,0.4,0.0008513604001464132
+0,150,0.45,0.0008437890131885892
+0,150,0.5,0.0008412652175359813
+0,150,0.55,0.0008437890131885893
+0,150,0.6000000000000001,0.0008513604001464132
+0,150,0.65,0.0008639793784094527
+0,150,0.7000000000000001,0.0008816459479777084
+0,150,0.75,0.0009043601088511799
+0,150,0.8,0.0009321218610298673
+0,150,0.8500000000000001,0.0009649312045137705
+0,150,0.9,0.0010027881393028894
+0,150,0.9500000000000001,0.001045692665397225
+0,150,1.0,0.0010936447827967757
+0,200,0.0,0.0010990858016166605
+0,200,0.05,0.0010508951164688526
+0,200,0.1,0.0010077771350208145
+0,200,0.15000000000000002,0.0009697318572725456
+0,200,0.2,0.0009367592832240459
+0,200,0.25,0.0009088594128753151
+0,200,0.30000000000000004,0.0008860322462263537
+0,200,0.35000000000000003,0.0008682777832771615
+0,200,0.4,0.0008555960240277387
+0,200,0.45,0.0008479869684780848
+0,200,0.5,0.0008454506166282001
+0,200,0.55,0.000847986968478085
+0,200,0.6000000000000001,0.0008555960240277387
+0,200,0.65,0.0008682777832771615
+0,200,0.7000000000000001,0.0008860322462263537
+0,200,0.75,0.0009088594128753151
+0,200,0.8,0.0009367592832240459
+0,200,0.8500000000000001,0.0009697318572725456
+0,200,0.9,0.0010077771350208145
+0,200,0.9500000000000001,0.0010508951164688528
+0,200,1.0,0.0010990858016166605
+0,250,0.0,0.0011045268204365446
+0,250,0.05,0.0010560975675404805
+0,250,0.1,0.0010127661307387393
+0,250,0.15000000000000002,0.0009745325100313203
+0,250,0.2,0.0009413967054182241
+0,250,0.25,0.0009133587168994504
+0,250,0.30000000000000004,0.0008904185444749991
+0,250,0.35000000000000003,0.0008725761881448703
+0,250,0.4,0.0008598316479090641
+0,250,0.45,0.0008521849237675801
+0,250,0.5,0.0008496360157204189
+0,250,0.55,0.0008521849237675803
+0,250,0.6000000000000001,0.0008598316479090641
+0,250,0.65,0.0008725761881448703
+0,250,0.7000000000000001,0.0008904185444749991
+0,250,0.75,0.0009133587168994504
+0,250,0.8,0.0009413967054182241
+0,250,0.8500000000000001,0.0009745325100313203
+0,250,0.9,0.0010127661307387393
+0,250,0.9500000000000001,0.0010560975675404807
+0,250,1.0,0.0011045268204365446
+0,300,0.0,0.0011099678392564292
+0,300,0.05,0.0010613000186121086
+0,300,0.1,0.0010177551264566641
+0,300,0.15000000000000002,0.0009793331627900954
+0,300,0.2,0.0009460341276124027
+0,300,0.25,0.0009178580209235857
+0,300,0.30000000000000004,0.0008948048427236445
+0,300,0.35000000000000003,0.0008768745930125791
+0,300,0.4,0.0008640672717903895
+0,300,0.45,0.0008563828790570758
+0,300,0.5,0.0008538214148126378
+0,300,0.55,0.000856382879057076
+0,300,0.6000000000000001,0.0008640672717903895
+0,300,0.65,0.0008768745930125791
+0,300,0.7000000000000001,0.0008948048427236445
+0,300,0.75,0.0009178580209235857
+0,300,0.8,0.0009460341276124027
+0,300,0.8500000000000001,0.0009793331627900954
+0,300,0.9,0.0010177551264566641
+0,300,0.9500000000000001,0.0010613000186121089
+0,300,1.0,0.0011099678392564292
+0,350,0.0,0.0011154088580763136
+0,350,0.05,0.0010665024696837366
+0,350,0.1,0.001022744122174589
+0,350,0.15000000000000002,0.0009841338155488703
+0,350,0.2,0.0009506715498065811
+0,350,0.25,0.0009223573249477207
+0,350,0.30000000000000004,0.0008991911409722896
+0,350,0.35000000000000003,0.0008811729978802877
+0,350,0.4,0.0008683028956717149
+0,350,0.45,0.0008605808343465711
+0,350,0.5,0.0008580068139048566
+0,350,0.55,0.0008605808343465712
+0,350,0.6000000000000001,0.0008683028956717149
+0,350,0.65,0.0008811729978802877
+0,350,0.7000000000000001,0.0008991911409722896
+0,350,0.75,0.0009223573249477207
+0,350,0.8,0.0009506715498065811
+0,350,0.8500000000000001,0.0009841338155488703
+0,350,0.9,0.001022744122174589
+0,350,0.9500000000000001,0.0010665024696837366
+0,350,1.0,0.0011154088580763136
+0,400,0.0,0.0011208498768961982
+0,400,0.05,0.0010717049207553647
+0,400,0.1,0.0010277331178925138
+0,400,0.15000000000000002,0.0009889344683076454
+0,400,0.2,0.0009553089720007596
+0,400,0.25,0.0009268566289718561
+0,400,0.30000000000000004,0.000903577439220935
+0,400,0.35000000000000003,0.0008854714027479965
+0,400,0.4,0.0008725385195530405
+0,400,0.45,0.0008647787896360667
+0,400,0.5,0.0008621922129970754
+0,400,0.55,0.0008647787896360669
+0,400,0.6000000000000001,0.0008725385195530405
+0,400,0.65,0.0008854714027479965
+0,400,0.7000000000000001,0.000903577439220935
+0,400,0.75,0.0009268566289718561
+0,400,0.8,0.0009553089720007596
+0,400,0.8500000000000001,0.0009889344683076454
+0,400,0.9,0.0010277331178925138
+0,400,0.9500000000000001,0.0010717049207553647
+0,400,1.0,0.0011208498768961982
+0,450,0.0,0.0011262908957160825
+0,450,0.05,0.0010769073718269926
+0,450,0.1,0.0010327221136104386
+0,450,0.15000000000000002,0.0009937351210664205
+0,450,0.2,0.0009599463941949381
+0,450,0.25,0.0009313559329959912
+0,450,0.30000000000000004,0.0009079637374695802
+0,450,0.35000000000000003,0.0008897698076157051
+0,450,0.4,0.0008767741434343658
+0,450,0.45,0.000868976744925562
+0,450,0.5,0.0008663776120892942
+0,450,0.55,0.0008689767449255622
+0,450,0.6000000000000001,0.0008767741434343658
+0,450,0.65,0.0008897698076157051
+0,450,0.7000000000000001,0.0009079637374695802
+0,450,0.75,0.0009313559329959912
+0,450,0.8,0.0009599463941949381
+0,450,0.8500000000000001,0.0009937351210664205
+0,450,0.9,0.0010327221136104386
+0,450,0.9500000000000001,0.0010769073718269928
+0,450,1.0,0.0011262908957160825
+0,500,0.0,0.001131731914535967
+0,500,0.05,0.0010821098228986207
+0,500,0.1,0.0010377111093283634
+0,500,0.15000000000000002,0.0009985357738251956
+0,500,0.2,0.0009645838163891166
+0,500,0.25,0.0009358552370201265
+0,500,0.30000000000000004,0.0009123500357182258
+0,500,0.35000000000000003,0.0008940682124834138
+0,500,0.4,0.0008810097673156913
+0,500,0.45,0.0008731747002150577
+0,500,0.5,0.0008705630111815132
+0,500,0.55,0.0008731747002150578
+0,500,0.6000000000000001,0.0008810097673156913
+0,500,0.65,0.0008940682124834138
+0,500,0.7000000000000001,0.0009123500357182258
+0,500,0.75,0.0009358552370201265
+0,500,0.8,0.0009645838163891166
+0,500,0.8500000000000001,0.0009985357738251956
+0,500,0.9,0.0010377111093283634
+0,500,0.9500000000000001,0.001082109822898621
+0,500,1.0,0.001131731914535967
+0,550,0.0,0.0011371729333558515
+0,550,0.05,0.0010873122739702484
+0,550,0.1,0.0010427001050462882
+0,550,0.15000000000000002,0.0010033364265839703
+0,550,0.2,0.000969221238583295
+0,550,0.25,0.0009403545410442617
+0,550,0.30000000000000004,0.000916736333966871
+0,550,0.35000000000000003,0.0008983666173511226
+0,550,0.4,0.0008852453911970166
+0,550,0.45,0.0008773726555045529
+0,550,0.5,0.0008747484102737319
+0,550,0.55,0.0008773726555045532
+0,550,0.6000000000000001,0.0008852453911970166
+0,550,0.65,0.0008983666173511226
+0,550,0.7000000000000001,0.000916736333966871
+0,550,0.75,0.0009403545410442617
+0,550,0.8,0.000969221238583295
+0,550,0.8500000000000001,0.0010033364265839703
+0,550,0.9,0.0010427001050462882
+0,550,0.9500000000000001,0.0010873122739702486
+0,550,1.0,0.0011371729333558515
+0,600,0.0,0.001142613952175736
+0,600,0.05,0.0010925147250418765
+0,600,0.1,0.0010476891007642132
+0,600,0.15000000000000002,0.0010081370793427454
+0,600,0.2,0.0009738586607774734
+0,600,0.25,0.0009448538450683969
+0,600,0.30000000000000004,0.0009211226322155164
+0,600,0.35000000000000003,0.0009026650222188314
+0,600,0.4,0.0008894810150783422
+0,600,0.45,0.0008815706107940486
+0,600,0.5,0.0008789338093659507
+0,600,0.55,0.0008815706107940488
+0,600,0.6000000000000001,0.0008894810150783422
+0,600,0.65,0.0009026650222188314
+0,600,0.7000000000000001,0.0009211226322155164
+0,600,0.75,0.0009448538450683969
+0,600,0.8,0.0009738586607774734
+0,600,0.8500000000000001,0.0010081370793427454
+0,600,0.9,0.0010476891007642132
+0,600,0.9500000000000001,0.0010925147250418767
+0,600,1.0,0.001142613952175736
+0,650,0.0,0.0011480549709956204
+0,650,0.05,0.0010977171761135044
+0,650,0.1,0.0010526780964821379
+0,650,0.15000000000000002,0.0010129377321015202
+0,650,0.2,0.0009784960829716518
+0,650,0.25,0.0009493531490925322
+0,650,0.30000000000000004,0.0009255089304641616
+0,650,0.35000000000000003,0.00090696342708654
+0,650,0.4,0.0008937166389596676
+0,650,0.45,0.000885768566083544
+0,650,0.5,0.0008831192084581695
+0,650,0.55,0.0008857685660835441
+0,650,0.6000000000000001,0.0008937166389596676
+0,650,0.65,0.00090696342708654
+0,650,0.7000000000000001,0.0009255089304641616
+0,650,0.75,0.0009493531490925322
+0,650,0.8,0.0009784960829716518
+0,650,0.8500000000000001,0.0010129377321015202
+0,650,0.9,0.0010526780964821379
+0,650,0.9500000000000001,0.0010977171761135046
+0,650,1.0,0.0011480549709956204
+0,700,0.0,0.001153495989815505
+0,700,0.05,0.0011029196271851326
+0,700,0.1,0.0010576670922000629
+0,700,0.15000000000000002,0.0010177383848602953
+0,700,0.2,0.0009831335051658304
+0,700,0.25,0.0009538524531166675
+0,700,0.30000000000000004,0.000929895228712807
+0,700,0.35000000000000003,0.0009112618319542488
+0,700,0.4,0.000897952262840993
+0,700,0.45,0.0008899665213730396
+0,700,0.5,0.0008873046075503884
+0,700,0.55,0.0008899665213730397
+0,700,0.6000000000000001,0.000897952262840993
+0,700,0.65,0.0009112618319542488
+0,700,0.7000000000000001,0.000929895228712807
+0,700,0.75,0.0009538524531166675
+0,700,0.8,0.0009831335051658304
+0,700,0.8500000000000001,0.0010177383848602953
+0,700,0.9,0.0010576670922000629
+0,700,0.9500000000000001,0.0011029196271851328
+0,700,1.0,0.001153495989815505
+10,-400,0.0,0.0008212376645836033
+10,-400,0.05,0.0007852295515980145
+10,-400,0.1,0.0007530117662951191
+10,-400,0.15000000000000002,0.0007245843086749176
+10,-400,0.2,0.0006999471787374094
+10,-400,0.25,0.0006791003764825949
+10,-400,0.30000000000000004,0.000662043901910474
+10,-400,0.35000000000000003,0.0006487777550210465
+10,-400,0.4,0.0006393019358143126
+10,-400,0.45,0.0006336164442902723
+10,-400,0.5,0.0006317212804489255
+10,-400,0.55,0.0006336164442902724
+10,-400,0.6000000000000001,0.0006393019358143126
+10,-400,0.65,0.0006487777550210465
+10,-400,0.7000000000000001,0.000662043901910474
+10,-400,0.75,0.0006791003764825949
+10,-400,0.8,0.0006999471787374094
+10,-400,0.8500000000000001,0.0007245843086749176
+10,-400,0.9,0.0007530117662951191
+10,-400,0.9500000000000001,0.0007852295515980145
+10,-400,1.0,0.0008212376645836033
+10,-350,0.0,0.0008172510739788284
+10,-350,0.05,0.0007814177576582182
+10,-350,0.1,0.0007493563693713564
+10,-350,0.15000000000000002,0.0007210669091182432
+10,-350,0.2,0.0006965493768988783
+10,-350,0.25,0.0006758037727132619
+10,-350,0.30000000000000004,0.0006588300965613939
+10,-350,0.35000000000000003,0.0006456283484432743
+10,-350,0.4,0.0006361985283589032
+10,-350,0.45,0.0006305406363082806
+10,-350,0.5,0.0006286546722914063
+10,-350,0.55,0.0006305406363082807
+10,-350,0.6000000000000001,0.0006361985283589032
+10,-350,0.65,0.0006456283484432743
+10,-350,0.7000000000000001,0.0006588300965613939
+10,-350,0.75,0.0006758037727132619
+10,-350,0.8,0.0006965493768988783
+10,-350,0.8500000000000001,0.0007210669091182432
+10,-350,0.9,0.0007493563693713564
+10,-350,0.9500000000000001,0.0007814177576582182
+10,-350,1.0,0.0008172510739788284
+10,-300,0.0,0.0008132644833740536
+10,-300,0.05,0.000777605963718422
+10,-300,0.1,0.0007457009724475937
+10,-300,0.15000000000000002,0.0007175495095615688
+10,-300,0.2,0.0006931515750603472
+10,-300,0.25,0.000672507168943929
+10,-300,0.30000000000000004,0.0006556162912123141
+10,-300,0.35000000000000003,0.0006424789418655023
+10,-300,0.4,0.000633095120903494
+10,-300,0.45,0.0006274648283262891
+10,-300,0.5,0.0006255880641338874
+10,-300,0.55,0.0006274648283262892
+10,-300,0.6000000000000001,0.000633095120903494
+10,-300,0.65,0.0006424789418655023
+10,-300,0.7000000000000001,0.0006556162912123141
+10,-300,0.75,0.000672507168943929
+10,-300,0.8,0.0006931515750603472
+10,-300,0.8500000000000001,0.0007175495095615688
+10,-300,0.9,0.0007457009724475937
+10,-300,0.9500000000000001,0.0007776059637184221
+10,-300,1.0,0.0008132644833740536
+10,-250,0.0,0.0008092778927692788
+10,-250,0.05,0.0007737941697786258
+10,-250,0.1,0.0007420455755238309
+10,-250,0.15000000000000002,0.0007140321100048944
+10,-250,0.2,0.000689753773221816
+10,-250,0.25,0.0006692105651745959
+10,-250,0.30000000000000004,0.000652402485863234
+10,-250,0.35000000000000003,0.0006393295352877302
+10,-250,0.4,0.0006299917134480848
+10,-250,0.45,0.0006243890203442974
+10,-250,0.5,0.0006225214559763682
+10,-250,0.55,0.0006243890203442975
+10,-250,0.6000000000000001,0.0006299917134480848
+10,-250,0.65,0.0006393295352877302
+10,-250,0.7000000000000001,0.000652402485863234
+10,-250,0.75,0.0006692105651745959
+10,-250,0.8,0.000689753773221816
+10,-250,0.8500000000000001,0.0007140321100048944
+10,-250,0.9,0.0007420455755238309
+10,-250,0.9500000000000001,0.0007737941697786259
+10,-250,1.0,0.0008092778927692788
+10,-200,0.0,0.0008052913021645042
+10,-200,0.05,0.0007699823758388297
+10,-200,0.1,0.0007383901786000682
+10,-200,0.15000000000000002,0.0007105147104482201
+10,-200,0.2,0.000686355971383285
+10,-200,0.25,0.000665913961405263
+10,-200,0.30000000000000004,0.000649188680514154
+10,-200,0.35000000000000003,0.0006361801287099581
+10,-200,0.4,0.0006268883059926756
+10,-200,0.45,0.0006213132123623058
+10,-200,0.5,0.0006194548478188493
+10,-200,0.55,0.0006213132123623059
+10,-200,0.6000000000000001,0.0006268883059926756
+10,-200,0.65,0.0006361801287099581
+10,-200,0.7000000000000001,0.000649188680514154
+10,-200,0.75,0.000665913961405263
+10,-200,0.8,0.000686355971383285
+10,-200,0.8500000000000001,0.0007105147104482201
+10,-200,0.9,0.0007383901786000682
+10,-200,0.9500000000000001,0.0007699823758388298
+10,-200,1.0,0.0008052913021645042
+10,-150,0.0,0.0008013047115597293
+10,-150,0.05,0.0007661705818990333
+10,-150,0.1,0.0007347347816763055
+10,-150,0.15000000000000002,0.0007069973108915457
+10,-150,0.2,0.0006829581695447538
+10,-150,0.25,0.0006626173576359299
+10,-150,0.30000000000000004,0.000645974875165074
+10,-150,0.35000000000000003,0.000633030722132186
+10,-150,0.4,0.0006237848985372661
+10,-150,0.45,0.0006182374043803142
+10,-150,0.5,0.0006163882396613301
+10,-150,0.55,0.0006182374043803142
+10,-150,0.6000000000000001,0.0006237848985372661
+10,-150,0.65,0.000633030722132186
+10,-150,0.7000000000000001,0.000645974875165074
+10,-150,0.75,0.0006626173576359299
+10,-150,0.8,0.0006829581695447538
+10,-150,0.8500000000000001,0.0007069973108915457
+10,-150,0.9,0.0007347347816763055
+10,-150,0.9500000000000001,0.0007661705818990335
+10,-150,1.0,0.0008013047115597293
+10,-100,0.0,0.0007973181209549546
+10,-100,0.05,0.0007623587879592372
+10,-100,0.1,0.0007310793847525428
+10,-100,0.15000000000000002,0.0007034799113348714
+10,-100,0.2,0.0006795603677062227
+10,-100,0.25,0.000659320753866597
+10,-100,0.30000000000000004,0.0006427610698159941
+10,-100,0.35000000000000003,0.000629881315554414
+10,-100,0.4,0.0006206814910818569
+10,-100,0.45,0.0006151615963983226
+10,-100,0.5,0.0006133216315038112
+10,-100,0.55,0.0006151615963983227
+10,-100,0.6000000000000001,0.0006206814910818569
+10,-100,0.65,0.000629881315554414
+10,-100,0.7000000000000001,0.0006427610698159941
+10,-100,0.75,0.000659320753866597
+10,-100,0.8,0.0006795603677062227
+10,-100,0.8500000000000001,0.0007034799113348714
+10,-100,0.9,0.0007310793847525428
+10,-100,0.9500000000000001,0.0007623587879592373
+10,-100,1.0,0.0007973181209549546
+10,-50,0.0,0.0007933315303501799
+10,-50,0.05,0.0007585469940194411
+10,-50,0.1,0.0007274239878287801
+10,-50,0.15000000000000002,0.000699962511778197
+10,-50,0.2,0.0006761625658676917
+10,-50,0.25,0.000656024150097264
+10,-50,0.30000000000000004,0.0006395472644669142
+10,-50,0.35000000000000003,0.000626731908976642
+10,-50,0.4,0.0006175780836264476
+10,-50,0.45,0.000612085788416331
+10,-50,0.5,0.0006102550233462921
+10,-50,0.55,0.0006120857884163311
+10,-50,0.6000000000000001,0.0006175780836264476
+10,-50,0.65,0.000626731908976642
+10,-50,0.7000000000000001,0.0006395472644669142
+10,-50,0.75,0.000656024150097264
+10,-50,0.8,0.0006761625658676917
+10,-50,0.8500000000000001,0.000699962511778197
+10,-50,0.9,0.0007274239878287801
+10,-50,0.9500000000000001,0.0007585469940194411
+10,-50,1.0,0.0007933315303501799
+10,0,0.0,0.000789344939745405
+10,0,0.05,0.0007547352000796449
+10,0,0.1,0.0007237685909050174
+10,0,0.15000000000000002,0.0006964451122215227
+10,0,0.2,0.0006727647640291605
+10,0,0.25,0.000652727546327931
+10,0,0.30000000000000004,0.0006363334591178342
+10,0,0.35000000000000003,0.0006235825023988698
+10,0,0.4,0.0006144746761710383
+10,0,0.45,0.0006090099804343394
+10,0,0.5,0.000607188415188773
+10,0,0.55,0.0006090099804343395
+10,0,0.6000000000000001,0.0006144746761710383
+10,0,0.65,0.0006235825023988698
+10,0,0.7000000000000001,0.0006363334591178342
+10,0,0.75,0.000652727546327931
+10,0,0.8,0.0006727647640291605
+10,0,0.8500000000000001,0.0006964451122215227
+10,0,0.9,0.0007237685909050174
+10,0,0.9500000000000001,0.000754735200079645
+10,0,1.0,0.000789344939745405
+10,50,0.0,0.0007933315303501799
+10,50,0.05,0.0007585469940194411
+10,50,0.1,0.0007274239878287801
+10,50,0.15000000000000002,0.000699962511778197
+10,50,0.2,0.0006761625658676917
+10,50,0.25,0.000656024150097264
+10,50,0.30000000000000004,0.0006395472644669142
+10,50,0.35000000000000003,0.000626731908976642
+10,50,0.4,0.0006175780836264476
+10,50,0.45,0.000612085788416331
+10,50,0.5,0.0006102550233462921
+10,50,0.55,0.0006120857884163311
+10,50,0.6000000000000001,0.0006175780836264476
+10,50,0.65,0.000626731908976642
+10,50,0.7000000000000001,0.0006395472644669142
+10,50,0.75,0.000656024150097264
+10,50,0.8,0.0006761625658676917
+10,50,0.8500000000000001,0.000699962511778197
+10,50,0.9,0.0007274239878287801
+10,50,0.9500000000000001,0.0007585469940194411
+10,50,1.0,0.0007933315303501799
+10,100,0.0,0.0007973181209549546
+10,100,0.05,0.0007623587879592372
+10,100,0.1,0.0007310793847525428
+10,100,0.15000000000000002,0.0007034799113348714
+10,100,0.2,0.0006795603677062227
+10,100,0.25,0.000659320753866597
+10,100,0.30000000000000004,0.0006427610698159941
+10,100,0.35000000000000003,0.000629881315554414
+10,100,0.4,0.0006206814910818569
+10,100,0.45,0.0006151615963983226
+10,100,0.5,0.0006133216315038112
+10,100,0.55,0.0006151615963983227
+10,100,0.6000000000000001,0.0006206814910818569
+10,100,0.65,0.000629881315554414
+10,100,0.7000000000000001,0.0006427610698159941
+10,100,0.75,0.000659320753866597
+10,100,0.8,0.0006795603677062227
+10,100,0.8500000000000001,0.0007034799113348714
+10,100,0.9,0.0007310793847525428
+10,100,0.9500000000000001,0.0007623587879592373
+10,100,1.0,0.0007973181209549546
+10,150,0.0,0.0008013047115597293
+10,150,0.05,0.0007661705818990333
+10,150,0.1,0.0007347347816763055
+10,150,0.15000000000000002,0.0007069973108915457
+10,150,0.2,0.0006829581695447538
+10,150,0.25,0.0006626173576359299
+10,150,0.30000000000000004,0.000645974875165074
+10,150,0.35000000000000003,0.000633030722132186
+10,150,0.4,0.0006237848985372661
+10,150,0.45,0.0006182374043803142
+10,150,0.5,0.0006163882396613301
+10,150,0.55,0.0006182374043803142
+10,150,0.6000000000000001,0.0006237848985372661
+10,150,0.65,0.000633030722132186
+10,150,0.7000000000000001,0.000645974875165074
+10,150,0.75,0.0006626173576359299
+10,150,0.8,0.0006829581695447538
+10,150,0.8500000000000001,0.0007069973108915457
+10,150,0.9,0.0007347347816763055
+10,150,0.9500000000000001,0.0007661705818990335
+10,150,1.0,0.0008013047115597293
+10,200,0.0,0.0008052913021645042
+10,200,0.05,0.0007699823758388297
+10,200,0.1,0.0007383901786000682
+10,200,0.15000000000000002,0.0007105147104482201
+10,200,0.2,0.000686355971383285
+10,200,0.25,0.000665913961405263
+10,200,0.30000000000000004,0.000649188680514154
+10,200,0.35000000000000003,0.0006361801287099581
+10,200,0.4,0.0006268883059926756
+10,200,0.45,0.0006213132123623058
+10,200,0.5,0.0006194548478188493
+10,200,0.55,0.0006213132123623059
+10,200,0.6000000000000001,0.0006268883059926756
+10,200,0.65,0.0006361801287099581
+10,200,0.7000000000000001,0.000649188680514154
+10,200,0.75,0.000665913961405263
+10,200,0.8,0.000686355971383285
+10,200,0.8500000000000001,0.0007105147104482201
+10,200,0.9,0.0007383901786000682
+10,200,0.9500000000000001,0.0007699823758388298
+10,200,1.0,0.0008052913021645042
+10,250,0.0,0.0008092778927692788
+10,250,0.05,0.0007737941697786258
+10,250,0.1,0.0007420455755238309
+10,250,0.15000000000000002,0.0007140321100048944
+10,250,0.2,0.000689753773221816
+10,250,0.25,0.0006692105651745959
+10,250,0.30000000000000004,0.000652402485863234
+10,250,0.35000000000000003,0.0006393295352877302
+10,250,0.4,0.0006299917134480848
+10,250,0.45,0.0006243890203442974
+10,250,0.5,0.0006225214559763682
+10,250,0.55,0.0006243890203442975
+10,250,0.6000000000000001,0.0006299917134480848
+10,250,0.65,0.0006393295352877302
+10,250,0.7000000000000001,0.000652402485863234
+10,250,0.75,0.0006692105651745959
+10,250,0.8,0.000689753773221816
+10,250,0.8500000000000001,0.0007140321100048944
+10,250,0.9,0.0007420455755238309
+10,250,0.9500000000000001,0.0007737941697786259
+10,250,1.0,0.0008092778927692788
+10,300,0.0,0.0008132644833740536
+10,300,0.05,0.000777605963718422
+10,300,0.1,0.0007457009724475937
+10,300,0.15000000000000002,0.0007175495095615688
+10,300,0.2,0.0006931515750603472
+10,300,0.25,0.000672507168943929
+10,300,0.30000000000000004,0.0006556162912123141
+10,300,0.35000000000000003,0.0006424789418655023
+10,300,0.4,0.000633095120903494
+10,300,0.45,0.0006274648283262891
+10,300,0.5,0.0006255880641338874
+10,300,0.55,0.0006274648283262892
+10,300,0.6000000000000001,0.000633095120903494
+10,300,0.65,0.0006424789418655023
+10,300,0.7000000000000001,0.0006556162912123141
+10,300,0.75,0.000672507168943929
+10,300,0.8,0.0006931515750603472
+10,300,0.8500000000000001,0.0007175495095615688
+10,300,0.9,0.0007457009724475937
+10,300,0.9500000000000001,0.0007776059637184221
+10,300,1.0,0.0008132644833740536
+10,350,0.0,0.0008172510739788284
+10,350,0.05,0.0007814177576582182
+10,350,0.1,0.0007493563693713564
+10,350,0.15000000000000002,0.0007210669091182432
+10,350,0.2,0.0006965493768988783
+10,350,0.25,0.0006758037727132619
+10,350,0.30000000000000004,0.0006588300965613939
+10,350,0.35000000000000003,0.0006456283484432743
+10,350,0.4,0.0006361985283589032
+10,350,0.45,0.0006305406363082806
+10,350,0.5,0.0006286546722914063
+10,350,0.55,0.0006305406363082807
+10,350,0.6000000000000001,0.0006361985283589032
+10,350,0.65,0.0006456283484432743
+10,350,0.7000000000000001,0.0006588300965613939
+10,350,0.75,0.0006758037727132619
+10,350,0.8,0.0006965493768988783
+10,350,0.8500000000000001,0.0007210669091182432
+10,350,0.9,0.0007493563693713564
+10,350,0.9500000000000001,0.0007814177576582182
+10,350,1.0,0.0008172510739788284
+10,400,0.0,0.0008212376645836033
+10,400,0.05,0.0007852295515980145
+10,400,0.1,0.0007530117662951191
+10,400,0.15000000000000002,0.0007245843086749176
+10,400,0.2,0.0006999471787374094
+10,400,0.25,0.0006791003764825949
+10,400,0.30000000000000004,0.000662043901910474
+10,400,0.35000000000000003,0.0006487777550210465
+10,400,0.4,0.0006393019358143126
+10,400,0.45,0.0006336164442902723
+10,400,0.5,0.0006317212804489255
+10,400,0.55,0.0006336164442902724
+10,400,0.6000000000000001,0.0006393019358143126
+10,400,0.65,0.0006487777550210465
+10,400,0.7000000000000001,0.000662043901910474
+10,400,0.75,0.0006791003764825949
+10,400,0.8,0.0006999471787374094
+10,400,0.8500000000000001,0.0007245843086749176
+10,400,0.9,0.0007530117662951191
+10,400,0.9500000000000001,0.0007852295515980145
+10,400,1.0,0.0008212376645836033
+10,450,0.0,0.0008252242551883779
+10,450,0.05,0.0007890413455378105
+10,450,0.1,0.0007566671632188818
+10,450,0.15000000000000002,0.0007281017082315918
+10,450,0.2,0.0007033449805759406
+10,450,0.25,0.0006823969802519279
+10,450,0.30000000000000004,0.0006652577072595538
+10,450,0.35000000000000003,0.0006519271615988185
+10,450,0.4,0.0006424053432697219
+10,450,0.45,0.0006366922522722639
+10,450,0.5,0.0006347878886064444
+10,450,0.55,0.000636692252272264
+10,450,0.6000000000000001,0.0006424053432697219
+10,450,0.65,0.0006519271615988185
+10,450,0.7000000000000001,0.0006652577072595538
+10,450,0.75,0.0006823969802519279
+10,450,0.8,0.0007033449805759406
+10,450,0.8500000000000001,0.0007281017082315918
+10,450,0.9,0.0007566671632188818
+10,450,0.9500000000000001,0.0007890413455378106
+10,450,1.0,0.0008252242551883779
+10,500,0.0,0.0008292108457931528
+10,500,0.05,0.0007928531394776067
+10,500,0.1,0.0007603225601426445
+10,500,0.15000000000000002,0.0007316191077882664
+10,500,0.2,0.0007067427824144716
+10,500,0.25,0.0006856935840212608
+10,500,0.30000000000000004,0.0006684715126086338
+10,500,0.35000000000000003,0.0006550765681765905
+10,500,0.4,0.0006455087507251313
+10,500,0.45,0.0006397680602542556
+10,500,0.5,0.0006378544967639636
+10,500,0.55,0.0006397680602542557
+10,500,0.6000000000000001,0.0006455087507251313
+10,500,0.65,0.0006550765681765905
+10,500,0.7000000000000001,0.0006684715126086338
+10,500,0.75,0.0006856935840212608
+10,500,0.8,0.0007067427824144716
+10,500,0.8500000000000001,0.0007316191077882664
+10,500,0.9,0.0007603225601426445
+10,500,0.9500000000000001,0.0007928531394776069
+10,500,1.0,0.0008292108457931528
+10,550,0.0,0.0008331974363979275
+10,550,0.05,0.0007966649334174028
+10,550,0.1,0.0007639779570664072
+10,550,0.15000000000000002,0.0007351365073449405
+10,550,0.2,0.0007101405842530028
+10,550,0.25,0.0006889901877905938
+10,550,0.30000000000000004,0.0006716853179577139
+10,550,0.35000000000000003,0.0006582259747543625
+10,550,0.4,0.0006486121581805405
+10,550,0.45,0.000642843868236247
+10,550,0.5,0.0006409211049214827
+10,550,0.55,0.0006428438682362472
+10,550,0.6000000000000001,0.0006486121581805405
+10,550,0.65,0.0006582259747543625
+10,550,0.7000000000000001,0.0006716853179577139
+10,550,0.75,0.0006889901877905938
+10,550,0.8,0.0007101405842530028
+10,550,0.8500000000000001,0.0007351365073449405
+10,550,0.9,0.0007639779570664072
+10,550,0.9500000000000001,0.000796664933417403
+10,550,1.0,0.0008331974363979275
+10,600,0.0,0.0008371840270027024
+10,600,0.05,0.0008004767273571992
+10,600,0.1,0.00076763335399017
+10,600,0.15000000000000002,0.000738653906901615
+10,600,0.2,0.000713538386091534
+10,600,0.25,0.0006922867915599268
+10,600,0.30000000000000004,0.0006748991233067939
+10,600,0.35000000000000003,0.0006613753813321348
+10,600,0.4,0.0006517155656359497
+10,600,0.45,0.0006459196762182387
+10,600,0.5,0.0006439877130790017
+10,600,0.55,0.0006459196762182389
+10,600,0.6000000000000001,0.0006517155656359497
+10,600,0.65,0.0006613753813321348
+10,600,0.7000000000000001,0.0006748991233067939
+10,600,0.75,0.0006922867915599268
+10,600,0.8,0.000713538386091534
+10,600,0.8500000000000001,0.000738653906901615
+10,600,0.9,0.00076763335399017
+10,600,0.9500000000000001,0.0008004767273571993
+10,600,1.0,0.0008371840270027024
+10,650,0.0,0.0008411706176074771
+10,650,0.05,0.0008042885212969953
+10,650,0.1,0.0007712887509139327
+10,650,0.15000000000000002,0.0007421713064582893
+10,650,0.2,0.000716936187930065
+10,650,0.25,0.0006955833953292598
+10,650,0.30000000000000004,0.0006781129286558738
+10,650,0.35000000000000003,0.0006645247879099067
+10,650,0.4,0.000654818973091359
+10,650,0.45,0.0006489954842002303
+10,650,0.5,0.0006470543212365208
+10,650,0.55,0.0006489954842002305
+10,650,0.6000000000000001,0.000654818973091359
+10,650,0.65,0.0006645247879099067
+10,650,0.7000000000000001,0.0006781129286558738
+10,650,0.75,0.0006955833953292598
+10,650,0.8,0.000716936187930065
+10,650,0.8500000000000001,0.0007421713064582893
+10,650,0.9,0.0007712887509139327
+10,650,0.9500000000000001,0.0008042885212969954
+10,650,1.0,0.0008411706176074771
+10,700,0.0,0.0008451572082122518
+10,700,0.05,0.0008081003152367915
+10,700,0.1,0.0007749441478376954
+10,700,0.15000000000000002,0.0007456887060149637
+10,700,0.2,0.0007203339897685962
+10,700,0.25,0.0006988799990985928
+10,700,0.30000000000000004,0.0006813267340049538
+10,700,0.35000000000000003,0.0006676741944876788
+10,700,0.4,0.0006579223805467684
+10,700,0.45,0.000652071292182222
+10,700,0.5,0.0006501209293940398
+10,700,0.55,0.0006520712921822222
+10,700,0.6000000000000001,0.0006579223805467684
+10,700,0.65,0.0006676741944876788
+10,700,0.7000000000000001,0.0006813267340049538
+10,700,0.75,0.0006988799990985928
+10,700,0.8,0.0007203339897685962
+10,700,0.8500000000000001,0.0007456887060149637
+10,700,0.9,0.0007749441478376954
+10,700,0.9500000000000001,0.0008081003152367917
+10,700,1.0,0.0008451572082122518
+20,-400,0.0,0.0006146189321337941
+20,-400,0.05,0.0005876702558786968
+20,-400,0.1,0.0005635582823872941
+20,-400,0.15000000000000002,0.000542283011659586
+20,-400,0.2,0.0005238444436955721
+20,-400,0.25,0.0005082425784952528
+20,-400,0.30000000000000004,0.0004954774160586278
+20,-400,0.35000000000000003,0.0004855489563856972
+20,-400,0.4,0.0004784571994764612
+20,-400,0.45,0.0004742021453309195
+20,-400,0.5,0.0004727837939490723
+20,-400,0.55,0.00047420214533091956
+20,-400,0.6000000000000001,0.0004784571994764612
+20,-400,0.65,0.0004855489563856972
+20,-400,0.7000000000000001,0.0004954774160586278
+20,-400,0.75,0.0005082425784952528
+20,-400,0.8,0.0005238444436955721
+20,-400,0.8500000000000001,0.000542283011659586
+20,-400,0.9,0.0005635582823872941
+20,-400,0.9500000000000001,0.0005876702558786969
+20,-400,1.0,0.0006146189321337941
+20,-350,0.0,0.0006116353450846008
+20,-350,0.05,0.0005848174876462759
+20,-350,0.1,0.00056082256256988
+20,-350,0.15000000000000002,0.0005396505698554132
+20,-350,0.2,0.0005213015095028752
+20,-350,0.25,0.000505775381512266
+20,-350,0.30000000000000004,0.0004930721858835859
+20,-350,0.35000000000000003,0.0004831919226168345
+20,-350,0.4,0.0004761345917120123
+20,-350,0.45,0.00047190019316911886
+20,-350,0.5,0.0004704887269881544
+20,-350,0.55,0.0004719001931691189
+20,-350,0.6000000000000001,0.0004761345917120123
+20,-350,0.65,0.0004831919226168345
+20,-350,0.7000000000000001,0.0004930721858835859
+20,-350,0.75,0.000505775381512266
+20,-350,0.8,0.0005213015095028752
+20,-350,0.8500000000000001,0.0005396505698554132
+20,-350,0.9,0.00056082256256988
+20,-350,0.9500000000000001,0.0005848174876462761
+20,-350,1.0,0.0006116353450846008
+20,-300,0.0,0.0006086517580354078
+20,-300,0.05,0.0005819647194138551
+20,-300,0.1,0.000558086842752466
+20,-300,0.15000000000000002,0.0005370181280512404
+20,-300,0.2,0.0005187585753101782
+20,-300,0.25,0.0005033081845292794
+20,-300,0.30000000000000004,0.000490666955708544
+20,-300,0.35000000000000003,0.0004808348888479719
+20,-300,0.4,0.0004738119839475635
+20,-300,0.45,0.00046959824100731827
+20,-300,0.5,0.00046819366002723664
+20,-300,0.55,0.0004695982410073184
+20,-300,0.6000000000000001,0.0004738119839475635
+20,-300,0.65,0.0004808348888479719
+20,-300,0.7000000000000001,0.000490666955708544
+20,-300,0.75,0.0005033081845292794
+20,-300,0.8,0.0005187585753101782
+20,-300,0.8500000000000001,0.0005370181280512404
+20,-300,0.9,0.000558086842752466
+20,-300,0.9500000000000001,0.0005819647194138552
+20,-300,1.0,0.0006086517580354078
+20,-250,0.0,0.0006056681709862145
+20,-250,0.05,0.0005791119511814341
+20,-250,0.1,0.0005553511229350519
+20,-250,0.15000000000000002,0.0005343856862470677
+20,-250,0.2,0.0005162156411174811
+20,-250,0.25,0.0005008409875462927
+20,-250,0.30000000000000004,0.0004882617255335021
+20,-250,0.35000000000000003,0.00047847785507910924
+20,-250,0.4,0.00047148937618311467
+20,-250,0.45,0.0004672962888455177
+20,-250,0.5,0.00046589859306631873
+20,-250,0.55,0.0004672962888455178
+20,-250,0.6000000000000001,0.00047148937618311467
+20,-250,0.65,0.00047847785507910924
+20,-250,0.7000000000000001,0.0004882617255335021
+20,-250,0.75,0.0005008409875462927
+20,-250,0.8,0.0005162156411174811
+20,-250,0.8500000000000001,0.0005343856862470677
+20,-250,0.9,0.0005553511229350519
+20,-250,0.9500000000000001,0.0005791119511814344
+20,-250,1.0,0.0006056681709862145
+20,-200,0.0,0.0006026845839370214
+20,-200,0.05,0.0005762591829490133
+20,-200,0.1,0.0005526154031176379
+20,-200,0.15000000000000002,0.0005317532444428949
+20,-200,0.2,0.0005136727069247843
+20,-200,0.25,0.000498373790563306
+20,-200,0.30000000000000004,0.0004858564953584603
+20,-200,0.35000000000000003,0.00047612082131024677
+20,-200,0.4,0.0004691667684186658
+20,-200,0.45,0.00046499433668371713
+20,-200,0.5,0.00046360352610540093
+20,-200,0.55,0.0004649943366837172
+20,-200,0.6000000000000001,0.0004691667684186658
+20,-200,0.65,0.00047612082131024677
+20,-200,0.7000000000000001,0.0004858564953584603
+20,-200,0.75,0.000498373790563306
+20,-200,0.8,0.0005136727069247843
+20,-200,0.8500000000000001,0.0005317532444428949
+20,-200,0.9,0.0005526154031176379
+20,-200,0.9500000000000001,0.0005762591829490134
+20,-200,1.0,0.0006026845839370214
+20,-150,0.0,0.0005997009968878281
+20,-150,0.05,0.0005734064147165924
+20,-150,0.1,0.0005498796833002238
+20,-150,0.15000000000000002,0.0005291208026387221
+20,-150,0.2,0.0005111297727320873
+20,-150,0.25,0.0004959065935803193
+20,-150,0.30000000000000004,0.00048345126518341833
+20,-150,0.35000000000000003,0.0004737637875413841
+20,-150,0.4,0.0004668441606542169
+20,-150,0.45,0.00046269238452191654
+20,-150,0.5,0.0004613084591444831
+20,-150,0.55,0.00046269238452191665
+20,-150,0.6000000000000001,0.0004668441606542169
+20,-150,0.65,0.0004737637875413841
+20,-150,0.7000000000000001,0.00048345126518341833
+20,-150,0.75,0.0004959065935803193
+20,-150,0.8,0.0005111297727320873
+20,-150,0.8500000000000001,0.0005291208026387221
+20,-150,0.9,0.0005498796833002238
+20,-150,0.9500000000000001,0.0005734064147165926
+20,-150,1.0,0.0005997009968878281
+20,-100,0.0,0.000596717409838635
+20,-100,0.05,0.0005705536464841717
+20,-100,0.1,0.0005471439634828099
+20,-100,0.15000000000000002,0.0005264883608345495
+20,-100,0.2,0.0005085868385393904
+20,-100,0.25,0.0004934393965973327
+20,-100,0.30000000000000004,0.0004810460350083765
+20,-100,0.35000000000000003,0.0004714067537725215
+20,-100,0.4,0.0004645215528897681
+20,-100,0.45,0.000460390432360116
+20,-100,0.5,0.0004590133921835653
+20,-100,0.55,0.00046039043236011605
+20,-100,0.6000000000000001,0.0004645215528897681
+20,-100,0.65,0.0004714067537725215
+20,-100,0.7000000000000001,0.0004810460350083765
+20,-100,0.75,0.0004934393965973327
+20,-100,0.8,0.0005085868385393904
+20,-100,0.8500000000000001,0.0005264883608345495
+20,-100,0.9,0.0005471439634828099
+20,-100,0.9500000000000001,0.0005705536464841718
+20,-100,1.0,0.000596717409838635
+20,-50,0.0,0.0005937338227894419
+20,-50,0.05,0.0005677008782517507
+20,-50,0.1,0.0005444082436653957
+20,-50,0.15000000000000002,0.0005238559190303767
+20,-50,0.2,0.0005060439043466934
+20,-50,0.25,0.000490972199614346
+20,-50,0.30000000000000004,0.0004786408048333346
+20,-50,0.35000000000000003,0.00046904972000365894
+20,-50,0.4,0.0004621989451253193
+20,-50,0.45,0.0004580884801983154
+20,-50,0.5,0.0004567183252226475
+20,-50,0.55,0.0004580884801983155
+20,-50,0.6000000000000001,0.0004621989451253193
+20,-50,0.65,0.00046904972000365894
+20,-50,0.7000000000000001,0.0004786408048333346
+20,-50,0.75,0.000490972199614346
+20,-50,0.8,0.0005060439043466934
+20,-50,0.8500000000000001,0.0005238559190303767
+20,-50,0.9,0.0005444082436653957
+20,-50,0.9500000000000001,0.0005677008782517509
+20,-50,1.0,0.0005937338227894419
+20,0,0.0,0.0005907502357402486
+20,0,0.05,0.00056484811001933
+20,0,0.1,0.0005416725238479817
+20,0,0.15000000000000002,0.000521223477226204
+20,0,0.2,0.0005035009701539966
+20,0,0.25,0.0004885050026313594
+20,0,0.30000000000000004,0.0004762355746582927
+20,0,0.35000000000000003,0.00046669268623479625
+20,0,0.4,0.0004598763373608705
+20,0,0.45,0.0004557865280365148
+20,0,0.5,0.0004544232582617296
+20,0,0.55,0.0004557865280365149
+20,0,0.6000000000000001,0.0004598763373608705
+20,0,0.65,0.00046669268623479625
+20,0,0.7000000000000001,0.0004762355746582927
+20,0,0.75,0.0004885050026313594
+20,0,0.8,0.0005035009701539966
+20,0,0.8500000000000001,0.000521223477226204
+20,0,0.9,0.0005416725238479817
+20,0,0.9500000000000001,0.0005648481100193301
+20,0,1.0,0.0005907502357402486
+20,50,0.0,0.0005937338227894419
+20,50,0.05,0.0005677008782517507
+20,50,0.1,0.0005444082436653957
+20,50,0.15000000000000002,0.0005238559190303767
+20,50,0.2,0.0005060439043466934
+20,50,0.25,0.000490972199614346
+20,50,0.30000000000000004,0.0004786408048333346
+20,50,0.35000000000000003,0.00046904972000365894
+20,50,0.4,0.0004621989451253193
+20,50,0.45,0.0004580884801983154
+20,50,0.5,0.0004567183252226475
+20,50,0.55,0.0004580884801983155
+20,50,0.6000000000000001,0.0004621989451253193
+20,50,0.65,0.00046904972000365894
+20,50,0.7000000000000001,0.0004786408048333346
+20,50,0.75,0.000490972199614346
+20,50,0.8,0.0005060439043466934
+20,50,0.8500000000000001,0.0005238559190303767
+20,50,0.9,0.0005444082436653957
+20,50,0.9500000000000001,0.0005677008782517509
+20,50,1.0,0.0005937338227894419
+20,100,0.0,0.000596717409838635
+20,100,0.05,0.0005705536464841717
+20,100,0.1,0.0005471439634828099
+20,100,0.15000000000000002,0.0005264883608345495
+20,100,0.2,0.0005085868385393904
+20,100,0.25,0.0004934393965973327
+20,100,0.30000000000000004,0.0004810460350083765
+20,100,0.35000000000000003,0.0004714067537725215
+20,100,0.4,0.0004645215528897681
+20,100,0.45,0.000460390432360116
+20,100,0.5,0.0004590133921835653
+20,100,0.55,0.00046039043236011605
+20,100,0.6000000000000001,0.0004645215528897681
+20,100,0.65,0.0004714067537725215
+20,100,0.7000000000000001,0.0004810460350083765
+20,100,0.75,0.0004934393965973327
+20,100,0.8,0.0005085868385393904
+20,100,0.8500000000000001,0.0005264883608345495
+20,100,0.9,0.0005471439634828099
+20,100,0.9500000000000001,0.0005705536464841718
+20,100,1.0,0.000596717409838635
+20,150,0.0,0.0005997009968878281
+20,150,0.05,0.0005734064147165924
+20,150,0.1,0.0005498796833002238
+20,150,0.15000000000000002,0.0005291208026387221
+20,150,0.2,0.0005111297727320873
+20,150,0.25,0.0004959065935803193
+20,150,0.30000000000000004,0.00048345126518341833
+20,150,0.35000000000000003,0.0004737637875413841
+20,150,0.4,0.0004668441606542169
+20,150,0.45,0.00046269238452191654
+20,150,0.5,0.0004613084591444831
+20,150,0.55,0.00046269238452191665
+20,150,0.6000000000000001,0.0004668441606542169
+20,150,0.65,0.0004737637875413841
+20,150,0.7000000000000001,0.00048345126518341833
+20,150,0.75,0.0004959065935803193
+20,150,0.8,0.0005111297727320873
+20,150,0.8500000000000001,0.0005291208026387221
+20,150,0.9,0.0005498796833002238
+20,150,0.9500000000000001,0.0005734064147165926
+20,150,1.0,0.0005997009968878281
+20,200,0.0,0.0006026845839370214
+20,200,0.05,0.0005762591829490133
+20,200,0.1,0.0005526154031176379
+20,200,0.15000000000000002,0.0005317532444428949
+20,200,0.2,0.0005136727069247843
+20,200,0.25,0.000498373790563306
+20,200,0.30000000000000004,0.0004858564953584603
+20,200,0.35000000000000003,0.00047612082131024677
+20,200,0.4,0.0004691667684186658
+20,200,0.45,0.00046499433668371713
+20,200,0.5,0.00046360352610540093
+20,200,0.55,0.0004649943366837172
+20,200,0.6000000000000001,0.0004691667684186658
+20,200,0.65,0.00047612082131024677
+20,200,0.7000000000000001,0.0004858564953584603
+20,200,0.75,0.000498373790563306
+20,200,0.8,0.0005136727069247843
+20,200,0.8500000000000001,0.0005317532444428949
+20,200,0.9,0.0005526154031176379
+20,200,0.9500000000000001,0.0005762591829490134
+20,200,1.0,0.0006026845839370214
+20,250,0.0,0.0006056681709862145
+20,250,0.05,0.0005791119511814341
+20,250,0.1,0.0005553511229350519
+20,250,0.15000000000000002,0.0005343856862470677
+20,250,0.2,0.0005162156411174811
+20,250,0.25,0.0005008409875462927
+20,250,0.30000000000000004,0.0004882617255335021
+20,250,0.35000000000000003,0.00047847785507910924
+20,250,0.4,0.00047148937618311467
+20,250,0.45,0.0004672962888455177
+20,250,0.5,0.00046589859306631873
+20,250,0.55,0.0004672962888455178
+20,250,0.6000000000000001,0.00047148937618311467
+20,250,0.65,0.00047847785507910924
+20,250,0.7000000000000001,0.0004882617255335021
+20,250,0.75,0.0005008409875462927
+20,250,0.8,0.0005162156411174811
+20,250,0.8500000000000001,0.0005343856862470677
+20,250,0.9,0.0005553511229350519
+20,250,0.9500000000000001,0.0005791119511814344
+20,250,1.0,0.0006056681709862145
+20,300,0.0,0.0006086517580354078
+20,300,0.05,0.0005819647194138551
+20,300,0.1,0.000558086842752466
+20,300,0.15000000000000002,0.0005370181280512404
+20,300,0.2,0.0005187585753101782
+20,300,0.25,0.0005033081845292794
+20,300,0.30000000000000004,0.000490666955708544
+20,300,0.35000000000000003,0.0004808348888479719
+20,300,0.4,0.0004738119839475635
+20,300,0.45,0.00046959824100731827
+20,300,0.5,0.00046819366002723664
+20,300,0.55,0.0004695982410073184
+20,300,0.6000000000000001,0.0004738119839475635
+20,300,0.65,0.0004808348888479719
+20,300,0.7000000000000001,0.000490666955708544
+20,300,0.75,0.0005033081845292794
+20,300,0.8,0.0005187585753101782
+20,300,0.8500000000000001,0.0005370181280512404
+20,300,0.9,0.000558086842752466
+20,300,0.9500000000000001,0.0005819647194138552
+20,300,1.0,0.0006086517580354078
+20,350,0.0,0.0006116353450846008
+20,350,0.05,0.0005848174876462759
+20,350,0.1,0.00056082256256988
+20,350,0.15000000000000002,0.0005396505698554132
+20,350,0.2,0.0005213015095028752
+20,350,0.25,0.000505775381512266
+20,350,0.30000000000000004,0.0004930721858835859
+20,350,0.35000000000000003,0.0004831919226168345
+20,350,0.4,0.0004761345917120123
+20,350,0.45,0.00047190019316911886
+20,350,0.5,0.0004704887269881544
+20,350,0.55,0.0004719001931691189
+20,350,0.6000000000000001,0.0004761345917120123
+20,350,0.65,0.0004831919226168345
+20,350,0.7000000000000001,0.0004930721858835859
+20,350,0.75,0.000505775381512266
+20,350,0.8,0.0005213015095028752
+20,350,0.8500000000000001,0.0005396505698554132
+20,350,0.9,0.00056082256256988
+20,350,0.9500000000000001,0.0005848174876462761
+20,350,1.0,0.0006116353450846008
+20,400,0.0,0.0006146189321337941
+20,400,0.05,0.0005876702558786968
+20,400,0.1,0.0005635582823872941
+20,400,0.15000000000000002,0.000542283011659586
+20,400,0.2,0.0005238444436955721
+20,400,0.25,0.0005082425784952528
+20,400,0.30000000000000004,0.0004954774160586278
+20,400,0.35000000000000003,0.0004855489563856972
+20,400,0.4,0.0004784571994764612
+20,400,0.45,0.0004742021453309195
+20,400,0.5,0.0004727837939490723
+20,400,0.55,0.00047420214533091956
+20,400,0.6000000000000001,0.0004784571994764612
+20,400,0.65,0.0004855489563856972
+20,400,0.7000000000000001,0.0004954774160586278
+20,400,0.75,0.0005082425784952528
+20,400,0.8,0.0005238444436955721
+20,400,0.8500000000000001,0.000542283011659586
+20,400,0.9,0.0005635582823872941
+20,400,0.9500000000000001,0.0005876702558786969
+20,400,1.0,0.0006146189321337941
+20,450,0.0,0.0006176025191829872
+20,450,0.05,0.0005905230241111175
+20,450,0.1,0.0005662940022047082
+20,450,0.15000000000000002,0.0005449154534637586
+20,450,0.2,0.000526387377888269
+20,450,0.25,0.0005107097754782394
+20,450,0.30000000000000004,0.0004978826462336696
+20,450,0.35000000000000003,0.0004879059901545597
+20,450,0.4,0.00048077980724091
+20,450,0.45,0.00047650409749272
+20,450,0.5,0.0004750788609099901
+20,450,0.55,0.00047650409749272005
+20,450,0.6000000000000001,0.00048077980724091
+20,450,0.65,0.0004879059901545597
+20,450,0.7000000000000001,0.0004978826462336696
+20,450,0.75,0.0005107097754782394
+20,450,0.8,0.000526387377888269
+20,450,0.8500000000000001,0.0005449154534637586
+20,450,0.9,0.0005662940022047082
+20,450,0.9500000000000001,0.0005905230241111179
+20,450,1.0,0.0006176025191829872
+20,500,0.0,0.0006205861062321804
+20,500,0.05,0.0005933757923435386
+20,500,0.1,0.0005690297220221222
+20,500,0.15000000000000002,0.0005475478952679315
+20,500,0.2,0.000528930312080966
+20,500,0.25,0.0005131769724612261
+20,500,0.30000000000000004,0.0005002878764087115
+20,500,0.35000000000000003,0.0004902630239234224
+20,500,0.4,0.00048310241500535886
+20,500,0.45,0.00047880604965452064
+20,500,0.5,0.00047737392787090794
+20,500,0.55,0.00047880604965452075
+20,500,0.6000000000000001,0.00048310241500535886
+20,500,0.65,0.0004902630239234224
+20,500,0.7000000000000001,0.0005002878764087115
+20,500,0.75,0.0005131769724612261
+20,500,0.8,0.000528930312080966
+20,500,0.8500000000000001,0.0005475478952679315
+20,500,0.9,0.0005690297220221222
+20,500,0.9500000000000001,0.0005933757923435387
+20,500,1.0,0.0006205861062321804
+20,550,0.0,0.0006235696932813735
+20,550,0.05,0.0005962285605759593
+20,550,0.1,0.0005717654418395362
+20,550,0.15000000000000002,0.0005501803370721041
+20,550,0.2,0.000531473246273663
+20,550,0.25,0.0005156441694442127
+20,550,0.30000000000000004,0.0005026931065837535
+20,550,0.35000000000000003,0.0004926200576922849
+20,550,0.4,0.0004854250227698077
+20,550,0.45,0.00048110800181632113
+20,550,0.5,0.00047966899483182574
+20,550,0.55,0.00048110800181632124
+20,550,0.6000000000000001,0.0004854250227698077
+20,550,0.65,0.0004926200576922849
+20,550,0.7000000000000001,0.0005026931065837535
+20,550,0.75,0.0005156441694442127
+20,550,0.8,0.000531473246273663
+20,550,0.8500000000000001,0.0005501803370721041
+20,550,0.9,0.0005717654418395362
+20,550,0.9500000000000001,0.0005962285605759595
+20,550,1.0,0.0006235696932813735
+20,600,0.0,0.0006265532803305668
+20,600,0.05,0.0005990813288083803
+20,600,0.1,0.0005745011616569504
+20,600,0.15000000000000002,0.0005528127788762769
+20,600,0.2,0.00053401618046636
+20,600,0.25,0.0005181113664271994
+20,600,0.30000000000000004,0.0005050983367587954
+20,600,0.35000000000000003,0.0004949770914611476
+20,600,0.4,0.0004877476305342565
+20,600,0.45,0.0004834099539781218
+20,600,0.5,0.0004819640617927436
+20,600,0.55,0.0004834099539781219
+20,600,0.6000000000000001,0.0004877476305342565
+20,600,0.65,0.0004949770914611476
+20,600,0.7000000000000001,0.0005050983367587954
+20,600,0.75,0.0005181113664271994
+20,600,0.8,0.00053401618046636
+20,600,0.8500000000000001,0.0005528127788762769
+20,600,0.9,0.0005745011616569504
+20,600,0.9500000000000001,0.0005990813288083804
+20,600,1.0,0.0006265532803305668
+20,650,0.0,0.0006295368673797599
+20,650,0.05,0.000601934097040801
+20,650,0.1,0.0005772368814743644
+20,650,0.15000000000000002,0.0005554452206804496
+20,650,0.2,0.0005365591146590568
+20,650,0.25,0.000520578563410186
+20,650,0.30000000000000004,0.0005075035669338372
+20,650,0.35000000000000003,0.0004973341252300102
+20,650,0.4,0.0004900702382987053
+20,650,0.45,0.00048571190613992237
+20,650,0.5,0.0004842591287536614
+20,650,0.55,0.0004857119061399224
+20,650,0.6000000000000001,0.0004900702382987053
+20,650,0.65,0.0004973341252300102
+20,650,0.7000000000000001,0.0005075035669338372
+20,650,0.75,0.000520578563410186
+20,650,0.8,0.0005365591146590568
+20,650,0.8500000000000001,0.0005554452206804496
+20,650,0.9,0.0005772368814743644
+20,650,0.9500000000000001,0.0006019340970408013
+20,650,1.0,0.0006295368673797599
+20,700,0.0,0.0006325204544289531
+20,700,0.05,0.000604786865273222
+20,700,0.1,0.0005799726012917784
+20,700,0.15000000000000002,0.0005580776624846224
+20,700,0.2,0.0005391020488517538
+20,700,0.25,0.0005230457603931727
+20,700,0.30000000000000004,0.0005099087971088791
+20,700,0.35000000000000003,0.0004996911589988728
+20,700,0.4,0.0004923928460631542
+20,700,0.45,0.0004880138583017229
+20,700,0.5,0.00048655419571457924
+20,700,0.55,0.000488013858301723
+20,700,0.6000000000000001,0.0004923928460631542
+20,700,0.65,0.0004996911589988728
+20,700,0.7000000000000001,0.0005099087971088791
+20,700,0.75,0.0005230457603931727
+20,700,0.8,0.0005391020488517538
+20,700,0.8500000000000001,0.0005580776624846224
+20,700,0.9,0.0005799726012917784
+20,700,0.9500000000000001,0.0006047868652732222
+20,700,1.0,0.0006325204544289531
+30,-400,0.0,0.000468863776493636
+30,-400,0.05,0.0004483059032166073
+30,-400,0.1,0.00042991201660031846
+30,-400,0.15000000000000002,0.0004136821166447696
+30,-400,0.2,0.00039961620334996056
+30,-400,0.25,0.0003877142767158913
+30,-400,0.30000000000000004,0.000377976336742562
+30,-400,0.35000000000000003,0.0003704023834299724
+30,-400,0.4,0.00036499241677812283
+30,-400,0.45,0.000361746436787013
+30,-400,0.5,0.00036066444345664306
+30,-400,0.55,0.00036174643678701305
+30,-400,0.6000000000000001,0.00036499241677812283
+30,-400,0.65,0.0003704023834299724
+30,-400,0.7000000000000001,0.000377976336742562
+30,-400,0.75,0.0003877142767158913
+30,-400,0.8,0.00039961620334996056
+30,-400,0.8500000000000001,0.0004136821166447696
+30,-400,0.9,0.00042991201660031846
+30,-400,0.9500000000000001,0.0004483059032166074
+30,-400,1.0,0.000468863776493636
+30,-350,0.0,0.00046658773874366685
+30,-350,0.05,0.00044612966096798295
+30,-350,0.1,0.0004278250650634237
+30,-350,0.15000000000000002,0.00041167395102998907
+30,-350,0.2,0.0003976763188676791
+30,-350,0.25,0.0003858321685764937
+30,-350,0.30000000000000004,0.00037614150015643296
+30,-350,0.35000000000000003,0.00036860431360749677
+30,-350,0.4,0.00036322060892968525
+30,-350,0.45,0.0003599903861229983
+30,-350,0.5,0.000358913645187436
+30,-350,0.55,0.0003599903861229984
+30,-350,0.6000000000000001,0.00036322060892968525
+30,-350,0.65,0.00036860431360749677
+30,-350,0.7000000000000001,0.00037614150015643296
+30,-350,0.75,0.0003858321685764937
+30,-350,0.8,0.0003976763188676791
+30,-350,0.8500000000000001,0.00041167395102998907
+30,-350,0.9,0.0004278250650634237
+30,-350,0.9500000000000001,0.000446129660967983
+30,-350,1.0,0.00046658773874366685
+30,-300,0.0,0.0004643117009936978
+30,-300,0.05,0.00044395341871935863
+30,-300,0.1,0.000425738113526529
+30,-300,0.15000000000000002,0.0004096657854152087
+30,-300,0.2,0.0003957364343853978
+30,-300,0.25,0.0003839500604370962
+30,-300,0.30000000000000004,0.0003743066635703041
+30,-300,0.35000000000000003,0.00036680624378502115
+30,-300,0.4,0.00036144880108124783
+30,-300,0.45,0.00035823433545898375
+30,-300,0.5,0.000357162846918229
+30,-300,0.55,0.0003582343354589838
+30,-300,0.6000000000000001,0.00036144880108124783
+30,-300,0.65,0.00036680624378502115
+30,-300,0.7000000000000001,0.0003743066635703041
+30,-300,0.75,0.0003839500604370962
+30,-300,0.8,0.0003957364343853978
+30,-300,0.8500000000000001,0.0004096657854152087
+30,-300,0.9,0.000425738113526529
+30,-300,0.9500000000000001,0.00044395341871935874
+30,-300,1.0,0.0004643117009936978
+30,-250,0.0,0.00046203566324372856
+30,-250,0.05,0.00044177717647073426
+30,-250,0.1,0.0004236511619896342
+30,-250,0.15000000000000002,0.0004076576198004282
+30,-250,0.2,0.0003937965499031164
+30,-250,0.25,0.00038206795229769864
+30,-250,0.30000000000000004,0.0003724718269841751
+30,-250,0.35000000000000003,0.00036500817396254554
+30,-250,0.4,0.00035967699323281025
+30,-250,0.45,0.00035647828479496905
+30,-250,0.5,0.000355412048649022
+30,-250,0.55,0.00035647828479496915
+30,-250,0.6000000000000001,0.00035967699323281025
+30,-250,0.65,0.00036500817396254554
+30,-250,0.7000000000000001,0.0003724718269841751
+30,-250,0.75,0.00038206795229769864
+30,-250,0.8,0.0003937965499031164
+30,-250,0.8500000000000001,0.0004076576198004282
+30,-250,0.9,0.0004236511619896342
+30,-250,0.9500000000000001,0.00044177717647073437
+30,-250,1.0,0.00046203566324372856
+30,-200,0.0,0.00045975962549375956
+30,-200,0.05,0.0004396009342221101
+30,-200,0.1,0.0004215642104527394
+30,-200,0.15000000000000002,0.0004056494541856478
+30,-200,0.2,0.0003918566654208351
+30,-200,0.25,0.00038018584415830116
+30,-200,0.30000000000000004,0.0003706369903980462
+30,-200,0.35000000000000003,0.00036321010414007
+30,-200,0.4,0.00035790518538437283
+30,-200,0.45,0.00035472223413095445
+30,-200,0.5,0.00035366125037981504
+30,-200,0.55,0.00035472223413095456
+30,-200,0.6000000000000001,0.00035790518538437283
+30,-200,0.65,0.00036321010414007
+30,-200,0.7000000000000001,0.0003706369903980462
+30,-200,0.75,0.00038018584415830116
+30,-200,0.8,0.0003918566654208351
+30,-200,0.8500000000000001,0.0004056494541856478
+30,-200,0.9,0.0004215642104527394
+30,-200,0.9500000000000001,0.00043960093422211016
+30,-200,1.0,0.00045975962549375956
+30,-150,0.0,0.0004574835877437904
+30,-150,0.05,0.00043742469197348573
+30,-150,0.1,0.0004194772589158446
+30,-150,0.15000000000000002,0.0004036412885708673
+30,-150,0.2,0.00038991678093855365
+30,-150,0.25,0.00037830373601890357
+30,-150,0.30000000000000004,0.0003688021538119172
+30,-150,0.35000000000000003,0.00036141203431759437
+30,-150,0.4,0.0003561333775359353
+30,-150,0.45,0.0003529661834669398
+30,-150,0.5,0.000351910452110608
+30,-150,0.55,0.0003529661834669399
+30,-150,0.6000000000000001,0.0003561333775359353
+30,-150,0.65,0.00036141203431759437
+30,-150,0.7000000000000001,0.0003688021538119172
+30,-150,0.75,0.00037830373601890357
+30,-150,0.8,0.00038991678093855365
+30,-150,0.8500000000000001,0.0004036412885708673
+30,-150,0.9,0.0004194772589158446
+30,-150,0.9500000000000001,0.0004374246919734858
+30,-150,1.0,0.0004574835877437904
+30,-100,0.0,0.0004552075499938213
+30,-100,0.05,0.0004352484497248614
+30,-100,0.1,0.00041739030737894994
+30,-100,0.15000000000000002,0.0004016331229560869
+30,-100,0.2,0.00038797689645627233
+30,-100,0.25,0.0003764216278795061
+30,-100,0.30000000000000004,0.00036696731722578833
+30,-100,0.35000000000000003,0.0003596139644951188
+30,-100,0.4,0.00035436156968749784
+30,-100,0.45,0.0003512101328029252
+30,-100,0.5,0.000350159653841401
+30,-100,0.55,0.0003512101328029253
+30,-100,0.6000000000000001,0.00035436156968749784
+30,-100,0.65,0.0003596139644951188
+30,-100,0.7000000000000001,0.00036696731722578833
+30,-100,0.75,0.0003764216278795061
+30,-100,0.8,0.00038797689645627233
+30,-100,0.8500000000000001,0.0004016331229560869
+30,-100,0.9,0.00041739030737894994
+30,-100,0.9500000000000001,0.0004352484497248615
+30,-100,1.0,0.0004552075499938213
+30,-50,0.0,0.0004529315122438522
+30,-50,0.05,0.00043307220747623715
+30,-50,0.1,0.00041530335584205515
+30,-50,0.15000000000000002,0.0003996249573413065
+30,-50,0.2,0.00038603701197399096
+30,-50,0.25,0.00037453951974010855
+30,-50,0.30000000000000004,0.00036513248063965937
+30,-50,0.35000000000000003,0.0003578158946726432
+30,-50,0.4,0.00035258976183906036
+30,-50,0.45,0.0003494540821389106
+30,-50,0.5,0.000348408855572194
+30,-50,0.55,0.00034945408213891066
+30,-50,0.6000000000000001,0.00035258976183906036
+30,-50,0.65,0.0003578158946726432
+30,-50,0.7000000000000001,0.00036513248063965937
+30,-50,0.75,0.00037453951974010855
+30,-50,0.8,0.00038603701197399096
+30,-50,0.8500000000000001,0.0003996249573413065
+30,-50,0.9,0.00041530335584205515
+30,-50,0.9500000000000001,0.0004330722074762372
+30,-50,1.0,0.0004529315122438522
+30,0,0.0,0.00045065547449388315
+30,0,0.05,0.0004308959652276128
+30,0,0.1,0.00041321640430516047
+30,0,0.15000000000000002,0.0003976167917265261
+30,0,0.2,0.0003840971274917096
+30,0,0.25,0.000372657411600711
+30,0,0.30000000000000004,0.0003632976440535304
+30,0,0.35000000000000003,0.00035601782485016764
+30,0,0.4,0.00035081795399062284
+30,0,0.45,0.00034769803147489595
+30,0,0.5,0.000346658057302987
+30,0,0.55,0.00034769803147489606
+30,0,0.6000000000000001,0.00035081795399062284
+30,0,0.65,0.00035601782485016764
+30,0,0.7000000000000001,0.0003632976440535304
+30,0,0.75,0.000372657411600711
+30,0,0.8,0.0003840971274917096
+30,0,0.8500000000000001,0.0003976167917265261
+30,0,0.9,0.00041321640430516047
+30,0,0.9500000000000001,0.00043089596522761283
+30,0,1.0,0.00045065547449388315
+30,50,0.0,0.0004529315122438522
+30,50,0.05,0.00043307220747623715
+30,50,0.1,0.00041530335584205515
+30,50,0.15000000000000002,0.0003996249573413065
+30,50,0.2,0.00038603701197399096
+30,50,0.25,0.00037453951974010855
+30,50,0.30000000000000004,0.00036513248063965937
+30,50,0.35000000000000003,0.0003578158946726432
+30,50,0.4,0.00035258976183906036
+30,50,0.45,0.0003494540821389106
+30,50,0.5,0.000348408855572194
+30,50,0.55,0.00034945408213891066
+30,50,0.6000000000000001,0.00035258976183906036
+30,50,0.65,0.0003578158946726432
+30,50,0.7000000000000001,0.00036513248063965937
+30,50,0.75,0.00037453951974010855
+30,50,0.8,0.00038603701197399096
+30,50,0.8500000000000001,0.0003996249573413065
+30,50,0.9,0.00041530335584205515
+30,50,0.9500000000000001,0.0004330722074762372
+30,50,1.0,0.0004529315122438522
+30,100,0.0,0.0004552075499938213
+30,100,0.05,0.0004352484497248614
+30,100,0.1,0.00041739030737894994
+30,100,0.15000000000000002,0.0004016331229560869
+30,100,0.2,0.00038797689645627233
+30,100,0.25,0.0003764216278795061
+30,100,0.30000000000000004,0.00036696731722578833
+30,100,0.35000000000000003,0.0003596139644951188
+30,100,0.4,0.00035436156968749784
+30,100,0.45,0.0003512101328029252
+30,100,0.5,0.000350159653841401
+30,100,0.55,0.0003512101328029253
+30,100,0.6000000000000001,0.00035436156968749784
+30,100,0.65,0.0003596139644951188
+30,100,0.7000000000000001,0.00036696731722578833
+30,100,0.75,0.0003764216278795061
+30,100,0.8,0.00038797689645627233
+30,100,0.8500000000000001,0.0004016331229560869
+30,100,0.9,0.00041739030737894994
+30,100,0.9500000000000001,0.0004352484497248615
+30,100,1.0,0.0004552075499938213
+30,150,0.0,0.0004574835877437904
+30,150,0.05,0.00043742469197348573
+30,150,0.1,0.0004194772589158446
+30,150,0.15000000000000002,0.0004036412885708673
+30,150,0.2,0.00038991678093855365
+30,150,0.25,0.00037830373601890357
+30,150,0.30000000000000004,0.0003688021538119172
+30,150,0.35000000000000003,0.00036141203431759437
+30,150,0.4,0.0003561333775359353
+30,150,0.45,0.0003529661834669398
+30,150,0.5,0.000351910452110608
+30,150,0.55,0.0003529661834669399
+30,150,0.6000000000000001,0.0003561333775359353
+30,150,0.65,0.00036141203431759437
+30,150,0.7000000000000001,0.0003688021538119172
+30,150,0.75,0.00037830373601890357
+30,150,0.8,0.00038991678093855365
+30,150,0.8500000000000001,0.0004036412885708673
+30,150,0.9,0.0004194772589158446
+30,150,0.9500000000000001,0.0004374246919734858
+30,150,1.0,0.0004574835877437904
+30,200,0.0,0.00045975962549375956
+30,200,0.05,0.0004396009342221101
+30,200,0.1,0.0004215642104527394
+30,200,0.15000000000000002,0.0004056494541856478
+30,200,0.2,0.0003918566654208351
+30,200,0.25,0.00038018584415830116
+30,200,0.30000000000000004,0.0003706369903980462
+30,200,0.35000000000000003,0.00036321010414007
+30,200,0.4,0.00035790518538437283
+30,200,0.45,0.00035472223413095445
+30,200,0.5,0.00035366125037981504
+30,200,0.55,0.00035472223413095456
+30,200,0.6000000000000001,0.00035790518538437283
+30,200,0.65,0.00036321010414007
+30,200,0.7000000000000001,0.0003706369903980462
+30,200,0.75,0.00038018584415830116
+30,200,0.8,0.0003918566654208351
+30,200,0.8500000000000001,0.0004056494541856478
+30,200,0.9,0.0004215642104527394
+30,200,0.9500000000000001,0.00043960093422211016
+30,200,1.0,0.00045975962549375956
+30,250,0.0,0.00046203566324372856
+30,250,0.05,0.00044177717647073426
+30,250,0.1,0.0004236511619896342
+30,250,0.15000000000000002,0.0004076576198004282
+30,250,0.2,0.0003937965499031164
+30,250,0.25,0.00038206795229769864
+30,250,0.30000000000000004,0.0003724718269841751
+30,250,0.35000000000000003,0.00036500817396254554
+30,250,0.4,0.00035967699323281025
+30,250,0.45,0.00035647828479496905
+30,250,0.5,0.000355412048649022
+30,250,0.55,0.00035647828479496915
+30,250,0.6000000000000001,0.00035967699323281025
+30,250,0.65,0.00036500817396254554
+30,250,0.7000000000000001,0.0003724718269841751
+30,250,0.75,0.00038206795229769864
+30,250,0.8,0.0003937965499031164
+30,250,0.8500000000000001,0.0004076576198004282
+30,250,0.9,0.0004236511619896342
+30,250,0.9500000000000001,0.00044177717647073437
+30,250,1.0,0.00046203566324372856
+30,300,0.0,0.0004643117009936978
+30,300,0.05,0.00044395341871935863
+30,300,0.1,0.000425738113526529
+30,300,0.15000000000000002,0.0004096657854152087
+30,300,0.2,0.0003957364343853978
+30,300,0.25,0.0003839500604370962
+30,300,0.30000000000000004,0.0003743066635703041
+30,300,0.35000000000000003,0.00036680624378502115
+30,300,0.4,0.00036144880108124783
+30,300,0.45,0.00035823433545898375
+30,300,0.5,0.000357162846918229
+30,300,0.55,0.0003582343354589838
+30,300,0.6000000000000001,0.00036144880108124783
+30,300,0.65,0.00036680624378502115
+30,300,0.7000000000000001,0.0003743066635703041
+30,300,0.75,0.0003839500604370962
+30,300,0.8,0.0003957364343853978
+30,300,0.8500000000000001,0.0004096657854152087
+30,300,0.9,0.000425738113526529
+30,300,0.9500000000000001,0.00044395341871935874
+30,300,1.0,0.0004643117009936978
+30,350,0.0,0.00046658773874366685
+30,350,0.05,0.00044612966096798295
+30,350,0.1,0.0004278250650634237
+30,350,0.15000000000000002,0.00041167395102998907
+30,350,0.2,0.0003976763188676791
+30,350,0.25,0.0003858321685764937
+30,350,0.30000000000000004,0.00037614150015643296
+30,350,0.35000000000000003,0.00036860431360749677
+30,350,0.4,0.00036322060892968525
+30,350,0.45,0.0003599903861229983
+30,350,0.5,0.000358913645187436
+30,350,0.55,0.0003599903861229984
+30,350,0.6000000000000001,0.00036322060892968525
+30,350,0.65,0.00036860431360749677
+30,350,0.7000000000000001,0.00037614150015643296
+30,350,0.75,0.0003858321685764937
+30,350,0.8,0.0003976763188676791
+30,350,0.8500000000000001,0.00041167395102998907
+30,350,0.9,0.0004278250650634237
+30,350,0.9500000000000001,0.000446129660967983
+30,350,1.0,0.00046658773874366685
+30,400,0.0,0.000468863776493636
+30,400,0.05,0.0004483059032166073
+30,400,0.1,0.00042991201660031846
+30,400,0.15000000000000002,0.0004136821166447696
+30,400,0.2,0.00039961620334996056
+30,400,0.25,0.0003877142767158913
+30,400,0.30000000000000004,0.000377976336742562
+30,400,0.35000000000000003,0.0003704023834299724
+30,400,0.4,0.00036499241677812283
+30,400,0.45,0.000361746436787013
+30,400,0.5,0.00036066444345664306
+30,400,0.55,0.00036174643678701305
+30,400,0.6000000000000001,0.00036499241677812283
+30,400,0.65,0.0003704023834299724
+30,400,0.7000000000000001,0.000377976336742562
+30,400,0.75,0.0003877142767158913
+30,400,0.8,0.00039961620334996056
+30,400,0.8500000000000001,0.0004136821166447696
+30,400,0.9,0.00042991201660031846
+30,400,0.9500000000000001,0.0004483059032166074
+30,400,1.0,0.000468863776493636
+30,450,0.0,0.000471139814243605
+30,450,0.05,0.00045048214546523154
+30,450,0.1,0.00043199896813721315
+30,450,0.15000000000000002,0.00041569028225954996
+30,450,0.2,0.0004015560878322418
+30,450,0.25,0.0003895963848552888
+30,450,0.30000000000000004,0.0003798111733286909
+30,450,0.35000000000000003,0.00037220045325244794
+30,450,0.4,0.00036676422462656025
+30,450,0.45,0.0003635024874510276
+30,450,0.5,0.00036241524172585005
+30,450,0.55,0.00036350248745102765
+30,450,0.6000000000000001,0.00036676422462656025
+30,450,0.65,0.00037220045325244794
+30,450,0.7000000000000001,0.0003798111733286909
+30,450,0.75,0.0003895963848552888
+30,450,0.8,0.0004015560878322418
+30,450,0.8500000000000001,0.00041569028225954996
+30,450,0.9,0.00043199896813721315
+30,450,0.9500000000000001,0.0004504821454652316
+30,450,1.0,0.000471139814243605
+30,500,0.0,0.0004734158519935742
+30,500,0.05,0.0004526583877138559
+30,500,0.1,0.00043408591967410793
+30,500,0.15000000000000002,0.0004176984478743305
+30,500,0.2,0.00040349597231452325
+30,500,0.25,0.00039147849299468637
+30,500,0.30000000000000004,0.00038164600991481986
+30,500,0.35000000000000003,0.0003739985230749236
+30,500,0.4,0.00036853603247499777
+30,500,0.45,0.00036525853811504225
+30,500,0.5,0.0003641660399950571
+30,500,0.55,0.00036525853811504236
+30,500,0.6000000000000001,0.00036853603247499777
+30,500,0.65,0.0003739985230749236
+30,500,0.7000000000000001,0.00038164600991481986
+30,500,0.75,0.00039147849299468637
+30,500,0.8,0.00040349597231452325
+30,500,0.8500000000000001,0.0004176984478743305
+30,500,0.9,0.00043408591967410793
+30,500,0.9500000000000001,0.00045265838771385596
+30,500,1.0,0.0004734158519935742
+30,550,0.0,0.00047569188974354326
+30,550,0.05,0.0004548346299624802
+30,550,0.1,0.0004361728712110027
+30,550,0.15000000000000002,0.0004197066134891108
+30,550,0.2,0.0004054358567968045
+30,550,0.25,0.00039336060113408385
+30,550,0.30000000000000004,0.00038348084650094877
+30,550,0.35000000000000003,0.0003757965928973991
+30,550,0.4,0.00037030784032343524
+30,550,0.45,0.00036701458877905685
+30,550,0.5,0.00036591683826426403
+30,550,0.55,0.0003670145887790569
+30,550,0.6000000000000001,0.00037030784032343524
+30,550,0.65,0.0003757965928973991
+30,550,0.7000000000000001,0.00038348084650094877
+30,550,0.75,0.00039336060113408385
+30,550,0.8,0.0004054358567968045
+30,550,0.8500000000000001,0.0004197066134891108
+30,550,0.9,0.0004361728712110027
+30,550,0.9500000000000001,0.0004548346299624803
+30,550,1.0,0.00047569188974354326
+30,600,0.0,0.0004779679274935125
+30,600,0.05,0.00045701087221110455
+30,600,0.1,0.00043825982274789746
+30,600,0.15000000000000002,0.0004217147791038913
+30,600,0.2,0.000407375741279086
+30,600,0.25,0.00039524270927348144
+30,600,0.30000000000000004,0.00038531568308707774
+30,600,0.35000000000000003,0.0003775946627198748
+30,600,0.4,0.0003720796481718727
+30,600,0.45,0.00036877063944307144
+30,600,0.5,0.0003676676365334711
+30,600,0.55,0.0003687706394430716
+30,600,0.6000000000000001,0.0003720796481718727
+30,600,0.65,0.0003775946627198748
+30,600,0.7000000000000001,0.00038531568308707774
+30,600,0.75,0.00039524270927348144
+30,600,0.8,0.000407375741279086
+30,600,0.8500000000000001,0.0004217147791038913
+30,600,0.9,0.00043825982274789746
+30,600,0.9500000000000001,0.00045701087221110465
+30,600,1.0,0.0004779679274935125
+30,650,0.0,0.0004802439652434815
+30,650,0.05,0.00045918711445972876
+30,650,0.1,0.0004403467742847922
+30,650,0.15000000000000002,0.0004237229447186717
+30,650,0.2,0.00040931562576136725
+30,650,0.25,0.0003971248174128789
+30,650,0.30000000000000004,0.00038715051967320665
+30,650,0.35000000000000003,0.00037939273254235034
+30,650,0.4,0.0003738514560203102
+30,650,0.45,0.00037052669010708604
+30,650,0.5,0.00036941843480267807
+30,650,0.55,0.0003705266901070862
+30,650,0.6000000000000001,0.0003738514560203102
+30,650,0.65,0.00037939273254235034
+30,650,0.7000000000000001,0.00038715051967320665
+30,650,0.75,0.0003971248174128789
+30,650,0.8,0.00040931562576136725
+30,650,0.8500000000000001,0.0004237229447186717
+30,650,0.9,0.0004403467742847922
+30,650,0.9500000000000001,0.0004591871144597288
+30,650,1.0,0.0004802439652434815
+30,700,0.0,0.00048252000299345066
+30,700,0.05,0.00046136335670835313
+30,700,0.1,0.00044243372582168693
+30,700,0.15000000000000002,0.00042573111033345217
+30,700,0.2,0.0004112555102436487
+30,700,0.25,0.0003990069255522765
+30,700,0.30000000000000004,0.0003889853562593356
+30,700,0.35000000000000003,0.00038119080236482595
+30,700,0.4,0.0003756232638687477
+30,700,0.45,0.00037228274077110075
+30,700,0.5,0.0003711692330718851
+30,700,0.55,0.0003722827407711008
+30,700,0.6000000000000001,0.0003756232638687477
+30,700,0.65,0.00038119080236482595
+30,700,0.7000000000000001,0.0003889853562593356
+30,700,0.75,0.0003990069255522765
+30,700,0.8,0.0004112555102436487
+30,700,0.8500000000000001,0.00042573111033345217
+30,700,0.9,0.00044243372582168693
+30,700,0.9500000000000001,0.0004613633567083532
+30,700,1.0,0.00048252000299345066
+40,-400,0.0,0.0003639113525411101
+40,-400,0.05,0.00034795523939123063
+40,-400,0.1,0.0003336787170992332
+40,-400,0.15000000000000002,0.0003210817856651179
+40,-400,0.2,0.0003101644450888846
+40,-400,0.25,0.0003009266953705333
+40,-400,0.30000000000000004,0.00029336853651006415
+40,-400,0.35000000000000003,0.00028748996850747695
+40,-400,0.4,0.00028329099136277183
+40,-400,0.45,0.0002807716050759488
+40,-400,0.5,0.0002799318096470078
+40,-400,0.55,0.00028077160507594884
+40,-400,0.6000000000000001,0.00028329099136277183
+40,-400,0.65,0.00028748996850747695
+40,-400,0.7000000000000001,0.00029336853651006415
+40,-400,0.75,0.0003009266953705333
+40,-400,0.8,0.0003101644450888846
+40,-400,0.8500000000000001,0.0003210817856651179
+40,-400,0.9,0.0003336787170992332
+40,-400,0.9500000000000001,0.00034795523939123063
+40,-400,1.0,0.0003639113525411101
+40,-350,0.0,0.00036214479257731824
+40,-350,0.05,0.00034626613628738965
+40,-350,0.1,0.0003320589175016641
+40,-350,0.15000000000000002,0.00031952313622014155
+40,-350,0.2,0.00030865879244282204
+40,-350,0.25,0.00029946588616970544
+40,-350,0.30000000000000004,0.00029194441740079197
+40,-350,0.35000000000000003,0.00028609438613608136
+40,-350,0.4,0.0002819157923755739
+40,-350,0.45,0.0002794086361192694
+40,-350,0.5,0.0002785729173671679
+40,-350,0.55,0.00027940863611926943
+40,-350,0.6000000000000001,0.0002819157923755739
+40,-350,0.65,0.00028609438613608136
+40,-350,0.7000000000000001,0.00029194441740079197
+40,-350,0.75,0.00029946588616970544
+40,-350,0.8,0.00030865879244282204
+40,-350,0.8500000000000001,0.00031952313622014155
+40,-350,0.9,0.0003320589175016641
+40,-350,0.9500000000000001,0.0003462661362873897
+40,-350,1.0,0.00036214479257731824
+40,-300,0.0,0.0003603782326135265
+40,-300,0.05,0.0003445770331835488
+40,-300,0.1,0.000330439117904095
+40,-300,0.15000000000000002,0.00031796448677516527
+40,-300,0.2,0.0003071531397967595
+40,-300,0.25,0.00029800507696887767
+40,-300,0.30000000000000004,0.0002905202982915198
+40,-300,0.35000000000000003,0.0002846988037646859
+40,-300,0.4,0.000280540593388376
+40,-300,0.45,0.0002780456671625901
+40,-300,0.5,0.00027721402508732807
+40,-300,0.55,0.0002780456671625901
+40,-300,0.6000000000000001,0.000280540593388376
+40,-300,0.65,0.0002846988037646859
+40,-300,0.7000000000000001,0.0002905202982915198
+40,-300,0.75,0.00029800507696887767
+40,-300,0.8,0.0003071531397967595
+40,-300,0.8500000000000001,0.00031796448677516527
+40,-300,0.9,0.000330439117904095
+40,-300,0.9500000000000001,0.0003445770331835488
+40,-300,1.0,0.0003603782326135265
+40,-250,0.0,0.0003586116726497347
+40,-250,0.05,0.0003428879300797078
+40,-250,0.1,0.0003288193183065259
+40,-250,0.15000000000000002,0.0003164058373301889
+40,-250,0.2,0.00030564748715069693
+40,-250,0.25,0.0002965442677680498
+40,-250,0.30000000000000004,0.0002890961791822476
+40,-250,0.35000000000000003,0.0002833032213932903
+40,-250,0.4,0.00027916539440117806
+40,-250,0.45,0.00027668269820591067
+40,-250,0.5,0.0002758551328074882
+40,-250,0.55,0.00027668269820591067
+40,-250,0.6000000000000001,0.00027916539440117806
+40,-250,0.65,0.0002833032213932903
+40,-250,0.7000000000000001,0.0002890961791822476
+40,-250,0.75,0.0002965442677680498
+40,-250,0.8,0.00030564748715069693
+40,-250,0.8500000000000001,0.0003164058373301889
+40,-250,0.9,0.0003288193183065259
+40,-250,0.9500000000000001,0.00034288793007970786
+40,-250,1.0,0.0003586116726497347
+40,-200,0.0,0.0003568451126859429
+40,-200,0.05,0.00034119882697586693
+40,-200,0.1,0.00032719951870895683
+40,-200,0.15000000000000002,0.00031484718788521264
+40,-200,0.2,0.0003041418345046344
+40,-200,0.25,0.000295083458567222
+40,-200,0.30000000000000004,0.0002876720600729755
+40,-200,0.35000000000000003,0.0002819076390218949
+40,-200,0.4,0.00027779019541398017
+40,-200,0.45,0.0002753197292492313
+40,-200,0.5,0.00027449624052764836
+40,-200,0.55,0.00027531972924923137
+40,-200,0.6000000000000001,0.00027779019541398017
+40,-200,0.65,0.0002819076390218949
+40,-200,0.7000000000000001,0.0002876720600729755
+40,-200,0.75,0.000295083458567222
+40,-200,0.8,0.0003041418345046344
+40,-200,0.8500000000000001,0.00031484718788521264
+40,-200,0.9,0.00032719951870895683
+40,-200,0.9500000000000001,0.00034119882697586693
+40,-200,1.0,0.0003568451126859429
+40,-150,0.0,0.000355078552722151
+40,-150,0.05,0.00033950972387202595
+40,-150,0.1,0.00032557971911138773
+40,-150,0.15000000000000002,0.0003132885384402363
+40,-150,0.2,0.00030263618185857183
+40,-150,0.25,0.0002936226493663941
+40,-150,0.30000000000000004,0.00028624794096370333
+40,-150,0.35000000000000003,0.0002805120566504993
+40,-150,0.4,0.0002764149964267822
+40,-150,0.45,0.0002739567602925519
+40,-150,0.5,0.0002731373482478085
+40,-150,0.55,0.00027395676029255196
+40,-150,0.6000000000000001,0.0002764149964267822
+40,-150,0.65,0.0002805120566504993
+40,-150,0.7000000000000001,0.00028624794096370333
+40,-150,0.75,0.0002936226493663941
+40,-150,0.8,0.00030263618185857183
+40,-150,0.8500000000000001,0.0003132885384402363
+40,-150,0.9,0.00032557971911138773
+40,-150,0.9500000000000001,0.000339509723872026
+40,-150,1.0,0.000355078552722151
+40,-100,0.0,0.0003533119927583593
+40,-100,0.05,0.0003378206207681851
+40,-100,0.1,0.0003239599195138186
+40,-100,0.15000000000000002,0.00031172988899526007
+40,-100,0.2,0.0003011305292125093
+40,-100,0.25,0.00029216184016556633
+40,-100,0.30000000000000004,0.0002848238218544312
+40,-100,0.35000000000000003,0.0002791164742791038
+40,-100,0.4,0.0002750397974395843
+40,-100,0.45,0.0002725937913358726
+40,-100,0.5,0.0002717784559679687
+40,-100,0.55,0.00027259379133587265
+40,-100,0.6000000000000001,0.0002750397974395843
+40,-100,0.65,0.0002791164742791038
+40,-100,0.7000000000000001,0.0002848238218544312
+40,-100,0.75,0.00029216184016556633
+40,-100,0.8,0.0003011305292125093
+40,-100,0.8500000000000001,0.00031172988899526007
+40,-100,0.9,0.0003239599195138186
+40,-100,0.9500000000000001,0.0003378206207681851
+40,-100,1.0,0.0003533119927583593
+40,-50,0.0,0.00035154543279456753
+40,-50,0.05,0.0003361315176643441
+40,-50,0.1,0.0003223401199162495
+40,-50,0.15000000000000002,0.0003101712395502838
+40,-50,0.2,0.0002996248765664468
+40,-50,0.25,0.0002907010309647385
+40,-50,0.30000000000000004,0.00028339970274515904
+40,-50,0.35000000000000003,0.0002777208919077083
+40,-50,0.4,0.0002736645984523864
+40,-50,0.45,0.00027123082237919324
+40,-50,0.5,0.0002704195636881288
+40,-50,0.55,0.00027123082237919324
+40,-50,0.6000000000000001,0.0002736645984523864
+40,-50,0.65,0.0002777208919077083
+40,-50,0.7000000000000001,0.00028339970274515904
+40,-50,0.75,0.0002907010309647385
+40,-50,0.8,0.0002996248765664468
+40,-50,0.8500000000000001,0.0003101712395502838
+40,-50,0.9,0.0003223401199162495
+40,-50,0.9500000000000001,0.00033613151766434415
+40,-50,1.0,0.00035154543279456753
+40,0,0.0,0.0003497788728307757
+40,0,0.05,0.00033444241456050323
+40,0,0.1,0.00032072032031868047
+40,0,0.15000000000000002,0.0003086125901053075
+40,0,0.2,0.0002981192239203842
+40,0,0.25,0.00028924022176391064
+40,0,0.30000000000000004,0.00028197558363588686
+40,0,0.35000000000000003,0.00027632530953631277
+40,0,0.4,0.00027228939946518846
+40,0,0.45,0.00026986785342251383
+40,0,0.5,0.000269060671408289
+40,0,0.55,0.0002698678534225139
+40,0,0.6000000000000001,0.00027228939946518846
+40,0,0.65,0.00027632530953631277
+40,0,0.7000000000000001,0.00028197558363588686
+40,0,0.75,0.00028924022176391064
+40,0,0.8,0.0002981192239203842
+40,0,0.8500000000000001,0.0003086125901053075
+40,0,0.9,0.00032072032031868047
+40,0,0.9500000000000001,0.00033444241456050323
+40,0,1.0,0.0003497788728307757
+40,50,0.0,0.00035154543279456753
+40,50,0.05,0.0003361315176643441
+40,50,0.1,0.0003223401199162495
+40,50,0.15000000000000002,0.0003101712395502838
+40,50,0.2,0.0002996248765664468
+40,50,0.25,0.0002907010309647385
+40,50,0.30000000000000004,0.00028339970274515904
+40,50,0.35000000000000003,0.0002777208919077083
+40,50,0.4,0.0002736645984523864
+40,50,0.45,0.00027123082237919324
+40,50,0.5,0.0002704195636881288
+40,50,0.55,0.00027123082237919324
+40,50,0.6000000000000001,0.0002736645984523864
+40,50,0.65,0.0002777208919077083
+40,50,0.7000000000000001,0.00028339970274515904
+40,50,0.75,0.0002907010309647385
+40,50,0.8,0.0002996248765664468
+40,50,0.8500000000000001,0.0003101712395502838
+40,50,0.9,0.0003223401199162495
+40,50,0.9500000000000001,0.00033613151766434415
+40,50,1.0,0.00035154543279456753
+40,100,0.0,0.0003533119927583593
+40,100,0.05,0.0003378206207681851
+40,100,0.1,0.0003239599195138186
+40,100,0.15000000000000002,0.00031172988899526007
+40,100,0.2,0.0003011305292125093
+40,100,0.25,0.00029216184016556633
+40,100,0.30000000000000004,0.0002848238218544312
+40,100,0.35000000000000003,0.0002791164742791038
+40,100,0.4,0.0002750397974395843
+40,100,0.45,0.0002725937913358726
+40,100,0.5,0.0002717784559679687
+40,100,0.55,0.00027259379133587265
+40,100,0.6000000000000001,0.0002750397974395843
+40,100,0.65,0.0002791164742791038
+40,100,0.7000000000000001,0.0002848238218544312
+40,100,0.75,0.00029216184016556633
+40,100,0.8,0.0003011305292125093
+40,100,0.8500000000000001,0.00031172988899526007
+40,100,0.9,0.0003239599195138186
+40,100,0.9500000000000001,0.0003378206207681851
+40,100,1.0,0.0003533119927583593
+40,150,0.0,0.000355078552722151
+40,150,0.05,0.00033950972387202595
+40,150,0.1,0.00032557971911138773
+40,150,0.15000000000000002,0.0003132885384402363
+40,150,0.2,0.00030263618185857183
+40,150,0.25,0.0002936226493663941
+40,150,0.30000000000000004,0.00028624794096370333
+40,150,0.35000000000000003,0.0002805120566504993
+40,150,0.4,0.0002764149964267822
+40,150,0.45,0.0002739567602925519
+40,150,0.5,0.0002731373482478085
+40,150,0.55,0.00027395676029255196
+40,150,0.6000000000000001,0.0002764149964267822
+40,150,0.65,0.0002805120566504993
+40,150,0.7000000000000001,0.00028624794096370333
+40,150,0.75,0.0002936226493663941
+40,150,0.8,0.00030263618185857183
+40,150,0.8500000000000001,0.0003132885384402363
+40,150,0.9,0.00032557971911138773
+40,150,0.9500000000000001,0.000339509723872026
+40,150,1.0,0.000355078552722151
+40,200,0.0,0.0003568451126859429
+40,200,0.05,0.00034119882697586693
+40,200,0.1,0.00032719951870895683
+40,200,0.15000000000000002,0.00031484718788521264
+40,200,0.2,0.0003041418345046344
+40,200,0.25,0.000295083458567222
+40,200,0.30000000000000004,0.0002876720600729755
+40,200,0.35000000000000003,0.0002819076390218949
+40,200,0.4,0.00027779019541398017
+40,200,0.45,0.0002753197292492313
+40,200,0.5,0.00027449624052764836
+40,200,0.55,0.00027531972924923137
+40,200,0.6000000000000001,0.00027779019541398017
+40,200,0.65,0.0002819076390218949
+40,200,0.7000000000000001,0.0002876720600729755
+40,200,0.75,0.000295083458567222
+40,200,0.8,0.0003041418345046344
+40,200,0.8500000000000001,0.00031484718788521264
+40,200,0.9,0.00032719951870895683
+40,200,0.9500000000000001,0.00034119882697586693
+40,200,1.0,0.0003568451126859429
+40,250,0.0,0.0003586116726497347
+40,250,0.05,0.0003428879300797078
+40,250,0.1,0.0003288193183065259
+40,250,0.15000000000000002,0.0003164058373301889
+40,250,0.2,0.00030564748715069693
+40,250,0.25,0.0002965442677680498
+40,250,0.30000000000000004,0.0002890961791822476
+40,250,0.35000000000000003,0.0002833032213932903
+40,250,0.4,0.00027916539440117806
+40,250,0.45,0.00027668269820591067
+40,250,0.5,0.0002758551328074882
+40,250,0.55,0.00027668269820591067
+40,250,0.6000000000000001,0.00027916539440117806
+40,250,0.65,0.0002833032213932903
+40,250,0.7000000000000001,0.0002890961791822476
+40,250,0.75,0.0002965442677680498
+40,250,0.8,0.00030564748715069693
+40,250,0.8500000000000001,0.0003164058373301889
+40,250,0.9,0.0003288193183065259
+40,250,0.9500000000000001,0.00034288793007970786
+40,250,1.0,0.0003586116726497347
+40,300,0.0,0.0003603782326135265
+40,300,0.05,0.0003445770331835488
+40,300,0.1,0.000330439117904095
+40,300,0.15000000000000002,0.00031796448677516527
+40,300,0.2,0.0003071531397967595
+40,300,0.25,0.00029800507696887767
+40,300,0.30000000000000004,0.0002905202982915198
+40,300,0.35000000000000003,0.0002846988037646859
+40,300,0.4,0.000280540593388376
+40,300,0.45,0.0002780456671625901
+40,300,0.5,0.00027721402508732807
+40,300,0.55,0.0002780456671625901
+40,300,0.6000000000000001,0.000280540593388376
+40,300,0.65,0.0002846988037646859
+40,300,0.7000000000000001,0.0002905202982915198
+40,300,0.75,0.00029800507696887767
+40,300,0.8,0.0003071531397967595
+40,300,0.8500000000000001,0.00031796448677516527
+40,300,0.9,0.000330439117904095
+40,300,0.9500000000000001,0.0003445770331835488
+40,300,1.0,0.0003603782326135265
+40,350,0.0,0.00036214479257731824
+40,350,0.05,0.00034626613628738965
+40,350,0.1,0.0003320589175016641
+40,350,0.15000000000000002,0.00031952313622014155
+40,350,0.2,0.00030865879244282204
+40,350,0.25,0.00029946588616970544
+40,350,0.30000000000000004,0.00029194441740079197
+40,350,0.35000000000000003,0.00028609438613608136
+40,350,0.4,0.0002819157923755739
+40,350,0.45,0.0002794086361192694
+40,350,0.5,0.0002785729173671679
+40,350,0.55,0.00027940863611926943
+40,350,0.6000000000000001,0.0002819157923755739
+40,350,0.65,0.00028609438613608136
+40,350,0.7000000000000001,0.00029194441740079197
+40,350,0.75,0.00029946588616970544
+40,350,0.8,0.00030865879244282204
+40,350,0.8500000000000001,0.00031952313622014155
+40,350,0.9,0.0003320589175016641
+40,350,0.9500000000000001,0.0003462661362873897
+40,350,1.0,0.00036214479257731824
+40,400,0.0,0.0003639113525411101
+40,400,0.05,0.00034795523939123063
+40,400,0.1,0.0003336787170992332
+40,400,0.15000000000000002,0.0003210817856651179
+40,400,0.2,0.0003101644450888846
+40,400,0.25,0.0003009266953705333
+40,400,0.30000000000000004,0.00029336853651006415
+40,400,0.35000000000000003,0.00028748996850747695
+40,400,0.4,0.00028329099136277183
+40,400,0.45,0.0002807716050759488
+40,400,0.5,0.0002799318096470078
+40,400,0.55,0.00028077160507594884
+40,400,0.6000000000000001,0.00028329099136277183
+40,400,0.65,0.00028748996850747695
+40,400,0.7000000000000001,0.00029336853651006415
+40,400,0.75,0.0003009266953705333
+40,400,0.8,0.0003101644450888846
+40,400,0.8500000000000001,0.0003210817856651179
+40,400,0.9,0.0003336787170992332
+40,400,0.9500000000000001,0.00034795523939123063
+40,400,1.0,0.0003639113525411101
+40,450,0.0,0.00036567791250490184
+40,450,0.05,0.0003496443424950715
+40,450,0.1,0.00033529851669680225
+40,450,0.15000000000000002,0.00032264043511009413
+40,450,0.2,0.0003116700977349471
+40,450,0.25,0.00030238750457136114
+40,450,0.30000000000000004,0.00029479265561933627
+40,450,0.35000000000000003,0.0002888855508788724
+40,450,0.4,0.0002846661903499697
+40,450,0.45,0.0002821345740326281
+40,450,0.5,0.00028129070192684755
+40,450,0.55,0.00028213457403262815
+40,450,0.6000000000000001,0.0002846661903499697
+40,450,0.65,0.0002888855508788724
+40,450,0.7000000000000001,0.00029479265561933627
+40,450,0.75,0.00030238750457136114
+40,450,0.8,0.0003116700977349471
+40,450,0.8500000000000001,0.00032264043511009413
+40,450,0.9,0.00033529851669680225
+40,450,0.9500000000000001,0.00034964434249507156
+40,450,1.0,0.00036567791250490184
+40,500,0.0,0.0003674444724686937
+40,500,0.05,0.0003513334455989125
+40,500,0.1,0.0003369183162943714
+40,500,0.15000000000000002,0.00032419908455507047
+40,500,0.2,0.00031317575038100967
+40,500,0.25,0.000303848313772189
+40,500,0.30000000000000004,0.0002962167747286085
+40,500,0.35000000000000003,0.00029028113325026795
+40,500,0.4,0.0002860413893371677
+40,500,0.45,0.0002834975429893075
+40,500,0.5,0.00028264959420668743
+40,500,0.55,0.00028349754298930756
+40,500,0.6000000000000001,0.0002860413893371677
+40,500,0.65,0.00029028113325026795
+40,500,0.7000000000000001,0.0002962167747286085
+40,500,0.75,0.000303848313772189
+40,500,0.8,0.00031317575038100967
+40,500,0.8500000000000001,0.00032419908455507047
+40,500,0.9,0.0003369183162943714
+40,500,0.9500000000000001,0.0003513334455989125
+40,500,1.0,0.0003674444724686937
+40,550,0.0,0.00036921103243248545
+40,550,0.05,0.00035302254870275335
+40,550,0.1,0.00033853811589194046
+40,550,0.15000000000000002,0.00032575773400004676
+40,550,0.2,0.00031468140302707225
+40,550,0.25,0.0003053091229730168
+40,550,0.30000000000000004,0.0002976408938378806
+40,550,0.35000000000000003,0.0002916767156216635
+40,550,0.4,0.0002874165883243656
+40,550,0.45,0.00028486051194598686
+40,550,0.5,0.00028400848648652726
+40,550,0.55,0.0002848605119459869
+40,550,0.6000000000000001,0.0002874165883243656
+40,550,0.65,0.0002916767156216635
+40,550,0.7000000000000001,0.0002976408938378806
+40,550,0.75,0.0003053091229730168
+40,550,0.8,0.00031468140302707225
+40,550,0.8500000000000001,0.00032575773400004676
+40,550,0.9,0.00033853811589194046
+40,550,0.9500000000000001,0.0003530225487027534
+40,550,1.0,0.00036921103243248545
+40,600,0.0,0.00037097759239627725
+40,600,0.05,0.00035471165180659433
+40,600,0.1,0.00034015791548950956
+40,600,0.15000000000000002,0.0003273163834450231
+40,600,0.2,0.00031618705567313483
+40,600,0.25,0.00030676993217384466
+40,600,0.30000000000000004,0.0002990650129471528
+40,600,0.35000000000000003,0.000293072297993059
+40,600,0.4,0.00028879178731156354
+40,600,0.45,0.0002862234809026662
+40,600,0.5,0.0002853673787663671
+40,600,0.55,0.00028622348090266627
+40,600,0.6000000000000001,0.00028879178731156354
+40,600,0.65,0.000293072297993059
+40,600,0.7000000000000001,0.0002990650129471528
+40,600,0.75,0.00030676993217384466
+40,600,0.8,0.00031618705567313483
+40,600,0.8500000000000001,0.0003273163834450231
+40,600,0.9,0.00034015791548950956
+40,600,0.9500000000000001,0.00035471165180659433
+40,600,1.0,0.00037097759239627725
+40,650,0.0,0.00037274415236006905
+40,650,0.05,0.0003564007549104352
+40,650,0.1,0.00034177771508707867
+40,650,0.15000000000000002,0.00032887503288999933
+40,650,0.2,0.0003176927083191973
+40,650,0.25,0.0003082307413746724
+40,650,0.30000000000000004,0.0003004891320564249
+40,650,0.35000000000000003,0.00029446788036445454
+40,650,0.4,0.0002901669862987614
+40,650,0.45,0.00028758644985934557
+40,650,0.5,0.0002867262710462069
+40,650,0.55,0.0002875864498593456
+40,650,0.6000000000000001,0.0002901669862987614
+40,650,0.65,0.00029446788036445454
+40,650,0.7000000000000001,0.0003004891320564249
+40,650,0.75,0.0003082307413746724
+40,650,0.8,0.0003176927083191973
+40,650,0.8500000000000001,0.00032887503288999933
+40,650,0.9,0.00034177771508707867
+40,650,0.9500000000000001,0.00035640075491043526
+40,650,1.0,0.00037274415236006905
+40,700,0.0,0.0003745107123238609
+40,700,0.05,0.0003580898580142762
+40,700,0.1,0.00034339751468464777
+40,700,0.15000000000000002,0.00033043368233497567
+40,700,0.2,0.0003191983609652599
+40,700,0.25,0.0003096915505755003
+40,700,0.30000000000000004,0.0003019132511656971
+40,700,0.35000000000000003,0.00029586346273585007
+40,700,0.4,0.00029154218528595937
+40,700,0.45,0.0002889494188160249
+40,700,0.5,0.00028808516332604685
+40,700,0.55,0.000288949418816025
+40,700,0.6000000000000001,0.00029154218528595937
+40,700,0.65,0.00029586346273585007
+40,700,0.7000000000000001,0.0003019132511656971
+40,700,0.75,0.0003096915505755003
+40,700,0.8,0.0003191983609652599
+40,700,0.8500000000000001,0.00033043368233497567
+40,700,0.9,0.00034339751468464777
+40,700,0.9500000000000001,0.0003580898580142762
+40,700,1.0,0.0003745107123238609
+50,-400,0.0,0.00028691659742073453
+50,-400,0.05,0.00027433640814921
+50,-400,0.1,0.0002630804493273196
+50,-400,0.15000000000000002,0.00025314872095506347
+50,-400,0.2,0.00024454122303244145
+50,-400,0.25,0.00023725795555945355
+50,-400,0.30000000000000004,0.00023129891853609984
+50,-400,0.35000000000000003,0.00022666411196238024
+50,-400,0.4,0.00022335353583829485
+50,-400,0.45,0.00022136719016384364
+50,-400,0.5,0.00022070507493902655
+50,-400,0.55,0.00022136719016384367
+50,-400,0.6000000000000001,0.00022335353583829485
+50,-400,0.65,0.00022666411196238024
+50,-400,0.7000000000000001,0.00023129891853609984
+50,-400,0.75,0.00023725795555945355
+50,-400,0.8,0.00024454122303244145
+50,-400,0.8500000000000001,0.00025314872095506347
+50,-400,0.9,0.0002630804493273196
+50,-400,0.9500000000000001,0.00027433640814921004
+50,-400,1.0,0.00028691659742073453
+50,-350,0.0,0.000285523798404129
+50,-350,0.05,0.0002730046780125633
+50,-350,0.1,0.00026180335976747825
+50,-350,0.15000000000000002,0.00025191984366887383
+50,-350,0.2,0.00024335412971674994
+50,-350,0.25,0.00023610621791110665
+50,-350,0.30000000000000004,0.000230176108251944
+50,-350,0.35000000000000003,0.00022556380073926187
+50,-350,0.4,0.0002222692953730604
+50,-350,0.45,0.0002202925921533395
+50,-350,0.5,0.0002196336910800992
+50,-350,0.55,0.00022029259215333954
+50,-350,0.6000000000000001,0.0002222692953730604
+50,-350,0.65,0.00022556380073926187
+50,-350,0.7000000000000001,0.000230176108251944
+50,-350,0.75,0.00023610621791110665
+50,-350,0.8,0.00024335412971674994
+50,-350,0.8500000000000001,0.00025191984366887383
+50,-350,0.9,0.00026180335976747825
+50,-350,0.9500000000000001,0.00027300467801256333
+50,-350,1.0,0.000285523798404129
+50,-300,0.0,0.00028413099938752353
+50,-300,0.05,0.0002716729478759167
+50,-300,0.1,0.0002605262702076369
+50,-300,0.15000000000000002,0.0002506909663826842
+50,-300,0.2,0.00024216703640105852
+50,-300,0.25,0.0002349544802627598
+50,-300,0.30000000000000004,0.0002290532979677882
+50,-300,0.35000000000000003,0.00022446348951614357
+50,-300,0.4,0.000221185054907826
+50,-300,0.45,0.00021921799414283545
+50,-300,0.5,0.00021856230722117195
+50,-300,0.55,0.0002192179941428355
+50,-300,0.6000000000000001,0.000221185054907826
+50,-300,0.65,0.00022446348951614357
+50,-300,0.7000000000000001,0.0002290532979677882
+50,-300,0.75,0.0002349544802627598
+50,-300,0.8,0.00024216703640105852
+50,-300,0.8500000000000001,0.0002506909663826842
+50,-300,0.9,0.0002605262702076369
+50,-300,0.9500000000000001,0.00027167294787591674
+50,-300,1.0,0.00028413099938752353
+50,-250,0.0,0.000282738200370918
+50,-250,0.05,0.00027034121773927003
+50,-250,0.1,0.0002592491806477955
+50,-250,0.15000000000000002,0.00024946208909649455
+50,-250,0.2,0.000240979943085367
+50,-250,0.25,0.0002338027426144129
+50,-250,0.30000000000000004,0.00022793048768363235
+50,-250,0.35000000000000003,0.00022336317829302517
+50,-250,0.4,0.00022010081444259153
+50,-250,0.45,0.00021814339613233133
+50,-250,0.5,0.0002174909233622446
+50,-250,0.55,0.00021814339613233135
+50,-250,0.6000000000000001,0.00022010081444259153
+50,-250,0.65,0.00022336317829302517
+50,-250,0.7000000000000001,0.00022793048768363235
+50,-250,0.75,0.0002338027426144129
+50,-250,0.8,0.000240979943085367
+50,-250,0.8500000000000001,0.00024946208909649455
+50,-250,0.9,0.0002592491806477955
+50,-250,0.9500000000000001,0.00027034121773927003
+50,-250,1.0,0.000282738200370918
+50,-200,0.0,0.0002813454013543125
+50,-200,0.05,0.0002690094876026234
+50,-200,0.1,0.00025797209108795416
+50,-200,0.15000000000000002,0.00024823321181030497
+50,-200,0.2,0.00023979284976967556
+50,-200,0.25,0.0002326510049660661
+50,-200,0.30000000000000004,0.00022680767739947656
+50,-200,0.35000000000000003,0.00022226286706990685
+50,-200,0.4,0.00021901657397735712
+50,-200,0.45,0.00021706879812182723
+50,-200,0.5,0.00021641953950331732
+50,-200,0.55,0.00021706879812182726
+50,-200,0.6000000000000001,0.00021901657397735712
+50,-200,0.65,0.00022226286706990685
+50,-200,0.7000000000000001,0.00022680767739947656
+50,-200,0.75,0.0002326510049660661
+50,-200,0.8,0.00023979284976967556
+50,-200,0.8500000000000001,0.00024823321181030497
+50,-200,0.9,0.00025797209108795416
+50,-200,0.9500000000000001,0.00026900948760262344
+50,-200,1.0,0.0002813454013543125
+50,-150,0.0,0.000279952602337707
+50,-150,0.05,0.0002676777574659767
+50,-150,0.1,0.0002566950015281128
+50,-150,0.15000000000000002,0.00024700433452411527
+50,-150,0.2,0.00023860575645398408
+50,-150,0.25,0.0002314992673177192
+50,-150,0.30000000000000004,0.0002256848671153207
+50,-150,0.35000000000000003,0.0002211625558467885
+50,-150,0.4,0.00021793233351212265
+50,-150,0.45,0.00021599420011132313
+50,-150,0.5,0.00021534815564438998
+50,-150,0.55,0.0002159942001113232
+50,-150,0.6000000000000001,0.00021793233351212265
+50,-150,0.65,0.0002211625558467885
+50,-150,0.7000000000000001,0.0002256848671153207
+50,-150,0.75,0.0002314992673177192
+50,-150,0.8,0.00023860575645398408
+50,-150,0.8500000000000001,0.00024700433452411527
+50,-150,0.9,0.0002566950015281128
+50,-150,0.9500000000000001,0.00026767775746597673
+50,-150,1.0,0.000279952602337707
+50,-100,0.0,0.0002785598033211015
+50,-100,0.05,0.0002663460273293301
+50,-100,0.1,0.00025541791196827143
+50,-100,0.15000000000000002,0.0002457754572379257
+50,-100,0.2,0.00023741866313829263
+50,-100,0.25,0.00023034752966937238
+50,-100,0.30000000000000004,0.0002245620568311649
+50,-100,0.35000000000000003,0.00022006224462367015
+50,-100,0.4,0.0002168480930468882
+50,-100,0.45,0.00021491960210081904
+50,-100,0.5,0.0002142767717854627
+50,-100,0.55,0.0002149196021008191
+50,-100,0.6000000000000001,0.0002168480930468882
+50,-100,0.65,0.00022006224462367015
+50,-100,0.7000000000000001,0.0002245620568311649
+50,-100,0.75,0.00023034752966937238
+50,-100,0.8,0.00023741866313829263
+50,-100,0.8500000000000001,0.0002457754572379257
+50,-100,0.9,0.00025541791196827143
+50,-100,0.9500000000000001,0.00026634602732933014
+50,-100,1.0,0.0002785598033211015
+50,-50,0.0,0.000277167004304496
+50,-50,0.05,0.00026501429719268343
+50,-50,0.1,0.00025414082240843007
+50,-50,0.15000000000000002,0.00024454657995173605
+50,-50,0.2,0.00023623156982260115
+50,-50,0.25,0.00022919579202102552
+50,-50,0.30000000000000004,0.00022343924654700905
+50,-50,0.35000000000000003,0.0002189619334005518
+50,-50,0.4,0.0002157638525816538
+50,-50,0.45,0.00021384500409031494
+50,-50,0.5,0.00021320538792653538
+50,-50,0.55,0.000213845004090315
+50,-50,0.6000000000000001,0.0002157638525816538
+50,-50,0.65,0.0002189619334005518
+50,-50,0.7000000000000001,0.00022343924654700905
+50,-50,0.75,0.00022919579202102552
+50,-50,0.8,0.00023623156982260115
+50,-50,0.8500000000000001,0.00024454657995173605
+50,-50,0.9,0.00025414082240843007
+50,-50,0.9500000000000001,0.00026501429719268343
+50,-50,1.0,0.000277167004304496
+50,0,0.0,0.0002757742052878905
+50,0,0.05,0.00026368256705603673
+50,0,0.1,0.0002528637328485887
+50,0,0.15000000000000002,0.00024331770266554644
+50,0,0.2,0.00023504447650690973
+50,0,0.25,0.00022804405437267861
+50,0,0.30000000000000004,0.00022231643626285325
+50,0,0.35000000000000003,0.00021786162217743345
+50,0,0.4,0.00021467961211641933
+50,0,0.45,0.00021277040607981087
+50,0,0.5,0.00021213400406760804
+50,0,0.55,0.0002127704060798109
+50,0,0.6000000000000001,0.00021467961211641933
+50,0,0.65,0.00021786162217743345
+50,0,0.7000000000000001,0.00022231643626285325
+50,0,0.75,0.00022804405437267861
+50,0,0.8,0.00023504447650690973
+50,0,0.8500000000000001,0.00024331770266554644
+50,0,0.9,0.0002528637328485887
+50,0,0.9500000000000001,0.0002636825670560368
+50,0,1.0,0.0002757742052878905
+50,50,0.0,0.000277167004304496
+50,50,0.05,0.00026501429719268343
+50,50,0.1,0.00025414082240843007
+50,50,0.15000000000000002,0.00024454657995173605
+50,50,0.2,0.00023623156982260115
+50,50,0.25,0.00022919579202102552
+50,50,0.30000000000000004,0.00022343924654700905
+50,50,0.35000000000000003,0.0002189619334005518
+50,50,0.4,0.0002157638525816538
+50,50,0.45,0.00021384500409031494
+50,50,0.5,0.00021320538792653538
+50,50,0.55,0.000213845004090315
+50,50,0.6000000000000001,0.0002157638525816538
+50,50,0.65,0.0002189619334005518
+50,50,0.7000000000000001,0.00022343924654700905
+50,50,0.75,0.00022919579202102552
+50,50,0.8,0.00023623156982260115
+50,50,0.8500000000000001,0.00024454657995173605
+50,50,0.9,0.00025414082240843007
+50,50,0.9500000000000001,0.00026501429719268343
+50,50,1.0,0.000277167004304496
+50,100,0.0,0.0002785598033211015
+50,100,0.05,0.0002663460273293301
+50,100,0.1,0.00025541791196827143
+50,100,0.15000000000000002,0.0002457754572379257
+50,100,0.2,0.00023741866313829263
+50,100,0.25,0.00023034752966937238
+50,100,0.30000000000000004,0.0002245620568311649
+50,100,0.35000000000000003,0.00022006224462367015
+50,100,0.4,0.0002168480930468882
+50,100,0.45,0.00021491960210081904
+50,100,0.5,0.0002142767717854627
+50,100,0.55,0.0002149196021008191
+50,100,0.6000000000000001,0.0002168480930468882
+50,100,0.65,0.00022006224462367015
+50,100,0.7000000000000001,0.0002245620568311649
+50,100,0.75,0.00023034752966937238
+50,100,0.8,0.00023741866313829263
+50,100,0.8500000000000001,0.0002457754572379257
+50,100,0.9,0.00025541791196827143
+50,100,0.9500000000000001,0.00026634602732933014
+50,100,1.0,0.0002785598033211015
+50,150,0.0,0.000279952602337707
+50,150,0.05,0.0002676777574659767
+50,150,0.1,0.0002566950015281128
+50,150,0.15000000000000002,0.00024700433452411527
+50,150,0.2,0.00023860575645398408
+50,150,0.25,0.0002314992673177192
+50,150,0.30000000000000004,0.0002256848671153207
+50,150,0.35000000000000003,0.0002211625558467885
+50,150,0.4,0.00021793233351212265
+50,150,0.45,0.00021599420011132313
+50,150,0.5,0.00021534815564438998
+50,150,0.55,0.0002159942001113232
+50,150,0.6000000000000001,0.00021793233351212265
+50,150,0.65,0.0002211625558467885
+50,150,0.7000000000000001,0.0002256848671153207
+50,150,0.75,0.0002314992673177192
+50,150,0.8,0.00023860575645398408
+50,150,0.8500000000000001,0.00024700433452411527
+50,150,0.9,0.0002566950015281128
+50,150,0.9500000000000001,0.00026767775746597673
+50,150,1.0,0.000279952602337707
+50,200,0.0,0.0002813454013543125
+50,200,0.05,0.0002690094876026234
+50,200,0.1,0.00025797209108795416
+50,200,0.15000000000000002,0.00024823321181030497
+50,200,0.2,0.00023979284976967556
+50,200,0.25,0.0002326510049660661
+50,200,0.30000000000000004,0.00022680767739947656
+50,200,0.35000000000000003,0.00022226286706990685
+50,200,0.4,0.00021901657397735712
+50,200,0.45,0.00021706879812182723
+50,200,0.5,0.00021641953950331732
+50,200,0.55,0.00021706879812182726
+50,200,0.6000000000000001,0.00021901657397735712
+50,200,0.65,0.00022226286706990685
+50,200,0.7000000000000001,0.00022680767739947656
+50,200,0.75,0.0002326510049660661
+50,200,0.8,0.00023979284976967556
+50,200,0.8500000000000001,0.00024823321181030497
+50,200,0.9,0.00025797209108795416
+50,200,0.9500000000000001,0.00026900948760262344
+50,200,1.0,0.0002813454013543125
+50,250,0.0,0.000282738200370918
+50,250,0.05,0.00027034121773927003
+50,250,0.1,0.0002592491806477955
+50,250,0.15000000000000002,0.00024946208909649455
+50,250,0.2,0.000240979943085367
+50,250,0.25,0.0002338027426144129
+50,250,0.30000000000000004,0.00022793048768363235
+50,250,0.35000000000000003,0.00022336317829302517
+50,250,0.4,0.00022010081444259153
+50,250,0.45,0.00021814339613233133
+50,250,0.5,0.0002174909233622446
+50,250,0.55,0.00021814339613233135
+50,250,0.6000000000000001,0.00022010081444259153
+50,250,0.65,0.00022336317829302517
+50,250,0.7000000000000001,0.00022793048768363235
+50,250,0.75,0.0002338027426144129
+50,250,0.8,0.000240979943085367
+50,250,0.8500000000000001,0.00024946208909649455
+50,250,0.9,0.0002592491806477955
+50,250,0.9500000000000001,0.00027034121773927003
+50,250,1.0,0.000282738200370918
+50,300,0.0,0.00028413099938752353
+50,300,0.05,0.0002716729478759167
+50,300,0.1,0.0002605262702076369
+50,300,0.15000000000000002,0.0002506909663826842
+50,300,0.2,0.00024216703640105852
+50,300,0.25,0.0002349544802627598
+50,300,0.30000000000000004,0.0002290532979677882
+50,300,0.35000000000000003,0.00022446348951614357
+50,300,0.4,0.000221185054907826
+50,300,0.45,0.00021921799414283545
+50,300,0.5,0.00021856230722117195
+50,300,0.55,0.0002192179941428355
+50,300,0.6000000000000001,0.000221185054907826
+50,300,0.65,0.00022446348951614357
+50,300,0.7000000000000001,0.0002290532979677882
+50,300,0.75,0.0002349544802627598
+50,300,0.8,0.00024216703640105852
+50,300,0.8500000000000001,0.0002506909663826842
+50,300,0.9,0.0002605262702076369
+50,300,0.9500000000000001,0.00027167294787591674
+50,300,1.0,0.00028413099938752353
+50,350,0.0,0.000285523798404129
+50,350,0.05,0.0002730046780125633
+50,350,0.1,0.00026180335976747825
+50,350,0.15000000000000002,0.00025191984366887383
+50,350,0.2,0.00024335412971674994
+50,350,0.25,0.00023610621791110665
+50,350,0.30000000000000004,0.000230176108251944
+50,350,0.35000000000000003,0.00022556380073926187
+50,350,0.4,0.0002222692953730604
+50,350,0.45,0.0002202925921533395
+50,350,0.5,0.0002196336910800992
+50,350,0.55,0.00022029259215333954
+50,350,0.6000000000000001,0.0002222692953730604
+50,350,0.65,0.00022556380073926187
+50,350,0.7000000000000001,0.000230176108251944
+50,350,0.75,0.00023610621791110665
+50,350,0.8,0.00024335412971674994
+50,350,0.8500000000000001,0.00025191984366887383
+50,350,0.9,0.00026180335976747825
+50,350,0.9500000000000001,0.00027300467801256333
+50,350,1.0,0.000285523798404129
+50,400,0.0,0.00028691659742073453
+50,400,0.05,0.00027433640814921
+50,400,0.1,0.0002630804493273196
+50,400,0.15000000000000002,0.00025314872095506347
+50,400,0.2,0.00024454122303244145
+50,400,0.25,0.00023725795555945355
+50,400,0.30000000000000004,0.00023129891853609984
+50,400,0.35000000000000003,0.00022666411196238024
+50,400,0.4,0.00022335353583829485
+50,400,0.45,0.00022136719016384364
+50,400,0.5,0.00022070507493902655
+50,400,0.55,0.00022136719016384367
+50,400,0.6000000000000001,0.00022335353583829485
+50,400,0.65,0.00022666411196238024
+50,400,0.7000000000000001,0.00023129891853609984
+50,400,0.75,0.00023725795555945355
+50,400,0.8,0.00024454122303244145
+50,400,0.8500000000000001,0.00025314872095506347
+50,400,0.9,0.0002630804493273196
+50,400,0.9500000000000001,0.00027433640814921004
+50,400,1.0,0.00028691659742073453
+50,450,0.0,0.00028830939643734003
+50,450,0.05,0.00027566813828585663
+50,450,0.1,0.00026435753888716097
+50,450,0.15000000000000002,0.00025437759824125305
+50,450,0.2,0.00024572831634813287
+50,450,0.25,0.00023840969320780038
+50,450,0.30000000000000004,0.00023242172882025566
+50,450,0.35000000000000003,0.0002277644231854986
+50,450,0.4,0.00022443777630352926
+50,450,0.45,0.00022244178817434768
+50,450,0.5,0.00022177645879795386
+50,450,0.55,0.0002224417881743477
+50,450,0.6000000000000001,0.00022443777630352926
+50,450,0.65,0.0002277644231854986
+50,450,0.7000000000000001,0.00023242172882025566
+50,450,0.75,0.00023840969320780038
+50,450,0.8,0.00024572831634813287
+50,450,0.8500000000000001,0.00025437759824125305
+50,450,0.9,0.00026435753888716097
+50,450,0.9500000000000001,0.00027566813828585663
+50,450,1.0,0.00028830939643734003
+50,500,0.0,0.0002897021954539456
+50,500,0.05,0.0002769998684225033
+50,500,0.1,0.00026563462844700234
+50,500,0.15000000000000002,0.0002556064755274427
+50,500,0.2,0.00024691540966382435
+50,500,0.25,0.0002395614308561473
+50,500,0.30000000000000004,0.0002335445391044115
+50,500,0.35000000000000003,0.000228864734408617
+50,500,0.4,0.00022552201676876373
+50,500,0.45,0.0002235163861848518
+50,500,0.5,0.0002228478426568812
+50,500,0.55,0.00022351638618485186
+50,500,0.6000000000000001,0.00022552201676876373
+50,500,0.65,0.000228864734408617
+50,500,0.7000000000000001,0.0002335445391044115
+50,500,0.75,0.0002395614308561473
+50,500,0.8,0.00024691540966382435
+50,500,0.8500000000000001,0.0002556064755274427
+50,500,0.9,0.00026563462844700234
+50,500,0.9500000000000001,0.00027699986842250334
+50,500,1.0,0.0002897021954539456
+50,550,0.0,0.00029109499447055103
+50,550,0.05,0.0002783315985591499
+50,550,0.1,0.00026691171800684364
+50,550,0.15000000000000002,0.00025683535281363233
+50,550,0.2,0.0002481025029795158
+50,550,0.25,0.0002407131685044941
+50,550,0.30000000000000004,0.0002346673493885673
+50,550,0.35000000000000003,0.00022996504563173529
+50,550,0.4,0.00022660625723399817
+50,550,0.45,0.0002245909841953559
+50,550,0.5,0.0002239192265158085
+50,550,0.55,0.00022459098419535595
+50,550,0.6000000000000001,0.00022660625723399817
+50,550,0.65,0.00022996504563173529
+50,550,0.7000000000000001,0.0002346673493885673
+50,550,0.75,0.0002407131685044941
+50,550,0.8,0.0002481025029795158
+50,550,0.8500000000000001,0.00025683535281363233
+50,550,0.9,0.00026691171800684364
+50,550,0.9500000000000001,0.00027833159855914993
+50,550,1.0,0.00029109499447055103
+50,600,0.0,0.0002924877934871566
+50,600,0.05,0.0002796633286957966
+50,600,0.1,0.00026818880756668506
+50,600,0.15000000000000002,0.00025806423009982197
+50,600,0.2,0.0002492895962952073
+50,600,0.25,0.00024186490615284097
+50,600,0.30000000000000004,0.00023579015967272314
+50,600,0.35000000000000003,0.00023106535685485366
+50,600,0.4,0.00022769049769923264
+50,600,0.45,0.00022566558220586
+50,600,0.5,0.00022499061037473583
+50,600,0.55,0.00022566558220586002
+50,600,0.6000000000000001,0.00022769049769923264
+50,600,0.65,0.00023106535685485366
+50,600,0.7000000000000001,0.00023579015967272314
+50,600,0.75,0.00024186490615284097
+50,600,0.8,0.0002492895962952073
+50,600,0.8500000000000001,0.00025806423009982197
+50,600,0.9,0.00026818880756668506
+50,600,0.9500000000000001,0.00027966332869579664
+50,600,1.0,0.0002924877934871566
+50,650,0.0,0.00029388059250376204
+50,650,0.05,0.00028099505883244323
+50,650,0.1,0.00026946589712652637
+50,650,0.15000000000000002,0.00025929310738601155
+50,650,0.2,0.00025047668961089873
+50,650,0.25,0.00024301664380118782
+50,650,0.30000000000000004,0.00023691296995687896
+50,650,0.35000000000000003,0.000232165668077972
+50,650,0.4,0.00022877473816446705
+50,650,0.45,0.0002267401802163641
+50,650,0.5,0.00022606199423366312
+50,650,0.55,0.00022674018021636412
+50,650,0.6000000000000001,0.00022877473816446705
+50,650,0.65,0.000232165668077972
+50,650,0.7000000000000001,0.00023691296995687896
+50,650,0.75,0.00024301664380118782
+50,650,0.8,0.00025047668961089873
+50,650,0.8500000000000001,0.00025929310738601155
+50,650,0.9,0.00026946589712652637
+50,650,0.9500000000000001,0.00028099505883244323
+50,650,1.0,0.00029388059250376204
+50,700,0.0,0.0002952733915203676
+50,700,0.05,0.0002823267889690899
+50,700,0.1,0.0002707429866863678
+50,700,0.15000000000000002,0.00026052198467220125
+50,700,0.2,0.0002516637829265902
+50,700,0.25,0.00024416838144953473
+50,700,0.30000000000000004,0.0002380357802410348
+50,700,0.35000000000000003,0.00023326597930109036
+50,700,0.4,0.00022985897862970152
+50,700,0.45,0.0002278147782268682
+50,700,0.5,0.00022713337809259046
+50,700,0.55,0.00022781477822686827
+50,700,0.6000000000000001,0.00022985897862970152
+50,700,0.65,0.00023326597930109036
+50,700,0.7000000000000001,0.0002380357802410348
+50,700,0.75,0.00024416838144953473
+50,700,0.8,0.0002516637829265902
+50,700,0.8500000000000001,0.00026052198467220125
+50,700,0.9,0.0002707429866863678
+50,700,0.9500000000000001,0.00028232678896908994
+50,700,1.0,0.0002952733915203676
diff --git a/pybamm/input/parameters/ecm/data/ecm_example_r1.csv b/pybamm/input/parameters/ecm/data/ecm_example_r1.csv
new file mode 100644
index 0000000000..2c28056055
--- /dev/null
+++ b/pybamm/input/parameters/ecm/data/ecm_example_r1.csv
@@ -0,0 +1,3865 @@
+Temperature [degC],Current [A],SoC,R1 [Ohm]
+-20,-400,0.0,0.0033714083054657926
+-20,-400,0.05,0.003223585018226138
+-20,-400,0.1,0.0030913220770117105
+-20,-400,0.15000000000000002,0.0029746194818225107
+-20,-400,0.2,0.002873477232658537
+-20,-400,0.25,0.00278789532951979
+-20,-400,0.30000000000000004,0.0027178737724062696
+-20,-400,0.35000000000000003,0.002663412561317976
+-20,-400,0.4,0.0026245116962549087
+-20,-400,0.45,0.0026011711772170694
+-20,-400,0.5,0.0025933910042044554
+-20,-400,0.55,0.00260117117721707
+-20,-400,0.6000000000000001,0.0026245116962549087
+-20,-400,0.65,0.002663412561317976
+-20,-400,0.7000000000000001,0.0027178737724062696
+-20,-400,0.75,0.00278789532951979
+-20,-400,0.8,0.002873477232658537
+-20,-400,0.8500000000000001,0.0029746194818225107
+-20,-400,0.9,0.0030913220770117105
+-20,-400,0.9500000000000001,0.0032235850182261386
+-20,-400,1.0,0.0033714083054657926
+-20,-350,0.0,0.0033550422457305214
+-20,-350,0.05,0.003207936547263875
+-20,-350,0.1,0.003076315659162139
+-20,-350,0.15000000000000002,0.002960179581425314
+-20,-350,0.2,0.002859528314053398
+-20,-350,0.25,0.002774361857046392
+-20,-350,0.30000000000000004,0.002704680210404297
+-20,-350,0.35000000000000003,0.002650483374127111
+-20,-350,0.4,0.0026117713482148365
+-20,-350,0.45,0.0025885441326674715
+-20,-350,0.5,0.0025808017274850164
+-20,-350,0.55,0.002588544132667472
+-20,-350,0.6000000000000001,0.0026117713482148365
+-20,-350,0.65,0.002650483374127111
+-20,-350,0.7000000000000001,0.002704680210404297
+-20,-350,0.75,0.002774361857046392
+-20,-350,0.8,0.002859528314053398
+-20,-350,0.8500000000000001,0.002960179581425314
+-20,-350,0.9,0.003076315659162139
+-20,-350,0.9500000000000001,0.0032079365472638755
+-20,-350,1.0,0.0033550422457305214
+-20,-300,0.0,0.003338676185995251
+-20,-300,0.05,0.0031922880763016123
+-20,-300,0.1,0.003061309241312568
+-20,-300,0.15000000000000002,0.0029457396810281173
+-20,-300,0.2,0.0028455793954482596
+-20,-300,0.25,0.0027608283845729953
+-20,-300,0.30000000000000004,0.0026914866484023248
+-20,-300,0.35000000000000003,0.0026375541869362476
+-20,-300,0.4,0.002599031000174764
+-20,-300,0.45,0.002575917088117874
+-20,-300,0.5,0.002568212450765577
+-20,-300,0.55,0.0025759170881178746
+-20,-300,0.6000000000000001,0.002599031000174764
+-20,-300,0.65,0.0026375541869362476
+-20,-300,0.7000000000000001,0.0026914866484023248
+-20,-300,0.75,0.0027608283845729953
+-20,-300,0.8,0.0028455793954482596
+-20,-300,0.8500000000000001,0.0029457396810281173
+-20,-300,0.9,0.003061309241312568
+-20,-300,0.9500000000000001,0.0031922880763016128
+-20,-300,1.0,0.003338676185995251
+-20,-250,0.0,0.0033223101262599797
+-20,-250,0.05,0.003176639605339349
+-20,-250,0.1,0.003046302823462996
+-20,-250,0.15000000000000002,0.00293129978063092
+-20,-250,0.2,0.002831630476843121
+-20,-250,0.25,0.0027472949120995985
+-20,-250,0.30000000000000004,0.0026782930864003526
+-20,-250,0.35000000000000003,0.0026246249997453836
+-20,-250,0.4,0.0025862906521346915
+-20,-250,0.45,0.0025632900435682763
+-20,-250,0.5,0.002555623174046138
+-20,-250,0.55,0.0025632900435682768
+-20,-250,0.6000000000000001,0.0025862906521346915
+-20,-250,0.65,0.0026246249997453836
+-20,-250,0.7000000000000001,0.0026782930864003526
+-20,-250,0.75,0.0027472949120995985
+-20,-250,0.8,0.002831630476843121
+-20,-250,0.8500000000000001,0.00293129978063092
+-20,-250,0.9,0.003046302823462996
+-20,-250,0.9500000000000001,0.0031766396053393496
+-20,-250,1.0,0.0033223101262599797
+-20,-200,0.0,0.003305944066524709
+-20,-200,0.05,0.003160991134377087
+-20,-200,0.1,0.003031296405613425
+-20,-200,0.15000000000000002,0.0029168598802337244
+-20,-200,0.2,0.0028176815582379826
+-20,-200,0.25,0.0027337614396262017
+-20,-200,0.30000000000000004,0.002665099524398381
+-20,-200,0.35000000000000003,0.00261169581255452
+-20,-200,0.4,0.0025735503040946197
+-20,-200,0.45,0.0025506629990186794
+-20,-200,0.5,0.002543033897326699
+-20,-200,0.55,0.0025506629990186803
+-20,-200,0.6000000000000001,0.0025735503040946197
+-20,-200,0.65,0.00261169581255452
+-20,-200,0.7000000000000001,0.002665099524398381
+-20,-200,0.75,0.0027337614396262017
+-20,-200,0.8,0.0028176815582379826
+-20,-200,0.8500000000000001,0.0029168598802337244
+-20,-200,0.9,0.003031296405613425
+-20,-200,0.9500000000000001,0.0031609911343770873
+-20,-200,1.0,0.003305944066524709
+-20,-150,0.0,0.003289578006789438
+-20,-150,0.05,0.0031453426634148237
+-20,-150,0.1,0.003016289987763853
+-20,-150,0.15000000000000002,0.0029024199798365273
+-20,-150,0.2,0.002803732639632844
+-20,-150,0.25,0.002720227967152804
+-20,-150,0.30000000000000004,0.002651905962396408
+-20,-150,0.35000000000000003,0.0025987666253636556
+-20,-150,0.4,0.002560809956054547
+-20,-150,0.45,0.0025380359544690816
+-20,-150,0.5,0.0025304446206072593
+-20,-150,0.55,0.0025380359544690824
+-20,-150,0.6000000000000001,0.002560809956054547
+-20,-150,0.65,0.0025987666253636556
+-20,-150,0.7000000000000001,0.002651905962396408
+-20,-150,0.75,0.002720227967152804
+-20,-150,0.8,0.002803732639632844
+-20,-150,0.8500000000000001,0.0029024199798365273
+-20,-150,0.9,0.003016289987763853
+-20,-150,0.9500000000000001,0.003145342663414824
+-20,-150,1.0,0.003289578006789438
+-20,-100,0.0,0.0032732119470541676
+-20,-100,0.05,0.003129694192452561
+-20,-100,0.1,0.003001283569914282
+-20,-100,0.15000000000000002,0.0028879800794393306
+-20,-100,0.2,0.0027897837210277055
+-20,-100,0.25,0.002706694494679407
+-20,-100,0.30000000000000004,0.0026387124003944364
+-20,-100,0.35000000000000003,0.002585837438172792
+-20,-100,0.4,0.0025480696080144747
+-20,-100,0.45,0.0025254089099194846
+-20,-100,0.5,0.002517855343887821
+-20,-100,0.55,0.002525408909919485
+-20,-100,0.6000000000000001,0.0025480696080144747
+-20,-100,0.65,0.002585837438172792
+-20,-100,0.7000000000000001,0.0026387124003944364
+-20,-100,0.75,0.002706694494679407
+-20,-100,0.8,0.0027897837210277055
+-20,-100,0.8500000000000001,0.0028879800794393306
+-20,-100,0.9,0.003001283569914282
+-20,-100,0.9500000000000001,0.003129694192452562
+-20,-100,1.0,0.0032732119470541676
+-20,-50,0.0,0.0032568458873188963
+-20,-50,0.05,0.0031140457214902987
+-20,-50,0.1,0.0029862771520647105
+-20,-50,0.15000000000000002,0.0028735401790421344
+-20,-50,0.2,0.002775834802422567
+-20,-50,0.25,0.0026931610222060104
+-20,-50,0.30000000000000004,0.002625518838392464
+-20,-50,0.35000000000000003,0.002572908250981928
+-20,-50,0.4,0.002535329259974402
+-20,-50,0.45,0.0025127818653698872
+-20,-50,0.5,0.0025052660671683815
+-20,-50,0.55,0.0025127818653698877
+-20,-50,0.6000000000000001,0.002535329259974402
+-20,-50,0.65,0.002572908250981928
+-20,-50,0.7000000000000001,0.002625518838392464
+-20,-50,0.75,0.0026931610222060104
+-20,-50,0.8,0.002775834802422567
+-20,-50,0.8500000000000001,0.0028735401790421344
+-20,-50,0.9,0.0029862771520647105
+-20,-50,0.9500000000000001,0.003114045721490299
+-20,-50,1.0,0.0032568458873188963
+-20,0,0.0,0.003240479827583626
+-20,0,0.05,0.0030983972505280355
+-20,0,0.1,0.002971270734215139
+-20,0,0.15000000000000002,0.0028591002786449373
+-20,0,0.2,0.002761885883817429
+-20,0,0.25,0.002679627549732613
+-20,0,0.30000000000000004,0.0026123252763904916
+-20,0,0.35000000000000003,0.0025599790637910636
+-20,0,0.4,0.0025225889119343302
+-20,0,0.45,0.0025001548208202894
+-20,0,0.5,0.0024926767904489425
+-20,0,0.55,0.00250015482082029
+-20,0,0.6000000000000001,0.0025225889119343302
+-20,0,0.65,0.0025599790637910636
+-20,0,0.7000000000000001,0.0026123252763904916
+-20,0,0.75,0.002679627549732613
+-20,0,0.8,0.002761885883817429
+-20,0,0.8500000000000001,0.0028591002786449373
+-20,0,0.9,0.002971270734215139
+-20,0,0.9500000000000001,0.003098397250528036
+-20,0,1.0,0.003240479827583626
+-20,50,0.0,0.0032568458873188963
+-20,50,0.05,0.0031140457214902987
+-20,50,0.1,0.0029862771520647105
+-20,50,0.15000000000000002,0.0028735401790421344
+-20,50,0.2,0.002775834802422567
+-20,50,0.25,0.0026931610222060104
+-20,50,0.30000000000000004,0.002625518838392464
+-20,50,0.35000000000000003,0.002572908250981928
+-20,50,0.4,0.002535329259974402
+-20,50,0.45,0.0025127818653698872
+-20,50,0.5,0.0025052660671683815
+-20,50,0.55,0.0025127818653698877
+-20,50,0.6000000000000001,0.002535329259974402
+-20,50,0.65,0.002572908250981928
+-20,50,0.7000000000000001,0.002625518838392464
+-20,50,0.75,0.0026931610222060104
+-20,50,0.8,0.002775834802422567
+-20,50,0.8500000000000001,0.0028735401790421344
+-20,50,0.9,0.0029862771520647105
+-20,50,0.9500000000000001,0.003114045721490299
+-20,50,1.0,0.0032568458873188963
+-20,100,0.0,0.0032732119470541676
+-20,100,0.05,0.003129694192452561
+-20,100,0.1,0.003001283569914282
+-20,100,0.15000000000000002,0.0028879800794393306
+-20,100,0.2,0.0027897837210277055
+-20,100,0.25,0.002706694494679407
+-20,100,0.30000000000000004,0.0026387124003944364
+-20,100,0.35000000000000003,0.002585837438172792
+-20,100,0.4,0.0025480696080144747
+-20,100,0.45,0.0025254089099194846
+-20,100,0.5,0.002517855343887821
+-20,100,0.55,0.002525408909919485
+-20,100,0.6000000000000001,0.0025480696080144747
+-20,100,0.65,0.002585837438172792
+-20,100,0.7000000000000001,0.0026387124003944364
+-20,100,0.75,0.002706694494679407
+-20,100,0.8,0.0027897837210277055
+-20,100,0.8500000000000001,0.0028879800794393306
+-20,100,0.9,0.003001283569914282
+-20,100,0.9500000000000001,0.003129694192452562
+-20,100,1.0,0.0032732119470541676
+-20,150,0.0,0.003289578006789438
+-20,150,0.05,0.0031453426634148237
+-20,150,0.1,0.003016289987763853
+-20,150,0.15000000000000002,0.0029024199798365273
+-20,150,0.2,0.002803732639632844
+-20,150,0.25,0.002720227967152804
+-20,150,0.30000000000000004,0.002651905962396408
+-20,150,0.35000000000000003,0.0025987666253636556
+-20,150,0.4,0.002560809956054547
+-20,150,0.45,0.0025380359544690816
+-20,150,0.5,0.0025304446206072593
+-20,150,0.55,0.0025380359544690824
+-20,150,0.6000000000000001,0.002560809956054547
+-20,150,0.65,0.0025987666253636556
+-20,150,0.7000000000000001,0.002651905962396408
+-20,150,0.75,0.002720227967152804
+-20,150,0.8,0.002803732639632844
+-20,150,0.8500000000000001,0.0029024199798365273
+-20,150,0.9,0.003016289987763853
+-20,150,0.9500000000000001,0.003145342663414824
+-20,150,1.0,0.003289578006789438
+-20,200,0.0,0.003305944066524709
+-20,200,0.05,0.003160991134377087
+-20,200,0.1,0.003031296405613425
+-20,200,0.15000000000000002,0.0029168598802337244
+-20,200,0.2,0.0028176815582379826
+-20,200,0.25,0.0027337614396262017
+-20,200,0.30000000000000004,0.002665099524398381
+-20,200,0.35000000000000003,0.00261169581255452
+-20,200,0.4,0.0025735503040946197
+-20,200,0.45,0.0025506629990186794
+-20,200,0.5,0.002543033897326699
+-20,200,0.55,0.0025506629990186803
+-20,200,0.6000000000000001,0.0025735503040946197
+-20,200,0.65,0.00261169581255452
+-20,200,0.7000000000000001,0.002665099524398381
+-20,200,0.75,0.0027337614396262017
+-20,200,0.8,0.0028176815582379826
+-20,200,0.8500000000000001,0.0029168598802337244
+-20,200,0.9,0.003031296405613425
+-20,200,0.9500000000000001,0.0031609911343770873
+-20,200,1.0,0.003305944066524709
+-20,250,0.0,0.0033223101262599797
+-20,250,0.05,0.003176639605339349
+-20,250,0.1,0.003046302823462996
+-20,250,0.15000000000000002,0.00293129978063092
+-20,250,0.2,0.002831630476843121
+-20,250,0.25,0.0027472949120995985
+-20,250,0.30000000000000004,0.0026782930864003526
+-20,250,0.35000000000000003,0.0026246249997453836
+-20,250,0.4,0.0025862906521346915
+-20,250,0.45,0.0025632900435682763
+-20,250,0.5,0.002555623174046138
+-20,250,0.55,0.0025632900435682768
+-20,250,0.6000000000000001,0.0025862906521346915
+-20,250,0.65,0.0026246249997453836
+-20,250,0.7000000000000001,0.0026782930864003526
+-20,250,0.75,0.0027472949120995985
+-20,250,0.8,0.002831630476843121
+-20,250,0.8500000000000001,0.00293129978063092
+-20,250,0.9,0.003046302823462996
+-20,250,0.9500000000000001,0.0031766396053393496
+-20,250,1.0,0.0033223101262599797
+-20,300,0.0,0.003338676185995251
+-20,300,0.05,0.0031922880763016123
+-20,300,0.1,0.003061309241312568
+-20,300,0.15000000000000002,0.0029457396810281173
+-20,300,0.2,0.0028455793954482596
+-20,300,0.25,0.0027608283845729953
+-20,300,0.30000000000000004,0.0026914866484023248
+-20,300,0.35000000000000003,0.0026375541869362476
+-20,300,0.4,0.002599031000174764
+-20,300,0.45,0.002575917088117874
+-20,300,0.5,0.002568212450765577
+-20,300,0.55,0.0025759170881178746
+-20,300,0.6000000000000001,0.002599031000174764
+-20,300,0.65,0.0026375541869362476
+-20,300,0.7000000000000001,0.0026914866484023248
+-20,300,0.75,0.0027608283845729953
+-20,300,0.8,0.0028455793954482596
+-20,300,0.8500000000000001,0.0029457396810281173
+-20,300,0.9,0.003061309241312568
+-20,300,0.9500000000000001,0.0031922880763016128
+-20,300,1.0,0.003338676185995251
+-20,350,0.0,0.0033550422457305214
+-20,350,0.05,0.003207936547263875
+-20,350,0.1,0.003076315659162139
+-20,350,0.15000000000000002,0.002960179581425314
+-20,350,0.2,0.002859528314053398
+-20,350,0.25,0.002774361857046392
+-20,350,0.30000000000000004,0.002704680210404297
+-20,350,0.35000000000000003,0.002650483374127111
+-20,350,0.4,0.0026117713482148365
+-20,350,0.45,0.0025885441326674715
+-20,350,0.5,0.0025808017274850164
+-20,350,0.55,0.002588544132667472
+-20,350,0.6000000000000001,0.0026117713482148365
+-20,350,0.65,0.002650483374127111
+-20,350,0.7000000000000001,0.002704680210404297
+-20,350,0.75,0.002774361857046392
+-20,350,0.8,0.002859528314053398
+-20,350,0.8500000000000001,0.002960179581425314
+-20,350,0.9,0.003076315659162139
+-20,350,0.9500000000000001,0.0032079365472638755
+-20,350,1.0,0.0033550422457305214
+-20,400,0.0,0.0033714083054657926
+-20,400,0.05,0.003223585018226138
+-20,400,0.1,0.0030913220770117105
+-20,400,0.15000000000000002,0.0029746194818225107
+-20,400,0.2,0.002873477232658537
+-20,400,0.25,0.00278789532951979
+-20,400,0.30000000000000004,0.0027178737724062696
+-20,400,0.35000000000000003,0.002663412561317976
+-20,400,0.4,0.0026245116962549087
+-20,400,0.45,0.0026011711772170694
+-20,400,0.5,0.0025933910042044554
+-20,400,0.55,0.00260117117721707
+-20,400,0.6000000000000001,0.0026245116962549087
+-20,400,0.65,0.002663412561317976
+-20,400,0.7000000000000001,0.0027178737724062696
+-20,400,0.75,0.00278789532951979
+-20,400,0.8,0.002873477232658537
+-20,400,0.8500000000000001,0.0029746194818225107
+-20,400,0.9,0.0030913220770117105
+-20,400,0.9500000000000001,0.0032235850182261386
+-20,400,1.0,0.0033714083054657926
+-20,450,0.0,0.003387774365201063
+-20,450,0.05,0.0032392334891884005
+-20,450,0.1,0.003106328494861282
+-20,450,0.15000000000000002,0.0029890593822197073
+-20,450,0.2,0.0028874261512636754
+-20,450,0.25,0.0028014288019931866
+-20,450,0.30000000000000004,0.0027310673344082413
+-20,450,0.35000000000000003,0.0026763417485088396
+-20,450,0.4,0.0026372520442949814
+-20,450,0.45,0.002613798221766666
+-20,450,0.5,0.0026059802809238943
+-20,450,0.55,0.0026137982217666667
+-20,450,0.6000000000000001,0.0026372520442949814
+-20,450,0.65,0.0026763417485088396
+-20,450,0.7000000000000001,0.0027310673344082413
+-20,450,0.75,0.0028014288019931866
+-20,450,0.8,0.0028874261512636754
+-20,450,0.8500000000000001,0.0029890593822197073
+-20,450,0.9,0.003106328494861282
+-20,450,0.9500000000000001,0.0032392334891884014
+-20,450,1.0,0.003387774365201063
+-20,500,0.0,0.003404140424936334
+-20,500,0.05,0.0032548819601506637
+-20,500,0.1,0.0031213349127108534
+-20,500,0.15000000000000002,0.0030034992826169045
+-20,500,0.2,0.002901375069868814
+-20,500,0.25,0.0028149622744665834
+-20,500,0.30000000000000004,0.002744260896410214
+-20,500,0.35000000000000003,0.0026892709356997036
+-20,500,0.4,0.002649992392335054
+-20,500,0.45,0.0026264252663162637
+-20,500,0.5,0.002618569557643334
+-20,500,0.55,0.0026264252663162646
+-20,500,0.6000000000000001,0.002649992392335054
+-20,500,0.65,0.0026892709356997036
+-20,500,0.7000000000000001,0.002744260896410214
+-20,500,0.75,0.0028149622744665834
+-20,500,0.8,0.002901375069868814
+-20,500,0.8500000000000001,0.0030034992826169045
+-20,500,0.9,0.0031213349127108534
+-20,500,0.9500000000000001,0.0032548819601506645
+-20,500,1.0,0.003404140424936334
+-20,550,0.0,0.0034205064846716047
+-20,550,0.05,0.003270530431112926
+-20,550,0.1,0.0031363413305604245
+-20,550,0.15000000000000002,0.0030179391830141003
+-20,550,0.2,0.0029153239884739525
+-20,550,0.25,0.0028284957469399807
+-20,550,0.30000000000000004,0.0027574544584121857
+-20,550,0.35000000000000003,0.002702200122890567
+-20,550,0.4,0.0026627327403751263
+-20,550,0.45,0.002639052310865861
+-20,550,0.5,0.0026311588343627726
+-20,550,0.55,0.0026390523108658615
+-20,550,0.6000000000000001,0.0026627327403751263
+-20,550,0.65,0.002702200122890567
+-20,550,0.7000000000000001,0.0027574544584121857
+-20,550,0.75,0.0028284957469399807
+-20,550,0.8,0.0029153239884739525
+-20,550,0.8500000000000001,0.0030179391830141003
+-20,550,0.9,0.0031363413305604245
+-20,550,0.9500000000000001,0.0032705304311129264
+-20,550,1.0,0.0034205064846716047
+-20,600,0.0,0.003436872544406876
+-20,600,0.05,0.003286178902075189
+-20,600,0.1,0.0031513477484099964
+-20,600,0.15000000000000002,0.0030323790834112974
+-20,600,0.2,0.0029292729070790912
+-20,600,0.25,0.002842029219413378
+-20,600,0.30000000000000004,0.002770648020414158
+-20,600,0.35000000000000003,0.0027151293100814316
+-20,600,0.4,0.0026754730884151986
+-20,600,0.45,0.002651679355415459
+-20,600,0.5,0.002643748111082212
+-20,600,0.55,0.0026516793554154593
+-20,600,0.6000000000000001,0.0026754730884151986
+-20,600,0.65,0.0027151293100814316
+-20,600,0.7000000000000001,0.002770648020414158
+-20,600,0.75,0.002842029219413378
+-20,600,0.8,0.0029292729070790912
+-20,600,0.8500000000000001,0.0030323790834112974
+-20,600,0.9,0.0031513477484099964
+-20,600,0.9500000000000001,0.0032861789020751896
+-20,600,1.0,0.003436872544406876
+-20,650,0.0,0.0034532386041421464
+-20,650,0.05,0.003301827373037452
+-20,650,0.1,0.0031663541662595674
+-20,650,0.15000000000000002,0.003046818983808494
+-20,650,0.2,0.002943221825684229
+-20,650,0.25,0.0028555626918867747
+-20,650,0.30000000000000004,0.00278384158241613
+-20,650,0.35000000000000003,0.002728058497272295
+-20,650,0.4,0.002688213436455271
+-20,650,0.45,0.002664306399965056
+-20,650,0.5,0.002656337387801651
+-20,650,0.55,0.0026643063999650563
+-20,650,0.6000000000000001,0.002688213436455271
+-20,650,0.65,0.002728058497272295
+-20,650,0.7000000000000001,0.00278384158241613
+-20,650,0.75,0.0028555626918867747
+-20,650,0.8,0.002943221825684229
+-20,650,0.8500000000000001,0.003046818983808494
+-20,650,0.9,0.0031663541662595674
+-20,650,0.9500000000000001,0.0033018273730374523
+-20,650,1.0,0.0034532386041421464
+-20,700,0.0,0.0034696046638774177
+-20,700,0.05,0.003317475843999715
+-20,700,0.1,0.0031813605841091394
+-20,700,0.15000000000000002,0.0030612588842056907
+-20,700,0.2,0.002957170744289368
+-20,700,0.25,0.0028690961643601715
+-20,700,0.30000000000000004,0.0027970351444181027
+-20,700,0.35000000000000003,0.0027409876844631596
+-20,700,0.4,0.0027009537844953435
+-20,700,0.45,0.0026769334445146536
+-20,700,0.5,0.0026689266645210903
+-20,700,0.55,0.002676933444514654
+-20,700,0.6000000000000001,0.0027009537844953435
+-20,700,0.65,0.0027409876844631596
+-20,700,0.7000000000000001,0.0027970351444181027
+-20,700,0.75,0.0028690961643601715
+-20,700,0.8,0.002957170744289368
+-20,700,0.8500000000000001,0.0030612588842056907
+-20,700,0.9,0.0031813605841091394
+-20,700,0.9500000000000001,0.0033174758439997155
+-20,700,1.0,0.0034696046638774177
+-10,-400,0.0,0.002349543972717527
+-10,-400,0.05,0.0022465255062214507
+-10,-400,0.1,0.002154351088830225
+-10,-400,0.15000000000000002,0.002073020720543849
+-10,-400,0.2,0.002002534401362323
+-10,-400,0.25,0.0019428921312856474
+-10,-400,0.30000000000000004,0.001894093910313822
+-10,-400,0.35000000000000003,0.0018561397384468463
+-10,-400,0.4,0.0018290296156847213
+-10,-400,0.45,0.001812763542027446
+-10,-400,0.5,0.001807341517475021
+-10,-400,0.55,0.0018127635420274466
+-10,-400,0.6000000000000001,0.0018290296156847213
+-10,-400,0.65,0.0018561397384468463
+-10,-400,0.7000000000000001,0.001894093910313822
+-10,-400,0.75,0.0019428921312856474
+-10,-400,0.8,0.002002534401362323
+-10,-400,0.8500000000000001,0.002073020720543849
+-10,-400,0.9,0.002154351088830225
+-10,-400,0.9500000000000001,0.002246525506221451
+-10,-400,1.0,0.002349543972717527
+-10,-350,0.0,0.002338138419451908
+-10,-350,0.05,0.0022356200425990166
+-10,-350,0.1,0.002143893073835903
+-10,-350,0.15000000000000002,0.002062957513162568
+-10,-350,0.2,0.0019928133605790106
+-10,-350,0.25,0.0019334606160852316
+-10,-350,0.30000000000000004,0.0018848992796812306
+-10,-350,0.35000000000000003,0.001847129351367007
+-10,-350,0.4,0.001820150831142562
+-10,-350,0.45,0.001803963719007895
+-10,-350,0.5,0.0017985680149630063
+-10,-350,0.55,0.0018039637190078955
+-10,-350,0.6000000000000001,0.001820150831142562
+-10,-350,0.65,0.001847129351367007
+-10,-350,0.7000000000000001,0.0018848992796812306
+-10,-350,0.75,0.0019334606160852316
+-10,-350,0.8,0.0019928133605790106
+-10,-350,0.8500000000000001,0.002062957513162568
+-10,-350,0.9,0.002143893073835903
+-10,-350,0.9500000000000001,0.0022356200425990166
+-10,-350,1.0,0.002338138419451908
+-10,-300,0.0,0.002326732866186289
+-10,-300,0.05,0.0022247145789765824
+-10,-300,0.1,0.0021334350588415817
+-10,-300,0.15000000000000002,0.0020528943057812874
+-10,-300,0.2,0.0019830923197956987
+-10,-300,0.25,0.001924029100884816
+-10,-300,0.30000000000000004,0.0018757046490486392
+-10,-300,0.35000000000000003,0.001838118964287168
+-10,-300,0.4,0.0018112720466004037
+-10,-300,0.45,0.0017951638959883445
+-10,-300,0.5,0.0017897945124509917
+-10,-300,0.55,0.001795163895988345
+-10,-300,0.6000000000000001,0.0018112720466004037
+-10,-300,0.65,0.001838118964287168
+-10,-300,0.7000000000000001,0.0018757046490486392
+-10,-300,0.75,0.001924029100884816
+-10,-300,0.8,0.0019830923197956987
+-10,-300,0.8500000000000001,0.0020528943057812874
+-10,-300,0.9,0.0021334350588415817
+-10,-300,0.9500000000000001,0.002224714578976583
+-10,-300,1.0,0.002326732866186289
+-10,-250,0.0,0.00231532731292067
+-10,-250,0.05,0.002213809115354148
+-10,-250,0.1,0.00212297704384726
+-10,-250,0.15000000000000002,0.002042831098400006
+-10,-250,0.2,0.001973371279012386
+-10,-250,0.25,0.0019145975856843997
+-10,-250,0.30000000000000004,0.0018665100184160478
+-10,-250,0.35000000000000003,0.0018291085772073289
+-10,-250,0.4,0.0018023932620582445
+-10,-250,0.45,0.0017863640729687935
+-10,-250,0.5,0.0017810210099389768
+-10,-250,0.55,0.0017863640729687941
+-10,-250,0.6000000000000001,0.0018023932620582445
+-10,-250,0.65,0.0018291085772073289
+-10,-250,0.7000000000000001,0.0018665100184160478
+-10,-250,0.75,0.0019145975856843997
+-10,-250,0.8,0.001973371279012386
+-10,-250,0.8500000000000001,0.002042831098400006
+-10,-250,0.9,0.00212297704384726
+-10,-250,0.9500000000000001,0.0022138091153541483
+-10,-250,1.0,0.00231532731292067
+-10,-200,0.0,0.002303921759655051
+-10,-200,0.05,0.002202903651731714
+-10,-200,0.1,0.002112519028852939
+-10,-200,0.15000000000000002,0.002032767891018726
+-10,-200,0.2,0.001963650238229074
+-10,-200,0.25,0.0019051660704839841
+-10,-200,0.30000000000000004,0.0018573153877834566
+-10,-200,0.35000000000000003,0.0018200981901274902
+-10,-200,0.4,0.0017935144775160857
+-10,-200,0.45,0.001777564249949243
+-10,-200,0.5,0.0017722475074269622
+-10,-200,0.55,0.0017775642499492435
+-10,-200,0.6000000000000001,0.0017935144775160857
+-10,-200,0.65,0.0018200981901274902
+-10,-200,0.7000000000000001,0.0018573153877834566
+-10,-200,0.75,0.0019051660704839841
+-10,-200,0.8,0.001963650238229074
+-10,-200,0.8500000000000001,0.002032767891018726
+-10,-200,0.9,0.002112519028852939
+-10,-200,0.9500000000000001,0.002202903651731714
+-10,-200,1.0,0.002303921759655051
+-10,-150,0.0,0.0022925162063894317
+-10,-150,0.05,0.0021919981881092796
+-10,-150,0.1,0.002102061013858617
+-10,-150,0.15000000000000002,0.002022704683637445
+-10,-150,0.2,0.0019539291974457616
+-10,-150,0.25,0.0018957345552835683
+-10,-150,0.30000000000000004,0.001848120757150865
+-10,-150,0.35000000000000003,0.0018110878030476508
+-10,-150,0.4,0.0017846356929739268
+-10,-150,0.45,0.001768764426929692
+-10,-150,0.5,0.0017634740049149475
+-10,-150,0.55,0.0017687644269296925
+-10,-150,0.6000000000000001,0.0017846356929739268
+-10,-150,0.65,0.0018110878030476508
+-10,-150,0.7000000000000001,0.001848120757150865
+-10,-150,0.75,0.0018957345552835683
+-10,-150,0.8,0.0019539291974457616
+-10,-150,0.8500000000000001,0.002022704683637445
+-10,-150,0.9,0.002102061013858617
+-10,-150,0.9500000000000001,0.0021919981881092796
+-10,-150,1.0,0.0022925162063894317
+-10,-100,0.0,0.002281110653123813
+-10,-100,0.05,0.0021810927244868454
+-10,-100,0.1,0.0020916029988642957
+-10,-100,0.15000000000000002,0.002012641476256164
+-10,-100,0.2,0.0019442081566624495
+-10,-100,0.25,0.0018863030400831527
+-10,-100,0.30000000000000004,0.0018389261265182738
+-10,-100,0.35000000000000003,0.0018020774159678119
+-10,-100,0.4,0.001775756908431768
+-10,-100,0.45,0.0017599646039101417
+-10,-100,0.5,0.001754700502402933
+-10,-100,0.55,0.001759964603910142
+-10,-100,0.6000000000000001,0.001775756908431768
+-10,-100,0.65,0.0018020774159678119
+-10,-100,0.7000000000000001,0.0018389261265182738
+-10,-100,0.75,0.0018863030400831527
+-10,-100,0.8,0.0019442081566624495
+-10,-100,0.8500000000000001,0.002012641476256164
+-10,-100,0.9,0.0020916029988642957
+-10,-100,0.9500000000000001,0.002181092724486846
+-10,-100,1.0,0.002281110653123813
+-10,-50,0.0,0.0022697050998581937
+-10,-50,0.05,0.0021701872608644113
+-10,-50,0.1,0.0020811449838699743
+-10,-50,0.15000000000000002,0.0020025782688748834
+-10,-50,0.2,0.0019344871158791374
+-10,-50,0.25,0.001876871524882737
+-10,-50,0.30000000000000004,0.0018297314958856824
+-10,-50,0.35000000000000003,0.0017930670288879727
+-10,-50,0.4,0.0017668781238896092
+-10,-50,0.45,0.0017511647808905908
+-10,-50,0.5,0.0017459269998909182
+-10,-50,0.55,0.0017511647808905915
+-10,-50,0.6000000000000001,0.0017668781238896092
+-10,-50,0.65,0.0017930670288879727
+-10,-50,0.7000000000000001,0.0018297314958856824
+-10,-50,0.75,0.001876871524882737
+-10,-50,0.8,0.0019344871158791374
+-10,-50,0.8500000000000001,0.0020025782688748834
+-10,-50,0.9,0.0020811449838699743
+-10,-50,0.9500000000000001,0.0021701872608644117
+-10,-50,1.0,0.0022697050998581937
+-10,0,0.0,0.0022582995465925747
+-10,0,0.05,0.002159281797241977
+-10,0,0.1,0.002070686968875653
+-10,0,0.15000000000000002,0.0019925150614936026
+-10,0,0.2,0.001924766075095825
+-10,0,0.25,0.0018674400096823213
+-10,0,0.30000000000000004,0.0018205368652530912
+-10,0,0.35000000000000003,0.0017840566418081336
+-10,0,0.4,0.0017579993393474504
+-10,0,0.45,0.0017423649578710402
+-10,0,0.5,0.0017371534973789039
+-10,0,0.55,0.0017423649578710407
+-10,0,0.6000000000000001,0.0017579993393474504
+-10,0,0.65,0.0017840566418081336
+-10,0,0.7000000000000001,0.0018205368652530912
+-10,0,0.75,0.0018674400096823213
+-10,0,0.8,0.001924766075095825
+-10,0,0.8500000000000001,0.0019925150614936026
+-10,0,0.9,0.002070686968875653
+-10,0,0.9500000000000001,0.002159281797241977
+-10,0,1.0,0.0022582995465925747
+-10,50,0.0,0.0022697050998581937
+-10,50,0.05,0.0021701872608644113
+-10,50,0.1,0.0020811449838699743
+-10,50,0.15000000000000002,0.0020025782688748834
+-10,50,0.2,0.0019344871158791374
+-10,50,0.25,0.001876871524882737
+-10,50,0.30000000000000004,0.0018297314958856824
+-10,50,0.35000000000000003,0.0017930670288879727
+-10,50,0.4,0.0017668781238896092
+-10,50,0.45,0.0017511647808905908
+-10,50,0.5,0.0017459269998909182
+-10,50,0.55,0.0017511647808905915
+-10,50,0.6000000000000001,0.0017668781238896092
+-10,50,0.65,0.0017930670288879727
+-10,50,0.7000000000000001,0.0018297314958856824
+-10,50,0.75,0.001876871524882737
+-10,50,0.8,0.0019344871158791374
+-10,50,0.8500000000000001,0.0020025782688748834
+-10,50,0.9,0.0020811449838699743
+-10,50,0.9500000000000001,0.0021701872608644117
+-10,50,1.0,0.0022697050998581937
+-10,100,0.0,0.002281110653123813
+-10,100,0.05,0.0021810927244868454
+-10,100,0.1,0.0020916029988642957
+-10,100,0.15000000000000002,0.002012641476256164
+-10,100,0.2,0.0019442081566624495
+-10,100,0.25,0.0018863030400831527
+-10,100,0.30000000000000004,0.0018389261265182738
+-10,100,0.35000000000000003,0.0018020774159678119
+-10,100,0.4,0.001775756908431768
+-10,100,0.45,0.0017599646039101417
+-10,100,0.5,0.001754700502402933
+-10,100,0.55,0.001759964603910142
+-10,100,0.6000000000000001,0.001775756908431768
+-10,100,0.65,0.0018020774159678119
+-10,100,0.7000000000000001,0.0018389261265182738
+-10,100,0.75,0.0018863030400831527
+-10,100,0.8,0.0019442081566624495
+-10,100,0.8500000000000001,0.002012641476256164
+-10,100,0.9,0.0020916029988642957
+-10,100,0.9500000000000001,0.002181092724486846
+-10,100,1.0,0.002281110653123813
+-10,150,0.0,0.0022925162063894317
+-10,150,0.05,0.0021919981881092796
+-10,150,0.1,0.002102061013858617
+-10,150,0.15000000000000002,0.002022704683637445
+-10,150,0.2,0.0019539291974457616
+-10,150,0.25,0.0018957345552835683
+-10,150,0.30000000000000004,0.001848120757150865
+-10,150,0.35000000000000003,0.0018110878030476508
+-10,150,0.4,0.0017846356929739268
+-10,150,0.45,0.001768764426929692
+-10,150,0.5,0.0017634740049149475
+-10,150,0.55,0.0017687644269296925
+-10,150,0.6000000000000001,0.0017846356929739268
+-10,150,0.65,0.0018110878030476508
+-10,150,0.7000000000000001,0.001848120757150865
+-10,150,0.75,0.0018957345552835683
+-10,150,0.8,0.0019539291974457616
+-10,150,0.8500000000000001,0.002022704683637445
+-10,150,0.9,0.002102061013858617
+-10,150,0.9500000000000001,0.0021919981881092796
+-10,150,1.0,0.0022925162063894317
+-10,200,0.0,0.002303921759655051
+-10,200,0.05,0.002202903651731714
+-10,200,0.1,0.002112519028852939
+-10,200,0.15000000000000002,0.002032767891018726
+-10,200,0.2,0.001963650238229074
+-10,200,0.25,0.0019051660704839841
+-10,200,0.30000000000000004,0.0018573153877834566
+-10,200,0.35000000000000003,0.0018200981901274902
+-10,200,0.4,0.0017935144775160857
+-10,200,0.45,0.001777564249949243
+-10,200,0.5,0.0017722475074269622
+-10,200,0.55,0.0017775642499492435
+-10,200,0.6000000000000001,0.0017935144775160857
+-10,200,0.65,0.0018200981901274902
+-10,200,0.7000000000000001,0.0018573153877834566
+-10,200,0.75,0.0019051660704839841
+-10,200,0.8,0.001963650238229074
+-10,200,0.8500000000000001,0.002032767891018726
+-10,200,0.9,0.002112519028852939
+-10,200,0.9500000000000001,0.002202903651731714
+-10,200,1.0,0.002303921759655051
+-10,250,0.0,0.00231532731292067
+-10,250,0.05,0.002213809115354148
+-10,250,0.1,0.00212297704384726
+-10,250,0.15000000000000002,0.002042831098400006
+-10,250,0.2,0.001973371279012386
+-10,250,0.25,0.0019145975856843997
+-10,250,0.30000000000000004,0.0018665100184160478
+-10,250,0.35000000000000003,0.0018291085772073289
+-10,250,0.4,0.0018023932620582445
+-10,250,0.45,0.0017863640729687935
+-10,250,0.5,0.0017810210099389768
+-10,250,0.55,0.0017863640729687941
+-10,250,0.6000000000000001,0.0018023932620582445
+-10,250,0.65,0.0018291085772073289
+-10,250,0.7000000000000001,0.0018665100184160478
+-10,250,0.75,0.0019145975856843997
+-10,250,0.8,0.001973371279012386
+-10,250,0.8500000000000001,0.002042831098400006
+-10,250,0.9,0.00212297704384726
+-10,250,0.9500000000000001,0.0022138091153541483
+-10,250,1.0,0.00231532731292067
+-10,300,0.0,0.002326732866186289
+-10,300,0.05,0.0022247145789765824
+-10,300,0.1,0.0021334350588415817
+-10,300,0.15000000000000002,0.0020528943057812874
+-10,300,0.2,0.0019830923197956987
+-10,300,0.25,0.001924029100884816
+-10,300,0.30000000000000004,0.0018757046490486392
+-10,300,0.35000000000000003,0.001838118964287168
+-10,300,0.4,0.0018112720466004037
+-10,300,0.45,0.0017951638959883445
+-10,300,0.5,0.0017897945124509917
+-10,300,0.55,0.001795163895988345
+-10,300,0.6000000000000001,0.0018112720466004037
+-10,300,0.65,0.001838118964287168
+-10,300,0.7000000000000001,0.0018757046490486392
+-10,300,0.75,0.001924029100884816
+-10,300,0.8,0.0019830923197956987
+-10,300,0.8500000000000001,0.0020528943057812874
+-10,300,0.9,0.0021334350588415817
+-10,300,0.9500000000000001,0.002224714578976583
+-10,300,1.0,0.002326732866186289
+-10,350,0.0,0.002338138419451908
+-10,350,0.05,0.0022356200425990166
+-10,350,0.1,0.002143893073835903
+-10,350,0.15000000000000002,0.002062957513162568
+-10,350,0.2,0.0019928133605790106
+-10,350,0.25,0.0019334606160852316
+-10,350,0.30000000000000004,0.0018848992796812306
+-10,350,0.35000000000000003,0.001847129351367007
+-10,350,0.4,0.001820150831142562
+-10,350,0.45,0.001803963719007895
+-10,350,0.5,0.0017985680149630063
+-10,350,0.55,0.0018039637190078955
+-10,350,0.6000000000000001,0.001820150831142562
+-10,350,0.65,0.001847129351367007
+-10,350,0.7000000000000001,0.0018848992796812306
+-10,350,0.75,0.0019334606160852316
+-10,350,0.8,0.0019928133605790106
+-10,350,0.8500000000000001,0.002062957513162568
+-10,350,0.9,0.002143893073835903
+-10,350,0.9500000000000001,0.0022356200425990166
+-10,350,1.0,0.002338138419451908
+-10,400,0.0,0.002349543972717527
+-10,400,0.05,0.0022465255062214507
+-10,400,0.1,0.002154351088830225
+-10,400,0.15000000000000002,0.002073020720543849
+-10,400,0.2,0.002002534401362323
+-10,400,0.25,0.0019428921312856474
+-10,400,0.30000000000000004,0.001894093910313822
+-10,400,0.35000000000000003,0.0018561397384468463
+-10,400,0.4,0.0018290296156847213
+-10,400,0.45,0.001812763542027446
+-10,400,0.5,0.001807341517475021
+-10,400,0.55,0.0018127635420274466
+-10,400,0.6000000000000001,0.0018290296156847213
+-10,400,0.65,0.0018561397384468463
+-10,400,0.7000000000000001,0.001894093910313822
+-10,400,0.75,0.0019428921312856474
+-10,400,0.8,0.002002534401362323
+-10,400,0.8500000000000001,0.002073020720543849
+-10,400,0.9,0.002154351088830225
+-10,400,0.9500000000000001,0.002246525506221451
+-10,400,1.0,0.002349543972717527
+-10,450,0.0,0.0023609495259831466
+-10,450,0.05,0.002257430969843885
+-10,450,0.1,0.002164809103824546
+-10,450,0.15000000000000002,0.00208308392792513
+-10,450,0.2,0.002012255442145635
+-10,450,0.25,0.001952323646486063
+-10,450,0.30000000000000004,0.0019032885409464133
+-10,450,0.35000000000000003,0.001865150125526685
+-10,450,0.4,0.00183790840022688
+-10,450,0.45,0.0018215633650469965
+-10,450,0.5,0.0018161150199870356
+-10,450,0.55,0.001821563365046997
+-10,450,0.6000000000000001,0.00183790840022688
+-10,450,0.65,0.001865150125526685
+-10,450,0.7000000000000001,0.0019032885409464133
+-10,450,0.75,0.001952323646486063
+-10,450,0.8,0.002012255442145635
+-10,450,0.8500000000000001,0.00208308392792513
+-10,450,0.9,0.002164809103824546
+-10,450,0.9500000000000001,0.0022574309698438853
+-10,450,1.0,0.0023609495259831466
+-10,500,0.0,0.0023723550792487656
+-10,500,0.05,0.0022683364334663194
+-10,500,0.1,0.0021752671188188678
+-10,500,0.15000000000000002,0.0020931471353064107
+-10,500,0.2,0.0020219764829289477
+-10,500,0.25,0.001961755161686479
+-10,500,0.30000000000000004,0.0019124831715790049
+-10,500,0.35000000000000003,0.0018741605126065244
+-10,500,0.4,0.001846787184769039
+-10,500,0.45,0.0018303631880665471
+-10,500,0.5,0.0018248885224990505
+-10,500,0.55,0.001830363188066548
+-10,500,0.6000000000000001,0.001846787184769039
+-10,500,0.65,0.0018741605126065244
+-10,500,0.7000000000000001,0.0019124831715790049
+-10,500,0.75,0.001961755161686479
+-10,500,0.8,0.0020219764829289477
+-10,500,0.8500000000000001,0.0020931471353064107
+-10,500,0.9,0.0021752671188188678
+-10,500,0.9500000000000001,0.0022683364334663194
+-10,500,1.0,0.0023723550792487656
+-10,550,0.0,0.002383760632514384
+-10,550,0.05,0.0022792418970887535
+-10,550,0.1,0.002185725133813189
+-10,550,0.15000000000000002,0.0021032103426876915
+-10,550,0.2,0.0020316975237122596
+-10,550,0.25,0.0019711866768868944
+-10,550,0.30000000000000004,0.001921677802211596
+-10,550,0.35000000000000003,0.0018831708996863634
+-10,550,0.4,0.0018556659693111975
+-10,550,0.45,0.001839163011086098
+-10,550,0.5,0.001833662025011065
+-10,550,0.55,0.0018391630110860984
+-10,550,0.6000000000000001,0.0018556659693111975
+-10,550,0.65,0.0018831708996863634
+-10,550,0.7000000000000001,0.001921677802211596
+-10,550,0.75,0.0019711866768868944
+-10,550,0.8,0.0020316975237122596
+-10,550,0.8500000000000001,0.0021032103426876915
+-10,550,0.9,0.002185725133813189
+-10,550,0.9500000000000001,0.002279241897088754
+-10,550,1.0,0.002383760632514384
+-10,600,0.0,0.002395166185780004
+-10,600,0.05,0.002290147360711188
+-10,600,0.1,0.0021961831488075106
+-10,600,0.15000000000000002,0.0021132735500689723
+-10,600,0.2,0.002041418564495572
+-10,600,0.25,0.0019806181920873104
+-10,600,0.30000000000000004,0.0019308724328441875
+-10,600,0.35000000000000003,0.0018921812867662025
+-10,600,0.4,0.0018645447538533568
+-10,600,0.45,0.0018479628341056486
+-10,600,0.5,0.0018424355275230798
+-10,600,0.55,0.0018479628341056492
+-10,600,0.6000000000000001,0.0018645447538533568
+-10,600,0.65,0.0018921812867662025
+-10,600,0.7000000000000001,0.0019308724328441875
+-10,600,0.75,0.0019806181920873104
+-10,600,0.8,0.002041418564495572
+-10,600,0.8500000000000001,0.0021132735500689723
+-10,600,0.9,0.0021961831488075106
+-10,600,0.9500000000000001,0.002290147360711188
+-10,600,1.0,0.002395166185780004
+-10,650,0.0,0.0024065717390456226
+-10,650,0.05,0.002301052824333622
+-10,650,0.1,0.002206641163801832
+-10,650,0.15000000000000002,0.002123336757450253
+-10,650,0.2,0.002051139605278884
+-10,650,0.25,0.001990049707287726
+-10,650,0.30000000000000004,0.0019400670634767787
+-10,650,0.35000000000000003,0.0019011916738460412
+-10,650,0.4,0.0018734235383955152
+-10,650,0.45,0.0018567626571251992
+-10,650,0.5,0.0018512090300350941
+-10,650,0.55,0.0018567626571251998
+-10,650,0.6000000000000001,0.0018734235383955152
+-10,650,0.65,0.0019011916738460412
+-10,650,0.7000000000000001,0.0019400670634767787
+-10,650,0.75,0.001990049707287726
+-10,650,0.8,0.002051139605278884
+-10,650,0.8500000000000001,0.002123336757450253
+-10,650,0.9,0.002206641163801832
+-10,650,0.9500000000000001,0.0023010528243336222
+-10,650,1.0,0.0024065717390456226
+-10,700,0.0,0.0024179772923112416
+-10,700,0.05,0.0023119582879560564
+-10,700,0.1,0.002217099178796154
+-10,700,0.15000000000000002,0.002133399964831534
+-10,700,0.2,0.0020608606460621967
+-10,700,0.25,0.001999481222488142
+-10,700,0.30000000000000004,0.0019492616941093703
+-10,700,0.35000000000000003,0.0019102020609258806
+-10,700,0.4,0.0018823023229376744
+-10,700,0.45,0.0018655624801447502
+-10,700,0.5,0.0018599825325471089
+-10,700,0.55,0.0018655624801447506
+-10,700,0.6000000000000001,0.0018823023229376744
+-10,700,0.65,0.0019102020609258806
+-10,700,0.7000000000000001,0.0019492616941093703
+-10,700,0.75,0.001999481222488142
+-10,700,0.8,0.0020608606460621967
+-10,700,0.8500000000000001,0.002133399964831534
+-10,700,0.9,0.002217099178796154
+-10,700,0.9500000000000001,0.002311958287956057
+-10,700,1.0,0.0024179772923112416
+0,-400,0.0,0.0016812748153442972
+0,-400,0.05,0.0016075573811330467
+0,-400,0.1,0.0015415996768387706
+0,-400,0.15000000000000002,0.0014834017024614682
+0,-400,0.2,0.0014329634580011394
+0,-400,0.25,0.001390284943457784
+0,-400,0.30000000000000004,0.0013553661588314025
+0,-400,0.35000000000000003,0.0013282071041219945
+0,-400,0.4,0.0013088077793295607
+0,-400,0.45,0.0012971681844541
+0,-400,0.5,0.001293288319495613
+0,-400,0.55,0.0012971681844541002
+0,-400,0.6000000000000001,0.0013088077793295607
+0,-400,0.65,0.0013282071041219945
+0,-400,0.7000000000000001,0.0013553661588314025
+0,-400,0.75,0.001390284943457784
+0,-400,0.8,0.0014329634580011394
+0,-400,0.8500000000000001,0.0014834017024614682
+0,-400,0.9,0.0015415996768387706
+0,-400,0.9500000000000001,0.0016075573811330471
+0,-400,1.0,0.0016812748153442972
+0,-350,0.0,0.0016731132871144702
+0,-350,0.05,0.0015997537045256045
+0,-350,0.1,0.0015341161832618834
+0,-350,0.15000000000000002,0.0014762007233233055
+0,-350,0.2,0.0014260073247098714
+0,-350,0.25,0.0013835359874215809
+0,-350,0.30000000000000004,0.0013487867114584343
+0,-350,0.35000000000000003,0.0013217594968204314
+0,-350,0.4,0.0013024543435075722
+0,-350,0.45,0.0012908712515198565
+0,-350,0.5,0.0012870102208572848
+0,-350,0.55,0.0012908712515198567
+0,-350,0.6000000000000001,0.0013024543435075722
+0,-350,0.65,0.0013217594968204314
+0,-350,0.7000000000000001,0.0013487867114584343
+0,-350,0.75,0.0013835359874215809
+0,-350,0.8,0.0014260073247098714
+0,-350,0.8500000000000001,0.0014762007233233055
+0,-350,0.9,0.0015341161832618834
+0,-350,0.9500000000000001,0.001599753704525605
+0,-350,1.0,0.0016731132871144702
+0,-300,0.0,0.0016649517588846437
+0,-300,0.05,0.001591950027918163
+0,-300,0.1,0.0015266326896849962
+0,-300,0.15000000000000002,0.0014689997441851431
+0,-300,0.2,0.001419051191418604
+0,-300,0.25,0.0013767870313853784
+0,-300,0.30000000000000004,0.0013422072640854666
+0,-300,0.35000000000000003,0.0013153118895188685
+0,-300,0.4,0.0012961009076855841
+0,-300,0.45,0.0012845743185856135
+0,-300,0.5,0.0012807321222189567
+0,-300,0.55,0.0012845743185856138
+0,-300,0.6000000000000001,0.0012961009076855841
+0,-300,0.65,0.0013153118895188685
+0,-300,0.7000000000000001,0.0013422072640854666
+0,-300,0.75,0.0013767870313853784
+0,-300,0.8,0.001419051191418604
+0,-300,0.8500000000000001,0.0014689997441851431
+0,-300,0.9,0.0015266326896849962
+0,-300,0.9500000000000001,0.0015919500279181632
+0,-300,1.0,0.0016649517588846437
+0,-250,0.0,0.001656790230654817
+0,-250,0.05,0.0015841463513107208
+0,-250,0.1,0.001519149196108109
+0,-250,0.15000000000000002,0.0014617987650469805
+0,-250,0.2,0.001412095058127336
+0,-250,0.25,0.0013700380753491753
+0,-250,0.30000000000000004,0.0013356278167124984
+0,-250,0.35000000000000003,0.0013088642822173054
+0,-250,0.4,0.001289747471863596
+0,-250,0.45,0.00127827738565137
+0,-250,0.5,0.0012744540235806283
+0,-250,0.55,0.0012782773856513704
+0,-250,0.6000000000000001,0.001289747471863596
+0,-250,0.65,0.0013088642822173054
+0,-250,0.7000000000000001,0.0013356278167124984
+0,-250,0.75,0.0013700380753491753
+0,-250,0.8,0.001412095058127336
+0,-250,0.8500000000000001,0.0014617987650469805
+0,-250,0.9,0.001519149196108109
+0,-250,0.9500000000000001,0.001584146351310721
+0,-250,1.0,0.001656790230654817
+0,-200,0.0,0.0016486287024249904
+0,-200,0.05,0.0015763426747032788
+0,-200,0.1,0.0015116657025312217
+0,-200,0.15000000000000002,0.0014545977859088182
+0,-200,0.2,0.0014051389248360686
+0,-200,0.25,0.0013632891193129726
+0,-200,0.30000000000000004,0.0013290483693395305
+0,-200,0.35000000000000003,0.0013024166749157423
+0,-200,0.4,0.0012833940360416078
+0,-200,0.45,0.001271980452717127
+0,-200,0.5,0.0012681759249423001
+0,-200,0.55,0.0012719804527171273
+0,-200,0.6000000000000001,0.0012833940360416078
+0,-200,0.65,0.0013024166749157423
+0,-200,0.7000000000000001,0.0013290483693395305
+0,-200,0.75,0.0013632891193129726
+0,-200,0.8,0.0014051389248360686
+0,-200,0.8500000000000001,0.0014545977859088182
+0,-200,0.9,0.0015116657025312217
+0,-200,0.9500000000000001,0.001576342674703279
+0,-200,1.0,0.0016486287024249904
+0,-150,0.0,0.0016404671741951636
+0,-150,0.05,0.0015685389980958368
+0,-150,0.1,0.0015041822089543343
+0,-150,0.15000000000000002,0.0014473968067706556
+0,-150,0.2,0.0013981827915448008
+0,-150,0.25,0.0013565401632767698
+0,-150,0.30000000000000004,0.0013224689219665624
+0,-150,0.35000000000000003,0.001295969067614179
+0,-150,0.4,0.0012770406002196198
+0,-150,0.45,0.0012656835197828837
+0,-150,0.5,0.001261897826303972
+0,-150,0.55,0.001265683519782884
+0,-150,0.6000000000000001,0.0012770406002196198
+0,-150,0.65,0.001295969067614179
+0,-150,0.7000000000000001,0.0013224689219665624
+0,-150,0.75,0.0013565401632767698
+0,-150,0.8,0.0013981827915448008
+0,-150,0.8500000000000001,0.0014473968067706556
+0,-150,0.9,0.0015041822089543343
+0,-150,0.9500000000000001,0.001568538998095837
+0,-150,1.0,0.0016404671741951636
+0,-100,0.0,0.0016323056459653371
+0,-100,0.05,0.0015607353214883949
+0,-100,0.1,0.0014966987153774472
+0,-100,0.15000000000000002,0.0014401958276324932
+0,-100,0.2,0.0013912266582535332
+0,-100,0.25,0.0013497912072405669
+0,-100,0.30000000000000004,0.0013158894745935947
+0,-100,0.35000000000000003,0.001289521460312616
+0,-100,0.4,0.0012706871643976315
+0,-100,0.45,0.0012593865868486406
+0,-100,0.5,0.0012556197276656438
+0,-100,0.55,0.001259386586848641
+0,-100,0.6000000000000001,0.0012706871643976315
+0,-100,0.65,0.001289521460312616
+0,-100,0.7000000000000001,0.0013158894745935947
+0,-100,0.75,0.0013497912072405669
+0,-100,0.8,0.0013912266582535332
+0,-100,0.8500000000000001,0.0014401958276324932
+0,-100,0.9,0.0014966987153774472
+0,-100,0.9500000000000001,0.0015607353214883953
+0,-100,1.0,0.0016323056459653371
+0,-50,0.0,0.0016241441177355103
+0,-50,0.05,0.0015529316448809531
+0,-50,0.1,0.00148921522180056
+0,-50,0.15000000000000002,0.001432994848494331
+0,-50,0.2,0.0013842705249622657
+0,-50,0.25,0.0013430422512043642
+0,-50,0.30000000000000004,0.0013093100272206265
+0,-50,0.35000000000000003,0.0012830738530110529
+0,-50,0.4,0.0012643337285756435
+0,-50,0.45,0.0012530896539143974
+0,-50,0.5,0.0012493416290273156
+0,-50,0.55,0.0012530896539143977
+0,-50,0.6000000000000001,0.0012643337285756435
+0,-50,0.65,0.0012830738530110529
+0,-50,0.7000000000000001,0.0013093100272206265
+0,-50,0.75,0.0013430422512043642
+0,-50,0.8,0.0013842705249622657
+0,-50,0.8500000000000001,0.001432994848494331
+0,-50,0.9,0.00148921522180056
+0,-50,0.9500000000000001,0.0015529316448809533
+0,-50,1.0,0.0016241441177355103
+0,0,0.0,0.0016159825895056836
+0,0,0.05,0.0015451279682735112
+0,0,0.1,0.0014817317282236728
+0,0,0.15000000000000002,0.0014257938693561683
+0,0,0.2,0.001377314391670998
+0,0,0.25,0.0013362932951681613
+0,0,0.30000000000000004,0.0013027305798476588
+0,0,0.35000000000000003,0.00127662624570949
+0,0,0.4,0.0012579802927536554
+0,0,0.45,0.0012467927209801543
+0,0,0.5,0.0012430635303889875
+0,0,0.55,0.0012467927209801545
+0,0,0.6000000000000001,0.0012579802927536554
+0,0,0.65,0.00127662624570949
+0,0,0.7000000000000001,0.0013027305798476588
+0,0,0.75,0.0013362932951681613
+0,0,0.8,0.001377314391670998
+0,0,0.8500000000000001,0.0014257938693561683
+0,0,0.9,0.0014817317282236728
+0,0,0.9500000000000001,0.0015451279682735114
+0,0,1.0,0.0016159825895056836
+0,50,0.0,0.0016241441177355103
+0,50,0.05,0.0015529316448809531
+0,50,0.1,0.00148921522180056
+0,50,0.15000000000000002,0.001432994848494331
+0,50,0.2,0.0013842705249622657
+0,50,0.25,0.0013430422512043642
+0,50,0.30000000000000004,0.0013093100272206265
+0,50,0.35000000000000003,0.0012830738530110529
+0,50,0.4,0.0012643337285756435
+0,50,0.45,0.0012530896539143974
+0,50,0.5,0.0012493416290273156
+0,50,0.55,0.0012530896539143977
+0,50,0.6000000000000001,0.0012643337285756435
+0,50,0.65,0.0012830738530110529
+0,50,0.7000000000000001,0.0013093100272206265
+0,50,0.75,0.0013430422512043642
+0,50,0.8,0.0013842705249622657
+0,50,0.8500000000000001,0.001432994848494331
+0,50,0.9,0.00148921522180056
+0,50,0.9500000000000001,0.0015529316448809533
+0,50,1.0,0.0016241441177355103
+0,100,0.0,0.0016323056459653371
+0,100,0.05,0.0015607353214883949
+0,100,0.1,0.0014966987153774472
+0,100,0.15000000000000002,0.0014401958276324932
+0,100,0.2,0.0013912266582535332
+0,100,0.25,0.0013497912072405669
+0,100,0.30000000000000004,0.0013158894745935947
+0,100,0.35000000000000003,0.001289521460312616
+0,100,0.4,0.0012706871643976315
+0,100,0.45,0.0012593865868486406
+0,100,0.5,0.0012556197276656438
+0,100,0.55,0.001259386586848641
+0,100,0.6000000000000001,0.0012706871643976315
+0,100,0.65,0.001289521460312616
+0,100,0.7000000000000001,0.0013158894745935947
+0,100,0.75,0.0013497912072405669
+0,100,0.8,0.0013912266582535332
+0,100,0.8500000000000001,0.0014401958276324932
+0,100,0.9,0.0014966987153774472
+0,100,0.9500000000000001,0.0015607353214883953
+0,100,1.0,0.0016323056459653371
+0,150,0.0,0.0016404671741951636
+0,150,0.05,0.0015685389980958368
+0,150,0.1,0.0015041822089543343
+0,150,0.15000000000000002,0.0014473968067706556
+0,150,0.2,0.0013981827915448008
+0,150,0.25,0.0013565401632767698
+0,150,0.30000000000000004,0.0013224689219665624
+0,150,0.35000000000000003,0.001295969067614179
+0,150,0.4,0.0012770406002196198
+0,150,0.45,0.0012656835197828837
+0,150,0.5,0.001261897826303972
+0,150,0.55,0.001265683519782884
+0,150,0.6000000000000001,0.0012770406002196198
+0,150,0.65,0.001295969067614179
+0,150,0.7000000000000001,0.0013224689219665624
+0,150,0.75,0.0013565401632767698
+0,150,0.8,0.0013981827915448008
+0,150,0.8500000000000001,0.0014473968067706556
+0,150,0.9,0.0015041822089543343
+0,150,0.9500000000000001,0.001568538998095837
+0,150,1.0,0.0016404671741951636
+0,200,0.0,0.0016486287024249904
+0,200,0.05,0.0015763426747032788
+0,200,0.1,0.0015116657025312217
+0,200,0.15000000000000002,0.0014545977859088182
+0,200,0.2,0.0014051389248360686
+0,200,0.25,0.0013632891193129726
+0,200,0.30000000000000004,0.0013290483693395305
+0,200,0.35000000000000003,0.0013024166749157423
+0,200,0.4,0.0012833940360416078
+0,200,0.45,0.001271980452717127
+0,200,0.5,0.0012681759249423001
+0,200,0.55,0.0012719804527171273
+0,200,0.6000000000000001,0.0012833940360416078
+0,200,0.65,0.0013024166749157423
+0,200,0.7000000000000001,0.0013290483693395305
+0,200,0.75,0.0013632891193129726
+0,200,0.8,0.0014051389248360686
+0,200,0.8500000000000001,0.0014545977859088182
+0,200,0.9,0.0015116657025312217
+0,200,0.9500000000000001,0.001576342674703279
+0,200,1.0,0.0016486287024249904
+0,250,0.0,0.001656790230654817
+0,250,0.05,0.0015841463513107208
+0,250,0.1,0.001519149196108109
+0,250,0.15000000000000002,0.0014617987650469805
+0,250,0.2,0.001412095058127336
+0,250,0.25,0.0013700380753491753
+0,250,0.30000000000000004,0.0013356278167124984
+0,250,0.35000000000000003,0.0013088642822173054
+0,250,0.4,0.001289747471863596
+0,250,0.45,0.00127827738565137
+0,250,0.5,0.0012744540235806283
+0,250,0.55,0.0012782773856513704
+0,250,0.6000000000000001,0.001289747471863596
+0,250,0.65,0.0013088642822173054
+0,250,0.7000000000000001,0.0013356278167124984
+0,250,0.75,0.0013700380753491753
+0,250,0.8,0.001412095058127336
+0,250,0.8500000000000001,0.0014617987650469805
+0,250,0.9,0.001519149196108109
+0,250,0.9500000000000001,0.001584146351310721
+0,250,1.0,0.001656790230654817
+0,300,0.0,0.0016649517588846437
+0,300,0.05,0.001591950027918163
+0,300,0.1,0.0015266326896849962
+0,300,0.15000000000000002,0.0014689997441851431
+0,300,0.2,0.001419051191418604
+0,300,0.25,0.0013767870313853784
+0,300,0.30000000000000004,0.0013422072640854666
+0,300,0.35000000000000003,0.0013153118895188685
+0,300,0.4,0.0012961009076855841
+0,300,0.45,0.0012845743185856135
+0,300,0.5,0.0012807321222189567
+0,300,0.55,0.0012845743185856138
+0,300,0.6000000000000001,0.0012961009076855841
+0,300,0.65,0.0013153118895188685
+0,300,0.7000000000000001,0.0013422072640854666
+0,300,0.75,0.0013767870313853784
+0,300,0.8,0.001419051191418604
+0,300,0.8500000000000001,0.0014689997441851431
+0,300,0.9,0.0015266326896849962
+0,300,0.9500000000000001,0.0015919500279181632
+0,300,1.0,0.0016649517588846437
+0,350,0.0,0.0016731132871144702
+0,350,0.05,0.0015997537045256045
+0,350,0.1,0.0015341161832618834
+0,350,0.15000000000000002,0.0014762007233233055
+0,350,0.2,0.0014260073247098714
+0,350,0.25,0.0013835359874215809
+0,350,0.30000000000000004,0.0013487867114584343
+0,350,0.35000000000000003,0.0013217594968204314
+0,350,0.4,0.0013024543435075722
+0,350,0.45,0.0012908712515198565
+0,350,0.5,0.0012870102208572848
+0,350,0.55,0.0012908712515198567
+0,350,0.6000000000000001,0.0013024543435075722
+0,350,0.65,0.0013217594968204314
+0,350,0.7000000000000001,0.0013487867114584343
+0,350,0.75,0.0013835359874215809
+0,350,0.8,0.0014260073247098714
+0,350,0.8500000000000001,0.0014762007233233055
+0,350,0.9,0.0015341161832618834
+0,350,0.9500000000000001,0.001599753704525605
+0,350,1.0,0.0016731132871144702
+0,400,0.0,0.0016812748153442972
+0,400,0.05,0.0016075573811330467
+0,400,0.1,0.0015415996768387706
+0,400,0.15000000000000002,0.0014834017024614682
+0,400,0.2,0.0014329634580011394
+0,400,0.25,0.001390284943457784
+0,400,0.30000000000000004,0.0013553661588314025
+0,400,0.35000000000000003,0.0013282071041219945
+0,400,0.4,0.0013088077793295607
+0,400,0.45,0.0012971681844541
+0,400,0.5,0.001293288319495613
+0,400,0.55,0.0012971681844541002
+0,400,0.6000000000000001,0.0013088077793295607
+0,400,0.65,0.0013282071041219945
+0,400,0.7000000000000001,0.0013553661588314025
+0,400,0.75,0.001390284943457784
+0,400,0.8,0.0014329634580011394
+0,400,0.8500000000000001,0.0014834017024614682
+0,400,0.9,0.0015415996768387706
+0,400,0.9500000000000001,0.0016075573811330471
+0,400,1.0,0.0016812748153442972
+0,450,0.0,0.0016894363435741237
+0,450,0.05,0.0016153610577404887
+0,450,0.1,0.0015490831704156579
+0,450,0.15000000000000002,0.0014906026815996304
+0,450,0.2,0.001439919591292407
+0,450,0.25,0.0013970338994939867
+0,450,0.30000000000000004,0.0013619456062043702
+0,450,0.35000000000000003,0.0013346547114235574
+0,450,0.4,0.0013151612151515485
+0,450,0.45,0.001303465117388343
+0,450,0.5,0.0012995664181339411
+0,450,0.55,0.0013034651173883431
+0,450,0.6000000000000001,0.0013151612151515485
+0,450,0.65,0.0013346547114235574
+0,450,0.7000000000000001,0.0013619456062043702
+0,450,0.75,0.0013970338994939867
+0,450,0.8,0.001439919591292407
+0,450,0.8500000000000001,0.0014906026815996304
+0,450,0.9,0.0015490831704156579
+0,450,0.9500000000000001,0.0016153610577404889
+0,450,1.0,0.0016894363435741237
+0,500,0.0,0.0016975978718039508
+0,500,0.05,0.0016231647343479308
+0,500,0.1,0.001556566663992545
+0,500,0.15000000000000002,0.001497803660737793
+0,500,0.2,0.0014468757245836748
+0,500,0.25,0.0014037828555301896
+0,500,0.30000000000000004,0.0013685250535773385
+0,500,0.35000000000000003,0.0013411023187251206
+0,500,0.4,0.001321514650973537
+0,500,0.45,0.0013097620503225865
+0,500,0.5,0.0013058445167722695
+0,500,0.55,0.0013097620503225867
+0,500,0.6000000000000001,0.001321514650973537
+0,500,0.65,0.0013411023187251206
+0,500,0.7000000000000001,0.0013685250535773385
+0,500,0.75,0.0014037828555301896
+0,500,0.8,0.0014468757245836748
+0,500,0.8500000000000001,0.001497803660737793
+0,500,0.9,0.001556566663992545
+0,500,0.9500000000000001,0.001623164734347931
+0,500,1.0,0.0016975978718039508
+0,550,0.0,0.0017057594000337772
+0,550,0.05,0.0016309684109553726
+0,550,0.1,0.0015640501575694323
+0,550,0.15000000000000002,0.0015050046398759553
+0,550,0.2,0.0014538318578749424
+0,550,0.25,0.0014105318115663925
+0,550,0.30000000000000004,0.0013751045009503065
+0,550,0.35000000000000003,0.001347549926026684
+0,550,0.4,0.0013278680867955248
+0,550,0.45,0.0013160589832568294
+0,550,0.5,0.0013121226154105977
+0,550,0.55,0.0013160589832568296
+0,550,0.6000000000000001,0.0013278680867955248
+0,550,0.65,0.001347549926026684
+0,550,0.7000000000000001,0.0013751045009503065
+0,550,0.75,0.0014105318115663925
+0,550,0.8,0.0014538318578749424
+0,550,0.8500000000000001,0.0015050046398759553
+0,550,0.9,0.0015640501575694323
+0,550,0.9500000000000001,0.0016309684109553728
+0,550,1.0,0.0017057594000337772
+0,600,0.0,0.0017139209282636039
+0,600,0.05,0.0016387720875628148
+0,600,0.1,0.0015715336511463198
+0,600,0.15000000000000002,0.001512205619014118
+0,600,0.2,0.00146078799116621
+0,600,0.25,0.0014172807676025953
+0,600,0.30000000000000004,0.0013816839483232744
+0,600,0.35000000000000003,0.001353997533328247
+0,600,0.4,0.0013342215226175133
+0,600,0.45,0.0013223559161910728
+0,600,0.5,0.0013184007140489258
+0,600,0.55,0.0013223559161910732
+0,600,0.6000000000000001,0.0013342215226175133
+0,600,0.65,0.001353997533328247
+0,600,0.7000000000000001,0.0013816839483232744
+0,600,0.75,0.0014172807676025953
+0,600,0.8,0.00146078799116621
+0,600,0.8500000000000001,0.001512205619014118
+0,600,0.9,0.0015715336511463198
+0,600,0.9500000000000001,0.001638772087562815
+0,600,1.0,0.0017139209282636039
+0,650,0.0,0.0017220824564934303
+0,650,0.05,0.0016465757641702568
+0,650,0.1,0.0015790171447232068
+0,650,0.15000000000000002,0.0015194065981522804
+0,650,0.2,0.0014677441244574777
+0,650,0.25,0.001424029723638798
+0,650,0.30000000000000004,0.0013882633956962423
+0,650,0.35000000000000003,0.00136044514062981
+0,650,0.4,0.0013405749584395014
+0,650,0.45,0.001328652849125316
+0,650,0.5,0.001324678812687254
+0,650,0.55,0.0013286528491253161
+0,650,0.6000000000000001,0.0013405749584395014
+0,650,0.65,0.00136044514062981
+0,650,0.7000000000000001,0.0013882633956962423
+0,650,0.75,0.001424029723638798
+0,650,0.8,0.0014677441244574777
+0,650,0.8500000000000001,0.0015194065981522804
+0,650,0.9,0.0015790171447232068
+0,650,0.9500000000000001,0.001646575764170257
+0,650,1.0,0.0017220824564934303
+0,700,0.0,0.0017302439847232574
+0,700,0.05,0.001654379440777699
+0,700,0.1,0.0015865006383000942
+0,700,0.15000000000000002,0.001526607577290443
+0,700,0.2,0.0014747002577487453
+0,700,0.25,0.0014307786796750011
+0,700,0.30000000000000004,0.0013948428430692102
+0,700,0.35000000000000003,0.001366892747931373
+0,700,0.4,0.0013469283942614894
+0,700,0.45,0.0013349497820595592
+0,700,0.5,0.0013309569113255824
+0,700,0.55,0.0013349497820595595
+0,700,0.6000000000000001,0.0013469283942614894
+0,700,0.65,0.001366892747931373
+0,700,0.7000000000000001,0.0013948428430692102
+0,700,0.75,0.0014307786796750011
+0,700,0.8,0.0014747002577487453
+0,700,0.8500000000000001,0.001526607577290443
+0,700,0.9,0.0015865006383000942
+0,700,0.9500000000000001,0.0016543794407776992
+0,700,1.0,0.0017302439847232574
+10,-400,0.0,0.001231856496875405
+10,-400,0.05,0.0011778443273970215
+10,-400,0.1,0.0011295176494426785
+10,-400,0.15000000000000002,0.0010868764630123763
+10,-400,0.2,0.001049920768106114
+10,-400,0.25,0.0010186505647238923
+10,-400,0.30000000000000004,0.0009930658528657108
+10,-400,0.35000000000000003,0.0009731666325315696
+10,-400,0.4,0.0009589529037214689
+10,-400,0.45,0.0009504246664354083
+10,-400,0.5,0.0009475819206733882
+10,-400,0.55,0.0009504246664354084
+10,-400,0.6000000000000001,0.0009589529037214689
+10,-400,0.65,0.0009731666325315696
+10,-400,0.7000000000000001,0.0009930658528657108
+10,-400,0.75,0.0010186505647238923
+10,-400,0.8,0.001049920768106114
+10,-400,0.8500000000000001,0.0010868764630123763
+10,-400,0.9,0.0011295176494426785
+10,-400,0.9500000000000001,0.0011778443273970215
+10,-400,1.0,0.001231856496875405
+10,-350,0.0,0.0012258766109682425
+10,-350,0.05,0.0011721266364873272
+10,-350,0.1,0.0011240345540570345
+10,-350,0.15000000000000002,0.0010816003636773645
+10,-350,0.2,0.0010448240653483172
+10,-350,0.25,0.0010137056590698928
+10,-350,0.30000000000000004,0.0009882451448420908
+10,-350,0.35000000000000003,0.0009684425226649113
+10,-350,0.4,0.0009542977925383548
+10,-350,0.45,0.0009458109544624208
+10,-350,0.5,0.0009429820084371095
+10,-350,0.55,0.0009458109544624209
+10,-350,0.6000000000000001,0.0009542977925383548
+10,-350,0.65,0.0009684425226649113
+10,-350,0.7000000000000001,0.0009882451448420908
+10,-350,0.75,0.0010137056590698928
+10,-350,0.8,0.0010448240653483172
+10,-350,0.8500000000000001,0.0010816003636773645
+10,-350,0.9,0.0011240345540570345
+10,-350,0.9500000000000001,0.0011721266364873272
+10,-350,1.0,0.0012258766109682425
+10,-300,0.0,0.0012198967250610804
+10,-300,0.05,0.001166408945577633
+10,-300,0.1,0.0011185514586713903
+10,-300,0.15000000000000002,0.0010763242643423532
+10,-300,0.2,0.0010397273625905208
+10,-300,0.25,0.0010087607534158933
+10,-300,0.30000000000000004,0.000983424436818471
+10,-300,0.35000000000000003,0.0009637184127982533
+10,-300,0.4,0.000949642681355241
+10,-300,0.45,0.0009411972424894335
+10,-300,0.5,0.000938382096200831
+10,-300,0.55,0.0009411972424894337
+10,-300,0.6000000000000001,0.000949642681355241
+10,-300,0.65,0.0009637184127982533
+10,-300,0.7000000000000001,0.000983424436818471
+10,-300,0.75,0.0010087607534158933
+10,-300,0.8,0.0010397273625905208
+10,-300,0.8500000000000001,0.0010763242643423532
+10,-300,0.9,0.0011185514586713903
+10,-300,0.9500000000000001,0.001166408945577633
+10,-300,1.0,0.0012198967250610804
+10,-250,0.0,0.001213916839153918
+10,-250,0.05,0.0011606912546679386
+10,-250,0.1,0.0011130683632857464
+10,-250,0.15000000000000002,0.0010710481650073416
+10,-250,0.2,0.001034630659832724
+10,-250,0.25,0.0010038158477618938
+10,-250,0.30000000000000004,0.0009786037287948508
+10,-250,0.35000000000000003,0.0009589943029315952
+10,-250,0.4,0.000944987570172127
+10,-250,0.45,0.000936583530516446
+10,-250,0.5,0.0009337821839645523
+10,-250,0.55,0.0009365835305164461
+10,-250,0.6000000000000001,0.000944987570172127
+10,-250,0.65,0.0009589943029315952
+10,-250,0.7000000000000001,0.0009786037287948508
+10,-250,0.75,0.0010038158477618938
+10,-250,0.8,0.001034630659832724
+10,-250,0.8500000000000001,0.0010710481650073416
+10,-250,0.9,0.0011130683632857464
+10,-250,0.9500000000000001,0.0011606912546679388
+10,-250,1.0,0.001213916839153918
+10,-200,0.0,0.0012079369532467562
+10,-200,0.05,0.0011549735637582444
+10,-200,0.1,0.0011075852679001022
+10,-200,0.15000000000000002,0.00106577206567233
+10,-200,0.2,0.0010295339570749274
+10,-200,0.25,0.0009988709421078943
+10,-200,0.30000000000000004,0.000973783020771231
+10,-200,0.35000000000000003,0.0009542701930649372
+10,-200,0.4,0.0009403324589890131
+10,-200,0.45,0.0009319698185434586
+10,-200,0.5,0.0009291822717282739
+10,-200,0.55,0.0009319698185434588
+10,-200,0.6000000000000001,0.0009403324589890131
+10,-200,0.65,0.0009542701930649372
+10,-200,0.7000000000000001,0.000973783020771231
+10,-200,0.75,0.0009988709421078943
+10,-200,0.8,0.0010295339570749274
+10,-200,0.8500000000000001,0.00106577206567233
+10,-200,0.9,0.0011075852679001022
+10,-200,0.9500000000000001,0.0011549735637582446
+10,-200,1.0,0.0012079369532467562
+10,-150,0.0,0.0012019570673395938
+10,-150,0.05,0.00114925587284855
+10,-150,0.1,0.0011021021725144582
+10,-150,0.15000000000000002,0.0010604959663373184
+10,-150,0.2,0.0010244372543171305
+10,-150,0.25,0.0009939260364538948
+10,-150,0.30000000000000004,0.0009689623127476109
+10,-150,0.35000000000000003,0.0009495460831982789
+10,-150,0.4,0.0009356773478058991
+10,-150,0.45,0.000927356106570471
+10,-150,0.5,0.0009245823594919952
+10,-150,0.55,0.0009273561065704713
+10,-150,0.6000000000000001,0.0009356773478058991
+10,-150,0.65,0.0009495460831982789
+10,-150,0.7000000000000001,0.0009689623127476109
+10,-150,0.75,0.0009939260364538948
+10,-150,0.8,0.0010244372543171305
+10,-150,0.8500000000000001,0.0010604959663373184
+10,-150,0.9,0.0011021021725144582
+10,-150,0.9500000000000001,0.00114925587284855
+10,-150,1.0,0.0012019570673395938
+10,-100,0.0,0.0011959771814324318
+10,-100,0.05,0.0011435381819388558
+10,-100,0.1,0.001096619077128814
+10,-100,0.15000000000000002,0.001055219867002307
+10,-100,0.2,0.001019340551559334
+10,-100,0.25,0.0009889811307998953
+10,-100,0.30000000000000004,0.0009641416047239911
+10,-100,0.35000000000000003,0.0009448219733316209
+10,-100,0.4,0.0009310222366227853
+10,-100,0.45,0.0009227423945974839
+10,-100,0.5,0.0009199824472557167
+10,-100,0.55,0.000922742394597484
+10,-100,0.6000000000000001,0.0009310222366227853
+10,-100,0.65,0.0009448219733316209
+10,-100,0.7000000000000001,0.0009641416047239911
+10,-100,0.75,0.0009889811307998953
+10,-100,0.8,0.001019340551559334
+10,-100,0.8500000000000001,0.001055219867002307
+10,-100,0.9,0.001096619077128814
+10,-100,0.9500000000000001,0.0011435381819388558
+10,-100,1.0,0.0011959771814324318
+10,-50,0.0,0.0011899972955252698
+10,-50,0.05,0.0011378204910291614
+10,-50,0.1,0.00109113598174317
+10,-50,0.15000000000000002,0.0010499437676672954
+10,-50,0.2,0.0010142438488015375
+10,-50,0.25,0.0009840362251458958
+10,-50,0.30000000000000004,0.0009593208967003711
+10,-50,0.35000000000000003,0.0009400978634649627
+10,-50,0.4,0.0009263671254396713
+10,-50,0.45,0.0009181286826244965
+10,-50,0.5,0.0009153825350194381
+10,-50,0.55,0.0009181286826244966
+10,-50,0.6000000000000001,0.0009263671254396713
+10,-50,0.65,0.0009400978634649627
+10,-50,0.7000000000000001,0.0009593208967003711
+10,-50,0.75,0.0009840362251458958
+10,-50,0.8,0.0010142438488015375
+10,-50,0.8500000000000001,0.0010499437676672954
+10,-50,0.9,0.00109113598174317
+10,-50,0.9500000000000001,0.0011378204910291617
+10,-50,1.0,0.0011899972955252698
+10,0,0.0,0.0011840174096181073
+10,0,0.05,0.0011321028001194673
+10,0,0.1,0.0010856528863575259
+10,0,0.15000000000000002,0.001044667668332284
+10,0,0.2,0.0010091471460437406
+10,0,0.25,0.0009790913194918963
+10,0,0.30000000000000004,0.0009545001886767511
+10,0,0.35000000000000003,0.0009353737535983046
+10,0,0.4,0.0009217120142565574
+10,0,0.45,0.0009135149706515091
+10,0,0.5,0.0009107826227831595
+10,0,0.55,0.0009135149706515092
+10,0,0.6000000000000001,0.0009217120142565574
+10,0,0.65,0.0009353737535983046
+10,0,0.7000000000000001,0.0009545001886767511
+10,0,0.75,0.0009790913194918963
+10,0,0.8,0.0010091471460437406
+10,0,0.8500000000000001,0.001044667668332284
+10,0,0.9,0.0010856528863575259
+10,0,0.9500000000000001,0.0011321028001194673
+10,0,1.0,0.0011840174096181073
+10,50,0.0,0.0011899972955252698
+10,50,0.05,0.0011378204910291614
+10,50,0.1,0.00109113598174317
+10,50,0.15000000000000002,0.0010499437676672954
+10,50,0.2,0.0010142438488015375
+10,50,0.25,0.0009840362251458958
+10,50,0.30000000000000004,0.0009593208967003711
+10,50,0.35000000000000003,0.0009400978634649627
+10,50,0.4,0.0009263671254396713
+10,50,0.45,0.0009181286826244965
+10,50,0.5,0.0009153825350194381
+10,50,0.55,0.0009181286826244966
+10,50,0.6000000000000001,0.0009263671254396713
+10,50,0.65,0.0009400978634649627
+10,50,0.7000000000000001,0.0009593208967003711
+10,50,0.75,0.0009840362251458958
+10,50,0.8,0.0010142438488015375
+10,50,0.8500000000000001,0.0010499437676672954
+10,50,0.9,0.00109113598174317
+10,50,0.9500000000000001,0.0011378204910291617
+10,50,1.0,0.0011899972955252698
+10,100,0.0,0.0011959771814324318
+10,100,0.05,0.0011435381819388558
+10,100,0.1,0.001096619077128814
+10,100,0.15000000000000002,0.001055219867002307
+10,100,0.2,0.001019340551559334
+10,100,0.25,0.0009889811307998953
+10,100,0.30000000000000004,0.0009641416047239911
+10,100,0.35000000000000003,0.0009448219733316209
+10,100,0.4,0.0009310222366227853
+10,100,0.45,0.0009227423945974839
+10,100,0.5,0.0009199824472557167
+10,100,0.55,0.000922742394597484
+10,100,0.6000000000000001,0.0009310222366227853
+10,100,0.65,0.0009448219733316209
+10,100,0.7000000000000001,0.0009641416047239911
+10,100,0.75,0.0009889811307998953
+10,100,0.8,0.001019340551559334
+10,100,0.8500000000000001,0.001055219867002307
+10,100,0.9,0.001096619077128814
+10,100,0.9500000000000001,0.0011435381819388558
+10,100,1.0,0.0011959771814324318
+10,150,0.0,0.0012019570673395938
+10,150,0.05,0.00114925587284855
+10,150,0.1,0.0011021021725144582
+10,150,0.15000000000000002,0.0010604959663373184
+10,150,0.2,0.0010244372543171305
+10,150,0.25,0.0009939260364538948
+10,150,0.30000000000000004,0.0009689623127476109
+10,150,0.35000000000000003,0.0009495460831982789
+10,150,0.4,0.0009356773478058991
+10,150,0.45,0.000927356106570471
+10,150,0.5,0.0009245823594919952
+10,150,0.55,0.0009273561065704713
+10,150,0.6000000000000001,0.0009356773478058991
+10,150,0.65,0.0009495460831982789
+10,150,0.7000000000000001,0.0009689623127476109
+10,150,0.75,0.0009939260364538948
+10,150,0.8,0.0010244372543171305
+10,150,0.8500000000000001,0.0010604959663373184
+10,150,0.9,0.0011021021725144582
+10,150,0.9500000000000001,0.00114925587284855
+10,150,1.0,0.0012019570673395938
+10,200,0.0,0.0012079369532467562
+10,200,0.05,0.0011549735637582444
+10,200,0.1,0.0011075852679001022
+10,200,0.15000000000000002,0.00106577206567233
+10,200,0.2,0.0010295339570749274
+10,200,0.25,0.0009988709421078943
+10,200,0.30000000000000004,0.000973783020771231
+10,200,0.35000000000000003,0.0009542701930649372
+10,200,0.4,0.0009403324589890131
+10,200,0.45,0.0009319698185434586
+10,200,0.5,0.0009291822717282739
+10,200,0.55,0.0009319698185434588
+10,200,0.6000000000000001,0.0009403324589890131
+10,200,0.65,0.0009542701930649372
+10,200,0.7000000000000001,0.000973783020771231
+10,200,0.75,0.0009988709421078943
+10,200,0.8,0.0010295339570749274
+10,200,0.8500000000000001,0.00106577206567233
+10,200,0.9,0.0011075852679001022
+10,200,0.9500000000000001,0.0011549735637582446
+10,200,1.0,0.0012079369532467562
+10,250,0.0,0.001213916839153918
+10,250,0.05,0.0011606912546679386
+10,250,0.1,0.0011130683632857464
+10,250,0.15000000000000002,0.0010710481650073416
+10,250,0.2,0.001034630659832724
+10,250,0.25,0.0010038158477618938
+10,250,0.30000000000000004,0.0009786037287948508
+10,250,0.35000000000000003,0.0009589943029315952
+10,250,0.4,0.000944987570172127
+10,250,0.45,0.000936583530516446
+10,250,0.5,0.0009337821839645523
+10,250,0.55,0.0009365835305164461
+10,250,0.6000000000000001,0.000944987570172127
+10,250,0.65,0.0009589943029315952
+10,250,0.7000000000000001,0.0009786037287948508
+10,250,0.75,0.0010038158477618938
+10,250,0.8,0.001034630659832724
+10,250,0.8500000000000001,0.0010710481650073416
+10,250,0.9,0.0011130683632857464
+10,250,0.9500000000000001,0.0011606912546679388
+10,250,1.0,0.001213916839153918
+10,300,0.0,0.0012198967250610804
+10,300,0.05,0.001166408945577633
+10,300,0.1,0.0011185514586713903
+10,300,0.15000000000000002,0.0010763242643423532
+10,300,0.2,0.0010397273625905208
+10,300,0.25,0.0010087607534158933
+10,300,0.30000000000000004,0.000983424436818471
+10,300,0.35000000000000003,0.0009637184127982533
+10,300,0.4,0.000949642681355241
+10,300,0.45,0.0009411972424894335
+10,300,0.5,0.000938382096200831
+10,300,0.55,0.0009411972424894337
+10,300,0.6000000000000001,0.000949642681355241
+10,300,0.65,0.0009637184127982533
+10,300,0.7000000000000001,0.000983424436818471
+10,300,0.75,0.0010087607534158933
+10,300,0.8,0.0010397273625905208
+10,300,0.8500000000000001,0.0010763242643423532
+10,300,0.9,0.0011185514586713903
+10,300,0.9500000000000001,0.001166408945577633
+10,300,1.0,0.0012198967250610804
+10,350,0.0,0.0012258766109682425
+10,350,0.05,0.0011721266364873272
+10,350,0.1,0.0011240345540570345
+10,350,0.15000000000000002,0.0010816003636773645
+10,350,0.2,0.0010448240653483172
+10,350,0.25,0.0010137056590698928
+10,350,0.30000000000000004,0.0009882451448420908
+10,350,0.35000000000000003,0.0009684425226649113
+10,350,0.4,0.0009542977925383548
+10,350,0.45,0.0009458109544624208
+10,350,0.5,0.0009429820084371095
+10,350,0.55,0.0009458109544624209
+10,350,0.6000000000000001,0.0009542977925383548
+10,350,0.65,0.0009684425226649113
+10,350,0.7000000000000001,0.0009882451448420908
+10,350,0.75,0.0010137056590698928
+10,350,0.8,0.0010448240653483172
+10,350,0.8500000000000001,0.0010816003636773645
+10,350,0.9,0.0011240345540570345
+10,350,0.9500000000000001,0.0011721266364873272
+10,350,1.0,0.0012258766109682425
+10,400,0.0,0.001231856496875405
+10,400,0.05,0.0011778443273970215
+10,400,0.1,0.0011295176494426785
+10,400,0.15000000000000002,0.0010868764630123763
+10,400,0.2,0.001049920768106114
+10,400,0.25,0.0010186505647238923
+10,400,0.30000000000000004,0.0009930658528657108
+10,400,0.35000000000000003,0.0009731666325315696
+10,400,0.4,0.0009589529037214689
+10,400,0.45,0.0009504246664354083
+10,400,0.5,0.0009475819206733882
+10,400,0.55,0.0009504246664354084
+10,400,0.6000000000000001,0.0009589529037214689
+10,400,0.65,0.0009731666325315696
+10,400,0.7000000000000001,0.0009930658528657108
+10,400,0.75,0.0010186505647238923
+10,400,0.8,0.001049920768106114
+10,400,0.8500000000000001,0.0010868764630123763
+10,400,0.9,0.0011295176494426785
+10,400,0.9500000000000001,0.0011778443273970215
+10,400,1.0,0.001231856496875405
+10,450,0.0,0.0012378363827825667
+10,450,0.05,0.0011835620183067155
+10,450,0.1,0.0011350007448283227
+10,450,0.15000000000000002,0.0010921525623473877
+10,450,0.2,0.0010550174708639107
+10,450,0.25,0.0010235954703778918
+10,450,0.30000000000000004,0.0009978865608893306
+10,450,0.35000000000000003,0.0009778907423982277
+10,450,0.4,0.0009636080149045827
+10,450,0.45,0.0009550383784083957
+10,450,0.5,0.0009521818329096667
+10,450,0.55,0.0009550383784083958
+10,450,0.6000000000000001,0.0009636080149045827
+10,450,0.65,0.0009778907423982277
+10,450,0.7000000000000001,0.0009978865608893306
+10,450,0.75,0.0010235954703778918
+10,450,0.8,0.0010550174708639107
+10,450,0.8500000000000001,0.0010921525623473877
+10,450,0.9,0.0011350007448283227
+10,450,0.9500000000000001,0.0011835620183067157
+10,450,1.0,0.0012378363827825667
+10,500,0.0,0.0012438162686897291
+10,500,0.05,0.00118927970921641
+10,500,0.1,0.0011404838402139666
+10,500,0.15000000000000002,0.0010974286616823993
+10,500,0.2,0.0010601141736217073
+10,500,0.25,0.0010285403760318913
+10,500,0.30000000000000004,0.0010027072689129508
+10,500,0.35000000000000003,0.0009826148522648858
+10,500,0.4,0.0009682631260876967
+10,500,0.45,0.0009596520903813832
+10,500,0.5,0.0009567817451459454
+10,500,0.55,0.0009596520903813833
+10,500,0.6000000000000001,0.0009682631260876967
+10,500,0.65,0.0009826148522648858
+10,500,0.7000000000000001,0.0010027072689129508
+10,500,0.75,0.0010285403760318913
+10,500,0.8,0.0010601141736217073
+10,500,0.8500000000000001,0.0010974286616823993
+10,500,0.9,0.0011404838402139666
+10,500,0.9500000000000001,0.0011892797092164103
+10,500,1.0,0.0012438162686897291
+10,550,0.0,0.0012497961545968911
+10,550,0.05,0.001194997400126104
+10,550,0.1,0.0011459669355996108
+10,550,0.15000000000000002,0.0011027047610174107
+10,550,0.2,0.0010652108763795042
+10,550,0.25,0.0010334852816858905
+10,550,0.30000000000000004,0.0010075279769365707
+10,550,0.35000000000000003,0.0009873389621315436
+10,550,0.4,0.0009729182372708106
+10,550,0.45,0.0009642658023543705
+10,550,0.5,0.0009613816573822239
+10,550,0.55,0.0009642658023543706
+10,550,0.6000000000000001,0.0009729182372708106
+10,550,0.65,0.0009873389621315436
+10,550,0.7000000000000001,0.0010075279769365707
+10,550,0.75,0.0010334852816858905
+10,550,0.8,0.0010652108763795042
+10,550,0.8500000000000001,0.0011027047610174107
+10,550,0.9,0.0011459669355996108
+10,550,0.9500000000000001,0.0011949974001261045
+10,550,1.0,0.0012497961545968911
+10,600,0.0,0.0012557760405040536
+10,600,0.05,0.0012007150910357987
+10,600,0.1,0.0011514500309852548
+10,600,0.15000000000000002,0.0011079808603524225
+10,600,0.2,0.0010703075791373008
+10,600,0.25,0.0010384301873398903
+10,600,0.30000000000000004,0.0010123486849601907
+10,600,0.35000000000000003,0.000992063071998202
+10,600,0.4,0.0009775733484539246
+10,600,0.45,0.000968879514327358
+10,600,0.5,0.0009659815696185025
+10,600,0.55,0.0009688795143273581
+10,600,0.6000000000000001,0.0009775733484539246
+10,600,0.65,0.000992063071998202
+10,600,0.7000000000000001,0.0010123486849601907
+10,600,0.75,0.0010384301873398903
+10,600,0.8,0.0010703075791373008
+10,600,0.8500000000000001,0.0011079808603524225
+10,600,0.9,0.0011514500309852548
+10,600,0.9500000000000001,0.001200715091035799
+10,600,1.0,0.0012557760405040536
+10,650,0.0,0.0012617559264112156
+10,650,0.05,0.0012064327819454929
+10,650,0.1,0.001156933126370899
+10,650,0.15000000000000002,0.0011132569596874339
+10,650,0.2,0.0010754042818950974
+10,650,0.25,0.0010433750929938895
+10,650,0.30000000000000004,0.0010171693929838105
+10,650,0.35000000000000003,0.00099678718186486
+10,650,0.4,0.0009822284596370384
+10,650,0.45,0.0009734932263003454
+10,650,0.5,0.0009705814818547811
+10,650,0.55,0.0009734932263003455
+10,650,0.6000000000000001,0.0009822284596370384
+10,650,0.65,0.00099678718186486
+10,650,0.7000000000000001,0.0010171693929838105
+10,650,0.75,0.0010433750929938895
+10,650,0.8,0.0010754042818950974
+10,650,0.8500000000000001,0.0011132569596874339
+10,650,0.9,0.001156933126370899
+10,650,0.9500000000000001,0.001206432781945493
+10,650,1.0,0.0012617559264112156
+10,700,0.0,0.0012677358123183776
+10,700,0.05,0.0012121504728551872
+10,700,0.1,0.001162416221756543
+10,700,0.15000000000000002,0.0011185330590224455
+10,700,0.2,0.0010805009846528942
+10,700,0.25,0.0010483199986478892
+10,700,0.30000000000000004,0.0010219901010074307
+10,700,0.35000000000000003,0.0010015112917315181
+10,700,0.4,0.0009868835708201525
+10,700,0.45,0.000978106938273333
+10,700,0.5,0.0009751813940910597
+10,700,0.55,0.000978106938273333
+10,700,0.6000000000000001,0.0009868835708201525
+10,700,0.65,0.0010015112917315181
+10,700,0.7000000000000001,0.0010219901010074307
+10,700,0.75,0.0010483199986478892
+10,700,0.8,0.0010805009846528942
+10,700,0.8500000000000001,0.0011185330590224455
+10,700,0.9,0.001162416221756543
+10,700,0.9500000000000001,0.0012121504728551875
+10,700,1.0,0.0012677358123183776
+20,-400,0.0,0.000921928398200691
+20,-400,0.05,0.000881505383818045
+20,-400,0.1,0.0008453374235809412
+20,-400,0.15000000000000002,0.0008134245174893789
+20,-400,0.2,0.0007857666655433581
+20,-400,0.25,0.000762363867742879
+20,-400,0.30000000000000004,0.0007432161240879417
+20,-400,0.35000000000000003,0.0007283234345785457
+20,-400,0.4,0.0007176857992146917
+20,-400,0.45,0.0007113032179963792
+20,-400,0.5,0.0007091756909236084
+20,-400,0.55,0.0007113032179963793
+20,-400,0.6000000000000001,0.0007176857992146917
+20,-400,0.65,0.0007283234345785457
+20,-400,0.7000000000000001,0.0007432161240879417
+20,-400,0.75,0.000762363867742879
+20,-400,0.8,0.0007857666655433581
+20,-400,0.8500000000000001,0.0008134245174893789
+20,-400,0.9,0.0008453374235809412
+20,-400,0.9500000000000001,0.0008815053838180454
+20,-400,1.0,0.000921928398200691
+20,-350,0.0,0.0009174530176269012
+20,-350,0.05,0.0008772262314694138
+20,-350,0.1,0.0008412338438548199
+20,-350,0.15000000000000002,0.0008094758547831196
+20,-350,0.2,0.0007819522642543126
+20,-350,0.25,0.0007586630722683989
+20,-350,0.30000000000000004,0.0007396082788253787
+20,-350,0.35000000000000003,0.0007247878839252517
+20,-350,0.4,0.0007142018875680185
+20,-350,0.45,0.0007078502897536782
+20,-350,0.5,0.0007057330904822316
+20,-350,0.55,0.0007078502897536783
+20,-350,0.6000000000000001,0.0007142018875680185
+20,-350,0.65,0.0007247878839252517
+20,-350,0.7000000000000001,0.0007396082788253787
+20,-350,0.75,0.0007586630722683989
+20,-350,0.8,0.0007819522642543126
+20,-350,0.8500000000000001,0.0008094758547831196
+20,-350,0.9,0.0008412338438548199
+20,-350,0.9500000000000001,0.000877226231469414
+20,-350,1.0,0.0009174530176269012
+20,-300,0.0,0.0009129776370531115
+20,-300,0.05,0.0008729470791207825
+20,-300,0.1,0.000837130264128699
+20,-300,0.15000000000000002,0.0008055271920768606
+20,-300,0.2,0.0007781378629652673
+20,-300,0.25,0.0007549622767939189
+20,-300,0.30000000000000004,0.000736000433562816
+20,-300,0.35000000000000003,0.0007212523332719578
+20,-300,0.4,0.0007107179759213452
+20,-300,0.45,0.0007043973615109773
+20,-300,0.5,0.0007022904900408548
+20,-300,0.55,0.0007043973615109775
+20,-300,0.6000000000000001,0.0007107179759213452
+20,-300,0.65,0.0007212523332719578
+20,-300,0.7000000000000001,0.000736000433562816
+20,-300,0.75,0.0007549622767939189
+20,-300,0.8,0.0007781378629652673
+20,-300,0.8500000000000001,0.0008055271920768606
+20,-300,0.9,0.000837130264128699
+20,-300,0.9500000000000001,0.0008729470791207828
+20,-300,1.0,0.0009129776370531115
+20,-250,0.0,0.0009085022564793216
+20,-250,0.05,0.0008686679267721512
+20,-250,0.1,0.0008330266844025779
+20,-250,0.15000000000000002,0.0008015785293706014
+20,-250,0.2,0.0007743234616762217
+20,-250,0.25,0.0007512614813194389
+20,-250,0.30000000000000004,0.0007323925883002531
+20,-250,0.35000000000000003,0.0007177167826186639
+20,-250,0.4,0.0007072340642746719
+20,-250,0.45,0.0007009444332682765
+20,-250,0.5,0.000698847889599478
+20,-250,0.55,0.0007009444332682766
+20,-250,0.6000000000000001,0.0007072340642746719
+20,-250,0.65,0.0007177167826186639
+20,-250,0.7000000000000001,0.0007323925883002531
+20,-250,0.75,0.0007512614813194389
+20,-250,0.8,0.0007743234616762217
+20,-250,0.8500000000000001,0.0008015785293706014
+20,-250,0.9,0.0008330266844025779
+20,-250,0.9500000000000001,0.0008686679267721515
+20,-250,1.0,0.0009085022564793216
+20,-200,0.0,0.000904026875905532
+20,-200,0.05,0.0008643887744235199
+20,-200,0.1,0.0008289231046764569
+20,-200,0.15000000000000002,0.0007976298666643424
+20,-200,0.2,0.0007705090603871763
+20,-200,0.25,0.000747560685844959
+20,-200,0.30000000000000004,0.0007287847430376904
+20,-200,0.35000000000000003,0.0007141812319653701
+20,-200,0.4,0.0007037501526279986
+20,-200,0.45,0.0006974915050255757
+20,-200,0.5,0.0006954052891581014
+20,-200,0.55,0.0006974915050255758
+20,-200,0.6000000000000001,0.0007037501526279986
+20,-200,0.65,0.0007141812319653701
+20,-200,0.7000000000000001,0.0007287847430376904
+20,-200,0.75,0.000747560685844959
+20,-200,0.8,0.0007705090603871763
+20,-200,0.8500000000000001,0.0007976298666643424
+20,-200,0.9,0.0008289231046764569
+20,-200,0.9500000000000001,0.0008643887744235202
+20,-200,1.0,0.000904026875905532
+20,-150,0.0,0.000899551495331742
+20,-150,0.05,0.0008601096220748886
+20,-150,0.1,0.0008248195249503357
+20,-150,0.15000000000000002,0.0007936812039580831
+20,-150,0.2,0.0007666946590981308
+20,-150,0.25,0.000743859890370479
+20,-150,0.30000000000000004,0.0007251768977751275
+20,-150,0.35000000000000003,0.0007106456813120761
+20,-150,0.4,0.0007002662409813252
+20,-150,0.45,0.0006940385767828747
+20,-150,0.5,0.0006919626887167246
+20,-150,0.55,0.0006940385767828749
+20,-150,0.6000000000000001,0.0007002662409813252
+20,-150,0.65,0.0007106456813120761
+20,-150,0.7000000000000001,0.0007251768977751275
+20,-150,0.75,0.000743859890370479
+20,-150,0.8,0.0007666946590981308
+20,-150,0.8500000000000001,0.0007936812039580831
+20,-150,0.9,0.0008248195249503357
+20,-150,0.9500000000000001,0.0008601096220748888
+20,-150,1.0,0.000899551495331742
+20,-100,0.0,0.0008950761147579525
+20,-100,0.05,0.0008558304697262574
+20,-100,0.1,0.0008207159452242146
+20,-100,0.15000000000000002,0.0007897325412518241
+20,-100,0.2,0.0007628802578090856
+20,-100,0.25,0.000740159094895999
+20,-100,0.30000000000000004,0.0007215690525125647
+20,-100,0.35000000000000003,0.0007071101306587822
+20,-100,0.4,0.0006967823293346522
+20,-100,0.45,0.0006905856485401739
+20,-100,0.5,0.0006885200882753478
+20,-100,0.55,0.000690585648540174
+20,-100,0.6000000000000001,0.0006967823293346522
+20,-100,0.65,0.0007071101306587822
+20,-100,0.7000000000000001,0.0007215690525125647
+20,-100,0.75,0.000740159094895999
+20,-100,0.8,0.0007628802578090856
+20,-100,0.8500000000000001,0.0007897325412518241
+20,-100,0.9,0.0008207159452242146
+20,-100,0.9500000000000001,0.0008558304697262577
+20,-100,1.0,0.0008950761147579525
+20,-50,0.0,0.0008906007341841626
+20,-50,0.05,0.0008515513173776261
+20,-50,0.1,0.0008166123654980936
+20,-50,0.15000000000000002,0.000785783878545565
+20,-50,0.2,0.0007590658565200401
+20,-50,0.25,0.000736458299421519
+20,-50,0.30000000000000004,0.0007179612072500018
+20,-50,0.35000000000000003,0.0007035745800054883
+20,-50,0.4,0.0006932984176879789
+20,-50,0.45,0.0006871327202974731
+20,-50,0.5,0.0006850774878339712
+20,-50,0.55,0.0006871327202974732
+20,-50,0.6000000000000001,0.0006932984176879789
+20,-50,0.65,0.0007035745800054883
+20,-50,0.7000000000000001,0.0007179612072500018
+20,-50,0.75,0.000736458299421519
+20,-50,0.8,0.0007590658565200401
+20,-50,0.8500000000000001,0.000785783878545565
+20,-50,0.9,0.0008166123654980936
+20,-50,0.9500000000000001,0.0008515513173776263
+20,-50,1.0,0.0008906007341841626
+20,0,0.0,0.000886125353610373
+20,0,0.05,0.0008472721650289949
+20,0,0.1,0.0008125087857719724
+20,0,0.15000000000000002,0.0007818352158393059
+20,0,0.2,0.0007552514552309947
+20,0,0.25,0.000732757503947039
+20,0,0.30000000000000004,0.000714353361987439
+20,0,0.35000000000000003,0.0007000390293521944
+20,0,0.4,0.0006898145060413056
+20,0,0.45,0.0006836797920547722
+20,0,0.5,0.0006816348873925944
+20,0,0.55,0.0006836797920547723
+20,0,0.6000000000000001,0.0006898145060413056
+20,0,0.65,0.0007000390293521944
+20,0,0.7000000000000001,0.000714353361987439
+20,0,0.75,0.000732757503947039
+20,0,0.8,0.0007552514552309947
+20,0,0.8500000000000001,0.0007818352158393059
+20,0,0.9,0.0008125087857719724
+20,0,0.9500000000000001,0.0008472721650289952
+20,0,1.0,0.000886125353610373
+20,50,0.0,0.0008906007341841626
+20,50,0.05,0.0008515513173776261
+20,50,0.1,0.0008166123654980936
+20,50,0.15000000000000002,0.000785783878545565
+20,50,0.2,0.0007590658565200401
+20,50,0.25,0.000736458299421519
+20,50,0.30000000000000004,0.0007179612072500018
+20,50,0.35000000000000003,0.0007035745800054883
+20,50,0.4,0.0006932984176879789
+20,50,0.45,0.0006871327202974731
+20,50,0.5,0.0006850774878339712
+20,50,0.55,0.0006871327202974732
+20,50,0.6000000000000001,0.0006932984176879789
+20,50,0.65,0.0007035745800054883
+20,50,0.7000000000000001,0.0007179612072500018
+20,50,0.75,0.000736458299421519
+20,50,0.8,0.0007590658565200401
+20,50,0.8500000000000001,0.000785783878545565
+20,50,0.9,0.0008166123654980936
+20,50,0.9500000000000001,0.0008515513173776263
+20,50,1.0,0.0008906007341841626
+20,100,0.0,0.0008950761147579525
+20,100,0.05,0.0008558304697262574
+20,100,0.1,0.0008207159452242146
+20,100,0.15000000000000002,0.0007897325412518241
+20,100,0.2,0.0007628802578090856
+20,100,0.25,0.000740159094895999
+20,100,0.30000000000000004,0.0007215690525125647
+20,100,0.35000000000000003,0.0007071101306587822
+20,100,0.4,0.0006967823293346522
+20,100,0.45,0.0006905856485401739
+20,100,0.5,0.0006885200882753478
+20,100,0.55,0.000690585648540174
+20,100,0.6000000000000001,0.0006967823293346522
+20,100,0.65,0.0007071101306587822
+20,100,0.7000000000000001,0.0007215690525125647
+20,100,0.75,0.000740159094895999
+20,100,0.8,0.0007628802578090856
+20,100,0.8500000000000001,0.0007897325412518241
+20,100,0.9,0.0008207159452242146
+20,100,0.9500000000000001,0.0008558304697262577
+20,100,1.0,0.0008950761147579525
+20,150,0.0,0.000899551495331742
+20,150,0.05,0.0008601096220748886
+20,150,0.1,0.0008248195249503357
+20,150,0.15000000000000002,0.0007936812039580831
+20,150,0.2,0.0007666946590981308
+20,150,0.25,0.000743859890370479
+20,150,0.30000000000000004,0.0007251768977751275
+20,150,0.35000000000000003,0.0007106456813120761
+20,150,0.4,0.0007002662409813252
+20,150,0.45,0.0006940385767828747
+20,150,0.5,0.0006919626887167246
+20,150,0.55,0.0006940385767828749
+20,150,0.6000000000000001,0.0007002662409813252
+20,150,0.65,0.0007106456813120761
+20,150,0.7000000000000001,0.0007251768977751275
+20,150,0.75,0.000743859890370479
+20,150,0.8,0.0007666946590981308
+20,150,0.8500000000000001,0.0007936812039580831
+20,150,0.9,0.0008248195249503357
+20,150,0.9500000000000001,0.0008601096220748888
+20,150,1.0,0.000899551495331742
+20,200,0.0,0.000904026875905532
+20,200,0.05,0.0008643887744235199
+20,200,0.1,0.0008289231046764569
+20,200,0.15000000000000002,0.0007976298666643424
+20,200,0.2,0.0007705090603871763
+20,200,0.25,0.000747560685844959
+20,200,0.30000000000000004,0.0007287847430376904
+20,200,0.35000000000000003,0.0007141812319653701
+20,200,0.4,0.0007037501526279986
+20,200,0.45,0.0006974915050255757
+20,200,0.5,0.0006954052891581014
+20,200,0.55,0.0006974915050255758
+20,200,0.6000000000000001,0.0007037501526279986
+20,200,0.65,0.0007141812319653701
+20,200,0.7000000000000001,0.0007287847430376904
+20,200,0.75,0.000747560685844959
+20,200,0.8,0.0007705090603871763
+20,200,0.8500000000000001,0.0007976298666643424
+20,200,0.9,0.0008289231046764569
+20,200,0.9500000000000001,0.0008643887744235202
+20,200,1.0,0.000904026875905532
+20,250,0.0,0.0009085022564793216
+20,250,0.05,0.0008686679267721512
+20,250,0.1,0.0008330266844025779
+20,250,0.15000000000000002,0.0008015785293706014
+20,250,0.2,0.0007743234616762217
+20,250,0.25,0.0007512614813194389
+20,250,0.30000000000000004,0.0007323925883002531
+20,250,0.35000000000000003,0.0007177167826186639
+20,250,0.4,0.0007072340642746719
+20,250,0.45,0.0007009444332682765
+20,250,0.5,0.000698847889599478
+20,250,0.55,0.0007009444332682766
+20,250,0.6000000000000001,0.0007072340642746719
+20,250,0.65,0.0007177167826186639
+20,250,0.7000000000000001,0.0007323925883002531
+20,250,0.75,0.0007512614813194389
+20,250,0.8,0.0007743234616762217
+20,250,0.8500000000000001,0.0008015785293706014
+20,250,0.9,0.0008330266844025779
+20,250,0.9500000000000001,0.0008686679267721515
+20,250,1.0,0.0009085022564793216
+20,300,0.0,0.0009129776370531115
+20,300,0.05,0.0008729470791207825
+20,300,0.1,0.000837130264128699
+20,300,0.15000000000000002,0.0008055271920768606
+20,300,0.2,0.0007781378629652673
+20,300,0.25,0.0007549622767939189
+20,300,0.30000000000000004,0.000736000433562816
+20,300,0.35000000000000003,0.0007212523332719578
+20,300,0.4,0.0007107179759213452
+20,300,0.45,0.0007043973615109773
+20,300,0.5,0.0007022904900408548
+20,300,0.55,0.0007043973615109775
+20,300,0.6000000000000001,0.0007107179759213452
+20,300,0.65,0.0007212523332719578
+20,300,0.7000000000000001,0.000736000433562816
+20,300,0.75,0.0007549622767939189
+20,300,0.8,0.0007781378629652673
+20,300,0.8500000000000001,0.0008055271920768606
+20,300,0.9,0.000837130264128699
+20,300,0.9500000000000001,0.0008729470791207828
+20,300,1.0,0.0009129776370531115
+20,350,0.0,0.0009174530176269012
+20,350,0.05,0.0008772262314694138
+20,350,0.1,0.0008412338438548199
+20,350,0.15000000000000002,0.0008094758547831196
+20,350,0.2,0.0007819522642543126
+20,350,0.25,0.0007586630722683989
+20,350,0.30000000000000004,0.0007396082788253787
+20,350,0.35000000000000003,0.0007247878839252517
+20,350,0.4,0.0007142018875680185
+20,350,0.45,0.0007078502897536782
+20,350,0.5,0.0007057330904822316
+20,350,0.55,0.0007078502897536783
+20,350,0.6000000000000001,0.0007142018875680185
+20,350,0.65,0.0007247878839252517
+20,350,0.7000000000000001,0.0007396082788253787
+20,350,0.75,0.0007586630722683989
+20,350,0.8,0.0007819522642543126
+20,350,0.8500000000000001,0.0008094758547831196
+20,350,0.9,0.0008412338438548199
+20,350,0.9500000000000001,0.000877226231469414
+20,350,1.0,0.0009174530176269012
+20,400,0.0,0.000921928398200691
+20,400,0.05,0.000881505383818045
+20,400,0.1,0.0008453374235809412
+20,400,0.15000000000000002,0.0008134245174893789
+20,400,0.2,0.0007857666655433581
+20,400,0.25,0.000762363867742879
+20,400,0.30000000000000004,0.0007432161240879417
+20,400,0.35000000000000003,0.0007283234345785457
+20,400,0.4,0.0007176857992146917
+20,400,0.45,0.0007113032179963792
+20,400,0.5,0.0007091756909236084
+20,400,0.55,0.0007113032179963793
+20,400,0.6000000000000001,0.0007176857992146917
+20,400,0.65,0.0007283234345785457
+20,400,0.7000000000000001,0.0007432161240879417
+20,400,0.75,0.000762363867742879
+20,400,0.8,0.0007857666655433581
+20,400,0.8500000000000001,0.0008134245174893789
+20,400,0.9,0.0008453374235809412
+20,400,0.9500000000000001,0.0008815053838180454
+20,400,1.0,0.000921928398200691
+20,450,0.0,0.0009264037787744807
+20,450,0.05,0.0008857845361666763
+20,450,0.1,0.0008494410033070621
+20,450,0.15000000000000002,0.000817373180195638
+20,450,0.2,0.0007895810668324035
+20,450,0.25,0.000766064663217359
+20,450,0.30000000000000004,0.0007468239693505045
+20,450,0.35000000000000003,0.0007318589852318395
+20,450,0.4,0.0007211697108613649
+20,450,0.45,0.00071475614623908
+20,450,0.5,0.000712618291364985
+20,450,0.55,0.0007147561462390801
+20,450,0.6000000000000001,0.0007211697108613649
+20,450,0.65,0.0007318589852318395
+20,450,0.7000000000000001,0.0007468239693505045
+20,450,0.75,0.000766064663217359
+20,450,0.8,0.0007895810668324035
+20,450,0.8500000000000001,0.000817373180195638
+20,450,0.9,0.0008494410033070621
+20,450,0.9500000000000001,0.0008857845361666766
+20,450,1.0,0.0009264037787744807
+20,500,0.0,0.0009308791593482706
+20,500,0.05,0.0008900636885153077
+20,500,0.1,0.0008535445830331833
+20,500,0.15000000000000002,0.0008213218429018971
+20,500,0.2,0.0007933954681214491
+20,500,0.25,0.000769765458691839
+20,500,0.30000000000000004,0.0007504318146130673
+20,500,0.35000000000000003,0.0007353945358851335
+20,500,0.4,0.0007246536225080382
+20,500,0.45,0.0007182090744817809
+20,500,0.5,0.0007160608918063619
+20,500,0.55,0.000718209074481781
+20,500,0.6000000000000001,0.0007246536225080382
+20,500,0.65,0.0007353945358851335
+20,500,0.7000000000000001,0.0007504318146130673
+20,500,0.75,0.000769765458691839
+20,500,0.8,0.0007933954681214491
+20,500,0.8500000000000001,0.0008213218429018971
+20,500,0.9,0.0008535445830331833
+20,500,0.9500000000000001,0.000890063688515308
+20,500,1.0,0.0009308791593482706
+20,550,0.0,0.0009353545399220602
+20,550,0.05,0.0008943428408639389
+20,550,0.1,0.0008576481627593042
+20,550,0.15000000000000002,0.0008252705056081562
+20,550,0.2,0.0007972098694104943
+20,550,0.25,0.000773466254166319
+20,550,0.30000000000000004,0.0007540396598756301
+20,550,0.35000000000000003,0.0007389300865384274
+20,550,0.4,0.0007281375341547115
+20,550,0.45,0.0007216620027244816
+20,550,0.5,0.0007195034922477386
+20,550,0.55,0.0007216620027244817
+20,550,0.6000000000000001,0.0007281375341547115
+20,550,0.65,0.0007389300865384274
+20,550,0.7000000000000001,0.0007540396598756301
+20,550,0.75,0.000773466254166319
+20,550,0.8,0.0007972098694104943
+20,550,0.8500000000000001,0.0008252705056081562
+20,550,0.9,0.0008576481627593042
+20,550,0.9500000000000001,0.0008943428408639391
+20,550,1.0,0.0009353545399220602
+20,600,0.0,0.0009398299204958501
+20,600,0.05,0.0008986219932125702
+20,600,0.1,0.0008617517424854255
+20,600,0.15000000000000002,0.0008292191683144154
+20,600,0.2,0.0008010242706995398
+20,600,0.25,0.000777167049640799
+20,600,0.30000000000000004,0.000757647505138193
+20,600,0.35000000000000003,0.0007424656371917214
+20,600,0.4,0.0007316214458013847
+20,600,0.45,0.0007251149309671826
+20,600,0.5,0.0007229460926891153
+20,600,0.55,0.0007251149309671828
+20,600,0.6000000000000001,0.0007316214458013847
+20,600,0.65,0.0007424656371917214
+20,600,0.7000000000000001,0.000757647505138193
+20,600,0.75,0.000777167049640799
+20,600,0.8,0.0008010242706995398
+20,600,0.8500000000000001,0.0008292191683144154
+20,600,0.9,0.0008617517424854255
+20,600,0.9500000000000001,0.0008986219932125705
+20,600,1.0,0.0009398299204958501
+20,650,0.0,0.0009443053010696397
+20,650,0.05,0.0009029011455612014
+20,650,0.1,0.0008658553222115464
+20,650,0.15000000000000002,0.0008331678310206744
+20,650,0.2,0.0008048386719885852
+20,650,0.25,0.000780867845115279
+20,650,0.30000000000000004,0.0007612553504007557
+20,650,0.35000000000000003,0.0007460011878450151
+20,650,0.4,0.000735105357448058
+20,650,0.45,0.0007285678592098835
+20,650,0.5,0.000726388693130492
+20,650,0.55,0.0007285678592098836
+20,650,0.6000000000000001,0.000735105357448058
+20,650,0.65,0.0007460011878450151
+20,650,0.7000000000000001,0.0007612553504007557
+20,650,0.75,0.000780867845115279
+20,650,0.8,0.0008048386719885852
+20,650,0.8500000000000001,0.0008331678310206744
+20,650,0.9,0.0008658553222115464
+20,650,0.9500000000000001,0.0009029011455612018
+20,650,1.0,0.0009443053010696397
+20,700,0.0,0.0009487806816434296
+20,700,0.05,0.0009071802979098329
+20,700,0.1,0.0008699589019376676
+20,700,0.15000000000000002,0.0008371164937269336
+20,700,0.2,0.0008086530732776307
+20,700,0.25,0.000784568640589759
+20,700,0.30000000000000004,0.0007648631956633187
+20,700,0.35000000000000003,0.0007495367384983091
+20,700,0.4,0.0007385892690947314
+20,700,0.45,0.0007320207874525844
+20,700,0.5,0.0007298312935718689
+20,700,0.55,0.0007320207874525845
+20,700,0.6000000000000001,0.0007385892690947314
+20,700,0.65,0.0007495367384983091
+20,700,0.7000000000000001,0.0007648631956633187
+20,700,0.75,0.000784568640589759
+20,700,0.8,0.0008086530732776307
+20,700,0.8500000000000001,0.0008371164937269336
+20,700,0.9,0.0008699589019376676
+20,700,0.9500000000000001,0.0009071802979098331
+20,700,1.0,0.0009487806816434296
+30,-400,0.0,0.0007032956647404539
+30,-400,0.05,0.000672458854824911
+30,-400,0.1,0.0006448680249004777
+30,-400,0.15000000000000002,0.0006205231749671544
+30,-400,0.2,0.0005994243050249407
+30,-400,0.25,0.0005815714150738369
+30,-400,0.30000000000000004,0.0005669645051138429
+30,-400,0.35000000000000003,0.0005556035751449586
+30,-400,0.4,0.0005474886251671841
+30,-400,0.45,0.0005426196551805195
+30,-400,0.5,0.0005409966651849646
+30,-400,0.55,0.0005426196551805196
+30,-400,0.6000000000000001,0.0005474886251671841
+30,-400,0.65,0.0005556035751449586
+30,-400,0.7000000000000001,0.0005669645051138429
+30,-400,0.75,0.0005815714150738369
+30,-400,0.8,0.0005994243050249407
+30,-400,0.8500000000000001,0.0006205231749671544
+30,-400,0.9,0.0006448680249004777
+30,-400,0.9500000000000001,0.0006724588548249111
+30,-400,1.0,0.0007032956647404539
+30,-350,0.0,0.0006998816081155002
+30,-350,0.05,0.0006691944914519744
+30,-350,0.1,0.0006417375975951355
+30,-350,0.15000000000000002,0.0006175109265449836
+30,-350,0.2,0.0005965144783015185
+30,-350,0.25,0.0005787482528647406
+30,-350,0.30000000000000004,0.0005642122502346494
+30,-350,0.35000000000000003,0.000552906470411245
+30,-350,0.4,0.0005448309133945278
+30,-350,0.45,0.0005399855791844974
+30,-350,0.5,0.000538370467781154
+30,-350,0.55,0.0005399855791844976
+30,-350,0.6000000000000001,0.0005448309133945278
+30,-350,0.65,0.000552906470411245
+30,-350,0.7000000000000001,0.0005642122502346494
+30,-350,0.75,0.0005787482528647406
+30,-350,0.8,0.0005965144783015185
+30,-350,0.8500000000000001,0.0006175109265449836
+30,-350,0.9,0.0006417375975951355
+30,-350,0.9500000000000001,0.0006691944914519745
+30,-350,1.0,0.0006998816081155002
+30,-300,0.0,0.0006964675514905467
+30,-300,0.05,0.000665930128079038
+30,-300,0.1,0.0006386071702897935
+30,-300,0.15000000000000002,0.000614498678122813
+30,-300,0.2,0.0005936046515780967
+30,-300,0.25,0.0005759250906556443
+30,-300,0.30000000000000004,0.0005614599953554561
+30,-300,0.35000000000000003,0.0005502093656775317
+30,-300,0.4,0.0005421732016218717
+30,-300,0.45,0.0005373515031884755
+30,-300,0.5,0.0005357442703773435
+30,-300,0.55,0.0005373515031884756
+30,-300,0.6000000000000001,0.0005421732016218717
+30,-300,0.65,0.0005502093656775317
+30,-300,0.7000000000000001,0.0005614599953554561
+30,-300,0.75,0.0005759250906556443
+30,-300,0.8,0.0005936046515780967
+30,-300,0.8500000000000001,0.000614498678122813
+30,-300,0.9,0.0006386071702897935
+30,-300,0.9500000000000001,0.0006659301280790381
+30,-300,1.0,0.0006964675514905467
+30,-250,0.0,0.0006930534948655928
+30,-250,0.05,0.0006626657647061014
+30,-250,0.1,0.0006354767429844513
+30,-250,0.15000000000000002,0.0006114864297006422
+30,-250,0.2,0.0005906948248546745
+30,-250,0.25,0.000573101928446548
+30,-250,0.30000000000000004,0.0005587077404762625
+30,-250,0.35000000000000003,0.0005475122609438183
+30,-250,0.4,0.0005395154898492153
+30,-250,0.45,0.0005347174271924535
+30,-250,0.5,0.0005331180729735329
+30,-250,0.55,0.0005347174271924537
+30,-250,0.6000000000000001,0.0005395154898492153
+30,-250,0.65,0.0005475122609438183
+30,-250,0.7000000000000001,0.0005587077404762625
+30,-250,0.75,0.000573101928446548
+30,-250,0.8,0.0005906948248546745
+30,-250,0.8500000000000001,0.0006114864297006422
+30,-250,0.9,0.0006354767429844513
+30,-250,0.9500000000000001,0.0006626657647061015
+30,-250,1.0,0.0006930534948655928
+30,-200,0.0,0.0006896394382406392
+30,-200,0.05,0.000659401401333165
+30,-200,0.1,0.000632346315679109
+30,-200,0.15000000000000002,0.0006084741812784716
+30,-200,0.2,0.0005877849981312526
+30,-200,0.25,0.0005702787662374517
+30,-200,0.30000000000000004,0.0005559554855970693
+30,-200,0.35000000000000003,0.0005448151562101049
+30,-200,0.4,0.0005368577780765592
+30,-200,0.45,0.0005320833511964317
+30,-200,0.5,0.0005304918755697225
+30,-200,0.55,0.0005320833511964318
+30,-200,0.6000000000000001,0.0005368577780765592
+30,-200,0.65,0.0005448151562101049
+30,-200,0.7000000000000001,0.0005559554855970693
+30,-200,0.75,0.0005702787662374517
+30,-200,0.8,0.0005877849981312526
+30,-200,0.8500000000000001,0.0006084741812784716
+30,-200,0.9,0.000632346315679109
+30,-200,0.9500000000000001,0.0006594014013331652
+30,-200,1.0,0.0006896394382406392
+30,-150,0.0,0.0006862253816156855
+30,-150,0.05,0.0006561370379602285
+30,-150,0.1,0.0006292158883737669
+30,-150,0.15000000000000002,0.0006054619328563008
+30,-150,0.2,0.0005848751714078304
+30,-150,0.25,0.0005674556040283553
+30,-150,0.30000000000000004,0.0005532032307178757
+30,-150,0.35000000000000003,0.0005421180514763915
+30,-150,0.4,0.0005342000663039029
+30,-150,0.45,0.0005294492752004096
+30,-150,0.5,0.000527865678165912
+30,-150,0.55,0.0005294492752004097
+30,-150,0.6000000000000001,0.0005342000663039029
+30,-150,0.65,0.0005421180514763915
+30,-150,0.7000000000000001,0.0005532032307178757
+30,-150,0.75,0.0005674556040283553
+30,-150,0.8,0.0005848751714078304
+30,-150,0.8500000000000001,0.0006054619328563008
+30,-150,0.9,0.0006292158883737669
+30,-150,0.9500000000000001,0.0006561370379602286
+30,-150,1.0,0.0006862253816156855
+30,-100,0.0,0.000682811324990732
+30,-100,0.05,0.000652872674587292
+30,-100,0.1,0.0006260854610684248
+30,-100,0.15000000000000002,0.0006024496844341304
+30,-100,0.2,0.0005819653446844084
+30,-100,0.25,0.000564632441819259
+30,-100,0.30000000000000004,0.0005504509758386824
+30,-100,0.35000000000000003,0.0005394209467426782
+30,-100,0.4,0.0005315423545312467
+30,-100,0.45,0.0005268151992043877
+30,-100,0.5,0.0005252394807621015
+30,-100,0.55,0.0005268151992043879
+30,-100,0.6000000000000001,0.0005315423545312467
+30,-100,0.65,0.0005394209467426782
+30,-100,0.7000000000000001,0.0005504509758386824
+30,-100,0.75,0.000564632441819259
+30,-100,0.8,0.0005819653446844084
+30,-100,0.8500000000000001,0.0006024496844341304
+30,-100,0.9,0.0006260854610684248
+30,-100,0.9500000000000001,0.0006528726745872923
+30,-100,1.0,0.000682811324990732
+30,-50,0.0,0.0006793972683657783
+30,-50,0.05,0.0006496083112143557
+30,-50,0.1,0.0006229550337630827
+30,-50,0.15000000000000002,0.0005994374360119597
+30,-50,0.2,0.0005790555179609864
+30,-50,0.25,0.0005618092796101627
+30,-50,0.30000000000000004,0.000547698720959489
+30,-50,0.35000000000000003,0.0005367238420089647
+30,-50,0.4,0.0005288846427585905
+30,-50,0.45,0.0005241811232083658
+30,-50,0.5,0.0005226132833582909
+30,-50,0.55,0.0005241811232083659
+30,-50,0.6000000000000001,0.0005288846427585905
+30,-50,0.65,0.0005367238420089647
+30,-50,0.7000000000000001,0.000547698720959489
+30,-50,0.75,0.0005618092796101627
+30,-50,0.8,0.0005790555179609864
+30,-50,0.8500000000000001,0.0005994374360119597
+30,-50,0.9,0.0006229550337630827
+30,-50,0.9500000000000001,0.0006496083112143558
+30,-50,1.0,0.0006793972683657783
+30,0,0.0,0.0006759832117408246
+30,0,0.05,0.0006463439478414191
+30,0,0.1,0.0006198246064577406
+30,0,0.15000000000000002,0.000596425187589789
+30,0,0.2,0.0005761456912375644
+30,0,0.25,0.0005589861174010664
+30,0,0.30000000000000004,0.0005449464660802956
+30,0,0.35000000000000003,0.0005340267372752514
+30,0,0.4,0.0005262269309859343
+30,0,0.45,0.0005215470472123439
+30,0,0.5,0.0005199870859544805
+30,0,0.55,0.000521547047212344
+30,0,0.6000000000000001,0.0005262269309859343
+30,0,0.65,0.0005340267372752514
+30,0,0.7000000000000001,0.0005449464660802956
+30,0,0.75,0.0005589861174010664
+30,0,0.8,0.0005761456912375644
+30,0,0.8500000000000001,0.000596425187589789
+30,0,0.9,0.0006198246064577406
+30,0,0.9500000000000001,0.0006463439478414192
+30,0,1.0,0.0006759832117408246
+30,50,0.0,0.0006793972683657783
+30,50,0.05,0.0006496083112143557
+30,50,0.1,0.0006229550337630827
+30,50,0.15000000000000002,0.0005994374360119597
+30,50,0.2,0.0005790555179609864
+30,50,0.25,0.0005618092796101627
+30,50,0.30000000000000004,0.000547698720959489
+30,50,0.35000000000000003,0.0005367238420089647
+30,50,0.4,0.0005288846427585905
+30,50,0.45,0.0005241811232083658
+30,50,0.5,0.0005226132833582909
+30,50,0.55,0.0005241811232083659
+30,50,0.6000000000000001,0.0005288846427585905
+30,50,0.65,0.0005367238420089647
+30,50,0.7000000000000001,0.000547698720959489
+30,50,0.75,0.0005618092796101627
+30,50,0.8,0.0005790555179609864
+30,50,0.8500000000000001,0.0005994374360119597
+30,50,0.9,0.0006229550337630827
+30,50,0.9500000000000001,0.0006496083112143558
+30,50,1.0,0.0006793972683657783
+30,100,0.0,0.000682811324990732
+30,100,0.05,0.000652872674587292
+30,100,0.1,0.0006260854610684248
+30,100,0.15000000000000002,0.0006024496844341304
+30,100,0.2,0.0005819653446844084
+30,100,0.25,0.000564632441819259
+30,100,0.30000000000000004,0.0005504509758386824
+30,100,0.35000000000000003,0.0005394209467426782
+30,100,0.4,0.0005315423545312467
+30,100,0.45,0.0005268151992043877
+30,100,0.5,0.0005252394807621015
+30,100,0.55,0.0005268151992043879
+30,100,0.6000000000000001,0.0005315423545312467
+30,100,0.65,0.0005394209467426782
+30,100,0.7000000000000001,0.0005504509758386824
+30,100,0.75,0.000564632441819259
+30,100,0.8,0.0005819653446844084
+30,100,0.8500000000000001,0.0006024496844341304
+30,100,0.9,0.0006260854610684248
+30,100,0.9500000000000001,0.0006528726745872923
+30,100,1.0,0.000682811324990732
+30,150,0.0,0.0006862253816156855
+30,150,0.05,0.0006561370379602285
+30,150,0.1,0.0006292158883737669
+30,150,0.15000000000000002,0.0006054619328563008
+30,150,0.2,0.0005848751714078304
+30,150,0.25,0.0005674556040283553
+30,150,0.30000000000000004,0.0005532032307178757
+30,150,0.35000000000000003,0.0005421180514763915
+30,150,0.4,0.0005342000663039029
+30,150,0.45,0.0005294492752004096
+30,150,0.5,0.000527865678165912
+30,150,0.55,0.0005294492752004097
+30,150,0.6000000000000001,0.0005342000663039029
+30,150,0.65,0.0005421180514763915
+30,150,0.7000000000000001,0.0005532032307178757
+30,150,0.75,0.0005674556040283553
+30,150,0.8,0.0005848751714078304
+30,150,0.8500000000000001,0.0006054619328563008
+30,150,0.9,0.0006292158883737669
+30,150,0.9500000000000001,0.0006561370379602286
+30,150,1.0,0.0006862253816156855
+30,200,0.0,0.0006896394382406392
+30,200,0.05,0.000659401401333165
+30,200,0.1,0.000632346315679109
+30,200,0.15000000000000002,0.0006084741812784716
+30,200,0.2,0.0005877849981312526
+30,200,0.25,0.0005702787662374517
+30,200,0.30000000000000004,0.0005559554855970693
+30,200,0.35000000000000003,0.0005448151562101049
+30,200,0.4,0.0005368577780765592
+30,200,0.45,0.0005320833511964317
+30,200,0.5,0.0005304918755697225
+30,200,0.55,0.0005320833511964318
+30,200,0.6000000000000001,0.0005368577780765592
+30,200,0.65,0.0005448151562101049
+30,200,0.7000000000000001,0.0005559554855970693
+30,200,0.75,0.0005702787662374517
+30,200,0.8,0.0005877849981312526
+30,200,0.8500000000000001,0.0006084741812784716
+30,200,0.9,0.000632346315679109
+30,200,0.9500000000000001,0.0006594014013331652
+30,200,1.0,0.0006896394382406392
+30,250,0.0,0.0006930534948655928
+30,250,0.05,0.0006626657647061014
+30,250,0.1,0.0006354767429844513
+30,250,0.15000000000000002,0.0006114864297006422
+30,250,0.2,0.0005906948248546745
+30,250,0.25,0.000573101928446548
+30,250,0.30000000000000004,0.0005587077404762625
+30,250,0.35000000000000003,0.0005475122609438183
+30,250,0.4,0.0005395154898492153
+30,250,0.45,0.0005347174271924535
+30,250,0.5,0.0005331180729735329
+30,250,0.55,0.0005347174271924537
+30,250,0.6000000000000001,0.0005395154898492153
+30,250,0.65,0.0005475122609438183
+30,250,0.7000000000000001,0.0005587077404762625
+30,250,0.75,0.000573101928446548
+30,250,0.8,0.0005906948248546745
+30,250,0.8500000000000001,0.0006114864297006422
+30,250,0.9,0.0006354767429844513
+30,250,0.9500000000000001,0.0006626657647061015
+30,250,1.0,0.0006930534948655928
+30,300,0.0,0.0006964675514905467
+30,300,0.05,0.000665930128079038
+30,300,0.1,0.0006386071702897935
+30,300,0.15000000000000002,0.000614498678122813
+30,300,0.2,0.0005936046515780967
+30,300,0.25,0.0005759250906556443
+30,300,0.30000000000000004,0.0005614599953554561
+30,300,0.35000000000000003,0.0005502093656775317
+30,300,0.4,0.0005421732016218717
+30,300,0.45,0.0005373515031884755
+30,300,0.5,0.0005357442703773435
+30,300,0.55,0.0005373515031884756
+30,300,0.6000000000000001,0.0005421732016218717
+30,300,0.65,0.0005502093656775317
+30,300,0.7000000000000001,0.0005614599953554561
+30,300,0.75,0.0005759250906556443
+30,300,0.8,0.0005936046515780967
+30,300,0.8500000000000001,0.000614498678122813
+30,300,0.9,0.0006386071702897935
+30,300,0.9500000000000001,0.0006659301280790381
+30,300,1.0,0.0006964675514905467
+30,350,0.0,0.0006998816081155002
+30,350,0.05,0.0006691944914519744
+30,350,0.1,0.0006417375975951355
+30,350,0.15000000000000002,0.0006175109265449836
+30,350,0.2,0.0005965144783015185
+30,350,0.25,0.0005787482528647406
+30,350,0.30000000000000004,0.0005642122502346494
+30,350,0.35000000000000003,0.000552906470411245
+30,350,0.4,0.0005448309133945278
+30,350,0.45,0.0005399855791844974
+30,350,0.5,0.000538370467781154
+30,350,0.55,0.0005399855791844976
+30,350,0.6000000000000001,0.0005448309133945278
+30,350,0.65,0.000552906470411245
+30,350,0.7000000000000001,0.0005642122502346494
+30,350,0.75,0.0005787482528647406
+30,350,0.8,0.0005965144783015185
+30,350,0.8500000000000001,0.0006175109265449836
+30,350,0.9,0.0006417375975951355
+30,350,0.9500000000000001,0.0006691944914519745
+30,350,1.0,0.0006998816081155002
+30,400,0.0,0.0007032956647404539
+30,400,0.05,0.000672458854824911
+30,400,0.1,0.0006448680249004777
+30,400,0.15000000000000002,0.0006205231749671544
+30,400,0.2,0.0005994243050249407
+30,400,0.25,0.0005815714150738369
+30,400,0.30000000000000004,0.0005669645051138429
+30,400,0.35000000000000003,0.0005556035751449586
+30,400,0.4,0.0005474886251671841
+30,400,0.45,0.0005426196551805195
+30,400,0.5,0.0005409966651849646
+30,400,0.55,0.0005426196551805196
+30,400,0.6000000000000001,0.0005474886251671841
+30,400,0.65,0.0005556035751449586
+30,400,0.7000000000000001,0.0005669645051138429
+30,400,0.75,0.0005815714150738369
+30,400,0.8,0.0005994243050249407
+30,400,0.8500000000000001,0.0006205231749671544
+30,400,0.9,0.0006448680249004777
+30,400,0.9500000000000001,0.0006724588548249111
+30,400,1.0,0.0007032956647404539
+30,450,0.0,0.0007067097213654075
+30,450,0.05,0.0006757232181978472
+30,450,0.1,0.0006479984522058197
+30,450,0.15000000000000002,0.0006235354233893248
+30,450,0.2,0.0006023341317483627
+30,450,0.25,0.0005843945772829331
+30,450,0.30000000000000004,0.0005697167599930362
+30,450,0.35000000000000003,0.0005583006798786719
+30,450,0.4,0.0005501463369398403
+30,450,0.45,0.0005452537311765413
+30,450,0.5,0.000543622862588775
+30,450,0.55,0.0005452537311765414
+30,450,0.6000000000000001,0.0005501463369398403
+30,450,0.65,0.0005583006798786719
+30,450,0.7000000000000001,0.0005697167599930362
+30,450,0.75,0.0005843945772829331
+30,450,0.8,0.0006023341317483627
+30,450,0.8500000000000001,0.0006235354233893248
+30,450,0.9,0.0006479984522058197
+30,450,0.9500000000000001,0.0006757232181978473
+30,450,1.0,0.0007067097213654075
+30,500,0.0,0.0007101237779903613
+30,500,0.05,0.0006789875815707838
+30,500,0.1,0.0006511288795111619
+30,500,0.15000000000000002,0.0006265476718114956
+30,500,0.2,0.0006052439584717848
+30,500,0.25,0.0005872177394920295
+30,500,0.30000000000000004,0.0005724690148722297
+30,500,0.35000000000000003,0.0005609977846123853
+30,500,0.4,0.0005528040487124967
+30,500,0.45,0.0005478878071725633
+30,500,0.5,0.0005462490599925856
+30,500,0.55,0.0005478878071725634
+30,500,0.6000000000000001,0.0005528040487124967
+30,500,0.65,0.0005609977846123853
+30,500,0.7000000000000001,0.0005724690148722297
+30,500,0.75,0.0005872177394920295
+30,500,0.8,0.0006052439584717848
+30,500,0.8500000000000001,0.0006265476718114956
+30,500,0.9,0.0006511288795111619
+30,500,0.9500000000000001,0.0006789875815707839
+30,500,1.0,0.0007101237779903613
+30,550,0.0,0.0007135378346153148
+30,550,0.05,0.0006822519449437202
+30,550,0.1,0.000654259306816504
+30,550,0.15000000000000002,0.0006295599202336662
+30,550,0.2,0.0006081537851952068
+30,550,0.25,0.0005900409017011257
+30,550,0.30000000000000004,0.0005752212697514231
+30,550,0.35000000000000003,0.0005636948893460986
+30,550,0.4,0.0005554617604851528
+30,550,0.45,0.0005505218831685852
+30,550,0.5,0.000548875257396396
+30,550,0.55,0.0005505218831685854
+30,550,0.6000000000000001,0.0005554617604851528
+30,550,0.65,0.0005636948893460986
+30,550,0.7000000000000001,0.0005752212697514231
+30,550,0.75,0.0005900409017011257
+30,550,0.8,0.0006081537851952068
+30,550,0.8500000000000001,0.0006295599202336662
+30,550,0.9,0.000654259306816504
+30,550,0.9500000000000001,0.0006822519449437203
+30,550,1.0,0.0007135378346153148
+30,600,0.0,0.0007169518912402686
+30,600,0.05,0.0006855163083166568
+30,600,0.1,0.0006573897341218462
+30,600,0.15000000000000002,0.0006325721686558369
+30,600,0.2,0.000611063611918629
+30,600,0.25,0.0005928640639102221
+30,600,0.30000000000000004,0.0005779735246306166
+30,600,0.35000000000000003,0.0005663919940798121
+30,600,0.4,0.0005581194722578091
+30,600,0.45,0.0005531559591646072
+30,600,0.5,0.0005515014548002065
+30,600,0.55,0.0005531559591646074
+30,600,0.6000000000000001,0.0005581194722578091
+30,600,0.65,0.0005663919940798121
+30,600,0.7000000000000001,0.0005779735246306166
+30,600,0.75,0.0005928640639102221
+30,600,0.8,0.000611063611918629
+30,600,0.8500000000000001,0.0006325721686558369
+30,600,0.9,0.0006573897341218462
+30,600,0.9500000000000001,0.0006855163083166569
+30,600,1.0,0.0007169518912402686
+30,650,0.0,0.0007203659478652222
+30,650,0.05,0.0006887806716895931
+30,650,0.1,0.0006605201614271882
+30,650,0.15000000000000002,0.0006355844170780075
+30,650,0.2,0.0006139734386420508
+30,650,0.25,0.0005956872261193183
+30,650,0.30000000000000004,0.0005807257795098099
+30,650,0.35000000000000003,0.0005690890988135254
+30,650,0.4,0.0005607771840304653
+30,650,0.45,0.000555790035160629
+30,650,0.5,0.000554127652204017
+30,650,0.55,0.0005557900351606292
+30,650,0.6000000000000001,0.0005607771840304653
+30,650,0.65,0.0005690890988135254
+30,650,0.7000000000000001,0.0005807257795098099
+30,650,0.75,0.0005956872261193183
+30,650,0.8,0.0006139734386420508
+30,650,0.8500000000000001,0.0006355844170780075
+30,650,0.9,0.0006605201614271882
+30,650,0.9500000000000001,0.0006887806716895932
+30,650,1.0,0.0007203659478652222
+30,700,0.0,0.000723780004490176
+30,700,0.05,0.0006920450350625297
+30,700,0.1,0.0006636505887325304
+30,700,0.15000000000000002,0.0006385966655001781
+30,700,0.2,0.000616883265365473
+30,700,0.25,0.0005985103883284147
+30,700,0.30000000000000004,0.0005834780343890034
+30,700,0.35000000000000003,0.0005717862035472389
+30,700,0.4,0.0005634348958031215
+30,700,0.45,0.000558424111156651
+30,700,0.5,0.0005567538496078276
+30,700,0.55,0.0005584241111566511
+30,700,0.6000000000000001,0.0005634348958031215
+30,700,0.65,0.0005717862035472389
+30,700,0.7000000000000001,0.0005834780343890034
+30,700,0.75,0.0005985103883284147
+30,700,0.8,0.000616883265365473
+30,700,0.8500000000000001,0.0006385966655001781
+30,700,0.9,0.0006636505887325304
+30,700,0.9500000000000001,0.0006920450350625298
+30,700,1.0,0.000723780004490176
+40,-400,0.0,0.0005458670288116651
+40,-400,0.05,0.0005219328590868458
+40,-400,0.1,0.0005005180756488497
+40,-400,0.15000000000000002,0.0004816226784976768
+40,-400,0.2,0.0004652466676333269
+40,-400,0.25,0.00045139004305579995
+40,-400,0.30000000000000004,0.00044005280476509616
+40,-400,0.35000000000000003,0.00043123495276121537
+40,-400,0.4,0.00042493648704415777
+40,-400,0.45,0.00042115740761392316
+40,-400,0.5,0.0004198977144705116
+40,-400,0.55,0.0004211574076139232
+40,-400,0.6000000000000001,0.00042493648704415777
+40,-400,0.65,0.00043123495276121537
+40,-400,0.7000000000000001,0.00044005280476509616
+40,-400,0.75,0.00045139004305579995
+40,-400,0.8,0.0004652466676333269
+40,-400,0.8500000000000001,0.0004816226784976768
+40,-400,0.9,0.0005005180756488497
+40,-400,0.9500000000000001,0.000521932859086846
+40,-400,1.0,0.0005458670288116651
+40,-350,0.0,0.0005432171888659774
+40,-350,0.05,0.0005193992044310844
+40,-350,0.1,0.0004980883762524961
+40,-350,0.15000000000000002,0.0004792847043302123
+40,-350,0.2,0.000462988188664233
+40,-350,0.25,0.00044919882925455813
+40,-350,0.30000000000000004,0.0004379166261011879
+40,-350,0.35000000000000003,0.00042914157920412207
+40,-350,0.4,0.0004228736885633608
+40,-350,0.45,0.00041911295417890404
+40,-350,0.5,0.0004178593760507518
+40,-350,0.55,0.0004191129541789041
+40,-350,0.6000000000000001,0.0004228736885633608
+40,-350,0.65,0.00042914157920412207
+40,-350,0.7000000000000001,0.0004379166261011879
+40,-350,0.75,0.00044919882925455813
+40,-350,0.8,0.000462988188664233
+40,-350,0.8500000000000001,0.0004792847043302123
+40,-350,0.9,0.0004980883762524961
+40,-350,0.9500000000000001,0.0005193992044310845
+40,-350,1.0,0.0005432171888659774
+40,-300,0.0,0.0005405673489202897
+40,-300,0.05,0.0005168655497753231
+40,-300,0.1,0.0004956586768561425
+40,-300,0.15000000000000002,0.0004769467301627478
+40,-300,0.2,0.0004607297096951392
+40,-300,0.25,0.00044700761545331643
+40,-300,0.30000000000000004,0.0004357804474372797
+40,-300,0.35000000000000003,0.0004270482056470288
+40,-300,0.4,0.00042081089008256395
+40,-300,0.45,0.00041706850074388504
+40,-300,0.5,0.0004158210376309921
+40,-300,0.55,0.00041706850074388514
+40,-300,0.6000000000000001,0.00042081089008256395
+40,-300,0.65,0.0004270482056470288
+40,-300,0.7000000000000001,0.0004357804474372797
+40,-300,0.75,0.00044700761545331643
+40,-300,0.8,0.0004607297096951392
+40,-300,0.8500000000000001,0.0004769467301627478
+40,-300,0.9,0.0004956586768561425
+40,-300,0.9500000000000001,0.0005168655497753232
+40,-300,1.0,0.0005405673489202897
+40,-250,0.0,0.000537917508974602
+40,-250,0.05,0.0005143318951195616
+40,-250,0.1,0.0004932289774597887
+40,-250,0.15000000000000002,0.0004746087559952833
+40,-250,0.2,0.0004584712307260453
+40,-250,0.25,0.0004448164016520746
+40,-250,0.30000000000000004,0.0004336442687733714
+40,-250,0.35000000000000003,0.0004249548320899355
+40,-250,0.4,0.00041874809160176706
+40,-250,0.45,0.0004150240473088659
+40,-250,0.5,0.0004137826992112322
+40,-250,0.55,0.00041502404730886603
+40,-250,0.6000000000000001,0.00041874809160176706
+40,-250,0.65,0.0004249548320899355
+40,-250,0.7000000000000001,0.0004336442687733714
+40,-250,0.75,0.0004448164016520746
+40,-250,0.8,0.0004584712307260453
+40,-250,0.8500000000000001,0.0004746087559952833
+40,-250,0.9,0.0004932289774597887
+40,-250,0.9500000000000001,0.0005143318951195617
+40,-250,1.0,0.000537917508974602
+40,-200,0.0,0.0005352676690289143
+40,-200,0.05,0.0005117982404638003
+40,-200,0.1,0.0004907992780634352
+40,-200,0.15000000000000002,0.00047227078182781896
+40,-200,0.2,0.0004562127517569516
+40,-200,0.25,0.00044262518785083296
+40,-200,0.30000000000000004,0.0004315080901094633
+40,-200,0.35000000000000003,0.00042286145853284225
+40,-200,0.4,0.00041668529312097023
+40,-200,0.45,0.00041297959387384697
+40,-200,0.5,0.0004117443607914725
+40,-200,0.55,0.000412979593873847
+40,-200,0.6000000000000001,0.00041668529312097023
+40,-200,0.65,0.00042286145853284225
+40,-200,0.7000000000000001,0.0004315080901094633
+40,-200,0.75,0.00044262518785083296
+40,-200,0.8,0.0004562127517569516
+40,-200,0.8500000000000001,0.00047227078182781896
+40,-200,0.9,0.0004907992780634352
+40,-200,0.9500000000000001,0.0005117982404638004
+40,-200,1.0,0.0005352676690289143
+40,-150,0.0,0.0005326178290832265
+40,-150,0.05,0.0005092645858080388
+40,-150,0.1,0.0004883695786670815
+40,-150,0.15000000000000002,0.00046993280766035445
+40,-150,0.2,0.00045395427278785763
+40,-150,0.25,0.00044043397404959115
+40,-150,0.30000000000000004,0.000429371911445555
+40,-150,0.35000000000000003,0.00042076808497574895
+40,-150,0.4,0.0004146224946401733
+40,-150,0.45,0.00041093514043882785
+40,-150,0.5,0.00040970602237171274
+40,-150,0.55,0.0004109351404388279
+40,-150,0.6000000000000001,0.0004146224946401733
+40,-150,0.65,0.00042076808497574895
+40,-150,0.7000000000000001,0.000429371911445555
+40,-150,0.75,0.00044043397404959115
+40,-150,0.8,0.00045395427278785763
+40,-150,0.8500000000000001,0.00046993280766035445
+40,-150,0.9,0.0004883695786670815
+40,-150,0.9500000000000001,0.000509264585808039
+40,-150,1.0,0.0005326178290832265
+40,-100,0.0,0.0005299679891375389
+40,-100,0.05,0.0005067309311522775
+40,-100,0.1,0.0004859398792707279
+40,-100,0.15000000000000002,0.00046759483349289005
+40,-100,0.2,0.00045169579381876393
+40,-100,0.25,0.00043824276024834945
+40,-100,0.30000000000000004,0.00042723573278164676
+40,-100,0.35000000000000003,0.00041867471141865566
+40,-100,0.4,0.00041255969615937646
+40,-100,0.45,0.00040889068700380885
+40,-100,0.5,0.000407667683951953
+40,-100,0.55,0.0004088906870038089
+40,-100,0.6000000000000001,0.00041255969615937646
+40,-100,0.65,0.00041867471141865566
+40,-100,0.7000000000000001,0.00042723573278164676
+40,-100,0.75,0.00043824276024834945
+40,-100,0.8,0.00045169579381876393
+40,-100,0.8500000000000001,0.00046759483349289005
+40,-100,0.9,0.0004859398792707279
+40,-100,0.9500000000000001,0.0005067309311522776
+40,-100,1.0,0.0005299679891375389
+40,-50,0.0,0.0005273181491918512
+40,-50,0.05,0.0005041972764965161
+40,-50,0.1,0.0004835101798743742
+40,-50,0.15000000000000002,0.0004652568593254256
+40,-50,0.2,0.0004494373148496701
+40,-50,0.25,0.0004360515464471077
+40,-50,0.30000000000000004,0.0004250995541177386
+40,-50,0.35000000000000003,0.0004165813378615624
+40,-50,0.4,0.0004104968976785795
+40,-50,0.45,0.0004068462335687898
+40,-50,0.5,0.0004056293455321932
+40,-50,0.55,0.0004068462335687899
+40,-50,0.6000000000000001,0.0004104968976785795
+40,-50,0.65,0.0004165813378615624
+40,-50,0.7000000000000001,0.0004250995541177386
+40,-50,0.75,0.0004360515464471077
+40,-50,0.8,0.0004494373148496701
+40,-50,0.8500000000000001,0.0004652568593254256
+40,-50,0.9,0.0004835101798743742
+40,-50,0.9500000000000001,0.0005041972764965162
+40,-50,1.0,0.0005273181491918512
+40,0,0.0,0.0005246683092461636
+40,0,0.05,0.0005016636218407547
+40,0,0.1,0.0004810804804780206
+40,0,0.15000000000000002,0.00046291888515796113
+40,0,0.2,0.00044717883588057624
+40,0,0.25,0.000433860332645866
+40,0,0.30000000000000004,0.0004229633754538303
+40,0,0.35000000000000003,0.00041448796430446907
+40,0,0.4,0.00040843409919778264
+40,0,0.45,0.0004048017801337708
+40,0,0.5,0.0004035910071124335
+40,0,0.55,0.00040480178013377083
+40,0,0.6000000000000001,0.00040843409919778264
+40,0,0.65,0.00041448796430446907
+40,0,0.7000000000000001,0.0004229633754538303
+40,0,0.75,0.000433860332645866
+40,0,0.8,0.00044717883588057624
+40,0,0.8500000000000001,0.00046291888515796113
+40,0,0.9,0.0004810804804780206
+40,0,0.9500000000000001,0.0005016636218407548
+40,0,1.0,0.0005246683092461636
+40,50,0.0,0.0005273181491918512
+40,50,0.05,0.0005041972764965161
+40,50,0.1,0.0004835101798743742
+40,50,0.15000000000000002,0.0004652568593254256
+40,50,0.2,0.0004494373148496701
+40,50,0.25,0.0004360515464471077
+40,50,0.30000000000000004,0.0004250995541177386
+40,50,0.35000000000000003,0.0004165813378615624
+40,50,0.4,0.0004104968976785795
+40,50,0.45,0.0004068462335687898
+40,50,0.5,0.0004056293455321932
+40,50,0.55,0.0004068462335687899
+40,50,0.6000000000000001,0.0004104968976785795
+40,50,0.65,0.0004165813378615624
+40,50,0.7000000000000001,0.0004250995541177386
+40,50,0.75,0.0004360515464471077
+40,50,0.8,0.0004494373148496701
+40,50,0.8500000000000001,0.0004652568593254256
+40,50,0.9,0.0004835101798743742
+40,50,0.9500000000000001,0.0005041972764965162
+40,50,1.0,0.0005273181491918512
+40,100,0.0,0.0005299679891375389
+40,100,0.05,0.0005067309311522775
+40,100,0.1,0.0004859398792707279
+40,100,0.15000000000000002,0.00046759483349289005
+40,100,0.2,0.00045169579381876393
+40,100,0.25,0.00043824276024834945
+40,100,0.30000000000000004,0.00042723573278164676
+40,100,0.35000000000000003,0.00041867471141865566
+40,100,0.4,0.00041255969615937646
+40,100,0.45,0.00040889068700380885
+40,100,0.5,0.000407667683951953
+40,100,0.55,0.0004088906870038089
+40,100,0.6000000000000001,0.00041255969615937646
+40,100,0.65,0.00041867471141865566
+40,100,0.7000000000000001,0.00042723573278164676
+40,100,0.75,0.00043824276024834945
+40,100,0.8,0.00045169579381876393
+40,100,0.8500000000000001,0.00046759483349289005
+40,100,0.9,0.0004859398792707279
+40,100,0.9500000000000001,0.0005067309311522776
+40,100,1.0,0.0005299679891375389
+40,150,0.0,0.0005326178290832265
+40,150,0.05,0.0005092645858080388
+40,150,0.1,0.0004883695786670815
+40,150,0.15000000000000002,0.00046993280766035445
+40,150,0.2,0.00045395427278785763
+40,150,0.25,0.00044043397404959115
+40,150,0.30000000000000004,0.000429371911445555
+40,150,0.35000000000000003,0.00042076808497574895
+40,150,0.4,0.0004146224946401733
+40,150,0.45,0.00041093514043882785
+40,150,0.5,0.00040970602237171274
+40,150,0.55,0.0004109351404388279
+40,150,0.6000000000000001,0.0004146224946401733
+40,150,0.65,0.00042076808497574895
+40,150,0.7000000000000001,0.000429371911445555
+40,150,0.75,0.00044043397404959115
+40,150,0.8,0.00045395427278785763
+40,150,0.8500000000000001,0.00046993280766035445
+40,150,0.9,0.0004883695786670815
+40,150,0.9500000000000001,0.000509264585808039
+40,150,1.0,0.0005326178290832265
+40,200,0.0,0.0005352676690289143
+40,200,0.05,0.0005117982404638003
+40,200,0.1,0.0004907992780634352
+40,200,0.15000000000000002,0.00047227078182781896
+40,200,0.2,0.0004562127517569516
+40,200,0.25,0.00044262518785083296
+40,200,0.30000000000000004,0.0004315080901094633
+40,200,0.35000000000000003,0.00042286145853284225
+40,200,0.4,0.00041668529312097023
+40,200,0.45,0.00041297959387384697
+40,200,0.5,0.0004117443607914725
+40,200,0.55,0.000412979593873847
+40,200,0.6000000000000001,0.00041668529312097023
+40,200,0.65,0.00042286145853284225
+40,200,0.7000000000000001,0.0004315080901094633
+40,200,0.75,0.00044262518785083296
+40,200,0.8,0.0004562127517569516
+40,200,0.8500000000000001,0.00047227078182781896
+40,200,0.9,0.0004907992780634352
+40,200,0.9500000000000001,0.0005117982404638004
+40,200,1.0,0.0005352676690289143
+40,250,0.0,0.000537917508974602
+40,250,0.05,0.0005143318951195616
+40,250,0.1,0.0004932289774597887
+40,250,0.15000000000000002,0.0004746087559952833
+40,250,0.2,0.0004584712307260453
+40,250,0.25,0.0004448164016520746
+40,250,0.30000000000000004,0.0004336442687733714
+40,250,0.35000000000000003,0.0004249548320899355
+40,250,0.4,0.00041874809160176706
+40,250,0.45,0.0004150240473088659
+40,250,0.5,0.0004137826992112322
+40,250,0.55,0.00041502404730886603
+40,250,0.6000000000000001,0.00041874809160176706
+40,250,0.65,0.0004249548320899355
+40,250,0.7000000000000001,0.0004336442687733714
+40,250,0.75,0.0004448164016520746
+40,250,0.8,0.0004584712307260453
+40,250,0.8500000000000001,0.0004746087559952833
+40,250,0.9,0.0004932289774597887
+40,250,0.9500000000000001,0.0005143318951195617
+40,250,1.0,0.000537917508974602
+40,300,0.0,0.0005405673489202897
+40,300,0.05,0.0005168655497753231
+40,300,0.1,0.0004956586768561425
+40,300,0.15000000000000002,0.0004769467301627478
+40,300,0.2,0.0004607297096951392
+40,300,0.25,0.00044700761545331643
+40,300,0.30000000000000004,0.0004357804474372797
+40,300,0.35000000000000003,0.0004270482056470288
+40,300,0.4,0.00042081089008256395
+40,300,0.45,0.00041706850074388504
+40,300,0.5,0.0004158210376309921
+40,300,0.55,0.00041706850074388514
+40,300,0.6000000000000001,0.00042081089008256395
+40,300,0.65,0.0004270482056470288
+40,300,0.7000000000000001,0.0004357804474372797
+40,300,0.75,0.00044700761545331643
+40,300,0.8,0.0004607297096951392
+40,300,0.8500000000000001,0.0004769467301627478
+40,300,0.9,0.0004956586768561425
+40,300,0.9500000000000001,0.0005168655497753232
+40,300,1.0,0.0005405673489202897
+40,350,0.0,0.0005432171888659774
+40,350,0.05,0.0005193992044310844
+40,350,0.1,0.0004980883762524961
+40,350,0.15000000000000002,0.0004792847043302123
+40,350,0.2,0.000462988188664233
+40,350,0.25,0.00044919882925455813
+40,350,0.30000000000000004,0.0004379166261011879
+40,350,0.35000000000000003,0.00042914157920412207
+40,350,0.4,0.0004228736885633608
+40,350,0.45,0.00041911295417890404
+40,350,0.5,0.0004178593760507518
+40,350,0.55,0.0004191129541789041
+40,350,0.6000000000000001,0.0004228736885633608
+40,350,0.65,0.00042914157920412207
+40,350,0.7000000000000001,0.0004379166261011879
+40,350,0.75,0.00044919882925455813
+40,350,0.8,0.000462988188664233
+40,350,0.8500000000000001,0.0004792847043302123
+40,350,0.9,0.0004980883762524961
+40,350,0.9500000000000001,0.0005193992044310845
+40,350,1.0,0.0005432171888659774
+40,400,0.0,0.0005458670288116651
+40,400,0.05,0.0005219328590868458
+40,400,0.1,0.0005005180756488497
+40,400,0.15000000000000002,0.0004816226784976768
+40,400,0.2,0.0004652466676333269
+40,400,0.25,0.00045139004305579995
+40,400,0.30000000000000004,0.00044005280476509616
+40,400,0.35000000000000003,0.00043123495276121537
+40,400,0.4,0.00042493648704415777
+40,400,0.45,0.00042115740761392316
+40,400,0.5,0.0004198977144705116
+40,400,0.55,0.0004211574076139232
+40,400,0.6000000000000001,0.00042493648704415777
+40,400,0.65,0.00043123495276121537
+40,400,0.7000000000000001,0.00044005280476509616
+40,400,0.75,0.00045139004305579995
+40,400,0.8,0.0004652466676333269
+40,400,0.8500000000000001,0.0004816226784976768
+40,400,0.9,0.0005005180756488497
+40,400,0.9500000000000001,0.000521932859086846
+40,400,1.0,0.0005458670288116651
+40,450,0.0,0.0005485168687573527
+40,450,0.05,0.0005244665137426072
+40,450,0.1,0.0005029477750452034
+40,450,0.15000000000000002,0.0004839606526651412
+40,450,0.2,0.00046750514660242064
+40,450,0.25,0.0004535812568570416
+40,450,0.30000000000000004,0.0004421889834290044
+40,450,0.35000000000000003,0.00043332832631830855
+40,450,0.4,0.0004269992855249546
+40,450,0.45,0.00042320186104894216
+40,450,0.5,0.00042193605289027135
+40,450,0.55,0.0004232018610489422
+40,450,0.6000000000000001,0.0004269992855249546
+40,450,0.65,0.00043332832631830855
+40,450,0.7000000000000001,0.0004421889834290044
+40,450,0.75,0.0004535812568570416
+40,450,0.8,0.00046750514660242064
+40,450,0.8500000000000001,0.0004839606526651412
+40,450,0.9,0.0005029477750452034
+40,450,0.9500000000000001,0.0005244665137426073
+40,450,1.0,0.0005485168687573527
+40,500,0.0,0.0005511667087030404
+40,500,0.05,0.0005270001683983686
+40,500,0.1,0.000505377474441557
+40,500,0.15000000000000002,0.0004862986268326057
+40,500,0.2,0.0004697636255715145
+40,500,0.25,0.0004557724706582834
+40,500,0.30000000000000004,0.00044432516209291263
+40,500,0.35000000000000003,0.0004354216998754019
+40,500,0.4,0.00042906208400575154
+40,500,0.45,0.0004252463144839613
+40,500,0.5,0.0004239743913100311
+40,500,0.55,0.00042524631448396133
+40,500,0.6000000000000001,0.00042906208400575154
+40,500,0.65,0.0004354216998754019
+40,500,0.7000000000000001,0.00044432516209291263
+40,500,0.75,0.0004557724706582834
+40,500,0.8,0.0004697636255715145
+40,500,0.8500000000000001,0.0004862986268326057
+40,500,0.9,0.000505377474441557
+40,500,0.9500000000000001,0.0005270001683983687
+40,500,1.0,0.0005511667087030404
+40,550,0.0,0.0005538165486487281
+40,550,0.05,0.00052953382305413
+40,550,0.1,0.0005078071738379106
+40,550,0.15000000000000002,0.0004886366010000701
+40,550,0.2,0.00047202210454060827
+40,550,0.25,0.0004579636844595251
+40,550,0.30000000000000004,0.00044646134075682087
+40,550,0.35000000000000003,0.00043751507343249514
+40,550,0.4,0.00043112488248654837
+40,550,0.45,0.00042729076791898023
+40,550,0.5,0.00042601272972979084
+40,550,0.55,0.0004272907679189803
+40,550,0.6000000000000001,0.00043112488248654837
+40,550,0.65,0.00043751507343249514
+40,550,0.7000000000000001,0.00044646134075682087
+40,550,0.75,0.0004579636844595251
+40,550,0.8,0.00047202210454060827
+40,550,0.8500000000000001,0.0004886366010000701
+40,550,0.9,0.0005078071738379106
+40,550,0.9500000000000001,0.0005295338230541301
+40,550,1.0,0.0005538165486487281
+40,600,0.0,0.0005564663885944158
+40,600,0.05,0.0005320674777098914
+40,600,0.1,0.0005102368732342643
+40,600,0.15000000000000002,0.0004909745751675346
+40,600,0.2,0.00047428058350970214
+40,600,0.25,0.00046015489826076693
+40,600,0.30000000000000004,0.00044859751942072915
+40,600,0.35000000000000003,0.0004396084469895885
+40,600,0.4,0.00043318768096734525
+40,600,0.45,0.0004293352213539993
+40,600,0.5,0.00042805106814955066
+40,600,0.55,0.00042933522135399935
+40,600,0.6000000000000001,0.00043318768096734525
+40,600,0.65,0.0004396084469895885
+40,600,0.7000000000000001,0.00044859751942072915
+40,600,0.75,0.00046015489826076693
+40,600,0.8,0.00047428058350970214
+40,600,0.8500000000000001,0.0004909745751675346
+40,600,0.9,0.0005102368732342643
+40,600,0.9500000000000001,0.0005320674777098915
+40,600,1.0,0.0005564663885944158
+40,650,0.0,0.0005591162285401035
+40,650,0.05,0.0005346011323656527
+40,650,0.1,0.0005126665726306179
+40,650,0.15000000000000002,0.0004933125493349989
+40,650,0.2,0.0004765390624787959
+40,650,0.25,0.00046234611206200863
+40,650,0.30000000000000004,0.0004507336980846373
+40,650,0.35000000000000003,0.0004417018205466817
+40,650,0.4,0.0004352504794481421
+40,650,0.45,0.00043137967478901835
+40,650,0.5,0.00043008940656931037
+40,650,0.55,0.0004313796747890184
+40,650,0.6000000000000001,0.0004352504794481421
+40,650,0.65,0.0004417018205466817
+40,650,0.7000000000000001,0.0004507336980846373
+40,650,0.75,0.00046234611206200863
+40,650,0.8,0.0004765390624787959
+40,650,0.8500000000000001,0.0004933125493349989
+40,650,0.9,0.0005126665726306179
+40,650,0.9500000000000001,0.0005346011323656528
+40,650,1.0,0.0005591162285401035
+40,700,0.0,0.0005617660684857913
+40,700,0.05,0.0005371347870214142
+40,700,0.1,0.0005150962720269716
+40,700,0.15000000000000002,0.0004956505235024634
+40,700,0.2,0.00047879754144788977
+40,700,0.25,0.00046453732586325045
+40,700,0.30000000000000004,0.00045286987674854557
+40,700,0.35000000000000003,0.0004437951941037751
+40,700,0.4,0.0004373132779289391
+40,700,0.45,0.0004334241282240374
+40,700,0.5,0.0004321277449890702
+40,700,0.55,0.00043342412822403747
+40,700,0.6000000000000001,0.0004373132779289391
+40,700,0.65,0.0004437951941037751
+40,700,0.7000000000000001,0.00045286987674854557
+40,700,0.75,0.00046453732586325045
+40,700,0.8,0.00047879754144788977
+40,700,0.8500000000000001,0.0004956505235024634
+40,700,0.9,0.0005150962720269716
+40,700,0.9500000000000001,0.0005371347870214143
+40,700,1.0,0.0005617660684857913
+50,-400,0.0,0.0004303748961311018
+50,-400,0.05,0.000411504612223815
+50,-400,0.1,0.00039462067399097933
+50,-400,0.15000000000000002,0.00037972308143259515
+50,-400,0.2,0.0003668118345486621
+50,-400,0.25,0.0003558869333391803
+50,-400,0.30000000000000004,0.00034694837780414975
+50,-400,0.35000000000000003,0.00033999616794357036
+50,-400,0.4,0.00033503030375744226
+50,-400,0.45,0.0003320507852457654
+50,-400,0.5,0.0003310576124085398
+50,-400,0.55,0.00033205078524576546
+50,-400,0.6000000000000001,0.00033503030375744226
+50,-400,0.65,0.00033999616794357036
+50,-400,0.7000000000000001,0.00034694837780414975
+50,-400,0.75,0.0003558869333391803
+50,-400,0.8,0.0003668118345486621
+50,-400,0.8500000000000001,0.00037972308143259515
+50,-400,0.9,0.00039462067399097933
+50,-400,0.9500000000000001,0.00041150461222381503
+50,-400,1.0,0.0004303748961311018
+50,-350,0.0,0.0004282856976061935
+50,-350,0.05,0.0004095070170188449
+50,-350,0.1,0.0003927050396512173
+50,-350,0.15000000000000002,0.00037787976550331066
+50,-350,0.2,0.0003650311945751249
+50,-350,0.25,0.00035415932686665993
+50,-350,0.30000000000000004,0.000345264162377916
+50,-350,0.35000000000000003,0.00033834570110889277
+50,-350,0.4,0.0003334039430595906
+50,-350,0.45,0.0003304388882300092
+50,-350,0.5,0.0003294505366201488
+50,-350,0.55,0.0003304388882300093
+50,-350,0.6000000000000001,0.0003334039430595906
+50,-350,0.65,0.00033834570110889277
+50,-350,0.7000000000000001,0.000345264162377916
+50,-350,0.75,0.00035415932686665993
+50,-350,0.8,0.0003650311945751249
+50,-350,0.8500000000000001,0.00037787976550331066
+50,-350,0.9,0.0003927050396512173
+50,-350,0.9500000000000001,0.000409507017018845
+50,-350,1.0,0.0004282856976061935
+50,-300,0.0,0.0004261964990812853
+50,-300,0.05,0.00040750942181387497
+50,-300,0.1,0.00039078940531145535
+50,-300,0.15000000000000002,0.0003760364495740263
+50,-300,0.2,0.00036325055460158777
+50,-300,0.25,0.0003524317203941397
+50,-300,0.30000000000000004,0.00034357994695168227
+50,-300,0.35000000000000003,0.00033669523427421534
+50,-300,0.4,0.00033177758236173897
+50,-300,0.45,0.00032882699121425315
+50,-300,0.5,0.0003278434608317579
+50,-300,0.55,0.0003288269912142532
+50,-300,0.6000000000000001,0.00033177758236173897
+50,-300,0.65,0.00033669523427421534
+50,-300,0.7000000000000001,0.00034357994695168227
+50,-300,0.75,0.0003524317203941397
+50,-300,0.8,0.00036325055460158777
+50,-300,0.8500000000000001,0.0003760364495740263
+50,-300,0.9,0.00039078940531145535
+50,-300,0.9500000000000001,0.000407509421813875
+50,-300,1.0,0.0004261964990812853
+50,-250,0.0,0.000424107300556377
+50,-250,0.05,0.00040551182660890497
+50,-250,0.1,0.0003888737709716932
+50,-250,0.15000000000000002,0.0003741931336447418
+50,-250,0.2,0.00036146991462805044
+50,-250,0.25,0.00035070411392161934
+50,-250,0.30000000000000004,0.0003418957315254485
+50,-250,0.35000000000000003,0.00033504476743953775
+50,-250,0.4,0.00033015122166388727
+50,-250,0.45,0.00032721509419849693
+50,-250,0.5,0.0003262363850433669
+50,-250,0.55,0.000327215094198497
+50,-250,0.6000000000000001,0.00033015122166388727
+50,-250,0.65,0.00033504476743953775
+50,-250,0.7000000000000001,0.0003418957315254485
+50,-250,0.75,0.00035070411392161934
+50,-250,0.8,0.00036146991462805044
+50,-250,0.8500000000000001,0.0003741931336447418
+50,-250,0.9,0.0003888737709716932
+50,-250,0.9500000000000001,0.0004055118266089051
+50,-250,1.0,0.000424107300556377
+50,-200,0.0,0.00042201810203146875
+50,-200,0.05,0.0004035142314039351
+50,-200,0.1,0.00038695813663193126
+50,-200,0.15000000000000002,0.00037234981771545737
+50,-200,0.2,0.00035968927465451333
+50,-200,0.25,0.00034897650744909915
+50,-200,0.30000000000000004,0.0003402115160992148
+50,-200,0.35000000000000003,0.0003333943006048602
+50,-200,0.4,0.0003285248609660356
+50,-200,0.45,0.00032560319718274083
+50,-200,0.5,0.00032462930925497596
+50,-200,0.55,0.0003256031971827409
+50,-200,0.6000000000000001,0.0003285248609660356
+50,-200,0.65,0.0003333943006048602
+50,-200,0.7000000000000001,0.0003402115160992148
+50,-200,0.75,0.00034897650744909915
+50,-200,0.8,0.00035968927465451333
+50,-200,0.8500000000000001,0.00037234981771545737
+50,-200,0.9,0.00038695813663193126
+50,-200,0.9500000000000001,0.00040351423140393513
+50,-200,1.0,0.00042201810203146875
+50,-150,0.0,0.0004199289035065604
+50,-150,0.05,0.000401516636198965
+50,-150,0.1,0.0003850425022921691
+50,-150,0.15000000000000002,0.00037050650178617294
+50,-150,0.2,0.0003579086346809761
+50,-150,0.25,0.0003472489009765788
+50,-150,0.30000000000000004,0.000338527300672981
+50,-150,0.35000000000000003,0.00033174383377018274
+50,-150,0.4,0.0003268985002681839
+50,-150,0.45,0.0003239913001669847
+50,-150,0.5,0.00032302223346658494
+50,-150,0.55,0.00032399130016698473
+50,-150,0.6000000000000001,0.0003268985002681839
+50,-150,0.65,0.00033174383377018274
+50,-150,0.7000000000000001,0.000338527300672981
+50,-150,0.75,0.0003472489009765788
+50,-150,0.8,0.0003579086346809761
+50,-150,0.8500000000000001,0.00037050650178617294
+50,-150,0.9,0.0003850425022921691
+50,-150,0.9500000000000001,0.0004015166361989651
+50,-150,1.0,0.0004199289035065604
+50,-100,0.0,0.00041783970498165225
+50,-100,0.05,0.00039951904099399507
+50,-100,0.1,0.0003831268679524072
+50,-100,0.15000000000000002,0.0003686631858568885
+50,-100,0.2,0.00035612799470743895
+50,-100,0.25,0.0003455212945040585
+50,-100,0.30000000000000004,0.0003368430852467473
+50,-100,0.35000000000000003,0.0003300933669355052
+50,-100,0.4,0.0003252721395703323
+50,-100,0.45,0.0003223794031512285
+50,-100,0.5,0.000321415157678194
+50,-100,0.55,0.0003223794031512286
+50,-100,0.6000000000000001,0.0003252721395703323
+50,-100,0.65,0.0003300933669355052
+50,-100,0.7000000000000001,0.0003368430852467473
+50,-100,0.75,0.0003455212945040585
+50,-100,0.8,0.00035612799470743895
+50,-100,0.8500000000000001,0.0003686631858568885
+50,-100,0.9,0.0003831268679524072
+50,-100,0.9500000000000001,0.0003995190409939951
+50,-100,1.0,0.00041783970498165225
+50,-50,0.0,0.000415750506456744
+50,-50,0.05,0.00039752144578902507
+50,-50,0.1,0.00038121123361264513
+50,-50,0.15000000000000002,0.000366819869927604
+50,-50,0.2,0.00035434735473390173
+50,-50,0.25,0.00034379368803153827
+50,-50,0.30000000000000004,0.00033515886982051353
+50,-50,0.35000000000000003,0.00032844290010082766
+50,-50,0.4,0.0003236457788724807
+50,-50,0.45,0.0003207675061354724
+50,-50,0.5,0.00031980808188980303
+50,-50,0.55,0.00032076750613547247
+50,-50,0.6000000000000001,0.0003236457788724807
+50,-50,0.65,0.00032844290010082766
+50,-50,0.7000000000000001,0.00033515886982051353
+50,-50,0.75,0.00034379368803153827
+50,-50,0.8,0.00035434735473390173
+50,-50,0.8500000000000001,0.000366819869927604
+50,-50,0.9,0.00038121123361264513
+50,-50,0.9500000000000001,0.0003975214457890252
+50,-50,1.0,0.000415750506456744
+50,0,0.0,0.00041366130793183575
+50,0,0.05,0.0003955238505840551
+50,0,0.1,0.0003792955992728831
+50,0,0.15000000000000002,0.00036497655399831964
+50,0,0.2,0.00035256671476036457
+50,0,0.25,0.0003420660815590179
+50,0,0.30000000000000004,0.00033347465439427987
+50,0,0.35000000000000003,0.0003267924332661502
+50,0,0.4,0.000322019418174629
+50,0,0.45,0.00031915560911971626
+50,0,0.5,0.000318201006101412
+50,0,0.55,0.0003191556091197163
+50,0,0.6000000000000001,0.000322019418174629
+50,0,0.65,0.0003267924332661502
+50,0,0.7000000000000001,0.00033347465439427987
+50,0,0.75,0.0003420660815590179
+50,0,0.8,0.00035256671476036457
+50,0,0.8500000000000001,0.00036497655399831964
+50,0,0.9,0.0003792955992728831
+50,0,0.9500000000000001,0.0003955238505840552
+50,0,1.0,0.00041366130793183575
+50,50,0.0,0.000415750506456744
+50,50,0.05,0.00039752144578902507
+50,50,0.1,0.00038121123361264513
+50,50,0.15000000000000002,0.000366819869927604
+50,50,0.2,0.00035434735473390173
+50,50,0.25,0.00034379368803153827
+50,50,0.30000000000000004,0.00033515886982051353
+50,50,0.35000000000000003,0.00032844290010082766
+50,50,0.4,0.0003236457788724807
+50,50,0.45,0.0003207675061354724
+50,50,0.5,0.00031980808188980303
+50,50,0.55,0.00032076750613547247
+50,50,0.6000000000000001,0.0003236457788724807
+50,50,0.65,0.00032844290010082766
+50,50,0.7000000000000001,0.00033515886982051353
+50,50,0.75,0.00034379368803153827
+50,50,0.8,0.00035434735473390173
+50,50,0.8500000000000001,0.000366819869927604
+50,50,0.9,0.00038121123361264513
+50,50,0.9500000000000001,0.0003975214457890252
+50,50,1.0,0.000415750506456744
+50,100,0.0,0.00041783970498165225
+50,100,0.05,0.00039951904099399507
+50,100,0.1,0.0003831268679524072
+50,100,0.15000000000000002,0.0003686631858568885
+50,100,0.2,0.00035612799470743895
+50,100,0.25,0.0003455212945040585
+50,100,0.30000000000000004,0.0003368430852467473
+50,100,0.35000000000000003,0.0003300933669355052
+50,100,0.4,0.0003252721395703323
+50,100,0.45,0.0003223794031512285
+50,100,0.5,0.000321415157678194
+50,100,0.55,0.0003223794031512286
+50,100,0.6000000000000001,0.0003252721395703323
+50,100,0.65,0.0003300933669355052
+50,100,0.7000000000000001,0.0003368430852467473
+50,100,0.75,0.0003455212945040585
+50,100,0.8,0.00035612799470743895
+50,100,0.8500000000000001,0.0003686631858568885
+50,100,0.9,0.0003831268679524072
+50,100,0.9500000000000001,0.0003995190409939951
+50,100,1.0,0.00041783970498165225
+50,150,0.0,0.0004199289035065604
+50,150,0.05,0.000401516636198965
+50,150,0.1,0.0003850425022921691
+50,150,0.15000000000000002,0.00037050650178617294
+50,150,0.2,0.0003579086346809761
+50,150,0.25,0.0003472489009765788
+50,150,0.30000000000000004,0.000338527300672981
+50,150,0.35000000000000003,0.00033174383377018274
+50,150,0.4,0.0003268985002681839
+50,150,0.45,0.0003239913001669847
+50,150,0.5,0.00032302223346658494
+50,150,0.55,0.00032399130016698473
+50,150,0.6000000000000001,0.0003268985002681839
+50,150,0.65,0.00033174383377018274
+50,150,0.7000000000000001,0.000338527300672981
+50,150,0.75,0.0003472489009765788
+50,150,0.8,0.0003579086346809761
+50,150,0.8500000000000001,0.00037050650178617294
+50,150,0.9,0.0003850425022921691
+50,150,0.9500000000000001,0.0004015166361989651
+50,150,1.0,0.0004199289035065604
+50,200,0.0,0.00042201810203146875
+50,200,0.05,0.0004035142314039351
+50,200,0.1,0.00038695813663193126
+50,200,0.15000000000000002,0.00037234981771545737
+50,200,0.2,0.00035968927465451333
+50,200,0.25,0.00034897650744909915
+50,200,0.30000000000000004,0.0003402115160992148
+50,200,0.35000000000000003,0.0003333943006048602
+50,200,0.4,0.0003285248609660356
+50,200,0.45,0.00032560319718274083
+50,200,0.5,0.00032462930925497596
+50,200,0.55,0.0003256031971827409
+50,200,0.6000000000000001,0.0003285248609660356
+50,200,0.65,0.0003333943006048602
+50,200,0.7000000000000001,0.0003402115160992148
+50,200,0.75,0.00034897650744909915
+50,200,0.8,0.00035968927465451333
+50,200,0.8500000000000001,0.00037234981771545737
+50,200,0.9,0.00038695813663193126
+50,200,0.9500000000000001,0.00040351423140393513
+50,200,1.0,0.00042201810203146875
+50,250,0.0,0.000424107300556377
+50,250,0.05,0.00040551182660890497
+50,250,0.1,0.0003888737709716932
+50,250,0.15000000000000002,0.0003741931336447418
+50,250,0.2,0.00036146991462805044
+50,250,0.25,0.00035070411392161934
+50,250,0.30000000000000004,0.0003418957315254485
+50,250,0.35000000000000003,0.00033504476743953775
+50,250,0.4,0.00033015122166388727
+50,250,0.45,0.00032721509419849693
+50,250,0.5,0.0003262363850433669
+50,250,0.55,0.000327215094198497
+50,250,0.6000000000000001,0.00033015122166388727
+50,250,0.65,0.00033504476743953775
+50,250,0.7000000000000001,0.0003418957315254485
+50,250,0.75,0.00035070411392161934
+50,250,0.8,0.00036146991462805044
+50,250,0.8500000000000001,0.0003741931336447418
+50,250,0.9,0.0003888737709716932
+50,250,0.9500000000000001,0.0004055118266089051
+50,250,1.0,0.000424107300556377
+50,300,0.0,0.0004261964990812853
+50,300,0.05,0.00040750942181387497
+50,300,0.1,0.00039078940531145535
+50,300,0.15000000000000002,0.0003760364495740263
+50,300,0.2,0.00036325055460158777
+50,300,0.25,0.0003524317203941397
+50,300,0.30000000000000004,0.00034357994695168227
+50,300,0.35000000000000003,0.00033669523427421534
+50,300,0.4,0.00033177758236173897
+50,300,0.45,0.00032882699121425315
+50,300,0.5,0.0003278434608317579
+50,300,0.55,0.0003288269912142532
+50,300,0.6000000000000001,0.00033177758236173897
+50,300,0.65,0.00033669523427421534
+50,300,0.7000000000000001,0.00034357994695168227
+50,300,0.75,0.0003524317203941397
+50,300,0.8,0.00036325055460158777
+50,300,0.8500000000000001,0.0003760364495740263
+50,300,0.9,0.00039078940531145535
+50,300,0.9500000000000001,0.000407509421813875
+50,300,1.0,0.0004261964990812853
+50,350,0.0,0.0004282856976061935
+50,350,0.05,0.0004095070170188449
+50,350,0.1,0.0003927050396512173
+50,350,0.15000000000000002,0.00037787976550331066
+50,350,0.2,0.0003650311945751249
+50,350,0.25,0.00035415932686665993
+50,350,0.30000000000000004,0.000345264162377916
+50,350,0.35000000000000003,0.00033834570110889277
+50,350,0.4,0.0003334039430595906
+50,350,0.45,0.0003304388882300092
+50,350,0.5,0.0003294505366201488
+50,350,0.55,0.0003304388882300093
+50,350,0.6000000000000001,0.0003334039430595906
+50,350,0.65,0.00033834570110889277
+50,350,0.7000000000000001,0.000345264162377916
+50,350,0.75,0.00035415932686665993
+50,350,0.8,0.0003650311945751249
+50,350,0.8500000000000001,0.00037787976550331066
+50,350,0.9,0.0003927050396512173
+50,350,0.9500000000000001,0.000409507017018845
+50,350,1.0,0.0004282856976061935
+50,400,0.0,0.0004303748961311018
+50,400,0.05,0.000411504612223815
+50,400,0.1,0.00039462067399097933
+50,400,0.15000000000000002,0.00037972308143259515
+50,400,0.2,0.0003668118345486621
+50,400,0.25,0.0003558869333391803
+50,400,0.30000000000000004,0.00034694837780414975
+50,400,0.35000000000000003,0.00033999616794357036
+50,400,0.4,0.00033503030375744226
+50,400,0.45,0.0003320507852457654
+50,400,0.5,0.0003310576124085398
+50,400,0.55,0.00033205078524576546
+50,400,0.6000000000000001,0.00033503030375744226
+50,400,0.65,0.00033999616794357036
+50,400,0.7000000000000001,0.00034694837780414975
+50,400,0.75,0.0003558869333391803
+50,400,0.8,0.0003668118345486621
+50,400,0.8500000000000001,0.00037972308143259515
+50,400,0.9,0.00039462067399097933
+50,400,0.9500000000000001,0.00041150461222381503
+50,400,1.0,0.0004303748961311018
+50,450,0.0,0.00043246409465601005
+50,450,0.05,0.00041350220742878487
+50,450,0.1,0.0003965363083307414
+50,450,0.15000000000000002,0.0003815663973618796
+50,450,0.2,0.00036859247452219925
+50,450,0.25,0.00035761453981170057
+50,450,0.30000000000000004,0.00034863259323038347
+50,450,0.35000000000000003,0.00034164663477824784
+50,450,0.4,0.00033665666445529386
+50,450,0.45,0.0003336626822615215
+50,450,0.5,0.00033266468819693074
+50,450,0.55,0.00033366268226152156
+50,450,0.6000000000000001,0.00033665666445529386
+50,450,0.65,0.00034164663477824784
+50,450,0.7000000000000001,0.00034863259323038347
+50,450,0.75,0.00035761453981170057
+50,450,0.8,0.00036859247452219925
+50,450,0.8500000000000001,0.0003815663973618796
+50,450,0.9,0.0003965363083307414
+50,450,0.9500000000000001,0.000413502207428785
+50,450,1.0,0.00043246409465601005
+50,500,0.0,0.00043455329318091836
+50,500,0.05,0.00041549980263375487
+50,500,0.1,0.0003984519426705034
+50,500,0.15000000000000002,0.00038340971329116406
+50,500,0.2,0.00037037311449573647
+50,500,0.25,0.0003593421462842209
+50,500,0.30000000000000004,0.00035031680865661724
+50,500,0.35000000000000003,0.00034329710161292543
+50,500,0.4,0.00033828302515314556
+50,500,0.45,0.00033527457927727766
+50,500,0.5,0.00033427176398532175
+50,500,0.55,0.00033527457927727777
+50,500,0.6000000000000001,0.00033828302515314556
+50,500,0.65,0.00034329710161292543
+50,500,0.7000000000000001,0.00035031680865661724
+50,500,0.75,0.0003593421462842209
+50,500,0.8,0.00037037311449573647
+50,500,0.8500000000000001,0.00038340971329116406
+50,500,0.9,0.0003984519426705034
+50,500,0.9500000000000001,0.0004154998026337549
+50,500,1.0,0.00043455329318091836
+50,550,0.0,0.00043664249170582655
+50,550,0.05,0.0004174973978387248
+50,550,0.1,0.0004003675770102654
+50,550,0.15000000000000002,0.00038525302922044844
+50,550,0.2,0.00037215375446927364
+50,550,0.25,0.0003610697527567411
+50,550,0.30000000000000004,0.0003520010240828509
+50,550,0.35000000000000003,0.0003449475684476029
+50,550,0.4,0.0003399093858509972
+50,550,0.45,0.0003368864762930338
+50,550,0.5,0.0003358788397737127
+50,550,0.55,0.0003368864762930339
+50,550,0.6000000000000001,0.0003399093858509972
+50,550,0.65,0.0003449475684476029
+50,550,0.7000000000000001,0.0003520010240828509
+50,550,0.75,0.0003610697527567411
+50,550,0.8,0.00037215375446927364
+50,550,0.8500000000000001,0.00038525302922044844
+50,550,0.9,0.0004003675770102654
+50,550,0.9500000000000001,0.00041749739783872487
+50,550,1.0,0.00043664249170582655
+50,600,0.0,0.00043873169023073486
+50,600,0.05,0.0004194949930436949
+50,600,0.1,0.0004022832113500275
+50,600,0.15000000000000002,0.0003870963451497329
+50,600,0.2,0.0003739343944428109
+50,600,0.25,0.00036279735922926145
+50,600,0.30000000000000004,0.00035368523950908467
+50,600,0.35000000000000003,0.00034659803528228045
+50,600,0.4,0.0003415357465488489
+50,600,0.45,0.00033849837330879
+50,600,0.5,0.0003374859155621037
+50,600,0.55,0.00033849837330879003
+50,600,0.6000000000000001,0.0003415357465488489
+50,600,0.65,0.00034659803528228045
+50,600,0.7000000000000001,0.00035368523950908467
+50,600,0.75,0.00036279735922926145
+50,600,0.8,0.0003739343944428109
+50,600,0.8500000000000001,0.0003870963451497329
+50,600,0.9,0.0004022832113500275
+50,600,0.9500000000000001,0.00041949499304369493
+50,600,1.0,0.00043873169023073486
+50,650,0.0,0.00044082088875564305
+50,650,0.05,0.00042149258824866477
+50,650,0.1,0.0004041988456897895
+50,650,0.15000000000000002,0.00038893966107901736
+50,650,0.2,0.00037571503441634807
+50,650,0.25,0.0003645249657017817
+50,650,0.30000000000000004,0.0003553694549353184
+50,650,0.35000000000000003,0.000348248502116958
+50,650,0.4,0.00034316210724670055
+50,650,0.45,0.0003401102703245461
+50,650,0.5,0.0003390929913504947
+50,650,0.55,0.00034011027032454614
+50,650,0.6000000000000001,0.00034316210724670055
+50,650,0.65,0.000348248502116958
+50,650,0.7000000000000001,0.0003553694549353184
+50,650,0.75,0.0003645249657017817
+50,650,0.8,0.00037571503441634807
+50,650,0.8500000000000001,0.00038893966107901736
+50,650,0.9,0.0004041988456897895
+50,650,0.9500000000000001,0.0004214925882486649
+50,650,1.0,0.00044082088875564305
+50,700,0.0,0.00044291008728055136
+50,700,0.05,0.00042349018345363477
+50,700,0.1,0.0004061144800295516
+50,700,0.15000000000000002,0.0003907829770083018
+50,700,0.2,0.0003774956743898853
+50,700,0.25,0.00036625257217430204
+50,700,0.30000000000000004,0.00035705367036155216
+50,700,0.35000000000000003,0.0003498989689516355
+50,700,0.4,0.00034478846794455225
+50,700,0.45,0.0003417221673403023
+50,700,0.5,0.0003407000671388857
+50,700,0.55,0.00034172216734030235
+50,700,0.6000000000000001,0.00034478846794455225
+50,700,0.65,0.0003498989689516355
+50,700,0.7000000000000001,0.00035705367036155216
+50,700,0.75,0.00036625257217430204
+50,700,0.8,0.0003774956743898853
+50,700,0.8500000000000001,0.0003907829770083018
+50,700,0.9,0.0004061144800295516
+50,700,0.9500000000000001,0.00042349018345363493
+50,700,1.0,0.00044291008728055136
diff --git a/pybamm/input/parameters/ecm/example_set.py b/pybamm/input/parameters/ecm/example_set.py
new file mode 100644
index 0000000000..06a9906811
--- /dev/null
+++ b/pybamm/input/parameters/ecm/example_set.py
@@ -0,0 +1,103 @@
+import pybamm
+import os
+
+# An example set of parameters for the equivalent circuit model
+
+path, _ = os.path.split(os.path.abspath(__file__))
+
+ocv_data = pybamm.parameters.process_1D_data("ecm_example_ocv.csv", path=path)
+
+r0_data = pybamm.parameters.process_3D_data_csv("ecm_example_r0.csv", path=path)
+r1_data = pybamm.parameters.process_3D_data_csv("ecm_example_r1.csv", path=path)
+c1_data = pybamm.parameters.process_3D_data_csv("ecm_example_c1.csv", path=path)
+
+dUdT_data = pybamm.parameters.process_2D_data_csv("ecm_example_dudt.csv", path=path)
+
+
+def ocv(sto):
+ name, (x, y) = ocv_data
+ return pybamm.Interpolant(x, y, sto, name)
+
+
+def r0(T_cell, current, soc):
+ name, (x, y) = r0_data
+ return pybamm.Interpolant(x, y, [T_cell, current, soc], name)
+
+
+def r1(T_cell, current, soc):
+ name, (x, y) = r1_data
+ return pybamm.Interpolant(x, y, [T_cell, current, soc], name)
+
+
+def c1(T_cell, current, soc):
+ name, (x, y) = c1_data
+ return pybamm.Interpolant(x, y, [T_cell, current, soc], name)
+
+
+def dUdT(ocv, T_cell):
+ name, (x, y) = dUdT_data
+ return pybamm.Interpolant(x, y, [ocv, T_cell], name)
+
+
+def get_parameter_values():
+ """
+ Example parameter set for a equivalent circuit model with a
+ resistor in series with a single RC element.
+
+ This parameter set is for demonstration purposes only and
+ does not reflect the properties of any particular cell.
+ Example functional dependancies have been added for each of
+ the parameters to demonstrate the functionality of
+ 3D look-up tables models. Where parameters have been taken
+ from the literature, we do not disclose the source
+ in order to avoid confusion that these values represent
+ any particular cell.
+
+ The parameter values have been generated in the following
+ manner:
+
+ 1. Capacity assumed to be 100Ah
+ 2. 100A DCIR at T25 S50 assumed to be 1mOhm
+ 3. DCIR assume to be have the following dependencies:
+ - quadratic in SoC (increasing to 1.2mOhm
+ at 0% and 100% SoC)
+ - Arrhenius in temperature (with Ea=20000)
+ - linear with the magnitude of the current (with
+ slope 0.01 mohms per 100 amps)
+ 4. R0 taken to be 40% of the DCIR
+ 5. R1 taken to be 60% of the DCIR
+ 6. C1 is derived from the C1 = tau / R1 where tau=30s
+ 7. OCV is taken from an undisclosed literature source.
+ 8. dUdT is taken from an undisclosed literature source.
+
+ """
+
+ # N.B. actual cell capacity and nominal cell capcity
+ # can be different hence the two parameters
+ cell_capacity = 100
+
+ values = {
+ "chemistry": "ecm",
+ "Initial SoC": 0.5,
+ "Initial cell temperature [degC]": 25,
+ "Initial jig temperature [degC]": 25,
+ "Cell capacity [A.h]": cell_capacity,
+ "Nominal cell capacity [A.h]": cell_capacity,
+ "Ambient temperature [degC]": 25,
+ "Current function [A]": 100,
+ "Upper voltage cut-off [V]": 4.2,
+ "Lower voltage cut-off [V]": 3.2,
+ "Cell thermal mass [J/K]": 1000,
+ "Cell-jig heat transfer coefficient [W/K]": 10,
+ "Jig thermal mass [J/K]": 500,
+ "Jig-air heat transfer coefficient [W/K]": 10,
+ "Open circuit voltage [V]": ocv,
+ "R0 [Ohm]": r0,
+ "Element-1 initial overpotential [V]": 0,
+ "R1 [Ohm]": r1,
+ "C1 [F]": c1,
+ "Entropic change [V/K]": dUdT,
+ "RCR lookup limit [A]": 340,
+ }
+
+ return values
diff --git a/pybamm/input/parameters/lithium_ion/Ai2020.py b/pybamm/input/parameters/lithium_ion/Ai2020.py
index 55f178c672..cf05c19108 100644
--- a/pybamm/input/parameters/lithium_ion/Ai2020.py
+++ b/pybamm/input/parameters/lithium_ion/Ai2020.py
@@ -498,10 +498,22 @@ def electrolyte_conductivity_Ai2020(c_e, T):
# Load data in the appropriate format
path, _ = os.path.split(os.path.abspath(__file__))
-graphite_ocp_Enertech_Ai2020 = pybamm.parameters.process_1D_data(
+graphite_ocp_Enertech_Ai2020_data = pybamm.parameters.process_1D_data(
"graphite_ocp_Enertech_Ai2020.csv", path=path
)
-lico2_ocp_Ai2020 = pybamm.parameters.process_1D_data("lico2_ocp_Ai2020.csv", path=path)
+lico2_ocp_Ai2020_data = pybamm.parameters.process_1D_data(
+ "lico2_ocp_Ai2020.csv", path=path
+)
+
+
+def graphite_ocp_Enertech_Ai2020(sto):
+ name, (x, y) = graphite_ocp_Enertech_Ai2020_data
+ return pybamm.Interpolant(x, y, sto, name=name, interpolator="cubic")
+
+
+def lico2_ocp_Ai2020(sto):
+ name, (x, y) = lico2_ocp_Ai2020_data
+ return pybamm.Interpolant(x, y, sto, name=name, interpolator="cubic")
# Call dict via a function to avoid errors when editing in place
diff --git a/pybamm/input/parameters/lithium_ion/Chen2020_composite.py b/pybamm/input/parameters/lithium_ion/Chen2020_composite.py
index db123d962a..3ca393d270 100644
--- a/pybamm/input/parameters/lithium_ion/Chen2020_composite.py
+++ b/pybamm/input/parameters/lithium_ion/Chen2020_composite.py
@@ -308,11 +308,16 @@ def electrolyte_conductivity_Nyman2008(c_e, T):
# Load data in the appropriate format
path, _ = os.path.split(os.path.abspath(__file__))
-graphite_ocp_Enertech_Ai2020 = pybamm.parameters.process_1D_data(
+graphite_ocp_Enertech_Ai2020_data = pybamm.parameters.process_1D_data(
"graphite_ocp_Enertech_Ai2020.csv", path=path
)
+def graphite_ocp_Enertech_Ai2020(sto):
+ name, (x, y) = graphite_ocp_Enertech_Ai2020_data
+ return pybamm.Interpolant(x, y, sto, name=name, interpolator="cubic")
+
+
# Call dict via a function to avoid errors when editing in place
def get_parameter_values():
"""
diff --git a/pybamm/input/parameters/lithium_ion/Ecker2015.py b/pybamm/input/parameters/lithium_ion/Ecker2015.py
index 7299834564..8feee0dc95 100644
--- a/pybamm/input/parameters/lithium_ion/Ecker2015.py
+++ b/pybamm/input/parameters/lithium_ion/Ecker2015.py
@@ -1,5 +1,4 @@
import pybamm
-import os
def graphite_diffusivity_Ecker2015(sto, T):
@@ -40,7 +39,7 @@ def graphite_diffusivity_Ecker2015(sto, T):
return D_ref * arrhenius
-def graphite_ocp_Ecker2015_function(sto):
+def graphite_ocp_Ecker2015(sto):
"""
Graphite OCP as a function of stochiometry [1, 2, 3].
@@ -190,7 +189,7 @@ def nco_diffusivity_Ecker2015(sto, T):
return D_ref * arrhenius
-def nco_ocp_Ecker2015_function(sto):
+def nco_ocp_Ecker2015(sto):
"""
NCO OCP as a function of stochiometry [1, 2, 3].
@@ -383,22 +382,6 @@ def electrolyte_conductivity_Ecker2015(c_e, T):
return sigma_e
-# Load data in the appropriate format
-path, _ = os.path.split(os.path.abspath(__file__))
-measured_graphite_diffusivity_Ecker2015 = pybamm.parameters.process_1D_data(
- "measured_graphite_diffusivity_Ecker2015.csv", path=path
-)
-graphite_ocp_Ecker2015 = pybamm.parameters.process_1D_data(
- "graphite_ocp_Ecker2015.csv", path=path
-)
-measured_nco_diffusivity_Ecker2015 = pybamm.parameters.process_1D_data(
- "measured_nco_diffusivity_Ecker2015.csv", path=path
-)
-nco_ocp_Ecker2015 = pybamm.parameters.process_1D_data(
- "nco_ocp_Ecker2015.csv", path=path
-)
-
-
# Call dict via a function to avoid errors when editing in place
def get_parameter_values():
"""
@@ -518,11 +501,8 @@ def get_parameter_values():
# negative electrode
"Negative electrode conductivity [S.m-1]": 14.0,
"Maximum concentration in negative electrode [mol.m-3]": 31920.0,
- "Measured negative electrode diffusivity [m2.s-1]"
- "": measured_graphite_diffusivity_Ecker2015,
"Negative electrode diffusivity [m2.s-1]": graphite_diffusivity_Ecker2015,
- "Measured negative electrode OCP [V]": graphite_ocp_Ecker2015,
- "Negative electrode OCP [V]": graphite_ocp_Ecker2015_function,
+ "Negative electrode OCP [V]": graphite_ocp_Ecker2015,
"Negative electrode porosity": 0.329,
"Negative electrode active material volume fraction": 0.372403,
"Negative particle radius [m]": 1.37e-05,
@@ -539,11 +519,8 @@ def get_parameter_values():
# positive electrode
"Positive electrode conductivity [S.m-1]": 68.1,
"Maximum concentration in positive electrode [mol.m-3]": 48580.0,
- "Measured positive electrode diffusivity [m2.s-1]"
- "": measured_nco_diffusivity_Ecker2015,
"Positive electrode diffusivity [m2.s-1]": nco_diffusivity_Ecker2015,
- "Measured positive electrode OCP [V]": nco_ocp_Ecker2015,
- "Positive electrode OCP [V]": nco_ocp_Ecker2015_function,
+ "Positive electrode OCP [V]": nco_ocp_Ecker2015,
"Positive electrode porosity": 0.296,
"Positive electrode active material volume fraction": 0.40832,
"Positive particle radius [m]": 6.5e-06,
diff --git a/pybamm/input/parameters/lithium_ion/NCA_Kim2011.py b/pybamm/input/parameters/lithium_ion/NCA_Kim2011.py
index eec80ea1c2..56ed2ffa5a 100644
--- a/pybamm/input/parameters/lithium_ion/NCA_Kim2011.py
+++ b/pybamm/input/parameters/lithium_ion/NCA_Kim2011.py
@@ -267,6 +267,11 @@ def electrolyte_conductivity_Kim2011(c_e, T):
)
+def nca_ocp_Kim2011(sto):
+ name, (x, y) = nca_ocp_Kim2011_data
+ return pybamm.Interpolant(x, y, sto, name=name, interpolator="linear")
+
+
# Call dict via a function to avoid errors when editing in place
def get_parameter_values():
"""
@@ -388,7 +393,7 @@ def get_parameter_values():
"Positive electrode conductivity [S.m-1]": 10.0,
"Maximum concentration in positive electrode [mol.m-3]": 49000.0,
"Positive electrode diffusivity [m2.s-1]": nca_diffusivity_Kim2011,
- "Positive electrode OCP [V]": nca_ocp_Kim2011_data,
+ "Positive electrode OCP [V]": nca_ocp_Kim2011,
"Positive electrode porosity": 0.4,
"Positive electrode active material volume fraction": 0.41,
"Positive particle radius [m]": 1.633e-06,
diff --git a/pybamm/input/parameters/lithium_ion/OKane2022.py b/pybamm/input/parameters/lithium_ion/OKane2022.py
index 03d5783e1f..0040fb564e 100644
--- a/pybamm/input/parameters/lithium_ion/OKane2022.py
+++ b/pybamm/input/parameters/lithium_ion/OKane2022.py
@@ -487,11 +487,16 @@ def electrolyte_conductivity_Nyman2008_arrhenius(c_e, T):
# Load data in the appropriate format
path, _ = os.path.split(os.path.abspath(__file__))
-graphite_LGM50_ocp_Chen2020 = pybamm.parameters.process_1D_data(
+graphite_LGM50_ocp_Chen2020_data = pybamm.parameters.process_1D_data(
"graphite_LGM50_ocp_Chen2020.csv", path=path
)
+def graphite_LGM50_ocp_Chen2020(sto):
+ name, (x, y) = graphite_LGM50_ocp_Chen2020_data
+ return pybamm.Interpolant(x, y, sto, name=name, interpolator="cubic")
+
+
# Call dict via a function to avoid errors when editing in place
def get_parameter_values():
"""
diff --git a/pybamm/input/parameters/lithium_ion/data/lico2_ocp_Ai2020.csv b/pybamm/input/parameters/lithium_ion/data/lico2_ocp_Ai2020.csv
index ffd7886e2b..2c81422639 100644
--- a/pybamm/input/parameters/lithium_ion/data/lico2_ocp_Ai2020.csv
+++ b/pybamm/input/parameters/lithium_ion/data/lico2_ocp_Ai2020.csv
@@ -1,6 +1,42 @@
# OCP for lico2 from Rieger 2016
# stoichiometry , OCP [V]
+0.4,4.390781177520233
+0.401,4.387755138269558
+0.402,4.384729099018884
+0.403,4.381703059768209
+0.404,4.378677020517535
+0.405,4.37565098126686
+0.406,4.372624942016186
+0.407,4.369598902765512
+0.408,4.366572863514837
+0.409,4.363546824264163
+0.41,4.360520785013488
+0.411,4.357494745762814
+0.412,4.354468706512139
+0.413,4.351442667261465
+0.414,4.34841662801079
+0.415,4.345390588760116
+0.416,4.342364549509441
+0.417,4.339338510258767
+0.418,4.3363124710080925
+0.419,4.3332864317574185
+0.42,4.330260392506744
+0.421,4.3272343532560695
+0.422,4.3242083140053955
+0.423,4.321182274754721
+0.424,4.318156235504047
+0.425,4.315130196253372
+0.426,4.312104157002698
+0.427,4.309078117752023
+0.428,4.306052078501349
+0.429,4.303026039250674
0.43,4.3
+0.431,4.296973960749326
+0.432,4.293947921498651
+0.433,4.290921882247977
+0.434,4.287895842997302
+0.435,4.284869803746628
+0.436,4.281843764495953
0.436639784,4.279907753
0.437906143,4.276472669
0.439172502,4.273800938
diff --git a/pybamm/meshes/meshes.py b/pybamm/meshes/meshes.py
index 1a96137f9b..793ceced44 100644
--- a/pybamm/meshes/meshes.py
+++ b/pybamm/meshes/meshes.py
@@ -111,12 +111,30 @@ def __init__(self, geometry, submesh_types, var_pts):
geometry[domain][spatial_variable][lim] = sym_eval
# Create submeshes
+ self.base_domains = []
for domain in geometry:
self[domain] = submesh_types[domain](geometry[domain], submesh_pts[domain])
+ self.base_domains.append(domain)
# add ghost meshes
self.add_ghost_meshes()
+ def __getitem__(self, domains):
+ if isinstance(domains, str):
+ domains = (domains,)
+ domains = tuple(domains)
+ try:
+ return super().__getitem__(domains)
+ except KeyError:
+ value = self.combine_submeshes(*domains)
+ self[domains] = value
+ return value
+
+ def __setitem__(self, domains, value):
+ if isinstance(domains, str):
+ domains = (domains,)
+ super().__setitem__(domains, value)
+
def combine_submeshes(self, *submeshnames):
"""Combine submeshes into a new submesh, using self.submeshclass
Raises pybamm.DomainError if submeshes to be combined do not match up (edges are
@@ -134,9 +152,6 @@ def combine_submeshes(self, *submeshnames):
"""
if submeshnames == ():
raise ValueError("Submesh domains being combined cannot be empty")
- # If there is just a single submesh, we can return it directly
- if len(submeshnames) == 1:
- return self[submeshnames[0]]
# Check that the final edge of each submesh is the same as the first edge of the
# next submesh
for i in range(len(submeshnames) - 1):
@@ -159,7 +174,6 @@ def combine_submeshes(self, *submeshnames):
submesh.internal_boundaries = [
self[submeshname].edges[0] for submeshname in submeshnames[1:]
]
-
return submesh
def add_ghost_meshes(self):
@@ -172,22 +186,24 @@ def add_ghost_meshes(self):
submeshes = [
(domain, submesh)
for domain, submesh in self.items()
- if not isinstance(submesh, (pybamm.SubMesh0D, pybamm.ScikitSubMesh2D))
+ if (
+ len(domain) == 1
+ and not isinstance(submesh, (pybamm.SubMesh0D, pybamm.ScikitSubMesh2D))
+ )
]
for domain, submesh in submeshes:
-
edges = submesh.edges
# left ghost cell: two edges, one node, to the left of existing submesh
lgs_edges = np.array([2 * edges[0] - edges[1], edges[0]])
- self[domain + "_left ghost cell"] = pybamm.SubMesh1D(
+ self[domain[0] + "_left ghost cell"] = pybamm.SubMesh1D(
lgs_edges, submesh.coord_sys
)
# right ghost cell: two edges, one node, to the right of
# existing submesh
rgs_edges = np.array([edges[-1], 2 * edges[-1] - edges[-2]])
- self[domain + "_right ghost cell"] = pybamm.SubMesh1D(
+ self[domain[0] + "_right ghost cell"] = pybamm.SubMesh1D(
rgs_edges, submesh.coord_sys
)
diff --git a/pybamm/models/base_model.py b/pybamm/models/base_model.py
index 76d294cf2d..45e32641bf 100644
--- a/pybamm/models/base_model.py
+++ b/pybamm/models/base_model.py
@@ -181,9 +181,6 @@ def variables(self, variables):
and var.name != name
# Exception if the variable is also there under its own name
and not (var.name in variables and variables[var.name] == var)
- # Exception for the key "Leading-order"
- and "leading-order" not in var.name.lower()
- and "leading-order" not in name.lower()
):
raise ValueError(
f"Variable with name '{var.name}' is in variables dictionary with "
diff --git a/pybamm/models/full_battery_models/base_battery_model.py b/pybamm/models/full_battery_models/base_battery_model.py
index a838f7f4e0..ac254ce892 100644
--- a/pybamm/models/full_battery_models/base_battery_model.py
+++ b/pybamm/models/full_battery_models/base_battery_model.py
@@ -4,6 +4,7 @@
import pybamm
import numbers
+from functools import cached_property
class BatteryModelOptions(pybamm.FuzzyDict):
@@ -121,9 +122,10 @@ class BatteryModelOptions(pybamm.FuzzyDict):
- "none": :class:`pybamm.sei.NoSEI` (no SEI growth)
- "constant": :class:`pybamm.sei.Constant` (constant SEI thickness)
- - "reaction limited", "solvent-diffusion limited",\
- "electron-migration limited", "interstitial-diffusion limited", \
- or "ec reaction limited": :class:`pybamm.sei.SEIGrowth`
+ - "reaction limited", "reaction limited (asymmetric)", \
+ "solvent-diffusion limited", "electron-migration limited", \
+ "interstitial-diffusion limited", "ec reaction limited" \
+ or "ec reaction limited (asymmetric)": :class:`pybamm.sei.SEIGrowth`
* "SEI film resistance" : str
Set the submodel for additional term in the overpotential due to SEI.
The default value is "none" if the "SEI" option is "none", and
@@ -255,10 +257,12 @@ def __init__(self, extra_options):
"none",
"constant",
"reaction limited",
+ "reaction limited (asymmetric)",
"solvent-diffusion limited",
"electron-migration limited",
"interstitial-diffusion limited",
"ec reaction limited",
+ "ec reaction limited (asymmetric)",
],
"SEI film resistance": ["none", "distributed", "average"],
"SEI on cracks": ["false", "true"],
@@ -597,19 +601,14 @@ def phases(self):
self._phases[domain] = phases
return self._phases
- @property
+ @cached_property
def whole_cell_domains(self):
- try:
- return self._whole_cell_domains
- except AttributeError:
- if self["working electrode"] == "positive":
- wcd = ["separator", "positive electrode"]
- elif self["working electrode"] == "negative":
- wcd = ["negative electrode", "separator"]
- elif self["working electrode"] == "both":
- wcd = ["negative electrode", "separator", "positive electrode"]
- self._whole_cell_domains = wcd
- return wcd
+ if self["working electrode"] == "positive":
+ return ["separator", "positive electrode"]
+ elif self["working electrode"] == "negative":
+ return ["negative electrode", "separator"]
+ elif self["working electrode"] == "both":
+ return ["negative electrode", "separator", "positive electrode"]
@property
def electrode_types(self):
@@ -843,7 +842,7 @@ def options(self, extra_options):
raise pybamm.OptionError("Lead-acid models cannot have lithium plating")
if (
- isinstance(self, (pybamm.lead_acid.LOQS, pybamm.lead_acid.Composite))
+ isinstance(self, pybamm.lead_acid.LOQS)
and options["surface form"] == "false"
and options["hydrolysis"] == "true"
):
diff --git a/pybamm/models/full_battery_models/equivalent_circuit/__init__.py b/pybamm/models/full_battery_models/equivalent_circuit/__init__.py
new file mode 100644
index 0000000000..c4bf7d5a56
--- /dev/null
+++ b/pybamm/models/full_battery_models/equivalent_circuit/__init__.py
@@ -0,0 +1 @@
+from .thevenin import *
diff --git a/pybamm/models/full_battery_models/equivalent_circuit/ecm_model_options.py b/pybamm/models/full_battery_models/equivalent_circuit/ecm_model_options.py
new file mode 100644
index 0000000000..d9bbe0401a
--- /dev/null
+++ b/pybamm/models/full_battery_models/equivalent_circuit/ecm_model_options.py
@@ -0,0 +1,42 @@
+import types
+
+
+class NaturalNumberOption:
+ def __init__(self, default_value):
+ self.value = default_value
+
+ def __contains__(self, value):
+ is_an_integer = isinstance(value, int)
+ is_non_negative = value >= 0
+ return is_an_integer and is_non_negative
+
+ def __getitem__(self, value):
+ return self.value
+
+ def __repr__(self):
+ return "natural numbers (e.g. 0, 1, 2, 3, ...)"
+
+
+class OperatingModes:
+ def __init__(self, default_mode):
+ self.default_mode = default_mode
+
+ self.named_modes = [
+ "current",
+ "voltage",
+ "power",
+ "differential power",
+ "explicit power",
+ "resistance",
+ "differential resistance",
+ "explicit resistance",
+ "CCCV",
+ ]
+
+ def __contains__(self, value):
+ named_mode = value in self.named_modes
+ function = isinstance(value, types.FunctionType)
+ return named_mode or function
+
+ def __getitem__(self, value):
+ return self.default_mode
diff --git a/pybamm/models/full_battery_models/equivalent_circuit/thevenin.py b/pybamm/models/full_battery_models/equivalent_circuit/thevenin.py
new file mode 100644
index 0000000000..078bb5de29
--- /dev/null
+++ b/pybamm/models/full_battery_models/equivalent_circuit/thevenin.py
@@ -0,0 +1,248 @@
+import pybamm
+
+from .ecm_model_options import NaturalNumberOption, OperatingModes
+
+
+class Thevenin(pybamm.BaseModel):
+ """
+ The classical Thevenin Equivalent Circuit Model of a battery as
+ described in, for example, [1]_.
+
+ This equivalent circuit model consists of an OCV element, a resistor
+ element, and a number of RC elements (by default 1). The model is
+ coupled to two lumped thermal models, one for the cell and
+ one for the surrounding jig. Heat generation terms for each element
+ follow equation (1) of [2]_.
+
+ Parameters
+ ----------
+ name : str, optional
+ The name of the model. The default is
+ "Thevenin Equivalent Circuit Model".
+ options : dict, optional
+ A dictionary of options to be passed to the model. The default is None.
+ Possible options are:
+
+ * "number of rc elements" : str
+ The number of RC elements to be added to the model. The default is 1.
+ * "calculate discharge energy": str
+ Whether to calculate the discharge energy, throughput energy and
+ throughput capacity in addition to discharge capacity. Must be one of
+ "true" or "false". "false" is the default, since calculating discharge
+ energy can be computationally expensive for simple models like SPM.
+ * "operating mode" : str
+ Sets the operating mode for the model. This determines how the current
+ is set. Can be:
+
+ - "current" (default) : the current is explicity supplied
+ - "voltage"/"power"/"resistance" : solve an algebraic equation for \
+ current such that voltage/power/resistance is correct
+ - "differential power"/"differential resistance" : solve a \
+ differential equation for the power or resistance
+ - "CCCV": a special implementation of the common constant-current \
+ constant-voltage charging protocol, via an ODE for the current
+ - callable : if a callable is given as this option, the function \
+ defines the residual of an algebraic equation. The applied current \
+ will be solved for such that the algebraic constraint is satisfied.
+ * "external submodels" : list
+ A list of the submodels that you would like to supply an external
+ variable for instead of solving in PyBaMM. The entries of the lists
+ are strings that correspond to the submodel names in the keys
+ of `self.submodels`.
+ build : bool, optional
+ Whether to build the model on instantiation. Default is True. Setting this
+ option to False allows users to change any number of the submodels before
+ building the complete model (submodels cannot be changed after the model is
+ built).
+
+ Examples
+ --------
+ >>> import pybamm
+ >>> model = pybamm.equivalent_circuit.Thevenin()
+ >>> model.name
+ 'Thevenin Equivalent Circuit Model'
+
+
+ References
+ ----------
+ .. [1] G Barletta, D Piera, and D Papurello. "Thévenin’s Battery Model
+ Parameter Estimation Based on Simulink." Energies 15.17 (2022): 6207.
+ .. [2] N Nieto, L Díaz, J Gastelurrutia, I Alava, F Blanco, JC Ramos, and
+ A Rivas "Thermal modeling of large format lithium-ion cells."
+ Journal of The Electrochemical Society, 160(2), (2012) A212.
+ """
+
+ def __init__(
+ self, name="Thevenin Equivalent Circuit Model", options=None, build=True
+ ):
+ super().__init__(name)
+
+ self.set_options(options)
+ self.param = pybamm.EcmParameters()
+ self.element_counter = 0
+
+ self.set_submodels(build)
+
+ def set_options(self, extra_options=None):
+
+ possible_options = {
+ "calculate discharge energy": ["false", "true"],
+ "operating mode": OperatingModes("current"),
+ "number of rc elements": NaturalNumberOption(1),
+ "external submodels": [[]],
+ }
+
+ default_options = {
+ name: options[0] for name, options in possible_options.items()
+ }
+
+ extra_options = extra_options or {}
+
+ options = pybamm.FuzzyDict(default_options)
+ for name, opt in extra_options.items():
+ if name in default_options:
+ options[name] = opt
+ else:
+ raise pybamm.OptionError(
+ "Option '{}' not recognised. Best matches are {}".format(
+ name, options.get_best_matches(name)
+ )
+ )
+
+ for opt, value in options.items():
+ if value not in possible_options[opt]:
+ raise pybamm.OptionError(
+ "Option '{}' must be one of {}. Got '{}' instead.".format(
+ opt, possible_options[opt], value
+ )
+ )
+
+ self.ecm_options = options
+
+ # Hack to deal with submodels requiring electrochemical model
+ # options
+ self.options = pybamm.BatteryModelOptions({})
+ self.options["calculate discharge energy"] = self.ecm_options[
+ "calculate discharge energy"
+ ]
+ self.options["operating mode"] = self.ecm_options["operating mode"]
+
+ def set_external_circuit_submodel(self):
+ """
+ Define how the external circuit defines the boundary conditions for the model,
+ e.g. (not necessarily constant-) current, voltage, etc
+ """
+
+ if self.options["operating mode"] == "current":
+ model = pybamm.external_circuit.ExplicitCurrentControl(
+ self.param, self.options
+ )
+ elif self.options["operating mode"] == "voltage":
+ model = pybamm.external_circuit.VoltageFunctionControl(
+ self.param, self.options
+ )
+ elif self.options["operating mode"] == "power":
+ model = pybamm.external_circuit.PowerFunctionControl(
+ self.param, self.options, "algebraic"
+ )
+ elif self.options["operating mode"] == "differential power":
+ model = pybamm.external_circuit.PowerFunctionControl(
+ self.param, self.options, "differential without max"
+ )
+ elif self.options["operating mode"] == "resistance":
+ model = pybamm.external_circuit.ResistanceFunctionControl(
+ self.param, self.options, "algebraic"
+ )
+ elif self.options["operating mode"] == "differential resistance":
+ model = pybamm.external_circuit.ResistanceFunctionControl(
+ self.param, self.options, "differential without max"
+ )
+ elif self.options["operating mode"] == "CCCV":
+ model = pybamm.external_circuit.CCCVFunctionControl(
+ self.param, self.options
+ )
+ elif callable(self.options["operating mode"]):
+ model = pybamm.external_circuit.FunctionControl(
+ self.param,
+ self.options["operating mode"],
+ self.options,
+ control="differential without max",
+ )
+ self.submodels["external circuit"] = model
+
+ def set_ocv_submodel(self):
+ self.submodels[
+ "Open circuit voltage"
+ ] = pybamm.equivalent_circuit_elements.OCVElement(self.param, self.ecm_options)
+
+ def set_resistor_submodel(self):
+
+ name = "Element-0 (Resistor)"
+ self.submodels[name] = pybamm.equivalent_circuit_elements.ResistorElement(
+ self.param, self.ecm_options
+ )
+ self.element_counter += 1
+
+ def set_rc_submodels(self):
+ number_of_rc_elements = self.ecm_options["number of rc elements"]
+
+ for _ in range(number_of_rc_elements):
+ name = f"Element-{self.element_counter} (RC)"
+ self.submodels[name] = pybamm.equivalent_circuit_elements.RCElement(
+ self.param, self.element_counter, self.ecm_options
+ )
+ self.element_counter += 1
+
+ def set_thermal_submodel(self):
+ self.submodels["Thermal"] = pybamm.equivalent_circuit_elements.ThermalSubModel(
+ self.param, self.ecm_options
+ )
+
+ def set_voltage_submodel(self):
+ self.submodels["Voltage"] = pybamm.equivalent_circuit_elements.VoltageModel(
+ self.param, self.ecm_options
+ )
+
+ def set_submodels(self, build):
+ self.set_external_circuit_submodel()
+ self.set_ocv_submodel()
+ self.set_resistor_submodel()
+ self.set_rc_submodels()
+ self.set_thermal_submodel()
+ self.set_voltage_submodel()
+
+ self.summary_variables = []
+
+ if build:
+ self.build_model()
+
+ def build_model(self):
+
+ # Build model variables and equations
+ self._build_model()
+
+ self._built = True
+ pybamm.logger.info("Finished building {}".format(self.name))
+
+ @property
+ def default_parameter_values(self):
+ return pybamm.ParameterValues("ECM_Example")
+
+ @property
+ def default_quick_plot_variables(self):
+ return [
+ "Current [A]",
+ ["Terminal voltage [V]", "Open circuit voltage [V]"],
+ "SoC",
+ "Power [W]",
+ [
+ "Cell temperature [degC]",
+ "Jig temperature [degC]",
+ "Ambient temperature [degC]",
+ ],
+ [
+ "Total heat generation [W]",
+ "Reversible heat generation [W]",
+ "Irreversible heat generation [W]",
+ ],
+ ]
diff --git a/pybamm/models/full_battery_models/lead_acid/__init__.py b/pybamm/models/full_battery_models/lead_acid/__init__.py
index 3bfef51e4b..5895bddeb4 100644
--- a/pybamm/models/full_battery_models/lead_acid/__init__.py
+++ b/pybamm/models/full_battery_models/lead_acid/__init__.py
@@ -3,12 +3,5 @@
#
from .base_lead_acid_model import BaseModel
from .loqs import LOQS
-from .higher_order import (
- BaseHigherOrderModel,
- FOQS,
- Composite,
- CompositeAverageCorrection,
- CompositeExtended,
-)
from .full import Full
from .basic_full import BasicFull
diff --git a/pybamm/models/full_battery_models/lead_acid/basic_full.py b/pybamm/models/full_battery_models/lead_acid/basic_full.py
index 5b5d0f232f..2749f6c249 100644
--- a/pybamm/models/full_battery_models/lead_acid/basic_full.py
+++ b/pybamm/models/full_battery_models/lead_acid/basic_full.py
@@ -181,7 +181,7 @@ def __init__(self, name="Basic full model"):
# Current in the electrolyte
######################
i_e = (param.kappa_e(c_e, T) * tor * param.gamma_e / param.C_e) * (
- param.chiT_over_c(c_e, T) * pybamm.grad(c_e) - pybamm.grad(phi_e)
+ param.chiRT_over_Fc(c_e, T) * pybamm.grad(c_e) - pybamm.grad(phi_e)
)
self.algebraic[phi_e] = pybamm.div(i_e) - j
self.boundary_conditions[phi_e] = {
diff --git a/pybamm/models/full_battery_models/lead_acid/higher_order.py b/pybamm/models/full_battery_models/lead_acid/higher_order.py
deleted file mode 100644
index 72cf5cdbdb..0000000000
--- a/pybamm/models/full_battery_models/lead_acid/higher_order.py
+++ /dev/null
@@ -1,341 +0,0 @@
-#
-# Lead-acid higher-order models (FOQS and Composite)
-#
-import pybamm
-from .base_lead_acid_model import BaseModel
-
-
-class BaseHigherOrderModel(BaseModel):
- """
- Base model for higher-order models for lead-acid, from [1]_.
- Uses leading-order model from :class:`pybamm.lead_acid.LOQS`
-
- Parameters
- ----------
- options : dict, optional
- A dictionary of options to be passed to the model. For a detailed list of
- options see :class:`~pybamm.BatteryModelOptions`.
- name : str, optional
- The name of the model.
- build : bool, optional
- Whether to build the model on instantiation. Default is True. Setting this
- option to False allows users to change any number of the submodels before
- building the complete model (submodels cannot be changed after the model is
- built).
-
- References
- ----------
- .. [1] V Sulzer, SJ Chapman, CP Please, DA Howey, and CW Monroe. Faster lead-acid
- battery simulations from porous-electrode theory: Part II. Asymptotic
- analysis. Journal of The Electrochemical Society 166.12 (2019), A2372–A2382.
-
-
- **Extends:** :class:`pybamm.lead_acid.BaseModel`
- """
-
- def __init__(self, options=None, name="Composite model", build=True):
- super().__init__(options, name)
-
- self.set_external_circuit_submodel()
- self.set_leading_order_model()
- self.set_interface_utilisation_submodel()
- # Electrolyte submodel to get first-order concentrations
- self.set_electrolyte_diffusion_submodel()
- self.set_other_species_diffusion_submodels()
- # Average interface submodel to get average first-order potential differences
- self.set_open_circuit_potential_submodel()
- self.set_average_interfacial_submodel()
- # Electrolyte and solid submodels to get full first-order potentials
- self.set_negative_electrode_submodel()
- self.set_electrolyte_conductivity_submodel()
- self.set_positive_electrode_submodel()
- # Update interface, porosity and convection with full potentials
- self.set_full_interface_submodel()
- self.set_full_convection_submodel()
- self.set_full_porosity_submodel()
- self.set_active_material_submodel()
- self.set_transport_efficiency_submodels()
- self.set_thermal_submodel()
- self.set_current_collector_submodel()
- self.set_sei_submodel()
- self.set_lithium_plating_submodel()
- self.set_total_interface_submodel()
-
- if build:
- self.build_model()
-
- pybamm.citations.register("Sulzer2019asymptotic")
-
- def set_current_collector_submodel(self):
- cc = pybamm.current_collector
-
- if self.options["current collector"] in ["uniform"]:
- submodel = cc.Uniform(self.param)
- elif self.options["current collector"] == "potential pair quite conductive":
- if self.options["dimensionality"] == 1:
- submodel = cc.QuiteConductivePotentialPair1plus1D(self.param)
- elif self.options["dimensionality"] == 2:
- submodel = cc.QuiteConductivePotentialPair2plus1D(self.param)
- elif self.options["current collector"] == "potential pair":
- if self.options["dimensionality"] == 1:
- submodel = cc.CompositePotentialPair1plus1D(self.param)
- elif self.options["dimensionality"] == 2:
- submodel = cc.CompositePotentialPair2plus1D(self.param)
- self.submodels["current collector"] = submodel
-
- def set_leading_order_model(self):
- leading_order_model = pybamm.lead_acid.LOQS(
- self.options, name="LOQS model (for composite model)"
- )
- self.update(leading_order_model)
- self.leading_order_reaction_submodels = leading_order_model.reaction_submodels
-
- # Leading-order variables
- leading_order_variables = {}
- for variable in self.variables.keys():
- leading_order_variables[
- "Leading-order " + variable.lower()
- ] = leading_order_model.variables[variable]
- self.variables.update(leading_order_variables)
- self.variables[
- "Leading-order electrolyte concentration change"
- ] = leading_order_model.rhs[
- leading_order_model.variables["X-averaged electrolyte concentration"]
- ]
-
- def set_average_interfacial_submodel(self):
- self.submodels[
- "x-averaged negative interface"
- ] = pybamm.kinetics.InverseFirstOrderKinetics(
- self.param,
- "negative",
- self.leading_order_reaction_submodels["negative"],
- self.options,
- )
- self.submodels[
- "x-averaged positive interface"
- ] = pybamm.kinetics.InverseFirstOrderKinetics(
- self.param,
- "positive",
- self.leading_order_reaction_submodels["positive"],
- self.options,
- )
-
- def set_electrolyte_conductivity_submodel(self):
- self.submodels[
- "electrolyte conductivity"
- ] = pybamm.electrolyte_conductivity.Composite(
- self.param, higher_order_terms="first-order"
- )
-
- def set_negative_electrode_submodel(self):
- self.submodels["negative electrode potential"] = pybamm.electrode.ohm.Composite(
- self.param, "negative"
- )
-
- def set_positive_electrode_submodel(self):
- self.submodels["positive electrode potential"] = pybamm.electrode.ohm.Composite(
- self.param, "positive"
- )
-
- def set_full_interface_submodel(self):
- """
- Set full interface submodel, to get spatially heterogeneous interfacial current
- densities
- """
- # Main reaction
- self.submodels["negative interface"] = pybamm.kinetics.FirstOrderKinetics(
- self.param,
- "negative",
- pybamm.kinetics.SymmetricButlerVolmer(
- self.param, "negative", "lead-acid main", self.options
- ),
- self.options,
- )
- self.submodels["positive interface"] = pybamm.kinetics.FirstOrderKinetics(
- self.param,
- "positive",
- pybamm.kinetics.SymmetricButlerVolmer(
- self.param, "positive", "lead-acid main", self.options
- ),
- self.options,
- )
-
- # Oxygen
- if self.options["hydrolysis"] == "true":
- self.submodels[
- "positive oxygen interface"
- ] = pybamm.kinetics.FirstOrderKinetics(
- self.param,
- "positive",
- pybamm.kinetics.ForwardTafel(
- self.param, "positive", "lead-acid oxygen", self.options
- ),
- self.options,
- )
- self.submodels[
- "negative oxygen interface"
- ] = pybamm.kinetics.DiffusionLimited(
- self.param,
- "negative",
- "lead-acid oxygen",
- self.options,
- order="composite",
- )
-
- def set_full_convection_submodel(self):
- """
- Update convection submodel, now that we have the spatially heterogeneous
- interfacial current densities
- """
- if self.options["convection"] != "none":
- self.submodels[
- "through-cell convection"
- ] = pybamm.convection.through_cell.Explicit(self.param)
-
- def set_full_porosity_submodel(self):
- """
- Update porosity submodel, now that we have the spatially heterogeneous
- interfacial current densities
- """
- self.submodels["full porosity"] = pybamm.porosity.ReactionDrivenODE(
- self.param, self.options, False
- )
-
-
-class FOQS(BaseHigherOrderModel):
- """
- First-order quasi-static model for lead-acid, from [1]_.
- Uses leading-order model from :class:`pybamm.lead_acid.LOQS`
-
- Parameters
- ----------
- options : dict, optional
- A dictionary of options to be passed to the model. For a detailed list of
- options see :class:`~pybamm.BatteryModelOptions`.
- name : str, optional
- The name of the model.
- build : bool, optional
- Whether to build the model on instantiation. Default is True. Setting this
- option to False allows users to change any number of the submodels before
- building the complete model (submodels cannot be changed after the model is
- built).
-
- **Extends:** :class:`pybamm.lead_acid.BaseHigherOrderModel`
- """
-
- def __init__(self, options=None, name="FOQS model", build=True):
- super().__init__(options, name, build=build)
-
- def set_electrolyte_diffusion_submodel(self):
- self.submodels[
- "electrolyte diffusion"
- ] = pybamm.electrolyte_diffusion.FirstOrder(self.param)
-
- def set_other_species_diffusion_submodels(self):
- if self.options["hydrolysis"] == "true":
- self.submodels["oxygen diffusion"] = pybamm.oxygen_diffusion.FirstOrder(
- self.param
- )
-
- def set_full_porosity_submodel(self):
- """
- Update porosity submodel, now that we have the spatially heterogeneous
- interfacial current densities
- """
- # TODO: fix shape for jacobian
- pass
-
-
-class Composite(BaseHigherOrderModel):
- """
- Composite model for lead-acid, from [1]_.
- Uses leading-order model from :class:`pybamm.lead_acid.LOQS`
-
- **Extends:** :class:`pybamm.lead_acid.BaseHigherOrderModel`
- """
-
- def __init__(self, options=None, name="Composite model", build=True):
- super().__init__(options, name, build=build)
-
- def set_electrolyte_diffusion_submodel(self):
- self.submodels[
- "electrolyte diffusion"
- ] = pybamm.electrolyte_diffusion.Composite(self.param)
-
- def set_other_species_diffusion_submodels(self):
- if self.options["hydrolysis"] == "true":
- self.submodels["oxygen diffusion"] = pybamm.oxygen_diffusion.Composite(
- self.param
- )
-
- def set_full_porosity_submodel(self):
- """
- Update porosity submodel, now that we have the spatially heterogeneous
- interfacial current densities
- """
- self.submodels["full porosity"] = pybamm.porosity.ReactionDrivenODE(
- self.param, self.options, False
- )
-
-
-class CompositeExtended(Composite):
- """
- Extended composite model for lead-acid.
- Uses leading-order model from :class:`pybamm.lead_acid.LOQS`
-
- Parameters
- ----------
- options : dict, optional
- A dictionary of options to be passed to the model. For a detailed list of
- options see :class:`~pybamm.BatteryModelOptions`.
- name : str, optional
- The name of the model.
- build : bool, optional
- Whether to build the model on instantiation. Default is True. Setting this
- option to False allows users to change any number of the submodels before
- building the complete model (submodels cannot be changed after the model is
- built).
-
-
- **Extends:** :class:`pybamm.lead_acid.BaseHigherOrderModel`
- """
-
- def __init__(
- self, options=None, name="Extended composite model (distributed)", build=True
- ):
- super().__init__(options, name, build=build)
-
- def set_electrolyte_diffusion_submodel(self):
- self.submodels[
- "electrolyte diffusion"
- ] = pybamm.electrolyte_diffusion.Composite(self.param, extended="distributed")
-
- def set_other_species_diffusion_submodels(self):
- if self.options["hydrolysis"] == "true":
- self.submodels["oxygen diffusion"] = pybamm.oxygen_diffusion.Composite(
- self.param, extended="distributed"
- )
-
-
-class CompositeAverageCorrection(Composite):
- """
- Extended composite model for lead-acid.
- Uses leading-order model from :class:`pybamm.lead_acid.LOQS`
-
- **Extends:** :class:`pybamm.lead_acid.BaseHigherOrderModel`
- """
-
- def __init__(self, options=None, name="Extended composite model (average)"):
- super().__init__(options, name)
-
- def set_electrolyte_diffusion_submodel(self):
- self.submodels[
- "electrolyte diffusion"
- ] = pybamm.electrolyte_diffusion.Composite(self.param, extended="average")
-
- def set_other_species_diffusion_submodels(self):
- if self.options["hydrolysis"] == "true":
- self.submodels["oxygen diffusion"] = pybamm.oxygen_diffusion.Composite(
- self.param, extended="average"
- )
diff --git a/pybamm/models/full_battery_models/lead_acid/loqs.py b/pybamm/models/full_battery_models/lead_acid/loqs.py
index 339cb53107..c4839a23ea 100644
--- a/pybamm/models/full_battery_models/lead_acid/loqs.py
+++ b/pybamm/models/full_battery_models/lead_acid/loqs.py
@@ -67,26 +67,20 @@ def set_external_circuit_submodel(self):
"""
if self.options["operating mode"] == "current":
self.submodels[
- "leading order external circuit"
- ] = pybamm.external_circuit.LeadingOrderExplicitCurrentControl(
- self.param, self.options
- )
+ "external circuit"
+ ] = pybamm.external_circuit.ExplicitCurrentControl(self.param, self.options)
elif self.options["operating mode"] == "voltage":
self.submodels[
- "leading order external circuit"
- ] = pybamm.external_circuit.LeadingOrderVoltageFunctionControl(
- self.param, self.options
- )
+ "external circuit"
+ ] = pybamm.external_circuit.VoltageFunctionControl(self.param, self.options)
elif self.options["operating mode"] == "power":
self.submodels[
- "leading order external circuit"
- ] = pybamm.external_circuit.LeadingOrderPowerFunctionControl(
- self.param, self.options
- )
+ "external circuit"
+ ] = pybamm.external_circuit.PowerFunctionControl(self.param, self.options)
elif callable(self.options["operating mode"]):
self.submodels[
- "leading order external circuit"
- ] = pybamm.external_circuit.LeadingOrderFunctionControl(
+ "external circuit"
+ ] = pybamm.external_circuit.FunctionControl(
self.param, self.options["operating mode"], self.options
)
@@ -110,14 +104,6 @@ def set_porosity_submodel(self):
self.param, self.options, True
)
- def set_transport_efficiency_submodels(self):
- self.submodels[
- "leading-order electrolyte transport efficiency"
- ] = pybamm.transport_efficiency.Bruggeman(self.param, "Electrolyte")
- self.submodels[
- "leading-order electrode transport efficiency"
- ] = pybamm.transport_efficiency.Bruggeman(self.param, "Electrode")
-
def set_convection_submodel(self):
if self.options["convection"] == "none":
diff --git a/pybamm/models/full_battery_models/lithium_ion/base_lithium_ion_model.py b/pybamm/models/full_battery_models/lithium_ion/base_lithium_ion_model.py
index c672594ae4..02db54f03c 100644
--- a/pybamm/models/full_battery_models/lithium_ion/base_lithium_ion_model.py
+++ b/pybamm/models/full_battery_models/lithium_ion/base_lithium_ion_model.py
@@ -416,3 +416,11 @@ def set_li_metal_counter_electrode_submodels(self):
] = neg_intercalation_kinetics(
self.param, domain, "lithium metal plating", self.options, "primary"
)
+
+ def set_convection_submodel(self):
+ self.submodels[
+ "transverse convection"
+ ] = pybamm.convection.transverse.NoConvection(self.param, self.options)
+ self.submodels[
+ "through-cell convection"
+ ] = pybamm.convection.through_cell.NoConvection(self.param, self.options)
diff --git a/pybamm/models/full_battery_models/lithium_ion/basic_dfn.py b/pybamm/models/full_battery_models/lithium_ion/basic_dfn.py
index 4e39bf74f9..281925076d 100644
--- a/pybamm/models/full_battery_models/lithium_ion/basic_dfn.py
+++ b/pybamm/models/full_battery_models/lithium_ion/basic_dfn.py
@@ -223,7 +223,7 @@ def __init__(self, name="Doyle-Fuller-Newman model"):
# Current in the electrolyte
######################
i_e = (param.kappa_e(c_e, T) * tor * param.gamma_e / param.C_e) * (
- param.chiT_over_c(c_e, T) * pybamm.grad(c_e) - pybamm.grad(phi_e)
+ param.chiRT_over_Fc(c_e, T) * pybamm.grad(c_e) - pybamm.grad(phi_e)
)
self.algebraic[phi_e] = pybamm.div(i_e) - j
self.boundary_conditions[phi_e] = {
diff --git a/pybamm/models/full_battery_models/lithium_ion/basic_dfn_half_cell.py b/pybamm/models/full_battery_models/lithium_ion/basic_dfn_half_cell.py
index 167c9f1eb9..8600dc6130 100644
--- a/pybamm/models/full_battery_models/lithium_ion/basic_dfn_half_cell.py
+++ b/pybamm/models/full_battery_models/lithium_ion/basic_dfn_half_cell.py
@@ -248,7 +248,7 @@ def __init__(self, options=None, name="Doyle-Fuller-Newman half cell model"):
# Current in the electrolyte
######################
i_e = (param.kappa_e(c_e, T) * tor * gamma_e / param.C_e) * (
- param.chiT_over_c(c_e, T) * pybamm.grad(c_e) - pybamm.grad(phi_e)
+ param.chiRT_over_Fc(c_e, T) * pybamm.grad(c_e) - pybamm.grad(phi_e)
)
self.algebraic[phi_e] = pybamm.div(i_e) - j
diff --git a/pybamm/models/full_battery_models/lithium_ion/dfn.py b/pybamm/models/full_battery_models/lithium_ion/dfn.py
index 856eb3af03..83e62fc15f 100644
--- a/pybamm/models/full_battery_models/lithium_ion/dfn.py
+++ b/pybamm/models/full_battery_models/lithium_ion/dfn.py
@@ -47,15 +47,6 @@ def __init__(self, options=None, name="Doyle-Fuller-Newman model", build=True):
pybamm.citations.register("Doyle1993")
- def set_convection_submodel(self):
-
- self.submodels[
- "transverse convection"
- ] = pybamm.convection.transverse.NoConvection(self.param, self.options)
- self.submodels[
- "through-cell convection"
- ] = pybamm.convection.through_cell.NoConvection(self.param, self.options)
-
def set_intercalation_kinetics_submodel(self):
for domain in ["negative", "positive"]:
electrode_type = self.options.electrode_types[domain]
diff --git a/pybamm/models/full_battery_models/lithium_ion/electrode_soh.py b/pybamm/models/full_battery_models/lithium_ion/electrode_soh.py
index 8b44d8be44..54b70261dc 100644
--- a/pybamm/models/full_battery_models/lithium_ion/electrode_soh.py
+++ b/pybamm/models/full_battery_models/lithium_ion/electrode_soh.py
@@ -3,6 +3,7 @@
#
import pybamm
import numpy as np
+from functools import lru_cache
class ElectrodeSOH(pybamm.BaseModel):
@@ -246,28 +247,18 @@ def __init__(self, parameter_values, param=None):
- self.param.n.prim.U_dimensional(x, T)
)
+ @lru_cache
def _get_electrode_soh_sims_full(self):
- try:
- return self._full_sim
- except AttributeError:
- full_model = ElectrodeSOH(param=self.param)
- self._full_sim = pybamm.Simulation(
- full_model, parameter_values=self.parameter_values
- )
- return self._full_sim
+ full_model = ElectrodeSOH(param=self.param)
+ return pybamm.Simulation(full_model, parameter_values=self.parameter_values)
+ @lru_cache
def _get_electrode_soh_sims_split(self):
- try:
- return self._split_sims
- except AttributeError:
- x100_model = ElectrodeSOHx100(param=self.param)
- x100_sim = pybamm.Simulation(
- x100_model, parameter_values=self.parameter_values
- )
- x0_model = ElectrodeSOHx0(param=self.param)
- x0_sim = pybamm.Simulation(x0_model, parameter_values=self.parameter_values)
- self._split_sims = [x100_sim, x0_sim]
- return self._split_sims
+ x100_model = ElectrodeSOHx100(param=self.param)
+ x100_sim = pybamm.Simulation(x100_model, parameter_values=self.parameter_values)
+ x0_model = ElectrodeSOHx0(param=self.param)
+ x0_sim = pybamm.Simulation(x0_model, parameter_values=self.parameter_values)
+ return [x100_sim, x0_sim]
def solve(self, inputs):
ics = self._set_up_solve(inputs)
@@ -286,19 +277,24 @@ def solve(self, inputs):
return sol
def _set_up_solve(self, inputs):
+ # Try with full sim
sim = self._get_electrode_soh_sims_full()
- x0_min, x100_max, _, _ = self._get_lims(inputs)
-
- x100_init = x100_max
- x0_init = x0_min
if sim.solution is not None:
- # Update the initial conditions if they are valid
- x100_init_sol = sim.solution["x_100"].data[0]
- if x0_min < x100_init_sol < x100_max:
- x100_init = x100_init_sol
- x0_init_sol = sim.solution["x_0"].data[0]
- if x0_min < x0_init_sol < x100_max:
- x0_init = x0_init_sol
+ x100_sol = sim.solution["x_100"].data
+ x0_sol = sim.solution["x_0"].data
+ return {"x_100": x100_sol, "x_0": x0_sol}
+
+ # Try with split sims
+ x100_sim, x0_sim = self._get_electrode_soh_sims_split()
+ if x100_sim.solution is not None and x0_sim.solution is not None:
+ x100_sol = x100_sim.solution["x_100"].data
+ x0_sol = x0_sim.solution["x_0"].data
+ return {"x_100": x100_sol, "x_0": x0_sol}
+
+ # Fall back to initial conditions calculated from limits
+ x0_min, x100_max, _, _ = self._get_lims(inputs)
+ x100_init = min(x100_max, 0.8)
+ x0_init = max(x0_min, 0.2)
return {"x_100": np.array(x100_init), "x_0": np.array(x0_init)}
def _solve_full(self, inputs, ics):
@@ -362,9 +358,11 @@ def _check_esoh_feasible(self, inputs):
# Check that the min and max achievable voltages span wider than the desired
# voltage range
- V_lower_bound = self.OCV_function.evaluate(inputs={"x": x0_min, "y": y0_max})
- V_upper_bound = self.OCV_function.evaluate(
- inputs={"x": x100_max, "y": y100_min}
+ V_lower_bound = float(
+ self.OCV_function.evaluate(inputs={"x": x0_min, "y": y0_max})
+ )
+ V_upper_bound = float(
+ self.OCV_function.evaluate(inputs={"x": x100_max, "y": y100_min})
)
if V_lower_bound > Vmin:
raise (
diff --git a/pybamm/models/full_battery_models/lithium_ion/spm.py b/pybamm/models/full_battery_models/lithium_ion/spm.py
index 6754817a24..af16e15f53 100644
--- a/pybamm/models/full_battery_models/lithium_ion/spm.py
+++ b/pybamm/models/full_battery_models/lithium_ion/spm.py
@@ -70,15 +70,6 @@ def __init__(self, options=None, name="Single Particle Model", build=True):
):
pybamm.citations.register("BrosaPlanella2022")
- def set_convection_submodel(self):
-
- self.submodels[
- "through-cell convection"
- ] = pybamm.convection.through_cell.NoConvection(self.param, self.options)
- self.submodels[
- "transverse convection"
- ] = pybamm.convection.transverse.NoConvection(self.param, self.options)
-
def set_intercalation_kinetics_submodel(self):
for domain in ["negative", "positive"]:
diff --git a/pybamm/models/full_battery_models/lithium_ion/spme.py b/pybamm/models/full_battery_models/lithium_ion/spme.py
index 5458ccfe14..e9210ac309 100644
--- a/pybamm/models/full_battery_models/lithium_ion/spme.py
+++ b/pybamm/models/full_battery_models/lithium_ion/spme.py
@@ -48,27 +48,6 @@ def __init__(
# Initialize with the SPM
super().__init__(options, name, build)
- def set_convection_submodel(self):
-
- self.submodels[
- "through-cell convection"
- ] = pybamm.convection.through_cell.NoConvection(self.param, self.options)
- self.submodels[
- "transverse convection"
- ] = pybamm.convection.transverse.NoConvection(self.param, self.options)
-
- def set_transport_efficiency_submodels(self):
- self.submodels[
- "electrolyte transport efficiency"
- ] = pybamm.transport_efficiency.Bruggeman(
- self.param, "Electrolyte", self.options, True
- )
- self.submodels[
- "electrode transport efficiency"
- ] = pybamm.transport_efficiency.Bruggeman(
- self.param, "Electrode", self.options, True
- )
-
def set_solid_submodel(self):
for domain in ["negative", "positive"]:
if self.options.electrode_types[domain] == "porous":
diff --git a/pybamm/models/submodels/current_collector/__init__.py b/pybamm/models/submodels/current_collector/__init__.py
index 40be04244d..b721f14394 100644
--- a/pybamm/models/submodels/current_collector/__init__.py
+++ b/pybamm/models/submodels/current_collector/__init__.py
@@ -10,13 +10,3 @@
PotentialPair1plus1D,
PotentialPair2plus1D,
)
-from .composite_potential_pair import (
- BaseCompositePotentialPair,
- CompositePotentialPair1plus1D,
- CompositePotentialPair2plus1D,
-)
-from .quite_conductive_potential_pair import (
- BaseQuiteConductivePotentialPair,
- QuiteConductivePotentialPair1plus1D,
- QuiteConductivePotentialPair2plus1D,
-)
diff --git a/pybamm/models/submodels/current_collector/composite_potential_pair.py b/pybamm/models/submodels/current_collector/composite_potential_pair.py
deleted file mode 100644
index f92ecbbb76..0000000000
--- a/pybamm/models/submodels/current_collector/composite_potential_pair.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Class for one- and two-dimensional composite potential pair current collector models
-#
-import pybamm
-from .potential_pair import (
- BasePotentialPair,
- PotentialPair1plus1D,
- PotentialPair2plus1D,
-)
-
-
-class BaseCompositePotentialPair(BasePotentialPair):
- """
- Composite potential pair model for the current collectors.
- This is identical to the BasePotentialPair model, except the name of the fundamental
- variables are changed to avoid clashes with leading order.
-
- Parameters
- ----------
- param : parameter class
- The parameters to use for this submodel
-
-
- **Extends:** :class:`pybamm.current_collector.BasePotentialPair`
- """
-
- def __init__(self, param):
- super().__init__(param)
-
- def get_fundamental_variables(self):
-
- phi_s_cn = pybamm.standard_variables.phi_s_cn_composite
-
- variables = self._get_standard_negative_potential_variables(phi_s_cn)
-
- # TODO: grad not implemented for 2D yet
- i_cc = pybamm.Scalar(0)
- i_boundary_cc = pybamm.standard_variables.i_boundary_cc_composite
-
- variables.update(self._get_standard_current_variables(i_cc, i_boundary_cc))
-
- variables.update(
- {
- "Composite negative current collector potential": phi_s_cn,
- "Composite current collector current density": i_boundary_cc,
- }
- )
-
- return variables
-
-
-class CompositePotentialPair1plus1D(BaseCompositePotentialPair, PotentialPair1plus1D):
- def __init__(self, param):
- super().__init__(param)
-
-
-class CompositePotentialPair2plus1D(BaseCompositePotentialPair, PotentialPair2plus1D):
- def __init__(self, param):
- super().__init__(param)
diff --git a/pybamm/models/submodels/current_collector/homogeneous_current_collector.py b/pybamm/models/submodels/current_collector/homogeneous_current_collector.py
index a8b7267932..6d6b18285f 100644
--- a/pybamm/models/submodels/current_collector/homogeneous_current_collector.py
+++ b/pybamm/models/submodels/current_collector/homogeneous_current_collector.py
@@ -36,12 +36,4 @@ def get_coupled_variables(self, variables):
variables = self._get_standard_current_variables(i_cc, i_boundary_cc)
- # Hack to get the leading-order current collector current density
- # Note that this should be different from the actual (composite) current
- # collector current density for 2+1D models, but not sure how to implement this
- # using current structure of lithium-ion models
- variables["Leading-order current collector current density"] = variables[
- "Current collector current density"
- ]
-
return variables
diff --git a/pybamm/models/submodels/current_collector/potential_pair.py b/pybamm/models/submodels/current_collector/potential_pair.py
index ce43c2c806..1bf96449d6 100644
--- a/pybamm/models/submodels/current_collector/potential_pair.py
+++ b/pybamm/models/submodels/current_collector/potential_pair.py
@@ -42,13 +42,6 @@ def get_fundamental_variables(self):
i_boundary_cc = pybamm.standard_variables.i_boundary_cc
variables.update(self._get_standard_current_variables(i_cc, i_boundary_cc))
- # Hack to get the leading-order current collector current density
- # Note that this should be different from the actual (composite) current
- # collector current density for 2+1D models, but not sure how to implement this
- # using current structure of lithium-ion models
- variables["Leading-order current collector current density"] = variables[
- "Current collector current density"
- ]
return variables
diff --git a/pybamm/models/submodels/current_collector/quite_conductive_potential_pair.py b/pybamm/models/submodels/current_collector/quite_conductive_potential_pair.py
deleted file mode 100644
index 4c586119c5..0000000000
--- a/pybamm/models/submodels/current_collector/quite_conductive_potential_pair.py
+++ /dev/null
@@ -1,100 +0,0 @@
-#
-# Class for one- and two-dimensional potential pair "quite conductive"
-# current collector models
-#
-import pybamm
-from .potential_pair import (
- BasePotentialPair,
- PotentialPair1plus1D,
- PotentialPair2plus1D,
-)
-
-
-class BaseQuiteConductivePotentialPair(BasePotentialPair):
- """A submodel for Ohm's law plus conservation of current in the current collectors,
- in the limit of quite conductive electrodes.
-
- Parameters
- ----------
- param : parameter class
- The parameters to use for this submodel
-
-
- **Extends:** :class:`pybamm.current_collector.BaseModel`
- """
-
- def __init__(self, param):
- super().__init__(param)
-
- def get_fundamental_variables(self):
-
- phi_s_cn = pybamm.standard_variables.phi_s_cn
-
- variables = self._get_standard_negative_potential_variables(phi_s_cn)
-
- # TODO: grad not implemented for 2D yet
- i_cc = pybamm.Scalar(0)
- i_boundary_cc = pybamm.standard_variables.i_boundary_cc
-
- variables.update(self._get_standard_current_variables(i_cc, i_boundary_cc))
-
- # Lagrange multiplier for the composite current (enforce average)
- c = pybamm.Variable("Lagrange multiplier")
- variables.update({"Lagrange multiplier": c})
-
- return variables
-
- def set_algebraic(self, variables):
-
- param = self.param
- applied_current = variables["Total current density"]
- cc_area = self._get_effective_current_collector_area()
- z = pybamm.standard_spatial_vars.z
-
- phi_s_cn = variables["Negative current collector potential"]
- phi_s_cp = variables["Positive current collector potential"]
- i_boundary_cc = variables["Current collector current density"]
- i_boundary_cc_0 = variables["Leading-order current collector current density"]
- c = variables["Lagrange multiplier"]
-
- # Note that the second argument of 'source' must be the same as the argument
- # in the laplacian (the variable to which the boundary conditions are applied)
- self.algebraic = {
- phi_s_cn: (param.n.sigma_cc * param.delta**2 * param.n.l_cc)
- * pybamm.laplacian(phi_s_cn)
- - pybamm.source(i_boundary_cc_0, phi_s_cn),
- i_boundary_cc: (param.p.sigma_cc * param.delta**2 * param.p.l_cc)
- * pybamm.laplacian(phi_s_cp)
- + pybamm.source(i_boundary_cc_0, phi_s_cp)
- + c * pybamm.PrimaryBroadcast(cc_area, "current collector"),
- c: pybamm.Integral(i_boundary_cc, z) - applied_current / cc_area,
- }
-
- def set_initial_conditions(self, variables):
-
- param = self.param
- applied_current = param.current_with_time
- cc_area = self._get_effective_current_collector_area()
- phi_s_cn = variables["Negative current collector potential"]
- i_boundary_cc = variables["Current collector current density"]
- c = variables["Lagrange multiplier"]
-
- self.initial_conditions = {
- phi_s_cn: pybamm.Scalar(0),
- i_boundary_cc: applied_current / cc_area,
- c: pybamm.Scalar(0),
- }
-
-
-class QuiteConductivePotentialPair1plus1D(
- BaseQuiteConductivePotentialPair, PotentialPair1plus1D
-):
- def __init__(self, param):
- super().__init__(param)
-
-
-class QuiteConductivePotentialPair2plus1D(
- BaseQuiteConductivePotentialPair, PotentialPair2plus1D
-):
- def __init__(self, param):
- super().__init__(param)
diff --git a/pybamm/models/submodels/electrode/ohm/composite_ohm.py b/pybamm/models/submodels/electrode/ohm/composite_ohm.py
index 24cace6337..a792903923 100644
--- a/pybamm/models/submodels/electrode/ohm/composite_ohm.py
+++ b/pybamm/models/submodels/electrode/ohm/composite_ohm.py
@@ -30,7 +30,7 @@ def get_coupled_variables(self, variables):
domain = self.domain
param = self.param
- i_boundary_cc_0 = variables["Leading-order current collector current density"]
+ i_boundary_cc = variables["Current collector current density"]
# import parameters and spatial variables
l_n = param.n.l
@@ -38,18 +38,16 @@ def get_coupled_variables(self, variables):
x_n = pybamm.standard_spatial_vars.x_n
x_p = pybamm.standard_spatial_vars.x_p
- tor_0 = variables[
- f"Leading-order x-averaged {domain} electrode transport efficiency"
- ]
+ tor = variables[f"X-averaged {domain} electrode transport efficiency"]
phi_s_cn = variables["Negative current collector potential"]
T = variables[f"X-averaged {domain} electrode temperature"]
- sigma_eff_0 = self.domain_param.sigma(T) * tor_0
+ sigma_eff = self.domain_param.sigma(T) * tor
if self._domain == "negative":
- phi_s = phi_s_cn + (i_boundary_cc_0 / sigma_eff_0) * (
+ phi_s = phi_s_cn + (i_boundary_cc / sigma_eff) * (
x_n * (x_n - 2 * l_n) / (2 * l_n)
)
- i_s = i_boundary_cc_0 * (1 - x_n / l_n)
+ i_s = i_boundary_cc * (1 - x_n / l_n)
elif self.domain == "positive":
delta_phi_p_av = variables[
@@ -60,13 +58,13 @@ def get_coupled_variables(self, variables):
const = (
delta_phi_p_av
+ phi_e_p_av
- + (i_boundary_cc_0 / sigma_eff_0) * (1 - l_p / 3)
+ + (i_boundary_cc / sigma_eff) * (1 - l_p / 3)
)
- phi_s = const - (i_boundary_cc_0 / sigma_eff_0) * (
+ phi_s = const - (i_boundary_cc / sigma_eff) * (
x_p + (x_p - 1) ** 2 / (2 * l_p)
)
- i_s = i_boundary_cc_0 * (1 - (1 - x_p) / l_p)
+ i_s = i_boundary_cc * (1 - (1 - x_p) / l_p)
variables.update(self._get_standard_potential_variables(phi_s))
variables.update(self._get_standard_current_variables(i_s))
@@ -80,10 +78,8 @@ def set_boundary_conditions(self, variables):
domain, Domain = self.domain_Domain
phi_s = variables[f"{Domain} electrode potential"]
- tor_0 = variables[
- f"Leading-order x-averaged {domain} electrode transport efficiency"
- ]
- i_boundary_cc_0 = variables["Leading-order current collector current density"]
+ tor = variables[f"X-averaged {domain} electrode transport efficiency"]
+ i_boundary_cc = variables["Current collector current density"]
T = variables[f"X-averaged {domain} electrode temperature"]
if self.domain == "negative":
@@ -92,7 +88,7 @@ def set_boundary_conditions(self, variables):
elif self.domain == "positive":
lbc = (pybamm.Scalar(0), "Neumann")
- sigma_eff_0 = self.param.p.sigma(T) * tor_0
- rbc = (-i_boundary_cc_0 / sigma_eff_0, "Neumann")
+ sigma_eff = self.param.p.sigma(T) * tor
+ rbc = (-i_boundary_cc / sigma_eff, "Neumann")
self.boundary_conditions[phi_s] = {"left": lbc, "right": rbc}
diff --git a/pybamm/models/submodels/electrolyte_conductivity/base_electrolyte_conductivity.py b/pybamm/models/submodels/electrolyte_conductivity/base_electrolyte_conductivity.py
index c44eb1d413..c7d35a73ea 100644
--- a/pybamm/models/submodels/electrolyte_conductivity/base_electrolyte_conductivity.py
+++ b/pybamm/models/submodels/electrolyte_conductivity/base_electrolyte_conductivity.py
@@ -256,7 +256,7 @@ def _get_electrolyte_overpotentials(self, variables):
c_e_n = variables["Negative electrolyte concentration"]
T_n = variables["Negative electrode temperature"]
indef_integral_n = pybamm.IndefiniteIntegral(
- param.chiT_over_c(c_e_n, T_n) * pybamm.grad(c_e_n),
+ param.chiRT_over_Fc(c_e_n, T_n) * pybamm.grad(c_e_n),
pybamm.standard_spatial_vars.x_n,
)
@@ -270,11 +270,11 @@ def _get_electrolyte_overpotentials(self, variables):
# concentration overpotential
indef_integral_s = pybamm.IndefiniteIntegral(
- param.chiT_over_c(c_e_s, T_s) * pybamm.grad(c_e_s),
+ param.chiRT_over_Fc(c_e_s, T_s) * pybamm.grad(c_e_s),
pybamm.standard_spatial_vars.x_s,
)
indef_integral_p = pybamm.IndefiniteIntegral(
- param.chiT_over_c(c_e_p, T_p) * pybamm.grad(c_e_p),
+ param.chiRT_over_Fc(c_e_p, T_p) * pybamm.grad(c_e_p),
pybamm.standard_spatial_vars.x_p,
)
diff --git a/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py b/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py
index a797773242..df36da19e5 100644
--- a/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py
+++ b/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py
@@ -23,47 +23,32 @@ class Composite(BaseElectrolyteConductivity):
**Extends:** :class:`pybamm.electrolyte_conductivity.BaseElectrolyteConductivity`
"""
- def __init__(
- self, param, domain=None, options=None, higher_order_terms="composite"
- ):
+ def __init__(self, param, domain=None, options=None):
super().__init__(param, domain, options=options)
- self.higher_order_terms = higher_order_terms
def _higher_order_macinnes_function(self, x):
"Function to differentiate between composite and first-order models"
- if self.higher_order_terms == "composite":
- tol = pybamm.settings.tolerances["macinnes__c_e"]
- x = pybamm.maximum(x, tol)
- return pybamm.log(x)
- elif self.higher_order_terms == "first-order":
- return x
+ tol = pybamm.settings.tolerances["macinnes__c_e"]
+ x = pybamm.maximum(x, tol)
+ return pybamm.log(x)
def get_coupled_variables(self, variables):
- if self.higher_order_terms == "composite":
- c_e_av = variables["X-averaged electrolyte concentration"]
- elif self.higher_order_terms == "first-order":
- c_e_av = variables["Leading-order x-averaged electrolyte concentration"]
+ c_e_av = variables["X-averaged electrolyte concentration"]
- i_boundary_cc_0 = variables["Leading-order current collector current density"]
+ i_boundary_cc = variables["Current collector current density"]
if self.options.electrode_types["negative"] == "porous":
c_e_n = variables["Negative electrolyte concentration"]
delta_phi_n_av = variables[
"X-averaged negative electrode surface potential difference"
]
phi_s_n_av = variables["X-averaged negative electrode potential"]
- tor_n_av = variables[
- "Leading-order x-averaged negative electrolyte transport efficiency"
- ]
+ tor_n_av = variables["X-averaged negative electrolyte transport efficiency"]
c_e_s = variables["Separator electrolyte concentration"]
c_e_p = variables["Positive electrolyte concentration"]
- tor_s_av = variables[
- "Leading-order x-averaged separator electrolyte transport efficiency"
- ]
- tor_p_av = variables[
- "Leading-order x-averaged positive electrolyte transport efficiency"
- ]
+ tor_s_av = variables["X-averaged separator electrolyte transport efficiency"]
+ tor_p_av = variables["X-averaged positive electrolyte transport efficiency"]
T_av = variables["X-averaged cell temperature"]
T_av_s = pybamm.PrimaryBroadcast(T_av, "separator")
@@ -91,9 +76,9 @@ def get_coupled_variables(self, variables):
chi_av_n = pybamm.PrimaryBroadcast(chi_av, "negative electrode")
T_av_n = pybamm.PrimaryBroadcast(T_av, "negative electrode")
kappa_n_av = param.kappa_e(c_e_av, T_av) * tor_n_av
- i_e_n = i_boundary_cc_0 * x_n / l_n
- i_e_s = pybamm.PrimaryBroadcast(i_boundary_cc_0, "separator")
- i_e_p = i_boundary_cc_0 * (1 - x_p) / l_p
+ i_e_n = i_boundary_cc * x_n / l_n
+ i_e_s = pybamm.PrimaryBroadcast(i_boundary_cc, "separator")
+ i_e_p = i_boundary_cc * (1 - x_p) / l_p
i_e = pybamm.concatenation(i_e_n, i_e_s, i_e_p)
phi_e_dict = {}
@@ -107,7 +92,7 @@ def get_coupled_variables(self, variables):
- chi_av
* (1 + param.Theta * T_av)
* self._higher_order_macinnes_function(c_e_n / c_e_av)
- + (i_boundary_cc_0 * param.C_e / param.gamma_e / kappa_s_av) * l_n
+ + (i_boundary_cc * param.C_e / param.gamma_e / kappa_s_av) * l_n
)
else:
phi_e_const = (
@@ -121,7 +106,7 @@ def get_coupled_variables(self, variables):
)
)
- (
- (i_boundary_cc_0 * param.C_e * l_n / param.gamma_e)
+ (i_boundary_cc * param.C_e * l_n / param.gamma_e)
* (1 / (3 * kappa_n_av) - 1 / kappa_s_av)
)
)
@@ -133,10 +118,10 @@ def get_coupled_variables(self, variables):
* (1 + param.Theta * T_av_n)
* self._higher_order_macinnes_function(c_e_n / c_e_av)
)
- - (i_boundary_cc_0 * (param.C_e / param.gamma_e) / kappa_n_av)
+ - (i_boundary_cc * (param.C_e / param.gamma_e) / kappa_n_av)
* (x_n**2 - l_n**2)
/ (2 * l_n)
- - i_boundary_cc_0 * l_n * (param.C_e / param.gamma_e) / kappa_s_av
+ - i_boundary_cc * l_n * (param.C_e / param.gamma_e) / kappa_s_av
)
phi_e_dict["negative electrode"] = phi_e_n
@@ -147,7 +132,7 @@ def get_coupled_variables(self, variables):
* (1 + param.Theta * T_av_s)
* self._higher_order_macinnes_function(c_e_s / c_e_av)
)
- - (i_boundary_cc_0 * param.C_e / param.gamma_e / kappa_s_av) * x_s
+ - (i_boundary_cc * param.C_e / param.gamma_e / kappa_s_av) * x_s
)
phi_e_p = (
@@ -157,10 +142,10 @@ def get_coupled_variables(self, variables):
* (1 + param.Theta * T_av_p)
* self._higher_order_macinnes_function(c_e_p / c_e_av)
)
- - (i_boundary_cc_0 * (param.C_e / param.gamma_e) / kappa_p_av)
+ - (i_boundary_cc * (param.C_e / param.gamma_e) / kappa_p_av)
* (x_p * (2 - x_p) + l_p**2 - 1)
/ (2 * l_p)
- - i_boundary_cc_0 * (1 - l_p) * (param.C_e / param.gamma_e) / kappa_s_av
+ - i_boundary_cc * (1 - l_p) * (param.C_e / param.gamma_e) / kappa_s_av
)
phi_e_dict["separator"] = phi_e_s
@@ -182,7 +167,7 @@ def get_coupled_variables(self, variables):
eta_c_av = chi_av * (1 + param.Theta * T_av) * (macinnes_c_e_p - macinnes_c_e_n)
# average electrolyte ohmic losses
- delta_phi_e_av = -(param.C_e * i_boundary_cc_0 / param.gamma_e) * (
+ delta_phi_e_av = -(param.C_e * i_boundary_cc / param.gamma_e) * (
ohmic_n + param.s.l / (kappa_s_av) + param.p.l / (3 * kappa_p_av)
)
diff --git a/pybamm/models/submodels/electrolyte_conductivity/full_conductivity.py b/pybamm/models/submodels/electrolyte_conductivity/full_conductivity.py
index 609a7fe79f..74d0569879 100644
--- a/pybamm/models/submodels/electrolyte_conductivity/full_conductivity.py
+++ b/pybamm/models/submodels/electrolyte_conductivity/full_conductivity.py
@@ -46,7 +46,7 @@ def get_coupled_variables(self, variables):
phi_e = variables["Electrolyte potential"]
i_e = (param.kappa_e(c_e, T) * tor * param.gamma_e / param.C_e) * (
- param.chiT_over_c(c_e, T) * pybamm.grad(c_e) - pybamm.grad(phi_e)
+ param.chiRT_over_Fc(c_e, T) * pybamm.grad(c_e) - pybamm.grad(phi_e)
)
# Override print_name
diff --git a/pybamm/models/submodels/electrolyte_conductivity/integrated_conductivity.py b/pybamm/models/submodels/electrolyte_conductivity/integrated_conductivity.py
index 47fa2a7d2e..3958b941e7 100644
--- a/pybamm/models/submodels/electrolyte_conductivity/integrated_conductivity.py
+++ b/pybamm/models/submodels/electrolyte_conductivity/integrated_conductivity.py
@@ -41,7 +41,7 @@ def _higher_order_macinnes_function(self, x):
def get_coupled_variables(self, variables):
c_e_av = variables["X-averaged electrolyte concentration"]
- i_boundary_cc_0 = variables["Leading-order current collector current density"]
+ i_boundary_cc = variables["Current collector current density"]
c_e_n = variables["Negative electrolyte concentration"]
c_e_s = variables["Separator electrolyte concentration"]
c_e_p = variables["Positive electrolyte concentration"]
@@ -76,14 +76,14 @@ def get_coupled_variables(self, variables):
chi_av_p = pybamm.PrimaryBroadcast(chi_av, "positive electrode")
# electrolyte current
- i_e_n = i_boundary_cc_0 * x_n / l_n
- i_e_s = pybamm.PrimaryBroadcast(i_boundary_cc_0, "separator")
- i_e_p = i_boundary_cc_0 * (1 - x_p) / l_p
+ i_e_n = i_boundary_cc * x_n / l_n
+ i_e_s = pybamm.PrimaryBroadcast(i_boundary_cc, "separator")
+ i_e_p = i_boundary_cc * (1 - x_p) / l_p
i_e = pybamm.concatenation(i_e_n, i_e_s, i_e_p)
- i_e_n_edge = i_boundary_cc_0 * x_n_edge / l_n
- i_e_s_edge = pybamm.PrimaryBroadcastToEdges(i_boundary_cc_0, "separator")
- i_e_p_edge = i_boundary_cc_0 * (1 - x_p_edge) / l_p
+ i_e_n_edge = i_boundary_cc * x_n_edge / l_n
+ i_e_s_edge = pybamm.PrimaryBroadcastToEdges(i_boundary_cc, "separator")
+ i_e_p_edge = i_boundary_cc * (1 - x_p_edge) / l_p
# electrolyte potential
indef_integral_n = (
diff --git a/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/full_surface_form_conductivity.py b/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/full_surface_form_conductivity.py
index 3c6904fa49..9954afb131 100644
--- a/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/full_surface_form_conductivity.py
+++ b/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/full_surface_form_conductivity.py
@@ -55,7 +55,7 @@ def get_coupled_variables(self, variables):
T = variables[f"{Domain} electrode temperature"]
i_e = conductivity * (
- param.chiT_over_c(c_e, T) * pybamm.grad(c_e)
+ param.chiRT_over_Fc(c_e, T) * pybamm.grad(c_e)
+ pybamm.grad(delta_phi)
+ i_boundary_cc / sigma_eff
)
@@ -77,11 +77,11 @@ def get_coupled_variables(self, variables):
tor_s = variables["Separator porosity"]
T = variables["Separator temperature"]
- chiT_over_c_e_s = param.chiT_over_c(c_e_s, T)
+ chiRT_over_Fc_e_s = param.chiRT_over_Fc(c_e_s, T)
kappa_s_eff = param.kappa_e(c_e_s, T) * tor_s
phi_e = phi_e_n_s + pybamm.IndefiniteIntegral(
- chiT_over_c_e_s * pybamm.grad(c_e_s)
+ chiRT_over_Fc_e_s * pybamm.grad(c_e_s)
- param.C_e * i_boundary_cc / kappa_s_eff,
x_s,
)
@@ -159,7 +159,7 @@ def set_boundary_conditions(self, variables):
flux_left = -i_boundary_cc * pybamm.BoundaryValue(1 / sigma_eff, "left")
flux_right = (
(i_boundary_cc / pybamm.BoundaryValue(conductivity, "right"))
- - pybamm.BoundaryValue(param.chiT_over_c(c_e, T), "right") * c_e_flux
+ - pybamm.BoundaryValue(param.chiRT_over_Fc(c_e, T), "right") * c_e_flux
- i_boundary_cc * pybamm.BoundaryValue(1 / sigma_eff, "right")
)
@@ -173,7 +173,7 @@ def set_boundary_conditions(self, variables):
c_e_flux = pybamm.BoundaryGradient(c_e, "left")
flux_left = (
(i_boundary_cc / pybamm.BoundaryValue(conductivity, "left"))
- - pybamm.BoundaryValue(param.chiT_over_c(c_e, T), "left") * c_e_flux
+ - pybamm.BoundaryValue(param.chiRT_over_Fc(c_e, T), "left") * c_e_flux
- i_boundary_cc * pybamm.BoundaryValue(1 / sigma_eff, "left")
)
flux_right = -i_boundary_cc * pybamm.BoundaryValue(1 / sigma_eff, "right")
diff --git a/pybamm/models/submodels/electrolyte_diffusion/__init__.py b/pybamm/models/submodels/electrolyte_diffusion/__init__.py
index 36b34611cb..5636b77fea 100644
--- a/pybamm/models/submodels/electrolyte_diffusion/__init__.py
+++ b/pybamm/models/submodels/electrolyte_diffusion/__init__.py
@@ -1,6 +1,4 @@
from .base_electrolyte_diffusion import BaseElectrolyteDiffusion
from .leading_order_diffusion import LeadingOrder
-from .first_order_diffusion import FirstOrder
-from .composite_diffusion import Composite
from .full_diffusion import Full
from .constant_concentration import ConstantConcentration
diff --git a/pybamm/models/submodels/electrolyte_diffusion/base_electrolyte_diffusion.py b/pybamm/models/submodels/electrolyte_diffusion/base_electrolyte_diffusion.py
index 6deb282e8f..0af2ada0e0 100644
--- a/pybamm/models/submodels/electrolyte_diffusion/base_electrolyte_diffusion.py
+++ b/pybamm/models/submodels/electrolyte_diffusion/base_electrolyte_diffusion.py
@@ -37,16 +37,17 @@ def _get_standard_concentration_variables(self, c_e_dict):
electrolyte.
"""
- c_e_typ = self.param.c_e_typ
c_e = pybamm.concatenation(*c_e_dict.values())
# Override print_name
c_e.print_name = "c_e"
- variables = {
- "Electrolyte concentration": c_e,
- "X-averaged electrolyte concentration": pybamm.x_average(c_e),
- }
+ variables = self._get_standard_domain_concentration_variables(c_e_dict)
+ variables.update(self._get_standard_whole_cell_concentration_variables(c_e))
+ return variables
+ def _get_standard_domain_concentration_variables(self, c_e_dict):
+ c_e_typ = self.param.c_e_typ
+ variables = {}
# Case where an electrode is not included (half-cell)
if "negative electrode" not in self.options.whole_cell_domains:
c_e_s = c_e_dict["separator"]
@@ -75,6 +76,24 @@ def _get_standard_concentration_variables(self, c_e_dict):
return variables
+ def _get_standard_whole_cell_concentration_variables(self, c_e):
+ c_e_typ = self.param.c_e_typ
+
+ variables = {
+ "Electrolyte concentration": c_e,
+ "X-averaged electrolyte concentration": pybamm.x_average(c_e),
+ }
+ variables_nondim = variables.copy()
+ for name, var in variables_nondim.items():
+ variables.update(
+ {
+ f"{name} [mol.m-3]": c_e_typ * var,
+ f"{name} [Molar]": c_e_typ * var / 1000,
+ }
+ )
+
+ return variables
+
def _get_standard_porosity_times_concentration_variables(self, eps_c_e_dict):
eps_c_e = pybamm.concatenation(*eps_c_e_dict.values())
variables = {"Porosity times concentration": eps_c_e}
diff --git a/pybamm/models/submodels/electrolyte_diffusion/composite_diffusion.py b/pybamm/models/submodels/electrolyte_diffusion/composite_diffusion.py
deleted file mode 100644
index be9b4ab9d8..0000000000
--- a/pybamm/models/submodels/electrolyte_diffusion/composite_diffusion.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#
-# Class for composite electrolyte diffusion employing stefan-maxwell
-#
-import pybamm
-import numpy as np
-from .base_electrolyte_diffusion import BaseElectrolyteDiffusion
-
-
-class Composite(BaseElectrolyteDiffusion):
- """Class for conservation of mass in the electrolyte employing the
- Stefan-Maxwell constitutive equations. (Composite refers to composite model by
- asymptotic methods)
-
- Parameters
- ----------
- param : parameter class
- The parameters to use for this submodel
-
- extended : bool
- Whether to include feedback from the first-order terms
-
- **Extends:** :class:`pybamm.electrolyte_diffusion.BaseElectrolyteDiffusion`
- """
-
- def __init__(self, param, extended=False):
- super().__init__(param)
- self.extended = extended
-
- def get_fundamental_variables(self):
- c_e_dict = {}
- for domain in self.options.whole_cell_domains:
- Domain = domain.capitalize().split()[0]
- c_e_k = pybamm.Variable(
- f"{Domain} electrolyte concentration",
- domain=domain,
- auxiliary_domains={"secondary": "current collector"},
- bounds=(0, np.inf),
- )
- c_e_k.print_name = f"c_e_{domain[0]}"
- c_e_dict[domain] = c_e_k
-
- variables = self._get_standard_concentration_variables(c_e_dict)
-
- return variables
-
- def get_coupled_variables(self, variables):
-
- tor_0 = variables["Leading-order electrolyte transport efficiency"]
- eps = variables["Leading-order porosity"]
- c_e_0_av = variables["Leading-order x-averaged electrolyte concentration"]
- c_e = variables["Electrolyte concentration"]
- i_e = variables["Electrolyte current density"]
- v_box_0 = variables["Leading-order volume-averaged velocity"]
- T_0 = variables["Leading-order cell temperature"]
-
- param = self.param
-
- N_e_diffusion = -tor_0 * param.D_e(c_e_0_av, T_0) * pybamm.grad(c_e)
- N_e_migration = param.C_e * param.t_plus(c_e, T_0) * i_e / param.gamma_e
- N_e_convection = param.C_e * c_e_0_av * v_box_0
-
- N_e = N_e_diffusion + N_e_migration + N_e_convection
-
- variables.update(self._get_standard_flux_variables(N_e))
- variables.update(self._get_total_concentration_electrolyte(eps * c_e))
-
- return variables
-
- def set_rhs(self, variables):
- """Composite reaction-diffusion with source terms from leading order."""
-
- param = self.param
-
- eps_0 = variables["Leading-order porosity"]
- deps_0_dt = variables["Leading-order porosity change"]
- c_e = variables["Electrolyte concentration"]
- N_e = variables["Electrolyte flux"]
- if self.extended is False:
- sum_s_j = variables[
- "Leading-order sum of electrolyte reaction source terms"
- ]
- elif self.extended == "distributed":
- sum_s_j = variables["Sum of electrolyte reaction source terms"]
- elif self.extended == "average":
- sum_s_j_n_av = variables[
- "Sum of x-averaged negative electrode electrolyte reaction source terms"
- ]
- sum_s_j_p_av = variables[
- "Sum of x-averaged positive electrode electrolyte reaction source terms"
- ]
- sum_s_j = pybamm.concatenation(
- pybamm.PrimaryBroadcast(sum_s_j_n_av, "negative electrode"),
- pybamm.FullBroadcast(0, "separator", "current collector"),
- pybamm.PrimaryBroadcast(sum_s_j_p_av, "positive electrode"),
- )
- source_terms = sum_s_j / self.param.gamma_e
-
- self.rhs = {
- c_e: (1 / eps_0)
- * (-pybamm.div(N_e) / param.C_e + source_terms - c_e * deps_0_dt)
- }
-
- def set_initial_conditions(self, variables):
-
- c_e = variables["Electrolyte concentration"]
-
- self.initial_conditions = {c_e: self.param.c_e_init}
-
- def set_boundary_conditions(self, variables):
-
- c_e = variables["Electrolyte concentration"]
-
- self.boundary_conditions = {
- c_e: {
- "left": (pybamm.Scalar(0), "Neumann"),
- "right": (pybamm.Scalar(0), "Neumann"),
- }
- }
diff --git a/pybamm/models/submodels/electrolyte_diffusion/first_order_diffusion.py b/pybamm/models/submodels/electrolyte_diffusion/first_order_diffusion.py
deleted file mode 100644
index 16d239eb42..0000000000
--- a/pybamm/models/submodels/electrolyte_diffusion/first_order_diffusion.py
+++ /dev/null
@@ -1,143 +0,0 @@
-#
-# Class for electrolyte diffusion employing stefan-maxwell (first-order)
-#
-import pybamm
-from .base_electrolyte_diffusion import BaseElectrolyteDiffusion
-
-
-class FirstOrder(BaseElectrolyteDiffusion):
- """Class for conservation of mass in the electrolyte employing the
- Stefan-Maxwell constitutive equations. (First-order refers to first-order term in
- asymptotic expansion)
-
- Parameters
- ----------
- param : parameter class
- The parameters to use for this submodel
-
-
- **Extends:** :class:`pybamm.electrolyte_diffusion.BaseElectrolyteDiffusion`
- """
-
- def __init__(self, param):
- super().__init__(param)
-
- def get_coupled_variables(self, variables):
- param = self.param
- l_n = param.n.l
- l_s = param.s.l
- l_p = param.p.l
- x_n = pybamm.standard_spatial_vars.x_n
- x_s = pybamm.standard_spatial_vars.x_s
- x_p = pybamm.standard_spatial_vars.x_p
-
- # Unpack
- T_0 = variables["Leading-order cell temperature"]
- c_e_0 = variables["Leading-order x-averaged electrolyte concentration"]
- # v_box_0 = variables["Leading-order volume-averaged velocity"]
- dc_e_0_dt = variables["Leading-order electrolyte concentration change"]
- eps_n_0 = variables["Leading-order x-averaged negative electrode porosity"]
- eps_s_0 = variables["Leading-order x-averaged separator porosity"]
- eps_p_0 = variables["Leading-order x-averaged positive electrode porosity"]
- tor_n_0 = variables[
- "Leading-order x-averaged negative electrolyte transport efficiency"
- ]
- tor_s_0 = variables[
- "Leading-order x-averaged separator electrolyte transport efficiency"
- ]
- tor_p_0 = variables[
- "Leading-order x-averaged positive electrolyte transport efficiency"
- ]
- deps_n_0_dt = variables[
- "Leading-order x-averaged negative electrode porosity change"
- ]
- deps_p_0_dt = variables[
- "Leading-order x-averaged positive electrode porosity change"
- ]
-
- # Combined time derivatives
- d_epsc_n_0_dt = c_e_0 * deps_n_0_dt + eps_n_0 * dc_e_0_dt
- d_epsc_s_0_dt = eps_s_0 * dc_e_0_dt
- d_epsc_p_0_dt = c_e_0 * deps_p_0_dt + eps_p_0 * dc_e_0_dt
-
- # Right-hand sides
- sum_a_j_n_0 = variables[
- "Leading-order sum of x-averaged "
- "negative electrode volumetric interfacial current densities"
- ]
- sum_a_j_p_0 = variables[
- "Leading-order sum of x-averaged "
- "positive electrode volumetric interfacial current densities"
- ]
- sum_s_j_n_0 = variables[
- "Leading-order sum of x-averaged "
- "negative electrode electrolyte reaction source terms"
- ]
- sum_s_j_p_0 = variables[
- "Leading-order sum of x-averaged "
- "positive electrode electrolyte reaction source terms"
- ]
- rhs_n = (
- d_epsc_n_0_dt
- - (sum_s_j_n_0 - param.t_plus(c_e_0, T_0) * sum_a_j_n_0) / param.gamma_e
- )
- rhs_s = d_epsc_s_0_dt
- rhs_p = (
- d_epsc_p_0_dt
- - (sum_s_j_p_0 - param.t_plus(c_e_0, T_0) * sum_a_j_p_0) / param.gamma_e
- )
-
- # Diffusivities
- D_e_n = tor_n_0 * param.D_e(c_e_0, T_0)
- D_e_s = tor_s_0 * param.D_e(c_e_0, T_0)
- D_e_p = tor_p_0 * param.D_e(c_e_0, T_0)
-
- # Fluxes
- N_e_n_1 = -rhs_n * x_n
- N_e_s_1 = -(rhs_s * (x_s - l_n) + rhs_n * l_n)
- N_e_p_1 = -rhs_p * (x_p - 1)
-
- # Concentrations
- c_e_n_1 = (rhs_n / (2 * D_e_n)) * (x_n**2 - l_n**2)
- c_e_s_1 = (rhs_s / 2) * ((x_s - l_n) ** 2) + (rhs_n * l_n / D_e_s) * (x_s - l_n)
- c_e_p_1 = (rhs_p / (2 * D_e_p)) * ((x_p - 1) ** 2 - l_p**2) + (
- (rhs_s * l_s**2 / (2 * D_e_s)) + (rhs_n * l_n * l_s / D_e_s)
- )
-
- # Correct for integral
- c_e_n_1_av = -rhs_n * l_n**3 / (3 * D_e_n)
- c_e_s_1_av = (rhs_s * l_s**3 / 6 + rhs_n * l_n * l_s**2 / 2) / D_e_s
- c_e_p_1_av = (
- -rhs_p * l_p**3 / (3 * D_e_p)
- + (rhs_s * l_s**2 * l_p / (2 * D_e_s))
- + (rhs_n * l_n * l_s * l_p / D_e_s)
- )
- A_e = -(eps_n_0 * c_e_n_1_av + eps_s_0 * c_e_s_1_av + eps_p_0 * c_e_p_1_av) / (
- l_n * eps_n_0 + l_s * eps_s_0 + l_p * eps_p_0
- )
- c_e_dict = {}
- for domain, var, var_av in [
- ("negative electrode", c_e_n_1, c_e_n_1_av),
- ("separator", c_e_s_1, c_e_s_1_av),
- ("positive electrode", c_e_p_1, c_e_p_1_av),
- ]:
- var += A_e
- c_e_dict[domain] = c_e_0 + param.C_e * var
- # Update with analytical expressions for first-order x-averages
- var_av += A_e
- variables.update({f"X-averaged first-order {domain} concentration": var_av})
-
- # Update variables
- variables.update(self._get_standard_concentration_variables(c_e_dict))
-
- N_e = pybamm.concatenation(
- param.C_e * N_e_n_1, param.C_e * N_e_s_1, param.C_e * N_e_p_1
- )
- variables.update(self._get_standard_flux_variables(N_e))
-
- c_e = variables["Electrolyte concentration"]
- eps = variables["Leading-order porosity"]
-
- variables.update(self._get_total_concentration_electrolyte(eps * c_e))
-
- return variables
diff --git a/pybamm/models/submodels/electrolyte_diffusion/full_diffusion.py b/pybamm/models/submodels/electrolyte_diffusion/full_diffusion.py
index a7cd2bd6aa..4226f75689 100644
--- a/pybamm/models/submodels/electrolyte_diffusion/full_diffusion.py
+++ b/pybamm/models/submodels/electrolyte_diffusion/full_diffusion.py
@@ -53,10 +53,15 @@ def get_coupled_variables(self, variables):
c_e_k = eps_c_e_k / eps_k
c_e_dict[domain] = c_e_k
- variables.update(self._get_standard_concentration_variables(c_e_dict))
+ variables["Electrolyte concentration concatenation"] = pybamm.concatenation(
+ *c_e_dict.values()
+ )
+ variables.update(self._get_standard_domain_concentration_variables(c_e_dict))
+
+ c_e = variables["Porosity times concentration"] / variables["Porosity"]
+ variables.update(self._get_standard_whole_cell_concentration_variables(c_e))
# Whole domain
- c_e = variables["Electrolyte concentration"]
tor = variables["Electrolyte transport efficiency"]
i_e = variables["Electrolyte current density"]
v_box = variables["Volume-averaged velocity"]
@@ -102,6 +107,7 @@ def set_initial_conditions(self, variables):
def set_boundary_conditions(self, variables):
param = self.param
c_e = variables["Electrolyte concentration"]
+ c_e_conc = variables["Electrolyte concentration concatenation"]
T = variables["Cell temperature"]
tor = variables["Electrolyte transport efficiency"]
i_boundary_cc = variables["Current collector current density"]
@@ -132,6 +138,8 @@ def flux_bc(side):
# # right bc at separator/cathode interface
# rbc = flux_bc("right")
+ # add boundary conditions to both forms of the concentration
self.boundary_conditions = {
c_e: {"left": (lbc, "Neumann"), "right": (rbc, "Neumann")},
+ c_e_conc: {"left": (lbc, "Neumann"), "right": (rbc, "Neumann")},
}
diff --git a/pybamm/models/submodels/equivalent_circuit_elements/__init__.py b/pybamm/models/submodels/equivalent_circuit_elements/__init__.py
new file mode 100644
index 0000000000..a4e76cc5b8
--- /dev/null
+++ b/pybamm/models/submodels/equivalent_circuit_elements/__init__.py
@@ -0,0 +1,5 @@
+from .ocv_element import OCVElement
+from .resistor_element import ResistorElement
+from .rc_element import RCElement
+from .thermal import ThermalSubModel
+from .voltage_model import VoltageModel
diff --git a/pybamm/models/submodels/equivalent_circuit_elements/ocv_element.py b/pybamm/models/submodels/equivalent_circuit_elements/ocv_element.py
new file mode 100644
index 0000000000..44c9fd4c51
--- /dev/null
+++ b/pybamm/models/submodels/equivalent_circuit_elements/ocv_element.py
@@ -0,0 +1,62 @@
+import pybamm
+
+
+class OCVElement(pybamm.BaseSubModel):
+ """
+ Open Circuit Voltage (OCV) element for
+ equivalent circuits.
+
+ Parameters
+ ----------
+ param : parameter class
+ The parameters to use for this submodel
+ options : dict, optional
+ A dictionary of options to be passed to the model.
+ """
+
+ def __init__(self, param, options=None):
+ super().__init__(param)
+ self.model_options = options
+
+ def get_fundamental_variables(self):
+ soc = pybamm.Variable("SoC")
+ ocv = self.param.ocv(soc)
+ variables = {"SoC": soc, "Open circuit voltage [V]": ocv}
+ return variables
+
+ def get_coupled_variables(self, variables):
+ current = variables["Current [A]"]
+
+ ocv = variables["Open circuit voltage [V]"]
+ T_cell = variables["Cell temperature [degC]"]
+
+ dUdT = self.param.dUdT(ocv, T_cell)
+
+ T_cell_kelvin = variables["Cell temperature [K]"]
+ Q_rev = -current * T_cell_kelvin * dUdT
+
+ variables.update(
+ {
+ "Entropic change [V/K]": dUdT,
+ "Reversible heat generation [W]": Q_rev,
+ }
+ )
+
+ return variables
+
+ def set_rhs(self, variables):
+ soc = variables["SoC"]
+ current = variables["Current [A]"]
+ cell_capacity = self.param.cell_capacity
+ self.rhs = {soc: -current / cell_capacity / 3600}
+
+ def set_initial_conditions(self, variables):
+ soc = variables["SoC"]
+ self.initial_conditions = {soc: self.param.initial_soc}
+
+ def set_events(self, variables):
+ soc = variables["SoC"]
+ self.events = [
+ pybamm.Event("Minimum SoC", soc),
+ pybamm.Event("Maximum SoC", 1 - soc),
+ ]
diff --git a/pybamm/models/submodels/equivalent_circuit_elements/rc_element.py b/pybamm/models/submodels/equivalent_circuit_elements/rc_element.py
new file mode 100644
index 0000000000..757488313b
--- /dev/null
+++ b/pybamm/models/submodels/equivalent_circuit_elements/rc_element.py
@@ -0,0 +1,74 @@
+import pybamm
+
+
+class RCElement(pybamm.BaseSubModel):
+ """
+ Parallel Resistor-Capacitor (RC) element for
+ equivalent circuits.
+
+ Parameters
+ ----------
+ param : parameter class
+ The parameters to use for this submodel
+ element_number: int
+ The number of the element (i.e. whether it
+ is the first, second, third, etc. element)
+ options : dict, optional
+ A dictionary of options to be passed to the model.
+ """
+
+ def __init__(self, param, element_number, options=None):
+ super().__init__(param)
+ self.element_number = element_number
+ self.model_options = options
+
+ def get_fundamental_variables(self):
+ vrc = pybamm.Variable(f"Element-{self.element_number} overpotential [V]")
+ variables = {f"Element-{self.element_number} overpotential [V]": vrc}
+ return variables
+
+ def get_coupled_variables(self, variables):
+
+ T_cell = variables["Cell temperature [degC]"]
+ current = variables["Current [A]"]
+ soc = variables["SoC"]
+
+ r = self.param.rcr_element(
+ f"R{self.element_number} [Ohm]", T_cell, current, soc
+ )
+ c = self.param.rcr_element(f"C{self.element_number} [F]", T_cell, current, soc)
+ tau = r * c
+
+ vrc = variables[f"Element-{self.element_number} overpotential [V]"]
+
+ Q_irr = -current * vrc
+
+ variables.update(
+ {
+ f"R{self.element_number} [Ohm]": r,
+ f"C{self.element_number} [F]": c,
+ f"tau{self.element_number} [s]": tau,
+ f"Element-{self.element_number} "
+ + "irreversible heat generation [W]": Q_irr,
+ }
+ )
+
+ return variables
+
+ def set_rhs(self, variables):
+ vrc = variables[f"Element-{self.element_number} overpotential [V]"]
+ current = variables["Current [A]"]
+
+ r = variables[f"R{self.element_number} [Ohm]"]
+ tau = variables[f"tau{self.element_number} [s]"]
+
+ self.rhs = {
+ vrc: -vrc / (tau) - current * r / tau,
+ }
+
+ def set_initial_conditions(self, variables):
+ vrc = variables[f"Element-{self.element_number} overpotential [V]"]
+
+ self.initial_conditions = {
+ vrc: self.param.initial_rc_overpotential(self.element_number)
+ }
diff --git a/pybamm/models/submodels/equivalent_circuit_elements/resistor_element.py b/pybamm/models/submodels/equivalent_circuit_elements/resistor_element.py
new file mode 100644
index 0000000000..b708d93721
--- /dev/null
+++ b/pybamm/models/submodels/equivalent_circuit_elements/resistor_element.py
@@ -0,0 +1,39 @@
+import pybamm
+
+
+class ResistorElement(pybamm.BaseSubModel):
+ """
+ Resistor element for equivalent circuits.
+
+ Parameters
+ ----------
+ param : parameter class
+ The parameters to use for this submodel
+ options : dict, optional
+ A dictionary of options to be passed to the model.
+ """
+
+ def __init__(self, param, options=None):
+ super().__init__(param)
+ self.model_options = options
+
+ def get_coupled_variables(self, variables):
+
+ T_cell = variables["Cell temperature [degC]"]
+ current = variables["Current [A]"]
+ soc = variables["SoC"]
+
+ r = self.param.rcr_element("R0 [Ohm]", T_cell, current, soc)
+
+ overpotential = -current * r
+ Q_irr = current**2 * r
+
+ variables.update(
+ {
+ "R0 [Ohm]": r,
+ "Element-0 overpotential [V]": overpotential,
+ "Element-0 " + "irreversible heat generation [W]": Q_irr,
+ }
+ )
+
+ return variables
diff --git a/pybamm/models/submodels/equivalent_circuit_elements/thermal.py b/pybamm/models/submodels/equivalent_circuit_elements/thermal.py
new file mode 100644
index 0000000000..8790f47f7f
--- /dev/null
+++ b/pybamm/models/submodels/equivalent_circuit_elements/thermal.py
@@ -0,0 +1,85 @@
+import pybamm
+
+
+class ThermalSubModel(pybamm.BaseSubModel):
+ """
+ Thermal SubModel for use with equivalent
+ circuits.
+
+ Parameters
+ ----------
+ param : parameter class
+ The parameters to use for this submodel
+ options : dict, optional
+ A dictionary of options to be passed to the model.
+ """
+
+ def __init__(self, param, options=None):
+ super().__init__(param)
+ self.model_options = options
+
+ def get_fundamental_variables(self):
+ T_cell = pybamm.Variable("Cell temperature [degC]")
+ T_jig = pybamm.Variable("Jig temperature [degC]")
+
+ T_amb = self.param.T_amb(pybamm.t * self.param.timescale)
+
+ Q_cell_cool = -self.param.k_cell_jig * (T_cell - T_jig)
+ Q_jig_cool = -self.param.k_jig_air * (T_jig - T_amb)
+
+ kelvin = 273.15
+ variables = {
+ "Cell temperature [degC]": T_cell,
+ "Cell temperature [K]": T_cell + kelvin,
+ "Jig temperature [degC]": T_jig,
+ "Jig temperature [K]": T_jig + kelvin,
+ "Ambient temperature [degC]": T_amb,
+ "Ambient temperature [K]": T_amb + kelvin,
+ "Heat transfer from cell to jig [W]": Q_cell_cool,
+ "Heat transfer from jig to ambient [W]": Q_jig_cool,
+ }
+
+ return variables
+
+ def get_coupled_variables(self, variables):
+
+ number_of_rc_elements = self.model_options["number of rc elements"]
+ number_of_elements = number_of_rc_elements + 1
+
+ Q_irr = pybamm.Scalar(0)
+ for i in range(number_of_elements):
+ Q_irr += variables[f"Element-{i} irreversible heat generation [W]"]
+
+ Q_rev = variables["Reversible heat generation [W]"]
+
+ variables.update(
+ {
+ "Irreversible heat generation [W]": Q_irr,
+ "Total heat generation [W]": Q_irr + Q_rev,
+ }
+ )
+
+ return variables
+
+ def set_rhs(self, variables):
+ T_cell = variables["Cell temperature [degC]"]
+ T_jig = variables["Jig temperature [degC]"]
+
+ Q_irr = variables["Irreversible heat generation [W]"]
+ Q_rev = variables["Reversible heat generation [W]"]
+
+ Q_cell_cool = variables["Heat transfer from cell to jig [W]"]
+ Q_jig_cool = variables["Heat transfer from jig to ambient [W]"]
+
+ self.rhs = {
+ T_cell: (Q_irr + Q_rev + Q_cell_cool) / self.param.cth_cell,
+ T_jig: (Q_jig_cool - Q_cell_cool) / self.param.cth_jig,
+ }
+
+ def set_initial_conditions(self, variables):
+ T_cell = variables["Cell temperature [degC]"]
+ T_jig = variables["Jig temperature [degC]"]
+ self.initial_conditions = {
+ T_cell: self.param.initial_T_cell,
+ T_jig: self.param.initial_T_jig,
+ }
diff --git a/pybamm/models/submodels/equivalent_circuit_elements/voltage_model.py b/pybamm/models/submodels/equivalent_circuit_elements/voltage_model.py
new file mode 100644
index 0000000000..404d33d2f0
--- /dev/null
+++ b/pybamm/models/submodels/equivalent_circuit_elements/voltage_model.py
@@ -0,0 +1,90 @@
+import pybamm
+
+
+class VoltageModel(pybamm.BaseSubModel):
+ """
+ Voltage model for use with equivalent
+ circuits. This model is used to calculate
+ the voltage and total overpotentials
+ from the other elements in the circuit.
+
+ Parameters
+ ----------
+ param : parameter class
+ The parameters to use for this submodel
+ options : dict, optional
+ A dictionary of options to be passed to the model.
+ """
+
+ def __init__(self, param, options=None):
+ super().__init__(param)
+ self.model_options = options
+
+ def get_coupled_variables(self, variables):
+
+ ocv = variables["Open circuit voltage [V]"]
+
+ number_of_rc_elements = self.model_options["number of rc elements"]
+ number_of_elements = number_of_rc_elements + 1
+
+ overpotential = pybamm.Scalar(0)
+ for i in range(number_of_elements):
+ overpotential += variables[f"Element-{i} overpotential [V]"]
+
+ voltage = ocv + overpotential
+
+ # Power and Resistance
+ current = variables["Current [A]"]
+
+ def x_not_zero(x):
+ return ((x > 0) + (x < 0)) * x + (x >= 0) * (x <= 0)
+
+ non_zero_current = x_not_zero(current)
+
+ variables.update(
+ {
+ "Terminal voltage [V]": voltage,
+ "Overpotential [V]": overpotential,
+ "Battery voltage [V]": voltage,
+ "Power [W]": voltage * current,
+ "Resistance [Ohm]": pybamm.sign(current) * voltage / non_zero_current,
+ }
+ )
+
+ return variables
+
+ def set_events(self, variables):
+
+ voltage = variables["Terminal voltage [V]"]
+
+ # Add voltage events
+ maximum_voltage = pybamm.Event(
+ "Maximum voltage",
+ self.param.voltage_high_cut - voltage,
+ pybamm.EventType.TERMINATION,
+ )
+ self.events.append(maximum_voltage)
+
+ minimum_voltage = pybamm.Event(
+ "Minimum voltage",
+ voltage - self.param.voltage_low_cut,
+ pybamm.EventType.TERMINATION,
+ )
+ self.events.append(minimum_voltage)
+
+ # Cut-off voltage for event switch with casadi 'fast with events'
+ tol = 0.125
+ self.events.append(
+ pybamm.Event(
+ "Minimum voltage switch",
+ voltage - (self.param.voltage_low_cut - tol),
+ pybamm.EventType.SWITCH,
+ )
+ )
+ self.events.append(
+ pybamm.Event(
+ "Maximum voltage switch",
+ voltage - (self.param.voltage_high_cut + tol),
+ pybamm.EventType.SWITCH,
+ )
+ )
diff --git a/pybamm/models/submodels/external_circuit/__init__.py b/pybamm/models/submodels/external_circuit/__init__.py
index e84a8c0e8d..bd71790295 100644
--- a/pybamm/models/submodels/external_circuit/__init__.py
+++ b/pybamm/models/submodels/external_circuit/__init__.py
@@ -1,9 +1,8 @@
-from .base_external_circuit import BaseModel, LeadingOrderBaseModel
+from .base_external_circuit import BaseModel
from .explicit_control_external_circuit import (
ExplicitCurrentControl,
ExplicitPowerControl,
ExplicitResistanceControl,
- LeadingOrderExplicitCurrentControl,
)
from .function_control_external_circuit import (
FunctionControl,
@@ -11,7 +10,4 @@
PowerFunctionControl,
ResistanceFunctionControl,
CCCVFunctionControl,
- LeadingOrderFunctionControl,
- LeadingOrderVoltageFunctionControl,
- LeadingOrderPowerFunctionControl,
)
diff --git a/pybamm/models/submodels/external_circuit/base_external_circuit.py b/pybamm/models/submodels/external_circuit/base_external_circuit.py
index b5ad26797b..ad41181e57 100644
--- a/pybamm/models/submodels/external_circuit/base_external_circuit.py
+++ b/pybamm/models/submodels/external_circuit/base_external_circuit.py
@@ -60,26 +60,3 @@ def set_rhs(self, variables):
self.rhs[Q_Wh] = I * V * self.param.timescale / 3600
self.rhs[Qt_Wh] = abs(I * V) * self.param.timescale / 3600
self.rhs[Qt_Ah] = abs(I) * self.param.timescale / 3600
-
-
-class LeadingOrderBaseModel(BaseModel):
- """Model to represent the behaviour of the external circuit, at leading order."""
-
- def __init__(self, param, options):
- super().__init__(param, options)
-
- def get_fundamental_variables(self):
- Q_Ah = pybamm.Variable("Leading-order discharge capacity [A.h]")
- variables = {"Discharge capacity [A.h]": Q_Ah}
- if self.options["calculate discharge energy"] == "true":
- Q_Wh = pybamm.Variable("Leading-order discharge energy [W.h]")
- Qt_Wh = pybamm.Variable("Leading-order throughput energy [W.h]")
- Qt_Ah = pybamm.Variable("Leading-order throughput capacity [A.h]")
- variables.update(
- {
- "Discharge energy [W.h]": Q_Wh,
- "Throughput energy [W.h]": Qt_Wh,
- "Throughput capacity [A.h]": Qt_Ah,
- }
- )
- return variables
diff --git a/pybamm/models/submodels/external_circuit/explicit_control_external_circuit.py b/pybamm/models/submodels/external_circuit/explicit_control_external_circuit.py
index d2bb8ee63c..0f4d581a4f 100644
--- a/pybamm/models/submodels/external_circuit/explicit_control_external_circuit.py
+++ b/pybamm/models/submodels/external_circuit/explicit_control_external_circuit.py
@@ -2,7 +2,7 @@
# External circuit with explicit equations for control
#
import pybamm
-from .base_external_circuit import BaseModel, LeadingOrderBaseModel
+from .base_external_circuit import BaseModel
class ExplicitCurrentControl(BaseModel):
@@ -89,10 +89,3 @@ def get_coupled_variables(self, variables):
}
return variables
-
-
-class LeadingOrderExplicitCurrentControl(ExplicitCurrentControl, LeadingOrderBaseModel):
- """External circuit with current control, for leading order models."""
-
- def __init__(self, param, options):
- super().__init__(param, options)
diff --git a/pybamm/models/submodels/external_circuit/function_control_external_circuit.py b/pybamm/models/submodels/external_circuit/function_control_external_circuit.py
index 713ed51ba4..78e3b0b597 100644
--- a/pybamm/models/submodels/external_circuit/function_control_external_circuit.py
+++ b/pybamm/models/submodels/external_circuit/function_control_external_circuit.py
@@ -2,7 +2,7 @@
# External circuit with an arbitrary function
#
import pybamm
-from .base_external_circuit import BaseModel, LeadingOrderBaseModel
+from .base_external_circuit import BaseModel
class FunctionControl(BaseModel):
@@ -170,43 +170,3 @@ def cccv(self, variables):
V = variables["Terminal voltage [V]"]
V_CCCV = pybamm.Parameter("Voltage function [V]")
return -K_aw * (i_var - i_cell) + K_V * (V - V_CCCV)
-
-
-class LeadingOrderFunctionControl(FunctionControl, LeadingOrderBaseModel):
- """External circuit with an arbitrary function, at leading order."""
-
- def __init__(self, param, external_circuit_function, options, control="algebraic"):
- super().__init__(param, external_circuit_function, options, control=control)
-
- def _get_current_variable(self):
- return pybamm.Variable("Leading-order total current density")
-
-
-class LeadingOrderVoltageFunctionControl(LeadingOrderFunctionControl):
- """
- External circuit with voltage control, implemented as an extra algebraic equation,
- at leading order.
- """
-
- def __init__(self, param, options):
- super().__init__(param, self.constant_voltage, options, control="algebraic")
-
- def constant_voltage(self, variables):
- V = variables["Terminal voltage [V]"]
- return V - pybamm.FunctionParameter(
- "Voltage function [V]", {"Time [s]": pybamm.t * self.param.timescale}
- )
-
-
-class LeadingOrderPowerFunctionControl(LeadingOrderFunctionControl):
- """External circuit with power control, at leading order."""
-
- def __init__(self, param, options):
- super().__init__(param, self.constant_power, options, control="algebraic")
-
- def constant_power(self, variables):
- I = variables["Current [A]"]
- V = variables["Terminal voltage [V]"]
- return I * V - pybamm.FunctionParameter(
- "Power function [W]", {"Time [s]": pybamm.t * self.param.timescale}
- )
diff --git a/pybamm/models/submodels/interface/base_interface.py b/pybamm/models/submodels/interface/base_interface.py
index b7a339efee..dfd0428a29 100644
--- a/pybamm/models/submodels/interface/base_interface.py
+++ b/pybamm/models/submodels/interface/base_interface.py
@@ -422,25 +422,6 @@ def _get_standard_average_surface_potential_difference_variables(
return variables
- def _get_standard_surface_potential_difference_variables(self, delta_phi):
- domain, Domain = self.domain_Domain
- ocp_ref = self.domain_param.U_ref
-
- # Broadcast if necessary
- delta_phi_dim = ocp_ref + delta_phi * self.param.potential_scale
- if delta_phi.domain == ["current collector"]:
- delta_phi = pybamm.PrimaryBroadcast(delta_phi, f"{domain} electrode")
- delta_phi_dim = pybamm.PrimaryBroadcast(
- delta_phi_dim, f"{domain} electrode"
- )
-
- variables = {
- f"{Domain} electrode surface potential difference": delta_phi,
- f"{Domain} electrode surface potential difference [V]": delta_phi_dim,
- }
-
- return variables
-
def _get_standard_size_distribution_interfacial_current_variables(self, j):
"""
Interfacial current density variables that depend on particle size R,
diff --git a/pybamm/models/submodels/interface/kinetics/__init__.py b/pybamm/models/submodels/interface/kinetics/__init__.py
index 1acd63947b..c8b8552574 100644
--- a/pybamm/models/submodels/interface/kinetics/__init__.py
+++ b/pybamm/models/submodels/interface/kinetics/__init__.py
@@ -12,5 +12,3 @@
CurrentForInverseButlerVolmer,
CurrentForInverseButlerVolmerLithiumMetal,
)
-from .first_order_kinetics.first_order_kinetics import FirstOrderKinetics
-from .first_order_kinetics.inverse_first_order_kinetics import InverseFirstOrderKinetics
diff --git a/pybamm/models/submodels/interface/kinetics/base_kinetics.py b/pybamm/models/submodels/interface/kinetics/base_kinetics.py
index bcee5da2ed..03be0d29be 100644
--- a/pybamm/models/submodels/interface/kinetics/base_kinetics.py
+++ b/pybamm/models/submodels/interface/kinetics/base_kinetics.py
@@ -232,38 +232,3 @@ def set_initial_conditions(self, variables):
j_tot_av_init = sgn * current_at_0 / self.domain_param.l
self.initial_conditions[j_tot_var] = j_tot_av_init
-
- def _get_interface_variables_for_first_order(self, variables):
- # This is a bit of a hack, but we need to wrap electrolyte concentration with
- # the NotConstant class
- # to differentiate it from the electrolyte concentration inside the
- # surface potential difference when taking j.diff(c_e) later on
- domain, Domain = self.domain_Domain
-
- c_e_0 = pybamm.NotConstant(
- variables["Leading-order x-averaged electrolyte concentration"]
- )
- c_e = pybamm.PrimaryBroadcast(c_e_0, f"{domain} electrode")
- hacked_variables = {**variables, f"{Domain} electrolyte concentration": c_e}
- delta_phi = variables[
- f"Leading-order x-averaged {domain} electrode surface potential difference"
- ]
- j0 = self._get_exchange_current_density(hacked_variables)
- ne = self._get_number_of_electrons_in_reaction()
- if self.reaction == "lead-acid main":
- ocp = self.phase_param.U(c_e_0, self.param.T_init)
- elif self.reaction == "lead-acid oxygen":
- ocp = self.phase_param.U_Ox
-
- T = variables["X-averaged cell temperature"]
- u = variables[f"X-averaged {domain} electrode interface utilisation"]
-
- return c_e_0, delta_phi, j0, ne, ocp, T, u
-
- def _get_j_diffusion_limited_first_order(self, variables):
- """
- First-order correction to the interfacial current density due to
- diffusion-limited effects. For a general model the correction term is zero,
- since the reaction is not diffusion-limited
- """
- return pybamm.Scalar(0)
diff --git a/pybamm/models/submodels/interface/kinetics/butler_volmer.py b/pybamm/models/submodels/interface/kinetics/butler_volmer.py
index 68bdc7461b..a2e130a809 100644
--- a/pybamm/models/submodels/interface/kinetics/butler_volmer.py
+++ b/pybamm/models/submodels/interface/kinetics/butler_volmer.py
@@ -37,32 +37,6 @@ def _get_kinetics(self, j0, ne, eta_r, T, u):
prefactor = ne / (2 * (1 + self.param.Theta * T))
return 2 * u * j0 * pybamm.sinh(prefactor * eta_r)
- def _get_dj_dc(self, variables):
- """See :meth:`pybamm.interface.kinetics.BaseKinetics._get_dj_dc`"""
- (
- c_e,
- delta_phi,
- j0,
- ne,
- ocp,
- T,
- u,
- ) = self._get_interface_variables_for_first_order(variables)
- eta_r = delta_phi - ocp
- prefactor = ne / (2 * (1 + self.param.Theta * T))
- return (2 * u * j0.diff(c_e) * pybamm.sinh(prefactor * eta_r)) - (
- 2 * u * j0 * prefactor * ocp.diff(c_e) * pybamm.cosh(prefactor * eta_r)
- )
-
- def _get_dj_ddeltaphi(self, variables):
- """See :meth:`pybamm.interface.kinetics.BaseKinetics._get_dj_ddeltaphi`"""
- _, delta_phi, j0, ne, ocp, T, u = self._get_interface_variables_for_first_order(
- variables
- )
- eta_r = delta_phi - ocp
- prefactor = ne / (2 * (1 + self.param.Theta * T))
- return 2 * u * j0 * prefactor * pybamm.cosh(prefactor * eta_r)
-
class AsymmetricButlerVolmer(BaseKinetics):
"""
diff --git a/pybamm/models/submodels/interface/kinetics/diffusion_limited.py b/pybamm/models/submodels/interface/kinetics/diffusion_limited.py
index 3523d34a53..e1b22032a8 100644
--- a/pybamm/models/submodels/interface/kinetics/diffusion_limited.py
+++ b/pybamm/models/submodels/interface/kinetics/diffusion_limited.py
@@ -67,22 +67,6 @@ def get_coupled_variables(self, variables):
eta_sei = pybamm.Scalar(0)
variables.update(self._get_standard_sei_film_overpotential_variables(eta_sei))
- if self.order == "composite":
- # For the composite model, adds the first-order x-averaged interfacial
- # current density to the dictionary of variables.
- j_0 = variables[
- f"Leading-order {domain} electrode {self.reaction_name}"
- "interfacial current density"
- ]
- j_1_bar = (pybamm.x_average(j) - pybamm.x_average(j_0)) / self.param.C_e
-
- variables.update(
- {
- f"First-order x-averaged {domain} electrode"
- f" {self.reaction_name}interfacial current density": j_1_bar
- }
- )
-
return variables
def _get_diffusion_limited_current_density(self, variables):
@@ -107,32 +91,3 @@ def _get_diffusion_limited_current_density(self, variables):
j = -N_ox_neg_sep_interface / param.C_e / -param.s_ox_Ox / param.n.l
return j
-
- def _get_dj_dc(self, variables):
- return pybamm.Scalar(0)
-
- def _get_dj_ddeltaphi(self, variables):
- return pybamm.Scalar(0)
-
- def _get_j_diffusion_limited_first_order(self, variables):
- """
- First-order correction to the interfacial current density due to
- diffusion-limited effects. For a general model the correction term is zero,
- since the reaction is not diffusion-limited
- """
- domain = self.domain
- if self.order == "leading":
- j_leading_order = variables[
- f"Leading-order x-averaged {domain} electrode "
- f"{self.reaction_name}interfacial current density"
- ]
- param = self.param
- if self.domain == "negative":
- N_ox_s_p = variables["Oxygen flux"].orphans[1]
- N_ox_neg_sep_interface = pybamm.Index(N_ox_s_p, slice(0, 1))
-
- j = -N_ox_neg_sep_interface / param.C_e / -param.s_ox_Ox / param.n.l
-
- return (j - j_leading_order) / param.C_e
- else:
- return pybamm.Scalar(0)
diff --git a/pybamm/models/submodels/interface/kinetics/first_order_kinetics/first_order_kinetics.py b/pybamm/models/submodels/interface/kinetics/first_order_kinetics/first_order_kinetics.py
deleted file mode 100644
index 9b4f962901..0000000000
--- a/pybamm/models/submodels/interface/kinetics/first_order_kinetics/first_order_kinetics.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#
-# First-order Butler-Volmer kinetics
-#
-import pybamm
-from ...base_interface import BaseInterface
-
-
-class FirstOrderKinetics(BaseInterface):
- """
- First-order kinetics
-
- Parameters
- ----------
- param :
- model parameters
- domain : str
- The domain to implement the model, either: 'Negative' or 'Positive'.
- leading_order_model : :class:`pybamm.interface.kinetics.BaseKinetics`
- The leading-order model with respect to which this is first-order
- options: dict
- A dictionary of options to be passed to the model. See
- :class:`pybamm.BaseBatteryModel`
-
- **Extends:** :class:`pybamm.interface.BaseInterface`
- """
-
- def __init__(self, param, domain, leading_order_model, options):
- super().__init__(param, domain, leading_order_model.reaction, options)
- self.leading_order_model = leading_order_model
-
- def get_coupled_variables(self, variables):
- domain, Domain = self.domain_Domain
- reaction_name = self.reaction_name
-
- # Unpack
- c_e_0 = variables[f"Leading-order {domain} electrolyte concentration"]
- c_e = variables[f"{Domain} electrolyte concentration"]
- c_e_1 = (c_e - c_e_0) / self.param.C_e
-
- dj_dc_0 = self.leading_order_model._get_dj_dc(variables)
- dj_ddeltaphi_0 = self.leading_order_model._get_dj_ddeltaphi(variables)
-
- # Update delta_phi with new phi_e and phi_s
- phi_s = variables[f"{Domain} electrode potential"]
- phi_e = variables[f"{Domain} electrolyte potential"]
- delta_phi = phi_s - phi_e
- variables.update(
- self._get_standard_average_surface_potential_difference_variables(
- pybamm.x_average(delta_phi)
- )
- )
- variables.update(
- self._get_standard_surface_potential_difference_variables(delta_phi)
- )
-
- delta_phi_0 = variables[
- f"Leading-order {domain} electrode surface potential difference"
- ]
- delta_phi_1 = (delta_phi - delta_phi_0) / self.param.C_e
-
- j_0 = variables[
- f"Leading-order {domain} electrode {reaction_name}"
- "interfacial current density"
- ]
- j_1 = dj_dc_0 * c_e_1 + dj_ddeltaphi_0 * delta_phi_1
- j = j_0 + self.param.C_e * j_1
- # Get exchange-current density
- j0 = self._get_exchange_current_density(variables)
- # Get open-circuit potential variables and reaction overpotential
- ocp = variables[f"{Domain} electrode {reaction_name}open circuit potential"]
- eta_r = delta_phi - ocp
-
- variables.update(self._get_standard_interfacial_current_variables(j))
- variables.update(self._get_standard_exchange_current_variables(j0))
- variables.update(self._get_standard_overpotential_variables(eta_r))
-
- # SEI film resistance not implemented in this model
- eta_sei = pybamm.Scalar(0)
- variables.update(self._get_standard_sei_film_overpotential_variables(eta_sei))
-
- # Add first-order averages
- j_1_bar = dj_dc_0 * pybamm.x_average(c_e_1) + dj_ddeltaphi_0 * pybamm.x_average(
- delta_phi_1
- )
-
- variables.update(
- {
- f"First-order x-averaged {domain} electrode {reaction_name} "
- "interfacial current density": j_1_bar
- }
- )
-
- return variables
diff --git a/pybamm/models/submodels/interface/kinetics/first_order_kinetics/inverse_first_order_kinetics.py b/pybamm/models/submodels/interface/kinetics/first_order_kinetics/inverse_first_order_kinetics.py
deleted file mode 100644
index 61b6089b50..0000000000
--- a/pybamm/models/submodels/interface/kinetics/first_order_kinetics/inverse_first_order_kinetics.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# First-order Butler-Volmer kinetics
-#
-import pybamm
-from ...base_interface import BaseInterface
-
-
-class InverseFirstOrderKinetics(BaseInterface):
- """
- Base inverse first-order kinetics. This class needs to consider *all* of the
- leading-order submodels simultaneously in order to find the first-order correction
- to the potentials
-
- Parameters
- ----------
- param :
- model parameters
- domain : str
- The domain to implement the model, either: 'Negative' or 'Positive'.
- leading_order_models : :class:`pybamm.interface.kinetics.BaseKinetics`
- The leading-order models with respect to which this is first-order
- options: dict
- A dictionary of options to be passed to the model. See
- :class:`pybamm.BaseBatteryModel`
-
- **Extends:** :class:`pybamm.interface.BaseInterface`
- """
-
- def __init__(self, param, domain, leading_order_models, options):
- super().__init__(param, domain, "inverse", options)
- self.leading_order_models = leading_order_models
-
- def _get_die1dx(self, variables):
- i_boundary_cc = variables["Current collector current density"]
- i_boundary_cc_0 = variables["Leading-order current collector current density"]
- i_boundary_cc_1 = (i_boundary_cc - i_boundary_cc_0) / self.param.C_e
-
- sgn = 1 if self.domain == "negative" else -1
- return sgn * i_boundary_cc_1 / self.domain_param.l
-
- def get_coupled_variables(self, variables):
- domain = self.domain
- # Unpack
- delta_phi_0 = variables[
- f"Leading-order x-averaged {domain} electrode surface potential difference"
- ]
- c_e_0 = variables["Leading-order x-averaged electrolyte concentration"]
- c_e_av = variables[f"X-averaged {domain} electrolyte concentration"]
- c_e_1_av = (c_e_av - c_e_0) / self.param.C_e
-
- # Get first-order current (this is zero in 1D)
- die1_dx = self._get_die1dx(variables)
-
- # Get derivatives of leading-order terms
- sum_dj_dc_0 = sum(
- submodel._get_dj_dc(variables) for submodel in self.leading_order_models
- )
- sum_dj_ddeltaphi_0 = sum(
- submodel._get_dj_ddeltaphi(variables)
- for submodel in self.leading_order_models
- )
- sum_j_diffusion_limited_first_order = sum(
- submodel._get_j_diffusion_limited_first_order(variables)
- for submodel in self.leading_order_models
- )
-
- delta_phi_1_av = (
- die1_dx - (sum_dj_dc_0 * c_e_1_av + sum_j_diffusion_limited_first_order)
- ) / sum_dj_ddeltaphi_0
- delta_phi = delta_phi_0 + self.param.C_e * delta_phi_1_av
-
- # Update variables dictionary
- variables.update(
- self._get_standard_average_surface_potential_difference_variables(
- pybamm.x_average(delta_phi)
- )
- )
- variables.update(
- self._get_standard_surface_potential_difference_variables(delta_phi)
- )
-
- # SEI film resistance not implemented in this model
- eta_sei = pybamm.Scalar(0)
- variables.update(self._get_standard_sei_film_overpotential_variables(eta_sei))
-
- return variables
diff --git a/pybamm/models/submodels/interface/kinetics/no_reaction.py b/pybamm/models/submodels/interface/kinetics/no_reaction.py
index 32f18a037f..399e9f06fb 100644
--- a/pybamm/models/submodels/interface/kinetics/no_reaction.py
+++ b/pybamm/models/submodels/interface/kinetics/no_reaction.py
@@ -45,12 +45,3 @@ def get_coupled_variables(self, variables):
self._get_standard_volumetric_current_density_variables(variables)
)
return variables
-
- def _get_dj_dc(self, variables):
- return pybamm.Scalar(0)
-
- def _get_dj_ddeltaphi(self, variables):
- return pybamm.Scalar(0)
-
- def _get_j_diffusion_limited_first_order(self, variables):
- return pybamm.Scalar(0)
diff --git a/pybamm/models/submodels/interface/kinetics/tafel.py b/pybamm/models/submodels/interface/kinetics/tafel.py
index eb9083d068..55deef3509 100644
--- a/pybamm/models/submodels/interface/kinetics/tafel.py
+++ b/pybamm/models/submodels/interface/kinetics/tafel.py
@@ -38,34 +38,6 @@ def _get_kinetics(self, j0, ne, eta_r, T, u):
u * j0 * pybamm.exp((ne * alpha / (2 * (1 + self.param.Theta * T))) * eta_r)
)
- def _get_dj_dc(self, variables):
- """See :meth:`pybamm.interface.kinetics.BaseKinetics._get_dj_dc`"""
- alpha = self.phase_param.alpha_bv
- (
- c_e,
- delta_phi,
- j0,
- ne,
- ocp,
- T,
- u,
- ) = self._get_interface_variables_for_first_order(variables)
- eta_r = delta_phi - ocp
- return (2 * u * j0.diff(c_e)) * pybamm.exp(
- (ne * alpha / (2 * (1 + self.param.Theta * T))) * eta_r
- )
-
- def _get_dj_ddeltaphi(self, variables):
- """See :meth:`pybamm.interface.kinetics.BaseKinetics._get_dj_ddeltaphi`"""
- alpha = self.phase_param.alpha_bv
- _, delta_phi, j0, ne, ocp, T, u = self._get_interface_variables_for_first_order(
- variables
- )
- eta_r = delta_phi - ocp
- return (2 * u * j0 * (ne / (2 * (1 + self.param.Theta * T)))) * pybamm.exp(
- (ne * alpha / (2 * (1 + self.param.Theta * T))) * eta_r
- )
-
# backwardtafel not used by any of the models
# class BackwardTafel(BaseKinetics):
diff --git a/pybamm/models/submodels/interface/sei/base_sei.py b/pybamm/models/submodels/interface/sei/base_sei.py
index f3f796a86f..36f4fb7d54 100644
--- a/pybamm/models/submodels/interface/sei/base_sei.py
+++ b/pybamm/models/submodels/interface/sei/base_sei.py
@@ -198,8 +198,9 @@ def _get_standard_concentration_variables(self, variables):
)
v_bar = phase_param.v_bar
z_sei = phase_param.z_sei
- # Set scales for the "EC Reaction Limited" model
- if self.options["SEI"] == "ec reaction limited":
+ # Set scales for the "EC Reaction Limited" models (both symmetric and
+ # asymmetric)
+ if self.options["SEI"].startswith("ec reaction limited"):
L_inner_0 = 0
L_outer_0 = 1
L_inner_crack_0 = 0
@@ -275,7 +276,7 @@ def _get_standard_concentration_variables(self, variables):
# Calculate change in SEI cracks concentration
# Initial state depends on roughness (to avoid division by zero)
- roughness_av = pybamm.x_average(roughness)
+ roughness_av = pybamm.yz_average(pybamm.x_average(roughness))
# choose an initial condition that is as close to zero to get the
# physics right, but doesn't cause a division by zero error
n_SEI_cr_init = (L_inner_crack_0 + L_outer_crack_0 / v_bar) * (
diff --git a/pybamm/models/submodels/interface/sei/sei_growth.py b/pybamm/models/submodels/interface/sei/sei_growth.py
index dcd991919d..9e8b812374 100644
--- a/pybamm/models/submodels/interface/sei/sei_growth.py
+++ b/pybamm/models/submodels/interface/sei/sei_growth.py
@@ -56,7 +56,7 @@ def get_fundamental_variables(self):
L_inner, L_outer = Ls
- if self.options["SEI"] == "ec reaction limited":
+ if self.options["SEI"].startswith("ec reaction limited"):
L_inner = 0 * L_inner # Set L_inner to zero, copying domains
variables = self._get_standard_thickness_variables(L_inner, L_outer)
@@ -100,9 +100,16 @@ def get_coupled_variables(self, variables):
# Thermal prefactor for reaction, interstitial and EC models
prefactor = 1 / (1 + self.param.Theta * T)
- if self.options["SEI"] == "reaction limited":
+ # Define alpha_SEI depending on whether it is symmetric or asymmetric. This
+ # applies to "reaction limited" and "EC reaction limited"
+ if self.options["SEI"].endswith("(asymmetric)"):
+ alpha_SEI = phase_param.alpha_SEI
+ else:
+ alpha_SEI = 0.5
+
+ if self.options["SEI"].startswith("reaction limited"):
C_sei = phase_param.C_sei_reaction
- j_sei = -(1 / C_sei) * pybamm.exp(-0.5 * prefactor * eta_SEI)
+ j_sei = -(1 / C_sei) * pybamm.exp(-alpha_SEI * prefactor * eta_SEI)
elif self.options["SEI"] == "electron-migration limited":
U_inner = phase_param.U_inner_electron
@@ -117,7 +124,7 @@ def get_coupled_variables(self, variables):
C_sei = phase_param.C_sei_solvent
j_sei = -1 / (C_sei * L_sei_outer)
- elif self.options["SEI"] == "ec reaction limited":
+ elif self.options["SEI"].startswith("ec reaction limited"):
C_sei_ec = phase_param.C_sei_ec
C_ec = phase_param.C_ec
@@ -129,7 +136,7 @@ def get_coupled_variables(self, variables):
# so
# j_sei = -C_sei_ec * exp() / (1 + L_sei * C_ec * C_sei_ec * exp())
# c_ec = 1 / (1 + L_sei * C_ec * C_sei_ec * exp())
- C_sei_exp = C_sei_ec * pybamm.exp(-0.5 * prefactor * eta_SEI)
+ C_sei_exp = C_sei_ec * pybamm.exp(-alpha_SEI * prefactor * eta_SEI)
j_sei = -C_sei_exp / (1 + L_sei * C_ec * C_sei_exp)
c_ec = 1 / (1 + L_sei * C_ec * C_sei_exp)
@@ -150,7 +157,7 @@ def get_coupled_variables(self, variables):
}
)
- if self.options["SEI"] == "ec reaction limited":
+ if self.options["SEI"].startswith("ec reaction limited"):
inner_sei_proportion = 0
else:
inner_sei_proportion = phase_param.inner_sei_proportion
@@ -224,7 +231,7 @@ def set_rhs(self, variables):
Gamma_SEI = self.phase_param.Gamma_SEI
- if self.options["SEI"] == "ec reaction limited":
+ if self.options["SEI"].startswith("ec reaction limited"):
self.rhs = {L_outer: -Gamma_SEI * a * j_outer + spreading_outer}
else:
v_bar = self.phase_param.v_bar
@@ -247,7 +254,7 @@ def set_initial_conditions(self, variables):
else:
L_inner_0 = self.phase_param.L_inner_0
L_outer_0 = self.phase_param.L_outer_0
- if self.options["SEI"] == "ec reaction limited":
+ if self.options["SEI"].startswith("ec reaction limited"):
self.initial_conditions = {L_outer: L_inner_0 + L_outer_0}
else:
self.initial_conditions = {L_inner: L_inner_0, L_outer: L_outer_0}
diff --git a/pybamm/models/submodels/oxygen_diffusion/__init__.py b/pybamm/models/submodels/oxygen_diffusion/__init__.py
index dde0318f48..a5161f93f9 100644
--- a/pybamm/models/submodels/oxygen_diffusion/__init__.py
+++ b/pybamm/models/submodels/oxygen_diffusion/__init__.py
@@ -1,6 +1,4 @@
from .base_oxygen_diffusion import BaseModel
from .leading_oxygen_diffusion import LeadingOrder
-from .first_order_oxygen_diffusion import FirstOrder
-from .composite_oxygen_diffusion import Composite
from .full_oxygen_diffusion import Full
from .no_oxygen import NoOxygen
diff --git a/pybamm/models/submodels/oxygen_diffusion/composite_oxygen_diffusion.py b/pybamm/models/submodels/oxygen_diffusion/composite_oxygen_diffusion.py
deleted file mode 100644
index ddd322f1dc..0000000000
--- a/pybamm/models/submodels/oxygen_diffusion/composite_oxygen_diffusion.py
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# Class for oxygen diffusion
-#
-import pybamm
-
-from .full_oxygen_diffusion import Full
-
-
-class Composite(Full):
- """Class for conservation of mass of oxygen. (Composite refers to composite
- expansion in asymptotic methods)
- In this model, extremely fast oxygen kinetics in the negative electrode imposes
- zero oxygen concentration there, and so the oxygen variable only lives in the
- separator and positive electrode. The boundary condition at the negative electrode/
- separator interface is homogeneous Dirichlet.
-
- Parameters
- ----------
- param : parameter class
- The parameters to use for this submodel
-
- extended : bool
- Whether to include feedback from the first-order terms
-
- **Extends:** :class:`pybamm.oxygen_diffusion.Full`
- """
-
- def __init__(self, param, extended=False):
- super().__init__(param)
- self.extended = extended
-
- def get_coupled_variables(self, variables):
-
- tor_0_s = variables["Leading-order separator electrolyte transport efficiency"]
- tor_0_p = variables["Leading-order positive electrolyte transport efficiency"]
- tor_0 = pybamm.concatenation(tor_0_s, tor_0_p)
-
- c_ox = variables["Separator and positive electrode oxygen concentration"]
-
- param = self.param
-
- N_ox_diffusion = -tor_0 * param.curlyD_ox * pybamm.grad(c_ox)
-
- # Note: no convection because c_ox_0 = 0 (at leading order)
- N_ox = N_ox_diffusion
- # Flux in the negative electrode is zero
- N_ox = pybamm.concatenation(
- pybamm.FullBroadcast(0, "negative electrode", "current collector"), N_ox
- )
-
- variables.update(self._get_standard_flux_variables(N_ox))
-
- return variables
-
- def set_rhs(self, variables):
- """Composite reaction-diffusion with source terms from leading order."""
-
- param = self.param
-
- eps_0_s = variables["Leading-order separator porosity"]
- eps_0_p = variables["Leading-order positive electrode porosity"]
- eps_0 = pybamm.concatenation(eps_0_s, eps_0_p)
-
- deps_0_dt_s = variables["Leading-order separator porosity change"]
- deps_0_dt_p = variables["Leading-order positive electrode porosity change"]
- deps_0_dt = pybamm.concatenation(deps_0_dt_s, deps_0_dt_p)
-
- c_ox = variables["Separator and positive electrode oxygen concentration"]
- N_ox = variables["Oxygen flux"].orphans[1]
-
- if self.extended is False:
- j_ox_0 = variables[
- "Leading-order positive electrode oxygen interfacial current density"
- ]
- pos_reactions = param.s_ox_Ox * j_ox_0
- else:
- j_ox_0 = variables["Positive electrode oxygen interfacial current density"]
- pos_reactions = param.s_ox_Ox * j_ox_0
- sep_reactions = pybamm.FullBroadcast(0, "separator", "current collector")
- source_terms_0 = (
- pybamm.concatenation(sep_reactions, pos_reactions) / param.gamma_e
- )
-
- self.rhs = {
- c_ox: (1 / eps_0)
- * (-pybamm.div(N_ox) / param.C_e + source_terms_0 - c_ox * deps_0_dt)
- }
diff --git a/pybamm/models/submodels/oxygen_diffusion/first_order_oxygen_diffusion.py b/pybamm/models/submodels/oxygen_diffusion/first_order_oxygen_diffusion.py
deleted file mode 100644
index 3750f132d4..0000000000
--- a/pybamm/models/submodels/oxygen_diffusion/first_order_oxygen_diffusion.py
+++ /dev/null
@@ -1,82 +0,0 @@
-#
-# Class for oxygen diffusion
-#
-import pybamm
-
-from .base_oxygen_diffusion import BaseModel
-
-
-class FirstOrder(BaseModel):
- """Class for conservation of mass of oxygen. (First-order refers to first-order
- expansion in asymptotic methods)
- In this model, extremely fast oxygen kinetics in the negative electrode imposes
- zero oxygen concentration there, and so the oxygen variable only lives in the
- separator and positive electrode. The boundary condition at the negative electrode/
- separator interface is homogeneous Dirichlet.
-
- Parameters
- ----------
- param : parameter class
- The parameters to use for this submodel
-
-
- **Extends:** :class:`pybamm.oxygen_diffusion.BaseModel`
- """
-
- def __init__(self, param):
- super().__init__(param)
-
- def get_coupled_variables(self, variables):
-
- param = self.param
- l_n = param.n.l
- l_s = param.s.l
- l_p = param.p.l
- x_s = pybamm.standard_spatial_vars.x_s
- x_p = pybamm.standard_spatial_vars.x_p
-
- # Unpack
- tor_s_0_av = variables[
- "Leading-order x-averaged separator electrolyte transport efficiency"
- ]
- tor_p_0_av = variables[
- "Leading-order x-averaged positive electrolyte transport efficiency"
- ]
-
- # Diffusivities
- D_ox_s = tor_s_0_av * param.curlyD_ox
- D_ox_p = tor_p_0_av * param.curlyD_ox
-
- # Reactions
- j_ox_0 = variables[
- "Leading-order x-averaged positive electrode "
- "oxygen interfacial current density"
- ]
- sj_ox_p = param.s_ox_Ox * j_ox_0
-
- # Fluxes
- N_ox_n_1 = pybamm.FullBroadcast(0, "negative electrode", "current collector")
- N_ox_s_1 = -pybamm.PrimaryBroadcast(sj_ox_p * l_p, "separator")
- N_ox_p_1 = sj_ox_p * (x_p - 1)
-
- # Concentrations
- c_ox_n_1 = pybamm.FullBroadcast(0, "negative electrode", "current collector")
- c_ox_s_1 = sj_ox_p * l_p / D_ox_s * (x_s - l_n)
- c_ox_p_1 = (
- -sj_ox_p / (2 * D_ox_p) * ((x_p - 1) ** 2 - l_p**2)
- + sj_ox_p * l_p * l_s / D_ox_s
- )
-
- # Update variables
- variables.update(
- self._get_standard_concentration_variables(
- param.C_e * c_ox_n_1, param.C_e * c_ox_s_1, param.C_e * c_ox_p_1
- )
- )
-
- N_ox = pybamm.concatenation(
- param.C_e * N_ox_n_1, param.C_e * N_ox_s_1, param.C_e * N_ox_p_1
- )
- variables.update(self._get_standard_flux_variables(N_ox))
-
- return variables
diff --git a/pybamm/models/submodels/porosity/base_porosity.py b/pybamm/models/submodels/porosity/base_porosity.py
index 80ed95ae60..f06f36ea80 100644
--- a/pybamm/models/submodels/porosity/base_porosity.py
+++ b/pybamm/models/submodels/porosity/base_porosity.py
@@ -19,7 +19,7 @@ class BaseModel(pybamm.BaseSubModel):
def __init__(self, param, options):
super().__init__(param, options=options)
- def _get_standard_porosity_variables(self, eps_dict, set_leading_order=False):
+ def _get_standard_porosity_variables(self, eps_dict):
eps = pybamm.concatenation(*eps_dict.values())
variables = {"Porosity": eps}
@@ -34,17 +34,9 @@ def _get_standard_porosity_variables(self, eps_dict, set_leading_order=False):
}
)
- if set_leading_order is True:
- leading_order_variables = {
- "Leading-order " + name.lower(): var for name, var in variables.items()
- }
- variables.update(leading_order_variables)
-
return variables
- def _get_standard_porosity_change_variables(
- self, depsdt_dict, set_leading_order=False
- ):
+ def _get_standard_porosity_change_variables(self, depsdt_dict):
deps_dt = pybamm.concatenation(*depsdt_dict.values())
variables = {"Porosity change": deps_dt}
@@ -58,12 +50,4 @@ def _get_standard_porosity_change_variables(
}
)
- if set_leading_order is True:
- variables.update(
- {
- f"Leading-order x-averaged {domain}"
- " porosity change": depsdt_k_av,
- }
- )
-
return variables
diff --git a/pybamm/models/submodels/porosity/constant_porosity.py b/pybamm/models/submodels/porosity/constant_porosity.py
index 934a9baf5b..8e13934666 100644
--- a/pybamm/models/submodels/porosity/constant_porosity.py
+++ b/pybamm/models/submodels/porosity/constant_porosity.py
@@ -25,14 +25,8 @@ def get_fundamental_variables(self):
eps_dict[domain] = self.param.domain_params[domain.split()[0]].epsilon_init
depsdt_dict[domain] = pybamm.FullBroadcast(0, domain, "current collector")
- variables = self._get_standard_porosity_variables(
- eps_dict, set_leading_order=True
- )
- variables.update(
- self._get_standard_porosity_change_variables(
- depsdt_dict, set_leading_order=True
- )
- )
+ variables = self._get_standard_porosity_variables(eps_dict)
+ variables.update(self._get_standard_porosity_change_variables(depsdt_dict))
return variables
diff --git a/pybamm/models/submodels/transport_efficiency/base_transport_efficiency.py b/pybamm/models/submodels/transport_efficiency/base_transport_efficiency.py
index bcc10000ea..27898ece50 100644
--- a/pybamm/models/submodels/transport_efficiency/base_transport_efficiency.py
+++ b/pybamm/models/submodels/transport_efficiency/base_transport_efficiency.py
@@ -42,12 +42,6 @@ def _get_standard_transport_efficiency_variables(self, tor_dict):
}
)
- if self.set_leading_order is True:
- leading_order_variables = {
- "Leading-order " + name.lower(): var for name, var in variables.items()
- }
- variables.update(leading_order_variables)
-
# Override print_name
tor.print_name = r"\epsilon^{b_e}"
diff --git a/pybamm/models/submodels/transport_efficiency/bruggeman_transport_efficiency.py b/pybamm/models/submodels/transport_efficiency/bruggeman_transport_efficiency.py
index 876f72d190..89ca38306e 100644
--- a/pybamm/models/submodels/transport_efficiency/bruggeman_transport_efficiency.py
+++ b/pybamm/models/submodels/transport_efficiency/bruggeman_transport_efficiency.py
@@ -20,9 +20,8 @@ class Bruggeman(BaseModel):
**Extends:** :class:`pybamm.transport_efficiency.BaseModel`
"""
- def __init__(self, param, component, options=None, set_leading_order=False):
+ def __init__(self, param, component, options=None):
super().__init__(param, component, options=options)
- self.set_leading_order = set_leading_order
def get_coupled_variables(self, variables):
if self.component == "Electrolyte":
diff --git a/pybamm/parameters/__init__.py b/pybamm/parameters/__init__.py
index 2d86081ecb..cf81b82fdd 100644
--- a/pybamm/parameters/__init__.py
+++ b/pybamm/parameters/__init__.py
@@ -1 +1,6 @@
-from .process_parameter_data import process_1D_data, process_2D_data
+from .process_parameter_data import (
+ process_1D_data,
+ process_2D_data,
+ process_2D_data_csv,
+ process_3D_data_csv,
+)
diff --git a/pybamm/parameters/ecm_parameters.py b/pybamm/parameters/ecm_parameters.py
new file mode 100644
index 0000000000..e2dc0eb3f4
--- /dev/null
+++ b/pybamm/parameters/ecm_parameters.py
@@ -0,0 +1,65 @@
+import pybamm
+
+
+class EcmParameters:
+ def __init__(self):
+
+ self.timescale = pybamm.Scalar(1)
+
+ self.cell_capacity = pybamm.Parameter("Cell capacity [A.h]")
+
+ self._set_current_parameters()
+ self._set_voltage_parameters()
+ self._set_thermal_parameters()
+ self._set_initial_condition_parameters()
+ self._set_compatibility_parameters()
+
+ def _set_current_parameters(self):
+ self.dimensional_current_with_time = pybamm.FunctionParameter(
+ "Current function [A]", {"Time [s]": pybamm.t * self.timescale}
+ )
+
+ def _set_voltage_parameters(self):
+ self.voltage_high_cut = pybamm.Parameter("Upper voltage cut-off [V]")
+ self.voltage_low_cut = pybamm.Parameter("Lower voltage cut-off [V]")
+
+ def _set_thermal_parameters(self):
+ self.cth_cell = pybamm.Parameter("Cell thermal mass [J/K]")
+ self.k_cell_jig = pybamm.Parameter("Cell-jig heat transfer coefficient [W/K]")
+
+ self.cth_jig = pybamm.Parameter("Jig thermal mass [J/K]")
+ self.k_jig_air = pybamm.Parameter("Jig-air heat transfer coefficient [W/K]")
+
+ def _set_compatibility_parameters(self):
+ # These are parameters that for compatibility with
+ # external circuits submodels
+ self.Q = self.cell_capacity
+ self.current_with_time = self.dimensional_current_with_time
+ self.dimensional_current_density_with_time = self.dimensional_current_with_time
+ self.I_typ = pybamm.Scalar(1)
+ self.n_electrodes_parallel = pybamm.Scalar(1)
+ self.A_cc = pybamm.Scalar(1)
+ self.n_cells = pybamm.Scalar(1)
+
+ def _set_initial_condition_parameters(self):
+ self.initial_soc = pybamm.Parameter("Initial SoC")
+ self.initial_T_cell = pybamm.Parameter("Initial cell temperature [degC]")
+ self.initial_T_jig = pybamm.Parameter("Initial jig temperature [degC]")
+
+ def T_amb(self, t):
+ return pybamm.FunctionParameter("Ambient temperature [degC]", {"Time [s]": t})
+
+ def ocv(self, soc):
+ return pybamm.FunctionParameter("Open circuit voltage [V]", {"SoC": soc})
+
+ def rcr_element(self, name, T_cell, current, soc):
+ inputs = {"Cell temperature [degC]": T_cell, "Current [A]": current, "SoC": soc}
+
+ return pybamm.FunctionParameter(name, inputs)
+
+ def initial_rc_overpotential(self, element_number):
+ return pybamm.Parameter(f"Element-{element_number} initial overpotential [V]")
+
+ def dUdT(self, ocv, T_cell):
+ inputs = {"Open circuit voltage [V]": ocv, "Cell temperature [degC]": T_cell}
+ return pybamm.FunctionParameter("Entropic change [V/K]", inputs)
diff --git a/pybamm/parameters/lead_acid_parameters.py b/pybamm/parameters/lead_acid_parameters.py
index ef2626b6a3..6c9ff95c20 100644
--- a/pybamm/parameters/lead_acid_parameters.py
+++ b/pybamm/parameters/lead_acid_parameters.py
@@ -422,7 +422,7 @@ def kappa_e(self, c_e, T):
kappa_scale = self.F**2 * self.D_e_typ * self.c_e_typ / (self.R * self.T_ref)
return self.kappa_e_dimensional(c_e_dimensional, self.T_ref) / kappa_scale
- def chiT_over_c(self, c_e, T):
+ def chiRT_over_Fc(self, c_e, T):
"""
chi * (1 + Theta * T) / c,
as it appears in the electrolyte potential equation
diff --git a/pybamm/parameters/lithium_ion_parameters.py b/pybamm/parameters/lithium_ion_parameters.py
index 7ffe53186c..c2118edaab 100644
--- a/pybamm/parameters/lithium_ion_parameters.py
+++ b/pybamm/parameters/lithium_ion_parameters.py
@@ -142,6 +142,27 @@ def _set_dimensional_parameters(self):
self.ocv_ref = self.p.U_ref - self.n.U_ref
self.ocv_init_dim = self.p.prim.U_init_dim - self.n.prim.U_init_dim
+ def chi_dimensional(self, c_e, T):
+ """
+ Thermodynamic factor:
+ (1-2*t_plus) is for Nernst-Planck,
+ 2*(1-t_plus) for Stefan-Maxwell,
+ see Bizeray et al (2016) "Resolving a discrepancy ...".
+ """
+ return (2 * (1 - self.t_plus_dimensional(c_e, T))) * (
+ self.one_plus_dlnf_dlnc_dimensional(c_e, T)
+ )
+
+ def t_plus_dimensional(self, c_e, T):
+ """Cation transference number (dimensionless)"""
+ inputs = {"Electrolyte concentration [mol.m-3]": c_e, "Temperature [K]": T}
+ return pybamm.FunctionParameter("Cation transference number", inputs)
+
+ def one_plus_dlnf_dlnc_dimensional(self, c_e, T):
+ """Thermodynamic factor (dimensionless)"""
+ inputs = {"Electrolyte concentration [mol.m-3]": c_e, "Temperature [K]": T}
+ return pybamm.FunctionParameter("1 + dlnf/dlnc", inputs)
+
def D_e_dimensional(self, c_e, T):
"""Dimensional diffusivity in electrolyte"""
tol = pybamm.settings.tolerances["D_e__c_e"]
@@ -301,9 +322,11 @@ def chi(self, c_e, T):
2*(1-t_plus) for Stefan-Maxwell,
see Bizeray et al (2016) "Resolving a discrepancy ...".
"""
- return (2 * (1 - self.t_plus(c_e, T))) * (self.one_plus_dlnf_dlnc(c_e, T))
+ c_e_dimensional = c_e * self.c_e_typ
+ T_dim = self.Delta_T * T + self.T_ref
+ return self.chi_dimensional(c_e_dimensional, T_dim)
- def chiT_over_c(self, c_e, T):
+ def chiRT_over_Fc(self, c_e, T):
"""
chi * (1 + Theta * T) / c,
as it appears in the electrolyte potential equation
@@ -314,19 +337,9 @@ def chiT_over_c(self, c_e, T):
def t_plus(self, c_e, T):
"""Cation transference number (dimensionless)"""
- inputs = {
- "Electrolyte concentration [mol.m-3]": c_e * self.c_e_typ,
- "Temperature [K]": self.Delta_T * T + self.T_ref,
- }
- return pybamm.FunctionParameter("Cation transference number", inputs)
-
- def one_plus_dlnf_dlnc(self, c_e, T):
- """Thermodynamic factor (dimensionless)"""
- inputs = {
- "Electrolyte concentration [mol.m-3]": c_e * self.c_e_typ,
- "Temperature [K]": self.Delta_T * T + self.T_ref,
- }
- return pybamm.FunctionParameter("1 + dlnf/dlnc", inputs)
+ c_e_dimensional = c_e * self.c_e_typ
+ T_dim = self.Delta_T * T + self.T_ref
+ return self.t_plus_dimensional(c_e_dimensional, T_dim)
def D_e(self, c_e, T):
"""Dimensionless electrolyte diffusivity"""
@@ -704,6 +717,7 @@ def _set_dimensional_parameters(self):
self.E_sei_dimensional = pybamm.Parameter(
f"{pref}SEI growth activation energy [J.mol-1]"
)
+ self.alpha_SEI = pybamm.Parameter(f"{pref}SEI growth transfer coefficient")
# EC reaction
self.c_ec_0_dim = pybamm.Parameter(
@@ -763,18 +777,16 @@ def _set_dimensional_parameters(self):
f"{pref}{Domain} electrode active material volume fraction",
{"Through-cell distance (x) [m]": x},
)
- self.c_init = (
- pybamm.FunctionParameter(
- f"{pref}Initial concentration in {domain} electrode [mol.m-3]",
- {
- "Radial distance (r) [m]": r,
- "Through-cell distance (x) [m]": pybamm.PrimaryBroadcast(
- x, f"{domain} {phase_name}particle"
- ),
- },
- )
- / self.c_max
+ self.c_init_dimensional = pybamm.FunctionParameter(
+ f"{pref}Initial concentration in {domain} electrode [mol.m-3]",
+ {
+ "Radial distance (r) [m]": r,
+ "Through-cell distance (x) [m]": pybamm.PrimaryBroadcast(
+ x, f"{domain} {phase_name}particle"
+ ),
+ },
)
+ self.c_init = self.c_init_dimensional / self.c_max
self.c_init_av = pybamm.xyz_average(pybamm.r_average(self.c_init))
eps_c_init_av = pybamm.xyz_average(
self.epsilon_s * pybamm.r_average(self.c_init)
diff --git a/pybamm/parameters/parameter_sets.py b/pybamm/parameters/parameter_sets.py
index f60f95b412..6144d1fdfc 100644
--- a/pybamm/parameters/parameter_sets.py
+++ b/pybamm/parameters/parameter_sets.py
@@ -1,5 +1,5 @@
import warnings
-import pkg_resources
+import importlib_metadata
import textwrap
from collections.abc import Mapping
@@ -34,12 +34,12 @@ class ParameterSets(Mapping):
"""
def __init__(self):
- # Load Parameter Sets registered to `pybamm_parameter_set`
- ps = dict()
- for entry_point in pkg_resources.iter_entry_points("pybamm_parameter_set"):
- ps[entry_point.name] = entry_point.load()
-
- self.__all_parameter_sets = ps
+ # Dict of entry points for parameter sets, lazily load entry points as
+ self.__all_parameter_sets = dict()
+ for entry_point in importlib_metadata.entry_points(
+ group="pybamm_parameter_sets"
+ ):
+ self.__all_parameter_sets[entry_point.name] = entry_point
def __new__(cls):
"""Ensure only one instance of ParameterSets exists"""
@@ -48,7 +48,18 @@ def __new__(cls):
return cls.instance
def __getitem__(self, key) -> dict:
- return self.__all_parameter_sets[key]()
+ return self.__load_entry_point__(key)()
+
+ def __load_entry_point__(self, key) -> callable:
+ """Check that ``key`` is a registered ``pybamm_parameter_sets``,
+ and return the entry point for the parameter set, loading it needed.
+ """
+ if key not in self.__all_parameter_sets:
+ raise KeyError(f"Unknown parameter set: {key}")
+ ps = self.__all_parameter_sets[key]
+ if isinstance(ps, importlib_metadata.EntryPoint):
+ ps = self.__all_parameter_sets[key] = ps.load()
+ return ps
def __iter__(self):
return self.__all_parameter_sets.__iter__()
@@ -58,7 +69,7 @@ def __len__(self) -> int:
def get_docstring(self, key):
"""Return the docstring for the ``key`` parameter set"""
- return textwrap.dedent(self.__all_parameter_sets[key].__doc__)
+ return textwrap.dedent(self.__load_entry_point__(key).__doc__)
def __getattribute__(self, name):
try:
@@ -67,16 +78,14 @@ def __getattribute__(self, name):
# For backwards compatibility, parameter sets that used to be defined in
# this file now return the name as a string, which will load the same
# parameter set as before when passed to `ParameterValues`
- if name in self.__all_parameter_sets:
- out = name
- else:
- raise error
- warnings.warn(
- f"Parameter sets should be called directly by their name ({name}), "
- f"instead of via pybamm.parameter_sets (pybamm.parameter_sets.{name}).",
- DeprecationWarning,
- )
- return out
+ if name in self:
+ msg = (
+ "Parameter sets should be called directly by their name ({0}), "
+ "instead of via pybamm.parameter_sets (pybamm.parameter_sets.{0})."
+ ).format(name)
+ warnings.warn(msg, DeprecationWarning)
+ return name
+ raise error
#: Singleton Instance of :class:ParameterSets """
diff --git a/pybamm/parameters/parameter_values.py b/pybamm/parameters/parameter_values.py
index b6d1151414..4304307289 100644
--- a/pybamm/parameters/parameter_values.py
+++ b/pybamm/parameters/parameter_values.py
@@ -66,7 +66,7 @@ def __init__(self, values=None, chemistry=None):
# Then update with values dictionary or file
if values is not None:
if isinstance(values, dict):
- if "chemistry" in values:
+ if "negative electrode" in values:
warnings.warn(
"Creating a parameter set from a dictionary of components has "
"been deprecated and will be removed in a future release. "
@@ -92,11 +92,6 @@ def __init__(self, values=None, chemistry=None):
# Initialise empty _processed_symbols dict (for caching)
self._processed_symbols = {}
- self.parameter_events = []
-
- # Don't touch this parameter unless you know what you are doing
- # This is for the conversion to Julia (ModelingToolkit)
- self._replace_callable_function_parameters = True
# save citations
citations = []
@@ -146,9 +141,6 @@ def copy(self):
"""Returns a copy of the parameter values. Makes sure to copy the internal
dictionary."""
new_copy = ParameterValues(self._dict_items.copy())
- new_copy._replace_callable_function_parameters = (
- self._replace_callable_function_parameters
- )
return new_copy
def search(self, key, print_values=True):
@@ -393,7 +385,8 @@ def process_model(self, unprocessed_model, inplace=True):
pybamm.logger.verbose(
"Processing parameters for {!r} (rhs)".format(variable)
)
- new_rhs[variable] = self.process_symbol(equation)
+ new_variable = self.process_symbol(variable)
+ new_rhs[new_variable] = self.process_symbol(equation)
model.rhs = new_rhs
new_algebraic = {}
@@ -401,7 +394,8 @@ def process_model(self, unprocessed_model, inplace=True):
pybamm.logger.verbose(
"Processing parameters for {!r} (algebraic)".format(variable)
)
- new_algebraic[variable] = self.process_symbol(equation)
+ new_variable = self.process_symbol(variable)
+ new_algebraic[new_variable] = self.process_symbol(equation)
model.algebraic = new_algebraic
new_initial_conditions = {}
@@ -409,7 +403,8 @@ def process_model(self, unprocessed_model, inplace=True):
pybamm.logger.verbose(
"Processing parameters for {!r} (initial conditions)".format(variable)
)
- new_initial_conditions[variable] = self.process_symbol(equation)
+ new_variable = self.process_symbol(variable)
+ new_initial_conditions[new_variable] = self.process_symbol(equation)
model.initial_conditions = new_initial_conditions
model.boundary_conditions = self.process_boundary_conditions(unprocessed_model)
@@ -433,7 +428,8 @@ def process_model(self, unprocessed_model, inplace=True):
)
)
- for event in self.parameter_events:
+ interpolant_events = self._get_interpolant_events(model)
+ for event in interpolant_events:
pybamm.logger.verbose(
"Processing parameters for event '{}''".format(event.name)
)
@@ -475,6 +471,33 @@ def process_model(self, unprocessed_model, inplace=True):
return model
+ def _get_interpolant_events(self, model):
+ """Add events for functions that have been defined as parameters"""
+ # Define events to catch extrapolation. In these events the sign is
+ # important: it should be positive inside of the range and negative
+ # outside of it
+ interpolants = model._find_symbols(pybamm.Interpolant)
+ interpolant_events = []
+ for interpolant in interpolants:
+ xs = interpolant.x
+ children = interpolant.children
+ for x, child in zip(xs, children):
+ interpolant_events.extend(
+ [
+ pybamm.Event(
+ f"Interpolant '{interpolant.name}' lower bound",
+ pybamm.min(child - min(x)),
+ pybamm.EventType.INTERPOLANT_EXTRAPOLATION,
+ ),
+ pybamm.Event(
+ f"Interpolant '{interpolant.name}' upper bound",
+ pybamm.min(max(x) - child),
+ pybamm.EventType.INTERPOLANT_EXTRAPOLATION,
+ ),
+ ]
+ )
+ return interpolant_events
+
def process_boundary_conditions(self, model):
"""
Process boundary conditions for a model
@@ -572,7 +595,7 @@ def _process_symbol(self, symbol):
# Check not NaN (parameter in csv file but no value given)
if np.isnan(value):
raise ValueError(f"Parameter '{symbol.name}' not found")
- # Scalar inherits name (for updating parameters)
+ # Scalar inherits name
return pybamm.Scalar(value, name=symbol.name)
elif isinstance(value, pybamm.Symbol):
new_value = self.process_symbol(value)
@@ -582,18 +605,29 @@ def _process_symbol(self, symbol):
raise TypeError("Cannot process parameter '{}'".format(value))
elif isinstance(symbol, pybamm.FunctionParameter):
- new_children = []
- for child in symbol.children:
- if symbol.diff_variable is not None and any(
- x == symbol.diff_variable for x in child.pre_order()
- ):
- # Wrap with NotConstant to avoid simplification,
- # which would stop symbolic diff from working properly
- new_child = pybamm.NotConstant(child)
- new_children.append(self.process_symbol(new_child))
- else:
- new_children.append(self.process_symbol(child))
function_name = self[symbol.name]
+ if isinstance(
+ function_name,
+ (numbers.Number, pybamm.Interpolant, pybamm.InputParameter),
+ ) or (
+ isinstance(function_name, pybamm.Symbol)
+ and function_name.size_for_testing == 1
+ ):
+ # no need to process children, they will only be used for shape
+ new_children = symbol.children
+ else:
+ # process children
+ new_children = []
+ for child in symbol.children:
+ if symbol.diff_variable is not None and any(
+ x == symbol.diff_variable for x in child.pre_order()
+ ):
+ # Wrap with NotConstant to avoid simplification,
+ # which would stop symbolic diff from working properly
+ new_child = pybamm.NotConstant(child)
+ new_children.append(self.process_symbol(new_child))
+ else:
+ new_children.append(self.process_symbol(child))
# Create Function or Interpolant or Scalar object
if isinstance(function_name, tuple):
@@ -613,31 +647,8 @@ def _process_symbol(self, symbol):
input_data[0],
input_data[-1],
new_children,
- interpolator="cubic",
name=name,
)
- # Define event to catch extrapolation. In these events the sign is
- # important: it should be positive inside of the range and negative
- # outside of it
- for data_index in range(len(data[0])):
- self.parameter_events.append(
- pybamm.Event(
- "Interpolant {} lower bound".format(name),
- pybamm.min(
- new_children[data_index] - min(data[0][data_index])
- ),
- pybamm.EventType.INTERPOLANT_EXTRAPOLATION,
- )
- )
- self.parameter_events.append(
- pybamm.Event(
- "Interpolant {} upper bound".format(name),
- pybamm.min(
- max(data[0][data_index]) - new_children[data_index]
- ),
- pybamm.EventType.INTERPOLANT_EXTRAPOLATION,
- )
- )
else: # pragma: no cover
raise ValueError(
@@ -656,30 +667,6 @@ def _process_symbol(self, symbol):
elif callable(function_name):
# otherwise evaluate the function to create a new PyBaMM object
function = function_name(*new_children)
- if (
- self._replace_callable_function_parameters is False
- and not isinstance(
- self.process_symbol(function), (pybamm.Scalar, pybamm.Broadcast)
- )
- and symbol.print_name is not None
- and symbol.diff_variable is None
- ):
- # Special trick for printing in Julia ModelingToolkit format
- out = pybamm.FunctionParameter(
- symbol.print_name, dict(zip(symbol.input_names, new_children))
- )
-
- out.arg_names = inspect.getfullargspec(function_name)[0]
- out.callable = self.process_symbol(
- function_name(
- *[
- pybamm.Variable(arg_name, domains=child.domains)
- for arg_name, child in zip(out.arg_names, new_children)
- ]
- )
- )
-
- return out
elif isinstance(
function_name, (pybamm.Interpolant, pybamm.InputParameter)
) or (
@@ -739,6 +726,13 @@ def _process_symbol(self, symbol):
new_children = [self.process_symbol(child) for child in symbol.children]
return symbol._concatenation_new_copy(new_children)
+ # Variables: update scale
+ elif isinstance(symbol, pybamm.Variable):
+ new_symbol = symbol.create_copy()
+ new_symbol._scale = self.process_symbol(symbol.scale)
+ new_symbol._reference = self.process_symbol(symbol.reference)
+ return new_symbol
+
else:
# Backup option: return the object
return symbol
diff --git a/pybamm/parameters/process_parameter_data.py b/pybamm/parameters/process_parameter_data.py
index dd682ca99b..1373aefea7 100644
--- a/pybamm/parameters/process_parameter_data.py
+++ b/pybamm/parameters/process_parameter_data.py
@@ -58,3 +58,113 @@ def process_2D_data(name, path=None):
data[0] = [np.array(el) for el in data[0]]
data[1] = np.array(data[1])
return (name, tuple(data))
+
+
+def process_2D_data_csv(name, path=None):
+ """
+ Process 2D data from a csv file. Assumes
+ data is in the form of a three columns
+ and that all data points lie on a regular
+ grid. The first column is assumed to
+ be the 'slowest' changing variable and
+ the second column the 'fastest' changing
+ variable, which is the C convention for
+ indexing multidimensional arrays (as opposed
+ to the Fortran convention where the 'fastest'
+ changing variable comes first).
+
+ Parameters
+ ----------
+ name : str
+ The name to be given to the function
+ path : str
+ The path to the file where the three
+ dimensional data is stored.
+
+ Returns
+ -------
+ formatted_data: tuple
+ A tuple containing the name of the function
+ and the data formatted correctly for use
+ within three-dimensional interpolants.
+ """
+
+ filename, name = _process_name(name, path, ".csv")
+
+ df = pd.read_csv(filename)
+
+ x1 = np.array(list(set(df.iloc[:, 0])))
+ x2 = np.array(list(set(df.iloc[:, 1])))
+
+ value = df.iloc[:, 2].to_numpy()
+
+ x1.sort()
+ x2.sort()
+
+ x = (x1, x2)
+
+ value_data = np.reshape(
+ value,
+ (len(x1), len(x2)),
+ order="C", # use the C convention
+ )
+
+ formatted_data = (name, (x, value_data))
+
+ return formatted_data
+
+
+def process_3D_data_csv(name, path=None):
+ """
+ Process 3D data from a csv file. Assumes
+ data is in the form of four columns and
+ that all data points lie on a
+ regular grid. The first column is assumed to
+ be the 'slowest' changing variable and
+ the third column the 'fastest' changing
+ variable, which is the C convention for
+ indexing multidimensional arrays (as opposed
+ to the Fortran convention where the 'fastest'
+ changing variable comes first).
+
+ Parameters
+ ----------
+ name : str
+ The name to be given to the function
+ path : str
+ The path to the file where the three
+ dimensional data is stored.
+
+ Returns
+ -------
+ formatted_data: tuple
+ A tuple containing the name of the function
+ and the data formatted correctly for use
+ within three-dimensional interpolants.
+ """
+
+ filename, name = _process_name(name, path, ".csv")
+
+ df = pd.read_csv(filename)
+
+ x1 = np.array(list(set(df.iloc[:, 0])))
+ x2 = np.array(list(set(df.iloc[:, 1])))
+ x3 = np.array(list(set(df.iloc[:, 2])))
+
+ value = df.iloc[:, 3].to_numpy()
+
+ x1.sort()
+ x2.sort()
+ x3.sort()
+
+ x = (x1, x2, x3)
+
+ value_data = np.reshape(
+ value,
+ (len(x1), len(x2), len(x3)),
+ order="C",
+ )
+
+ formatted_data = (name, (x, value_data))
+
+ return formatted_data
diff --git a/pybamm/simulation.py b/pybamm/simulation.py
index c447ecf14f..9569c4da0a 100644
--- a/pybamm/simulation.py
+++ b/pybamm/simulation.py
@@ -7,6 +7,7 @@
import copy
import warnings
import sys
+from functools import lru_cache
def is_notebook():
@@ -374,7 +375,7 @@ def set_parameters(self):
self._model_with_set_params = self._parameter_values.process_model(
self._unprocessed_model, inplace=False
)
- self._parameter_values.process_geometry(self._geometry)
+ self._parameter_values.process_geometry(self.geometry)
self.model = self._model_with_set_params
def set_initial_soc(self, initial_soc):
@@ -889,21 +890,19 @@ def step(
return self.solution
+ @lru_cache
def get_esoh_solver(self, calc_esoh):
if (
calc_esoh is False
or isinstance(self.model, pybamm.lead_acid.BaseModel)
+ or isinstance(self.model, pybamm.equivalent_circuit.Thevenin)
or self.model.options["working electrode"] != "both"
):
return None
- try:
- return self._esoh_solver
- except AttributeError:
- self._esoh_solver = pybamm.lithium_ion.ElectrodeSOHSolver(
- self.parameter_values, self.model.param
- )
- return self._esoh_solver
+ return pybamm.lithium_ion.ElectrodeSOHSolver(
+ self.parameter_values, self.model.param
+ )
def plot(self, output_variables=None, **kwargs):
"""
diff --git a/pybamm/solvers/base_solver.py b/pybamm/solvers/base_solver.py
index b97b1b1492..0d7ba94978 100644
--- a/pybamm/solvers/base_solver.py
+++ b/pybamm/solvers/base_solver.py
@@ -47,20 +47,21 @@ def __init__(
atol=1e-6,
root_method=None,
root_tol=1e-6,
- extrap_tol=0,
+ extrap_tol=None,
):
self.method = method
self.rtol = rtol
self.atol = atol
self.root_tol = root_tol
self.root_method = root_method
- self.extrap_tol = extrap_tol
+ self.extrap_tol = extrap_tol or -1e-10
self.models_set_up = {}
# Defaults, can be overwritten by specific solver
self.name = "Base solver"
self.ode_solver = False
self.algebraic_solver = False
+ self._on_extrapolation = "warn"
@property
def root_method(self):
@@ -450,11 +451,11 @@ def _set_up_events(self, model, t_eval, inputs, vars_for_processing):
expr = symbol.right
found_t = True
# Dimensional
- elif symbol.right == (pybamm.t * model.timescale_eval):
- expr = symbol.left / symbol.right.right
+ elif symbol.right == (model.timescale_eval * pybamm.t):
+ expr = symbol.left / symbol.right.left
found_t = True
- elif symbol.left == (pybamm.t * model.timescale_eval):
- expr = symbol.right / symbol.left.right
+ elif symbol.left == (model.timescale_eval * pybamm.t):
+ expr = symbol.right / symbol.left.left
found_t = True
# Update the events if the heaviside function depended on t
@@ -552,7 +553,7 @@ def _set_up_events(self, model, t_eval, inputs, vars_for_processing):
discontinuity_events,
)
- def _set_initial_conditions(self, model, inputs_dict, update_rhs):
+ def _set_initial_conditions(self, model, time, inputs_dict, update_rhs):
"""
Set initial conditions for the model. This is skipped if the solver is an
algebraic solver (since this would make the algebraic solver redundant), and if
@@ -587,14 +588,14 @@ def _set_initial_conditions(self, model, inputs_dict, update_rhs):
elif len(model.algebraic) == 0:
if update_rhs is True:
# Recalculate initial conditions for the rhs equations
- y0 = model.initial_conditions_eval(0, y_zero, inputs)
+ y0 = model.initial_conditions_eval(time, y_zero, inputs)
else:
# Don't update model.y0
return
else:
if update_rhs is True:
# Recalculate initial conditions for the rhs equations
- y0_from_inputs = model.initial_conditions_eval(0, y_zero, inputs)
+ y0_from_inputs = model.initial_conditions_eval(time, y_zero, inputs)
# Reuse old solution for algebraic equations
y0_from_model = model.y0
len_rhs = model.len_rhs
@@ -609,7 +610,7 @@ def _set_initial_conditions(self, model, inputs_dict, update_rhs):
model.y0 = np.vstack(
(y0_from_inputs[:len_rhs], y0_from_model[len_rhs:])
)
- y0 = self.calculate_consistent_state(model, 0, inputs_dict)
+ y0 = self.calculate_consistent_state(model, time, inputs_dict)
# Make y0 a function of inputs if doing symbolic with casadi
model.y0 = y0
@@ -645,6 +646,7 @@ def calculate_consistent_state(self, model, time=0, inputs=None):
)
pybamm.logger.debug("Found consistent states")
+ self.check_extrapolation(root_sol, model.events)
y0 = root_sol.all_ys[0]
return y0
@@ -830,11 +832,13 @@ def solve(
"for initial conditions."
)
- self._set_initial_conditions(model, ext_and_inputs_list[0], update_rhs=True)
-
# Non-dimensionalise time
t_eval_dimensionless = t_eval / model.timescale_eval
+ self._set_initial_conditions(
+ model, t_eval_dimensionless[0], ext_and_inputs_list[0], update_rhs=True
+ )
+
# Check initial conditions don't violate events
self._check_events_with_initial_conditions(
t_eval_dimensionless, model, ext_and_inputs_list[0]
@@ -909,14 +913,7 @@ def solve(
for i, solution in enumerate(solutions):
# Check if extrapolation occurred
- extrapolation = self.check_extrapolation(solution, model.events)
- if extrapolation:
- warnings.warn(
- "While solving {} extrapolation occurred for {}".format(
- model.name, extrapolation
- ),
- pybamm.SolverWarning,
- )
+ self.check_extrapolation(solution, model.events)
# Identify the event that caused termination and update the solution to
# include the event time and state
solutions[i], termination = self.get_termination_reason(
@@ -1174,7 +1171,7 @@ def step(
set_up_time = timer.time()
# (Re-)calculate consistent initial conditions
- self._set_initial_conditions(model, ext_and_inputs, update_rhs=False)
+ self._set_initial_conditions(model, t, ext_and_inputs, update_rhs=False)
# Non-dimensionalise dt
dt_dimensionless = dt / model.timescale_eval
@@ -1195,14 +1192,7 @@ def step(
solution.solve_time = timer.time()
# Check if extrapolation occurred
- extrapolation = self.check_extrapolation(solution, model.events)
- if extrapolation:
- warnings.warn(
- "While solving {} extrapolation occurred for {}".format(
- model.name, extrapolation
- ),
- pybamm.SolverWarning,
- )
+ self.check_extrapolation(solution, model.events)
# Identify the event that caused termination and update the solution to
# include the event time and state
@@ -1320,31 +1310,41 @@ def check_extrapolation(self, solution, events):
events : dict
Dictionary of events
"""
- extrap_events = {}
-
- for event in events:
- if event.event_type == pybamm.EventType.INTERPOLANT_EXTRAPOLATION:
- # First set to False, then loop through and change to True if any
- # events extrapolate
- extrap_events[event.name] = False
- # This might be a little bit slow but is ok for now
- for ts, ys, inputs in zip(
- solution.all_ts, solution.all_ys, solution.all_inputs
- ):
- for inner_idx, t in enumerate(ts):
- y = ys[:, inner_idx]
- if isinstance(y, casadi.DM):
- y = y.full()
- if (
- event.expression.evaluate(t, y, inputs=inputs)
- < self.extrap_tol
- ):
- extrap_events[event.name] = True
-
- # Add the event dictionaryto the solution object
- solution.extrap_events = extrap_events
-
- return [k for k, v in extrap_events.items() if v]
+ extrap_events = []
+
+ if any(
+ event.event_type == pybamm.EventType.INTERPOLANT_EXTRAPOLATION
+ for event in events
+ ):
+ last_state = solution.last_state
+ t = last_state.all_ts[0][0]
+ y = last_state.all_ys[0][:, 0]
+ inputs = last_state.all_inputs[0]
+
+ if isinstance(y, casadi.DM):
+ y = y.full()
+ for event in events:
+ if event.event_type == pybamm.EventType.INTERPOLANT_EXTRAPOLATION:
+ if event.expression.evaluate(t, y, inputs=inputs) < self.extrap_tol:
+ extrap_events.append(event.name)
+
+ if any(extrap_events):
+ if self._on_extrapolation == "warn":
+ name = solution.all_models[-1].name
+ warnings.warn(
+ f"While solving {name} extrapolation occurred "
+ f"for {extrap_events}",
+ pybamm.SolverWarning,
+ )
+ # Add the event dictionaryto the solution object
+ solution.extrap_events = extrap_events
+ elif self._on_extrapolation == "error":
+ raise pybamm.SolverError(
+ "Solver failed because the following "
+ f"interpolation bounds were exceeded: {extrap_events}. "
+ "You may need to provide additional interpolation points "
+ "outside these bounds."
+ )
def _set_up_ext_and_inputs(self, model, external_variables, inputs):
"""Set up external variables and input parameters"""
diff --git a/pybamm/solvers/c_solvers/idaklu.cpp b/pybamm/solvers/c_solvers/idaklu.cpp
index 9241487419..ac90172c97 100644
--- a/pybamm/solvers/c_solvers/idaklu.cpp
+++ b/pybamm/solvers/c_solvers/idaklu.cpp
@@ -1,455 +1,62 @@
-#include "idaklu.hpp"
-#include
+#include "idaklu/casadi_solver.hpp"
+#include "idaklu/common.hpp"
+#include "idaklu/python.hpp"
-class PybammFunctions
-{
-public:
- int number_of_states;
- int number_of_parameters;
- int number_of_events;
-
- PybammFunctions(const residual_type &res, const jacobian_type &jac,
- const sensitivities_type &sens,
- const jac_get_type &get_jac_data_in,
- const jac_get_type &get_jac_row_vals_in,
- const jac_get_type &get_jac_col_ptrs_in,
- const event_type &event,
- const int n_s, int n_e, const int n_p,
- const np_array &inputs)
- : number_of_states(n_s), number_of_events(n_e),
- number_of_parameters(n_p),
- py_res(res), py_jac(jac),
- py_sens(sens),
- py_event(event), py_get_jac_data(get_jac_data_in),
- py_get_jac_row_vals(get_jac_row_vals_in),
- py_get_jac_col_ptrs(get_jac_col_ptrs_in),
- inputs(inputs)
- {
- }
-
- np_array operator()(double t, np_array y, np_array yp)
- {
- return py_res(t, y, inputs, yp);
- }
-
- np_array res(double t, np_array y, np_array yp)
- {
- return py_res(t, y, inputs, yp);
- }
-
- void jac(double t, np_array y, double cj)
- {
- // this function evaluates the jacobian and sets it to be the attribute
- // of a python class which can then be called by get_jac_data,
- // get_jac_col_ptr, etc
- py_jac(t, y, inputs, cj);
- }
-
- void sensitivities(
- std::vector& resvalS,
- const double t, const np_array& y, const np_array& yp,
- const std::vector& yS, const std::vector& ypS)
- {
- // this function evaluates the sensitivity equations required by IDAS,
- // returning them in resvalS, which is preallocated as a numpy array
- // of size (np, n), where n is the number of states and np is the number
- // of parameters
- //
- // yS and ypS are also shape (np, n), y and yp are shape (n)
- //
- // dF/dy * s_i + dF/dyd * sd + dFdp_i for i in range(np)
- py_sens(resvalS, t, y, inputs, yp, yS, ypS);
- }
-
- np_array get_jac_data() { return py_get_jac_data(); }
-
- np_array get_jac_row_vals() { return py_get_jac_row_vals(); }
-
- np_array get_jac_col_ptrs() { return py_get_jac_col_ptrs(); }
-
- np_array events(double t, np_array y) { return py_event(t, y, inputs); }
+#include
+#include
+#include
+#include
-private:
- residual_type py_res;
- sensitivities_type py_sens;
- jacobian_type py_jac;
- event_type py_event;
- jac_get_type py_get_jac_data;
- jac_get_type py_get_jac_row_vals;
- jac_get_type py_get_jac_col_ptrs;
- const np_array &inputs;
-};
+#include
-int residual(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr,
- void *user_data)
+Function generate_function(const std::string &data)
{
- PybammFunctions *python_functions_ptr =
- static_cast(user_data);
- PybammFunctions python_functions = *python_functions_ptr;
-
- realtype *yval, *ypval, *rval;
- yval = N_VGetArrayPointer(yy);
- ypval = N_VGetArrayPointer(yp);
- rval = N_VGetArrayPointer(rr);
-
- int n = python_functions.number_of_states;
- py::array_t y_np = py::array_t(n, yval);
- py::array_t yp_np = py::array_t(n, ypval);
-
- py::array_t r_np;
-
- r_np = python_functions.res(tres, y_np, yp_np);
-
- auto r_np_ptr = r_np.unchecked<1>();
-
- // just copying data
- int i;
- for (i = 0; i < n; i++)
- {
- rval[i] = r_np_ptr[i];
- }
- return 0;
+ return Function::deserialize(data);
}
-int jacobian(realtype tt, realtype cj, N_Vector yy, N_Vector yp,
- N_Vector resvec, SUNMatrix JJ, void *user_data, N_Vector tempv1,
- N_Vector tempv2, N_Vector tempv3)
-{
- realtype *yval;
- yval = N_VGetArrayPointer(yy);
-
- PybammFunctions *python_functions_ptr =
- static_cast(user_data);
- PybammFunctions python_functions = *python_functions_ptr;
-
- int n = python_functions.number_of_states;
- py::array_t y_np = py::array_t(n, yval);
-
- // create pointer to jac data, column pointers, and row values
- sunindextype *jac_colptrs = SUNSparseMatrix_IndexPointers(JJ);
- sunindextype *jac_rowvals = SUNSparseMatrix_IndexValues(JJ);
- realtype *jac_data = SUNSparseMatrix_Data(JJ);
+namespace py = pybind11;
- py::array_t jac_np_array;
+PYBIND11_MAKE_OPAQUE(std::vector);
- python_functions.jac(tt, y_np, cj);
-
- np_array jac_np_data = python_functions.get_jac_data();
- int n_data = jac_np_data.request().size;
- auto jac_np_data_ptr = jac_np_data.unchecked<1>();
-
- // just copy across data
- int i;
- for (i = 0; i < n_data; i++)
- {
- jac_data[i] = jac_np_data_ptr[i];
- }
-
- np_array jac_np_row_vals = python_functions.get_jac_row_vals();
- int n_row_vals = jac_np_row_vals.request().size;
-
- auto jac_np_row_vals_ptr = jac_np_row_vals.unchecked<1>();
- // just copy across row vals (this might be unneeded)
- for (i = 0; i < n_row_vals; i++)
- {
- jac_rowvals[i] = jac_np_row_vals_ptr[i];
- }
-
- np_array jac_np_col_ptrs = python_functions.get_jac_col_ptrs();
- int n_col_ptrs = jac_np_col_ptrs.request().size;
- auto jac_np_col_ptrs_ptr = jac_np_col_ptrs.unchecked<1>();
-
- // just copy across col ptrs (this might be unneeded)
- for (i = 0; i < n_col_ptrs; i++)
- {
- jac_colptrs[i] = jac_np_col_ptrs_ptr[i];
- }
-
- return (0);
-}
-
-int events(realtype t, N_Vector yy, N_Vector yp, realtype *events_ptr,
- void *user_data)
+PYBIND11_MODULE(idaklu, m)
{
- realtype *yval;
- yval = N_VGetArrayPointer(yy);
-
- PybammFunctions *python_functions_ptr =
- static_cast(user_data);
- PybammFunctions python_functions = *python_functions_ptr;
-
- int number_of_events = python_functions.number_of_events;
- int number_of_states = python_functions.number_of_states;
- py::array_t y_np = py::array_t(number_of_states, yval);
-
- py::array_t events_np_array;
-
- events_np_array = python_functions.events(t, y_np);
-
- auto events_np_data_ptr = events_np_array.unchecked<1>();
-
- // just copying data (figure out how to pass pointers later)
- int i;
- for (i = 0; i < number_of_events; i++)
- {
- events_ptr[i] = events_np_data_ptr[i];
- }
-
- return (0);
+ m.doc() = "sundials solvers"; // optional module docstring
+
+ py::bind_vector>(m, "VectorNdArray");
+
+ m.def("solve_python", &solve_python,
+ "The solve function for python evaluators", py::arg("t"), py::arg("y0"),
+ py::arg("yp0"), py::arg("res"), py::arg("jac"), py::arg("sens"),
+ py::arg("get_jac_data"), py::arg("get_jac_row_vals"),
+ py::arg("get_jac_col_ptr"), py::arg("nnz"), py::arg("events"),
+ py::arg("number_of_events"), py::arg("use_jacobian"),
+ py::arg("rhs_alg_id"), py::arg("atol"), py::arg("rtol"),
+ py::arg("inputs"), py::arg("number_of_sensitivity_parameters"),
+ py::return_value_policy::take_ownership);
+
+ py::class_(m, "CasadiSolver")
+ .def("solve", &CasadiSolver::solve, "perform a solve", py::arg("t"),
+ py::arg("y0"), py::arg("yp0"), py::arg("inputs"),
+ py::return_value_policy::take_ownership);
+
+ m.def("create_casadi_solver", &create_casadi_solver,
+ "Create a casadi idaklu solver object", py::arg("number_of_states"),
+ py::arg("number_of_parameters"), py::arg("rhs_alg"),
+ py::arg("jac_times_cjmass"), py::arg("jac_times_cjmass_colptrs"),
+ py::arg("jac_times_cjmass_rowvals"), py::arg("jac_times_cjmass_nnz"),
+ py::arg("jac_action"), py::arg("mass_action"), py::arg("sens"),
+ py::arg("events"), py::arg("number_of_events"), py::arg("rhs_alg_id"),
+ py::arg("atol"), py::arg("rtol"), py::arg("inputs"), py::arg("options"),
+ py::return_value_policy::take_ownership);
+
+ m.def("generate_function", &generate_function, "Generate a casadi function",
+ py::arg("string"), py::return_value_policy::take_ownership);
+
+ py::class_(m, "Function");
+
+ py::class_(m, "solution")
+ .def_readwrite("t", &Solution::t)
+ .def_readwrite("y", &Solution::y)
+ .def_readwrite("yS", &Solution::yS)
+ .def_readwrite("flag", &Solution::flag);
}
-
-int sensitivities(int Ns, realtype t, N_Vector yy, N_Vector yp,
- N_Vector resval, N_Vector *yS, N_Vector *ypS, N_Vector *resvalS,
- void *user_data, N_Vector tmp1, N_Vector tmp2, N_Vector tmp3) {
-// This function computes the sensitivity residual for all sensitivity
-// equations. It must compute the vectors
-// (∂F/∂y)s i (t)+(∂F/∂ ẏ) ṡ i (t)+(∂F/∂p i ) and store them in resvalS[i].
-// Ns is the number of sensitivities.
-// t is the current value of the independent variable.
-// yy is the current value of the state vector, y(t).
-// yp is the current value of ẏ(t).
-// resval contains the current value F of the original DAE residual.
-// yS contains the current values of the sensitivities s i .
-// ypS contains the current values of the sensitivity derivatives ṡ i .
-// resvalS contains the output sensitivity residual vectors.
-// Memory allocation for resvalS is handled within idas.
-// user data is a pointer to user data.
-// tmp1, tmp2, tmp3 are N Vectors of length N which can be used as
-// temporary storage.
-//
-// Return value An IDASensResFn should return 0 if successful,
-// a positive value if a recoverable error
-// occurred (in which case idas will attempt to correct),
-// or a negative value if it failed unrecoverably (in which case the integration is halted and IDA SRES FAIL is returned)
-//
- PybammFunctions *python_functions_ptr =
- static_cast(user_data);
- PybammFunctions python_functions = *python_functions_ptr;
-
- int n = python_functions.number_of_states;
- int np = python_functions.number_of_parameters;
-
- // memory managed by sundials, so pass a destructor that does nothing
- auto state_vector_shape = std::vector{n, 1};
- np_array y_np = np_array(state_vector_shape, N_VGetArrayPointer(yy),
- py::capsule(&yy, [](void* p) {}));
- np_array yp_np = np_array(state_vector_shape, N_VGetArrayPointer(yp),
- py::capsule(&yp, [](void* p) {}));
-
- std::vector yS_np(np);
- for (int i = 0; i < np; i++) {
- auto capsule = py::capsule(yS + i, [](void* p) {});
- yS_np[i] = np_array(state_vector_shape, N_VGetArrayPointer(yS[i]), capsule);
- }
-
- std::vector ypS_np(np);
- for (int i = 0; i < np; i++) {
- auto capsule = py::capsule(ypS + i, [](void* p) {});
- ypS_np[i] = np_array(state_vector_shape, N_VGetArrayPointer(ypS[i]), capsule);
- }
-
- std::vector resvalS_np(np);
- for (int i = 0; i < np; i++) {
- auto capsule = py::capsule(resvalS + i, [](void* p) {});
- resvalS_np[i] = np_array(state_vector_shape,
- N_VGetArrayPointer(resvalS[i]), capsule);
- }
-
- realtype *ptr1 = static_cast(resvalS_np[0].request().ptr);
- const realtype* resvalSval = N_VGetArrayPointer(resvalS[0]);
-
- python_functions.sensitivities(resvalS_np, t, y_np, yp_np, yS_np, ypS_np);
-
- return 0;
-}
-
-/* main program */
-Solution solve_python(np_array t_np, np_array y0_np, np_array yp0_np,
- residual_type res, jacobian_type jac,
- sensitivities_type sens,
- jac_get_type gjd, jac_get_type gjrv, jac_get_type gjcp,
- int nnz, event_type event,
- int number_of_events, int use_jacobian, np_array rhs_alg_id,
- np_array atol_np, double rel_tol, np_array inputs,
- int number_of_parameters)
-{
- auto t = t_np.unchecked<1>();
- auto y0 = y0_np.unchecked<1>();
- auto yp0 = yp0_np.unchecked<1>();
- auto atol = atol_np.unchecked<1>();
-
- int number_of_states = y0_np.request().size;
- int number_of_timesteps = t_np.request().size;
- void *ida_mem; // pointer to memory
- N_Vector yy, yp, avtol; // y, y', and absolute tolerance
- N_Vector *yyS, *ypS; // y, y' for sensitivities
- realtype rtol, *yval, *ypval, *atval;
- std::vector ySval(number_of_parameters);
- int retval;
- SUNMatrix J;
- SUNLinearSolver LS;
-
- // allocate vectors
- yy = N_VNew_Serial(number_of_states);
- yp = N_VNew_Serial(number_of_states);
- avtol = N_VNew_Serial(number_of_states);
-
- if (number_of_parameters > 0) {
- yyS = N_VCloneVectorArray(number_of_parameters, yy);
- ypS = N_VCloneVectorArray(number_of_parameters, yp);
- }
-
- // set initial value
- yval = N_VGetArrayPointer(yy);
- ypval = N_VGetArrayPointer(yp);
- atval = N_VGetArrayPointer(avtol);
- int i;
- for (i = 0; i < number_of_states; i++)
- {
- yval[i] = y0[i];
- ypval[i] = yp0[i];
- atval[i] = atol[i];
- }
-
- for (int is = 0 ; is < number_of_parameters; is++) {
- ySval[is] = N_VGetArrayPointer(yyS[is]);
- N_VConst(RCONST(0.0), yyS[is]);
- N_VConst(RCONST(0.0), ypS[is]);
- }
-
- // allocate memory for solver
- ida_mem = IDACreate();
-
- // initialise solver
- realtype t0 = RCONST(t(0));
- IDAInit(ida_mem, residual, t0, yy, yp);
-
- // set tolerances
- rtol = RCONST(rel_tol);
-
- IDASVtolerances(ida_mem, rtol, avtol);
-
- // set events
- IDARootInit(ida_mem, number_of_events, events);
-
- // set pybamm functions by passing pointer to it
- PybammFunctions pybamm_functions(res, jac, sens, gjd, gjrv, gjcp, event,
- number_of_states, number_of_events,
- number_of_parameters, inputs);
- void *user_data = &pybamm_functions;
- IDASetUserData(ida_mem, user_data);
-
- // set linear solver
- J = SUNSparseMatrix(number_of_states, number_of_states, nnz, CSR_MAT);
-
- LS = SUNLinSol_KLU(yy, J);
- IDASetLinearSolver(ida_mem, LS, J);
-
- if (use_jacobian == 1)
- {
- IDASetJacFn(ida_mem, jacobian);
- }
-
- if (number_of_parameters > 0)
- {
- IDASensInit(ida_mem, number_of_parameters,
- IDA_SIMULTANEOUS, sensitivities, yyS, ypS);
- IDASensEEtolerances(ida_mem);
- }
-
- int t_i = 1;
- realtype tret;
- realtype t_next;
- realtype t_final = t(number_of_timesteps - 1);
-
- // set return vectors
- std::vector t_return(number_of_timesteps);
- std::vector y_return(number_of_timesteps * number_of_states);
- std::vector yS_return(number_of_parameters * number_of_timesteps * number_of_states);
-
- t_return[0] = t(0);
- for (int j = 0; j < number_of_states; j++)
- {
- y_return[j] = yval[j];
- }
- for (int j = 0; j < number_of_parameters; j++) {
- const int base_index = j * number_of_timesteps * number_of_states;
- for (int k = 0; k < number_of_states; k++) {
- yS_return[base_index + k] = ySval[j][k];
- }
- }
-
- // calculate consistent initial conditions
- N_Vector id;
- auto id_np_val = rhs_alg_id.unchecked<1>();
- id = N_VNew_Serial(number_of_states);
- realtype *id_val;
- id_val = N_VGetArrayPointer(id);
-
- int ii;
- for (ii = 0; ii < number_of_states; ii++)
- {
- id_val[ii] = id_np_val[ii];
- }
-
- IDASetId(ida_mem, id);
- IDACalcIC(ida_mem, IDA_YA_YDP_INIT, t(1));
-
- while (true)
- {
- t_next = t(t_i);
- IDASetStopTime(ida_mem, t_next);
- retval = IDASolve(ida_mem, t_final, &tret, yy, yp, IDA_NORMAL);
-
- if (retval == IDA_TSTOP_RETURN || retval == IDA_SUCCESS || retval == IDA_ROOT_RETURN)
- {
- if (number_of_parameters > 0) {
- IDAGetSens(ida_mem, &tret, yyS);
- }
-
- t_return[t_i] = tret;
- for (int j = 0; j < number_of_states; j++)
- {
- y_return[t_i * number_of_states + j] = yval[j];
- }
- for (int j = 0; j < number_of_parameters; j++) {
- const int base_index = j * number_of_timesteps * number_of_states
- + t_i * number_of_states;
- for (int k = 0; k < number_of_states; k++) {
- yS_return[base_index + k] = ySval[j][k];
- }
- }
- t_i += 1;
- if (retval == IDA_SUCCESS || retval == IDA_ROOT_RETURN) {
- break;
- }
-
- }
- }
-
- /* Free memory */
- if (number_of_parameters > 0) {
- IDASensFree(ida_mem);
- }
- IDAFree(&ida_mem);
- SUNLinSolFree(LS);
- SUNMatDestroy(J);
- N_VDestroy(avtol);
- N_VDestroy(yp);
- if (number_of_parameters > 0) {
- N_VDestroyVectorArray(yyS, number_of_parameters);
- N_VDestroyVectorArray(ypS, number_of_parameters);
- }
-
- np_array t_ret = np_array(t_i, &t_return[0]);
- np_array y_ret = np_array(t_i * number_of_states, &y_return[0]);
- np_array yS_ret = np_array(
- std::vector{number_of_parameters, number_of_timesteps, number_of_states},
- &yS_return[0]
- );
-
- Solution sol(retval, t_ret, y_ret, yS_ret);
-
- return sol;
-}
-
diff --git a/pybamm/solvers/c_solvers/idaklu/casadi_functions.cpp b/pybamm/solvers/c_solvers/idaklu/casadi_functions.cpp
new file mode 100644
index 0000000000..a2de2e7089
--- /dev/null
+++ b/pybamm/solvers/c_solvers/idaklu/casadi_functions.cpp
@@ -0,0 +1,69 @@
+#include "casadi_functions.hpp"
+
+CasadiFunction::CasadiFunction(const Function &f) : m_func(f)
+{
+ size_t sz_arg;
+ size_t sz_res;
+ size_t sz_iw;
+ size_t sz_w;
+ m_func.sz_work(sz_arg, sz_res, sz_iw, sz_w);
+ // std::cout << "name = "<< m_func.name() << " arg = " << sz_arg << " res = "
+ // << sz_res << " iw = " << sz_iw << " w = " << sz_w << std::endl; for (int i
+ // = 0; i < sz_arg; i++) {
+ // std::cout << "Sparsity for input " << i << std::endl;
+ // const Sparsity& sparsity = m_func.sparsity_in(i);
+ // }
+ // for (int i = 0; i < sz_res; i++) {
+ // std::cout << "Sparsity for output " << i << std::endl;
+ // const Sparsity& sparsity = m_func.sparsity_out(i);
+ // }
+ m_arg.resize(sz_arg);
+ m_res.resize(sz_res);
+ m_iw.resize(sz_iw);
+ m_w.resize(sz_w);
+}
+
+// only call this once m_arg and m_res have been set appropriatelly
+void CasadiFunction::operator()()
+{
+ int mem = m_func.checkout();
+ m_func(m_arg.data(), m_res.data(), m_iw.data(), m_w.data(), mem);
+ m_func.release(mem);
+}
+
+CasadiFunctions::CasadiFunctions(
+ const Function &rhs_alg, const Function &jac_times_cjmass,
+ const int jac_times_cjmass_nnz,
+ const np_array_int &jac_times_cjmass_rowvals_arg,
+ const np_array_int &jac_times_cjmass_colptrs_arg,
+ const int inputs_length, const Function &jac_action,
+ const Function &mass_action, const Function &sens, const Function &events,
+ const int n_s, int n_e, const int n_p, const Options& options)
+ : number_of_states(n_s), number_of_events(n_e), number_of_parameters(n_p),
+ number_of_nnz(jac_times_cjmass_nnz), rhs_alg(rhs_alg),
+ jac_times_cjmass(jac_times_cjmass), jac_action(jac_action),
+ mass_action(mass_action), sens(sens), events(events),
+ tmp(number_of_states),
+ options(options)
+{
+
+ // copy across numpy array values
+ const int n_row_vals = jac_times_cjmass_rowvals_arg.request().size;
+ auto p_jac_times_cjmass_rowvals = jac_times_cjmass_rowvals_arg.unchecked<1>();
+ jac_times_cjmass_rowvals.resize(n_row_vals);
+ for (int i = 0; i < n_row_vals; i++) {
+ jac_times_cjmass_rowvals[i] = p_jac_times_cjmass_rowvals[i];
+ }
+
+ const int n_col_ptrs = jac_times_cjmass_colptrs_arg.request().size;
+ auto p_jac_times_cjmass_colptrs = jac_times_cjmass_colptrs_arg.unchecked<1>();
+ jac_times_cjmass_colptrs.resize(n_col_ptrs);
+ for (int i = 0; i < n_col_ptrs; i++) {
+ jac_times_cjmass_colptrs[i] = p_jac_times_cjmass_colptrs[i];
+ }
+
+ inputs.resize(inputs_length);
+
+}
+
+realtype *CasadiFunctions::get_tmp() { return tmp.data(); }
diff --git a/pybamm/solvers/c_solvers/idaklu/casadi_functions.hpp b/pybamm/solvers/c_solvers/idaklu/casadi_functions.hpp
new file mode 100644
index 0000000000..2e3b6beb8d
--- /dev/null
+++ b/pybamm/solvers/c_solvers/idaklu/casadi_functions.hpp
@@ -0,0 +1,60 @@
+#ifndef PYBAMM_IDAKLU_CASADI_FUNCTIONS_HPP
+#define PYBAMM_IDAKLU_CASADI_FUNCTIONS_HPP
+
+#include "common.hpp"
+#include "options.hpp"
+#include "solution.hpp"
+#include
+
+using Function = casadi::Function;
+
+class CasadiFunction
+{
+public:
+ explicit CasadiFunction(const Function &f);
+
+public:
+ std::vector m_arg;
+ std::vector m_res;
+ void operator()();
+
+private:
+ const Function &m_func;
+ std::vector m_iw;
+ std::vector m_w;
+};
+
+class CasadiFunctions
+{
+public:
+ int number_of_states;
+ int number_of_parameters;
+ int number_of_events;
+ int number_of_nnz;
+ CasadiFunction rhs_alg;
+ CasadiFunction sens;
+ CasadiFunction jac_times_cjmass;
+ std::vector jac_times_cjmass_rowvals;
+ std::vector jac_times_cjmass_colptrs;
+ std::vector inputs;
+ CasadiFunction jac_action;
+ CasadiFunction mass_action;
+ CasadiFunction events;
+ Options options;
+
+ CasadiFunctions(const Function &rhs_alg, const Function &jac_times_cjmass,
+ const int jac_times_cjmass_nnz,
+ const np_array_int &jac_times_cjmass_rowvals,
+ const np_array_int &jac_times_cjmass_colptrs,
+ const int inputs_length, const Function &jac_action,
+ const Function &mass_action, const Function &sens,
+ const Function &events, const int n_s, int n_e,
+ const int n_p, const Options& options);
+
+ realtype *get_tmp();
+
+private:
+ std::vector tmp;
+};
+
+#endif // PYBAMM_IDAKLU_CASADI_FUNCTIONS_HPP
diff --git a/pybamm/solvers/c_solvers/idaklu/casadi_solver.cpp b/pybamm/solvers/c_solvers/idaklu/casadi_solver.cpp
new file mode 100644
index 0000000000..d1bb76ea68
--- /dev/null
+++ b/pybamm/solvers/c_solvers/idaklu/casadi_solver.cpp
@@ -0,0 +1,441 @@
+#include "casadi_solver.hpp"
+#include "casadi_sundials_functions.hpp"
+#include "common.hpp"
+#include
+
+CasadiSolver *
+create_casadi_solver(int number_of_states, int number_of_parameters,
+ const Function &rhs_alg, const Function &jac_times_cjmass,
+ const np_array_int &jac_times_cjmass_colptrs,
+ const np_array_int &jac_times_cjmass_rowvals,
+ const int jac_times_cjmass_nnz, const Function &jac_action,
+ const Function &mass_action, const Function &sens,
+ const Function &events, const int number_of_events,
+ np_array rhs_alg_id, np_array atol_np, double rel_tol,
+ int inputs_length, py::dict options)
+{
+ auto options_cpp = Options(options);
+ auto functions = std::make_unique(
+ rhs_alg, jac_times_cjmass, jac_times_cjmass_nnz, jac_times_cjmass_rowvals,
+ jac_times_cjmass_colptrs, inputs_length, jac_action, mass_action, sens,
+ events, number_of_states, number_of_events, number_of_parameters,
+ options_cpp);
+
+ return new CasadiSolver(atol_np, rel_tol, rhs_alg_id, number_of_parameters,
+ number_of_events, jac_times_cjmass_nnz,
+ std::move(functions), options_cpp);
+}
+
+CasadiSolver::CasadiSolver(np_array atol_np, double rel_tol,
+ np_array rhs_alg_id, int number_of_parameters,
+ int number_of_events, int jac_times_cjmass_nnz,
+ std::unique_ptr functions_arg,
+ const Options &options)
+ : number_of_states(atol_np.request().size),
+ number_of_parameters(number_of_parameters),
+ number_of_events(number_of_events),
+ jac_times_cjmass_nnz(jac_times_cjmass_nnz),
+ functions(std::move(functions_arg)), options(options)
+{
+ DEBUG("CasadiSolver::CasadiSolver");
+ auto atol = atol_np.unchecked<1>();
+
+ // allocate memory for solver
+#if SUNDIALS_VERSION_MAJOR >= 6
+ SUNContext_Create(NULL, &sunctx);
+ ida_mem = IDACreate(sunctx);
+#else
+ ida_mem = IDACreate();
+#endif
+
+ // allocate vectors
+#if SUNDIALS_VERSION_MAJOR >= 6
+ yy = N_VNew_Serial(number_of_states, sunctx);
+ yp = N_VNew_Serial(number_of_states, sunctx);
+ avtol = N_VNew_Serial(number_of_states, sunctx);
+ id = N_VNew_Serial(number_of_states, sunctx);
+#else
+ yy = N_VNew_Serial(number_of_states);
+ yp = N_VNew_Serial(number_of_states);
+ avtol = N_VNew_Serial(number_of_states);
+ id = N_VNew_Serial(number_of_states);
+#endif
+
+ if (number_of_parameters > 0)
+ {
+ yyS = N_VCloneVectorArray(number_of_parameters, yy);
+ ypS = N_VCloneVectorArray(number_of_parameters, yp);
+ }
+
+ // set initial value
+ realtype *atval = N_VGetArrayPointer(avtol);
+ for (int i = 0; i < number_of_states; i++)
+ {
+ atval[i] = atol[i];
+ }
+
+ for (int is = 0; is < number_of_parameters; is++)
+ {
+ N_VConst(RCONST(0.0), yyS[is]);
+ N_VConst(RCONST(0.0), ypS[is]);
+ }
+
+ // initialise solver
+
+ IDAInit(ida_mem, residual_casadi, 0, yy, yp);
+
+ // set tolerances
+ rtol = RCONST(rel_tol);
+
+ IDASVtolerances(ida_mem, rtol, avtol);
+
+ // set events
+ IDARootInit(ida_mem, number_of_events, events_casadi);
+
+ void *user_data = functions.get();
+ IDASetUserData(ida_mem, user_data);
+
+ // set matrix
+ if (options.jacobian == "sparse")
+ {
+ DEBUG("\tsetting sparse matrix");
+#if SUNDIALS_VERSION_MAJOR >= 6
+ J = SUNSparseMatrix(number_of_states, number_of_states,
+ jac_times_cjmass_nnz, CSC_MAT, sunctx);
+#else
+ J = SUNSparseMatrix(number_of_states, number_of_states,
+ jac_times_cjmass_nnz, CSC_MAT);
+#endif
+ }
+ else if (options.jacobian == "dense" || options.jacobian == "none")
+ {
+ DEBUG("\tsetting dense matrix");
+#if SUNDIALS_VERSION_MAJOR >= 6
+ J = SUNDenseMatrix(number_of_states, number_of_states, sunctx);
+#else
+ J = SUNDenseMatrix(number_of_states, number_of_states);
+#endif
+ }
+ else if (options.jacobian == "matrix-free")
+ {
+ DEBUG("\tsetting matrix-free");
+ J = NULL;
+ }
+
+ #if SUNDIALS_VERSION_MAJOR >= 6
+ int precon_type = SUN_PREC_NONE;
+ if (options.preconditioner != "none") {
+ precon_type = SUN_PREC_LEFT;
+ }
+ #else
+ int precon_type = PREC_NONE;
+ if (options.preconditioner != "none") {
+ precon_type = PREC_LEFT;
+ }
+ #endif
+
+ // set linear solver
+ if (options.linear_solver == "SUNLinSol_Dense")
+ {
+ DEBUG("\tsetting SUNLinSol_Dense linear solver");
+#if SUNDIALS_VERSION_MAJOR >= 6
+ LS = SUNLinSol_Dense(yy, J, sunctx);
+#else
+ LS = SUNLinSol_Dense(yy, J);
+#endif
+ }
+ else if (options.linear_solver == "SUNLinSol_KLU")
+ {
+ DEBUG("\tsetting SUNLinSol_KLU linear solver");
+#if SUNDIALS_VERSION_MAJOR >= 6
+ LS = SUNLinSol_KLU(yy, J, sunctx);
+#else
+ LS = SUNLinSol_KLU(yy, J);
+#endif
+ }
+ else if (options.linear_solver == "SUNLinSol_SPBCGS")
+ {
+ DEBUG("\tsetting SUNLinSol_SPBCGS_linear solver");
+#if SUNDIALS_VERSION_MAJOR >= 6
+ LS = SUNLinSol_SPBCGS(yy, precon_type, options.linsol_max_iterations,
+ sunctx);
+#else
+ LS = SUNLinSol_SPBCGS(yy, precon_type, options.linsol_max_iterations);
+#endif
+ }
+ else if (options.linear_solver == "SUNLinSol_SPFGMR")
+ {
+ DEBUG("\tsetting SUNLinSol_SPFGMR_linear solver");
+#if SUNDIALS_VERSION_MAJOR >= 6
+ LS = SUNLinSol_SPFGMR(yy, precon_type, options.linsol_max_iterations,
+ sunctx);
+#else
+ LS = SUNLinSol_SPFGMR(yy, precon_type, options.linsol_max_iterations);
+#endif
+ }
+ else if (options.linear_solver == "SUNLinSol_SPGMR")
+ {
+ DEBUG("\tsetting SUNLinSol_SPGMR solver");
+#if SUNDIALS_VERSION_MAJOR >= 6
+ LS = SUNLinSol_SPGMR(yy, precon_type, options.linsol_max_iterations,
+ sunctx);
+#else
+ LS = SUNLinSol_SPGMR(yy, precon_type, options.linsol_max_iterations);
+#endif
+ }
+ else if (options.linear_solver == "SUNLinSol_SPTFQMR")
+ {
+ DEBUG("\tsetting SUNLinSol_SPGMR solver");
+#if SUNDIALS_VERSION_MAJOR >= 6
+ LS = SUNLinSol_SPTFQMR(yy, precon_type, options.linsol_max_iterations,
+ sunctx);
+#else
+ LS = SUNLinSol_SPTFQMR(yy, precon_type, options.linsol_max_iterations);
+#endif
+ }
+
+
+
+ IDASetLinearSolver(ida_mem, LS, J);
+
+ if (options.preconditioner != "none")
+ {
+ DEBUG("\tsetting IDADDB preconditioner");
+ // setup preconditioner
+ IDABBDPrecInit(
+ ida_mem, number_of_states, options.precon_half_bandwidth,
+ options.precon_half_bandwidth, options.precon_half_bandwidth_keep,
+ options.precon_half_bandwidth_keep, 0.0, residual_casadi_approx, NULL);
+ }
+
+ if (options.jacobian == "matrix-free")
+ {
+ IDASetJacTimes(ida_mem, NULL, jtimes_casadi);
+ }
+ else if (options.jacobian != "none")
+ {
+ IDASetJacFn(ida_mem, jacobian_casadi);
+ }
+
+ if (number_of_parameters > 0)
+ {
+ IDASensInit(ida_mem, number_of_parameters, IDA_SIMULTANEOUS,
+ sensitivities_casadi, yyS, ypS);
+ IDASensEEtolerances(ida_mem);
+ }
+
+ SUNLinSolInitialize(LS);
+
+ auto id_np_val = rhs_alg_id.unchecked<1>();
+ realtype *id_val;
+ id_val = N_VGetArrayPointer(id);
+
+ int ii;
+ for (ii = 0; ii < number_of_states; ii++)
+ {
+ id_val[ii] = id_np_val[ii];
+ }
+
+ IDASetId(ida_mem, id);
+}
+
+CasadiSolver::~CasadiSolver()
+{
+
+ /* Free memory */
+ if (number_of_parameters > 0)
+ {
+ IDASensFree(ida_mem);
+ }
+ SUNLinSolFree(LS);
+ SUNMatDestroy(J);
+ N_VDestroy(avtol);
+ N_VDestroy(yy);
+ N_VDestroy(yp);
+ N_VDestroy(id);
+ if (number_of_parameters > 0)
+ {
+ N_VDestroyVectorArray(yyS, number_of_parameters);
+ N_VDestroyVectorArray(ypS, number_of_parameters);
+ }
+
+ IDAFree(&ida_mem);
+#if SUNDIALS_VERSION_MAJOR >= 6
+ SUNContext_Free(&sunctx);
+#endif
+}
+
+Solution CasadiSolver::solve(np_array t_np, np_array y0_np, np_array yp0_np,
+ np_array_dense inputs)
+{
+ DEBUG("CasadiSolver::solve");
+ int number_of_timesteps = t_np.request().size;
+
+ // set inputs
+ auto p_inputs = inputs.unchecked<2>();
+ for (int i = 0; i < functions->inputs.size(); i++)
+ {
+ functions->inputs[i] = p_inputs(i, 0);
+ }
+
+ realtype *yval = N_VGetArrayPointer(yy);
+ realtype *ypval = N_VGetArrayPointer(yp);
+ std::vector ySval(number_of_parameters);
+ for (int is = 0 ; is < number_of_parameters; is++) {
+ ySval[is] = N_VGetArrayPointer(yyS[is]);
+ N_VConst(RCONST(0.0), yyS[is]);
+ N_VConst(RCONST(0.0), ypS[is]);
+ }
+
+ auto t = t_np.unchecked<1>();
+ auto y0 = y0_np.unchecked<1>();
+ auto yp0 = yp0_np.unchecked<1>();
+ for (int i = 0; i < number_of_states; i++)
+ {
+ yval[i] = y0[i];
+ ypval[i] = yp0[i];
+ }
+
+ realtype t0 = RCONST(t(0));
+ IDAReInit(ida_mem, t0, yy, yp);
+
+ int t_i = 1;
+ realtype tret;
+ realtype t_next;
+ realtype t_final = t(number_of_timesteps - 1);
+
+ // set return vectors
+ realtype *t_return = new realtype[number_of_timesteps];
+ realtype *y_return = new realtype[number_of_timesteps * number_of_states];
+ realtype *yS_return = new realtype[number_of_parameters *
+ number_of_timesteps * number_of_states];
+
+ py::capsule free_t_when_done(t_return,
+ [](void *f)
+ {
+ realtype *vect =
+ reinterpret_cast(f);
+ delete[] vect;
+ });
+ py::capsule free_y_when_done(y_return,
+ [](void *f)
+ {
+ realtype *vect =
+ reinterpret_cast(f);
+ delete[] vect;
+ });
+ py::capsule free_yS_when_done(yS_return,
+ [](void *f)
+ {
+ realtype *vect =
+ reinterpret_cast(f);
+ delete[] vect;
+ });
+
+ t_return[0] = t(0);
+ for (int j = 0; j < number_of_states; j++)
+ {
+ y_return[j] = yval[j];
+ }
+ for (int j = 0; j < number_of_parameters; j++)
+ {
+ const int base_index = j * number_of_timesteps * number_of_states;
+ for (int k = 0; k < number_of_states; k++)
+ {
+ yS_return[base_index + k] = ySval[j][k];
+ }
+ }
+
+ // calculate consistent initial conditions
+ DEBUG("IDACalcIC");
+ IDACalcIC(ida_mem, IDA_YA_YDP_INIT, t(1));
+
+ int retval;
+ while (true)
+ {
+ t_next = t(t_i);
+ IDASetStopTime(ida_mem, t_next);
+ DEBUG("IDASolve");
+ retval = IDASolve(ida_mem, t_final, &tret, yy, yp, IDA_NORMAL);
+
+ if (retval == IDA_TSTOP_RETURN || retval == IDA_SUCCESS ||
+ retval == IDA_ROOT_RETURN)
+ {
+ if (number_of_parameters > 0)
+ {
+ IDAGetSens(ida_mem, &tret, yyS);
+ }
+
+ t_return[t_i] = tret;
+ for (int j = 0; j < number_of_states; j++)
+ {
+ y_return[t_i * number_of_states + j] = yval[j];
+ }
+ for (int j = 0; j < number_of_parameters; j++)
+ {
+ const int base_index =
+ j * number_of_timesteps * number_of_states + t_i * number_of_states;
+ for (int k = 0; k < number_of_states; k++)
+ {
+ yS_return[base_index + k] = ySval[j][k];
+ }
+ }
+ t_i += 1;
+ if (retval == IDA_SUCCESS || retval == IDA_ROOT_RETURN)
+ {
+ break;
+ }
+ }
+ else
+ {
+ // failed
+ break;
+ }
+ }
+
+ np_array t_ret = np_array(t_i, &t_return[0], free_t_when_done);
+ np_array y_ret =
+ np_array(t_i * number_of_states, &y_return[0], free_y_when_done);
+ np_array yS_ret = np_array(
+ std::vector{number_of_parameters, number_of_timesteps, number_of_states},
+ &yS_return[0], free_yS_when_done);
+
+ Solution sol(retval, t_ret, y_ret, yS_ret);
+
+ if (options.print_stats)
+ {
+ long nsteps, nrevals, nlinsetups, netfails;
+ int klast, kcur;
+ realtype hinused, hlast, hcur, tcur;
+
+ IDAGetIntegratorStats(ida_mem, &nsteps, &nrevals, &nlinsetups, &netfails,
+ &klast, &kcur, &hinused, &hlast, &hcur, &tcur);
+
+ long nniters, nncfails;
+ IDAGetNonlinSolvStats(ida_mem, &nniters, &nncfails);
+
+ long int ngevalsBBDP = 0;
+ if (options.using_iterative_solver)
+ {
+ IDABBDPrecGetNumGfnEvals(ida_mem, &ngevalsBBDP);
+ }
+
+ py::print("Solver Stats:");
+ py::print("\tNumber of steps =", nsteps);
+ py::print("\tNumber of calls to residual function =", nrevals);
+ py::print("\tNumber of calls to residual function in preconditioner =",
+ ngevalsBBDP);
+ py::print("\tNumber of linear solver setup calls =", nlinsetups);
+ py::print("\tNumber of error test failures =", netfails);
+ py::print("\tMethod order used on last step =", klast);
+ py::print("\tMethod order used on next step =", kcur);
+ py::print("\tInitial step size =", hinused);
+ py::print("\tStep size on last step =", hlast);
+ py::print("\tStep size on next step =", hcur);
+ py::print("\tCurrent internal time reached =", tcur);
+ py::print("\tNumber of nonlinear iterations performed =", nniters);
+ py::print("\tNumber of nonlinear convergence failures =", nncfails);
+ }
+
+ return sol;
+}
diff --git a/pybamm/solvers/c_solvers/idaklu/casadi_solver.hpp b/pybamm/solvers/c_solvers/idaklu/casadi_solver.hpp
new file mode 100644
index 0000000000..3eed122e04
--- /dev/null
+++ b/pybamm/solvers/c_solvers/idaklu/casadi_solver.hpp
@@ -0,0 +1,57 @@
+#ifndef PYBAMM_IDAKLU_CASADI_SOLVER_HPP
+#define PYBAMM_IDAKLU_CASADI_SOLVER_HPP
+
+#include
+using Function = casadi::Function;
+
+#include "casadi_functions.hpp"
+#include "common.hpp"
+#include "options.hpp"
+#include "solution.hpp"
+
+class CasadiSolver
+{
+public:
+ CasadiSolver(np_array atol_np, double rel_tol, np_array rhs_alg_id,
+ int number_of_parameters, int number_of_events,
+ int jac_times_cjmass_nnz,
+ std::unique_ptr functions, const Options& options);
+ ~CasadiSolver();
+
+ void *ida_mem; // pointer to memory
+
+#if SUNDIALS_VERSION_MAJOR >= 6
+ SUNContext sunctx;
+#endif
+
+ int number_of_states;
+ int number_of_parameters;
+ int number_of_events;
+ N_Vector yy, yp, avtol; // y, y', and absolute tolerance
+ N_Vector *yyS, *ypS; // y, y' for sensitivities
+ N_Vector id; // rhs_alg_id
+ realtype rtol;
+ const int jac_times_cjmass_nnz;
+
+ SUNMatrix J;
+ SUNLinearSolver LS;
+
+ std::unique_ptr functions;
+ Options options;
+
+ Solution solve(np_array t_np, np_array y0_np, np_array yp0_np,
+ np_array_dense inputs);
+};
+
+CasadiSolver *
+create_casadi_solver(int number_of_states, int number_of_parameters,
+ const Function &rhs_alg, const Function &jac_times_cjmass,
+ const np_array_int &jac_times_cjmass_colptrs,
+ const np_array_int &jac_times_cjmass_rowvals,
+ const int jac_times_cjmass_nnz, const Function &jac_action,
+ const Function &mass_action, const Function &sens,
+ const Function &event, const int number_of_events,
+ np_array rhs_alg_id, np_array atol_np,
+ double rel_tol, int inputs_length, py::dict options);
+
+#endif // PYBAMM_IDAKLU_CASADI_SOLVER_HPP
diff --git a/pybamm/solvers/c_solvers/idaklu/casadi_sundials_functions.cpp b/pybamm/solvers/c_solvers/idaklu/casadi_sundials_functions.cpp
new file mode 100644
index 0000000000..ce2a892725
--- /dev/null
+++ b/pybamm/solvers/c_solvers/idaklu/casadi_sundials_functions.cpp
@@ -0,0 +1,287 @@
+#include "casadi_sundials_functions.hpp"
+#include "casadi_functions.hpp"
+#include "common.hpp"
+
+int residual_casadi(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr,
+ void *user_data)
+{
+ DEBUG("residual_casadi");
+ CasadiFunctions *p_python_functions =
+ static_cast(user_data);
+
+ p_python_functions->rhs_alg.m_arg[0] = &tres;
+ p_python_functions->rhs_alg.m_arg[1] = NV_DATA_S(yy);
+ p_python_functions->rhs_alg.m_arg[2] = p_python_functions->inputs.data();
+ p_python_functions->rhs_alg.m_res[0] = NV_DATA_S(rr);
+ p_python_functions->rhs_alg();
+
+ realtype *tmp = p_python_functions->get_tmp();
+ p_python_functions->mass_action.m_arg[0] = NV_DATA_S(yp);
+ p_python_functions->mass_action.m_res[0] = tmp;
+ p_python_functions->mass_action();
+
+ // AXPY: y <- a*x + y
+ const int ns = p_python_functions->number_of_states;
+ casadi::casadi_axpy(ns, -1., tmp, NV_DATA_S(rr));
+
+ DEBUG_VECTOR(yy);
+ DEBUG_VECTOR(yp);
+ DEBUG_VECTOR(rr);
+
+ // now rr has rhs_alg(t, y) - mass_matrix * yp
+ return 0;
+}
+
+// This Gres function computes G(t, y, yp). It loads the vector gval as a
+// function of tt, yy, and yp.
+//
+// Arguments:
+// Nlocal – is the local vector length.
+//
+// tt – is the value of the independent variable.
+//
+// yy – is the dependent variable.
+//
+// yp – is the derivative of the dependent variable.
+//
+// gval – is the output vector.
+//
+// user_data – is a pointer to user data, the same as the user_data parameter
+// passed to IDASetUserData().
+//
+// Return value:
+//
+// An IDABBDLocalFn function type should return 0 to indicate success, 1 for a
+// recoverable error, or -1 for a non-recoverable error.
+//
+// Notes:
+//
+// This function must assume that all inter-processor communication of data
+// needed to calculate gval has already been done, and this data is accessible
+// within user_data.
+//
+// The case where G is mathematically identical to F is allowed.
+int residual_casadi_approx(sunindextype Nlocal, realtype tt, N_Vector yy,
+ N_Vector yp, N_Vector gval, void *user_data)
+{
+ DEBUG("residual_casadi_approx");
+
+ // Just use true residual for now
+ int result = residual_casadi(tt, yy, yp, gval, user_data);
+ return result;
+}
+
+// Purpose This function computes the product Jv of the DAE system Jacobian J
+// (or an approximation to it) and a given vector v, where J is defined by Eq.
+// (2.6).
+// J = ∂F/∂y + cj ∂F/∂y˙
+// Arguments tt is the current value of the independent variable.
+// yy is the current value of the dependent variable vector, y(t).
+// yp is the current value of ˙y(t).
+// rr is the current value of the residual vector F(t, y, y˙).
+// v is the vector by which the Jacobian must be multiplied to the right.
+// Jv is the computed output vector.
+// cj is the scalar in the system Jacobian, proportional to the inverse of
+// the step
+// size (α in Eq. (2.6) ).
+// user data is a pointer to user data, the same as the user data parameter
+// passed to
+// IDASetUserData.
+// tmp1
+// tmp2 are pointers to memory allocated for variables of type N Vector
+// which can
+// be used by IDALsJacTimesVecFn as temporary storage or work space.
+int jtimes_casadi(realtype tt, N_Vector yy, N_Vector yp, N_Vector rr,
+ N_Vector v, N_Vector Jv, realtype cj, void *user_data,
+ N_Vector tmp1, N_Vector tmp2)
+{
+ DEBUG("jtimes_casadi");
+ CasadiFunctions *p_python_functions =
+ static_cast(user_data);
+
+ // Jv has ∂F/∂y v
+ p_python_functions->jac_action.m_arg[0] = &tt;
+ p_python_functions->jac_action.m_arg[1] = NV_DATA_S(yy);
+ p_python_functions->jac_action.m_arg[2] = p_python_functions->inputs.data();
+ p_python_functions->jac_action.m_arg[3] = NV_DATA_S(v);
+ p_python_functions->jac_action.m_res[0] = NV_DATA_S(Jv);
+ p_python_functions->jac_action();
+
+ // tmp has -∂F/∂y˙ v
+ realtype *tmp = p_python_functions->get_tmp();
+ p_python_functions->mass_action.m_arg[0] = NV_DATA_S(v);
+ p_python_functions->mass_action.m_res[0] = tmp;
+ p_python_functions->mass_action();
+
+ // AXPY: y <- a*x + y
+ // Jv has ∂F/∂y v + cj ∂F/∂y˙ v
+ const int ns = p_python_functions->number_of_states;
+ casadi::casadi_axpy(ns, -cj, tmp, NV_DATA_S(Jv));
+
+ return 0;
+}
+
+// Arguments tt is the current value of the independent variable t.
+// cj is the scalar in the system Jacobian, proportional to the inverse of the
+// step
+// size (α in Eq. (2.6) ).
+// yy is the current value of the dependent variable vector, y(t).
+// yp is the current value of ˙y(t).
+// rr is the current value of the residual vector F(t, y, y˙).
+// Jac is the output (approximate) Jacobian matrix (of type SUNMatrix), J =
+// ∂F/∂y + cj ∂F/∂y˙.
+// user data is a pointer to user data, the same as the user data parameter
+// passed to
+// IDASetUserData.
+// tmp1
+// tmp2
+// tmp3 are pointers to memory allocated for variables of type N Vector which
+// can
+// be used by IDALsJacFn function as temporary storage or work space.
+int jacobian_casadi(realtype tt, realtype cj, N_Vector yy, N_Vector yp,
+ N_Vector resvec, SUNMatrix JJ, void *user_data,
+ N_Vector tempv1, N_Vector tempv2, N_Vector tempv3)
+{
+ DEBUG("jacobian_casadi");
+
+ CasadiFunctions *p_python_functions =
+ static_cast(user_data);
+
+ // create pointer to jac data, column pointers, and row values
+ sunindextype *jac_colptrs;
+ sunindextype *jac_rowvals;
+ realtype *jac_data;
+ if (p_python_functions->options.using_sparse_matrix)
+ {
+ jac_colptrs = SUNSparseMatrix_IndexPointers(JJ);
+ jac_rowvals = SUNSparseMatrix_IndexValues(JJ);
+ jac_data = SUNSparseMatrix_Data(JJ);
+ }
+ else
+ {
+ jac_data = SUNDenseMatrix_Data(JJ);
+ }
+
+ // args are t, y, cj, put result in jacobian data matrix
+ p_python_functions->jac_times_cjmass.m_arg[0] = &tt;
+ p_python_functions->jac_times_cjmass.m_arg[1] = NV_DATA_S(yy);
+ p_python_functions->jac_times_cjmass.m_arg[2] =
+ p_python_functions->inputs.data();
+ p_python_functions->jac_times_cjmass.m_arg[3] = &cj;
+ p_python_functions->jac_times_cjmass.m_res[0] = jac_data;
+ p_python_functions->jac_times_cjmass();
+
+ if (p_python_functions->options.using_sparse_matrix)
+ {
+ // row vals and col ptrs
+ const int n_row_vals = p_python_functions->jac_times_cjmass_rowvals.size();
+ auto p_jac_times_cjmass_rowvals =
+ p_python_functions->jac_times_cjmass_rowvals.data();
+
+ // just copy across row vals (do I need to do this every time?)
+ // (or just in the setup?)
+ for (int i = 0; i < n_row_vals; i++)
+ {
+ jac_rowvals[i] = p_jac_times_cjmass_rowvals[i];
+ }
+
+ const int n_col_ptrs = p_python_functions->jac_times_cjmass_colptrs.size();
+ auto p_jac_times_cjmass_colptrs =
+ p_python_functions->jac_times_cjmass_colptrs.data();
+
+ // just copy across col ptrs (do I need to do this every time?)
+ for (int i = 0; i < n_col_ptrs; i++)
+ {
+ jac_colptrs[i] = p_jac_times_cjmass_colptrs[i];
+ }
+ }
+
+ return (0);
+}
+
+int events_casadi(realtype t, N_Vector yy, N_Vector yp, realtype *events_ptr,
+ void *user_data)
+{
+ CasadiFunctions *p_python_functions =
+ static_cast(user_data);
+
+ // args are t, y, put result in events_ptr
+ p_python_functions->events.m_arg[0] = &t;
+ p_python_functions->events.m_arg[1] = NV_DATA_S(yy);
+ p_python_functions->events.m_arg[2] = p_python_functions->inputs.data();
+ p_python_functions->events.m_res[0] = events_ptr;
+ p_python_functions->events();
+
+ return (0);
+}
+
+// This function computes the sensitivity residual for all sensitivity
+// equations. It must compute the vectors
+// (∂F/∂y)s i (t)+(∂F/∂ ẏ) ṡ i (t)+(∂F/∂p i ) and store them in resvalS[i].
+// Ns is the number of sensitivities.
+// t is the current value of the independent variable.
+// yy is the current value of the state vector, y(t).
+// yp is the current value of ẏ(t).
+// resval contains the current value F of the original DAE residual.
+// yS contains the current values of the sensitivities s i .
+// ypS contains the current values of the sensitivity derivatives ṡ i .
+// resvalS contains the output sensitivity residual vectors.
+// Memory allocation for resvalS is handled within idas.
+// user data is a pointer to user data.
+// tmp1, tmp2, tmp3 are N Vectors of length N which can be used as
+// temporary storage.
+//
+// Return value An IDASensResFn should return 0 if successful,
+// a positive value if a recoverable error
+// occurred (in which case idas will attempt to correct),
+// or a negative value if it failed unrecoverably (in which case the integration
+// is halted and IDA SRES FAIL is returned)
+//
+int sensitivities_casadi(int Ns, realtype t, N_Vector yy, N_Vector yp,
+ N_Vector resval, N_Vector *yS, N_Vector *ypS,
+ N_Vector *resvalS, void *user_data, N_Vector tmp1,
+ N_Vector tmp2, N_Vector tmp3)
+{
+
+ CasadiFunctions *p_python_functions =
+ static_cast(user_data);
+
+ const int np = p_python_functions->number_of_parameters;
+
+ // args are t, y put result in rr
+ p_python_functions->sens.m_arg[0] = &t;
+ p_python_functions->sens.m_arg[1] = NV_DATA_S(yy);
+ p_python_functions->sens.m_arg[2] = p_python_functions->inputs.data();
+ for (int i = 0; i < np; i++)
+ {
+ p_python_functions->sens.m_res[i] = NV_DATA_S(resvalS[i]);
+ }
+ // resvalsS now has (∂F/∂p i )
+ p_python_functions->sens();
+
+ for (int i = 0; i < np; i++)
+ {
+ // put (∂F/∂y)s i (t) in tmp
+ realtype *tmp = p_python_functions->get_tmp();
+ p_python_functions->jac_action.m_arg[0] = &t;
+ p_python_functions->jac_action.m_arg[1] = NV_DATA_S(yy);
+ p_python_functions->jac_action.m_arg[2] = p_python_functions->inputs.data();
+ p_python_functions->jac_action.m_arg[3] = NV_DATA_S(yS[i]);
+ p_python_functions->jac_action.m_res[0] = tmp;
+ p_python_functions->jac_action();
+
+ const int ns = p_python_functions->number_of_states;
+ casadi::casadi_axpy(ns, 1., tmp, NV_DATA_S(resvalS[i]));
+
+ // put -(∂F/∂ ẏ) ṡ i (t) in tmp2
+ p_python_functions->mass_action.m_arg[0] = NV_DATA_S(ypS[i]);
+ p_python_functions->mass_action.m_res[0] = tmp;
+ p_python_functions->mass_action();
+
+ // (∂F/∂y)s i (t)+(∂F/∂ ẏ) ṡ i (t)+(∂F/∂p i )
+ // AXPY: y <- a*x + y
+ casadi::casadi_axpy(ns, -1., tmp, NV_DATA_S(resvalS[i]));
+ }
+
+ return 0;
+}
diff --git a/pybamm/solvers/c_solvers/idaklu/casadi_sundials_functions.hpp b/pybamm/solvers/c_solvers/idaklu/casadi_sundials_functions.hpp
new file mode 100644
index 0000000000..a2192030b4
--- /dev/null
+++ b/pybamm/solvers/c_solvers/idaklu/casadi_sundials_functions.hpp
@@ -0,0 +1,27 @@
+#ifndef PYBAMM_IDAKLU_CASADI_SUNDIALS_FUNCTIONS_HPP
+#define PYBAMM_IDAKLU_CASADI_SUNDIALS_FUNCTIONS_HPP
+
+#include "common.hpp"
+
+int residual_casadi(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr,
+ void *user_data);
+
+int jtimes_casadi(realtype tt, N_Vector yy, N_Vector yp, N_Vector rr,
+ N_Vector v, N_Vector Jv, realtype cj, void *user_data,
+ N_Vector tmp1, N_Vector tmp2);
+
+int events_casadi(realtype t, N_Vector yy, N_Vector yp, realtype *events_ptr,
+ void *user_data);
+
+int sensitivities_casadi(int Ns, realtype t, N_Vector yy, N_Vector yp,
+ N_Vector resval, N_Vector *yS, N_Vector *ypS,
+ N_Vector *resvalS, void *user_data, N_Vector tmp1,
+ N_Vector tmp2, N_Vector tmp3);
+
+int jacobian_casadi(realtype tt, realtype cj, N_Vector yy, N_Vector yp,
+ N_Vector resvec, SUNMatrix JJ, void *user_data,
+ N_Vector tempv1, N_Vector tempv2, N_Vector tempv3);
+
+int residual_casadi_approx(sunindextype Nlocal, realtype tt, N_Vector yy,
+ N_Vector yp, N_Vector gval, void *user_data);
+#endif // PYBAMM_IDAKLU_CASADI_SUNDIALS_FUNCTIONS_HPP
diff --git a/pybamm/solvers/c_solvers/idaklu/common.hpp b/pybamm/solvers/c_solvers/idaklu/common.hpp
new file mode 100644
index 0000000000..5bac325fc8
--- /dev/null
+++ b/pybamm/solvers/c_solvers/idaklu/common.hpp
@@ -0,0 +1,59 @@
+#ifndef PYBAMM_IDAKLU_COMMON_HPP
+#define PYBAMM_IDAKLU_COMMON_HPP
+
+#include /* prototypes for IDAS fcts., consts. */
+#include /* access to IDABBDPRE preconditioner */
+
+#include /* access to serial N_Vector */
+#include /* defs. of SUNRabs, SUNRexp, etc. */
+#include /* defs. of SUNRabs, SUNRexp, etc. */
+#include /* defs. of realtype, sunindextype */
+
+
+#if SUNDIALS_VERSION_MAJOR >= 6
+ #include
+#endif
+
+#include /* access to KLU linear solver */
+#include /* access to dense linear solver */
+#include /* access to spbcgs iterative linear solver */
+#include
+#include
+#include
+
+#include /* access to sparse SUNMatrix */
+#include /* access to dense SUNMatrix */
+
+
+
+#include
+#include
+
+namespace py = pybind11;
+using np_array = py::array_t;
+using np_array_dense = py::array_t;
+using np_array_int = py::array_t;
+
+#ifdef NDEBUG
+#define DEBUG(x)
+#else
+#define DEBUG(x) do { std::cerr << __FILE__ << ':' << __LINE__ << ' ' << x << std::endl; } while (0)
+#endif
+
+#ifdef NDEBUG
+#define DEBUG_VECTOR(vector)
+#else
+#define DEBUG_VECTOR(vector) {\
+ std::cout << #vector << " = ["; \
+ auto array_ptr = N_VGetArrayPointer(vector); \
+ auto N = N_VGetLength(vector); \
+ for (int i = 0; i < N; i++) { \
+ std::cout << array_ptr[i]; \
+ if (i < N-1) { \
+ std::cout << ", "; \
+ } \
+ } \
+ std::cout << "]" << std::endl; }
+#endif
+
+#endif // PYBAMM_IDAKLU_COMMON_HPP
diff --git a/pybamm/solvers/c_solvers/idaklu/options.cpp b/pybamm/solvers/c_solvers/idaklu/options.cpp
new file mode 100644
index 0000000000..c3c7cb3583
--- /dev/null
+++ b/pybamm/solvers/c_solvers/idaklu/options.cpp
@@ -0,0 +1,100 @@
+#include "options.hpp"
+#include
+
+
+using namespace std::string_literals;
+
+Options::Options(py::dict options)
+ : print_stats(options["print_stats"].cast()),
+ jacobian(options["jacobian"].cast()),
+ preconditioner(options["preconditioner"].cast()),
+ linsol_max_iterations(options["linsol_max_iterations"].cast()),
+ linear_solver(options["linear_solver"].cast()),
+ precon_half_bandwidth(options["precon_half_bandwidth"].cast()),
+ precon_half_bandwidth_keep(options["precon_half_bandwidth_keep"].cast())
+{
+
+ using_sparse_matrix = true;
+ if (jacobian == "sparse")
+ {
+ }
+ else if (jacobian == "dense" || jacobian == "none")
+ {
+ using_sparse_matrix = false;
+ }
+ else if (jacobian == "matrix-free")
+ {
+ }
+ else
+ {
+ throw std::domain_error(
+ "Unknown jacobian type \""s + jacobian +
+ "\". Should be one of \"sparse\", \"dense\", \"matrix-free\" or \"none\"."s
+ );
+ }
+
+ using_iterative_solver = false;
+ if (linear_solver == "SUNLinSol_Dense" && (jacobian == "dense" || jacobian == "none"))
+ {
+ }
+ else if (linear_solver == "SUNLinSol_KLU" && jacobian == "sparse")
+ {
+ }
+ else if ((linear_solver == "SUNLinSol_SPBCGS" ||
+ linear_solver == "SUNLinSol_SPFGMR" ||
+ linear_solver == "SUNLinSol_SPGMR" ||
+ linear_solver == "SUNLinSol_SPTFQMR") &&
+ (jacobian == "sparse" || jacobian == "matrix-free"))
+ {
+ using_iterative_solver = true;
+ }
+ else if (jacobian == "sparse")
+ {
+ throw std::domain_error(
+ "Unknown linear solver or incompatible options: "
+ "jacobian = \"" + jacobian + "\" linear solver = \"" + linear_solver +
+ "\". For a sparse jacobian "
+ "please use the SUNLinSol_KLU linear solver"
+ );
+ }
+ else if (jacobian == "matrix-free")
+ {
+ throw std::domain_error(
+ "Unknown linear solver or incompatible options. "
+ "jacobian = \"" + jacobian + "\" linear solver = \"" + linear_solver +
+ "\". For a matrix-free jacobian "
+ "please use one of the iterative linear solvers: \"SUNLinSol_SPBCGS\", "
+ "\"SUNLinSol_SPFGMR\", \"SUNLinSol_SPGMR\", or \"SUNLinSol_SPTFQMR\"."
+ );
+ }
+ else if (jacobian == "none")
+ {
+ throw std::domain_error(
+ "Unknown linear solver or incompatible options: "
+ "jacobian = \"" + jacobian + "\" linear solver = \"" + linear_solver +
+ "\". For no jacobian please use the SUNLinSol_Dense solver"
+ );
+ }
+ else
+ {
+ throw std::domain_error(
+ "Unknown linear solver or incompatible options. "
+ "jacobian = \"" + jacobian + "\" linear solver = \"" + linear_solver + "\""
+ );
+ }
+
+ if (using_iterative_solver)
+ {
+ if (preconditioner != "none" && preconditioner != "BBDP")
+ {
+ throw std::domain_error(
+ "Unknown preconditioner \""s + preconditioner +
+ "\", use one of \"BBDP\" or \"none\""s
+ );
+ }
+ }
+ else
+ {
+ preconditioner = "none";
+ }
+}
diff --git a/pybamm/solvers/c_solvers/idaklu/options.hpp b/pybamm/solvers/c_solvers/idaklu/options.hpp
new file mode 100644
index 0000000000..2fc807e48f
--- /dev/null
+++ b/pybamm/solvers/c_solvers/idaklu/options.hpp
@@ -0,0 +1,20 @@
+#ifndef PYBAMM_OPTIONS_HPP
+#define PYBAMM_OPTIONS_HPP
+
+#include "common.hpp"
+
+struct Options {
+ bool print_stats;
+ bool using_sparse_matrix;
+ bool using_iterative_solver;
+ std::string jacobian;
+ std::string linear_solver; // klu, lapack, spbcg
+ std::string preconditioner; // spbcg
+ int linsol_max_iterations;
+ int precon_half_bandwidth;
+ int precon_half_bandwidth_keep;
+ explicit Options(py::dict options);
+
+};
+
+#endif // PYBAMM_OPTIONS_HPP
diff --git a/pybamm/solvers/c_solvers/idaklu/python.cpp b/pybamm/solvers/c_solvers/idaklu/python.cpp
new file mode 100644
index 0000000000..a1803988d4
--- /dev/null
+++ b/pybamm/solvers/c_solvers/idaklu/python.cpp
@@ -0,0 +1,478 @@
+#include "common.hpp"
+#include "python.hpp"
+#include
+
+class PybammFunctions
+{
+public:
+ int number_of_states;
+ int number_of_parameters;
+ int number_of_events;
+
+ PybammFunctions(const residual_type &res, const jacobian_type &jac,
+ const sensitivities_type &sens,
+ const jac_get_type &get_jac_data_in,
+ const jac_get_type &get_jac_row_vals_in,
+ const jac_get_type &get_jac_col_ptrs_in,
+ const event_type &event,
+ const int n_s, int n_e, const int n_p,
+ const np_array &inputs)
+ : number_of_states(n_s), number_of_events(n_e),
+ number_of_parameters(n_p),
+ py_res(res), py_jac(jac),
+ py_sens(sens),
+ py_event(event), py_get_jac_data(get_jac_data_in),
+ py_get_jac_row_vals(get_jac_row_vals_in),
+ py_get_jac_col_ptrs(get_jac_col_ptrs_in),
+ inputs(inputs)
+ {
+ }
+
+ np_array operator()(double t, np_array y, np_array yp)
+ {
+ return py_res(t, y, inputs, yp);
+ }
+
+ np_array res(double t, np_array y, np_array yp)
+ {
+ return py_res(t, y, inputs, yp);
+ }
+
+ void jac(double t, np_array y, double cj)
+ {
+ // this function evaluates the jacobian and sets it to be the attribute
+ // of a python class which can then be called by get_jac_data,
+ // get_jac_col_ptr, etc
+ py_jac(t, y, inputs, cj);
+ }
+
+ void sensitivities(
+ std::vector& resvalS,
+ const double t, const np_array& y, const np_array& yp,
+ const std::vector& yS, const std::vector& ypS)
+ {
+ // this function evaluates the sensitivity equations required by IDAS,
+ // returning them in resvalS, which is preallocated as a numpy array
+ // of size (np, n), where n is the number of states and np is the number
+ // of parameters
+ //
+ // yS and ypS are also shape (np, n), y and yp are shape (n)
+ //
+ // dF/dy * s_i + dF/dyd * sd + dFdp_i for i in range(np)
+ py_sens(resvalS, t, y, inputs, yp, yS, ypS);
+ }
+
+ np_array get_jac_data() { return py_get_jac_data(); }
+
+ np_array get_jac_row_vals() { return py_get_jac_row_vals(); }
+
+ np_array get_jac_col_ptrs() { return py_get_jac_col_ptrs(); }
+
+ np_array events(double t, np_array y) { return py_event(t, y, inputs); }
+
+private:
+ residual_type py_res;
+ sensitivities_type py_sens;
+ jacobian_type py_jac;
+ event_type py_event;
+ jac_get_type py_get_jac_data;
+ jac_get_type py_get_jac_row_vals;
+ jac_get_type py_get_jac_col_ptrs;
+ const np_array &inputs;
+};
+
+int residual(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr,
+ void *user_data)
+{
+ PybammFunctions *python_functions_ptr =
+ static_cast(user_data);
+ PybammFunctions python_functions = *python_functions_ptr;
+
+ realtype *yval, *ypval, *rval;
+ yval = N_VGetArrayPointer(yy);
+ ypval = N_VGetArrayPointer(yp);
+ rval = N_VGetArrayPointer(rr);
+
+ int n = python_functions.number_of_states;
+ py::array_t y_np = py::array_t(n, yval);
+ py::array_t yp_np = py::array_t(n, ypval);
+
+ py::array_t r_np;
+
+ r_np = python_functions.res(tres, y_np, yp_np);
+
+ auto r_np_ptr = r_np.unchecked<1>();
+
+ // just copying data
+ int i;
+ for (i = 0; i < n; i++)
+ {
+ rval[i] = r_np_ptr[i];
+ }
+ return 0;
+}
+
+int jacobian(realtype tt, realtype cj, N_Vector yy, N_Vector yp,
+ N_Vector resvec, SUNMatrix JJ, void *user_data, N_Vector tempv1,
+ N_Vector tempv2, N_Vector tempv3)
+{
+ realtype *yval;
+ yval = N_VGetArrayPointer(yy);
+
+ PybammFunctions *python_functions_ptr =
+ static_cast(user_data);
+ PybammFunctions python_functions = *python_functions_ptr;
+
+ int n = python_functions.number_of_states;
+ py::array_t y_np = py::array_t(n, yval);
+
+ // create pointer to jac data, column pointers, and row values
+ sunindextype *jac_colptrs = SUNSparseMatrix_IndexPointers(JJ);
+ sunindextype *jac_rowvals = SUNSparseMatrix_IndexValues(JJ);
+ realtype *jac_data = SUNSparseMatrix_Data(JJ);
+
+ py::array_t jac_np_array;
+
+ python_functions.jac(tt, y_np, cj);
+
+ np_array jac_np_data = python_functions.get_jac_data();
+ int n_data = jac_np_data.request().size;
+ auto jac_np_data_ptr = jac_np_data.unchecked<1>();
+
+ // just copy across data
+ int i;
+ for (i = 0; i < n_data; i++)
+ {
+ jac_data[i] = jac_np_data_ptr[i];
+ }
+
+ np_array jac_np_row_vals = python_functions.get_jac_row_vals();
+ int n_row_vals = jac_np_row_vals.request().size;
+
+ auto jac_np_row_vals_ptr = jac_np_row_vals.unchecked<1>();
+ // just copy across row vals (this might be unneeded)
+ for (i = 0; i < n_row_vals; i++)
+ {
+ jac_rowvals[i] = jac_np_row_vals_ptr[i];
+ }
+
+ np_array jac_np_col_ptrs = python_functions.get_jac_col_ptrs();
+ int n_col_ptrs = jac_np_col_ptrs.request().size;
+ auto jac_np_col_ptrs_ptr = jac_np_col_ptrs.unchecked<1>();
+
+ // just copy across col ptrs (this might be unneeded)
+ for (i = 0; i < n_col_ptrs; i++)
+ {
+ jac_colptrs[i] = jac_np_col_ptrs_ptr[i];
+ }
+
+ return (0);
+}
+
+int events(realtype t, N_Vector yy, N_Vector yp, realtype *events_ptr,
+ void *user_data)
+{
+ realtype *yval;
+ yval = N_VGetArrayPointer(yy);
+
+ PybammFunctions *python_functions_ptr =
+ static_cast(user_data);
+ PybammFunctions python_functions = *python_functions_ptr;
+
+ int number_of_events = python_functions.number_of_events;
+ int number_of_states = python_functions.number_of_states;
+ py::array_t y_np = py::array_t(number_of_states, yval);
+
+ py::array_t events_np_array;
+
+ events_np_array = python_functions.events(t, y_np);
+
+ auto events_np_data_ptr = events_np_array.unchecked<1>();
+
+ // just copying data (figure out how to pass pointers later)
+ int i;
+ for (i = 0; i < number_of_events; i++)
+ {
+ events_ptr[i] = events_np_data_ptr[i];
+ }
+
+ return (0);
+}
+
+int sensitivities(int Ns, realtype t, N_Vector yy, N_Vector yp,
+ N_Vector resval, N_Vector *yS, N_Vector *ypS, N_Vector *resvalS,
+ void *user_data, N_Vector tmp1, N_Vector tmp2, N_Vector tmp3) {
+// This function computes the sensitivity residual for all sensitivity
+// equations. It must compute the vectors
+// (∂F/∂y)s i (t)+(∂F/∂ ẏ) ṡ i (t)+(∂F/∂p i ) and store them in resvalS[i].
+// Ns is the number of sensitivities.
+// t is the current value of the independent variable.
+// yy is the current value of the state vector, y(t).
+// yp is the current value of ẏ(t).
+// resval contains the current value F of the original DAE residual.
+// yS contains the current values of the sensitivities s i .
+// ypS contains the current values of the sensitivity derivatives ṡ i .
+// resvalS contains the output sensitivity residual vectors.
+// Memory allocation for resvalS is handled within idas.
+// user data is a pointer to user data.
+// tmp1, tmp2, tmp3 are N Vectors of length N which can be used as
+// temporary storage.
+//
+// Return value An IDASensResFn should return 0 if successful,
+// a positive value if a recoverable error
+// occurred (in which case idas will attempt to correct),
+// or a negative value if it failed unrecoverably (in which case the integration is halted and IDA SRES FAIL is returned)
+//
+ PybammFunctions *python_functions_ptr =
+ static_cast(user_data);
+ PybammFunctions python_functions = *python_functions_ptr;
+
+ int n = python_functions.number_of_states;
+ int np = python_functions.number_of_parameters;
+
+ // memory managed by sundials, so pass a destructor that does nothing
+ auto state_vector_shape = std::vector{n, 1};
+ np_array y_np = np_array(state_vector_shape, N_VGetArrayPointer(yy),
+ py::capsule(&yy, [](void* p) {}));
+ np_array yp_np = np_array(state_vector_shape, N_VGetArrayPointer(yp),
+ py::capsule(&yp, [](void* p) {}));
+
+ std::vector yS_np(np);
+ for (int i = 0; i < np; i++) {
+ auto capsule = py::capsule(yS + i, [](void* p) {});
+ yS_np[i] = np_array(state_vector_shape, N_VGetArrayPointer(yS[i]), capsule);
+ }
+
+ std::vector ypS_np(np);
+ for (int i = 0; i < np; i++) {
+ auto capsule = py::capsule(ypS + i, [](void* p) {});
+ ypS_np[i] = np_array(state_vector_shape, N_VGetArrayPointer(ypS[i]), capsule);
+ }
+
+ std::vector resvalS_np(np);
+ for (int i = 0; i < np; i++) {
+ auto capsule = py::capsule(resvalS + i, [](void* p) {});
+ resvalS_np[i] = np_array(state_vector_shape,
+ N_VGetArrayPointer(resvalS[i]), capsule);
+ }
+
+ realtype *ptr1 = static_cast(resvalS_np[0].request().ptr);
+ const realtype* resvalSval = N_VGetArrayPointer(resvalS[0]);
+
+ python_functions.sensitivities(resvalS_np, t, y_np, yp_np, yS_np, ypS_np);
+
+ return 0;
+}
+
+/* main program */
+Solution solve_python(np_array t_np, np_array y0_np, np_array yp0_np,
+ residual_type res, jacobian_type jac,
+ sensitivities_type sens,
+ jac_get_type gjd, jac_get_type gjrv, jac_get_type gjcp,
+ int nnz, event_type event,
+ int number_of_events, int use_jacobian, np_array rhs_alg_id,
+ np_array atol_np, double rel_tol, np_array inputs,
+ int number_of_parameters)
+{
+ auto t = t_np.unchecked<1>();
+ auto y0 = y0_np.unchecked<1>();
+ auto yp0 = yp0_np.unchecked<1>();
+ auto atol = atol_np.unchecked<1>();
+
+ int number_of_states = y0_np.request().size;
+ int number_of_timesteps = t_np.request().size;
+ void *ida_mem; // pointer to memory
+ N_Vector yy, yp, avtol; // y, y', and absolute tolerance
+ N_Vector *yyS, *ypS; // y, y' for sensitivities
+ N_Vector id;
+ realtype rtol, *yval, *ypval, *atval;
+ std::vector ySval(number_of_parameters);
+ int retval;
+ SUNMatrix J;
+ SUNLinearSolver LS;
+
+#if SUNDIALS_VERSION_MAJOR >= 6
+ SUNContext sunctx;
+ SUNContext_Create(NULL, &sunctx);
+
+ // allocate memory for solver
+ ida_mem = IDACreate(sunctx);
+
+ // allocate vectors
+ yy = N_VNew_Serial(number_of_states, sunctx);
+ yp = N_VNew_Serial(number_of_states, sunctx);
+ avtol = N_VNew_Serial(number_of_states, sunctx);
+ id = N_VNew_Serial(number_of_states, sunctx);
+#else
+ // allocate memory for solver
+ ida_mem = IDACreate();
+
+ // allocate vectors
+ yy = N_VNew_Serial(number_of_states);
+ yp = N_VNew_Serial(number_of_states);
+ avtol = N_VNew_Serial(number_of_states);
+ id = N_VNew_Serial(number_of_states);
+#endif
+
+ if (number_of_parameters > 0) {
+ yyS = N_VCloneVectorArray(number_of_parameters, yy);
+ ypS = N_VCloneVectorArray(number_of_parameters, yp);
+ }
+
+ // set initial value
+ yval = N_VGetArrayPointer(yy);
+ ypval = N_VGetArrayPointer(yp);
+ atval = N_VGetArrayPointer(avtol);
+ int i;
+ for (i = 0; i < number_of_states; i++)
+ {
+ yval[i] = y0[i];
+ ypval[i] = yp0[i];
+ atval[i] = atol[i];
+ }
+
+ for (int is = 0 ; is < number_of_parameters; is++) {
+ ySval[is] = N_VGetArrayPointer(yyS[is]);
+ N_VConst(RCONST(0.0), yyS[is]);
+ N_VConst(RCONST(0.0), ypS[is]);
+ }
+
+ // initialise solver
+ realtype t0 = RCONST(t(0));
+ IDAInit(ida_mem, residual, t0, yy, yp);
+
+ // set tolerances
+ rtol = RCONST(rel_tol);
+
+ IDASVtolerances(ida_mem, rtol, avtol);
+
+ // set events
+ IDARootInit(ida_mem, number_of_events, events);
+
+ // set pybamm functions by passing pointer to it
+ PybammFunctions pybamm_functions(res, jac, sens, gjd, gjrv, gjcp, event,
+ number_of_states, number_of_events,
+ number_of_parameters, inputs);
+ void *user_data = &pybamm_functions;
+ IDASetUserData(ida_mem, user_data);
+
+ // set linear solver
+#if SUNDIALS_VERSION_MAJOR >= 6
+ J = SUNSparseMatrix(number_of_states, number_of_states, nnz, CSR_MAT, sunctx);
+ LS = SUNLinSol_KLU(yy, J, sunctx);
+#else
+ J = SUNSparseMatrix(number_of_states, number_of_states, nnz, CSR_MAT);
+ LS = SUNLinSol_KLU(yy, J);
+#endif
+
+ IDASetLinearSolver(ida_mem, LS, J);
+
+ if (use_jacobian == 1)
+ {
+ IDASetJacFn(ida_mem, jacobian);
+ }
+
+ if (number_of_parameters > 0)
+ {
+ IDASensInit(ida_mem, number_of_parameters,
+ IDA_SIMULTANEOUS, sensitivities, yyS, ypS);
+ IDASensEEtolerances(ida_mem);
+ }
+
+ int t_i = 1;
+ realtype tret;
+ realtype t_next;
+ realtype t_final = t(number_of_timesteps - 1);
+
+ // set return vectors
+ std::vector t_return(number_of_timesteps);
+ std::vector y_return(number_of_timesteps * number_of_states);
+ std::vector yS_return(number_of_parameters * number_of_timesteps * number_of_states);
+
+ t_return[0] = t(0);
+ for (int j = 0; j < number_of_states; j++)
+ {
+ y_return[j] = yval[j];
+ }
+ for (int j = 0; j < number_of_parameters; j++) {
+ const int base_index = j * number_of_timesteps * number_of_states;
+ for (int k = 0; k < number_of_states; k++) {
+ yS_return[base_index + k] = ySval[j][k];
+ }
+ }
+
+ // calculate consistent initial conditions
+ auto id_np_val = rhs_alg_id.unchecked<1>();
+ realtype *id_val;
+ id_val = N_VGetArrayPointer(id);
+
+ int ii;
+ for (ii = 0; ii < number_of_states; ii++)
+ {
+ id_val[ii] = id_np_val[ii];
+ }
+
+ IDASetId(ida_mem, id);
+ IDACalcIC(ida_mem, IDA_YA_YDP_INIT, t(1));
+
+ while (true)
+ {
+ t_next = t(t_i);
+ IDASetStopTime(ida_mem, t_next);
+ retval = IDASolve(ida_mem, t_final, &tret, yy, yp, IDA_NORMAL);
+
+ if (retval == IDA_TSTOP_RETURN || retval == IDA_SUCCESS || retval == IDA_ROOT_RETURN)
+ {
+ if (number_of_parameters > 0) {
+ IDAGetSens(ida_mem, &tret, yyS);
+ }
+
+ t_return[t_i] = tret;
+ for (int j = 0; j < number_of_states; j++)
+ {
+ y_return[t_i * number_of_states + j] = yval[j];
+ }
+ for (int j = 0; j < number_of_parameters; j++) {
+ const int base_index = j * number_of_timesteps * number_of_states
+ + t_i * number_of_states;
+ for (int k = 0; k < number_of_states; k++) {
+ yS_return[base_index + k] = ySval[j][k];
+ }
+ }
+ t_i += 1;
+ if (retval == IDA_SUCCESS || retval == IDA_ROOT_RETURN) {
+ break;
+ }
+
+ }
+ }
+
+ /* Free memory */
+ if (number_of_parameters > 0) {
+ IDASensFree(ida_mem);
+ }
+ IDAFree(&ida_mem);
+ SUNLinSolFree(LS);
+ SUNMatDestroy(J);
+ N_VDestroy(avtol);
+ N_VDestroy(yp);
+ if (number_of_parameters > 0) {
+ N_VDestroyVectorArray(yyS, number_of_parameters);
+ N_VDestroyVectorArray(ypS, number_of_parameters);
+ }
+#if SUNDIALS_VERSION_MAJOR >= 6
+ SUNContext_Free(&sunctx);
+#endif
+
+ np_array t_ret = np_array(t_i, &t_return[0]);
+ np_array y_ret = np_array(t_i * number_of_states, &y_return[0]);
+ np_array yS_ret = np_array(
+ std::vector{number_of_parameters, number_of_timesteps, number_of_states},
+ &yS_return[0]
+ );
+
+ Solution sol(retval, t_ret, y_ret, yS_ret);
+
+ return sol;
+}
+
diff --git a/pybamm/solvers/c_solvers/idaklu.hpp b/pybamm/solvers/c_solvers/idaklu/python.hpp
similarity index 97%
rename from pybamm/solvers/c_solvers/idaklu.hpp
rename to pybamm/solvers/c_solvers/idaklu/python.hpp
index a39f149252..8c29bbc496 100644
--- a/pybamm/solvers/c_solvers/idaklu.hpp
+++ b/pybamm/solvers/c_solvers/idaklu/python.hpp
@@ -1,7 +1,7 @@
#ifndef PYBAMM_IDAKLU_HPP
#define PYBAMM_IDAKLU_HPP
-#include "idaklu_python.hpp"
+#include "common.hpp"
#include "solution.hpp"
#include
diff --git a/pybamm/solvers/c_solvers/solution.cpp b/pybamm/solvers/c_solvers/idaklu/solution.cpp
similarity index 100%
rename from pybamm/solvers/c_solvers/solution.cpp
rename to pybamm/solvers/c_solvers/idaklu/solution.cpp
diff --git a/pybamm/solvers/c_solvers/solution.hpp b/pybamm/solvers/c_solvers/idaklu/solution.hpp
similarity index 62%
rename from pybamm/solvers/c_solvers/solution.hpp
rename to pybamm/solvers/c_solvers/idaklu/solution.hpp
index 08192f3c49..047ae6ef8e 100644
--- a/pybamm/solvers/c_solvers/solution.hpp
+++ b/pybamm/solvers/c_solvers/idaklu/solution.hpp
@@ -1,7 +1,7 @@
-#ifndef PYBAMM_SOLUTION_HPP
-#define PYBAMM_SOLUTION_HPP
+#ifndef PYBAMM_IDAKLU_SOLUTION_HPP
+#define PYBAMM_IDAKLU_SOLUTION_HPP
-#include "idaklu_python.hpp"
+#include "common.hpp"
class Solution
{
@@ -17,4 +17,4 @@ class Solution
np_array yS;
};
-#endif // PYBAMM_SOLUTION_HPP
+#endif // PYBAMM_IDAKLU_COMMON_HPP
diff --git a/pybamm/solvers/c_solvers/idaklu_casadi.cpp b/pybamm/solvers/c_solvers/idaklu_casadi.cpp
deleted file mode 100644
index f611c6ebc3..0000000000
--- a/pybamm/solvers/c_solvers/idaklu_casadi.cpp
+++ /dev/null
@@ -1,582 +0,0 @@
-#include "idaklu_casadi.hpp"
-#include "idaklu_python.hpp"
-
-#include
-
-#include
-using casadi::casadi_axpy;
-using Sparsity = casadi::Sparsity;
-
-class CasadiFunction {
-public:
- explicit CasadiFunction(const Function &f):m_func(f) {
- size_t sz_arg;
- size_t sz_res;
- size_t sz_iw;
- size_t sz_w;
- m_func.sz_work(sz_arg, sz_res, sz_iw, sz_w);
- m_arg.resize(sz_arg);
- m_res.resize(sz_res);
- m_iw.resize(sz_iw);
- m_w.resize(sz_w);
- }
-
- // only call this once m_arg and m_res have been set appropriatelly
- void operator()() {
- int mem = m_func.checkout();
- m_func(m_arg.data(), m_res.data(), m_iw.data(), m_w.data(), mem);
- m_func.release(mem);
- }
-
-public:
- std::vector m_arg;
- std::vector m_res;
-
-private:
- const Function &m_func;
- std::vector m_iw;
- std::vector m_w;
-};
-
-
-class CasadiFunctions {
-public:
- int number_of_states;
- int number_of_parameters;
- int number_of_events;
- int number_of_nnz;
- CasadiFunction rhs_alg;
- CasadiFunction sens;
- CasadiFunction jac_times_cjmass;
- const np_array_int &jac_times_cjmass_rowvals;
- const np_array_int &jac_times_cjmass_colptrs;
- const np_array_dense &inputs;
- CasadiFunction jac_action;
- CasadiFunction mass_action;
- CasadiFunction events;
-
- CasadiFunctions(const Function &rhs_alg,
- const Function &jac_times_cjmass,
- const int jac_times_cjmass_nnz,
- const np_array_int &jac_times_cjmass_rowvals,
- const np_array_int &jac_times_cjmass_colptrs,
- const np_array_dense &inputs,
- const Function &jac_action,
- const Function &mass_action,
- const Function &sens,
- const Function &events,
- const int n_s, int n_e, const int n_p)
- : number_of_states(n_s), number_of_events(n_e),
- number_of_parameters(n_p),
- number_of_nnz(jac_times_cjmass_nnz),
- rhs_alg(rhs_alg),
- jac_times_cjmass(jac_times_cjmass),
- jac_times_cjmass_rowvals(jac_times_cjmass_rowvals),
- jac_times_cjmass_colptrs(jac_times_cjmass_colptrs),
- inputs(inputs),
- jac_action(jac_action),
- mass_action(mass_action),
- sens(sens),
- events(events),
- tmp(number_of_states)
- {}
-
- realtype *get_tmp() {
- return tmp.data();
- }
-
-private:
- std::vector tmp;
-};
-
-int residual_casadi(realtype tres, N_Vector yy, N_Vector yp, N_Vector rr,
- void *user_data)
-{
- CasadiFunctions *p_python_functions =
- static_cast(user_data);
-
- py::buffer_info input_buf = p_python_functions->inputs.request();
- p_python_functions->rhs_alg.m_arg[0] = &tres;
- p_python_functions->rhs_alg.m_arg[1] = NV_DATA_S(yy);
- p_python_functions->rhs_alg.m_arg[2] = static_cast(input_buf.ptr);
- p_python_functions->rhs_alg.m_res[0] = NV_DATA_S(rr);
- p_python_functions->rhs_alg();
-
- realtype *tmp = p_python_functions->get_tmp();
-
- // args is yp, put result in tmp
- p_python_functions->mass_action.m_arg[0] = NV_DATA_S(yp);
- p_python_functions->mass_action.m_res[0] = tmp;
- p_python_functions->mass_action();
-
- // AXPY: y <- a*x + y
- const int ns = p_python_functions->number_of_states;
- casadi_axpy(ns, -1., tmp, NV_DATA_S(rr));
-
- // now rr has rhs_alg(t, y) - mass_matrix * yp
- return 0;
-}
-
-// Purpose This function computes the product Jv of the DAE system Jacobian J
-// (or an approximation to it) and a given vector v, where J is defined by Eq. (2.6).
-// J = ∂F/∂y + cj ∂F/∂y˙
-// Arguments tt is the current value of the independent variable.
-// yy is the current value of the dependent variable vector, y(t).
-// yp is the current value of ˙y(t).
-// rr is the current value of the residual vector F(t, y, y˙).
-// v is the vector by which the Jacobian must be multiplied to the right.
-// Jv is the computed output vector.
-// cj is the scalar in the system Jacobian, proportional to the inverse of the step
-// size (α in Eq. (2.6) ).
-// user data is a pointer to user data, the same as the user data parameter passed to
-// IDASetUserData.
-// tmp1
-// tmp2 are pointers to memory allocated for variables of type N Vector which can
-// be used by IDALsJacTimesVecFn as temporary storage or work space.
-int jtimes_casadi(realtype tt, N_Vector yy, N_Vector yp, N_Vector rr,
- N_Vector v, N_Vector Jv, realtype cj, void *user_data,
- N_Vector tmp1, N_Vector tmp2) {
- CasadiFunctions *p_python_functions =
- static_cast(user_data);
-
- // rr has ∂F/∂y v
- py::buffer_info input_buf = p_python_functions->inputs.request();
- p_python_functions->jac_action.m_arg[0] = &tt;
- p_python_functions->jac_action.m_arg[1] = NV_DATA_S(yy);
- p_python_functions->jac_action.m_arg[2] = static_cast(input_buf.ptr);
- p_python_functions->jac_action.m_arg[3] = NV_DATA_S(v);
- p_python_functions->jac_action.m_res[0] = NV_DATA_S(rr);
- p_python_functions->jac_action();
-
- // tmp has -∂F/∂y˙ v
- realtype *tmp = p_python_functions->get_tmp();
- p_python_functions->mass_action.m_arg[0] = NV_DATA_S(v);
- p_python_functions->mass_action.m_res[0] = tmp;
- p_python_functions->mass_action();
-
- // AXPY: y <- a*x + y
- // rr has ∂F/∂y v + cj ∂F/∂y˙ v
- const int ns = p_python_functions->number_of_states;
- casadi_axpy(ns, -cj, tmp, NV_DATA_S(rr));
-
- return 0;
-}
-
-
-// Arguments tt is the current value of the independent variable t.
-// cj is the scalar in the system Jacobian, proportional to the inverse of the step
-// size (α in Eq. (2.6) ).
-// yy is the current value of the dependent variable vector, y(t).
-// yp is the current value of ˙y(t).
-// rr is the current value of the residual vector F(t, y, y˙).
-// Jac is the output (approximate) Jacobian matrix (of type SUNMatrix), J =
-// ∂F/∂y + cj ∂F/∂y˙.
-// user data is a pointer to user data, the same as the user data parameter passed to
-// IDASetUserData.
-// tmp1
-// tmp2
-// tmp3 are pointers to memory allocated for variables of type N Vector which can
-// be used by IDALsJacFn function as temporary storage or work space.
-int jacobian_casadi(realtype tt, realtype cj, N_Vector yy, N_Vector yp,
- N_Vector resvec, SUNMatrix JJ, void *user_data, N_Vector tempv1,
- N_Vector tempv2, N_Vector tempv3) {
-
- CasadiFunctions *p_python_functions =
- static_cast(user_data);
-
- // create pointer to jac data, column pointers, and row values
- sunindextype *jac_colptrs = SUNSparseMatrix_IndexPointers(JJ);
- sunindextype *jac_rowvals = SUNSparseMatrix_IndexValues(JJ);
- realtype *jac_data = SUNSparseMatrix_Data(JJ);
-
- // args are t, y, cj, put result in jacobian data matrix
- py::buffer_info input_buf = p_python_functions->inputs.request();
- p_python_functions->jac_times_cjmass.m_arg[0] = &tt;
- p_python_functions->jac_times_cjmass.m_arg[1] = NV_DATA_S(yy);
- p_python_functions->jac_times_cjmass.m_arg[2] = static_cast(input_buf.ptr);
- p_python_functions->jac_times_cjmass.m_arg[3] = &cj;
- p_python_functions->jac_times_cjmass.m_res[0] = jac_data;
- p_python_functions->jac_times_cjmass();
-
- // row vals and col ptrs
- const np_array &jac_times_cjmass_rowvals = p_python_functions->jac_times_cjmass_rowvals;
- const int n_row_vals = jac_times_cjmass_rowvals.request().size;
- auto p_jac_times_cjmass_rowvals = jac_times_cjmass_rowvals.unchecked<1>();
-
- // just copy across row vals (do I need to do this every time?)
- // (or just in the setup?)
- for (int i = 0; i < n_row_vals; i++) {
- jac_rowvals[i] = p_jac_times_cjmass_rowvals[i];
- }
-
- const np_array &jac_times_cjmass_colptrs = p_python_functions->jac_times_cjmass_colptrs;
- const int n_col_ptrs = jac_times_cjmass_colptrs.request().size;
- auto p_jac_times_cjmass_colptrs = jac_times_cjmass_colptrs.unchecked<1>();
-
- // just copy across col ptrs (do I need to do this every time?)
- for (int i = 0; i < n_col_ptrs; i++) {
- jac_colptrs[i] = p_jac_times_cjmass_colptrs[i];
- }
-
- return (0);
-}
-
-int events_casadi(realtype t, N_Vector yy, N_Vector yp, realtype *events_ptr,
- void *user_data)
-{
- CasadiFunctions *p_python_functions =
- static_cast(user_data);
-
- // args are t, y, put result in events_ptr
- py::buffer_info input_buf = p_python_functions->inputs.request();
- p_python_functions->events.m_arg[0] = &t;
- p_python_functions->events.m_arg[1] = NV_DATA_S(yy);
- p_python_functions->events.m_arg[2] = static_cast(input_buf.ptr);
- p_python_functions->events.m_res[0] = events_ptr;
- p_python_functions->events();
-
- return (0);
-}
-
-// This function computes the sensitivity residual for all sensitivity
-// equations. It must compute the vectors
-// (∂F/∂y)s i (t)+(∂F/∂ ẏ) ṡ i (t)+(∂F/∂p i ) and store them in resvalS[i].
-// Ns is the number of sensitivities.
-// t is the current value of the independent variable.
-// yy is the current value of the state vector, y(t).
-// yp is the current value of ẏ(t).
-// resval contains the current value F of the original DAE residual.
-// yS contains the current values of the sensitivities s i .
-// ypS contains the current values of the sensitivity derivatives ṡ i .
-// resvalS contains the output sensitivity residual vectors.
-// Memory allocation for resvalS is handled within idas.
-// user data is a pointer to user data.
-// tmp1, tmp2, tmp3 are N Vectors of length N which can be used as
-// temporary storage.
-//
-// Return value An IDASensResFn should return 0 if successful,
-// a positive value if a recoverable error
-// occurred (in which case idas will attempt to correct),
-// or a negative value if it failed unrecoverably (in which case the integration is halted and IDA SRES FAIL is returned)
-//
-int sensitivities_casadi(int Ns, realtype t, N_Vector yy, N_Vector yp,
- N_Vector resval, N_Vector *yS, N_Vector *ypS, N_Vector *resvalS,
- void *user_data, N_Vector tmp1, N_Vector tmp2, N_Vector tmp3) {
-
- CasadiFunctions *p_python_functions =
- static_cast(user_data);
-
- const int np = p_python_functions->number_of_parameters;
-
- // args are t, y put result in rr
- py::buffer_info input_buf = p_python_functions->inputs.request();
- p_python_functions->sens.m_arg[0] = &t;
- p_python_functions->sens.m_arg[1] = NV_DATA_S(yy);
- p_python_functions->sens.m_arg[2] = static_cast(input_buf.ptr);
- for (int i = 0; i < np; i++) {
- p_python_functions->sens.m_res[i] = NV_DATA_S(resvalS[i]);
- }
- // resvalsS now has (∂F/∂p i )
- p_python_functions->sens();
-
- for (int i = 0; i < np; i++) {
- // put (∂F/∂y)s i (t) in tmp
- realtype *tmp = p_python_functions->get_tmp();
- p_python_functions->jac_action.m_arg[0] = &t;
- p_python_functions->jac_action.m_arg[1] = NV_DATA_S(yy);
- p_python_functions->jac_action.m_arg[2] = static_cast(input_buf.ptr);
- p_python_functions->jac_action.m_arg[3] = NV_DATA_S(yS[i]);
- p_python_functions->jac_action.m_res[0] = tmp;
- p_python_functions->jac_action();
-
- const int ns = p_python_functions->number_of_states;
- casadi_axpy(ns, 1., tmp, NV_DATA_S(resvalS[i]));
-
- // put -(∂F/∂ ẏ) ṡ i (t) in tmp2
- p_python_functions->mass_action.m_arg[0] = NV_DATA_S(ypS[i]);
- p_python_functions->mass_action.m_res[0] = tmp;
- p_python_functions->mass_action();
-
- // (∂F/∂y)s i (t)+(∂F/∂ ẏ) ṡ i (t)+(∂F/∂p i )
- // AXPY: y <- a*x + y
- casadi_axpy(ns, -1., tmp, NV_DATA_S(resvalS[i]));
- }
-
- return 0;
-}
-
-
-
-/* main program */
-
-Solution solve_casadi(np_array t_np, np_array y0_np, np_array yp0_np,
- const Function &rhs_alg,
- const Function &jac_times_cjmass,
- const np_array_int &jac_times_cjmass_colptrs,
- const np_array_int &jac_times_cjmass_rowvals,
- const int jac_times_cjmass_nnz,
- const Function &jac_action,
- const Function &mass_action,
- const Function &sens,
- const Function &events,
- const int number_of_events,
- int use_jacobian,
- np_array rhs_alg_id,
- np_array atol_np, double rel_tol,
- np_array_dense inputs,
- int number_of_parameters)
-{
-
- auto t = t_np.unchecked<1>();
- auto y0 = y0_np.unchecked<1>();
- auto yp0 = yp0_np.unchecked<1>();
- auto atol = atol_np.unchecked<1>();
-
- int number_of_states = y0_np.request().size;
- int number_of_timesteps = t_np.request().size;
- void *ida_mem; // pointer to memory
- N_Vector yy, yp, avtol; // y, y', and absolute tolerance
- N_Vector *yyS, *ypS; // y, y' for sensitivities
- realtype rtol, *yval, *ypval, *atval;
- std::vector ySval(number_of_parameters);
- int retval;
- SUNMatrix J;
- SUNLinearSolver LS;
-
- // allocate vectors
- yy = N_VNew_Serial(number_of_states);
- yp = N_VNew_Serial(number_of_states);
- avtol = N_VNew_Serial(number_of_states);
-
- if (number_of_parameters > 0) {
- yyS = N_VCloneVectorArray(number_of_parameters, yy);
- ypS = N_VCloneVectorArray(number_of_parameters, yp);
- }
-
- // set initial value
- yval = N_VGetArrayPointer(yy);
- ypval = N_VGetArrayPointer(yp);
- atval = N_VGetArrayPointer(avtol);
- int i;
- for (i = 0; i < number_of_states; i++)
- {
- yval[i] = y0[i];
- ypval[i] = yp0[i];
- atval[i] = atol[i];
- }
-
- for (int is = 0 ; is < number_of_parameters; is++) {
- ySval[is] = N_VGetArrayPointer(yyS[is]);
- N_VConst(RCONST(0.0), yyS[is]);
- N_VConst(RCONST(0.0), ypS[is]);
- }
-
- // allocate memory for solver
- ida_mem = IDACreate();
-
- // initialise solver
- realtype t0 = RCONST(t(0));
- IDAInit(ida_mem, residual_casadi, t0, yy, yp);
-
- // set tolerances
- rtol = RCONST(rel_tol);
-
- IDASVtolerances(ida_mem, rtol, avtol);
-
- // set events
- IDARootInit(ida_mem, number_of_events, events_casadi);
-
- // set pybamm functions by passing pointer to it
- CasadiFunctions pybamm_functions = CasadiFunctions(
- rhs_alg,
- jac_times_cjmass,
- jac_times_cjmass_nnz,
- jac_times_cjmass_rowvals,
- jac_times_cjmass_colptrs,
- inputs,
- jac_action, mass_action,
- sens, events,
- number_of_states, number_of_events,
- number_of_parameters);
-
- void *user_data = &pybamm_functions;
- IDASetUserData(ida_mem, user_data);
-
- // set linear solver
- if (use_jacobian == 1) {
- J = SUNSparseMatrix(number_of_states, number_of_states, jac_times_cjmass_nnz, CSC_MAT);
- LS = SUNLinSol_KLU(yy, J);
- } else {
- J = SUNDenseMatrix(number_of_states, number_of_states);
- LS = SUNLinSol_Dense(yy, J);
- }
-
- IDASetLinearSolver(ida_mem, LS, J);
-
- if (use_jacobian == 1) {
- IDASetJacFn(ida_mem, jacobian_casadi);
- }
-
-
- if (number_of_parameters > 0) {
- IDASensInit(ida_mem, number_of_parameters,
- IDA_SIMULTANEOUS, sensitivities_casadi, yyS, ypS);
- IDASensEEtolerances(ida_mem);
- }
-
- SUNLinSolInitialize(LS);
-
- int t_i = 1;
- realtype tret;
- realtype t_next;
- realtype t_final = t(number_of_timesteps - 1);
-
- // set return vectors
- realtype* t_return = new realtype[number_of_timesteps];
- realtype* y_return = new realtype[number_of_timesteps * number_of_states];
- realtype* yS_return = new realtype[number_of_parameters * number_of_timesteps * number_of_states];
-
- py::capsule free_t_when_done(t_return, [](void *f) {
- realtype *vect = reinterpret_cast(f);
- delete[] vect;
- });
- py::capsule free_y_when_done(y_return, [](void *f) {
- realtype *vect = reinterpret_cast(f);
- delete[] vect;
- });
- py::capsule free_yS_when_done(yS_return, [](void *f) {
- realtype *vect = reinterpret_cast(f);
- delete[] vect;
- });
-
- t_return[0] = t(0);
- for (int j = 0; j < number_of_states; j++)
- {
- y_return[j] = yval[j];
- }
- for (int j = 0; j < number_of_parameters; j++) {
- const int base_index = j * number_of_timesteps * number_of_states;
- for (int k = 0; k < number_of_states; k++) {
- yS_return[base_index + k] = ySval[j][k];
- }
- }
-
- // calculate consistent initial conditions
- N_Vector id;
- auto id_np_val = rhs_alg_id.unchecked<1>();
- id = N_VNew_Serial(number_of_states);
- realtype *id_val;
- id_val = N_VGetArrayPointer(id);
-
- int ii;
- for (ii = 0; ii < number_of_states; ii++)
- {
- id_val[ii] = id_np_val[ii];
- }
-
- IDASetId(ida_mem, id);
- IDACalcIC(ida_mem, IDA_YA_YDP_INIT, t(1));
-
- while (true)
- {
- t_next = t(t_i);
- IDASetStopTime(ida_mem, t_next);
- retval = IDASolve(ida_mem, t_final, &tret, yy, yp, IDA_NORMAL);
-
- if (retval == IDA_TSTOP_RETURN || retval == IDA_SUCCESS || retval == IDA_ROOT_RETURN) {
- if (number_of_parameters > 0) {
- IDAGetSens(ida_mem, &tret, yyS);
- }
-
- t_return[t_i] = tret;
- for (int j = 0; j < number_of_states; j++)
- {
- y_return[t_i * number_of_states + j] = yval[j];
- }
- for (int j = 0; j < number_of_parameters; j++) {
- const int base_index = j * number_of_timesteps * number_of_states
- + t_i * number_of_states;
- for (int k = 0; k < number_of_states; k++) {
- yS_return[base_index + k] = ySval[j][k];
- }
- }
- t_i += 1;
- if (retval == IDA_SUCCESS || retval == IDA_ROOT_RETURN) {
- break;
- }
- } else {
- // failed
- break;
- }
- }
-
- np_array t_ret = np_array(t_i, &t_return[0], free_t_when_done);
- np_array y_ret = np_array(t_i * number_of_states, &y_return[0], free_y_when_done);
- np_array yS_ret = np_array(
- std::vector{number_of_parameters, number_of_timesteps, number_of_states},
- &yS_return[0], free_yS_when_done
- );
-
- Solution sol(retval, t_ret, y_ret, yS_ret);
-
- // TODO config input to choose stuff like this
- const bool print_stats = false;
- if (print_stats) {
- long nsteps, nrevals, nlinsetups, netfails;
- int klast, kcur;
- realtype hinused, hlast, hcur, tcur;
-
- IDAGetIntegratorStats(ida_mem,
- &nsteps,
- &nrevals,
- &nlinsetups,
- &netfails,
- &klast,
- &kcur,
- &hinused,
- &hlast,
- &hcur,
- &tcur
- );
-
- long nniters, nncfails;
- IDAGetNonlinSolvStats(ida_mem, &nniters, &nncfails);
-
- std::cout << "Solver Stats: \n"
- << " Number of steps = " << nsteps << "\n"
- << " Number of calls to residual function = " << nrevals << "\n"
- << " Number of linear solver setup calls = " << nlinsetups << "\n"
- << " Number of error test failures = " << netfails << "\n"
- << " Method order used on last step = " << klast << "\n"
- << " Method order used on next step = " << kcur << "\n"
- << " Initial step size = " << hinused << "\n"
- << " Step size on last step = " << hlast << "\n"
- << " Step size on next step = " << hcur << "\n"
- << " Current internal time reached = " << tcur << "\n"
- << " Number of nonlinear iterations performed = " << nniters << "\n"
- << " Number of nonlinear convergence failures = " << nncfails << "\n"
- << std::endl;
- }
-
-
-
- /* Free memory */
- if (number_of_parameters > 0) {
- IDASensFree(ida_mem);
- }
- SUNLinSolFree(LS);
- SUNMatDestroy(J);
- N_VDestroy(avtol);
- N_VDestroy(yy);
- N_VDestroy(yp);
- N_VDestroy(id);
- if (number_of_parameters > 0) {
- N_VDestroyVectorArray(yyS, number_of_parameters);
- N_VDestroyVectorArray(ypS, number_of_parameters);
- }
-
- IDAFree(&ida_mem);
-
- return sol;
-}
-
diff --git a/pybamm/solvers/c_solvers/idaklu_casadi.hpp b/pybamm/solvers/c_solvers/idaklu_casadi.hpp
deleted file mode 100644
index 6aa655392b..0000000000
--- a/pybamm/solvers/c_solvers/idaklu_casadi.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-#ifndef PYBAMM_IDAKLU_CASADI_HPP
-#define PYBAMM_IDAKLU_CASADI_HPP
-
-#include
-
-using Function = casadi::Function;
-
-#include "solution.hpp"
-
-Solution solve_casadi(np_array t_np, np_array y0_np, np_array yp0_np,
- const Function &rhs_alg,
- const Function &jac_times_cjmass,
- const np_array_int &jac_times_cjmass_colptrs,
- const np_array_int &jac_times_cjmass_rowvals,
- const int jac_times_cjmass_nnz,
- const Function &jac_action,
- const Function &mass_action,
- const Function &sens,
- const Function &event,
- const int number_of_events,
- int use_jacobian,
- np_array rhs_alg_id,
- np_array atol_np,
- double rel_tol,
- np_array_dense inputs,
- int number_of_parameters);
-
-
-
-
-#endif // PYBAMM_IDAKLU_CASADI_HPP
diff --git a/pybamm/solvers/c_solvers/idaklu_python.cpp b/pybamm/solvers/c_solvers/idaklu_python.cpp
deleted file mode 100644
index 6e8446ace7..0000000000
--- a/pybamm/solvers/c_solvers/idaklu_python.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-
-#include "idaklu.hpp"
-
-#include "idaklu_casadi.hpp"
-#include "idaklu_python.hpp"
-
-#include
-#include
-#include
-#include
-
-#include
-
-Function generate_function(const std::string& data) {
- return Function::deserialize(data);
-}
-
-namespace py = pybind11;
-
-PYBIND11_MAKE_OPAQUE(std::vector);
-
-PYBIND11_MODULE(idaklu, m)
-{
- m.doc() = "sundials solvers"; // optional module docstring
-
- py::bind_vector>(m, "VectorNdArray");
-
- m.def("solve_python", &solve_python, "The solve function for python evaluators",
- py::arg("t"), py::arg("y0"),
- py::arg("yp0"), py::arg("res"), py::arg("jac"), py::arg("sens"),
- py::arg("get_jac_data"),
- py::arg("get_jac_row_vals"), py::arg("get_jac_col_ptr"), py::arg("nnz"),
- py::arg("events"), py::arg("number_of_events"), py::arg("use_jacobian"),
- py::arg("rhs_alg_id"), py::arg("atol"), py::arg("rtol"), py::arg("inputs"),
- py::arg("number_of_sensitivity_parameters"),
- py::return_value_policy::take_ownership);
-
- m.def("solve_casadi", &solve_casadi, "The solve function for casadi evaluators",
- py::arg("t"), py::arg("y0"), py::arg("yp0"),
- py::arg("rhs_alg"),
- py::arg("jac_times_cjmass"),
- py::arg("jac_times_cjmass_colptrs"),
- py::arg("jac_times_cjmass_rowvals"),
- py::arg("jac_times_cjmass_nnz"),
- py::arg("jac_action"),
- py::arg("mass_action"),
- py::arg("sens"),
- py::arg("events"), py::arg("number_of_events"),
- py::arg("use_jacobian"),
- py::arg("rhs_alg_id"),
- py::arg("atol"), py::arg("rtol"), py::arg("inputs"),
- py::arg("number_of_sensitivity_parameters"),
- py::return_value_policy::take_ownership);
-
- m.def("generate_function", &generate_function, "Generate a casadi function",
- py::arg("string"),
- py::return_value_policy::take_ownership);
-
- py::class_(m, "Function");
-
- py::class_(m, "solution")
- .def_readwrite("t", &Solution::t)
- .def_readwrite("y", &Solution::y)
- .def_readwrite("yS", &Solution::yS)
- .def_readwrite("flag", &Solution::flag);
-}
-
-
diff --git a/pybamm/solvers/c_solvers/idaklu_python.hpp b/pybamm/solvers/c_solvers/idaklu_python.hpp
deleted file mode 100644
index e7583da371..0000000000
--- a/pybamm/solvers/c_solvers/idaklu_python.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef PYBAMM_IDAKLU_PYTHON_HPP
-#define PYBAMM_IDAKLU_PYTHON_HPP
-
-#include /* prototypes for IDAS fcts., consts. */
-#include /* access to serial N_Vector */
-#include /* defs. of SUNRabs, SUNRexp, etc. */
-#include /* defs. of realtype, sunindextype */
-#include /* access to KLU linear solver */
-#include /* access to dense linear solver */
-#include /* access to sparse SUNMatrix */
-#include /* access to dense SUNMatrix */
-
-#include
-
-namespace py = pybind11;
-using np_array = py::array_t;
-using np_array_dense = py::array_t;
-using np_array_int = py::array_t;
-
-
-#endif // PYBAMM_IDAKLU_PYTHON_HPP
diff --git a/pybamm/solvers/casadi_algebraic_solver.py b/pybamm/solvers/casadi_algebraic_solver.py
index b13c08c27f..f726adc5da 100644
--- a/pybamm/solvers/casadi_algebraic_solver.py
+++ b/pybamm/solvers/casadi_algebraic_solver.py
@@ -87,35 +87,6 @@ def _integrate(self, model, t_eval, inputs_dict=None):
alg = model.casadi_algebraic(t_sym, y_sym, inputs)
- # Check interpolant extrapolation
- if model.interpolant_extrapolation_events_eval:
- extrap_event = [
- event(0, y0, inputs)
- for event in model.interpolant_extrapolation_events_eval
- ]
- if extrap_event:
- if (np.concatenate(extrap_event) < self.extrap_tol).any():
- extrap_event_names = []
- for event in model.events:
- if (
- event.event_type
- == pybamm.EventType.INTERPOLANT_EXTRAPOLATION
- and (
- event.expression.evaluate(
- 0, y0.full(), inputs=inputs_dict
- )
- < self.extrap_tol
- )
- ):
- extrap_event_names.append(event.name[12:])
-
- raise pybamm.SolverError(
- "CasADi solver failed because the following interpolation "
- "bounds were exceeded at the initial conditions: {}. "
- "You may need to provide additional interpolation points "
- "outside these bounds.".format(extrap_event_names)
- )
-
# Set constraints vector in the casadi format
# Constrain the unknowns. 0 (default): no constraint on ui, 1: ui >= 0.0,
# -1: ui <= 0.0, 2: ui > 0.0, -2: ui < 0.0.
diff --git a/pybamm/solvers/casadi_solver.py b/pybamm/solvers/casadi_solver.py
index 7b4ef000bf..eea853eeda 100644
--- a/pybamm/solvers/casadi_solver.py
+++ b/pybamm/solvers/casadi_solver.py
@@ -81,7 +81,7 @@ def __init__(
root_tol=1e-6,
max_step_decrease_count=5,
dt_max=None,
- extrap_tol=0,
+ extrap_tol=None,
extra_options_setup=None,
extra_options_call=None,
return_solution_if_failed_early=False,
@@ -108,9 +108,10 @@ def __init__(
self.extra_options_setup = extra_options_setup or {}
self.extra_options_call = extra_options_call or {}
- self.extrap_tol = extrap_tol
self.return_solution_if_failed_early = return_solution_if_failed_early
+ self._on_extrapolation = "error"
+
# Decide whether to perturb algebraic initial conditions, True by default for
# "safe" mode, False by default for other modes
if perturb_algebraic_initial_conditions is None:
@@ -419,7 +420,6 @@ def integer_bisect():
# Return the existing solution if no events have been triggered
if event_idx_lower is None:
# Flag "final time" for termination
- self.check_interpolant_extrapolation(model, coarse_solution)
coarse_solution.termination = "final time"
return coarse_solution
@@ -479,46 +479,11 @@ def integer_bisect():
solution.integration_time = (
coarse_solution.integration_time + dense_step_sol.integration_time
)
- self.check_interpolant_extrapolation(model, solution)
solution.closest_event_idx = closest_event_idx
return solution
- def check_interpolant_extrapolation(self, model, solution):
- # Check for interpolant extrapolations
- if model.interpolant_extrapolation_events_eval:
- inputs = casadi.vertcat(*[x for x in solution.all_inputs[-1].values()])
- extrap_event = [
- event(solution.t[-1], solution.y[:, -1], inputs)
- for event in model.interpolant_extrapolation_events_eval
- ]
-
- if extrap_event:
- if (np.concatenate(extrap_event) < self.extrap_tol).any():
- extrap_event_names = []
- for event in model.events:
- if (
- event.event_type
- == pybamm.EventType.INTERPOLANT_EXTRAPOLATION
- and (
- event.expression.evaluate(
- solution.t[-1],
- solution.y[:, -1].full(),
- inputs=inputs,
- )
- < self.extrap_tol
- ).any()
- ):
- extrap_event_names.append(event.name[12:])
-
- raise pybamm.SolverError(
- "CasADi solver failed because the following "
- "interpolation bounds were exceeded: {}. You may need "
- "to provide additional interpolation points outside "
- "these bounds.".format(extrap_event_names)
- )
-
def create_integrator(self, model, inputs, t_eval=None, use_event_switch=False):
"""
Method to create a casadi integrator object.
diff --git a/pybamm/solvers/idaklu_solver.py b/pybamm/solvers/idaklu_solver.py
index 94316e049a..8a7671f084 100644
--- a/pybamm/solvers/idaklu_solver.py
+++ b/pybamm/solvers/idaklu_solver.py
@@ -43,6 +43,41 @@ class IDAKLUSolver(pybamm.BaseSolver):
The tolerance for the initial-condition solver (default is 1e-6).
extrap_tol : float, optional
The tolerance to assert whether extrapolation occurs or not (default is 0).
+ options: dict, optional
+ Addititional options to pass to the solver, by default:
+
+ .. code-block:: python
+
+ options = {
+ # print statistics of the solver after every solve
+ "print_stats": False,
+
+ # jacobian form, can be "none", "dense", "sparse", "matrix-free"
+ "jacobian": "sparse",
+
+ # name of sundials linear solver to use options are: "SUNLinSol_KLU",
+ # "SUNLinSol_Dense", "SUNLinSol_SPBCGS",
+ # "SUNLinSol_SPFGMR", "SUNLinSol_SPGMR", "SUNLinSol_SPTFQMR",
+ "linear_solver": "SUNLinSol_KLU",
+
+ # preconditioner for iterative solvers, can be "none", "BBDP"
+ "preconditioner": "BBDP",
+
+ # for iterative linear solvers, max number of iterations
+ "linsol_max_iterations": 5,
+
+ # for iterative linear solver preconditioner, bandwidth of
+ # approximate jacobian
+ "precon_half_bandwidth": 5,
+
+ # for iterative linear solver preconditioner, bandwidth of
+ # approximate jacobian that is kept
+ "precon_half_bandwidth_keep": 5
+ }
+
+ Note: These options only have an effect if model.convert_to_format == 'casadi'
+
+
"""
def __init__(
@@ -51,9 +86,29 @@ def __init__(
atol=1e-6,
root_method="casadi",
root_tol=1e-6,
- extrap_tol=0,
+ extrap_tol=None,
+ options=None,
):
+ # set default options,
+ # (only if user does not supply)
+ default_options = {
+ "print_stats": False,
+ "jacobian": "sparse",
+ "linear_solver": "SUNLinSol_KLU",
+ "preconditioner": "BBDP",
+ "linsol_max_iterations": 5,
+ "precon_half_bandwidth": 5,
+ "precon_half_bandwidth_keep": 5,
+ }
+ if options is None:
+ options = default_options
+ else:
+ for key, value in default_options.items():
+ if key not in options:
+ options[key] = value
+ self._options = options
+
if idaklu_spec is None: # pragma: no cover
raise ImportError("KLU is not installed")
@@ -177,7 +232,10 @@ def inputs_to_dict(inputs):
if model.convert_to_format == "jax":
mass_matrix = model.mass_matrix.entries.toarray()
elif model.convert_to_format == "casadi":
- mass_matrix = casadi.DM(model.mass_matrix.entries)
+ if self._options["jacobian"] == "dense":
+ mass_matrix = casadi.DM(model.mass_matrix.entries.toarray())
+ else:
+ mass_matrix = casadi.DM(model.mass_matrix.entries)
else:
mass_matrix = model.mass_matrix.entries
@@ -195,7 +253,6 @@ def resfn(t, y, inputs, ydot):
if not model.use_jacobian:
raise pybamm.SolverError("KLU requires the Jacobian")
- use_jac = 1
# need to provide jacobian_rhs_alg - cj * mass_matrix
if model.convert_to_format == "casadi":
@@ -372,6 +429,14 @@ def sensfn(resvalS, t, y, inputs, yp, yS, ypS):
for i, dFdp_i in enumerate(dFdp.values()):
resvalS[i][:] = dFdy @ yS[i] - dFdyd @ ypS[i] + dFdp_i
+ try:
+ atol = model.atol
+ except AttributeError:
+ atol = self.atol
+
+ rtol = self.rtol
+ atol = self._check_atol_type(atol, y0.size)
+
if model.convert_to_format == "casadi":
rhs_algebraic = idaklu.generate_function(rhs_algebraic.serialize())
jac_times_cjmass = idaklu.generate_function(jac_times_cjmass.serialize())
@@ -381,6 +446,7 @@ def sensfn(resvalS, t, y, inputs, yp, yS, ypS):
rootfn = idaklu.generate_function(rootfn.serialize())
mass_action = idaklu.generate_function(mass_action.serialize())
sensfn = idaklu.generate_function(sensfn.serialize())
+
self._setup = {
"rhs_algebraic": rhs_algebraic,
"jac_times_cjmass": jac_times_cjmass,
@@ -392,11 +458,32 @@ def sensfn(resvalS, t, y, inputs, yp, yS, ypS):
"sensfn": sensfn,
"rootfn": rootfn,
"num_of_events": num_of_events,
- "use_jac": use_jac,
"ids": ids,
"sensitivity_names": sensitivity_names,
"number_of_sensitivity_parameters": number_of_sensitivity_parameters,
}
+
+ solver = idaklu.create_casadi_solver(
+ len(y0),
+ self._setup["number_of_sensitivity_parameters"],
+ self._setup["rhs_algebraic"],
+ self._setup["jac_times_cjmass"],
+ self._setup["jac_times_cjmass_colptrs"],
+ self._setup["jac_times_cjmass_rowvals"],
+ self._setup["jac_times_cjmass_nnz"],
+ self._setup["jac_rhs_algebraic_action"],
+ self._setup["mass_action"],
+ self._setup["sensfn"],
+ self._setup["rootfn"],
+ self._setup["num_of_events"],
+ self._setup["ids"],
+ atol,
+ rtol,
+ len(inputs),
+ self._options,
+ )
+
+ self._setup["solver"] = solver
else:
self._setup = {
"resfn": resfn,
@@ -404,7 +491,7 @@ def sensfn(resvalS, t, y, inputs, yp, yS, ypS):
"sensfn": sensfn,
"rootfn": rootfn,
"num_of_events": num_of_events,
- "use_jac": use_jac,
+ "use_jac": 1,
"ids": ids,
"sensitivity_names": sensitivity_names,
"number_of_sensitivity_parameters": number_of_sensitivity_parameters,
@@ -452,26 +539,11 @@ def _integrate(self, model, t_eval, inputs_dict=None):
timer = pybamm.Timer()
if model.convert_to_format == "casadi":
- sol = idaklu.solve_casadi(
+ sol = self._setup["solver"].solve(
t_eval,
y0,
ydot0,
- self._setup["rhs_algebraic"],
- self._setup["jac_times_cjmass"],
- self._setup["jac_times_cjmass_colptrs"],
- self._setup["jac_times_cjmass_rowvals"],
- self._setup["jac_times_cjmass_nnz"],
- self._setup["jac_rhs_algebraic_action"],
- self._setup["mass_action"],
- self._setup["sensfn"],
- self._setup["rootfn"],
- self._setup["num_of_events"],
- self._setup["use_jac"],
- self._setup["ids"],
- atol,
- rtol,
inputs,
- self._setup["number_of_sensitivity_parameters"],
)
else:
sol = idaklu.solve_python(
diff --git a/pybamm/solvers/jax_solver.py b/pybamm/solvers/jax_solver.py
index 1d117f0f95..b79e371c69 100644
--- a/pybamm/solvers/jax_solver.py
+++ b/pybamm/solvers/jax_solver.py
@@ -55,7 +55,7 @@ def __init__(
root_method=None,
rtol=1e-6,
atol=1e-6,
- extrap_tol=0,
+ extrap_tol=None,
extra_options=None,
):
if not pybamm.have_jax():
diff --git a/pybamm/solvers/scikits_dae_solver.py b/pybamm/solvers/scikits_dae_solver.py
index 26a4b6bf4a..054ce25300 100644
--- a/pybamm/solvers/scikits_dae_solver.py
+++ b/pybamm/solvers/scikits_dae_solver.py
@@ -54,7 +54,7 @@ def __init__(
atol=1e-6,
root_method="casadi",
root_tol=1e-6,
- extrap_tol=0,
+ extrap_tol=None,
extra_options=None,
):
if scikits_odes_spec is None:
diff --git a/pybamm/solvers/scikits_ode_solver.py b/pybamm/solvers/scikits_ode_solver.py
index 15aa6965de..327d396400 100644
--- a/pybamm/solvers/scikits_ode_solver.py
+++ b/pybamm/solvers/scikits_ode_solver.py
@@ -48,7 +48,7 @@ def __init__(
method="cvode",
rtol=1e-6,
atol=1e-6,
- extrap_tol=0,
+ extrap_tol=None,
extra_options=None,
):
if scikits_odes_spec is None: # pragma: no cover
diff --git a/pybamm/solvers/scipy_solver.py b/pybamm/solvers/scipy_solver.py
index ad7e593c8a..be228e054a 100644
--- a/pybamm/solvers/scipy_solver.py
+++ b/pybamm/solvers/scipy_solver.py
@@ -32,7 +32,7 @@ def __init__(
method="BDF",
rtol=1e-6,
atol=1e-6,
- extrap_tol=0,
+ extrap_tol=None,
extra_options=None,
):
super().__init__(
diff --git a/pybamm/solvers/solution.py b/pybamm/solvers/solution.py
index 6bcade4bde..169e58db7e 100644
--- a/pybamm/solvers/solution.py
+++ b/pybamm/solvers/solution.py
@@ -9,6 +9,7 @@
import pybamm
import pandas as pd
from scipy.io import savemat
+from functools import cached_property
class NumpyEncoder(json.JSONEncoder):
@@ -344,15 +345,9 @@ def all_models(self):
"""Model(s) used for solution"""
return self._all_models
- @property
+ @cached_property
def all_inputs_casadi(self):
- try:
- return self._all_inputs_casadi
- except AttributeError:
- self._all_inputs_casadi = [
- casadi.vertcat(*inp.values()) for inp in self.all_inputs
- ]
- return self._all_inputs_casadi
+ return [casadi.vertcat(*inp.values()) for inp in self.all_inputs]
@property
def t_event(self):
@@ -374,63 +369,55 @@ def termination(self, value):
"""Updates the reason for termination"""
self._termination = value
- @property
+ @cached_property
def first_state(self):
"""
A Solution object that only contains the first state. This is faster to evaluate
than the full solution when only the first state is needed (e.g. to initialize
a model with the solution)
"""
- try:
- return self._first_state
- except AttributeError:
- new_sol = Solution(
- self.all_ts[0][:1],
- self.all_ys[0][:, :1],
- self.all_models[:1],
- self.all_inputs[:1],
- None,
- None,
- "success",
- )
- new_sol._all_inputs_casadi = self.all_inputs_casadi[:1]
- new_sol._sub_solutions = self.sub_solutions[:1]
+ new_sol = Solution(
+ self.all_ts[0][:1],
+ self.all_ys[0][:, :1],
+ self.all_models[:1],
+ self.all_inputs[:1],
+ None,
+ None,
+ "success",
+ )
+ new_sol._all_inputs_casadi = self.all_inputs_casadi[:1]
+ new_sol._sub_solutions = self.sub_solutions[:1]
- new_sol.solve_time = 0
- new_sol.integration_time = 0
- new_sol.set_up_time = 0
+ new_sol.solve_time = 0
+ new_sol.integration_time = 0
+ new_sol.set_up_time = 0
- self._first_state = new_sol
- return self._first_state
+ return new_sol
- @property
+ @cached_property
def last_state(self):
"""
A Solution object that only contains the final state. This is faster to evaluate
than the full solution when only the final state is needed (e.g. to initialize
a model with the solution)
"""
- try:
- return self._last_state
- except AttributeError:
- new_sol = Solution(
- self.all_ts[-1][-1:],
- self.all_ys[-1][:, -1:],
- self.all_models[-1:],
- self.all_inputs[-1:],
- self.t_event,
- self.y_event,
- self.termination,
- )
- new_sol._all_inputs_casadi = self.all_inputs_casadi[-1:]
- new_sol._sub_solutions = self.sub_solutions[-1:]
+ new_sol = Solution(
+ self.all_ts[-1][-1:],
+ self.all_ys[-1][:, -1:],
+ self.all_models[-1:],
+ self.all_inputs[-1:],
+ self.t_event,
+ self.y_event,
+ self.termination,
+ )
+ new_sol._all_inputs_casadi = self.all_inputs_casadi[-1:]
+ new_sol._sub_solutions = self.sub_solutions[-1:]
- new_sol.solve_time = 0
- new_sol.integration_time = 0
- new_sol.set_up_time = 0
+ new_sol.solve_time = 0
+ new_sol.integration_time = 0
+ new_sol.set_up_time = 0
- self._last_state = new_sol
- return self._last_state
+ return new_sol
@property
def total_time(self):
diff --git a/pybamm/spatial_methods/finite_volume.py b/pybamm/spatial_methods/finite_volume.py
index 25c61c71c8..8b069ff626 100644
--- a/pybamm/spatial_methods/finite_volume.py
+++ b/pybamm/spatial_methods/finite_volume.py
@@ -57,7 +57,7 @@ def spatial_variable(self, symbol):
:class:`pybamm.Vector`
Contains the discretised spatial variable
"""
- symbol_mesh = self.mesh.combine_submeshes(*symbol.domain)
+ symbol_mesh = self.mesh[symbol.domain]
repeats = self._get_auxiliary_domain_repeats(symbol.domains)
if symbol.evaluates_on_edges("primary"):
entries = np.tile(symbol_mesh.edges, repeats)
@@ -137,7 +137,7 @@ def gradient_matrix(self, domain, domains):
The (sparse) finite volume gradient matrix for the domain
"""
# Create appropriate submesh by combining submeshes in primary domain
- submesh = self.mesh.combine_submeshes(*domain)
+ submesh = self.mesh[domain]
# Create 1D matrix using submesh
n = submesh.npts
@@ -160,7 +160,7 @@ def divergence(self, symbol, discretised_symbol, boundary_conditions):
"""Matrix-vector multiplication to implement the divergence operator.
See :meth:`pybamm.SpatialMethod.divergence`
"""
- submesh = self.mesh.combine_submeshes(*symbol.domain)
+ submesh = self.mesh[symbol.domain]
divergence_matrix = self.divergence_matrix(symbol.domains)
@@ -195,7 +195,7 @@ def divergence_matrix(self, domains):
The (sparse) finite volume divergence matrix for the domain
"""
# Create appropriate submesh by combining submeshes in domain
- submesh = self.mesh.combine_submeshes(*domains["primary"])
+ submesh = self.mesh[domains["primary"]]
# check coordinate system
if submesh.coord_sys in ["cylindrical polar", "spherical polar"]:
@@ -276,7 +276,7 @@ def definite_integral_matrix(
)
domain = child.domains[integration_dimension]
- submesh = self.mesh.combine_submeshes(*domain)
+ submesh = self.mesh[domain]
# check coordinate system
if submesh.coord_sys in ["cylindrical polar", "spherical polar"]:
@@ -291,7 +291,7 @@ def definite_integral_matrix(
if integration_dimension == "primary":
# Create appropriate submesh by combining submeshes in domain
- submesh = self.mesh.combine_submeshes(*domains["primary"])
+ submesh = self.mesh[domains["primary"]]
# Create vector of ones for primary domain submesh
@@ -306,7 +306,7 @@ def definite_integral_matrix(
matrix = kron(eye(second_dim_repeats), d_edges)
elif integration_dimension == "secondary":
# Create appropriate submesh by combining submeshes in domain
- primary_submesh = self.mesh.combine_submeshes(*domains["primary"])
+ primary_submesh = self.mesh[domains["primary"]]
# Create matrix which integrates in the secondary dimension
# Different number of edges depending on whether child evaluates on edges
@@ -348,7 +348,7 @@ def indefinite_integral(self, child, discretised_child, direction):
# the case where child evaluates on edges
# If it becomes necessary to implement this, will need to think about what
# the cylindrical/spherical polar indefinite integral should be
- submesh = self.mesh.combine_submeshes(*child.domain)
+ submesh = self.mesh[child.domain]
if submesh.coord_sys in ["cylindrical polar", "spherical polar"]:
raise NotImplementedError(
f"Indefinite integral on a {submesh.coord_sys} domain is not "
@@ -438,7 +438,7 @@ def indefinite_integral_matrix_edges(self, domains, direction):
"""
# Create appropriate submesh by combining submeshes in domain
- submesh = self.mesh.combine_submeshes(*domains["primary"])
+ submesh = self.mesh[domains["primary"]]
n = submesh.npts
second_dim_repeats = self._get_auxiliary_domain_repeats(domains)
@@ -488,7 +488,7 @@ def indefinite_integral_matrix_nodes(self, domains, direction):
"""
# Create appropriate submesh by combining submeshes in domain
- submesh = self.mesh.combine_submeshes(*domains["primary"])
+ submesh = self.mesh[domains["primary"]]
n = submesh.npts
second_dim_repeats = self._get_auxiliary_domain_repeats(domains)
@@ -518,7 +518,7 @@ def delta_function(self, symbol, discretised_symbol):
See :meth:`pybamm.SpatialMethod.delta_function`
"""
# Find the number of submeshes
- submesh = self.mesh.combine_submeshes(*symbol.domain)
+ submesh = self.mesh[symbol.domain]
prim_pts = submesh.npts
second_dim_repeats = self._get_auxiliary_domain_repeats(symbol.domains)
@@ -635,7 +635,7 @@ def add_ghost_nodes(self, symbol, discretised_symbol, bcs):
"""
# get relevant grid points
domain = symbol.domain
- submesh = self.mesh.combine_submeshes(*domain)
+ submesh = self.mesh[domain]
# Prepare sizes and empty bcs_vector
n = submesh.npts
@@ -757,7 +757,7 @@ def add_neumann_values(self, symbol, discretised_gradient, bcs, domain):
"""
# get relevant grid points
- submesh = self.mesh.combine_submeshes(*domain)
+ submesh = self.mesh[domain]
# Prepare sizes and empty bcs_vector
n = submesh.npts - 1
@@ -849,7 +849,7 @@ def boundary_value_or_flux(self, symbol, discretised_child, bcs=None):
"""
# Find the number of submeshes
- submesh = self.mesh.combine_submeshes(*discretised_child.domain)
+ submesh = self.mesh[discretised_child.domain]
prim_pts = submesh.npts
repeats = self._get_auxiliary_domain_repeats(discretised_child.domains)
@@ -1136,7 +1136,7 @@ def concatenation(self, disc_children):
See :meth:`pybamm.SpatialMethod.concatenation`
"""
for idx, child in enumerate(disc_children):
- submesh = self.mesh.combine_submeshes(*child.domain)
+ submesh = self.mesh[child.domain]
repeats = self._get_auxiliary_domain_repeats(child.domains)
n_nodes = len(submesh.nodes) * repeats
n_edges = len(submesh.edges) * repeats
@@ -1203,7 +1203,7 @@ def shift(self, discretised_symbol, shift_key, method):
def arithmetic_mean(array):
"""Calculate the arithmetic mean of an array using matrix multiplication"""
# Create appropriate submesh by combining submeshes in domain
- submesh = self.mesh.combine_submeshes(*array.domain)
+ submesh = self.mesh[array.domain]
# Create 1D matrix using submesh
n = submesh.npts
@@ -1261,7 +1261,7 @@ def harmonic_mean(array):
approximation to the diffusion equation." (2012).
"""
# Create appropriate submesh by combining submeshes in domain
- submesh = self.mesh.combine_submeshes(*array.domain)
+ submesh = self.mesh[array.domain]
# Get second dimension length for use later
second_dim_repeats = self._get_auxiliary_domain_repeats(
@@ -1398,7 +1398,7 @@ def upwind_or_downwind(self, symbol, discretised_symbol, bcs, direction):
direction : str
Direction in which to apply the operator (upwind or downwind)
"""
- submesh = self.mesh.combine_submeshes(*symbol.domain)
+ submesh = self.mesh[symbol.domain]
n = submesh.npts
if symbol not in bcs:
diff --git a/pybamm/spatial_methods/spatial_method.py b/pybamm/spatial_methods/spatial_method.py
index 267bdda3e8..6826414bab 100644
--- a/pybamm/spatial_methods/spatial_method.py
+++ b/pybamm/spatial_methods/spatial_method.py
@@ -47,7 +47,7 @@ def _get_auxiliary_domain_repeats(self, domains):
mesh_pts = 1
for level, dom in domains.items():
if level != "primary" and dom != []:
- mesh_pts *= self.mesh.combine_submeshes(*dom).npts
+ mesh_pts *= self.mesh[dom].npts
return mesh_pts
@property
@@ -70,7 +70,7 @@ def spatial_variable(self, symbol):
:class:`pybamm.Vector`
Contains the discretised spatial variable
"""
- symbol_mesh = self.mesh.combine_submeshes(*symbol.domain)
+ symbol_mesh = self.mesh[symbol.domain]
repeats = self._get_auxiliary_domain_repeats(symbol.domains)
if symbol.evaluates_on_edges("primary"):
entries = np.tile(symbol_mesh.edges, repeats)
@@ -99,7 +99,7 @@ def broadcast(self, symbol, domains, broadcast_type):
The discretised symbol of the correct size for the spatial method
"""
domain = domains["primary"]
- primary_domain_size = self.mesh.combine_submeshes(*domain).npts
+ primary_domain_size = self.mesh[domain].npts
secondary_domain_size = self._get_auxiliary_domain_repeats(
{"secondary": domains["secondary"]}
)
@@ -403,8 +403,8 @@ def mass_matrix(self, symbol, boundary_conditions):
# to account for Dirichlet boundary conditions. Here, we just have the default
# behaviour that the mass matrix is the identity.
- # Create appropriate submesh by combining submeshes in domain
- submesh = self.mesh.combine_submeshes(*symbol.domain)
+ # Get submesh
+ submesh = self.mesh[symbol.domain]
# Get number of points in primary dimension
n = submesh.npts
diff --git a/pybamm/spatial_methods/spectral_volume.py b/pybamm/spatial_methods/spectral_volume.py
index dd45fbaf2c..17fe70e040 100644
--- a/pybamm/spatial_methods/spectral_volume.py
+++ b/pybamm/spatial_methods/spectral_volume.py
@@ -160,8 +160,7 @@ def cv_boundary_reconstruction_matrix(self, domains):
:class:`pybamm.Matrix`
The (sparse) CV reconstruction matrix for the domain
"""
- # Create appropriate submesh by combining submeshes in domain
- submesh = self.mesh.combine_submeshes(*domains["primary"])
+ submesh = self.mesh[domains["primary"]]
# Obtain the basic reconstruction matrix.
recon_sub_matrix = self.cv_boundary_reconstruction_sub_matrix()
@@ -316,8 +315,7 @@ def gradient_matrix(self, domain, domains):
:class:`pybamm.Matrix`
The (sparse) Spectral Volume gradient matrix for the domain
"""
- # Create appropriate submesh by combining submeshes in domain
- submesh = self.mesh.combine_submeshes(*domain)
+ submesh = self.mesh[domain]
# Obtain the Chebyshev differentiation matrix.
# Flip it, since it is defined for the Chebyshev
@@ -400,8 +398,7 @@ def penalty_matrix(self, domains):
:class:`pybamm.Matrix`
The (sparse) Spectral Volume penalty matrix for the domain
"""
- # Create appropriate submesh by combining submeshes in domain
- submesh = self.mesh.combine_submeshes(*domains["primary"])
+ submesh = self.mesh[domains["primary"]]
# Create 1D matrix using submesh
n = submesh.npts
@@ -523,7 +520,7 @@ def replace_dirichlet_values(self, symbol, discretised_symbol, bcs):
"""
# get relevant grid points
domain = symbol.domain
- submesh = self.mesh.combine_submeshes(*domain)
+ submesh = self.mesh[domain]
# Prepare sizes
n = (submesh.npts // self.order) * (self.order + 1)
@@ -617,7 +614,7 @@ def replace_neumann_values(self, symbol, discretised_gradient, bcs):
"""
# get relevant grid points
domain = symbol.domain
- submesh = self.mesh.combine_submeshes(*domain)
+ submesh = self.mesh[domain]
# Prepare sizes
n = submesh.npts + 1
diff --git a/pybamm/version.py b/pybamm/version.py
index 943ea9fb60..969639bd2c 100644
--- a/pybamm/version.py
+++ b/pybamm/version.py
@@ -1 +1 @@
-__version__ = "22.10.post1"
+__version__ = "22.11"
diff --git a/setup.py b/setup.py
index e044444a7b..479fdfabd6 100644
--- a/setup.py
+++ b/setup.py
@@ -221,7 +221,7 @@ def compile_KLU():
"pybamm_install_odes = pybamm.install_odes:main",
"pybamm_install_jax = pybamm.util:install_jax",
],
- "pybamm_parameter_set": [
+ "pybamm_parameter_sets": [
"Sulzer2019 = pybamm.input.parameters.lead_acid.Sulzer2019:get_parameter_values", # noqa: E501
"Ai2020 = pybamm.input.parameters.lithium_ion.Ai2020:get_parameter_values", # noqa: E501
"Chen2020 = pybamm.input.parameters.lithium_ion.Chen2020:get_parameter_values", # noqa: E501
@@ -235,6 +235,7 @@ def compile_KLU():
"Prada2013 = pybamm.input.parameters.lithium_ion.Prada2013:get_parameter_values", # noqa: E501
"Ramadass2004 = pybamm.input.parameters.lithium_ion.Ramadass2004:get_parameter_values", # noqa: E501
"Xu2019 = pybamm.input.parameters.lithium_ion.Xu2019:get_parameter_values", # noqa: E501
+ "ECM_Example = pybamm.input.parameters.ecm.example_set:get_parameter_values", # noqa: E501
],
},
)
diff --git a/tests/integration/test_models/standard_model_tests.py b/tests/integration/test_models/standard_model_tests.py
index 9d8040e516..86c9ab909e 100644
--- a/tests/integration/test_models/standard_model_tests.py
+++ b/tests/integration/test_models/standard_model_tests.py
@@ -123,14 +123,10 @@ def test_sensitivities(
output_sens = self.solution[output_name].sensitivities[param_name]
# check via finite differencing
- h = 1e-6 * param_value
+ h = 1e-4 * param_value
inputs_plus = {param_name: (param_value + 0.5 * h)}
inputs_neg = {param_name: (param_value - 0.5 * h)}
- sol_plus = self.solver.solve(
- self.model,
- t_eval,
- inputs=inputs_plus,
- )
+ sol_plus = self.solver.solve(self.model, t_eval, inputs=inputs_plus)
output_plus = sol_plus[output_name](t=t_eval)
sol_neg = self.solver.solve(self.model, t_eval, inputs=inputs_neg)
output_neg = sol_neg[output_name](t=t_eval)
diff --git a/tests/integration/test_models/standard_output_tests.py b/tests/integration/test_models/standard_output_tests.py
index 641caec961..7add30a0e5 100644
--- a/tests/integration/test_models/standard_output_tests.py
+++ b/tests/integration/test_models/standard_output_tests.py
@@ -83,11 +83,11 @@ def __init__(self, model, param, disc, solution, operating_condition):
self.x_s = disc.mesh["separator"].nodes * L_x
self.x_p = disc.mesh["positive electrode"].nodes * L_x
whole_cell = ["negative electrode", "separator", "positive electrode"]
- self.x = disc.mesh.combine_submeshes(*whole_cell).nodes * L_x
+ self.x = disc.mesh[whole_cell].nodes * L_x
self.x_n_edge = disc.mesh["negative electrode"].edges * L_x
self.x_s_edge = disc.mesh["separator"].edges * L_x
self.x_p_edge = disc.mesh["positive electrode"].edges * L_x
- self.x_edge = disc.mesh.combine_submeshes(*whole_cell).edges * L_x
+ self.x_edge = disc.mesh[whole_cell].edges * L_x
if isinstance(self.model, pybamm.lithium_ion.BaseModel):
R_n_typ = model.length_scales["negative particle"].evaluate()
@@ -550,7 +550,7 @@ def test_splitting(self):
(self.c_e_n(t, x_n), self.c_e_s(t, x_s), self.c_e_p(t, x_p)), axis=0
)
- np.testing.assert_array_equal(self.c_e(t, x), c_e_combined)
+ np.testing.assert_array_almost_equal(self.c_e(t, x), c_e_combined, decimal=14)
def test_all(self):
self.test_concentration_limit()
diff --git a/tests/integration/test_models/test_full_battery_models/test_equivalent_circuit/__init__.py b/tests/integration/test_models/test_full_battery_models/test_equivalent_circuit/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/tests/integration/test_models/test_full_battery_models/test_equivalent_circuit/test_thevenin.py b/tests/integration/test_models/test_full_battery_models/test_equivalent_circuit/test_thevenin.py
new file mode 100644
index 0000000000..fee42ed611
--- /dev/null
+++ b/tests/integration/test_models/test_full_battery_models/test_equivalent_circuit/test_thevenin.py
@@ -0,0 +1,19 @@
+import pybamm
+import unittest
+import tests
+
+
+class TestThevenin(unittest.TestCase):
+ def test_basic_processing(self):
+ model = pybamm.equivalent_circuit.Thevenin()
+ modeltest = tests.StandardModelTest(model)
+ modeltest.test_all()
+
+
+if __name__ == "__main__":
+ print("Add -v for more debug output")
+ import sys
+
+ if "-v" in sys.argv:
+ debug = True
+ unittest.main()
diff --git a/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_asymptotics_convergence.py b/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_asymptotics_convergence.py
index 779606dece..14c4cb61be 100644
--- a/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_asymptotics_convergence.py
+++ b/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_asymptotics_convergence.py
@@ -15,14 +15,12 @@ def test_leading_order_convergence(self):
"""
# Create models
leading_order_model = pybamm.lead_acid.LOQS()
- composite_model = pybamm.lead_acid.Composite()
full_model = pybamm.lead_acid.Full()
# Same parameters, same geometry
parameter_values = full_model.default_parameter_values
parameter_values["Current function [A]"] = "[input]"
parameter_values.process_model(leading_order_model)
- parameter_values.process_model(composite_model)
parameter_values.process_model(full_model)
geometry = full_model.default_geometry
parameter_values.process_geometry(geometry)
@@ -38,8 +36,6 @@ def test_leading_order_convergence(self):
}
loqs_disc = pybamm.Discretisation(mesh, spatial_methods)
loqs_disc.process_model(leading_order_model)
- comp_disc = pybamm.Discretisation(mesh, spatial_methods)
- comp_disc.process_model(composite_model)
full_disc = pybamm.Discretisation(mesh, spatial_methods)
full_disc.process_model(full_model)
@@ -53,40 +49,28 @@ def get_max_error(current):
solution_loqs = solver.solve(
leading_order_model, t_eval, inputs={"Current function [A]": current}
)
- solution_comp = solver.solve(
- composite_model, t_eval, inputs={"Current function [A]": current}
- )
solution_full = solver.solve(
full_model, t_eval, inputs={"Current function [A]": current}
)
# Post-process variables
voltage_loqs = solution_loqs["Terminal voltage"]
- voltage_comp = solution_comp["Terminal voltage"]
voltage_full = solution_full["Terminal voltage"]
# Compare
t_loqs = solution_loqs.t
- t_comp = solution_comp.t
t_full = solution_full.t
- t = t_full[: np.min([len(t_loqs), len(t_comp), len(t_full)])]
+ t = t_full[: np.min([len(t_loqs), len(t_full)])]
loqs_error = np.max(np.abs(voltage_loqs(t) - voltage_full(t)))
- comp_error = np.max(np.abs(voltage_comp(t) - voltage_full(t)))
- return (loqs_error, comp_error)
+ return loqs_error
# Get errors
currents = 0.5 / (2 ** np.arange(3))
- errs = np.array([get_max_error(current) for current in currents])
- loqs_errs, comp_errs = [np.array(err) for err in zip(*errs)]
- # Get rates: expect linear convergence for loqs, quadratic for composite
+ loqs_errs = np.array([get_max_error(current) for current in currents])
+ # Get rates: expect linear convergence for loqs
loqs_rates = np.log2(loqs_errs[:-1] / loqs_errs[1:])
np.testing.assert_array_less(0.99 * np.ones_like(loqs_rates), loqs_rates)
- # Composite not converging as expected
- comp_rates = np.log2(comp_errs[:-1] / comp_errs[1:])
- np.testing.assert_array_less(0.99 * np.ones_like(comp_rates), comp_rates)
- # Check composite more accurate than loqs
- np.testing.assert_array_less(comp_errs, loqs_errs)
if __name__ == "__main__":
diff --git a/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_compare_outputs.py b/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_compare_outputs.py
index 9682696ce6..c1008b53e0 100644
--- a/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_compare_outputs.py
+++ b/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_compare_outputs.py
@@ -13,11 +13,7 @@ def test_compare_averages_asymptotics(self):
Check that the average value of certain variables is constant across submodels
"""
# load models
- models = [
- pybamm.lead_acid.LOQS(),
- pybamm.lead_acid.Composite(),
- pybamm.lead_acid.Full(),
- ]
+ models = [pybamm.lead_acid.LOQS(), pybamm.lead_acid.Full()]
# load parameter values (same for all models)
param = models[0].default_parameter_values
@@ -57,7 +53,6 @@ def test_compare_outputs_surface_form(self):
]
model_combos = [
([pybamm.lead_acid.LOQS(opt) for opt in options]),
- ([pybamm.lead_acid.Composite(opt) for opt in options]),
([pybamm.lead_acid.Full(opt) for opt in options]),
]
diff --git a/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_composite.py b/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_composite.py
deleted file mode 100644
index 4bc6b80896..0000000000
--- a/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_composite.py
+++ /dev/null
@@ -1,108 +0,0 @@
-#
-# Tests for the lead-acid composite model
-#
-import pybamm
-import tests
-
-import unittest
-import numpy as np
-
-
-class TestLeadAcidComposite(unittest.TestCase):
- def test_basic_processing(self):
- model = pybamm.lead_acid.Composite()
- param = model.default_parameter_values
- param.update({"Current function [A]": 1})
- modeltest = tests.StandardModelTest(model, parameter_values=param)
- modeltest.test_all()
-
- def test_basic_processing_with_convection(self):
- model = pybamm.lead_acid.Composite()
- param = model.default_parameter_values
- param.update({"Current function [A]": 1})
- modeltest = tests.StandardModelTest(model, parameter_values=param)
- modeltest.test_all()
-
- def test_optimisations(self):
- model = pybamm.lead_acid.Composite()
- optimtest = tests.OptimisationsTest(model)
-
- original = optimtest.evaluate_model()
- to_python = optimtest.evaluate_model(to_python=True)
- np.testing.assert_array_almost_equal(original, to_python)
-
- def test_set_up(self):
- model = pybamm.lead_acid.Composite()
- optimtest = tests.OptimisationsTest(model)
- optimtest.set_up_model(to_python=True)
- optimtest.set_up_model(to_python=False)
-
- def test_basic_processing_1plus1D(self):
- options = {"current collector": "potential pair", "dimensionality": 1}
- model = pybamm.lead_acid.Composite(options)
- var_pts = {"x_n": 5, "x_s": 5, "x_p": 5, "y": 5, "z": 5}
- modeltest = tests.StandardModelTest(model, var_pts=var_pts)
- modeltest.test_all(skip_output_tests=True)
-
- options = {
- "current collector": "potential pair",
- "dimensionality": 1,
- "convection": "full transverse",
- }
- model = pybamm.lead_acid.Composite(options)
- modeltest = tests.StandardModelTest(model, var_pts=var_pts)
- modeltest.test_all(skip_output_tests=True)
-
-
-class TestLeadAcidCompositeSurfaceForm(unittest.TestCase):
- def test_basic_processing_differential(self):
- options = {"surface form": "differential"}
- model = pybamm.lead_acid.Composite(options)
- param = model.default_parameter_values
- param.update({"Current function [A]": 1})
- modeltest = tests.StandardModelTest(model, parameter_values=param)
- modeltest.test_all()
-
- def test_basic_processing_algebraic(self):
- options = {"surface form": "algebraic"}
- model = pybamm.lead_acid.Composite(options)
- param = model.default_parameter_values
- param.update({"Current function [A]": 1})
- modeltest = tests.StandardModelTest(model, parameter_values=param)
- modeltest.test_all() # solver=pybamm.CasadiSolver())
-
- # def test_thermal(self):
- # options = {"thermal": "lumped"}
- # model = pybamm.lead_acid.Composite(options)
- # modeltest = tests.StandardModelTest(model)
- # modeltest.test_all()
-
- # options = {"thermal": "x-full"}
- # model = pybamm.lead_acid.Composite(options)
- # modeltest = tests.StandardModelTest(model)
- # modeltest.test_all()
-
-
-class TestLeadAcidCompositeExtended(unittest.TestCase):
- def test_basic_processing(self):
- model = pybamm.lead_acid.CompositeExtended()
- param = model.default_parameter_values
- param.update({"Current function [A]": 1})
- modeltest = tests.StandardModelTest(model, parameter_values=param)
- modeltest.test_all()
-
- def test_basic_processing_averaged(self):
- model = pybamm.lead_acid.CompositeAverageCorrection()
- param = model.default_parameter_values
- param.update({"Current function [A]": 1})
- modeltest = tests.StandardModelTest(model, parameter_values=param)
- modeltest.test_all()
-
-
-if __name__ == "__main__":
- print("Add -v for more debug output")
- import sys
-
- if "-v" in sys.argv:
- debug = True
- unittest.main()
diff --git a/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_foqs.py b/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_foqs.py
deleted file mode 100644
index a92dcfb26a..0000000000
--- a/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_foqs.py
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# Tests for the lead-acid FOQS model
-#
-import pybamm
-import tests
-
-import unittest
-import numpy as np
-
-
-class TestLeadAcidFOQS(unittest.TestCase):
- def test_basic_processing(self):
- model = pybamm.lead_acid.FOQS()
- param = model.default_parameter_values
- param.update({"Current function [A]": 1})
- modeltest = tests.StandardModelTest(model, parameter_values=param)
- modeltest.test_all()
-
- def test_basic_processing_with_convection(self):
- options = {"convection": "uniform transverse"}
- model = pybamm.lead_acid.FOQS(options)
- param = model.default_parameter_values
- param.update({"Current function [A]": 1})
- modeltest = tests.StandardModelTest(model, parameter_values=param)
- modeltest.test_all()
-
- def test_optimisations(self):
- model = pybamm.lead_acid.FOQS()
- optimtest = tests.OptimisationsTest(model)
-
- original = optimtest.evaluate_model()
- to_python = optimtest.evaluate_model(to_python=True)
- np.testing.assert_array_almost_equal(original, to_python)
-
- def test_set_up(self):
- model = pybamm.lead_acid.FOQS()
- optimtest = tests.OptimisationsTest(model)
- optimtest.set_up_model(to_python=True)
- optimtest.set_up_model(to_python=False)
-
-
-class TestLeadAcidFOQSSurfaceForm(unittest.TestCase):
- def test_basic_processing_differential(self):
- options = {"surface form": "differential"}
- model = pybamm.lead_acid.FOQS(options)
- param = model.default_parameter_values
- param.update({"Current function [A]": 1})
- modeltest = tests.StandardModelTest(model, parameter_values=param)
- modeltest.test_all()
-
- def test_basic_processing_algebraic(self):
- options = {"surface form": "algebraic"}
- model = pybamm.lead_acid.FOQS(options)
- param = model.default_parameter_values
- param.update({"Current function [A]": 1})
- modeltest = tests.StandardModelTest(model, parameter_values=param)
- modeltest.test_all()
-
-
-if __name__ == "__main__":
- print("Add -v for more debug output")
- import sys
-
- if "-v" in sys.argv:
- debug = True
- unittest.main()
diff --git a/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_side_reactions/test_composite_side_reactions.py b/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_side_reactions/test_composite_side_reactions.py
deleted file mode 100644
index a6b7397fa7..0000000000
--- a/tests/integration/test_models/test_full_battery_models/test_lead_acid/test_side_reactions/test_composite_side_reactions.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Tests for the lead-acid Full model
-#
-import pybamm
-import tests
-
-import unittest
-
-
-class TestLeadAcidCompositeSideReactions(unittest.TestCase):
- def test_basic_processing_differential(self):
- options = {"hydrolysis": "true", "surface form": "differential"}
- model = pybamm.lead_acid.Composite(options)
- modeltest = tests.StandardModelTest(model)
- modeltest.test_all(skip_output_tests=True)
-
- def test_basic_processing_algebraic(self):
- options = {"hydrolysis": "true", "surface form": "algebraic"}
- model = pybamm.lead_acid.Composite(options)
- modeltest = tests.StandardModelTest(model)
- modeltest.test_all(skip_output_tests=True)
-
- def test_basic_processing_charge(self):
- options = {"hydrolysis": "true", "surface form": "differential"}
- model = pybamm.lead_acid.Composite(options)
- parameter_values = model.default_parameter_values
- parameter_values.update(
- {"Current function [A]": -1, "Initial State of Charge": 0.5}
- )
- modeltest = tests.StandardModelTest(model, parameter_values=parameter_values)
- modeltest.test_all(skip_output_tests=True)
-
- def test_basic_processing_zero_current(self):
- options = {"hydrolysis": "true", "surface form": "differential"}
- model = pybamm.lead_acid.Composite(options)
- parameter_values = model.default_parameter_values
- parameter_values.update({"Current function [A]": 0})
- modeltest = tests.StandardModelTest(model, parameter_values=parameter_values)
- modeltest.test_all(skip_output_tests=True)
-
- def test_basic_processing_extended_differential(self):
- options = {"hydrolysis": "true", "surface form": "differential"}
- model = pybamm.lead_acid.CompositeExtended(options)
- modeltest = tests.StandardModelTest(model)
- modeltest.test_all(skip_output_tests=True)
-
-
-if __name__ == "__main__":
- print("Add -v for more debug output")
- import sys
-
- if "-v" in sys.argv:
- debug = True
- unittest.main()
diff --git a/tests/integration/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_half_cell_tests.py b/tests/integration/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_half_cell_tests.py
index c8055ebcc9..0c203c9fc7 100644
--- a/tests/integration/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_half_cell_tests.py
+++ b/tests/integration/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_half_cell_tests.py
@@ -53,6 +53,15 @@ def test_sei_reaction_limited(self):
options = {"SEI": "reaction limited"}
self.run_basic_processing_test(options)
+ def test_sei_asymmetric_reaction_limited(self):
+ options = {"SEI": "reaction limited (asymmetric)"}
+ parameter_values = pybamm.ParameterValues("Xu2019")
+ parameter_values.update(
+ {"SEI growth transfer coefficient": 0.2},
+ check_already_exists=False,
+ )
+ self.run_basic_processing_test(options, parameter_values=parameter_values)
+
def test_sei_solvent_diffusion_limited(self):
options = {"SEI": "solvent-diffusion limited"}
self.run_basic_processing_test(options)
@@ -69,6 +78,15 @@ def test_sei_ec_reaction_limited(self):
options = {"SEI": "ec reaction limited"}
self.run_basic_processing_test(options)
+ def test_sei_asymmetric_ec_reaction_limited(self):
+ options = {"SEI": "ec reaction limited (asymmetric)"}
+ parameter_values = pybamm.ParameterValues("Xu2019")
+ parameter_values.update(
+ {"SEI growth transfer coefficient": 0.2},
+ check_already_exists=False,
+ )
+ self.run_basic_processing_test(options, parameter_values=parameter_values)
+
def test_constant_utilisation(self):
options = {"interface utilisation": "constant"}
parameter_values = pybamm.ParameterValues("Xu2019")
diff --git a/tests/integration/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_tests.py b/tests/integration/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_tests.py
index 6d46766220..33766b4855 100644
--- a/tests/integration/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_tests.py
+++ b/tests/integration/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_tests.py
@@ -169,6 +169,15 @@ def test_sei_reaction_limited(self):
options = {"SEI": "reaction limited"}
self.run_basic_processing_test(options)
+ def test_sei_asymmetric_reaction_limited(self):
+ options = {"SEI": "reaction limited (asymmetric)"}
+ parameter_values = pybamm.ParameterValues("Marquis2019")
+ parameter_values.update(
+ {"SEI growth transfer coefficient": 0.2},
+ check_already_exists=False,
+ )
+ self.run_basic_processing_test(options, parameter_values=parameter_values)
+
def test_sei_solvent_diffusion_limited(self):
options = {"SEI": "solvent-diffusion limited"}
self.run_basic_processing_test(options)
@@ -182,9 +191,24 @@ def test_sei_interstitial_diffusion_limited(self):
self.run_basic_processing_test(options)
def test_sei_ec_reaction_limited(self):
- options = {"SEI": "ec reaction limited", "SEI porosity change": "true"}
+ options = {
+ "SEI": "ec reaction limited",
+ "SEI porosity change": "true",
+ }
self.run_basic_processing_test(options)
+ def test_sei_asymmetric_ec_reaction_limited(self):
+ options = {
+ "SEI": "ec reaction limited (asymmetric)",
+ "SEI porosity change": "true",
+ }
+ parameter_values = pybamm.ParameterValues("Marquis2019")
+ parameter_values.update(
+ {"SEI growth transfer coefficient": 0.2},
+ check_already_exists=False,
+ )
+ self.run_basic_processing_test(options, parameter_values=parameter_values)
+
def test_loss_active_material_stress_negative(self):
options = {"loss of active material": ("none", "stress-driven")}
parameter_values = pybamm.ParameterValues("Ai2020")
diff --git a/tests/integration/test_models/test_full_battery_models/test_lithium_ion/test_initial_soc.py b/tests/integration/test_models/test_full_battery_models/test_lithium_ion/test_initial_soc.py
new file mode 100644
index 0000000000..9cdfb4c8a6
--- /dev/null
+++ b/tests/integration/test_models/test_full_battery_models/test_lithium_ion/test_initial_soc.py
@@ -0,0 +1,33 @@
+#
+# Test edge cases for initial SOC
+#
+import pybamm
+import unittest
+
+
+class TestInitialSOC(unittest.TestCase):
+ def test_interpolant_parameter_sets(self):
+ model = pybamm.lithium_ion.SPM()
+ params = [
+ "Ai2020",
+ "Chen2020",
+ "Ecker2015",
+ "Marquis2019",
+ "Mohtat2020",
+ "OKane2022",
+ "ORegan2022",
+ ]
+ for param in params:
+ with self.subTest(param=param):
+ parameter_values = pybamm.ParameterValues(param)
+ sim = pybamm.Simulation(model=model, parameter_values=parameter_values)
+ sim.solve([0, 3600], initial_soc=0.2)
+
+
+if __name__ == "__main__":
+ print("Add -v for more debug output")
+ import sys
+
+ if "-v" in sys.argv:
+ debug = True
+ unittest.main()
diff --git a/tests/integration/test_models/test_submodels/test_interface/test_butler_volmer.py b/tests/integration/test_models/test_submodels/test_interface/test_butler_volmer.py
index 8ee3e1472a..b2a6966348 100644
--- a/tests/integration/test_models/test_submodels/test_interface/test_butler_volmer.py
+++ b/tests/integration/test_models/test_submodels/test_interface/test_butler_volmer.py
@@ -223,7 +223,7 @@ def test_discretisation(self):
# test concatenated butler-volmer
whole_cell = ["negative electrode", "separator", "positive electrode"]
- whole_cell_mesh = disc.mesh.combine_submeshes(*whole_cell)
+ whole_cell_mesh = disc.mesh[whole_cell]
self.assertEqual(j.evaluate(None, y).shape, (whole_cell_mesh.npts, 1))
def test_diff_c_e_lead_acid(self):
diff --git a/tests/integration/test_models/test_submodels/test_interface/test_lead_acid.py b/tests/integration/test_models/test_submodels/test_interface/test_lead_acid.py
index 54bd7c678b..de96380a15 100644
--- a/tests/integration/test_models/test_submodels/test_interface/test_lead_acid.py
+++ b/tests/integration/test_models/test_submodels/test_interface/test_lead_acid.py
@@ -83,7 +83,7 @@ def test_discretisation_main_reaction(self):
# Test
whole_cell = ["negative electrode", "separator", "positive electrode"]
- submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
y = submesh.nodes**2
# should evaluate to vectors with the right shape
self.assertEqual(j0_n.evaluate(y=y).shape, (mesh["negative electrode"].npts, 1))
diff --git a/tests/integration/test_models/test_submodels/test_interface/test_lithium_ion.py b/tests/integration/test_models/test_submodels/test_interface/test_lithium_ion.py
index fff744c42b..c1970d527e 100644
--- a/tests/integration/test_models/test_submodels/test_interface/test_lithium_ion.py
+++ b/tests/integration/test_models/test_submodels/test_interface/test_lithium_ion.py
@@ -97,7 +97,7 @@ def test_discretisation_lithium_ion(self):
# Test
whole_cell = ["negative electrode", "separator", "positive electrode"]
- submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
y = np.concatenate(
[
submesh.nodes**2,
diff --git a/tests/integration/test_spatial_methods/test_finite_volume.py b/tests/integration/test_spatial_methods/test_finite_volume.py
index 67cf28ceaf..962e61804a 100644
--- a/tests/integration/test_spatial_methods/test_finite_volume.py
+++ b/tests/integration/test_spatial_methods/test_finite_volume.py
@@ -54,11 +54,11 @@ def get_error(n):
disc.set_variable_slices([var])
# Define exact solutions
- combined_submesh = mesh.combine_submeshes(*whole_cell)
- x = combined_submesh.nodes
+ submesh = mesh[whole_cell]
+ x = submesh.nodes
y = np.sin(x) ** 2
# var = sin(x)**2 --> dvardx = 2*sin(x)*cos(x)
- x_edge = combined_submesh.edges
+ x_edge = submesh.edges
grad_exact = 2 * np.sin(x_edge) * np.cos(x_edge)
# Discretise and evaluate
@@ -90,8 +90,8 @@ def get_error(n):
# create mesh and discretisation
mesh = get_mesh_for_testing(n)
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
- x = combined_submesh.nodes
+ submesh = mesh[whole_cell]
+ x = submesh.nodes
x_edge = pybamm.standard_spatial_vars.x_edge
# Define flux and eqn
diff --git a/tests/integration/test_spatial_methods/test_spectral_volume.py b/tests/integration/test_spatial_methods/test_spectral_volume.py
index a9e10ea78a..5a3ef6e88a 100644
--- a/tests/integration/test_spatial_methods/test_spectral_volume.py
+++ b/tests/integration/test_spatial_methods/test_spectral_volume.py
@@ -116,11 +116,11 @@ def get_error(n):
disc.set_variable_slices([var])
# Define exact solutions
- combined_submesh = mesh.combine_submeshes(*whole_cell)
- x = combined_submesh.nodes
+ submesh = mesh[whole_cell]
+ x = submesh.nodes
y = np.sin(x) ** 2
# var = sin(x)**2 --> dvardx = 2*sin(x)*cos(x)
- x_edge = combined_submesh.edges
+ x_edge = submesh.edges
grad_exact = 2 * np.sin(x_edge) * np.cos(x_edge)
# Discretise and evaluate
@@ -154,8 +154,8 @@ def get_error(n):
# create mesh and discretisation
mesh = get_mesh_for_testing(n)
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
- x = combined_submesh.nodes
+ submesh = mesh[whole_cell]
+ x = submesh.nodes
x_edge = pybamm.standard_spatial_vars.x_edge
# Define flux and bcs
diff --git a/tests/unit/test_citations.py b/tests/unit/test_citations.py
index ebb2a01538..015a20bfde 100644
--- a/tests/unit/test_citations.py
+++ b/tests/unit/test_citations.py
@@ -132,14 +132,6 @@ def test_sulzer_2019(self):
pybamm.lead_acid.LOQS(build=False)
self.assertIn("Sulzer2019asymptotic", citations._papers_to_cite)
- citations._reset()
- pybamm.lead_acid.FOQS(build=False)
- self.assertIn("Sulzer2019asymptotic", citations._papers_to_cite)
-
- citations._reset()
- pybamm.lead_acid.Composite(build=False)
- self.assertIn("Sulzer2019asymptotic", citations._papers_to_cite)
-
citations._reset()
pybamm.lead_acid.Full(build=False)
self.assertIn("Sulzer2019physical", citations._papers_to_cite)
diff --git a/tests/unit/test_discretisations/test_discretisation.py b/tests/unit/test_discretisations/test_discretisation.py
index 841296614e..01dd02a2b4 100644
--- a/tests/unit/test_discretisations/test_discretisation.py
+++ b/tests/unit/test_discretisations/test_discretisation.py
@@ -258,9 +258,9 @@ def test_discretise_slicing(self):
self.assertEqual(disc.y_slices, {c: [slice(0, 100)]})
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
- c_true = combined_submesh.nodes**2
+ c_true = submesh.nodes**2
y = c_true
np.testing.assert_array_equal(y[disc.y_slices[c][0]], c_true)
@@ -280,7 +280,7 @@ def test_discretise_slicing(self):
np.testing.assert_array_equal(
disc.bounds[1], [np.inf] * 100 + [1] * 100 + [np.inf] * 40
)
- d_true = 4 * combined_submesh.nodes
+ d_true = 4 * submesh.nodes
jn_true = mesh["negative electrode"].nodes ** 3
y = np.concatenate([c_true, d_true, jn_true])
np.testing.assert_array_equal(y[disc.y_slices[c][0]], c_true)
@@ -310,7 +310,7 @@ def test_discretise_slicing(self):
np.testing.assert_array_equal(
disc.bounds[1], [np.inf] * 100 + [1] * 100 + [np.inf] * 100
)
- d_true = 4 * combined_submesh.nodes
+ d_true = 4 * submesh.nodes
jn_true = mesh["negative electrode"].nodes ** 3
y = np.concatenate([c_true, d_true, jn_true])
np.testing.assert_array_equal(y[disc.y_slices[c][0]], c_true)
@@ -364,15 +364,7 @@ def test_process_symbol_base(self):
# binary operator
binary = var + scal
binary_disc = disc.process_symbol(binary)
- self.assertIsInstance(binary_disc, pybamm.Addition)
- self.assertIsInstance(binary_disc.children[0], pybamm.StateVector)
- self.assertIsInstance(binary_disc.children[1], pybamm.Scalar)
-
- bin2 = scal + var
- bin2_disc = disc.process_symbol(bin2)
- self.assertIsInstance(bin2_disc, pybamm.Addition)
- self.assertIsInstance(bin2_disc.children[0], pybamm.Scalar)
- self.assertIsInstance(bin2_disc.children[1], pybamm.StateVector)
+ self.assertEqual(binary_disc, 5 + pybamm.StateVector(slice(0, 53)))
# non-spatial unary operator
un1 = -var
@@ -436,27 +428,14 @@ def test_process_complex_expression(self):
disc.y_slices = {var1: [slice(53)], var2: [slice(53, 106)]}
exp_disc = disc.process_symbol(expression)
- self.assertIsInstance(exp_disc, pybamm.Division)
- # left side
- self.assertIsInstance(exp_disc.left, pybamm.Multiplication)
- self.assertIsInstance(exp_disc.left.left, pybamm.Scalar)
- self.assertIsInstance(exp_disc.left.right, pybamm.Power)
- self.assertIsInstance(exp_disc.left.right.left, pybamm.Scalar)
- self.assertIsInstance(exp_disc.left.right.right, pybamm.StateVector)
- self.assertEqual(
- exp_disc.left.right.right.y_slices[0],
- disc.y_slices[var2][0],
- )
- # right side
- self.assertIsInstance(exp_disc.right, pybamm.Addition)
- self.assertIsInstance(exp_disc.right.left, pybamm.Subtraction)
- self.assertIsInstance(exp_disc.right.left.left, pybamm.StateVector)
self.assertEqual(
- exp_disc.right.left.left.y_slices[0],
- disc.y_slices[var1][0],
+ exp_disc,
+ (5.0 * (3.0 ** pybamm.StateVector(slice(53, 106))))
+ / (
+ (-4.0 + pybamm.StateVector(slice(0, 53)))
+ + pybamm.StateVector(slice(53, 106))
+ ),
)
- self.assertIsInstance(exp_disc.right.left.right, pybamm.Scalar)
- self.assertIsInstance(exp_disc.right.right, pybamm.StateVector)
def test_discretise_spatial_operator(self):
# create discretisation
@@ -474,8 +453,8 @@ def test_discretise_spatial_operator(self):
self.assertIsInstance(eqn_disc, pybamm.MatrixMultiplication)
self.assertIsInstance(eqn_disc.children[0], pybamm.Matrix)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
- y = combined_submesh.nodes**2
+ submesh = mesh[whole_cell]
+ y = submesh.nodes**2
var_disc = disc.process_symbol(var)
# grad and var are identity operators here (for testing purposes)
np.testing.assert_array_equal(
@@ -491,7 +470,7 @@ def test_discretise_spatial_operator(self):
self.assertIsInstance(eqn_disc.children[1], pybamm.MatrixMultiplication)
self.assertIsInstance(eqn_disc.children[1].children[0], pybamm.Matrix)
- y = combined_submesh.nodes**2
+ y = submesh.nodes**2
var_disc = disc.process_symbol(var)
# grad and var are identity operators here (for testing purposes)
np.testing.assert_array_equal(
@@ -532,9 +511,9 @@ def test_process_dict(self):
disc = get_discretisation_for_testing()
mesh = disc.mesh
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
- y = combined_submesh.nodes[:, np.newaxis] ** 2
+ y = submesh.nodes[:, np.newaxis] ** 2
disc.bcs = boundary_conditions
disc.set_variable_slices(list(rhs.keys()))
@@ -545,7 +524,7 @@ def test_process_dict(self):
y0 = disc.process_dict(initial_conditions)
np.testing.assert_array_equal(
y0[c].evaluate(0, None),
- 3 * np.ones_like(combined_submesh.nodes[:, np.newaxis]),
+ 3 * np.ones_like(submesh.nodes[:, np.newaxis]),
)
# vars
processed_vars = disc.process_dict(variables)
@@ -559,9 +538,9 @@ def test_process_dict(self):
rhs = {c: pybamm.div(N), T: pybamm.div(q)}
initial_conditions = {c: pybamm.Scalar(3), T: pybamm.Scalar(5)}
boundary_conditions = {}
- y = np.concatenate(
- [combined_submesh.nodes**2, mesh["negative electrode"].nodes ** 4]
- )[:, np.newaxis]
+ y = np.concatenate([submesh.nodes**2, mesh["negative electrode"].nodes ** 4])[
+ :, np.newaxis
+ ]
variables = list(rhs.keys())
disc.set_variable_slices(variables)
@@ -577,7 +556,7 @@ def test_process_dict(self):
y0 = disc.process_dict(initial_conditions)
np.testing.assert_array_equal(
y0[c].evaluate(0, None),
- 3 * np.ones_like(combined_submesh.nodes[:, np.newaxis]),
+ 3 * np.ones_like(submesh.nodes[:, np.newaxis]),
)
np.testing.assert_array_equal(
y0[T].evaluate(0, None),
@@ -610,12 +589,12 @@ def test_process_model_ode(self):
disc = get_discretisation_for_testing()
mesh = disc.mesh
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
disc.process_model(model)
y0 = model.concatenated_initial_conditions.evaluate()
np.testing.assert_array_equal(
- y0, 3 * np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ y0, 3 * np.ones_like(submesh.nodes[:, np.newaxis])
)
np.testing.assert_array_equal(y0, model.concatenated_rhs.evaluate(None, y0))
@@ -625,15 +604,15 @@ def test_process_model_ode(self):
# mass matrix is identity
np.testing.assert_array_equal(
- np.eye(combined_submesh.nodes.shape[0]), model.mass_matrix.entries.toarray()
+ np.eye(submesh.nodes.shape[0]), model.mass_matrix.entries.toarray()
)
# Create StateVector to differentiate model with respect to
- y = pybamm.StateVector(slice(0, combined_submesh.npts))
+ y = pybamm.StateVector(slice(0, submesh.npts))
# jacobian is identity
jacobian = model.concatenated_rhs.jac(y).evaluate(0, y0)
- np.testing.assert_array_equal(np.eye(combined_submesh.npts), jacobian.toarray())
+ np.testing.assert_array_equal(np.eye(submesh.npts), jacobian.toarray())
# several equations
T = pybamm.Variable("T", domain=["negative electrode"])
@@ -659,7 +638,7 @@ def test_process_model_ode(self):
y0_expect = np.empty((0, 1))
for var_id, _ in sorted(disc.y_slices.items(), key=lambda kv: kv[1]):
if var_id == c:
- vect = 2 * np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ vect = 2 * np.ones_like(submesh.nodes[:, np.newaxis])
elif var_id == T:
vect = 5 * np.ones_like(mesh["negative electrode"].nodes[:, np.newaxis])
else:
@@ -765,36 +744,34 @@ def test_process_model_dae(self):
mesh = disc.mesh
disc.process_model(model)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
y0 = model.concatenated_initial_conditions.evaluate()
np.testing.assert_array_equal(
y0,
np.concatenate(
[
- 3 * np.ones_like(combined_submesh.nodes),
- 6 * np.ones_like(combined_submesh.nodes),
+ 3 * np.ones_like(submesh.nodes),
+ 6 * np.ones_like(submesh.nodes),
]
)[:, np.newaxis],
)
# grad and div are identity operators here
np.testing.assert_array_equal(
- y0[: combined_submesh.npts], model.concatenated_rhs.evaluate(None, y0)
+ y0[: submesh.npts], model.concatenated_rhs.evaluate(None, y0)
)
np.testing.assert_array_equal(
model.concatenated_algebraic.evaluate(None, y0),
- np.zeros_like(combined_submesh.nodes[:, np.newaxis]),
+ np.zeros_like(submesh.nodes[:, np.newaxis]),
)
# mass matrix is identity upper left, zeros elsewhere
mass = block_diag(
(
- np.eye(np.size(combined_submesh.nodes)),
- np.zeros(
- (np.size(combined_submesh.nodes), np.size(combined_submesh.nodes))
- ),
+ np.eye(np.size(submesh.nodes)),
+ np.zeros((np.size(submesh.nodes), np.size(submesh.nodes))),
)
)
np.testing.assert_array_equal(
@@ -810,17 +787,17 @@ def test_process_model_dae(self):
jacobian_actual = np.block(
[
[
- np.eye(np.size(combined_submesh.nodes)),
+ np.eye(np.size(submesh.nodes)),
np.zeros(
(
- np.size(combined_submesh.nodes),
- np.size(combined_submesh.nodes),
+ np.size(submesh.nodes),
+ np.size(submesh.nodes),
)
),
],
[
- -2 * np.eye(np.size(combined_submesh.nodes)),
- np.eye(np.size(combined_submesh.nodes)),
+ -2 * np.eye(np.size(submesh.nodes)),
+ np.eye(np.size(submesh.nodes)),
],
]
)
@@ -861,12 +838,12 @@ def test_process_model_algebraic(self):
mesh = disc.mesh
disc.process_model(model)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
y0 = model.concatenated_initial_conditions.evaluate()
np.testing.assert_array_equal(
y0,
- np.zeros_like(combined_submesh.nodes)[:, np.newaxis],
+ np.zeros_like(submesh.nodes)[:, np.newaxis],
)
# grad and div are identity operators here
@@ -876,19 +853,17 @@ def test_process_model_algebraic(self):
np.testing.assert_array_equal(
model.concatenated_algebraic.evaluate(None, y0),
- -np.ones_like(combined_submesh.nodes[:, np.newaxis]),
+ -np.ones_like(submesh.nodes[:, np.newaxis]),
)
# mass matrix is identity upper left, zeros elsewhere
- mass = np.zeros(
- (np.size(combined_submesh.nodes), np.size(combined_submesh.nodes))
- )
+ mass = np.zeros((np.size(submesh.nodes), np.size(submesh.nodes)))
np.testing.assert_array_equal(mass, model.mass_matrix.entries.toarray())
# jacobian
y = pybamm.StateVector(slice(0, np.size(y0)))
jacobian = model.concatenated_algebraic.jac(y).evaluate(0, y0)
- np.testing.assert_array_equal(np.eye(combined_submesh.npts), jacobian.toarray())
+ np.testing.assert_array_equal(np.eye(submesh.npts), jacobian.toarray())
def test_process_model_concatenation(self):
# concatenation of variables as the key
@@ -910,14 +885,12 @@ def test_process_model_concatenation(self):
disc = get_discretisation_for_testing()
mesh = disc.mesh
- combined_submesh = mesh.combine_submeshes(
- "negative electrode", "separator", "positive electrode"
- )
+ submesh = mesh[("negative electrode", "separator", "positive electrode")]
disc.process_model(model)
y0 = model.concatenated_initial_conditions.evaluate()
np.testing.assert_array_equal(
- y0, 3 * np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ y0, 3 * np.ones_like(submesh.nodes[:, np.newaxis])
)
# grad and div are identity operators here
@@ -982,28 +955,28 @@ def test_broadcast(self):
disc = get_discretisation_for_testing()
mesh = disc.mesh
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
# scalar
broad = disc.process_symbol(pybamm.FullBroadcast(a, whole_cell, {}))
np.testing.assert_array_equal(
broad.evaluate(inputs={"a": 7}),
- 7 * np.ones_like(combined_submesh.nodes[:, np.newaxis]),
+ 7 * np.ones_like(submesh.nodes[:, np.newaxis]),
)
self.assertEqual(broad.domain, whole_cell)
broad_disc = disc.process_symbol(broad)
self.assertIsInstance(broad_disc, pybamm.Multiplication)
- self.assertIsInstance(broad_disc.children[0], pybamm.InputParameter)
- self.assertIsInstance(broad_disc.children[1], pybamm.Vector)
+ self.assertIsInstance(broad_disc.children[0], pybamm.Vector)
+ self.assertIsInstance(broad_disc.children[1], pybamm.InputParameter)
# process Broadcast variable
disc.y_slices = {var: [slice(1)]}
broad1 = pybamm.FullBroadcast(var, ["negative electrode"], None)
broad1_disc = disc.process_symbol(broad1)
self.assertIsInstance(broad1_disc, pybamm.Multiplication)
- self.assertIsInstance(broad1_disc.children[0], pybamm.StateVector)
- self.assertIsInstance(broad1_disc.children[1], pybamm.Vector)
+ self.assertIsInstance(broad1_disc.children[0], pybamm.Vector)
+ self.assertIsInstance(broad1_disc.children[1], pybamm.StateVector)
# broadcast to edges
broad_to_edges = pybamm.FullBroadcastToEdges(a, ["negative electrode"], None)
@@ -1333,7 +1306,7 @@ def test_process_input_variable(self):
a = pybamm.InputParameter("a", ["negative electrode", "separator"])
a_disc = disc.process_symbol(a)
- n = disc.mesh.combine_submeshes(*a.domain).npts
+ n = disc.mesh[a.domain].npts
self.assertEqual(a_disc._expected_size, n)
def test_process_not_constant(self):
diff --git a/tests/unit/test_expression_tree/test_averages.py b/tests/unit/test_expression_tree/test_averages.py
index 5fbee356d9..fbfa5526d3 100644
--- a/tests/unit/test_expression_tree/test_averages.py
+++ b/tests/unit/test_expression_tree/test_averages.py
@@ -167,6 +167,16 @@ def test_x_average(self):
self.assertEqual(a.domain, ["positive particle"])
self.assertIsInstance(av_a, pybamm.XAverage)
+ # Addition or Subtraction
+ a = pybamm.Variable("a", domain="domain")
+ b = pybamm.Variable("b", domain="domain")
+ self.assertEqual(
+ pybamm.x_average(a + b), pybamm.x_average(a) + pybamm.x_average(b)
+ )
+ self.assertEqual(
+ pybamm.x_average(a - b), pybamm.x_average(a) - pybamm.x_average(b)
+ )
+
def test_size_average(self):
# no domain
@@ -247,6 +257,16 @@ def test_r_average(self):
):
pybamm.r_average(symbol_on_edges)
+ # Addition or Subtraction
+ a = pybamm.Variable("a", domain="domain")
+ b = pybamm.Variable("b", domain="domain")
+ self.assertEqual(
+ pybamm.r_average(a + b), pybamm.r_average(a) + pybamm.r_average(b)
+ )
+ self.assertEqual(
+ pybamm.r_average(a - b), pybamm.r_average(a) - pybamm.r_average(b)
+ )
+
def test_yz_average(self):
a = pybamm.Scalar(1)
z_average_a = pybamm.z_average(a)
@@ -291,6 +311,22 @@ def test_yz_average(self):
):
pybamm.z_average(symbol_on_edges)
+ # Addition or Subtraction
+ a = pybamm.Variable("a", domain="current collector")
+ b = pybamm.Variable("b", domain="current collector")
+ self.assertEqual(
+ pybamm.yz_average(a + b), pybamm.yz_average(a) + pybamm.yz_average(b)
+ )
+ self.assertEqual(
+ pybamm.yz_average(a - b), pybamm.yz_average(a) - pybamm.yz_average(b)
+ )
+ self.assertEqual(
+ pybamm.z_average(a + b), pybamm.z_average(a) + pybamm.z_average(b)
+ )
+ self.assertEqual(
+ pybamm.z_average(a - b), pybamm.z_average(a) - pybamm.z_average(b)
+ )
+
if __name__ == "__main__":
print("Add -v for more debug output")
diff --git a/tests/unit/test_expression_tree/test_binary_operators.py b/tests/unit/test_expression_tree/test_binary_operators.py
index 58fba662ff..913a943e88 100644
--- a/tests/unit/test_expression_tree/test_binary_operators.py
+++ b/tests/unit/test_expression_tree/test_binary_operators.py
@@ -284,20 +284,23 @@ def test_source_error(self):
pybamm.source(v, w)
def test_heaviside(self):
- a = pybamm.Scalar(1)
b = pybamm.StateVector(slice(0, 1))
- heav = a < b
+ heav = 1 < b
self.assertEqual(heav.evaluate(y=np.array([2])), 1)
self.assertEqual(heav.evaluate(y=np.array([1])), 0)
self.assertEqual(heav.evaluate(y=np.array([0])), 0)
self.assertEqual(str(heav), "1.0 < y[0:1]")
- heav = a >= b
+ heav = 1 >= b
self.assertEqual(heav.evaluate(y=np.array([2])), 0)
self.assertEqual(heav.evaluate(y=np.array([1])), 1)
self.assertEqual(heav.evaluate(y=np.array([0])), 1)
self.assertEqual(str(heav), "y[0:1] <= 1.0")
+ # simplifications
+ self.assertEqual(1 < b + 2, -1 < b)
+ self.assertEqual(b + 1 > 2, b > 1)
+
def test_equality(self):
a = pybamm.Scalar(1)
b = pybamm.StateVector(slice(0, 1))
@@ -314,13 +317,13 @@ def test_sigmoid(self):
self.assertAlmostEqual(sigm.evaluate(y=np.array([2]))[0, 0], 1)
self.assertEqual(sigm.evaluate(y=np.array([1])), 0.5)
self.assertAlmostEqual(sigm.evaluate(y=np.array([0]))[0, 0], 0)
- self.assertEqual(str(sigm), "(1.0 + tanh((10.0 * y[0:1]) - 10.0)) / 2.0")
+ self.assertEqual(str(sigm), "0.5 + 0.5 * tanh(-10.0 + 10.0 * y[0:1])")
sigm = pybamm.sigmoid(b, a, 10)
self.assertAlmostEqual(sigm.evaluate(y=np.array([2]))[0, 0], 0)
self.assertEqual(sigm.evaluate(y=np.array([1])), 0.5)
self.assertAlmostEqual(sigm.evaluate(y=np.array([0]))[0, 0], 1)
- self.assertEqual(str(sigm), "(1.0 + tanh(10.0 - (10.0 * y[0:1]))) / 2.0")
+ self.assertEqual(str(sigm), "0.5 + 0.5 * tanh(10.0 - (10.0 * y[0:1]))")
def test_modulo(self):
a = pybamm.StateVector(slice(0, 1))
@@ -356,19 +359,19 @@ def test_softminus_softplus(self):
self.assertAlmostEqual(minimum.evaluate(y=np.array([2]))[0, 0], 1)
self.assertAlmostEqual(minimum.evaluate(y=np.array([0]))[0, 0], 0)
self.assertEqual(
- str(minimum), "log(1.9287498479639178e-22 + exp(-50.0 * y[0:1])) / -50.0"
+ str(minimum), "-0.02 * log(1.9287498479639178e-22 + exp(-50.0 * y[0:1]))"
)
maximum = pybamm.softplus(a, b, 50)
self.assertAlmostEqual(maximum.evaluate(y=np.array([2]))[0, 0], 2)
self.assertAlmostEqual(maximum.evaluate(y=np.array([0]))[0, 0], 1)
self.assertEqual(
- str(maximum)[:15],
- "log(5.184705528587072e+21 + exp(50.0 * y[0:1])) / 50.0"[:15],
+ str(maximum)[:20],
+ "0.02 * log(5.184705528587072e+21 + exp(50.0 * y[0:1]))"[:20],
)
self.assertEqual(
- str(maximum)[-33:],
- "log(5.184705528587072e+21 + exp(50.0 * y[0:1])) / 50.0"[-33:],
+ str(maximum)[-20:],
+ "0.02 * log(5.184705528587072e+21 + exp(50.0 * y[0:1]))"[-20:],
)
# Test that smooth min/max are used when the setting is changed
@@ -392,6 +395,7 @@ def test_binary_simplifications(self):
a = pybamm.Scalar(0)
b = pybamm.Scalar(1)
c = pybamm.Parameter("c")
+ d = pybamm.Parameter("d")
v = pybamm.Vector(np.zeros((10, 1)))
v1 = pybamm.Vector(np.ones((10, 1)))
f = pybamm.StateVector(slice(0, 10))
@@ -419,18 +423,15 @@ def test_binary_simplifications(self):
self.assertEqual((var**broad2_edge).right, broad2_edge)
# addition
- self.assertIsInstance((a + b), pybamm.Scalar)
- self.assertEqual((a + b).evaluate(), 1)
- self.assertIsInstance((b + b), pybamm.Scalar)
- self.assertEqual((b + b).evaluate(), 2)
- self.assertIsInstance((b + a), pybamm.Scalar)
- self.assertEqual((b + a).evaluate(), 1)
- self.assertIsInstance((0 + b), pybamm.Scalar)
- self.assertEqual((0 + b).evaluate(), 1)
- self.assertIsInstance((0 + c), pybamm.Parameter)
- self.assertIsInstance((c + 0), pybamm.Parameter)
- self.assertIsInstance((c + 1), pybamm.Addition)
- self.assertIsInstance((1 + c), pybamm.Addition)
+ self.assertEqual(a + b, pybamm.Scalar(1))
+ self.assertEqual(b + b, pybamm.Scalar(2))
+ self.assertEqual(b + a, pybamm.Scalar(1))
+ self.assertEqual(0 + b, pybamm.Scalar(1))
+ self.assertEqual(0 + c, c)
+ self.assertEqual(c + 0, c)
+ # addition with subtraction
+ self.assertEqual(c + (d - c), d)
+ self.assertEqual((c - d) + d, c)
# addition with broadcast zero
self.assertIsInstance((1 + broad0), pybamm.PrimaryBroadcast)
np.testing.assert_array_equal((1 + broad0).child.evaluate(), 1)
@@ -441,46 +442,43 @@ def test_binary_simplifications(self):
# addition with broadcasts
self.assertEqual((c + broad2), pybamm.PrimaryBroadcast(c + 2, "domain"))
self.assertEqual((broad2 + c), pybamm.PrimaryBroadcast(2 + c, "domain"))
+ # addition with negate
+ self.assertEqual(c + -d, c - d)
+ self.assertEqual(-c + d, d - c)
# subtraction
- self.assertIsInstance((a - b), pybamm.Scalar)
- self.assertEqual((a - b).evaluate(), -1)
- self.assertIsInstance((b - b), pybamm.Scalar)
- self.assertEqual((b - b).evaluate(), 0)
- self.assertIsInstance((b - a), pybamm.Scalar)
- self.assertEqual((b - a).evaluate(), 1)
+ self.assertEqual(a - b, pybamm.Scalar(-1))
+ self.assertEqual(b - b, pybamm.Scalar(0))
+ self.assertEqual(b - a, pybamm.Scalar(1))
+ # subtraction with addition
+ self.assertEqual(c - (d + c), -d)
+ self.assertEqual(c - (c - d), d)
+ self.assertEqual((c + d) - d, c)
+ self.assertEqual((d + c) - d, c)
+ self.assertEqual((d - c) - d, -c)
# subtraction with broadcasts
self.assertEqual((c - broad2), pybamm.PrimaryBroadcast(c - 2, "domain"))
self.assertEqual((broad2 - c), pybamm.PrimaryBroadcast(2 - c, "domain"))
# subtraction from itself
self.assertEqual((c - c), pybamm.Scalar(0))
self.assertEqual((broad2 - broad2), broad0)
+ # subtraction with negate
+ self.assertEqual((c - (-d)), c + d)
# addition and subtraction with matrix zero
- self.assertIsInstance((b + v), pybamm.Array)
- np.testing.assert_array_equal((b + v).evaluate(), np.ones((10, 1)))
- self.assertIsInstance((v + b), pybamm.Array)
- np.testing.assert_array_equal((v + b).evaluate(), np.ones((10, 1)))
- self.assertIsInstance((b - v), pybamm.Array)
- np.testing.assert_array_equal((b - v).evaluate(), np.ones((10, 1)))
- self.assertIsInstance((v - b), pybamm.Array)
- np.testing.assert_array_equal((v - b).evaluate(), -np.ones((10, 1)))
+ self.assertEqual(b + v, pybamm.Vector(np.ones((10, 1))))
+ self.assertEqual(v + b, pybamm.Vector(np.ones((10, 1))))
+ self.assertEqual(b - v, pybamm.Vector(np.ones((10, 1))))
+ self.assertEqual(v - b, pybamm.Vector(-np.ones((10, 1))))
# multiplication
- self.assertIsInstance((a * b), pybamm.Scalar)
- self.assertEqual((a * b).evaluate(), 0)
- self.assertIsInstance((b * a), pybamm.Scalar)
- self.assertEqual((b * a).evaluate(), 0)
- self.assertIsInstance((b * b), pybamm.Scalar)
- self.assertEqual((b * b).evaluate(), 1)
- self.assertIsInstance((a * a), pybamm.Scalar)
- self.assertEqual((a * a).evaluate(), 0)
- self.assertIsInstance((a * c), pybamm.Scalar)
- self.assertEqual((a * c).evaluate(), 0)
- self.assertIsInstance((c * a), pybamm.Scalar)
- self.assertEqual((c * a).evaluate(), 0)
- self.assertIsInstance((b * c), pybamm.Parameter)
- self.assertIsInstance((2 * c), pybamm.Multiplication)
+ self.assertEqual(a * b, pybamm.Scalar(0))
+ self.assertEqual(b * a, pybamm.Scalar(0))
+ self.assertEqual(b * b, pybamm.Scalar(1))
+ self.assertEqual(a * a, pybamm.Scalar(0))
+ self.assertEqual(a * c, pybamm.Scalar(0))
+ self.assertEqual(c * a, pybamm.Scalar(0))
+ self.assertEqual(b * c, c)
# multiplication with -1
self.assertEqual((c * -1), (-c))
self.assertEqual((-1 * c), (-c))
@@ -488,15 +486,16 @@ def test_binary_simplifications(self):
self.assertEqual((-c * -f), (c * f))
self.assertEqual((-c * 4), (c * -4))
self.assertEqual((4 * -c), (-4 * c))
+ # multiplication with division
+ self.assertEqual((c * (d / c)), d)
+ self.assertEqual((c / d) * d, c)
# multiplication with broadcasts
self.assertEqual((c * broad2), pybamm.PrimaryBroadcast(c * 2, "domain"))
self.assertEqual((broad2 * c), pybamm.PrimaryBroadcast(2 * c, "domain"))
# multiplication with matrix zero
- self.assertIsInstance((b * v), pybamm.Array)
- np.testing.assert_array_equal((b * v).evaluate(), np.zeros((10, 1)))
- self.assertIsInstance((v * b), pybamm.Array)
- np.testing.assert_array_equal((v * b).evaluate(), np.zeros((10, 1)))
+ self.assertEqual(b * v, pybamm.Vector(np.zeros((10, 1))))
+ self.assertEqual(v * b, pybamm.Vector(np.zeros((10, 1))))
# multiplication with matrix one
self.assertEqual((f * v1), f)
self.assertEqual((v1 * f), f)
@@ -518,8 +517,11 @@ def test_binary_simplifications(self):
self.assertEqual((broad2 / broad2), broad1)
# division with a negation
self.assertEqual((-c / -f), (c / f))
- self.assertEqual((-c / 4), (c / -4))
+ self.assertEqual((-c / 4), -0.25 * c)
self.assertEqual((4 / -c), (-4 / c))
+ # division with multiplication
+ self.assertEqual((c * d) / c, d)
+ self.assertEqual((d * c) / c, d)
# division with broadcasts
self.assertEqual((c / broad2), pybamm.PrimaryBroadcast(c / 2, "domain"))
self.assertEqual((broad2 / c), pybamm.PrimaryBroadcast(2 / c, "domain"))
@@ -555,7 +557,7 @@ def conc_broad(x, y, z):
self.assertEqual((a + b), conc_broad(12, 14, 16))
self.assertIsInstance((a + c), pybamm.Concatenation)
- # No simplifications if are Variable or StateVector objects
+ # No simplifications if all are Variable or StateVector objects
v = pybamm.concatenation(
pybamm.Variable("x", "negative electrode"),
pybamm.Variable("y", "separator"),
@@ -568,9 +570,9 @@ def test_advanced_binary_simplifications(self):
# MatMul simplifications that often appear when discretising spatial operators
A = pybamm.Matrix(np.random.rand(10, 10))
B = pybamm.Matrix(np.random.rand(10, 10))
- # C = pybamm.Matrix(np.random.rand(10, 10))
+ C = pybamm.Matrix(np.random.rand(10, 10))
var = pybamm.StateVector(slice(0, 10))
- # var2 = pybamm.StateVector(slice(10, 20))
+ var2 = pybamm.StateVector(slice(10, 20))
vec = pybamm.Vector(np.random.rand(10))
# Do A@B first if it is constant
@@ -590,10 +592,10 @@ def test_advanced_binary_simplifications(self):
self.assertEqual(expr, (((A @ B) @ var) - (A @ vec)))
# Distribute the @ operator to a sum if both symbols being summed are matmuls
- # expr = A @ (B @ var + C @ var2)
- # self.assertEqual(expr, ((A @ B) @ var + (A @ C) @ var2))
- # expr = A @ (B @ var - C @ var2)
- # self.assertEqual(expr, ((A @ B) @ var - (A @ C) @ var2))
+ expr = A @ (B @ var + C @ var2)
+ self.assertEqual(expr, ((A @ B) @ var + (A @ C) @ var2))
+ expr = A @ (B @ var - C @ var2)
+ self.assertEqual(expr, ((A @ B) @ var - (A @ C) @ var2))
# Reduce (A@var + B@var) to ((A+B)@var)
expr = A @ var + B @ var
@@ -605,16 +607,18 @@ def test_advanced_binary_simplifications(self):
expr = A @ (var * 5)
self.assertEqual(expr, ((A * 5) @ var))
# Do A/e first if it is constant
- expr = A @ (var / 5)
- self.assertEqual(expr, ((A / 5) @ var))
- # Do (d*A) first if it is constant
+ expr = A @ (var / 2)
+ self.assertEqual(expr, ((A / 2) @ var))
+ # Do (vec*A) first if it is constant
expr = vec * (A @ var)
self.assertEqual(expr, ((vec * A) @ var))
expr = (A @ var) * vec
self.assertEqual(expr, ((vec * A) @ var))
- # Do (A/d) first if it is constant
+ # Do (A/vec) first if it is constant
expr = (A @ var) / vec
- self.assertEqual(expr, ((A / vec) @ var))
+ self.assertIsInstance(expr, pybamm.MatrixMultiplication)
+ np.testing.assert_array_almost_equal(expr.left.evaluate(), (A / vec).evaluate())
+ self.assertEqual(expr.children[1], var)
# simplify additions and subtractions
expr = 7 + (var + 5)
@@ -651,44 +655,40 @@ def test_advanced_binary_simplifications(self):
self.assertEqual(expr, (-2 - var))
# simplify multiplications and divisions
- expr = 7 * (var * 5)
- self.assertEqual(expr, (35 * var))
- expr = (var * 5) * 7
- self.assertEqual(expr, (var * 35))
- expr = 7 * (5 * var)
- self.assertEqual(expr, (35 * var))
- expr = (5 * var) * 7
- self.assertEqual(expr, (35 * var))
- expr = 7 * (var / 5)
- self.assertEqual(expr, ((7 / 5) * var))
- expr = (var / 5) * 7
- self.assertEqual(expr, (var * (7 / 5)))
- expr = (var * 5) / 7
- self.assertEqual(expr, (var * (5 / 7)))
- expr = (5 * var) / 7
- self.assertEqual(expr, ((5 / 7) * var))
- expr = 5 / (7 * var)
- self.assertEqual(expr, ((5 / 7) / var))
- expr = 5 / (var * 7)
- self.assertEqual(expr, ((5 / 7) / var))
- expr = (var / 5) / 7
- self.assertEqual(expr, (var / 35))
- expr = (5 / var) / 7
- self.assertEqual(expr, ((5 / 7) / var))
- expr = 5 / (7 / var)
- self.assertEqual(expr, ((5 / 7) * var))
- expr = 5 / (var / 7)
- self.assertEqual(expr, (35 / var))
+ expr = 10 * (var * 5)
+ self.assertEqual(expr, 50 * var)
+ expr = (var * 5) * 10
+ self.assertEqual(expr, var * 50)
+ expr = 10 * (5 * var)
+ self.assertEqual(expr, 50 * var)
+ expr = (5 * var) * 10
+ self.assertEqual(expr, 50 * var)
+ expr = 10 * (var / 5)
+ self.assertEqual(expr, (10 / 5) * var)
+ expr = (var / 5) * 10
+ self.assertEqual(expr, var * (10 / 5))
+ expr = (var * 5) / 10
+ self.assertEqual(expr, var * (5 / 10))
+ expr = (5 * var) / 10
+ self.assertEqual(expr, (5 / 10) * var)
+ expr = 5 / (10 * var)
+ self.assertEqual(expr, (5 / 10) / var)
+ expr = 5 / (var * 10)
+ self.assertEqual(expr, (5 / 10) / var)
+ expr = (5 / var) / 10
+ self.assertEqual(expr, (5 / 10) / var)
+ expr = 5 / (10 / var)
+ self.assertEqual(expr, (5 / 10) * var)
+ expr = 5 / (var / 10)
+ self.assertEqual(expr, 50 / var)
# use power rules on multiplications and divisions
expr = (var * 5) ** 2
- self.assertEqual(expr, (var**2 * 25))
+ self.assertEqual(expr, var**2 * 25)
expr = (5 * var) ** 2
- self.assertEqual(expr, (25 * var**2))
- expr = (var / 5) ** 2
- self.assertEqual(expr, (var**2 / 25))
+ self.assertEqual(expr, 25 * var**2)
expr = (5 / var) ** 2
- self.assertEqual(expr, (25 / var**2))
+ self.assertEqual(expr, 25 / var**2)
def test_inner_simplifications(self):
a1 = pybamm.Scalar(0)
diff --git a/tests/unit/test_expression_tree/test_broadcasts.py b/tests/unit/test_expression_tree/test_broadcasts.py
index 300deb9710..f9500a6f90 100644
--- a/tests/unit/test_expression_tree/test_broadcasts.py
+++ b/tests/unit/test_expression_tree/test_broadcasts.py
@@ -52,6 +52,10 @@ def test_primary_broadcast(self):
)
a = pybamm.Symbol("a", domain="current collector")
+ with self.assertRaisesRegex(
+ pybamm.DomainError, "Cannot Broadcast an object into empty domain"
+ ):
+ pybamm.PrimaryBroadcast(a, [])
with self.assertRaisesRegex(
pybamm.DomainError, "Primary broadcast from current collector"
):
@@ -209,6 +213,11 @@ def test_full_broadcast(self):
),
)
+ with self.assertRaisesRegex(
+ pybamm.DomainError, "Cannot do full broadcast to an empty primary domain"
+ ):
+ pybamm.FullBroadcast(a, [])
+
def test_full_broadcast_number(self):
broad_a = pybamm.FullBroadcast(1, ["negative electrode"], None)
self.assertEqual(broad_a.name, "broadcast")
diff --git a/tests/unit/test_expression_tree/test_concatenations.py b/tests/unit/test_expression_tree/test_concatenations.py
index 2a1b834d6b..26798d7919 100644
--- a/tests/unit/test_expression_tree/test_concatenations.py
+++ b/tests/unit/test_expression_tree/test_concatenations.py
@@ -97,6 +97,34 @@ def test_concatenation_auxiliary_domains(self):
):
pybamm.concatenation(a, b, c)
+ def test_concatenations_scale(self):
+ a = pybamm.Variable("a", domain="test a")
+ b = pybamm.Variable("b", domain="test b")
+
+ conc = pybamm.concatenation(a, b)
+ self.assertEqual(conc.scale, 1)
+ self.assertEqual(conc.reference, 0)
+
+ a._scale = 2
+ with self.assertRaisesRegex(
+ ValueError, "Cannot concatenate symbols with different scales"
+ ):
+ pybamm.concatenation(a, b)
+
+ b._scale = 2
+ conc = pybamm.concatenation(a, b)
+ self.assertEqual(conc.scale, 2)
+
+ a._reference = 3
+ with self.assertRaisesRegex(
+ ValueError, "Cannot concatenate symbols with different references"
+ ):
+ pybamm.concatenation(a, b)
+
+ b._reference = 3
+ conc = pybamm.concatenation(a, b)
+ self.assertEqual(conc.reference, 3)
+
def test_concatenation_simplify(self):
# Primary broadcast
var = pybamm.Variable("var", "current collector")
diff --git a/tests/unit/test_expression_tree/test_functions.py b/tests/unit/test_expression_tree/test_functions.py
index fbc3625654..71af025218 100644
--- a/tests/unit/test_expression_tree/test_functions.py
+++ b/tests/unit/test_expression_tree/test_functions.py
@@ -263,7 +263,7 @@ def test_log(self):
# Base 10
fun = pybamm.log10(a)
- self.assertEqual(fun.evaluate(inputs={"a": 3}), np.log10(3))
+ self.assertAlmostEqual(fun.evaluate(inputs={"a": 3}), np.log10(3))
h = 0.0000001
self.assertAlmostEqual(
fun.diff(a).evaluate(inputs={"a": 3}),
diff --git a/tests/unit/test_expression_tree/test_interpolant.py b/tests/unit/test_expression_tree/test_interpolant.py
index 64bb3b0590..8c1f9d274f 100644
--- a/tests/unit/test_expression_tree/test_interpolant.py
+++ b/tests/unit/test_expression_tree/test_interpolant.py
@@ -13,11 +13,11 @@ def test_errors(self):
pybamm.Interpolant(np.ones(10), np.ones(11), pybamm.Symbol("a"))
with self.assertRaisesRegex(ValueError, "x2"):
pybamm.Interpolant(
- (np.ones(12), np.ones(11)), np.ones((10, 12)), pybamm.Symbol("a")
+ (np.ones(10), np.ones(11)), np.ones((10, 12)), pybamm.Symbol("a")
)
with self.assertRaisesRegex(ValueError, "x1"):
pybamm.Interpolant(
- (np.ones(11), np.ones(10)), np.ones((10, 12)), pybamm.Symbol("a")
+ (np.ones(11), np.ones(12)), np.ones((10, 12)), pybamm.Symbol("a")
)
with self.assertRaisesRegex(ValueError, "y should"):
pybamm.Interpolant(
@@ -35,11 +35,21 @@ def test_errors(self):
pybamm.Interpolant(
(np.ones(12), np.ones(10)), np.ones((10, 12)), pybamm.Symbol("a")
)
- with self.assertWarns(DeprecationWarning):
+
+ with self.assertRaisesRegex(
+ ValueError, "len\\(x\\) should equal len\\(children\\)"
+ ):
+ pybamm.Interpolant(
+ (np.ones(10), np.ones(12)), np.ones((10, 12)), pybamm.Symbol("a")
+ )
+
+ def test_warnings(self):
+
+ with self.assertWarnsRegex(Warning, "cubic spline"):
pybamm.Interpolant(
- (np.ones(12), np.ones(10)),
- np.ones((10, 12)),
- (pybamm.Symbol("a"), pybamm.Symbol("b")),
+ np.linspace(0, 1, 10),
+ np.ones(10),
+ pybamm.Symbol("a"),
interpolator="cubic spline",
)
@@ -82,7 +92,7 @@ def test_interpolation_1_x_2d_y(self):
def test_interpolation_2_x_2d_y(self):
x = (np.arange(-5.01, 5.01, 0.05), np.arange(-5.01, 5.01, 0.01))
- xx, yy = np.meshgrid(x[0], x[1])
+ xx, yy = np.meshgrid(x[0], x[1], indexing="ij")
z = np.sin(xx**2 + yy**2)
var1 = pybamm.StateVector(slice(0, 1))
var2 = pybamm.StateVector(slice(1, 2))
@@ -97,6 +107,90 @@ def test_interpolation_2_x_2d_y(self):
interp.evaluate(y=np.array([0, 0])), 0, decimal=3
)
+ def test_interpolation_2_x(self):
+ def f(x, y):
+ return 2 * x**3 + 3 * y**2
+
+ x = np.linspace(1, 4, 11)
+ y = np.linspace(4, 7, 22)
+ xg, yg = np.meshgrid(x, y, indexing="ij", sparse=True)
+ data = f(xg, yg)
+
+ var1 = pybamm.StateVector(slice(0, 1))
+ var2 = pybamm.StateVector(slice(1, 2))
+
+ x_in = (x, y)
+ interp = pybamm.Interpolant(x_in, data, (var1, var2), interpolator="linear")
+
+ value = interp.evaluate(y=np.array([1, 5]))
+ np.testing.assert_equal(value, f(1, 5))
+
+ value = interp.evaluate(y=np.array([x[1], y[1]]))
+ np.testing.assert_equal(value, f(x[1], y[1]))
+
+ value = interp.evaluate(y=np.array([[1, 1, x[1]], [5, 4, y[1]]]))
+ np.testing.assert_array_equal(
+ value, np.array([[f(1, 5)], [f(1, 4)], [f(x[1], y[1])]])
+ )
+
+ # check also works for cubic
+ interp = pybamm.Interpolant(x_in, data, (var1, var2), interpolator="cubic")
+ value = interp.evaluate(y=np.array([1, 5]))
+ np.testing.assert_equal(value, f(1, 5))
+
+ # Test raising error if data is not 2D
+ data_3d = np.zeros((11, 22, 33))
+ with self.assertRaisesRegex(ValueError, "y should be two-dimensional"):
+ interp = pybamm.Interpolant(
+ x_in, data_3d, (var1, var2), interpolator="linear"
+ )
+
+ # Test raising error if wrong shapes
+ with self.assertRaisesRegex(ValueError, "x1.shape"):
+ interp = pybamm.Interpolant(
+ x_in, np.zeros((12, 22)), (var1, var2), interpolator="linear"
+ )
+
+ with self.assertRaisesRegex(ValueError, "x2.shape"):
+ interp = pybamm.Interpolant(
+ x_in, np.zeros((11, 23)), (var1, var2), interpolator="linear"
+ )
+
+ # Raise error if not linear
+ with self.assertRaisesRegex(
+ ValueError, "interpolator should be 'linear' or 'cubic'"
+ ):
+ interp = pybamm.Interpolant(x_in, data, (var1, var2), interpolator="pchip")
+
+ # Check returns nan if extrapolate set to False
+ interp = pybamm.Interpolant(
+ x_in, data, (var1, var2), interpolator="linear", extrapolate=False
+ )
+ value = interp.evaluate(y=np.array([0, 0, 0]))
+ np.testing.assert_equal(value, np.nan)
+
+ # Check testing for shape works (i.e. using nans)
+ interp = pybamm.Interpolant(x_in, data, (var1, var2), interpolator="cubic")
+ interp.test_shape()
+
+ # test with inconsistent children shapes
+ # (this can occur is one child is a scaler and the others
+ # are variables)
+ evaluated_children = [np.array([[1]]), 4]
+ value = interp._function_evaluate(evaluated_children)
+
+ evaluated_children = [np.array([[1]]), np.ones(()) * 4]
+ value = interp._function_evaluate(evaluated_children)
+
+ # Test evaluation fails with different child shapes
+ with self.assertRaisesRegex(ValueError, "All children must"):
+ evaluated_children = [np.array([[1, 1]]), np.array([7])]
+ value = interp._function_evaluate(evaluated_children)
+
+ # Test runs when all children are scalars
+ evaluated_children = [1, 4]
+ value = interp._function_evaluate(evaluated_children)
+
def test_interpolation_3_x(self):
def f(x, y, z):
return 2 * x**3 + 3 * y**2 - z
diff --git a/tests/unit/test_expression_tree/test_operations/test_convert_to_casadi.py b/tests/unit/test_expression_tree/test_operations/test_convert_to_casadi.py
index 3029ce8476..ba91ae8f08 100644
--- a/tests/unit/test_expression_tree/test_operations/test_convert_to_casadi.py
+++ b/tests/unit/test_expression_tree/test_operations/test_convert_to_casadi.py
@@ -314,16 +314,20 @@ def test_concatenations(self):
self.assert_casadi_equal(f(y_eval), casadi.SX(expr.evaluate(y=y_eval)))
def test_convert_differentiated_function(self):
- a = pybamm.Scalar(0)
- b = pybamm.Scalar(1)
+ a = pybamm.InputParameter("a")
+ b = pybamm.InputParameter("b")
def myfunction(x, y):
return x + y**3
f = pybamm.Function(myfunction, a, b).diff(a)
- self.assert_casadi_equal(f.to_casadi(), casadi.MX(1), evalf=True)
+ self.assert_casadi_equal(
+ f.to_casadi(inputs={"a": 1, "b": 2}), casadi.DM(1), evalf=True
+ )
f = pybamm.Function(myfunction, a, b).diff(b)
- self.assert_casadi_equal(f.to_casadi(), casadi.MX(3), evalf=True)
+ self.assert_casadi_equal(
+ f.to_casadi(inputs={"a": 1, "b": 2}), casadi.DM(12), evalf=True
+ )
def test_convert_input_parameter(self):
casadi_t = casadi.MX.sym("t")
diff --git a/tests/unit/test_expression_tree/test_operations/test_evaluate_python.py b/tests/unit/test_expression_tree/test_operations/test_evaluate_python.py
index e6502d4cb0..813029e821 100644
--- a/tests/unit/test_expression_tree/test_operations/test_evaluate_python.py
+++ b/tests/unit/test_expression_tree/test_operations/test_evaluate_python.py
@@ -76,7 +76,7 @@ def test_find_symbols(self):
# test unary op
constant_symbols = OrderedDict()
variable_symbols = OrderedDict()
- expr = a + (-b)
+ expr = pybamm.maximum(a, -(b))
pybamm.find_symbols(expr, constant_symbols, variable_symbols)
self.assertEqual(len(constant_symbols), 0)
@@ -92,7 +92,7 @@ def test_find_symbols(self):
self.assertEqual(list(variable_symbols.values())[2], "-{}".format(var_b))
var_child = pybamm.id_to_python_variable(expr.children[1].id)
self.assertEqual(
- list(variable_symbols.values())[3], "{} + {}".format(var_a, var_child)
+ list(variable_symbols.values())[3], f"np.maximum({var_a},{var_child})"
)
# test function
diff --git a/tests/unit/test_expression_tree/test_symbol.py b/tests/unit/test_expression_tree/test_symbol.py
index b8a9ea4f82..a68d3de54b 100644
--- a/tests/unit/test_expression_tree/test_symbol.py
+++ b/tests/unit/test_expression_tree/test_symbol.py
@@ -119,10 +119,9 @@ def test_symbol_methods(self):
self.assertIsInstance(-a, pybamm.Negate)
self.assertIsInstance(abs(a), pybamm.AbsoluteValue)
# special cases
- neg_a = -a
- self.assertEqual(-neg_a, a)
- abs_a = abs(a)
- self.assertEqual(abs(abs_a), abs_a)
+ self.assertEqual(-(-a), a)
+ self.assertEqual(-(a - b), b - a)
+ self.assertEqual(abs(abs(a)), abs(a))
# binary - two symbols
self.assertIsInstance(a + b, pybamm.Addition)
@@ -139,10 +138,10 @@ def test_symbol_methods(self):
# binary - symbol and number
self.assertIsInstance(a + 2, pybamm.Addition)
- self.assertIsInstance(a - 2, pybamm.Subtraction)
+ self.assertIsInstance(2 - a, pybamm.Subtraction)
self.assertIsInstance(a * 2, pybamm.Multiplication)
self.assertIsInstance(a @ 2, pybamm.MatrixMultiplication)
- self.assertIsInstance(a / 2, pybamm.Division)
+ self.assertIsInstance(2 / a, pybamm.Division)
self.assertIsInstance(a**2, pybamm.Power)
# binary - number and symbol
@@ -387,7 +386,8 @@ def test_symbol_repr(self):
def test_symbol_visualise(self):
c = pybamm.Variable("c", "negative electrode")
- sym = pybamm.div(c * pybamm.grad(c)) + (c / 2 + c - 1) ** 5
+ d = pybamm.Variable("d", "negative electrode")
+ sym = pybamm.div(c * pybamm.grad(c)) + (c / d + c - d) ** 5
sym.visualise("test_visualize.png")
self.assertTrue(os.path.exists("test_visualize.png"))
with self.assertRaises(ValueError):
diff --git a/tests/unit/test_expression_tree/test_unary_operators.py b/tests/unit/test_expression_tree/test_unary_operators.py
index dd587228db..7d4906558f 100644
--- a/tests/unit/test_expression_tree/test_unary_operators.py
+++ b/tests/unit/test_expression_tree/test_unary_operators.py
@@ -103,6 +103,18 @@ def test_sign(self):
np.diag(signb.evaluate().toarray()), [-1, -1, 0, 1, 1]
)
+ broad = pybamm.PrimaryBroadcast(-4, "test domain")
+ self.assertEqual(pybamm.sign(broad), pybamm.PrimaryBroadcast(-1, "test domain"))
+
+ conc = pybamm.Concatenation(broad, pybamm.PrimaryBroadcast(2, "another domain"))
+ self.assertEqual(
+ pybamm.sign(conc),
+ pybamm.Concatenation(
+ pybamm.PrimaryBroadcast(-1, "test domain"),
+ pybamm.PrimaryBroadcast(1, "another domain"),
+ ),
+ )
+
def test_floor(self):
a = pybamm.Symbol("a")
floora = pybamm.Floor(a)
@@ -147,10 +159,7 @@ def test_gradient(self):
# gradient of broadcast should return broadcasted zero
a = pybamm.PrimaryBroadcast(pybamm.Variable("a"), "test domain")
grad = pybamm.grad(a)
- self.assertIsInstance(grad, pybamm.PrimaryBroadcastToEdges)
- self.assertIsInstance(grad.child, pybamm.PrimaryBroadcast)
- self.assertIsInstance(grad.child.child, pybamm.Scalar)
- self.assertEqual(grad.child.child.value, 0)
+ self.assertEqual(grad, pybamm.PrimaryBroadcastToEdges(0, "test domain"))
# otherwise gradient should work
a = pybamm.Symbol("a", domain="test domain")
@@ -175,10 +184,17 @@ def test_div(self):
# divergence of broadcast should return broadcasted zero
a = pybamm.PrimaryBroadcastToEdges(pybamm.Variable("a"), "test domain")
div = pybamm.div(a)
- self.assertIsInstance(div, pybamm.PrimaryBroadcast)
- self.assertIsInstance(div.child, pybamm.PrimaryBroadcast)
- self.assertIsInstance(div.child.child, pybamm.Scalar)
- self.assertEqual(div.child.child.value, 0)
+ self.assertEqual(div, pybamm.PrimaryBroadcast(0, "test domain"))
+ a = pybamm.PrimaryBroadcastToEdges(
+ pybamm.Variable("a", "some domain"), "test domain"
+ )
+ div = pybamm.div(a)
+ self.assertEqual(
+ div,
+ pybamm.PrimaryBroadcast(
+ pybamm.PrimaryBroadcast(0, "some domain"), "test domain"
+ ),
+ )
# otherwise divergence should work
a = pybamm.Symbol("a", domain="test domain")
@@ -635,6 +651,14 @@ def test_to_equation(self):
sympy.Integral("d", sympy.Symbol("xn")),
)
+ def test_explicit_time_integral(self):
+ expr = pybamm.ExplicitTimeIntegral(pybamm.Parameter("param"), pybamm.Scalar(1))
+ self.assertEqual(expr.child, pybamm.Parameter("param"))
+ self.assertEqual(expr.initial_condition, pybamm.Scalar(1))
+ self.assertEqual(expr.name, "explicit time integral")
+ self.assertEqual(expr.new_copy(), expr)
+ self.assertFalse(expr.is_constant())
+
if __name__ == "__main__":
print("Add -v for more debug output")
diff --git a/tests/unit/test_expression_tree/test_variable.py b/tests/unit/test_expression_tree/test_variable.py
index f2a32f2a81..1dbe3b67db 100644
--- a/tests/unit/test_expression_tree/test_variable.py
+++ b/tests/unit/test_expression_tree/test_variable.py
@@ -17,6 +17,12 @@ def test_variable_init(self):
a = pybamm.Variable("a", domain=["test"])
self.assertEqual(a.domain[0], "test")
self.assertRaises(TypeError, pybamm.Variable("a", domain="test"))
+ self.assertEqual(a.scale, 1)
+ self.assertEqual(a.reference, 0)
+
+ a = pybamm.Variable("a", scale=2, reference=-1)
+ self.assertEqual(a.scale, 2)
+ self.assertEqual(a.reference, -1)
def test_variable_diff(self):
a = pybamm.Variable("a")
diff --git a/tests/unit/test_meshes/test_meshes.py b/tests/unit/test_meshes/test_meshes.py
index c42497f8f2..b04402128b 100644
--- a/tests/unit/test_meshes/test_meshes.py
+++ b/tests/unit/test_meshes/test_meshes.py
@@ -81,7 +81,7 @@ def test_mesh_creation(self):
self.assertEqual(
mesh["positive electrode"].edges[0], mesh["separator"].edges[-1]
)
- for domain in mesh:
+ for domain in mesh.base_domains:
if domain != "current collector":
self.assertEqual(len(mesh[domain].edges), len(mesh[domain].nodes) + 1)
@@ -223,7 +223,7 @@ def test_combine_submeshes(self):
mesh = pybamm.Mesh(geometry, submesh_types, var_pts)
# create submesh
- submesh = mesh.combine_submeshes("negative electrode", "separator")
+ submesh = mesh[("negative electrode", "separator")]
self.assertEqual(submesh.edges[0], 0)
self.assertEqual(submesh.edges[-1], mesh["separator"].edges[-1])
np.testing.assert_almost_equal(
diff --git a/tests/unit/test_meshes/test_scikit_fem_submesh.py b/tests/unit/test_meshes/test_scikit_fem_submesh.py
index 91c2899da8..0e9c5561d4 100644
--- a/tests/unit/test_meshes/test_scikit_fem_submesh.py
+++ b/tests/unit/test_meshes/test_scikit_fem_submesh.py
@@ -52,7 +52,7 @@ def test_mesh_creation(self):
self.assertEqual(
mesh["positive electrode"].edges[0], mesh["separator"].edges[-1]
)
- for domain in mesh:
+ for domain in mesh.base_domains:
if domain == "current collector":
# NOTE: only for degree 1
npts = var_pts["y"] * var_pts["z"]
@@ -223,7 +223,7 @@ def test_mesh_creation(self):
self.assertEqual(
mesh["positive electrode"].edges[0], mesh["separator"].edges[-1]
)
- for domain in mesh:
+ for domain in mesh.base_domains:
if domain == "current collector":
# NOTE: only for degree 1
npts = var_pts["y"] * var_pts["z"]
@@ -303,7 +303,7 @@ def test_mesh_creation(self):
self.assertEqual(
mesh["positive electrode"].edges[0], mesh["separator"].edges[-1]
)
- for domain in mesh:
+ for domain in mesh.base_domains:
if domain == "current collector":
# NOTE: only for degree 1
npts = var_pts["y"] * var_pts["z"]
@@ -391,7 +391,7 @@ def test_mesh_creation(self):
self.assertEqual(
mesh["positive electrode"].edges[0], mesh["separator"].edges[-1]
)
- for domain in mesh:
+ for domain in mesh.base_domains:
if domain == "current collector":
# NOTE: only for degree 1
npts = var_pts["y"] * var_pts["z"]
diff --git a/tests/unit/test_models/test_base_model.py b/tests/unit/test_models/test_base_model.py
index 7a5f5777c7..161f347a26 100644
--- a/tests/unit/test_models/test_base_model.py
+++ b/tests/unit/test_models/test_base_model.py
@@ -967,7 +967,7 @@ def get_coupled_variables(self, variables):
u = model.variables["u"]
v = model.variables["v"]
self.assertEqual(model.rhs[u].value, 2)
- self.assertIsInstance(model.algebraic[v], pybamm.Subtraction)
+ self.assertEqual(model.algebraic[v], -1.0 + v)
if __name__ == "__main__":
diff --git a/tests/unit/test_models/test_full_battery_models/test_base_battery_model.py b/tests/unit/test_models/test_full_battery_models/test_base_battery_model.py
index 2678bca5b0..b2fa082f7e 100644
--- a/tests/unit/test_models/test_full_battery_models/test_base_battery_model.py
+++ b/tests/unit/test_models/test_full_battery_models/test_base_battery_model.py
@@ -34,7 +34,7 @@
'particle phases': '1' (possible: ['1', '2'])
'particle shape': 'spherical' (possible: ['spherical', 'no particles'])
'particle size': 'single' (possible: ['single', 'distribution'])
-'SEI': 'none' (possible: ['none', 'constant', 'reaction limited', 'solvent-diffusion limited', 'electron-migration limited', 'interstitial-diffusion limited', 'ec reaction limited'])
+'SEI': 'none' (possible: ['none', 'constant', 'reaction limited', 'reaction limited (asymmetric)', 'solvent-diffusion limited', 'electron-migration limited', 'interstitial-diffusion limited', 'ec reaction limited', 'ec reaction limited (asymmetric)'])
'SEI film resistance': 'none' (possible: ['none', 'distributed', 'average'])
'SEI on cracks': 'false' (possible: ['false', 'true'])
'SEI porosity change': 'false' (possible: ['false', 'true'])
diff --git a/tests/unit/test_models/test_full_battery_models/test_equivalent_circuit/__init__.py b/tests/unit/test_models/test_full_battery_models/test_equivalent_circuit/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/tests/unit/test_models/test_full_battery_models/test_equivalent_circuit/test_thevenin.py b/tests/unit/test_models/test_full_battery_models/test_equivalent_circuit/test_thevenin.py
new file mode 100644
index 0000000000..377bfce07e
--- /dev/null
+++ b/tests/unit/test_models/test_full_battery_models/test_equivalent_circuit/test_thevenin.py
@@ -0,0 +1,120 @@
+#
+# Tests for the Thevenin equivalant circuit model
+#
+import pybamm
+import unittest
+
+
+class TestThevenin(unittest.TestCase):
+ def test_standard_model(self):
+ model = pybamm.equivalent_circuit.Thevenin()
+ model.check_well_posedness()
+
+ def test_changing_number_of_rcs(self):
+ options = {"number of rc elements": 0}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ options = {"number of rc elements": 2}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ options = {"number of rc elements": 3}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ options = {"number of rc elements": 4}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ with self.assertRaisesRegex(pybamm.OptionError, "natural numbers"):
+ options = {"number of rc elements": -1}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ def test_calculate_discharge_energy(self):
+ options = {"calculate discharge energy": "true"}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ def test_well_posed_external_circuit_voltage(self):
+ options = {"operating mode": "voltage"}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ def test_well_posed_external_circuit_power(self):
+ options = {"operating mode": "power"}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ def test_well_posed_external_circuit_differential_power(self):
+ options = {"operating mode": "differential power"}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ def test_well_posed_external_circuit_resistance(self):
+ options = {"operating mode": "resistance"}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ def test_well_posed_external_circuit_differential_resistance(self):
+ options = {"operating mode": "differential resistance"}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ def test_well_posed_external_circuit_cccv(self):
+ options = {"operating mode": "CCCV"}
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ def test_well_posed_external_circuit_function(self):
+ def external_circuit_function(variables):
+ I = variables["Current [A]"]
+ V = variables["Terminal voltage [V]"]
+ return (
+ V
+ + I
+ - pybamm.FunctionParameter(
+ "Function", {"Time [s]": pybamm.t}, print_name="test_fun"
+ )
+ )
+
+ options = {"operating mode": external_circuit_function}
+
+ model = pybamm.equivalent_circuit.Thevenin(options=options)
+ model.check_well_posedness()
+
+ def test_raise_option_error(self):
+ options = {"not an option": "something"}
+ with self.assertRaisesRegex(
+ pybamm.OptionError, "Option 'not an option' not recognised"
+ ):
+ pybamm.equivalent_circuit.Thevenin(options=options)
+
+ def test_not_a_valid_option(self):
+ options = {"operating mode": "not a valid option"}
+ with self.assertRaisesRegex(
+ pybamm.OptionError, "Option 'operating mode' must be one of"
+ ):
+ pybamm.equivalent_circuit.Thevenin(options=options)
+
+ def test_get_default_parameters(self):
+ model = pybamm.equivalent_circuit.Thevenin()
+ values = model.default_parameter_values
+ self.assertIn("Initial SoC", list(values.keys()))
+ values.process_model(model)
+
+ def test_get_default_quick_plot_variables(self):
+ model = pybamm.equivalent_circuit.Thevenin()
+ variables = model.default_quick_plot_variables
+ self.assertIn("Current [A]", variables)
+
+
+if __name__ == "__main__":
+ print("Add -v for more debug output")
+ import sys
+
+ if "-v" in sys.argv:
+ debug = True
+ pybamm.settings.debug_mode = True
+ unittest.main()
diff --git a/tests/unit/test_models/test_full_battery_models/test_lead_acid/test_basic_models.py b/tests/unit/test_models/test_full_battery_models/test_lead_acid/test_basic_models.py
index 260df1b254..ac8d9fc974 100644
--- a/tests/unit/test_models/test_full_battery_models/test_lead_acid/test_basic_models.py
+++ b/tests/unit/test_models/test_full_battery_models/test_lead_acid/test_basic_models.py
@@ -1,5 +1,5 @@
#
-# Tests for the basic lithium-ion models
+# Tests for the basic lead acid models
#
import pybamm
import unittest
diff --git a/tests/unit/test_models/test_full_battery_models/test_lead_acid/test_composite.py b/tests/unit/test_models/test_full_battery_models/test_lead_acid/test_composite.py
deleted file mode 100644
index 60050dac07..0000000000
--- a/tests/unit/test_models/test_full_battery_models/test_lead_acid/test_composite.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# Tests for the lead-acid composite models
-#
-import pybamm
-import unittest
-
-
-class TestLeadAcidComposite(unittest.TestCase):
- def test_well_posed(self):
- model = pybamm.lead_acid.Composite()
- model.check_well_posedness()
-
- def test_well_posed_with_convection(self):
- # this test is very slow with debug mode set to true
- pybamm.settings.debug_mode = False
- options = {"convection": "uniform transverse"}
- model = pybamm.lead_acid.Composite(options)
- model.check_well_posedness()
-
- options = {"dimensionality": 1, "convection": "full transverse"}
- model = pybamm.lead_acid.Composite(options)
- model.check_well_posedness()
- pybamm.settings.debug_mode = True
-
-
-class TestLeadAcidCompositeMultiDimensional(unittest.TestCase):
- def test_well_posed(self):
- model = pybamm.lead_acid.Composite(
- {"dimensionality": 1, "current collector": "potential pair"}
- )
- self.assertIsInstance(
- model.default_solver, (pybamm.ScikitsDaeSolver, pybamm.CasadiSolver)
- )
- model.check_well_posedness()
-
- model = pybamm.lead_acid.Composite(
- {"dimensionality": 2, "current collector": "potential pair"}
- )
- model.check_well_posedness()
-
- model = pybamm.lead_acid.Composite(
- {
- "dimensionality": 1,
- "current collector": "potential pair quite conductive",
- }
- )
- model.check_well_posedness()
-
- model = pybamm.lead_acid.Composite(
- {
- "dimensionality": 2,
- "current collector": "potential pair quite conductive",
- }
- )
- model.check_well_posedness()
-
-
-class TestLeadAcidCompositeWithSideReactions(unittest.TestCase):
- def test_well_posed_algebraic(self):
- options = {"surface form": "algebraic", "hydrolysis": "true"}
- model = pybamm.lead_acid.Composite(options)
- model.check_well_posedness()
- self.assertIsInstance(
- model.default_solver, (pybamm.ScikitsDaeSolver, pybamm.CasadiSolver)
- )
-
-
-class TestLeadAcidCompositeExtended(unittest.TestCase):
- def test_well_posed_differential_side_reactions(self):
- options = {"surface form": "differential", "hydrolysis": "true"}
- model = pybamm.lead_acid.CompositeExtended(options)
- model.check_well_posedness()
-
- def test_well_posed_average_correction(self):
- model = pybamm.lead_acid.CompositeAverageCorrection()
- model.check_well_posedness()
-
-
-if __name__ == "__main__":
- print("Add -v for more debug output")
- import sys
-
- if "-v" in sys.argv:
- debug = True
- pybamm.settings.debug_mode = True
- unittest.main()
diff --git a/tests/unit/test_models/test_full_battery_models/test_lead_acid/test_foqs.py b/tests/unit/test_models/test_full_battery_models/test_lead_acid/test_foqs.py
deleted file mode 100644
index 7dfe12cafe..0000000000
--- a/tests/unit/test_models/test_full_battery_models/test_lead_acid/test_foqs.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Tests for FOQS lead-acid model
-#
-import pybamm
-import unittest
-
-
-class TestLeadAcidFOQS(unittest.TestCase):
- def test_well_posed(self):
- # debug mode slows down the FOQS model a fair bit, so turn off
- pybamm.settings.debug_mode = False
- model = pybamm.lead_acid.FOQS()
- pybamm.settings.debug_mode = True
- model.check_well_posedness()
-
-
-class TestLeadAcidFOQSWithSideReactions(unittest.TestCase):
- def test_well_posed_differential(self):
- options = {"surface form": "differential", "hydrolysis": "true"}
- # debug mode slows down the FOQS model a fair bit, so turn off
- pybamm.settings.debug_mode = False
- model = pybamm.lead_acid.FOQS(options)
- pybamm.settings.debug_mode = True
- model.check_well_posedness()
-
-
-if __name__ == "__main__":
- print("Add -v for more debug output")
- import sys
-
- if "-v" in sys.argv:
- debug = True
- pybamm.settings.debug_mode = True
- unittest.main()
diff --git a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_half_cell_tests.py b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_half_cell_tests.py
index 1635c2ea41..24ccd55d79 100644
--- a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_half_cell_tests.py
+++ b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_half_cell_tests.py
@@ -55,6 +55,10 @@ def test_well_posed_reaction_limited_sei(self):
options = {"SEI": "reaction limited"}
self.check_well_posedness(options)
+ def test_well_posed_asymmetric_reaction_limited_sei(self):
+ options = {"SEI": "reaction limited (asymmetric)"}
+ self.check_well_posedness(options)
+
def test_well_posed_solvent_diffusion_limited_sei(self):
options = {"SEI": "solvent-diffusion limited"}
self.check_well_posedness(options)
@@ -71,6 +75,10 @@ def test_well_posed_ec_reaction_limited_sei(self):
options = {"SEI": "ec reaction limited"}
self.check_well_posedness(options)
+ def test_well_posed_asymmetric_ec_reaction_limited_sei(self):
+ options = {"SEI": "ec reaction limited (asymmetric)"}
+ self.check_well_posedness(options)
+
def test_well_posed_lumped_thermal(self):
options = {"thermal": "lumped"}
self.check_well_posedness(options)
diff --git a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_tests.py b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_tests.py
index c3188c2891..7dbe128221 100644
--- a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_tests.py
+++ b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/base_lithium_ion_tests.py
@@ -147,8 +147,22 @@ def test_well_posed_sei_reaction_limited(self):
options = {"SEI": "reaction limited"}
self.check_well_posedness(options)
+ def test_well_posed_asymmetric_sei_reaction_limited(self):
+ options = {"SEI": "reaction limited (asymmetric)"}
+ self.check_well_posedness(options)
+
def test_well_posed_sei_reaction_limited_average_film_resistance(self):
- options = {"SEI": "reaction limited", "SEI film resistance": "average"}
+ options = {
+ "SEI": "reaction limited",
+ "SEI film resistance": "average",
+ }
+ self.check_well_posedness(options)
+
+ def test_well_posed_asymmetric_sei_reaction_limited_average_film_resistance(self):
+ options = {
+ "SEI": "reaction limited (asymmetric)",
+ "SEI film resistance": "average",
+ }
self.check_well_posedness(options)
def test_well_posed_sei_solvent_diffusion_limited(self):
@@ -164,7 +178,17 @@ def test_well_posed_sei_interstitial_diffusion_limited(self):
self.check_well_posedness(options)
def test_well_posed_sei_ec_reaction_limited(self):
- options = {"SEI": "ec reaction limited", "SEI porosity change": "true"}
+ options = {
+ "SEI": "ec reaction limited",
+ "SEI porosity change": "true",
+ }
+ self.check_well_posedness(options)
+
+ def test_well_posed_sei_asymmetric_ec_reaction_limited(self):
+ options = {
+ "SEI": "ec reaction limited (asymmetric)",
+ "SEI porosity change": "true",
+ }
self.check_well_posedness(options)
def test_well_posed_mechanics_negative_cracking(self):
diff --git a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_mpm.py b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_mpm.py
index 0798d095c2..5c824164ea 100644
--- a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_mpm.py
+++ b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_mpm.py
@@ -141,7 +141,10 @@ def test_interstitial_diffusion_limited_not_implemented(self):
pybamm.lithium_ion.MPM(options)
def test_ec_reaction_limited_not_implemented(self):
- options = {"SEI": "ec reaction limited", "SEI porosity change": "true"}
+ options = {
+ "SEI": "ec reaction limited",
+ "SEI porosity change": "true",
+ }
with self.assertRaises(NotImplementedError):
pybamm.lithium_ion.MPM(options)
diff --git a/tests/unit/test_parameters/data_for_testing_2D.csv b/tests/unit/test_parameters/data_for_testing_2D.csv
new file mode 100644
index 0000000000..962c90bb81
--- /dev/null
+++ b/tests/unit/test_parameters/data_for_testing_2D.csv
@@ -0,0 +1,101 @@
+OCV [V],Temperature [degC],dUdT [V/K]
+3.1,-20,-0.0010576663320507884
+3.1,0,-0.001269199598460946
+3.1,20,-0.0014807328648711038
+3.1,40,-0.0015864994980761826
+3.15,-20,-0.0008144336478441427
+3.15,0,-0.0009773203774129712
+3.15,20,-0.0011402071069817998
+3.15,40,-0.001221650471766214
+3.1999999999999997,-20,-0.000607206498346391
+3.1999999999999997,0,-0.0007286477980156691
+3.1999999999999997,20,-0.0008500890976849473
+3.1999999999999997,40,-0.0009108097475195864
+3.2499999999999996,-20,-0.0004332237633991043
+3.2499999999999996,0,-0.0005198685160789251
+3.2499999999999996,20,-0.000606513268758746
+3.2499999999999996,40,-0.0006498356450986564
+3.2999999999999994,-20,-0.00028972432284410377
+3.2999999999999994,0,-0.00034766918741292453
+3.2999999999999994,20,-0.00040561405198174524
+3.2999999999999994,40,-0.00043458648426615565
+3.349999999999999,-20,-0.00017394705652298836
+3.349999999999999,0,-0.00020873646782758603
+3.349999999999999,20,-0.0002435258791321837
+3.349999999999999,40,-0.00026092058478448255
+3.399999999999999,-20,-8.313084427744033e-05
+3.399999999999999,0,-9.97570131329284e-05
+3.399999999999999,20,-0.00011638318198841646
+3.399999999999999,40,-0.0001246962664161605
+3.449999999999999,-20,-1.4514565949169667e-05
+3.449999999999999,0,-1.74174791390036e-05
+3.449999999999999,20,-2.032039232883753e-05
+3.449999999999999,40,-2.17718489237545e-05
+3.4999999999999987,-20,3.4662898620113625e-05
+3.4999999999999987,0,4.1595478344136346e-05
+3.4999999999999987,20,4.852805806815907e-05
+3.4999999999999987,40,5.199434793017044e-05
+3.5499999999999985,-20,6.716266958867179e-05
+3.5499999999999985,0,8.059520350640614e-05
+3.5499999999999985,20,9.40277374241405e-05
+3.5499999999999985,40,0.00010074400438300768
+3.5999999999999983,-20,8.574586711496135e-05
+3.5999999999999983,0,0.00010289504053795362
+3.5999999999999983,20,0.00012004421396094588
+3.5999999999999983,40,0.00012861880067244202
+3.649999999999998,-20,9.317361135710578e-05
+3.649999999999998,0,0.00011180833362852693
+3.649999999999998,20,0.00013044305589994808
+3.649999999999998,40,0.00013976041703565867
+3.699999999999998,-20,9.220702247364487e-05
+3.699999999999998,0,0.00011064842696837384
+3.699999999999998,20,0.0001290898314631028
+3.699999999999998,40,0.0001383105337104673
+3.749999999999998,-20,8.560722062261883e-05
+3.749999999999998,0,0.0001027286647471426
+3.749999999999998,20,0.00011985010887166635
+3.749999999999998,40,0.00012841083093392824
+3.7999999999999976,-20,7.613532596253969e-05
+3.7999999999999976,0,9.136239115504763e-05
+3.7999999999999976,20,0.00010658945634755556
+3.7999999999999976,40,0.00011420298894380954
+3.8499999999999974,-20,6.65524586516697e-05
+3.8499999999999974,0,7.986295038200363e-05
+3.8499999999999974,20,9.317344211233757e-05
+3.8499999999999974,40,9.982868797750455e-05
+3.8999999999999972,-20,5.96197388482711e-05
+3.8999999999999972,0,7.154368661792532e-05
+3.8999999999999972,20,8.346763438757953e-05
+3.8999999999999972,40,8.942960827240665e-05
+3.949999999999997,-20,5.809828671071715e-05
+3.949999999999997,0,6.971794405286058e-05
+3.949999999999997,20,8.133760139500401e-05
+3.949999999999997,40,8.714743006607573e-05
+3.999999999999997,-20,6.474922239715908e-05
+3.999999999999997,0,7.76990668765909e-05
+3.999999999999997,20,9.06489113560227e-05
+3.999999999999997,40,9.712383359573862e-05
+4.049999999999997,-20,8.233366606616443e-05
+4.049999999999997,0,9.880039927939732e-05
+4.049999999999997,20,0.0001152671324926302
+4.049999999999997,40,0.00012350049909924665
+4.099999999999996,-20,0.00011361273787588444
+4.099999999999996,0,0.00013633528545106132
+4.099999999999996,20,0.0001590578330262382
+4.099999999999996,40,0.00017041910681382666
+4.149999999999997,-20,0.0001613475579846091
+4.149999999999997,0,0.0001936170695815309
+4.149999999999997,20,0.0002258865811784527
+4.149999999999997,40,0.00024202133697691364
+4.199999999999996,-20,0.00022829924655071165
+4.199999999999996,0,0.000273959095860854
+4.199999999999996,20,0.0003196189451709963
+4.199999999999996,40,0.0003424488698260675
+4.2499999999999964,-20,0.0003172289237324821
+4.2499999999999964,0,0.00038067470847897856
+4.2499999999999964,20,0.00044412049322547494
+4.2499999999999964,40,0.0004758433855987232
+4.299999999999995,-20,0.00043089770968818275
+4.299999999999995,0,0.0005170772516258193
+4.299999999999995,20,0.0006032567935634558
+4.299999999999995,40,0.0006463465645322741
diff --git a/tests/unit/test_parameters/data_for_testing_3D.csv b/tests/unit/test_parameters/data_for_testing_3D.csv
new file mode 100644
index 0000000000..41f35ccad5
--- /dev/null
+++ b/tests/unit/test_parameters/data_for_testing_3D.csv
@@ -0,0 +1,3865 @@
+Temperature [degC],Current [A],SoC,R0 [Ohm]
+-20,-400,0.0,0.002247605536977195
+-20,-400,0.05,0.0021490566788174253
+-20,-400,0.1,0.0020608813846744738
+-20,-400,0.15000000000000002,0.001983079654548341
+-20,-400,0.2,0.0019156514884390249
+-20,-400,0.25,0.0018585968863465267
+-20,-400,0.30000000000000004,0.0018119158482708465
+-20,-400,0.35000000000000003,0.001775608374211984
+-20,-400,0.4,0.0017496744641699394
+-20,-400,0.45,0.001734114118144713
+-20,-400,0.5,0.0017289273361363038
+-20,-400,0.55,0.0017341141181447133
+-20,-400,0.6000000000000001,0.0017496744641699394
+-20,-400,0.65,0.001775608374211984
+-20,-400,0.7000000000000001,0.0018119158482708465
+-20,-400,0.75,0.0018585968863465267
+-20,-400,0.8,0.0019156514884390249
+-20,-400,0.8500000000000001,0.001983079654548341
+-20,-400,0.9,0.0020608813846744738
+-20,-400,0.9500000000000001,0.0021490566788174258
+-20,-400,1.0,0.002247605536977195
+-20,-350,0.0,0.0022366948304870147
+-20,-350,0.05,0.0021386243648425832
+-20,-350,0.1,0.002050877106108093
+-20,-350,0.15000000000000002,0.0019734530542835425
+-20,-350,0.2,0.001906352209368932
+-20,-350,0.25,0.0018495745713642616
+-20,-350,0.30000000000000004,0.0018031201402695315
+-20,-350,0.35000000000000003,0.001766988916084741
+-20,-350,0.4,0.001741180898809891
+-20,-350,0.45,0.001725696088444981
+-20,-350,0.5,0.001720534484990011
+-20,-350,0.55,0.0017256960884449815
+-20,-350,0.6000000000000001,0.001741180898809891
+-20,-350,0.65,0.001766988916084741
+-20,-350,0.7000000000000001,0.0018031201402695315
+-20,-350,0.75,0.0018495745713642616
+-20,-350,0.8,0.001906352209368932
+-20,-350,0.8500000000000001,0.0019734530542835425
+-20,-350,0.9,0.002050877106108093
+-20,-350,0.9500000000000001,0.0021386243648425837
+-20,-350,1.0,0.0022366948304870147
+-20,-300,0.0,0.0022257841239968343
+-20,-300,0.05,0.0021281920508677415
+-20,-300,0.1,0.0020408728275417122
+-20,-300,0.15000000000000002,0.001963826454018745
+-20,-300,0.2,0.00189705293029884
+-20,-300,0.25,0.001840552256381997
+-20,-300,0.30000000000000004,0.0017943244322682168
+-20,-300,0.35000000000000003,0.0017583694579574986
+-20,-300,0.4,0.001732687333449843
+-20,-300,0.45,0.0017172780587452496
+-20,-300,0.5,0.0017121416338437183
+-20,-300,0.55,0.00171727805874525
+-20,-300,0.6000000000000001,0.001732687333449843
+-20,-300,0.65,0.0017583694579574986
+-20,-300,0.7000000000000001,0.0017943244322682168
+-20,-300,0.75,0.001840552256381997
+-20,-300,0.8,0.00189705293029884
+-20,-300,0.8500000000000001,0.001963826454018745
+-20,-300,0.9,0.0020408728275417122
+-20,-300,0.9500000000000001,0.002128192050867742
+-20,-300,1.0,0.0022257841239968343
+-20,-250,0.0,0.002214873417506653
+-20,-250,0.05,0.0021177597368928994
+-20,-250,0.1,0.002030868548975331
+-20,-250,0.15000000000000002,0.001954199853753947
+-20,-250,0.2,0.0018877536512287474
+-20,-250,0.25,0.0018315299413997324
+-20,-250,0.30000000000000004,0.0017855287242669019
+-20,-250,0.35000000000000003,0.001749749999830256
+-20,-250,0.4,0.0017241937680897946
+-20,-250,0.45,0.0017088600290455177
+-20,-250,0.5,0.0017037487826974255
+-20,-250,0.55,0.0017088600290455181
+-20,-250,0.6000000000000001,0.0017241937680897946
+-20,-250,0.65,0.001749749999830256
+-20,-250,0.7000000000000001,0.0017855287242669019
+-20,-250,0.75,0.0018315299413997324
+-20,-250,0.8,0.0018877536512287474
+-20,-250,0.8500000000000001,0.001954199853753947
+-20,-250,0.9,0.002030868548975331
+-20,-250,0.9500000000000001,0.0021177597368929
+-20,-250,1.0,0.002214873417506653
+-20,-200,0.0,0.002203962711016473
+-20,-200,0.05,0.002107327422918058
+-20,-200,0.1,0.0020208642704089503
+-20,-200,0.15000000000000002,0.0019445732534891496
+-20,-200,0.2,0.0018784543721586553
+-20,-200,0.25,0.001822507626417468
+-20,-200,0.30000000000000004,0.0017767330162655874
+-20,-200,0.35000000000000003,0.0017411305417030136
+-20,-200,0.4,0.0017157002027297465
+-20,-200,0.45,0.0017004419993457865
+-20,-200,0.5,0.001695355931551133
+-20,-200,0.55,0.001700441999345787
+-20,-200,0.6000000000000001,0.0017157002027297465
+-20,-200,0.65,0.0017411305417030136
+-20,-200,0.7000000000000001,0.0017767330162655874
+-20,-200,0.75,0.001822507626417468
+-20,-200,0.8,0.0018784543721586553
+-20,-200,0.8500000000000001,0.0019445732534891496
+-20,-200,0.9,0.0020208642704089503
+-20,-200,0.9500000000000001,0.0021073274229180586
+-20,-200,1.0,0.002203962711016473
+-20,-150,0.0,0.002193052004526292
+-20,-150,0.05,0.002096895108943216
+-20,-150,0.1,0.002010859991842569
+-20,-150,0.15000000000000002,0.0019349466532243517
+-20,-150,0.2,0.0018691550930885628
+-20,-150,0.25,0.0018134853114352028
+-20,-150,0.30000000000000004,0.0017679373082642722
+-20,-150,0.35000000000000003,0.0017325110835757704
+-20,-150,0.4,0.001707206637369698
+-20,-150,0.45,0.0016920239696460546
+-20,-150,0.5,0.0016869630804048398
+-20,-150,0.55,0.001692023969646055
+-20,-150,0.6000000000000001,0.001707206637369698
+-20,-150,0.65,0.0017325110835757704
+-20,-150,0.7000000000000001,0.0017679373082642722
+-20,-150,0.75,0.0018134853114352028
+-20,-150,0.8,0.0018691550930885628
+-20,-150,0.8500000000000001,0.0019349466532243517
+-20,-150,0.9,0.002010859991842569
+-20,-150,0.9500000000000001,0.0020968951089432165
+-20,-150,1.0,0.002193052004526292
+-20,-100,0.0,0.0021821412980361117
+-20,-100,0.05,0.0020864627949683744
+-20,-100,0.1,0.0020008557132761883
+-20,-100,0.15000000000000002,0.001925320052959554
+-20,-100,0.2,0.0018598558140184706
+-20,-100,0.25,0.0018044629964529383
+-20,-100,0.30000000000000004,0.0017591416002629577
+-20,-100,0.35000000000000003,0.001723891625448528
+-20,-100,0.4,0.0016987130720096501
+-20,-100,0.45,0.0016836059399463232
+-20,-100,0.5,0.0016785702292585474
+-20,-100,0.55,0.0016836059399463234
+-20,-100,0.6000000000000001,0.0016987130720096501
+-20,-100,0.65,0.001723891625448528
+-20,-100,0.7000000000000001,0.0017591416002629577
+-20,-100,0.75,0.0018044629964529383
+-20,-100,0.8,0.0018598558140184706
+-20,-100,0.8500000000000001,0.001925320052959554
+-20,-100,0.9,0.0020008557132761883
+-20,-100,0.9500000000000001,0.0020864627949683744
+-20,-100,1.0,0.0021821412980361117
+-20,-50,0.0,0.0021712305915459313
+-20,-50,0.05,0.0020760304809935323
+-20,-50,0.1,0.0019908514347098073
+-20,-50,0.15000000000000002,0.0019156934526947562
+-20,-50,0.2,0.001850556534948378
+-20,-50,0.25,0.0017954406814706737
+-20,-50,0.30000000000000004,0.0017503458922616428
+-20,-50,0.35000000000000003,0.0017152721673212854
+-20,-50,0.4,0.0016902195066496016
+-20,-50,0.45,0.0016751879102465915
+-20,-50,0.5,0.0016701773781122545
+-20,-50,0.55,0.001675187910246592
+-20,-50,0.6000000000000001,0.0016902195066496016
+-20,-50,0.65,0.0017152721673212854
+-20,-50,0.7000000000000001,0.0017503458922616428
+-20,-50,0.75,0.0017954406814706737
+-20,-50,0.8,0.001850556534948378
+-20,-50,0.8500000000000001,0.0019156934526947562
+-20,-50,0.9,0.0019908514347098073
+-20,-50,0.9500000000000001,0.0020760304809935327
+-20,-50,1.0,0.0021712305915459313
+-20,0,0.0,0.002160319885055751
+-20,0,0.05,0.00206559816701869
+-20,0,0.1,0.0019808471561434263
+-20,0,0.15000000000000002,0.0019060668524299583
+-20,0,0.2,0.001841257255878286
+-20,0,0.25,0.0017864183664884088
+-20,0,0.30000000000000004,0.001741550184260328
+-20,0,0.35000000000000003,0.0017066527091940426
+-20,0,0.4,0.0016817259412895535
+-20,0,0.45,0.0016667698805468596
+-20,0,0.5,0.0016617845269659617
+-20,0,0.55,0.00166676988054686
+-20,0,0.6000000000000001,0.0016817259412895535
+-20,0,0.65,0.0017066527091940426
+-20,0,0.7000000000000001,0.001741550184260328
+-20,0,0.75,0.0017864183664884088
+-20,0,0.8,0.001841257255878286
+-20,0,0.8500000000000001,0.0019060668524299583
+-20,0,0.9,0.0019808471561434263
+-20,0,0.9500000000000001,0.0020655981670186906
+-20,0,1.0,0.002160319885055751
+-20,50,0.0,0.0021712305915459313
+-20,50,0.05,0.0020760304809935323
+-20,50,0.1,0.0019908514347098073
+-20,50,0.15000000000000002,0.0019156934526947562
+-20,50,0.2,0.001850556534948378
+-20,50,0.25,0.0017954406814706737
+-20,50,0.30000000000000004,0.0017503458922616428
+-20,50,0.35000000000000003,0.0017152721673212854
+-20,50,0.4,0.0016902195066496016
+-20,50,0.45,0.0016751879102465915
+-20,50,0.5,0.0016701773781122545
+-20,50,0.55,0.001675187910246592
+-20,50,0.6000000000000001,0.0016902195066496016
+-20,50,0.65,0.0017152721673212854
+-20,50,0.7000000000000001,0.0017503458922616428
+-20,50,0.75,0.0017954406814706737
+-20,50,0.8,0.001850556534948378
+-20,50,0.8500000000000001,0.0019156934526947562
+-20,50,0.9,0.0019908514347098073
+-20,50,0.9500000000000001,0.0020760304809935327
+-20,50,1.0,0.0021712305915459313
+-20,100,0.0,0.0021821412980361117
+-20,100,0.05,0.0020864627949683744
+-20,100,0.1,0.0020008557132761883
+-20,100,0.15000000000000002,0.001925320052959554
+-20,100,0.2,0.0018598558140184706
+-20,100,0.25,0.0018044629964529383
+-20,100,0.30000000000000004,0.0017591416002629577
+-20,100,0.35000000000000003,0.001723891625448528
+-20,100,0.4,0.0016987130720096501
+-20,100,0.45,0.0016836059399463232
+-20,100,0.5,0.0016785702292585474
+-20,100,0.55,0.0016836059399463234
+-20,100,0.6000000000000001,0.0016987130720096501
+-20,100,0.65,0.001723891625448528
+-20,100,0.7000000000000001,0.0017591416002629577
+-20,100,0.75,0.0018044629964529383
+-20,100,0.8,0.0018598558140184706
+-20,100,0.8500000000000001,0.001925320052959554
+-20,100,0.9,0.0020008557132761883
+-20,100,0.9500000000000001,0.0020864627949683744
+-20,100,1.0,0.0021821412980361117
+-20,150,0.0,0.002193052004526292
+-20,150,0.05,0.002096895108943216
+-20,150,0.1,0.002010859991842569
+-20,150,0.15000000000000002,0.0019349466532243517
+-20,150,0.2,0.0018691550930885628
+-20,150,0.25,0.0018134853114352028
+-20,150,0.30000000000000004,0.0017679373082642722
+-20,150,0.35000000000000003,0.0017325110835757704
+-20,150,0.4,0.001707206637369698
+-20,150,0.45,0.0016920239696460546
+-20,150,0.5,0.0016869630804048398
+-20,150,0.55,0.001692023969646055
+-20,150,0.6000000000000001,0.001707206637369698
+-20,150,0.65,0.0017325110835757704
+-20,150,0.7000000000000001,0.0017679373082642722
+-20,150,0.75,0.0018134853114352028
+-20,150,0.8,0.0018691550930885628
+-20,150,0.8500000000000001,0.0019349466532243517
+-20,150,0.9,0.002010859991842569
+-20,150,0.9500000000000001,0.0020968951089432165
+-20,150,1.0,0.002193052004526292
+-20,200,0.0,0.002203962711016473
+-20,200,0.05,0.002107327422918058
+-20,200,0.1,0.0020208642704089503
+-20,200,0.15000000000000002,0.0019445732534891496
+-20,200,0.2,0.0018784543721586553
+-20,200,0.25,0.001822507626417468
+-20,200,0.30000000000000004,0.0017767330162655874
+-20,200,0.35000000000000003,0.0017411305417030136
+-20,200,0.4,0.0017157002027297465
+-20,200,0.45,0.0017004419993457865
+-20,200,0.5,0.001695355931551133
+-20,200,0.55,0.001700441999345787
+-20,200,0.6000000000000001,0.0017157002027297465
+-20,200,0.65,0.0017411305417030136
+-20,200,0.7000000000000001,0.0017767330162655874
+-20,200,0.75,0.001822507626417468
+-20,200,0.8,0.0018784543721586553
+-20,200,0.8500000000000001,0.0019445732534891496
+-20,200,0.9,0.0020208642704089503
+-20,200,0.9500000000000001,0.0021073274229180586
+-20,200,1.0,0.002203962711016473
+-20,250,0.0,0.002214873417506653
+-20,250,0.05,0.0021177597368928994
+-20,250,0.1,0.002030868548975331
+-20,250,0.15000000000000002,0.001954199853753947
+-20,250,0.2,0.0018877536512287474
+-20,250,0.25,0.0018315299413997324
+-20,250,0.30000000000000004,0.0017855287242669019
+-20,250,0.35000000000000003,0.001749749999830256
+-20,250,0.4,0.0017241937680897946
+-20,250,0.45,0.0017088600290455177
+-20,250,0.5,0.0017037487826974255
+-20,250,0.55,0.0017088600290455181
+-20,250,0.6000000000000001,0.0017241937680897946
+-20,250,0.65,0.001749749999830256
+-20,250,0.7000000000000001,0.0017855287242669019
+-20,250,0.75,0.0018315299413997324
+-20,250,0.8,0.0018877536512287474
+-20,250,0.8500000000000001,0.001954199853753947
+-20,250,0.9,0.002030868548975331
+-20,250,0.9500000000000001,0.0021177597368929
+-20,250,1.0,0.002214873417506653
+-20,300,0.0,0.0022257841239968343
+-20,300,0.05,0.0021281920508677415
+-20,300,0.1,0.0020408728275417122
+-20,300,0.15000000000000002,0.001963826454018745
+-20,300,0.2,0.00189705293029884
+-20,300,0.25,0.001840552256381997
+-20,300,0.30000000000000004,0.0017943244322682168
+-20,300,0.35000000000000003,0.0017583694579574986
+-20,300,0.4,0.001732687333449843
+-20,300,0.45,0.0017172780587452496
+-20,300,0.5,0.0017121416338437183
+-20,300,0.55,0.00171727805874525
+-20,300,0.6000000000000001,0.001732687333449843
+-20,300,0.65,0.0017583694579574986
+-20,300,0.7000000000000001,0.0017943244322682168
+-20,300,0.75,0.001840552256381997
+-20,300,0.8,0.00189705293029884
+-20,300,0.8500000000000001,0.001963826454018745
+-20,300,0.9,0.0020408728275417122
+-20,300,0.9500000000000001,0.002128192050867742
+-20,300,1.0,0.0022257841239968343
+-20,350,0.0,0.0022366948304870147
+-20,350,0.05,0.0021386243648425832
+-20,350,0.1,0.002050877106108093
+-20,350,0.15000000000000002,0.0019734530542835425
+-20,350,0.2,0.001906352209368932
+-20,350,0.25,0.0018495745713642616
+-20,350,0.30000000000000004,0.0018031201402695315
+-20,350,0.35000000000000003,0.001766988916084741
+-20,350,0.4,0.001741180898809891
+-20,350,0.45,0.001725696088444981
+-20,350,0.5,0.001720534484990011
+-20,350,0.55,0.0017256960884449815
+-20,350,0.6000000000000001,0.001741180898809891
+-20,350,0.65,0.001766988916084741
+-20,350,0.7000000000000001,0.0018031201402695315
+-20,350,0.75,0.0018495745713642616
+-20,350,0.8,0.001906352209368932
+-20,350,0.8500000000000001,0.0019734530542835425
+-20,350,0.9,0.002050877106108093
+-20,350,0.9500000000000001,0.0021386243648425837
+-20,350,1.0,0.0022366948304870147
+-20,400,0.0,0.002247605536977195
+-20,400,0.05,0.0021490566788174253
+-20,400,0.1,0.0020608813846744738
+-20,400,0.15000000000000002,0.001983079654548341
+-20,400,0.2,0.0019156514884390249
+-20,400,0.25,0.0018585968863465267
+-20,400,0.30000000000000004,0.0018119158482708465
+-20,400,0.35000000000000003,0.001775608374211984
+-20,400,0.4,0.0017496744641699394
+-20,400,0.45,0.001734114118144713
+-20,400,0.5,0.0017289273361363038
+-20,400,0.55,0.0017341141181447133
+-20,400,0.6000000000000001,0.0017496744641699394
+-20,400,0.65,0.001775608374211984
+-20,400,0.7000000000000001,0.0018119158482708465
+-20,400,0.75,0.0018585968863465267
+-20,400,0.8,0.0019156514884390249
+-20,400,0.8500000000000001,0.001983079654548341
+-20,400,0.9,0.0020608813846744738
+-20,400,0.9500000000000001,0.0021490566788174258
+-20,400,1.0,0.002247605536977195
+-20,450,0.0,0.0022585162434673755
+-20,450,0.05,0.0021594889927922674
+-20,450,0.1,0.0020708856632408548
+-20,450,0.15000000000000002,0.0019927062548131384
+-20,450,0.2,0.001924950767509117
+-20,450,0.25,0.0018676192013287911
+-20,450,0.30000000000000004,0.001820711556272161
+-20,450,0.35000000000000003,0.0017842278323392264
+-20,450,0.4,0.0017581680295299879
+-20,450,0.45,0.0017425321478444441
+-20,450,0.5,0.0017373201872825962
+-20,450,0.55,0.0017425321478444446
+-20,450,0.6000000000000001,0.0017581680295299879
+-20,450,0.65,0.0017842278323392264
+-20,450,0.7000000000000001,0.001820711556272161
+-20,450,0.75,0.0018676192013287911
+-20,450,0.8,0.001924950767509117
+-20,450,0.8500000000000001,0.0019927062548131384
+-20,450,0.9,0.0020708856632408548
+-20,450,0.9500000000000001,0.0021594889927922674
+-20,450,1.0,0.0022585162434673755
+-20,500,0.0,0.0022694269499575564
+-20,500,0.05,0.0021699213067671095
+-20,500,0.1,0.0020808899418072358
+-20,500,0.15000000000000002,0.0020023328550779363
+-20,500,0.2,0.0019342500465792094
+-20,500,0.25,0.0018766415163110558
+-20,500,0.30000000000000004,0.0018295072642734761
+-20,500,0.35000000000000003,0.0017928472904664692
+-20,500,0.4,0.0017666615948900362
+-20,500,0.45,0.001750950177544176
+-20,500,0.5,0.0017457130384288895
+-20,500,0.55,0.0017509501775441764
+-20,500,0.6000000000000001,0.0017666615948900362
+-20,500,0.65,0.0017928472904664692
+-20,500,0.7000000000000001,0.0018295072642734761
+-20,500,0.75,0.0018766415163110558
+-20,500,0.8,0.0019342500465792094
+-20,500,0.8500000000000001,0.0020023328550779363
+-20,500,0.9,0.0020808899418072358
+-20,500,0.9500000000000001,0.0021699213067671095
+-20,500,1.0,0.0022694269499575564
+-20,550,0.0,0.0022803376564477363
+-20,550,0.05,0.002180353620741951
+-20,550,0.1,0.0020908942203736163
+-20,550,0.15000000000000002,0.002011959455342734
+-20,550,0.2,0.0019435493256493017
+-20,550,0.25,0.0018856638312933207
+-20,550,0.30000000000000004,0.0018383029722747906
+-20,550,0.35000000000000003,0.0018014667485937116
+-20,550,0.4,0.0017751551602500843
+-20,550,0.45,0.0017593682072439077
+-20,550,0.5,0.001754105889575182
+-20,550,0.55,0.0017593682072439079
+-20,550,0.6000000000000001,0.0017751551602500843
+-20,550,0.65,0.0018014667485937116
+-20,550,0.7000000000000001,0.0018383029722747906
+-20,550,0.75,0.0018856638312933207
+-20,550,0.8,0.0019435493256493017
+-20,550,0.8500000000000001,0.002011959455342734
+-20,550,0.9,0.0020908942203736163
+-20,550,0.9500000000000001,0.0021803536207419512
+-20,550,1.0,0.0022803376564477363
+-20,600,0.0,0.0022912483629379176
+-20,600,0.05,0.002190785934716793
+-20,600,0.1,0.0021008984989399977
+-20,600,0.15000000000000002,0.0020215860556075317
+-20,600,0.2,0.0019528486047193942
+-20,600,0.25,0.0018946861462755854
+-20,600,0.30000000000000004,0.0018470986802761056
+-20,600,0.35000000000000003,0.0018100862067209546
+-20,600,0.4,0.0017836487256101326
+-20,600,0.45,0.0017677862369436395
+-20,600,0.5,0.0017624987407214748
+-20,600,0.55,0.0017677862369436398
+-20,600,0.6000000000000001,0.0017836487256101326
+-20,600,0.65,0.0018100862067209546
+-20,600,0.7000000000000001,0.0018470986802761056
+-20,600,0.75,0.0018946861462755854
+-20,600,0.8,0.0019528486047193942
+-20,600,0.8500000000000001,0.0020215860556075317
+-20,600,0.9,0.0021008984989399977
+-20,600,0.9500000000000001,0.0021907859347167933
+-20,600,1.0,0.0022912483629379176
+-20,650,0.0,0.002302159069428098
+-20,650,0.05,0.0022012182486916346
+-20,650,0.1,0.0021109027775063783
+-20,650,0.15000000000000002,0.0020312126558723292
+-20,650,0.2,0.0019621478837894865
+-20,650,0.25,0.0019037084612578499
+-20,650,0.30000000000000004,0.0018558943882774203
+-20,650,0.35000000000000003,0.001818705664848197
+-20,650,0.4,0.0017921422909701807
+-20,650,0.45,0.0017762042666433706
+-20,650,0.5,0.0017708915918677676
+-20,650,0.55,0.001776204266643371
+-20,650,0.6000000000000001,0.0017921422909701807
+-20,650,0.65,0.001818705664848197
+-20,650,0.7000000000000001,0.0018558943882774203
+-20,650,0.75,0.0019037084612578499
+-20,650,0.8,0.0019621478837894865
+-20,650,0.8500000000000001,0.0020312126558723292
+-20,650,0.9,0.0021109027775063783
+-20,650,0.9500000000000001,0.002201218248691635
+-20,650,1.0,0.002302159069428098
+-20,700,0.0,0.0023130697759182785
+-20,700,0.05,0.0022116505626664767
+-20,700,0.1,0.0021209070560727597
+-20,700,0.15000000000000002,0.0020408392561371276
+-20,700,0.2,0.001971447162859579
+-20,700,0.25,0.0019127307762401146
+-20,700,0.30000000000000004,0.0018646900962787352
+-20,700,0.35000000000000003,0.0018273251229754398
+-20,700,0.4,0.001800635856330229
+-20,700,0.45,0.0017846222963431024
+-20,700,0.5,0.0017792844430140602
+-20,700,0.55,0.0017846222963431029
+-20,700,0.6000000000000001,0.001800635856330229
+-20,700,0.65,0.0018273251229754398
+-20,700,0.7000000000000001,0.0018646900962787352
+-20,700,0.75,0.0019127307762401146
+-20,700,0.8,0.001971447162859579
+-20,700,0.8500000000000001,0.0020408392561371276
+-20,700,0.9,0.0021209070560727597
+-20,700,0.9500000000000001,0.002211650562666477
+-20,700,1.0,0.0023130697759182785
+-10,-400,0.0,0.0015663626484783517
+-10,-400,0.05,0.0014976836708143007
+-10,-400,0.1,0.00143623405922015
+-10,-400,0.15000000000000002,0.0013820138136958994
+-10,-400,0.2,0.0013350229342415489
+-10,-400,0.25,0.0012952614208570983
+-10,-400,0.30000000000000004,0.0012627292735425482
+-10,-400,0.35000000000000003,0.0012374264922978976
+-10,-400,0.4,0.0012193530771231476
+-10,-400,0.45,0.0012085090280182975
+-10,-400,0.5,0.0012048943449833474
+-10,-400,0.55,0.0012085090280182977
+-10,-400,0.6000000000000001,0.0012193530771231476
+-10,-400,0.65,0.0012374264922978976
+-10,-400,0.7000000000000001,0.0012627292735425482
+-10,-400,0.75,0.0012952614208570983
+-10,-400,0.8,0.0013350229342415489
+-10,-400,0.8500000000000001,0.0013820138136958994
+-10,-400,0.9,0.00143623405922015
+-10,-400,0.9500000000000001,0.001497683670814301
+-10,-400,1.0,0.0015663626484783517
+-10,-350,0.0,0.001558758946301272
+-10,-350,0.05,0.0014904133617326778
+-10,-350,0.1,0.0014292620492239354
+-10,-350,0.15000000000000002,0.0013753050087750454
+-10,-350,0.2,0.0013285422403860074
+-10,-350,0.25,0.001288973744056821
+-10,-350,0.30000000000000004,0.001256599519787487
+-10,-350,0.35000000000000003,0.0012314195675780047
+-10,-350,0.4,0.0012134338874283748
+-10,-350,0.45,0.0012026424793385969
+-10,-350,0.5,0.001199045343308671
+-10,-350,0.55,0.001202642479338597
+-10,-350,0.6000000000000001,0.0012134338874283748
+-10,-350,0.65,0.0012314195675780047
+-10,-350,0.7000000000000001,0.001256599519787487
+-10,-350,0.75,0.001288973744056821
+-10,-350,0.8,0.0013285422403860074
+-10,-350,0.8500000000000001,0.0013753050087750454
+-10,-350,0.9,0.0014292620492239354
+-10,-350,0.9500000000000001,0.001490413361732678
+-10,-350,1.0,0.001558758946301272
+-10,-300,0.0,0.0015511552441241929
+-10,-300,0.05,0.001483143052651055
+-10,-300,0.1,0.0014222900392277214
+-10,-300,0.15000000000000002,0.001368596203854192
+-10,-300,0.2,0.0013220615465304659
+-10,-300,0.25,0.001282686067256544
+-10,-300,0.30000000000000004,0.0012504697660324264
+-10,-300,0.35000000000000003,0.0012254126428581122
+-10,-300,0.4,0.0012075146977336025
+-10,-300,0.45,0.0011967759306588965
+-10,-300,0.5,0.0011931963416339946
+-10,-300,0.55,0.001196775930658897
+-10,-300,0.6000000000000001,0.0012075146977336025
+-10,-300,0.65,0.0012254126428581122
+-10,-300,0.7000000000000001,0.0012504697660324264
+-10,-300,0.75,0.001282686067256544
+-10,-300,0.8,0.0013220615465304659
+-10,-300,0.8500000000000001,0.001368596203854192
+-10,-300,0.9,0.0014222900392277214
+-10,-300,0.9500000000000001,0.0014831430526510553
+-10,-300,1.0,0.0015511552441241929
+-10,-250,0.0,0.0015435515419471135
+-10,-250,0.05,0.0014758727435694322
+-10,-250,0.1,0.0014153180292315068
+-10,-250,0.15000000000000002,0.0013618873989333377
+-10,-250,0.2,0.0013155808526749242
+-10,-250,0.25,0.0012763983904562667
+-10,-250,0.30000000000000004,0.0012443400122773654
+-10,-250,0.35000000000000003,0.0012194057181382195
+-10,-250,0.4,0.0012015955080388297
+-10,-250,0.45,0.0011909093819791959
+-10,-250,0.5,0.001187347339959318
+-10,-250,0.55,0.001190909381979196
+-10,-250,0.6000000000000001,0.0012015955080388297
+-10,-250,0.65,0.0012194057181382195
+-10,-250,0.7000000000000001,0.0012443400122773654
+-10,-250,0.75,0.0012763983904562667
+-10,-250,0.8,0.0013155808526749242
+-10,-250,0.8500000000000001,0.0013618873989333377
+-10,-250,0.9,0.0014153180292315068
+-10,-250,0.9500000000000001,0.0014758727435694322
+-10,-250,1.0,0.0015435515419471135
+-10,-200,0.0,0.001535947839770034
+-10,-200,0.05,0.0014686024344878095
+-10,-200,0.1,0.0014083460192352926
+-10,-200,0.15000000000000002,0.001355178594012484
+-10,-200,0.2,0.0013091001588193829
+-10,-200,0.25,0.0012701107136559896
+-10,-200,0.30000000000000004,0.0012382102585223045
+-10,-200,0.35000000000000003,0.0012133987934183268
+-10,-200,0.4,0.0011956763183440574
+-10,-200,0.45,0.0011850428332994955
+-10,-200,0.5,0.0011814983382846416
+-10,-200,0.55,0.001185042833299496
+-10,-200,0.6000000000000001,0.0011956763183440574
+-10,-200,0.65,0.0012133987934183268
+-10,-200,0.7000000000000001,0.0012382102585223045
+-10,-200,0.75,0.0012701107136559896
+-10,-200,0.8,0.0013091001588193829
+-10,-200,0.8500000000000001,0.001355178594012484
+-10,-200,0.9,0.0014083460192352926
+-10,-200,0.9500000000000001,0.0014686024344878097
+-10,-200,1.0,0.001535947839770034
+-10,-150,0.0,0.0015283441375929547
+-10,-150,0.05,0.0014613321254061864
+-10,-150,0.1,0.0014013740092390782
+-10,-150,0.15000000000000002,0.00134846978909163
+-10,-150,0.2,0.0013026194649638412
+-10,-150,0.25,0.0012638230368557123
+-10,-150,0.30000000000000004,0.0012320805047672436
+-10,-150,0.35000000000000003,0.0012073918686984339
+-10,-150,0.4,0.0011897571286492846
+-10,-150,0.45,0.0011791762846197948
+-10,-150,0.5,0.0011756493366099651
+-10,-150,0.55,0.0011791762846197953
+-10,-150,0.6000000000000001,0.0011897571286492846
+-10,-150,0.65,0.0012073918686984339
+-10,-150,0.7000000000000001,0.0012320805047672436
+-10,-150,0.75,0.0012638230368557123
+-10,-150,0.8,0.0013026194649638412
+-10,-150,0.8500000000000001,0.00134846978909163
+-10,-150,0.9,0.0014013740092390782
+-10,-150,0.9500000000000001,0.0014613321254061866
+-10,-150,1.0,0.0015283441375929547
+-10,-100,0.0,0.0015207404354158755
+-10,-100,0.05,0.001454061816324564
+-10,-100,0.1,0.001394401999242864
+-10,-100,0.15000000000000002,0.0013417609841707761
+-10,-100,0.2,0.0012961387711082999
+-10,-100,0.25,0.0012575353600554353
+-10,-100,0.30000000000000004,0.0012259507510121827
+-10,-100,0.35000000000000003,0.0012013849439785414
+-10,-100,0.4,0.0011838379389545123
+-10,-100,0.45,0.0011733097359400944
+-10,-100,0.5,0.0011698003349352888
+-10,-100,0.55,0.0011733097359400949
+-10,-100,0.6000000000000001,0.0011838379389545123
+-10,-100,0.65,0.0012013849439785414
+-10,-100,0.7000000000000001,0.0012259507510121827
+-10,-100,0.75,0.0012575353600554353
+-10,-100,0.8,0.0012961387711082999
+-10,-100,0.8500000000000001,0.0013417609841707761
+-10,-100,0.9,0.001394401999242864
+-10,-100,0.9500000000000001,0.001454061816324564
+-10,-100,1.0,0.0015207404354158755
+-10,-50,0.0,0.001513136733238796
+-10,-50,0.05,0.001446791507242941
+-10,-50,0.1,0.0013874299892466498
+-10,-50,0.15000000000000002,0.0013350521792499224
+-10,-50,0.2,0.0012896580772527584
+-10,-50,0.25,0.001251247683255158
+-10,-50,0.30000000000000004,0.0012198209972571216
+-10,-50,0.35000000000000003,0.0011953780192586487
+-10,-50,0.4,0.0011779187492597396
+-10,-50,0.45,0.001167443187260394
+-10,-50,0.5,0.0011639513332606123
+-10,-50,0.55,0.0011674431872603943
+-10,-50,0.6000000000000001,0.0011779187492597396
+-10,-50,0.65,0.0011953780192586487
+-10,-50,0.7000000000000001,0.0012198209972571216
+-10,-50,0.75,0.001251247683255158
+-10,-50,0.8,0.0012896580772527584
+-10,-50,0.8500000000000001,0.0013350521792499224
+-10,-50,0.9,0.0013874299892466498
+-10,-50,0.9500000000000001,0.0014467915072429412
+-10,-50,1.0,0.001513136733238796
+-10,0,0.0,0.0015055330310617167
+-10,0,0.05,0.0014395211981613181
+-10,0,0.1,0.0013804579792504354
+-10,0,0.15000000000000002,0.0013283433743290685
+-10,0,0.2,0.0012831773833972167
+-10,0,0.25,0.001244960006454881
+-10,0,0.30000000000000004,0.0012136912435020608
+-10,0,0.35000000000000003,0.001189371094538756
+-10,0,0.4,0.0011719995595649672
+-10,0,0.45,0.0011615766385806934
+-10,0,0.5,0.0011581023315859358
+-10,0,0.55,0.0011615766385806939
+-10,0,0.6000000000000001,0.0011719995595649672
+-10,0,0.65,0.001189371094538756
+-10,0,0.7000000000000001,0.0012136912435020608
+-10,0,0.75,0.001244960006454881
+-10,0,0.8,0.0012831773833972167
+-10,0,0.8500000000000001,0.0013283433743290685
+-10,0,0.9,0.0013804579792504354
+-10,0,0.9500000000000001,0.0014395211981613183
+-10,0,1.0,0.0015055330310617167
+-10,50,0.0,0.001513136733238796
+-10,50,0.05,0.001446791507242941
+-10,50,0.1,0.0013874299892466498
+-10,50,0.15000000000000002,0.0013350521792499224
+-10,50,0.2,0.0012896580772527584
+-10,50,0.25,0.001251247683255158
+-10,50,0.30000000000000004,0.0012198209972571216
+-10,50,0.35000000000000003,0.0011953780192586487
+-10,50,0.4,0.0011779187492597396
+-10,50,0.45,0.001167443187260394
+-10,50,0.5,0.0011639513332606123
+-10,50,0.55,0.0011674431872603943
+-10,50,0.6000000000000001,0.0011779187492597396
+-10,50,0.65,0.0011953780192586487
+-10,50,0.7000000000000001,0.0012198209972571216
+-10,50,0.75,0.001251247683255158
+-10,50,0.8,0.0012896580772527584
+-10,50,0.8500000000000001,0.0013350521792499224
+-10,50,0.9,0.0013874299892466498
+-10,50,0.9500000000000001,0.0014467915072429412
+-10,50,1.0,0.001513136733238796
+-10,100,0.0,0.0015207404354158755
+-10,100,0.05,0.001454061816324564
+-10,100,0.1,0.001394401999242864
+-10,100,0.15000000000000002,0.0013417609841707761
+-10,100,0.2,0.0012961387711082999
+-10,100,0.25,0.0012575353600554353
+-10,100,0.30000000000000004,0.0012259507510121827
+-10,100,0.35000000000000003,0.0012013849439785414
+-10,100,0.4,0.0011838379389545123
+-10,100,0.45,0.0011733097359400944
+-10,100,0.5,0.0011698003349352888
+-10,100,0.55,0.0011733097359400949
+-10,100,0.6000000000000001,0.0011838379389545123
+-10,100,0.65,0.0012013849439785414
+-10,100,0.7000000000000001,0.0012259507510121827
+-10,100,0.75,0.0012575353600554353
+-10,100,0.8,0.0012961387711082999
+-10,100,0.8500000000000001,0.0013417609841707761
+-10,100,0.9,0.001394401999242864
+-10,100,0.9500000000000001,0.001454061816324564
+-10,100,1.0,0.0015207404354158755
+-10,150,0.0,0.0015283441375929547
+-10,150,0.05,0.0014613321254061864
+-10,150,0.1,0.0014013740092390782
+-10,150,0.15000000000000002,0.00134846978909163
+-10,150,0.2,0.0013026194649638412
+-10,150,0.25,0.0012638230368557123
+-10,150,0.30000000000000004,0.0012320805047672436
+-10,150,0.35000000000000003,0.0012073918686984339
+-10,150,0.4,0.0011897571286492846
+-10,150,0.45,0.0011791762846197948
+-10,150,0.5,0.0011756493366099651
+-10,150,0.55,0.0011791762846197953
+-10,150,0.6000000000000001,0.0011897571286492846
+-10,150,0.65,0.0012073918686984339
+-10,150,0.7000000000000001,0.0012320805047672436
+-10,150,0.75,0.0012638230368557123
+-10,150,0.8,0.0013026194649638412
+-10,150,0.8500000000000001,0.00134846978909163
+-10,150,0.9,0.0014013740092390782
+-10,150,0.9500000000000001,0.0014613321254061866
+-10,150,1.0,0.0015283441375929547
+-10,200,0.0,0.001535947839770034
+-10,200,0.05,0.0014686024344878095
+-10,200,0.1,0.0014083460192352926
+-10,200,0.15000000000000002,0.001355178594012484
+-10,200,0.2,0.0013091001588193829
+-10,200,0.25,0.0012701107136559896
+-10,200,0.30000000000000004,0.0012382102585223045
+-10,200,0.35000000000000003,0.0012133987934183268
+-10,200,0.4,0.0011956763183440574
+-10,200,0.45,0.0011850428332994955
+-10,200,0.5,0.0011814983382846416
+-10,200,0.55,0.001185042833299496
+-10,200,0.6000000000000001,0.0011956763183440574
+-10,200,0.65,0.0012133987934183268
+-10,200,0.7000000000000001,0.0012382102585223045
+-10,200,0.75,0.0012701107136559896
+-10,200,0.8,0.0013091001588193829
+-10,200,0.8500000000000001,0.001355178594012484
+-10,200,0.9,0.0014083460192352926
+-10,200,0.9500000000000001,0.0014686024344878097
+-10,200,1.0,0.001535947839770034
+-10,250,0.0,0.0015435515419471135
+-10,250,0.05,0.0014758727435694322
+-10,250,0.1,0.0014153180292315068
+-10,250,0.15000000000000002,0.0013618873989333377
+-10,250,0.2,0.0013155808526749242
+-10,250,0.25,0.0012763983904562667
+-10,250,0.30000000000000004,0.0012443400122773654
+-10,250,0.35000000000000003,0.0012194057181382195
+-10,250,0.4,0.0012015955080388297
+-10,250,0.45,0.0011909093819791959
+-10,250,0.5,0.001187347339959318
+-10,250,0.55,0.001190909381979196
+-10,250,0.6000000000000001,0.0012015955080388297
+-10,250,0.65,0.0012194057181382195
+-10,250,0.7000000000000001,0.0012443400122773654
+-10,250,0.75,0.0012763983904562667
+-10,250,0.8,0.0013155808526749242
+-10,250,0.8500000000000001,0.0013618873989333377
+-10,250,0.9,0.0014153180292315068
+-10,250,0.9500000000000001,0.0014758727435694322
+-10,250,1.0,0.0015435515419471135
+-10,300,0.0,0.0015511552441241929
+-10,300,0.05,0.001483143052651055
+-10,300,0.1,0.0014222900392277214
+-10,300,0.15000000000000002,0.001368596203854192
+-10,300,0.2,0.0013220615465304659
+-10,300,0.25,0.001282686067256544
+-10,300,0.30000000000000004,0.0012504697660324264
+-10,300,0.35000000000000003,0.0012254126428581122
+-10,300,0.4,0.0012075146977336025
+-10,300,0.45,0.0011967759306588965
+-10,300,0.5,0.0011931963416339946
+-10,300,0.55,0.001196775930658897
+-10,300,0.6000000000000001,0.0012075146977336025
+-10,300,0.65,0.0012254126428581122
+-10,300,0.7000000000000001,0.0012504697660324264
+-10,300,0.75,0.001282686067256544
+-10,300,0.8,0.0013220615465304659
+-10,300,0.8500000000000001,0.001368596203854192
+-10,300,0.9,0.0014222900392277214
+-10,300,0.9500000000000001,0.0014831430526510553
+-10,300,1.0,0.0015511552441241929
+-10,350,0.0,0.001558758946301272
+-10,350,0.05,0.0014904133617326778
+-10,350,0.1,0.0014292620492239354
+-10,350,0.15000000000000002,0.0013753050087750454
+-10,350,0.2,0.0013285422403860074
+-10,350,0.25,0.001288973744056821
+-10,350,0.30000000000000004,0.001256599519787487
+-10,350,0.35000000000000003,0.0012314195675780047
+-10,350,0.4,0.0012134338874283748
+-10,350,0.45,0.0012026424793385969
+-10,350,0.5,0.001199045343308671
+-10,350,0.55,0.001202642479338597
+-10,350,0.6000000000000001,0.0012134338874283748
+-10,350,0.65,0.0012314195675780047
+-10,350,0.7000000000000001,0.001256599519787487
+-10,350,0.75,0.001288973744056821
+-10,350,0.8,0.0013285422403860074
+-10,350,0.8500000000000001,0.0013753050087750454
+-10,350,0.9,0.0014292620492239354
+-10,350,0.9500000000000001,0.001490413361732678
+-10,350,1.0,0.001558758946301272
+-10,400,0.0,0.0015663626484783517
+-10,400,0.05,0.0014976836708143007
+-10,400,0.1,0.00143623405922015
+-10,400,0.15000000000000002,0.0013820138136958994
+-10,400,0.2,0.0013350229342415489
+-10,400,0.25,0.0012952614208570983
+-10,400,0.30000000000000004,0.0012627292735425482
+-10,400,0.35000000000000003,0.0012374264922978976
+-10,400,0.4,0.0012193530771231476
+-10,400,0.45,0.0012085090280182975
+-10,400,0.5,0.0012048943449833474
+-10,400,0.55,0.0012085090280182977
+-10,400,0.6000000000000001,0.0012193530771231476
+-10,400,0.65,0.0012374264922978976
+-10,400,0.7000000000000001,0.0012627292735425482
+-10,400,0.75,0.0012952614208570983
+-10,400,0.8,0.0013350229342415489
+-10,400,0.8500000000000001,0.0013820138136958994
+-10,400,0.9,0.00143623405922015
+-10,400,0.9500000000000001,0.001497683670814301
+-10,400,1.0,0.0015663626484783517
+-10,450,0.0,0.0015739663506554311
+-10,450,0.05,0.0015049539798959234
+-10,450,0.1,0.0014432060692163642
+-10,450,0.15000000000000002,0.0013887226186167533
+-10,450,0.2,0.0013415036280970901
+-10,450,0.25,0.0013015490976573754
+-10,450,0.30000000000000004,0.001268859027297609
+-10,450,0.35000000000000003,0.0012434334170177903
+-10,450,0.4,0.00122527226681792
+-10,450,0.45,0.0012143755766979977
+-10,450,0.5,0.0012107433466580237
+-10,450,0.55,0.0012143755766979981
+-10,450,0.6000000000000001,0.00122527226681792
+-10,450,0.65,0.0012434334170177903
+-10,450,0.7000000000000001,0.001268859027297609
+-10,450,0.75,0.0013015490976573754
+-10,450,0.8,0.0013415036280970901
+-10,450,0.8500000000000001,0.0013887226186167533
+-10,450,0.9,0.0014432060692163642
+-10,450,0.9500000000000001,0.0015049539798959238
+-10,450,1.0,0.0015739663506554311
+-10,500,0.0,0.0015815700528325105
+-10,500,0.05,0.0015122242889775463
+-10,500,0.1,0.0014501780792125787
+-10,500,0.15000000000000002,0.0013954314235376073
+-10,500,0.2,0.0013479843219526319
+-10,500,0.25,0.0013078367744576527
+-10,500,0.30000000000000004,0.00127498878105267
+-10,500,0.35000000000000003,0.0012494403417376832
+-10,500,0.4,0.0012311914565126926
+-10,500,0.45,0.0012202421253776983
+-10,500,0.5,0.0012165923483327004
+-10,500,0.55,0.0012202421253776987
+-10,500,0.6000000000000001,0.0012311914565126926
+-10,500,0.65,0.0012494403417376832
+-10,500,0.7000000000000001,0.00127498878105267
+-10,500,0.75,0.0013078367744576527
+-10,500,0.8,0.0013479843219526319
+-10,500,0.8500000000000001,0.0013954314235376073
+-10,500,0.9,0.0014501780792125787
+-10,500,0.9500000000000001,0.0015122242889775465
+-10,500,1.0,0.0015815700528325105
+-10,550,0.0,0.0015891737550095897
+-10,550,0.05,0.0015194945980591692
+-10,550,0.1,0.0014571500892087929
+-10,550,0.15000000000000002,0.001402140228458461
+-10,550,0.2,0.0013544650158081734
+-10,550,0.25,0.0013141244512579297
+-10,550,0.30000000000000004,0.0012811185348077308
+-10,550,0.35000000000000003,0.0012554472664575757
+-10,550,0.4,0.0012371106462074652
+-10,550,0.45,0.0012261086740573987
+-10,550,0.5,0.0012224413500073767
+-10,550,0.55,0.0012261086740573991
+-10,550,0.6000000000000001,0.0012371106462074652
+-10,550,0.65,0.0012554472664575757
+-10,550,0.7000000000000001,0.0012811185348077308
+-10,550,0.75,0.0013141244512579297
+-10,550,0.8,0.0013544650158081734
+-10,550,0.8500000000000001,0.001402140228458461
+-10,550,0.9,0.0014571500892087929
+-10,550,0.9500000000000001,0.0015194945980591694
+-10,550,1.0,0.0015891737550095897
+-10,600,0.0,0.0015967774571866693
+-10,600,0.05,0.001526764907140792
+-10,600,0.1,0.0014641220992050073
+-10,600,0.15000000000000002,0.0014088490333793151
+-10,600,0.2,0.0013609457096637149
+-10,600,0.25,0.0013204121280582072
+-10,600,0.30000000000000004,0.0012872482885627919
+-10,600,0.35000000000000003,0.0012614541911774683
+-10,600,0.4,0.001243029835902238
+-10,600,0.45,0.0012319752227370993
+-10,600,0.5,0.0012282903516820532
+-10,600,0.55,0.0012319752227370996
+-10,600,0.6000000000000001,0.001243029835902238
+-10,600,0.65,0.0012614541911774683
+-10,600,0.7000000000000001,0.0012872482885627919
+-10,600,0.75,0.0013204121280582072
+-10,600,0.8,0.0013609457096637149
+-10,600,0.8500000000000001,0.0014088490333793151
+-10,600,0.9,0.0014641220992050073
+-10,600,0.9500000000000001,0.0015267649071407923
+-10,600,1.0,0.0015967774571866693
+-10,650,0.0,0.0016043811593637485
+-10,650,0.05,0.0015340352162224148
+-10,650,0.1,0.0014710941092012215
+-10,650,0.15000000000000002,0.0014155578383001689
+-10,650,0.2,0.0013674264035192561
+-10,650,0.25,0.0013266998048584843
+-10,650,0.30000000000000004,0.0012933780423178528
+-10,650,0.35000000000000003,0.001267461115897361
+-10,650,0.4,0.0012489490255970103
+-10,650,0.45,0.0012378417714167995
+-10,650,0.5,0.0012341393533567297
+-10,650,0.55,0.0012378417714168002
+-10,650,0.6000000000000001,0.0012489490255970103
+-10,650,0.65,0.001267461115897361
+-10,650,0.7000000000000001,0.0012933780423178528
+-10,650,0.75,0.0013266998048584843
+-10,650,0.8,0.0013674264035192561
+-10,650,0.8500000000000001,0.0014155578383001689
+-10,650,0.9,0.0014710941092012215
+-10,650,0.9500000000000001,0.001534035216222415
+-10,650,1.0,0.0016043811593637485
+-10,700,0.0,0.001611984861540828
+-10,700,0.05,0.0015413055253040379
+-10,700,0.1,0.0014780661191974359
+-10,700,0.15000000000000002,0.0014222666432210228
+-10,700,0.2,0.001373907097374798
+-10,700,0.25,0.0013329874816587614
+-10,700,0.30000000000000004,0.0012995077960729136
+-10,700,0.35000000000000003,0.001273468040617254
+-10,700,0.4,0.001254868215291783
+-10,700,0.45,0.0012437083200965001
+-10,700,0.5,0.0012399883550314062
+-10,700,0.55,0.0012437083200965006
+-10,700,0.6000000000000001,0.001254868215291783
+-10,700,0.65,0.001273468040617254
+-10,700,0.7000000000000001,0.0012995077960729136
+-10,700,0.75,0.0013329874816587614
+-10,700,0.8,0.001373907097374798
+-10,700,0.8500000000000001,0.0014222666432210228
+-10,700,0.9,0.0014780661191974359
+-10,700,0.9500000000000001,0.0015413055253040379
+-10,700,1.0,0.001611984861540828
+0,-400,0.0,0.0011208498768961982
+0,-400,0.05,0.0010717049207553647
+0,-400,0.1,0.0010277331178925138
+0,-400,0.15000000000000002,0.0009889344683076454
+0,-400,0.2,0.0009553089720007596
+0,-400,0.25,0.0009268566289718561
+0,-400,0.30000000000000004,0.000903577439220935
+0,-400,0.35000000000000003,0.0008854714027479965
+0,-400,0.4,0.0008725385195530405
+0,-400,0.45,0.0008647787896360667
+0,-400,0.5,0.0008621922129970754
+0,-400,0.55,0.0008647787896360669
+0,-400,0.6000000000000001,0.0008725385195530405
+0,-400,0.65,0.0008854714027479965
+0,-400,0.7000000000000001,0.000903577439220935
+0,-400,0.75,0.0009268566289718561
+0,-400,0.8,0.0009553089720007596
+0,-400,0.8500000000000001,0.0009889344683076454
+0,-400,0.9,0.0010277331178925138
+0,-400,0.9500000000000001,0.0010717049207553647
+0,-400,1.0,0.0011208498768961982
+0,-350,0.0,0.0011154088580763136
+0,-350,0.05,0.0010665024696837366
+0,-350,0.1,0.001022744122174589
+0,-350,0.15000000000000002,0.0009841338155488703
+0,-350,0.2,0.0009506715498065811
+0,-350,0.25,0.0009223573249477207
+0,-350,0.30000000000000004,0.0008991911409722896
+0,-350,0.35000000000000003,0.0008811729978802877
+0,-350,0.4,0.0008683028956717149
+0,-350,0.45,0.0008605808343465711
+0,-350,0.5,0.0008580068139048566
+0,-350,0.55,0.0008605808343465712
+0,-350,0.6000000000000001,0.0008683028956717149
+0,-350,0.65,0.0008811729978802877
+0,-350,0.7000000000000001,0.0008991911409722896
+0,-350,0.75,0.0009223573249477207
+0,-350,0.8,0.0009506715498065811
+0,-350,0.8500000000000001,0.0009841338155488703
+0,-350,0.9,0.001022744122174589
+0,-350,0.9500000000000001,0.0010665024696837366
+0,-350,1.0,0.0011154088580763136
+0,-300,0.0,0.0011099678392564292
+0,-300,0.05,0.0010613000186121086
+0,-300,0.1,0.0010177551264566641
+0,-300,0.15000000000000002,0.0009793331627900954
+0,-300,0.2,0.0009460341276124027
+0,-300,0.25,0.0009178580209235857
+0,-300,0.30000000000000004,0.0008948048427236445
+0,-300,0.35000000000000003,0.0008768745930125791
+0,-300,0.4,0.0008640672717903895
+0,-300,0.45,0.0008563828790570758
+0,-300,0.5,0.0008538214148126378
+0,-300,0.55,0.000856382879057076
+0,-300,0.6000000000000001,0.0008640672717903895
+0,-300,0.65,0.0008768745930125791
+0,-300,0.7000000000000001,0.0008948048427236445
+0,-300,0.75,0.0009178580209235857
+0,-300,0.8,0.0009460341276124027
+0,-300,0.8500000000000001,0.0009793331627900954
+0,-300,0.9,0.0010177551264566641
+0,-300,0.9500000000000001,0.0010613000186121089
+0,-300,1.0,0.0011099678392564292
+0,-250,0.0,0.0011045268204365446
+0,-250,0.05,0.0010560975675404805
+0,-250,0.1,0.0010127661307387393
+0,-250,0.15000000000000002,0.0009745325100313203
+0,-250,0.2,0.0009413967054182241
+0,-250,0.25,0.0009133587168994504
+0,-250,0.30000000000000004,0.0008904185444749991
+0,-250,0.35000000000000003,0.0008725761881448703
+0,-250,0.4,0.0008598316479090641
+0,-250,0.45,0.0008521849237675801
+0,-250,0.5,0.0008496360157204189
+0,-250,0.55,0.0008521849237675803
+0,-250,0.6000000000000001,0.0008598316479090641
+0,-250,0.65,0.0008725761881448703
+0,-250,0.7000000000000001,0.0008904185444749991
+0,-250,0.75,0.0009133587168994504
+0,-250,0.8,0.0009413967054182241
+0,-250,0.8500000000000001,0.0009745325100313203
+0,-250,0.9,0.0010127661307387393
+0,-250,0.9500000000000001,0.0010560975675404807
+0,-250,1.0,0.0011045268204365446
+0,-200,0.0,0.0010990858016166605
+0,-200,0.05,0.0010508951164688526
+0,-200,0.1,0.0010077771350208145
+0,-200,0.15000000000000002,0.0009697318572725456
+0,-200,0.2,0.0009367592832240459
+0,-200,0.25,0.0009088594128753151
+0,-200,0.30000000000000004,0.0008860322462263537
+0,-200,0.35000000000000003,0.0008682777832771615
+0,-200,0.4,0.0008555960240277387
+0,-200,0.45,0.0008479869684780848
+0,-200,0.5,0.0008454506166282001
+0,-200,0.55,0.000847986968478085
+0,-200,0.6000000000000001,0.0008555960240277387
+0,-200,0.65,0.0008682777832771615
+0,-200,0.7000000000000001,0.0008860322462263537
+0,-200,0.75,0.0009088594128753151
+0,-200,0.8,0.0009367592832240459
+0,-200,0.8500000000000001,0.0009697318572725456
+0,-200,0.9,0.0010077771350208145
+0,-200,0.9500000000000001,0.0010508951164688528
+0,-200,1.0,0.0010990858016166605
+0,-150,0.0,0.0010936447827967757
+0,-150,0.05,0.0010456926653972247
+0,-150,0.1,0.0010027881393028894
+0,-150,0.15000000000000002,0.0009649312045137705
+0,-150,0.2,0.0009321218610298673
+0,-150,0.25,0.0009043601088511799
+0,-150,0.30000000000000004,0.0008816459479777084
+0,-150,0.35000000000000003,0.0008639793784094527
+0,-150,0.4,0.0008513604001464132
+0,-150,0.45,0.0008437890131885892
+0,-150,0.5,0.0008412652175359813
+0,-150,0.55,0.0008437890131885893
+0,-150,0.6000000000000001,0.0008513604001464132
+0,-150,0.65,0.0008639793784094527
+0,-150,0.7000000000000001,0.0008816459479777084
+0,-150,0.75,0.0009043601088511799
+0,-150,0.8,0.0009321218610298673
+0,-150,0.8500000000000001,0.0009649312045137705
+0,-150,0.9,0.0010027881393028894
+0,-150,0.9500000000000001,0.001045692665397225
+0,-150,1.0,0.0010936447827967757
+0,-100,0.0,0.0010882037639768913
+0,-100,0.05,0.0010404902143255968
+0,-100,0.1,0.0009977991435849648
+0,-100,0.15000000000000002,0.0009601305517549955
+0,-100,0.2,0.0009274844388356889
+0,-100,0.25,0.0008998608048270447
+0,-100,0.30000000000000004,0.0008772596497290631
+0,-100,0.35000000000000003,0.0008596809735417441
+0,-100,0.4,0.0008471247762650878
+0,-100,0.45,0.0008395910578990938
+0,-100,0.5,0.0008370798184437625
+0,-100,0.55,0.000839591057899094
+0,-100,0.6000000000000001,0.0008471247762650878
+0,-100,0.65,0.0008596809735417441
+0,-100,0.7000000000000001,0.0008772596497290631
+0,-100,0.75,0.0008998608048270447
+0,-100,0.8,0.0009274844388356889
+0,-100,0.8500000000000001,0.0009601305517549955
+0,-100,0.9,0.0009977991435849648
+0,-100,0.9500000000000001,0.0010404902143255968
+0,-100,1.0,0.0010882037639768913
+0,-50,0.0,0.001082762745157007
+0,-50,0.05,0.0010352877632539687
+0,-50,0.1,0.00099281014786704
+0,-50,0.15000000000000002,0.0009553298989962207
+0,-50,0.2,0.0009228470166415105
+0,-50,0.25,0.0008953615008029095
+0,-50,0.30000000000000004,0.0008728733514804178
+0,-50,0.35000000000000003,0.0008553825686740354
+0,-50,0.4,0.0008428891523837624
+0,-50,0.45,0.0008353931026095984
+0,-50,0.5,0.0008328944193515438
+0,-50,0.55,0.0008353931026095986
+0,-50,0.6000000000000001,0.0008428891523837624
+0,-50,0.65,0.0008553825686740354
+0,-50,0.7000000000000001,0.0008728733514804178
+0,-50,0.75,0.0008953615008029095
+0,-50,0.8,0.0009228470166415105
+0,-50,0.8500000000000001,0.0009553298989962207
+0,-50,0.9,0.00099281014786704
+0,-50,0.9500000000000001,0.001035287763253969
+0,-50,1.0,0.001082762745157007
+0,0,0.0,0.0010773217263371224
+0,0,0.05,0.0010300853121823408
+0,0,0.1,0.0009878211521491152
+0,0,0.15000000000000002,0.0009505292462374456
+0,0,0.2,0.0009182095944473321
+0,0,0.25,0.0008908621967787743
+0,0,0.30000000000000004,0.0008684870532317725
+0,0,0.35000000000000003,0.0008510841638063268
+0,0,0.4,0.000838653528502437
+0,0,0.45,0.0008311951473201029
+0,0,0.5,0.000828709020259325
+0,0,0.55,0.000831195147320103
+0,0,0.6000000000000001,0.000838653528502437
+0,0,0.65,0.0008510841638063268
+0,0,0.7000000000000001,0.0008684870532317725
+0,0,0.75,0.0008908621967787743
+0,0,0.8,0.0009182095944473321
+0,0,0.8500000000000001,0.0009505292462374456
+0,0,0.9,0.0009878211521491152
+0,0,0.9500000000000001,0.001030085312182341
+0,0,1.0,0.0010773217263371224
+0,50,0.0,0.001082762745157007
+0,50,0.05,0.0010352877632539687
+0,50,0.1,0.00099281014786704
+0,50,0.15000000000000002,0.0009553298989962207
+0,50,0.2,0.0009228470166415105
+0,50,0.25,0.0008953615008029095
+0,50,0.30000000000000004,0.0008728733514804178
+0,50,0.35000000000000003,0.0008553825686740354
+0,50,0.4,0.0008428891523837624
+0,50,0.45,0.0008353931026095984
+0,50,0.5,0.0008328944193515438
+0,50,0.55,0.0008353931026095986
+0,50,0.6000000000000001,0.0008428891523837624
+0,50,0.65,0.0008553825686740354
+0,50,0.7000000000000001,0.0008728733514804178
+0,50,0.75,0.0008953615008029095
+0,50,0.8,0.0009228470166415105
+0,50,0.8500000000000001,0.0009553298989962207
+0,50,0.9,0.00099281014786704
+0,50,0.9500000000000001,0.001035287763253969
+0,50,1.0,0.001082762745157007
+0,100,0.0,0.0010882037639768913
+0,100,0.05,0.0010404902143255968
+0,100,0.1,0.0009977991435849648
+0,100,0.15000000000000002,0.0009601305517549955
+0,100,0.2,0.0009274844388356889
+0,100,0.25,0.0008998608048270447
+0,100,0.30000000000000004,0.0008772596497290631
+0,100,0.35000000000000003,0.0008596809735417441
+0,100,0.4,0.0008471247762650878
+0,100,0.45,0.0008395910578990938
+0,100,0.5,0.0008370798184437625
+0,100,0.55,0.000839591057899094
+0,100,0.6000000000000001,0.0008471247762650878
+0,100,0.65,0.0008596809735417441
+0,100,0.7000000000000001,0.0008772596497290631
+0,100,0.75,0.0008998608048270447
+0,100,0.8,0.0009274844388356889
+0,100,0.8500000000000001,0.0009601305517549955
+0,100,0.9,0.0009977991435849648
+0,100,0.9500000000000001,0.0010404902143255968
+0,100,1.0,0.0010882037639768913
+0,150,0.0,0.0010936447827967757
+0,150,0.05,0.0010456926653972247
+0,150,0.1,0.0010027881393028894
+0,150,0.15000000000000002,0.0009649312045137705
+0,150,0.2,0.0009321218610298673
+0,150,0.25,0.0009043601088511799
+0,150,0.30000000000000004,0.0008816459479777084
+0,150,0.35000000000000003,0.0008639793784094527
+0,150,0.4,0.0008513604001464132
+0,150,0.45,0.0008437890131885892
+0,150,0.5,0.0008412652175359813
+0,150,0.55,0.0008437890131885893
+0,150,0.6000000000000001,0.0008513604001464132
+0,150,0.65,0.0008639793784094527
+0,150,0.7000000000000001,0.0008816459479777084
+0,150,0.75,0.0009043601088511799
+0,150,0.8,0.0009321218610298673
+0,150,0.8500000000000001,0.0009649312045137705
+0,150,0.9,0.0010027881393028894
+0,150,0.9500000000000001,0.001045692665397225
+0,150,1.0,0.0010936447827967757
+0,200,0.0,0.0010990858016166605
+0,200,0.05,0.0010508951164688526
+0,200,0.1,0.0010077771350208145
+0,200,0.15000000000000002,0.0009697318572725456
+0,200,0.2,0.0009367592832240459
+0,200,0.25,0.0009088594128753151
+0,200,0.30000000000000004,0.0008860322462263537
+0,200,0.35000000000000003,0.0008682777832771615
+0,200,0.4,0.0008555960240277387
+0,200,0.45,0.0008479869684780848
+0,200,0.5,0.0008454506166282001
+0,200,0.55,0.000847986968478085
+0,200,0.6000000000000001,0.0008555960240277387
+0,200,0.65,0.0008682777832771615
+0,200,0.7000000000000001,0.0008860322462263537
+0,200,0.75,0.0009088594128753151
+0,200,0.8,0.0009367592832240459
+0,200,0.8500000000000001,0.0009697318572725456
+0,200,0.9,0.0010077771350208145
+0,200,0.9500000000000001,0.0010508951164688528
+0,200,1.0,0.0010990858016166605
+0,250,0.0,0.0011045268204365446
+0,250,0.05,0.0010560975675404805
+0,250,0.1,0.0010127661307387393
+0,250,0.15000000000000002,0.0009745325100313203
+0,250,0.2,0.0009413967054182241
+0,250,0.25,0.0009133587168994504
+0,250,0.30000000000000004,0.0008904185444749991
+0,250,0.35000000000000003,0.0008725761881448703
+0,250,0.4,0.0008598316479090641
+0,250,0.45,0.0008521849237675801
+0,250,0.5,0.0008496360157204189
+0,250,0.55,0.0008521849237675803
+0,250,0.6000000000000001,0.0008598316479090641
+0,250,0.65,0.0008725761881448703
+0,250,0.7000000000000001,0.0008904185444749991
+0,250,0.75,0.0009133587168994504
+0,250,0.8,0.0009413967054182241
+0,250,0.8500000000000001,0.0009745325100313203
+0,250,0.9,0.0010127661307387393
+0,250,0.9500000000000001,0.0010560975675404807
+0,250,1.0,0.0011045268204365446
+0,300,0.0,0.0011099678392564292
+0,300,0.05,0.0010613000186121086
+0,300,0.1,0.0010177551264566641
+0,300,0.15000000000000002,0.0009793331627900954
+0,300,0.2,0.0009460341276124027
+0,300,0.25,0.0009178580209235857
+0,300,0.30000000000000004,0.0008948048427236445
+0,300,0.35000000000000003,0.0008768745930125791
+0,300,0.4,0.0008640672717903895
+0,300,0.45,0.0008563828790570758
+0,300,0.5,0.0008538214148126378
+0,300,0.55,0.000856382879057076
+0,300,0.6000000000000001,0.0008640672717903895
+0,300,0.65,0.0008768745930125791
+0,300,0.7000000000000001,0.0008948048427236445
+0,300,0.75,0.0009178580209235857
+0,300,0.8,0.0009460341276124027
+0,300,0.8500000000000001,0.0009793331627900954
+0,300,0.9,0.0010177551264566641
+0,300,0.9500000000000001,0.0010613000186121089
+0,300,1.0,0.0011099678392564292
+0,350,0.0,0.0011154088580763136
+0,350,0.05,0.0010665024696837366
+0,350,0.1,0.001022744122174589
+0,350,0.15000000000000002,0.0009841338155488703
+0,350,0.2,0.0009506715498065811
+0,350,0.25,0.0009223573249477207
+0,350,0.30000000000000004,0.0008991911409722896
+0,350,0.35000000000000003,0.0008811729978802877
+0,350,0.4,0.0008683028956717149
+0,350,0.45,0.0008605808343465711
+0,350,0.5,0.0008580068139048566
+0,350,0.55,0.0008605808343465712
+0,350,0.6000000000000001,0.0008683028956717149
+0,350,0.65,0.0008811729978802877
+0,350,0.7000000000000001,0.0008991911409722896
+0,350,0.75,0.0009223573249477207
+0,350,0.8,0.0009506715498065811
+0,350,0.8500000000000001,0.0009841338155488703
+0,350,0.9,0.001022744122174589
+0,350,0.9500000000000001,0.0010665024696837366
+0,350,1.0,0.0011154088580763136
+0,400,0.0,0.0011208498768961982
+0,400,0.05,0.0010717049207553647
+0,400,0.1,0.0010277331178925138
+0,400,0.15000000000000002,0.0009889344683076454
+0,400,0.2,0.0009553089720007596
+0,400,0.25,0.0009268566289718561
+0,400,0.30000000000000004,0.000903577439220935
+0,400,0.35000000000000003,0.0008854714027479965
+0,400,0.4,0.0008725385195530405
+0,400,0.45,0.0008647787896360667
+0,400,0.5,0.0008621922129970754
+0,400,0.55,0.0008647787896360669
+0,400,0.6000000000000001,0.0008725385195530405
+0,400,0.65,0.0008854714027479965
+0,400,0.7000000000000001,0.000903577439220935
+0,400,0.75,0.0009268566289718561
+0,400,0.8,0.0009553089720007596
+0,400,0.8500000000000001,0.0009889344683076454
+0,400,0.9,0.0010277331178925138
+0,400,0.9500000000000001,0.0010717049207553647
+0,400,1.0,0.0011208498768961982
+0,450,0.0,0.0011262908957160825
+0,450,0.05,0.0010769073718269926
+0,450,0.1,0.0010327221136104386
+0,450,0.15000000000000002,0.0009937351210664205
+0,450,0.2,0.0009599463941949381
+0,450,0.25,0.0009313559329959912
+0,450,0.30000000000000004,0.0009079637374695802
+0,450,0.35000000000000003,0.0008897698076157051
+0,450,0.4,0.0008767741434343658
+0,450,0.45,0.000868976744925562
+0,450,0.5,0.0008663776120892942
+0,450,0.55,0.0008689767449255622
+0,450,0.6000000000000001,0.0008767741434343658
+0,450,0.65,0.0008897698076157051
+0,450,0.7000000000000001,0.0009079637374695802
+0,450,0.75,0.0009313559329959912
+0,450,0.8,0.0009599463941949381
+0,450,0.8500000000000001,0.0009937351210664205
+0,450,0.9,0.0010327221136104386
+0,450,0.9500000000000001,0.0010769073718269928
+0,450,1.0,0.0011262908957160825
+0,500,0.0,0.001131731914535967
+0,500,0.05,0.0010821098228986207
+0,500,0.1,0.0010377111093283634
+0,500,0.15000000000000002,0.0009985357738251956
+0,500,0.2,0.0009645838163891166
+0,500,0.25,0.0009358552370201265
+0,500,0.30000000000000004,0.0009123500357182258
+0,500,0.35000000000000003,0.0008940682124834138
+0,500,0.4,0.0008810097673156913
+0,500,0.45,0.0008731747002150577
+0,500,0.5,0.0008705630111815132
+0,500,0.55,0.0008731747002150578
+0,500,0.6000000000000001,0.0008810097673156913
+0,500,0.65,0.0008940682124834138
+0,500,0.7000000000000001,0.0009123500357182258
+0,500,0.75,0.0009358552370201265
+0,500,0.8,0.0009645838163891166
+0,500,0.8500000000000001,0.0009985357738251956
+0,500,0.9,0.0010377111093283634
+0,500,0.9500000000000001,0.001082109822898621
+0,500,1.0,0.001131731914535967
+0,550,0.0,0.0011371729333558515
+0,550,0.05,0.0010873122739702484
+0,550,0.1,0.0010427001050462882
+0,550,0.15000000000000002,0.0010033364265839703
+0,550,0.2,0.000969221238583295
+0,550,0.25,0.0009403545410442617
+0,550,0.30000000000000004,0.000916736333966871
+0,550,0.35000000000000003,0.0008983666173511226
+0,550,0.4,0.0008852453911970166
+0,550,0.45,0.0008773726555045529
+0,550,0.5,0.0008747484102737319
+0,550,0.55,0.0008773726555045532
+0,550,0.6000000000000001,0.0008852453911970166
+0,550,0.65,0.0008983666173511226
+0,550,0.7000000000000001,0.000916736333966871
+0,550,0.75,0.0009403545410442617
+0,550,0.8,0.000969221238583295
+0,550,0.8500000000000001,0.0010033364265839703
+0,550,0.9,0.0010427001050462882
+0,550,0.9500000000000001,0.0010873122739702486
+0,550,1.0,0.0011371729333558515
+0,600,0.0,0.001142613952175736
+0,600,0.05,0.0010925147250418765
+0,600,0.1,0.0010476891007642132
+0,600,0.15000000000000002,0.0010081370793427454
+0,600,0.2,0.0009738586607774734
+0,600,0.25,0.0009448538450683969
+0,600,0.30000000000000004,0.0009211226322155164
+0,600,0.35000000000000003,0.0009026650222188314
+0,600,0.4,0.0008894810150783422
+0,600,0.45,0.0008815706107940486
+0,600,0.5,0.0008789338093659507
+0,600,0.55,0.0008815706107940488
+0,600,0.6000000000000001,0.0008894810150783422
+0,600,0.65,0.0009026650222188314
+0,600,0.7000000000000001,0.0009211226322155164
+0,600,0.75,0.0009448538450683969
+0,600,0.8,0.0009738586607774734
+0,600,0.8500000000000001,0.0010081370793427454
+0,600,0.9,0.0010476891007642132
+0,600,0.9500000000000001,0.0010925147250418767
+0,600,1.0,0.001142613952175736
+0,650,0.0,0.0011480549709956204
+0,650,0.05,0.0010977171761135044
+0,650,0.1,0.0010526780964821379
+0,650,0.15000000000000002,0.0010129377321015202
+0,650,0.2,0.0009784960829716518
+0,650,0.25,0.0009493531490925322
+0,650,0.30000000000000004,0.0009255089304641616
+0,650,0.35000000000000003,0.00090696342708654
+0,650,0.4,0.0008937166389596676
+0,650,0.45,0.000885768566083544
+0,650,0.5,0.0008831192084581695
+0,650,0.55,0.0008857685660835441
+0,650,0.6000000000000001,0.0008937166389596676
+0,650,0.65,0.00090696342708654
+0,650,0.7000000000000001,0.0009255089304641616
+0,650,0.75,0.0009493531490925322
+0,650,0.8,0.0009784960829716518
+0,650,0.8500000000000001,0.0010129377321015202
+0,650,0.9,0.0010526780964821379
+0,650,0.9500000000000001,0.0010977171761135046
+0,650,1.0,0.0011480549709956204
+0,700,0.0,0.001153495989815505
+0,700,0.05,0.0011029196271851326
+0,700,0.1,0.0010576670922000629
+0,700,0.15000000000000002,0.0010177383848602953
+0,700,0.2,0.0009831335051658304
+0,700,0.25,0.0009538524531166675
+0,700,0.30000000000000004,0.000929895228712807
+0,700,0.35000000000000003,0.0009112618319542488
+0,700,0.4,0.000897952262840993
+0,700,0.45,0.0008899665213730396
+0,700,0.5,0.0008873046075503884
+0,700,0.55,0.0008899665213730397
+0,700,0.6000000000000001,0.000897952262840993
+0,700,0.65,0.0009112618319542488
+0,700,0.7000000000000001,0.000929895228712807
+0,700,0.75,0.0009538524531166675
+0,700,0.8,0.0009831335051658304
+0,700,0.8500000000000001,0.0010177383848602953
+0,700,0.9,0.0010576670922000629
+0,700,0.9500000000000001,0.0011029196271851328
+0,700,1.0,0.001153495989815505
+10,-400,0.0,0.0008212376645836033
+10,-400,0.05,0.0007852295515980145
+10,-400,0.1,0.0007530117662951191
+10,-400,0.15000000000000002,0.0007245843086749176
+10,-400,0.2,0.0006999471787374094
+10,-400,0.25,0.0006791003764825949
+10,-400,0.30000000000000004,0.000662043901910474
+10,-400,0.35000000000000003,0.0006487777550210465
+10,-400,0.4,0.0006393019358143126
+10,-400,0.45,0.0006336164442902723
+10,-400,0.5,0.0006317212804489255
+10,-400,0.55,0.0006336164442902724
+10,-400,0.6000000000000001,0.0006393019358143126
+10,-400,0.65,0.0006487777550210465
+10,-400,0.7000000000000001,0.000662043901910474
+10,-400,0.75,0.0006791003764825949
+10,-400,0.8,0.0006999471787374094
+10,-400,0.8500000000000001,0.0007245843086749176
+10,-400,0.9,0.0007530117662951191
+10,-400,0.9500000000000001,0.0007852295515980145
+10,-400,1.0,0.0008212376645836033
+10,-350,0.0,0.0008172510739788284
+10,-350,0.05,0.0007814177576582182
+10,-350,0.1,0.0007493563693713564
+10,-350,0.15000000000000002,0.0007210669091182432
+10,-350,0.2,0.0006965493768988783
+10,-350,0.25,0.0006758037727132619
+10,-350,0.30000000000000004,0.0006588300965613939
+10,-350,0.35000000000000003,0.0006456283484432743
+10,-350,0.4,0.0006361985283589032
+10,-350,0.45,0.0006305406363082806
+10,-350,0.5,0.0006286546722914063
+10,-350,0.55,0.0006305406363082807
+10,-350,0.6000000000000001,0.0006361985283589032
+10,-350,0.65,0.0006456283484432743
+10,-350,0.7000000000000001,0.0006588300965613939
+10,-350,0.75,0.0006758037727132619
+10,-350,0.8,0.0006965493768988783
+10,-350,0.8500000000000001,0.0007210669091182432
+10,-350,0.9,0.0007493563693713564
+10,-350,0.9500000000000001,0.0007814177576582182
+10,-350,1.0,0.0008172510739788284
+10,-300,0.0,0.0008132644833740536
+10,-300,0.05,0.000777605963718422
+10,-300,0.1,0.0007457009724475937
+10,-300,0.15000000000000002,0.0007175495095615688
+10,-300,0.2,0.0006931515750603472
+10,-300,0.25,0.000672507168943929
+10,-300,0.30000000000000004,0.0006556162912123141
+10,-300,0.35000000000000003,0.0006424789418655023
+10,-300,0.4,0.000633095120903494
+10,-300,0.45,0.0006274648283262891
+10,-300,0.5,0.0006255880641338874
+10,-300,0.55,0.0006274648283262892
+10,-300,0.6000000000000001,0.000633095120903494
+10,-300,0.65,0.0006424789418655023
+10,-300,0.7000000000000001,0.0006556162912123141
+10,-300,0.75,0.000672507168943929
+10,-300,0.8,0.0006931515750603472
+10,-300,0.8500000000000001,0.0007175495095615688
+10,-300,0.9,0.0007457009724475937
+10,-300,0.9500000000000001,0.0007776059637184221
+10,-300,1.0,0.0008132644833740536
+10,-250,0.0,0.0008092778927692788
+10,-250,0.05,0.0007737941697786258
+10,-250,0.1,0.0007420455755238309
+10,-250,0.15000000000000002,0.0007140321100048944
+10,-250,0.2,0.000689753773221816
+10,-250,0.25,0.0006692105651745959
+10,-250,0.30000000000000004,0.000652402485863234
+10,-250,0.35000000000000003,0.0006393295352877302
+10,-250,0.4,0.0006299917134480848
+10,-250,0.45,0.0006243890203442974
+10,-250,0.5,0.0006225214559763682
+10,-250,0.55,0.0006243890203442975
+10,-250,0.6000000000000001,0.0006299917134480848
+10,-250,0.65,0.0006393295352877302
+10,-250,0.7000000000000001,0.000652402485863234
+10,-250,0.75,0.0006692105651745959
+10,-250,0.8,0.000689753773221816
+10,-250,0.8500000000000001,0.0007140321100048944
+10,-250,0.9,0.0007420455755238309
+10,-250,0.9500000000000001,0.0007737941697786259
+10,-250,1.0,0.0008092778927692788
+10,-200,0.0,0.0008052913021645042
+10,-200,0.05,0.0007699823758388297
+10,-200,0.1,0.0007383901786000682
+10,-200,0.15000000000000002,0.0007105147104482201
+10,-200,0.2,0.000686355971383285
+10,-200,0.25,0.000665913961405263
+10,-200,0.30000000000000004,0.000649188680514154
+10,-200,0.35000000000000003,0.0006361801287099581
+10,-200,0.4,0.0006268883059926756
+10,-200,0.45,0.0006213132123623058
+10,-200,0.5,0.0006194548478188493
+10,-200,0.55,0.0006213132123623059
+10,-200,0.6000000000000001,0.0006268883059926756
+10,-200,0.65,0.0006361801287099581
+10,-200,0.7000000000000001,0.000649188680514154
+10,-200,0.75,0.000665913961405263
+10,-200,0.8,0.000686355971383285
+10,-200,0.8500000000000001,0.0007105147104482201
+10,-200,0.9,0.0007383901786000682
+10,-200,0.9500000000000001,0.0007699823758388298
+10,-200,1.0,0.0008052913021645042
+10,-150,0.0,0.0008013047115597293
+10,-150,0.05,0.0007661705818990333
+10,-150,0.1,0.0007347347816763055
+10,-150,0.15000000000000002,0.0007069973108915457
+10,-150,0.2,0.0006829581695447538
+10,-150,0.25,0.0006626173576359299
+10,-150,0.30000000000000004,0.000645974875165074
+10,-150,0.35000000000000003,0.000633030722132186
+10,-150,0.4,0.0006237848985372661
+10,-150,0.45,0.0006182374043803142
+10,-150,0.5,0.0006163882396613301
+10,-150,0.55,0.0006182374043803142
+10,-150,0.6000000000000001,0.0006237848985372661
+10,-150,0.65,0.000633030722132186
+10,-150,0.7000000000000001,0.000645974875165074
+10,-150,0.75,0.0006626173576359299
+10,-150,0.8,0.0006829581695447538
+10,-150,0.8500000000000001,0.0007069973108915457
+10,-150,0.9,0.0007347347816763055
+10,-150,0.9500000000000001,0.0007661705818990335
+10,-150,1.0,0.0008013047115597293
+10,-100,0.0,0.0007973181209549546
+10,-100,0.05,0.0007623587879592372
+10,-100,0.1,0.0007310793847525428
+10,-100,0.15000000000000002,0.0007034799113348714
+10,-100,0.2,0.0006795603677062227
+10,-100,0.25,0.000659320753866597
+10,-100,0.30000000000000004,0.0006427610698159941
+10,-100,0.35000000000000003,0.000629881315554414
+10,-100,0.4,0.0006206814910818569
+10,-100,0.45,0.0006151615963983226
+10,-100,0.5,0.0006133216315038112
+10,-100,0.55,0.0006151615963983227
+10,-100,0.6000000000000001,0.0006206814910818569
+10,-100,0.65,0.000629881315554414
+10,-100,0.7000000000000001,0.0006427610698159941
+10,-100,0.75,0.000659320753866597
+10,-100,0.8,0.0006795603677062227
+10,-100,0.8500000000000001,0.0007034799113348714
+10,-100,0.9,0.0007310793847525428
+10,-100,0.9500000000000001,0.0007623587879592373
+10,-100,1.0,0.0007973181209549546
+10,-50,0.0,0.0007933315303501799
+10,-50,0.05,0.0007585469940194411
+10,-50,0.1,0.0007274239878287801
+10,-50,0.15000000000000002,0.000699962511778197
+10,-50,0.2,0.0006761625658676917
+10,-50,0.25,0.000656024150097264
+10,-50,0.30000000000000004,0.0006395472644669142
+10,-50,0.35000000000000003,0.000626731908976642
+10,-50,0.4,0.0006175780836264476
+10,-50,0.45,0.000612085788416331
+10,-50,0.5,0.0006102550233462921
+10,-50,0.55,0.0006120857884163311
+10,-50,0.6000000000000001,0.0006175780836264476
+10,-50,0.65,0.000626731908976642
+10,-50,0.7000000000000001,0.0006395472644669142
+10,-50,0.75,0.000656024150097264
+10,-50,0.8,0.0006761625658676917
+10,-50,0.8500000000000001,0.000699962511778197
+10,-50,0.9,0.0007274239878287801
+10,-50,0.9500000000000001,0.0007585469940194411
+10,-50,1.0,0.0007933315303501799
+10,0,0.0,0.000789344939745405
+10,0,0.05,0.0007547352000796449
+10,0,0.1,0.0007237685909050174
+10,0,0.15000000000000002,0.0006964451122215227
+10,0,0.2,0.0006727647640291605
+10,0,0.25,0.000652727546327931
+10,0,0.30000000000000004,0.0006363334591178342
+10,0,0.35000000000000003,0.0006235825023988698
+10,0,0.4,0.0006144746761710383
+10,0,0.45,0.0006090099804343394
+10,0,0.5,0.000607188415188773
+10,0,0.55,0.0006090099804343395
+10,0,0.6000000000000001,0.0006144746761710383
+10,0,0.65,0.0006235825023988698
+10,0,0.7000000000000001,0.0006363334591178342
+10,0,0.75,0.000652727546327931
+10,0,0.8,0.0006727647640291605
+10,0,0.8500000000000001,0.0006964451122215227
+10,0,0.9,0.0007237685909050174
+10,0,0.9500000000000001,0.000754735200079645
+10,0,1.0,0.000789344939745405
+10,50,0.0,0.0007933315303501799
+10,50,0.05,0.0007585469940194411
+10,50,0.1,0.0007274239878287801
+10,50,0.15000000000000002,0.000699962511778197
+10,50,0.2,0.0006761625658676917
+10,50,0.25,0.000656024150097264
+10,50,0.30000000000000004,0.0006395472644669142
+10,50,0.35000000000000003,0.000626731908976642
+10,50,0.4,0.0006175780836264476
+10,50,0.45,0.000612085788416331
+10,50,0.5,0.0006102550233462921
+10,50,0.55,0.0006120857884163311
+10,50,0.6000000000000001,0.0006175780836264476
+10,50,0.65,0.000626731908976642
+10,50,0.7000000000000001,0.0006395472644669142
+10,50,0.75,0.000656024150097264
+10,50,0.8,0.0006761625658676917
+10,50,0.8500000000000001,0.000699962511778197
+10,50,0.9,0.0007274239878287801
+10,50,0.9500000000000001,0.0007585469940194411
+10,50,1.0,0.0007933315303501799
+10,100,0.0,0.0007973181209549546
+10,100,0.05,0.0007623587879592372
+10,100,0.1,0.0007310793847525428
+10,100,0.15000000000000002,0.0007034799113348714
+10,100,0.2,0.0006795603677062227
+10,100,0.25,0.000659320753866597
+10,100,0.30000000000000004,0.0006427610698159941
+10,100,0.35000000000000003,0.000629881315554414
+10,100,0.4,0.0006206814910818569
+10,100,0.45,0.0006151615963983226
+10,100,0.5,0.0006133216315038112
+10,100,0.55,0.0006151615963983227
+10,100,0.6000000000000001,0.0006206814910818569
+10,100,0.65,0.000629881315554414
+10,100,0.7000000000000001,0.0006427610698159941
+10,100,0.75,0.000659320753866597
+10,100,0.8,0.0006795603677062227
+10,100,0.8500000000000001,0.0007034799113348714
+10,100,0.9,0.0007310793847525428
+10,100,0.9500000000000001,0.0007623587879592373
+10,100,1.0,0.0007973181209549546
+10,150,0.0,0.0008013047115597293
+10,150,0.05,0.0007661705818990333
+10,150,0.1,0.0007347347816763055
+10,150,0.15000000000000002,0.0007069973108915457
+10,150,0.2,0.0006829581695447538
+10,150,0.25,0.0006626173576359299
+10,150,0.30000000000000004,0.000645974875165074
+10,150,0.35000000000000003,0.000633030722132186
+10,150,0.4,0.0006237848985372661
+10,150,0.45,0.0006182374043803142
+10,150,0.5,0.0006163882396613301
+10,150,0.55,0.0006182374043803142
+10,150,0.6000000000000001,0.0006237848985372661
+10,150,0.65,0.000633030722132186
+10,150,0.7000000000000001,0.000645974875165074
+10,150,0.75,0.0006626173576359299
+10,150,0.8,0.0006829581695447538
+10,150,0.8500000000000001,0.0007069973108915457
+10,150,0.9,0.0007347347816763055
+10,150,0.9500000000000001,0.0007661705818990335
+10,150,1.0,0.0008013047115597293
+10,200,0.0,0.0008052913021645042
+10,200,0.05,0.0007699823758388297
+10,200,0.1,0.0007383901786000682
+10,200,0.15000000000000002,0.0007105147104482201
+10,200,0.2,0.000686355971383285
+10,200,0.25,0.000665913961405263
+10,200,0.30000000000000004,0.000649188680514154
+10,200,0.35000000000000003,0.0006361801287099581
+10,200,0.4,0.0006268883059926756
+10,200,0.45,0.0006213132123623058
+10,200,0.5,0.0006194548478188493
+10,200,0.55,0.0006213132123623059
+10,200,0.6000000000000001,0.0006268883059926756
+10,200,0.65,0.0006361801287099581
+10,200,0.7000000000000001,0.000649188680514154
+10,200,0.75,0.000665913961405263
+10,200,0.8,0.000686355971383285
+10,200,0.8500000000000001,0.0007105147104482201
+10,200,0.9,0.0007383901786000682
+10,200,0.9500000000000001,0.0007699823758388298
+10,200,1.0,0.0008052913021645042
+10,250,0.0,0.0008092778927692788
+10,250,0.05,0.0007737941697786258
+10,250,0.1,0.0007420455755238309
+10,250,0.15000000000000002,0.0007140321100048944
+10,250,0.2,0.000689753773221816
+10,250,0.25,0.0006692105651745959
+10,250,0.30000000000000004,0.000652402485863234
+10,250,0.35000000000000003,0.0006393295352877302
+10,250,0.4,0.0006299917134480848
+10,250,0.45,0.0006243890203442974
+10,250,0.5,0.0006225214559763682
+10,250,0.55,0.0006243890203442975
+10,250,0.6000000000000001,0.0006299917134480848
+10,250,0.65,0.0006393295352877302
+10,250,0.7000000000000001,0.000652402485863234
+10,250,0.75,0.0006692105651745959
+10,250,0.8,0.000689753773221816
+10,250,0.8500000000000001,0.0007140321100048944
+10,250,0.9,0.0007420455755238309
+10,250,0.9500000000000001,0.0007737941697786259
+10,250,1.0,0.0008092778927692788
+10,300,0.0,0.0008132644833740536
+10,300,0.05,0.000777605963718422
+10,300,0.1,0.0007457009724475937
+10,300,0.15000000000000002,0.0007175495095615688
+10,300,0.2,0.0006931515750603472
+10,300,0.25,0.000672507168943929
+10,300,0.30000000000000004,0.0006556162912123141
+10,300,0.35000000000000003,0.0006424789418655023
+10,300,0.4,0.000633095120903494
+10,300,0.45,0.0006274648283262891
+10,300,0.5,0.0006255880641338874
+10,300,0.55,0.0006274648283262892
+10,300,0.6000000000000001,0.000633095120903494
+10,300,0.65,0.0006424789418655023
+10,300,0.7000000000000001,0.0006556162912123141
+10,300,0.75,0.000672507168943929
+10,300,0.8,0.0006931515750603472
+10,300,0.8500000000000001,0.0007175495095615688
+10,300,0.9,0.0007457009724475937
+10,300,0.9500000000000001,0.0007776059637184221
+10,300,1.0,0.0008132644833740536
+10,350,0.0,0.0008172510739788284
+10,350,0.05,0.0007814177576582182
+10,350,0.1,0.0007493563693713564
+10,350,0.15000000000000002,0.0007210669091182432
+10,350,0.2,0.0006965493768988783
+10,350,0.25,0.0006758037727132619
+10,350,0.30000000000000004,0.0006588300965613939
+10,350,0.35000000000000003,0.0006456283484432743
+10,350,0.4,0.0006361985283589032
+10,350,0.45,0.0006305406363082806
+10,350,0.5,0.0006286546722914063
+10,350,0.55,0.0006305406363082807
+10,350,0.6000000000000001,0.0006361985283589032
+10,350,0.65,0.0006456283484432743
+10,350,0.7000000000000001,0.0006588300965613939
+10,350,0.75,0.0006758037727132619
+10,350,0.8,0.0006965493768988783
+10,350,0.8500000000000001,0.0007210669091182432
+10,350,0.9,0.0007493563693713564
+10,350,0.9500000000000001,0.0007814177576582182
+10,350,1.0,0.0008172510739788284
+10,400,0.0,0.0008212376645836033
+10,400,0.05,0.0007852295515980145
+10,400,0.1,0.0007530117662951191
+10,400,0.15000000000000002,0.0007245843086749176
+10,400,0.2,0.0006999471787374094
+10,400,0.25,0.0006791003764825949
+10,400,0.30000000000000004,0.000662043901910474
+10,400,0.35000000000000003,0.0006487777550210465
+10,400,0.4,0.0006393019358143126
+10,400,0.45,0.0006336164442902723
+10,400,0.5,0.0006317212804489255
+10,400,0.55,0.0006336164442902724
+10,400,0.6000000000000001,0.0006393019358143126
+10,400,0.65,0.0006487777550210465
+10,400,0.7000000000000001,0.000662043901910474
+10,400,0.75,0.0006791003764825949
+10,400,0.8,0.0006999471787374094
+10,400,0.8500000000000001,0.0007245843086749176
+10,400,0.9,0.0007530117662951191
+10,400,0.9500000000000001,0.0007852295515980145
+10,400,1.0,0.0008212376645836033
+10,450,0.0,0.0008252242551883779
+10,450,0.05,0.0007890413455378105
+10,450,0.1,0.0007566671632188818
+10,450,0.15000000000000002,0.0007281017082315918
+10,450,0.2,0.0007033449805759406
+10,450,0.25,0.0006823969802519279
+10,450,0.30000000000000004,0.0006652577072595538
+10,450,0.35000000000000003,0.0006519271615988185
+10,450,0.4,0.0006424053432697219
+10,450,0.45,0.0006366922522722639
+10,450,0.5,0.0006347878886064444
+10,450,0.55,0.000636692252272264
+10,450,0.6000000000000001,0.0006424053432697219
+10,450,0.65,0.0006519271615988185
+10,450,0.7000000000000001,0.0006652577072595538
+10,450,0.75,0.0006823969802519279
+10,450,0.8,0.0007033449805759406
+10,450,0.8500000000000001,0.0007281017082315918
+10,450,0.9,0.0007566671632188818
+10,450,0.9500000000000001,0.0007890413455378106
+10,450,1.0,0.0008252242551883779
+10,500,0.0,0.0008292108457931528
+10,500,0.05,0.0007928531394776067
+10,500,0.1,0.0007603225601426445
+10,500,0.15000000000000002,0.0007316191077882664
+10,500,0.2,0.0007067427824144716
+10,500,0.25,0.0006856935840212608
+10,500,0.30000000000000004,0.0006684715126086338
+10,500,0.35000000000000003,0.0006550765681765905
+10,500,0.4,0.0006455087507251313
+10,500,0.45,0.0006397680602542556
+10,500,0.5,0.0006378544967639636
+10,500,0.55,0.0006397680602542557
+10,500,0.6000000000000001,0.0006455087507251313
+10,500,0.65,0.0006550765681765905
+10,500,0.7000000000000001,0.0006684715126086338
+10,500,0.75,0.0006856935840212608
+10,500,0.8,0.0007067427824144716
+10,500,0.8500000000000001,0.0007316191077882664
+10,500,0.9,0.0007603225601426445
+10,500,0.9500000000000001,0.0007928531394776069
+10,500,1.0,0.0008292108457931528
+10,550,0.0,0.0008331974363979275
+10,550,0.05,0.0007966649334174028
+10,550,0.1,0.0007639779570664072
+10,550,0.15000000000000002,0.0007351365073449405
+10,550,0.2,0.0007101405842530028
+10,550,0.25,0.0006889901877905938
+10,550,0.30000000000000004,0.0006716853179577139
+10,550,0.35000000000000003,0.0006582259747543625
+10,550,0.4,0.0006486121581805405
+10,550,0.45,0.000642843868236247
+10,550,0.5,0.0006409211049214827
+10,550,0.55,0.0006428438682362472
+10,550,0.6000000000000001,0.0006486121581805405
+10,550,0.65,0.0006582259747543625
+10,550,0.7000000000000001,0.0006716853179577139
+10,550,0.75,0.0006889901877905938
+10,550,0.8,0.0007101405842530028
+10,550,0.8500000000000001,0.0007351365073449405
+10,550,0.9,0.0007639779570664072
+10,550,0.9500000000000001,0.000796664933417403
+10,550,1.0,0.0008331974363979275
+10,600,0.0,0.0008371840270027024
+10,600,0.05,0.0008004767273571992
+10,600,0.1,0.00076763335399017
+10,600,0.15000000000000002,0.000738653906901615
+10,600,0.2,0.000713538386091534
+10,600,0.25,0.0006922867915599268
+10,600,0.30000000000000004,0.0006748991233067939
+10,600,0.35000000000000003,0.0006613753813321348
+10,600,0.4,0.0006517155656359497
+10,600,0.45,0.0006459196762182387
+10,600,0.5,0.0006439877130790017
+10,600,0.55,0.0006459196762182389
+10,600,0.6000000000000001,0.0006517155656359497
+10,600,0.65,0.0006613753813321348
+10,600,0.7000000000000001,0.0006748991233067939
+10,600,0.75,0.0006922867915599268
+10,600,0.8,0.000713538386091534
+10,600,0.8500000000000001,0.000738653906901615
+10,600,0.9,0.00076763335399017
+10,600,0.9500000000000001,0.0008004767273571993
+10,600,1.0,0.0008371840270027024
+10,650,0.0,0.0008411706176074771
+10,650,0.05,0.0008042885212969953
+10,650,0.1,0.0007712887509139327
+10,650,0.15000000000000002,0.0007421713064582893
+10,650,0.2,0.000716936187930065
+10,650,0.25,0.0006955833953292598
+10,650,0.30000000000000004,0.0006781129286558738
+10,650,0.35000000000000003,0.0006645247879099067
+10,650,0.4,0.000654818973091359
+10,650,0.45,0.0006489954842002303
+10,650,0.5,0.0006470543212365208
+10,650,0.55,0.0006489954842002305
+10,650,0.6000000000000001,0.000654818973091359
+10,650,0.65,0.0006645247879099067
+10,650,0.7000000000000001,0.0006781129286558738
+10,650,0.75,0.0006955833953292598
+10,650,0.8,0.000716936187930065
+10,650,0.8500000000000001,0.0007421713064582893
+10,650,0.9,0.0007712887509139327
+10,650,0.9500000000000001,0.0008042885212969954
+10,650,1.0,0.0008411706176074771
+10,700,0.0,0.0008451572082122518
+10,700,0.05,0.0008081003152367915
+10,700,0.1,0.0007749441478376954
+10,700,0.15000000000000002,0.0007456887060149637
+10,700,0.2,0.0007203339897685962
+10,700,0.25,0.0006988799990985928
+10,700,0.30000000000000004,0.0006813267340049538
+10,700,0.35000000000000003,0.0006676741944876788
+10,700,0.4,0.0006579223805467684
+10,700,0.45,0.000652071292182222
+10,700,0.5,0.0006501209293940398
+10,700,0.55,0.0006520712921822222
+10,700,0.6000000000000001,0.0006579223805467684
+10,700,0.65,0.0006676741944876788
+10,700,0.7000000000000001,0.0006813267340049538
+10,700,0.75,0.0006988799990985928
+10,700,0.8,0.0007203339897685962
+10,700,0.8500000000000001,0.0007456887060149637
+10,700,0.9,0.0007749441478376954
+10,700,0.9500000000000001,0.0008081003152367917
+10,700,1.0,0.0008451572082122518
+20,-400,0.0,0.0006146189321337941
+20,-400,0.05,0.0005876702558786968
+20,-400,0.1,0.0005635582823872941
+20,-400,0.15000000000000002,0.000542283011659586
+20,-400,0.2,0.0005238444436955721
+20,-400,0.25,0.0005082425784952528
+20,-400,0.30000000000000004,0.0004954774160586278
+20,-400,0.35000000000000003,0.0004855489563856972
+20,-400,0.4,0.0004784571994764612
+20,-400,0.45,0.0004742021453309195
+20,-400,0.5,0.0004727837939490723
+20,-400,0.55,0.00047420214533091956
+20,-400,0.6000000000000001,0.0004784571994764612
+20,-400,0.65,0.0004855489563856972
+20,-400,0.7000000000000001,0.0004954774160586278
+20,-400,0.75,0.0005082425784952528
+20,-400,0.8,0.0005238444436955721
+20,-400,0.8500000000000001,0.000542283011659586
+20,-400,0.9,0.0005635582823872941
+20,-400,0.9500000000000001,0.0005876702558786969
+20,-400,1.0,0.0006146189321337941
+20,-350,0.0,0.0006116353450846008
+20,-350,0.05,0.0005848174876462759
+20,-350,0.1,0.00056082256256988
+20,-350,0.15000000000000002,0.0005396505698554132
+20,-350,0.2,0.0005213015095028752
+20,-350,0.25,0.000505775381512266
+20,-350,0.30000000000000004,0.0004930721858835859
+20,-350,0.35000000000000003,0.0004831919226168345
+20,-350,0.4,0.0004761345917120123
+20,-350,0.45,0.00047190019316911886
+20,-350,0.5,0.0004704887269881544
+20,-350,0.55,0.0004719001931691189
+20,-350,0.6000000000000001,0.0004761345917120123
+20,-350,0.65,0.0004831919226168345
+20,-350,0.7000000000000001,0.0004930721858835859
+20,-350,0.75,0.000505775381512266
+20,-350,0.8,0.0005213015095028752
+20,-350,0.8500000000000001,0.0005396505698554132
+20,-350,0.9,0.00056082256256988
+20,-350,0.9500000000000001,0.0005848174876462761
+20,-350,1.0,0.0006116353450846008
+20,-300,0.0,0.0006086517580354078
+20,-300,0.05,0.0005819647194138551
+20,-300,0.1,0.000558086842752466
+20,-300,0.15000000000000002,0.0005370181280512404
+20,-300,0.2,0.0005187585753101782
+20,-300,0.25,0.0005033081845292794
+20,-300,0.30000000000000004,0.000490666955708544
+20,-300,0.35000000000000003,0.0004808348888479719
+20,-300,0.4,0.0004738119839475635
+20,-300,0.45,0.00046959824100731827
+20,-300,0.5,0.00046819366002723664
+20,-300,0.55,0.0004695982410073184
+20,-300,0.6000000000000001,0.0004738119839475635
+20,-300,0.65,0.0004808348888479719
+20,-300,0.7000000000000001,0.000490666955708544
+20,-300,0.75,0.0005033081845292794
+20,-300,0.8,0.0005187585753101782
+20,-300,0.8500000000000001,0.0005370181280512404
+20,-300,0.9,0.000558086842752466
+20,-300,0.9500000000000001,0.0005819647194138552
+20,-300,1.0,0.0006086517580354078
+20,-250,0.0,0.0006056681709862145
+20,-250,0.05,0.0005791119511814341
+20,-250,0.1,0.0005553511229350519
+20,-250,0.15000000000000002,0.0005343856862470677
+20,-250,0.2,0.0005162156411174811
+20,-250,0.25,0.0005008409875462927
+20,-250,0.30000000000000004,0.0004882617255335021
+20,-250,0.35000000000000003,0.00047847785507910924
+20,-250,0.4,0.00047148937618311467
+20,-250,0.45,0.0004672962888455177
+20,-250,0.5,0.00046589859306631873
+20,-250,0.55,0.0004672962888455178
+20,-250,0.6000000000000001,0.00047148937618311467
+20,-250,0.65,0.00047847785507910924
+20,-250,0.7000000000000001,0.0004882617255335021
+20,-250,0.75,0.0005008409875462927
+20,-250,0.8,0.0005162156411174811
+20,-250,0.8500000000000001,0.0005343856862470677
+20,-250,0.9,0.0005553511229350519
+20,-250,0.9500000000000001,0.0005791119511814344
+20,-250,1.0,0.0006056681709862145
+20,-200,0.0,0.0006026845839370214
+20,-200,0.05,0.0005762591829490133
+20,-200,0.1,0.0005526154031176379
+20,-200,0.15000000000000002,0.0005317532444428949
+20,-200,0.2,0.0005136727069247843
+20,-200,0.25,0.000498373790563306
+20,-200,0.30000000000000004,0.0004858564953584603
+20,-200,0.35000000000000003,0.00047612082131024677
+20,-200,0.4,0.0004691667684186658
+20,-200,0.45,0.00046499433668371713
+20,-200,0.5,0.00046360352610540093
+20,-200,0.55,0.0004649943366837172
+20,-200,0.6000000000000001,0.0004691667684186658
+20,-200,0.65,0.00047612082131024677
+20,-200,0.7000000000000001,0.0004858564953584603
+20,-200,0.75,0.000498373790563306
+20,-200,0.8,0.0005136727069247843
+20,-200,0.8500000000000001,0.0005317532444428949
+20,-200,0.9,0.0005526154031176379
+20,-200,0.9500000000000001,0.0005762591829490134
+20,-200,1.0,0.0006026845839370214
+20,-150,0.0,0.0005997009968878281
+20,-150,0.05,0.0005734064147165924
+20,-150,0.1,0.0005498796833002238
+20,-150,0.15000000000000002,0.0005291208026387221
+20,-150,0.2,0.0005111297727320873
+20,-150,0.25,0.0004959065935803193
+20,-150,0.30000000000000004,0.00048345126518341833
+20,-150,0.35000000000000003,0.0004737637875413841
+20,-150,0.4,0.0004668441606542169
+20,-150,0.45,0.00046269238452191654
+20,-150,0.5,0.0004613084591444831
+20,-150,0.55,0.00046269238452191665
+20,-150,0.6000000000000001,0.0004668441606542169
+20,-150,0.65,0.0004737637875413841
+20,-150,0.7000000000000001,0.00048345126518341833
+20,-150,0.75,0.0004959065935803193
+20,-150,0.8,0.0005111297727320873
+20,-150,0.8500000000000001,0.0005291208026387221
+20,-150,0.9,0.0005498796833002238
+20,-150,0.9500000000000001,0.0005734064147165926
+20,-150,1.0,0.0005997009968878281
+20,-100,0.0,0.000596717409838635
+20,-100,0.05,0.0005705536464841717
+20,-100,0.1,0.0005471439634828099
+20,-100,0.15000000000000002,0.0005264883608345495
+20,-100,0.2,0.0005085868385393904
+20,-100,0.25,0.0004934393965973327
+20,-100,0.30000000000000004,0.0004810460350083765
+20,-100,0.35000000000000003,0.0004714067537725215
+20,-100,0.4,0.0004645215528897681
+20,-100,0.45,0.000460390432360116
+20,-100,0.5,0.0004590133921835653
+20,-100,0.55,0.00046039043236011605
+20,-100,0.6000000000000001,0.0004645215528897681
+20,-100,0.65,0.0004714067537725215
+20,-100,0.7000000000000001,0.0004810460350083765
+20,-100,0.75,0.0004934393965973327
+20,-100,0.8,0.0005085868385393904
+20,-100,0.8500000000000001,0.0005264883608345495
+20,-100,0.9,0.0005471439634828099
+20,-100,0.9500000000000001,0.0005705536464841718
+20,-100,1.0,0.000596717409838635
+20,-50,0.0,0.0005937338227894419
+20,-50,0.05,0.0005677008782517507
+20,-50,0.1,0.0005444082436653957
+20,-50,0.15000000000000002,0.0005238559190303767
+20,-50,0.2,0.0005060439043466934
+20,-50,0.25,0.000490972199614346
+20,-50,0.30000000000000004,0.0004786408048333346
+20,-50,0.35000000000000003,0.00046904972000365894
+20,-50,0.4,0.0004621989451253193
+20,-50,0.45,0.0004580884801983154
+20,-50,0.5,0.0004567183252226475
+20,-50,0.55,0.0004580884801983155
+20,-50,0.6000000000000001,0.0004621989451253193
+20,-50,0.65,0.00046904972000365894
+20,-50,0.7000000000000001,0.0004786408048333346
+20,-50,0.75,0.000490972199614346
+20,-50,0.8,0.0005060439043466934
+20,-50,0.8500000000000001,0.0005238559190303767
+20,-50,0.9,0.0005444082436653957
+20,-50,0.9500000000000001,0.0005677008782517509
+20,-50,1.0,0.0005937338227894419
+20,0,0.0,0.0005907502357402486
+20,0,0.05,0.00056484811001933
+20,0,0.1,0.0005416725238479817
+20,0,0.15000000000000002,0.000521223477226204
+20,0,0.2,0.0005035009701539966
+20,0,0.25,0.0004885050026313594
+20,0,0.30000000000000004,0.0004762355746582927
+20,0,0.35000000000000003,0.00046669268623479625
+20,0,0.4,0.0004598763373608705
+20,0,0.45,0.0004557865280365148
+20,0,0.5,0.0004544232582617296
+20,0,0.55,0.0004557865280365149
+20,0,0.6000000000000001,0.0004598763373608705
+20,0,0.65,0.00046669268623479625
+20,0,0.7000000000000001,0.0004762355746582927
+20,0,0.75,0.0004885050026313594
+20,0,0.8,0.0005035009701539966
+20,0,0.8500000000000001,0.000521223477226204
+20,0,0.9,0.0005416725238479817
+20,0,0.9500000000000001,0.0005648481100193301
+20,0,1.0,0.0005907502357402486
+20,50,0.0,0.0005937338227894419
+20,50,0.05,0.0005677008782517507
+20,50,0.1,0.0005444082436653957
+20,50,0.15000000000000002,0.0005238559190303767
+20,50,0.2,0.0005060439043466934
+20,50,0.25,0.000490972199614346
+20,50,0.30000000000000004,0.0004786408048333346
+20,50,0.35000000000000003,0.00046904972000365894
+20,50,0.4,0.0004621989451253193
+20,50,0.45,0.0004580884801983154
+20,50,0.5,0.0004567183252226475
+20,50,0.55,0.0004580884801983155
+20,50,0.6000000000000001,0.0004621989451253193
+20,50,0.65,0.00046904972000365894
+20,50,0.7000000000000001,0.0004786408048333346
+20,50,0.75,0.000490972199614346
+20,50,0.8,0.0005060439043466934
+20,50,0.8500000000000001,0.0005238559190303767
+20,50,0.9,0.0005444082436653957
+20,50,0.9500000000000001,0.0005677008782517509
+20,50,1.0,0.0005937338227894419
+20,100,0.0,0.000596717409838635
+20,100,0.05,0.0005705536464841717
+20,100,0.1,0.0005471439634828099
+20,100,0.15000000000000002,0.0005264883608345495
+20,100,0.2,0.0005085868385393904
+20,100,0.25,0.0004934393965973327
+20,100,0.30000000000000004,0.0004810460350083765
+20,100,0.35000000000000003,0.0004714067537725215
+20,100,0.4,0.0004645215528897681
+20,100,0.45,0.000460390432360116
+20,100,0.5,0.0004590133921835653
+20,100,0.55,0.00046039043236011605
+20,100,0.6000000000000001,0.0004645215528897681
+20,100,0.65,0.0004714067537725215
+20,100,0.7000000000000001,0.0004810460350083765
+20,100,0.75,0.0004934393965973327
+20,100,0.8,0.0005085868385393904
+20,100,0.8500000000000001,0.0005264883608345495
+20,100,0.9,0.0005471439634828099
+20,100,0.9500000000000001,0.0005705536464841718
+20,100,1.0,0.000596717409838635
+20,150,0.0,0.0005997009968878281
+20,150,0.05,0.0005734064147165924
+20,150,0.1,0.0005498796833002238
+20,150,0.15000000000000002,0.0005291208026387221
+20,150,0.2,0.0005111297727320873
+20,150,0.25,0.0004959065935803193
+20,150,0.30000000000000004,0.00048345126518341833
+20,150,0.35000000000000003,0.0004737637875413841
+20,150,0.4,0.0004668441606542169
+20,150,0.45,0.00046269238452191654
+20,150,0.5,0.0004613084591444831
+20,150,0.55,0.00046269238452191665
+20,150,0.6000000000000001,0.0004668441606542169
+20,150,0.65,0.0004737637875413841
+20,150,0.7000000000000001,0.00048345126518341833
+20,150,0.75,0.0004959065935803193
+20,150,0.8,0.0005111297727320873
+20,150,0.8500000000000001,0.0005291208026387221
+20,150,0.9,0.0005498796833002238
+20,150,0.9500000000000001,0.0005734064147165926
+20,150,1.0,0.0005997009968878281
+20,200,0.0,0.0006026845839370214
+20,200,0.05,0.0005762591829490133
+20,200,0.1,0.0005526154031176379
+20,200,0.15000000000000002,0.0005317532444428949
+20,200,0.2,0.0005136727069247843
+20,200,0.25,0.000498373790563306
+20,200,0.30000000000000004,0.0004858564953584603
+20,200,0.35000000000000003,0.00047612082131024677
+20,200,0.4,0.0004691667684186658
+20,200,0.45,0.00046499433668371713
+20,200,0.5,0.00046360352610540093
+20,200,0.55,0.0004649943366837172
+20,200,0.6000000000000001,0.0004691667684186658
+20,200,0.65,0.00047612082131024677
+20,200,0.7000000000000001,0.0004858564953584603
+20,200,0.75,0.000498373790563306
+20,200,0.8,0.0005136727069247843
+20,200,0.8500000000000001,0.0005317532444428949
+20,200,0.9,0.0005526154031176379
+20,200,0.9500000000000001,0.0005762591829490134
+20,200,1.0,0.0006026845839370214
+20,250,0.0,0.0006056681709862145
+20,250,0.05,0.0005791119511814341
+20,250,0.1,0.0005553511229350519
+20,250,0.15000000000000002,0.0005343856862470677
+20,250,0.2,0.0005162156411174811
+20,250,0.25,0.0005008409875462927
+20,250,0.30000000000000004,0.0004882617255335021
+20,250,0.35000000000000003,0.00047847785507910924
+20,250,0.4,0.00047148937618311467
+20,250,0.45,0.0004672962888455177
+20,250,0.5,0.00046589859306631873
+20,250,0.55,0.0004672962888455178
+20,250,0.6000000000000001,0.00047148937618311467
+20,250,0.65,0.00047847785507910924
+20,250,0.7000000000000001,0.0004882617255335021
+20,250,0.75,0.0005008409875462927
+20,250,0.8,0.0005162156411174811
+20,250,0.8500000000000001,0.0005343856862470677
+20,250,0.9,0.0005553511229350519
+20,250,0.9500000000000001,0.0005791119511814344
+20,250,1.0,0.0006056681709862145
+20,300,0.0,0.0006086517580354078
+20,300,0.05,0.0005819647194138551
+20,300,0.1,0.000558086842752466
+20,300,0.15000000000000002,0.0005370181280512404
+20,300,0.2,0.0005187585753101782
+20,300,0.25,0.0005033081845292794
+20,300,0.30000000000000004,0.000490666955708544
+20,300,0.35000000000000003,0.0004808348888479719
+20,300,0.4,0.0004738119839475635
+20,300,0.45,0.00046959824100731827
+20,300,0.5,0.00046819366002723664
+20,300,0.55,0.0004695982410073184
+20,300,0.6000000000000001,0.0004738119839475635
+20,300,0.65,0.0004808348888479719
+20,300,0.7000000000000001,0.000490666955708544
+20,300,0.75,0.0005033081845292794
+20,300,0.8,0.0005187585753101782
+20,300,0.8500000000000001,0.0005370181280512404
+20,300,0.9,0.000558086842752466
+20,300,0.9500000000000001,0.0005819647194138552
+20,300,1.0,0.0006086517580354078
+20,350,0.0,0.0006116353450846008
+20,350,0.05,0.0005848174876462759
+20,350,0.1,0.00056082256256988
+20,350,0.15000000000000002,0.0005396505698554132
+20,350,0.2,0.0005213015095028752
+20,350,0.25,0.000505775381512266
+20,350,0.30000000000000004,0.0004930721858835859
+20,350,0.35000000000000003,0.0004831919226168345
+20,350,0.4,0.0004761345917120123
+20,350,0.45,0.00047190019316911886
+20,350,0.5,0.0004704887269881544
+20,350,0.55,0.0004719001931691189
+20,350,0.6000000000000001,0.0004761345917120123
+20,350,0.65,0.0004831919226168345
+20,350,0.7000000000000001,0.0004930721858835859
+20,350,0.75,0.000505775381512266
+20,350,0.8,0.0005213015095028752
+20,350,0.8500000000000001,0.0005396505698554132
+20,350,0.9,0.00056082256256988
+20,350,0.9500000000000001,0.0005848174876462761
+20,350,1.0,0.0006116353450846008
+20,400,0.0,0.0006146189321337941
+20,400,0.05,0.0005876702558786968
+20,400,0.1,0.0005635582823872941
+20,400,0.15000000000000002,0.000542283011659586
+20,400,0.2,0.0005238444436955721
+20,400,0.25,0.0005082425784952528
+20,400,0.30000000000000004,0.0004954774160586278
+20,400,0.35000000000000003,0.0004855489563856972
+20,400,0.4,0.0004784571994764612
+20,400,0.45,0.0004742021453309195
+20,400,0.5,0.0004727837939490723
+20,400,0.55,0.00047420214533091956
+20,400,0.6000000000000001,0.0004784571994764612
+20,400,0.65,0.0004855489563856972
+20,400,0.7000000000000001,0.0004954774160586278
+20,400,0.75,0.0005082425784952528
+20,400,0.8,0.0005238444436955721
+20,400,0.8500000000000001,0.000542283011659586
+20,400,0.9,0.0005635582823872941
+20,400,0.9500000000000001,0.0005876702558786969
+20,400,1.0,0.0006146189321337941
+20,450,0.0,0.0006176025191829872
+20,450,0.05,0.0005905230241111175
+20,450,0.1,0.0005662940022047082
+20,450,0.15000000000000002,0.0005449154534637586
+20,450,0.2,0.000526387377888269
+20,450,0.25,0.0005107097754782394
+20,450,0.30000000000000004,0.0004978826462336696
+20,450,0.35000000000000003,0.0004879059901545597
+20,450,0.4,0.00048077980724091
+20,450,0.45,0.00047650409749272
+20,450,0.5,0.0004750788609099901
+20,450,0.55,0.00047650409749272005
+20,450,0.6000000000000001,0.00048077980724091
+20,450,0.65,0.0004879059901545597
+20,450,0.7000000000000001,0.0004978826462336696
+20,450,0.75,0.0005107097754782394
+20,450,0.8,0.000526387377888269
+20,450,0.8500000000000001,0.0005449154534637586
+20,450,0.9,0.0005662940022047082
+20,450,0.9500000000000001,0.0005905230241111179
+20,450,1.0,0.0006176025191829872
+20,500,0.0,0.0006205861062321804
+20,500,0.05,0.0005933757923435386
+20,500,0.1,0.0005690297220221222
+20,500,0.15000000000000002,0.0005475478952679315
+20,500,0.2,0.000528930312080966
+20,500,0.25,0.0005131769724612261
+20,500,0.30000000000000004,0.0005002878764087115
+20,500,0.35000000000000003,0.0004902630239234224
+20,500,0.4,0.00048310241500535886
+20,500,0.45,0.00047880604965452064
+20,500,0.5,0.00047737392787090794
+20,500,0.55,0.00047880604965452075
+20,500,0.6000000000000001,0.00048310241500535886
+20,500,0.65,0.0004902630239234224
+20,500,0.7000000000000001,0.0005002878764087115
+20,500,0.75,0.0005131769724612261
+20,500,0.8,0.000528930312080966
+20,500,0.8500000000000001,0.0005475478952679315
+20,500,0.9,0.0005690297220221222
+20,500,0.9500000000000001,0.0005933757923435387
+20,500,1.0,0.0006205861062321804
+20,550,0.0,0.0006235696932813735
+20,550,0.05,0.0005962285605759593
+20,550,0.1,0.0005717654418395362
+20,550,0.15000000000000002,0.0005501803370721041
+20,550,0.2,0.000531473246273663
+20,550,0.25,0.0005156441694442127
+20,550,0.30000000000000004,0.0005026931065837535
+20,550,0.35000000000000003,0.0004926200576922849
+20,550,0.4,0.0004854250227698077
+20,550,0.45,0.00048110800181632113
+20,550,0.5,0.00047966899483182574
+20,550,0.55,0.00048110800181632124
+20,550,0.6000000000000001,0.0004854250227698077
+20,550,0.65,0.0004926200576922849
+20,550,0.7000000000000001,0.0005026931065837535
+20,550,0.75,0.0005156441694442127
+20,550,0.8,0.000531473246273663
+20,550,0.8500000000000001,0.0005501803370721041
+20,550,0.9,0.0005717654418395362
+20,550,0.9500000000000001,0.0005962285605759595
+20,550,1.0,0.0006235696932813735
+20,600,0.0,0.0006265532803305668
+20,600,0.05,0.0005990813288083803
+20,600,0.1,0.0005745011616569504
+20,600,0.15000000000000002,0.0005528127788762769
+20,600,0.2,0.00053401618046636
+20,600,0.25,0.0005181113664271994
+20,600,0.30000000000000004,0.0005050983367587954
+20,600,0.35000000000000003,0.0004949770914611476
+20,600,0.4,0.0004877476305342565
+20,600,0.45,0.0004834099539781218
+20,600,0.5,0.0004819640617927436
+20,600,0.55,0.0004834099539781219
+20,600,0.6000000000000001,0.0004877476305342565
+20,600,0.65,0.0004949770914611476
+20,600,0.7000000000000001,0.0005050983367587954
+20,600,0.75,0.0005181113664271994
+20,600,0.8,0.00053401618046636
+20,600,0.8500000000000001,0.0005528127788762769
+20,600,0.9,0.0005745011616569504
+20,600,0.9500000000000001,0.0005990813288083804
+20,600,1.0,0.0006265532803305668
+20,650,0.0,0.0006295368673797599
+20,650,0.05,0.000601934097040801
+20,650,0.1,0.0005772368814743644
+20,650,0.15000000000000002,0.0005554452206804496
+20,650,0.2,0.0005365591146590568
+20,650,0.25,0.000520578563410186
+20,650,0.30000000000000004,0.0005075035669338372
+20,650,0.35000000000000003,0.0004973341252300102
+20,650,0.4,0.0004900702382987053
+20,650,0.45,0.00048571190613992237
+20,650,0.5,0.0004842591287536614
+20,650,0.55,0.0004857119061399224
+20,650,0.6000000000000001,0.0004900702382987053
+20,650,0.65,0.0004973341252300102
+20,650,0.7000000000000001,0.0005075035669338372
+20,650,0.75,0.000520578563410186
+20,650,0.8,0.0005365591146590568
+20,650,0.8500000000000001,0.0005554452206804496
+20,650,0.9,0.0005772368814743644
+20,650,0.9500000000000001,0.0006019340970408013
+20,650,1.0,0.0006295368673797599
+20,700,0.0,0.0006325204544289531
+20,700,0.05,0.000604786865273222
+20,700,0.1,0.0005799726012917784
+20,700,0.15000000000000002,0.0005580776624846224
+20,700,0.2,0.0005391020488517538
+20,700,0.25,0.0005230457603931727
+20,700,0.30000000000000004,0.0005099087971088791
+20,700,0.35000000000000003,0.0004996911589988728
+20,700,0.4,0.0004923928460631542
+20,700,0.45,0.0004880138583017229
+20,700,0.5,0.00048655419571457924
+20,700,0.55,0.000488013858301723
+20,700,0.6000000000000001,0.0004923928460631542
+20,700,0.65,0.0004996911589988728
+20,700,0.7000000000000001,0.0005099087971088791
+20,700,0.75,0.0005230457603931727
+20,700,0.8,0.0005391020488517538
+20,700,0.8500000000000001,0.0005580776624846224
+20,700,0.9,0.0005799726012917784
+20,700,0.9500000000000001,0.0006047868652732222
+20,700,1.0,0.0006325204544289531
+30,-400,0.0,0.000468863776493636
+30,-400,0.05,0.0004483059032166073
+30,-400,0.1,0.00042991201660031846
+30,-400,0.15000000000000002,0.0004136821166447696
+30,-400,0.2,0.00039961620334996056
+30,-400,0.25,0.0003877142767158913
+30,-400,0.30000000000000004,0.000377976336742562
+30,-400,0.35000000000000003,0.0003704023834299724
+30,-400,0.4,0.00036499241677812283
+30,-400,0.45,0.000361746436787013
+30,-400,0.5,0.00036066444345664306
+30,-400,0.55,0.00036174643678701305
+30,-400,0.6000000000000001,0.00036499241677812283
+30,-400,0.65,0.0003704023834299724
+30,-400,0.7000000000000001,0.000377976336742562
+30,-400,0.75,0.0003877142767158913
+30,-400,0.8,0.00039961620334996056
+30,-400,0.8500000000000001,0.0004136821166447696
+30,-400,0.9,0.00042991201660031846
+30,-400,0.9500000000000001,0.0004483059032166074
+30,-400,1.0,0.000468863776493636
+30,-350,0.0,0.00046658773874366685
+30,-350,0.05,0.00044612966096798295
+30,-350,0.1,0.0004278250650634237
+30,-350,0.15000000000000002,0.00041167395102998907
+30,-350,0.2,0.0003976763188676791
+30,-350,0.25,0.0003858321685764937
+30,-350,0.30000000000000004,0.00037614150015643296
+30,-350,0.35000000000000003,0.00036860431360749677
+30,-350,0.4,0.00036322060892968525
+30,-350,0.45,0.0003599903861229983
+30,-350,0.5,0.000358913645187436
+30,-350,0.55,0.0003599903861229984
+30,-350,0.6000000000000001,0.00036322060892968525
+30,-350,0.65,0.00036860431360749677
+30,-350,0.7000000000000001,0.00037614150015643296
+30,-350,0.75,0.0003858321685764937
+30,-350,0.8,0.0003976763188676791
+30,-350,0.8500000000000001,0.00041167395102998907
+30,-350,0.9,0.0004278250650634237
+30,-350,0.9500000000000001,0.000446129660967983
+30,-350,1.0,0.00046658773874366685
+30,-300,0.0,0.0004643117009936978
+30,-300,0.05,0.00044395341871935863
+30,-300,0.1,0.000425738113526529
+30,-300,0.15000000000000002,0.0004096657854152087
+30,-300,0.2,0.0003957364343853978
+30,-300,0.25,0.0003839500604370962
+30,-300,0.30000000000000004,0.0003743066635703041
+30,-300,0.35000000000000003,0.00036680624378502115
+30,-300,0.4,0.00036144880108124783
+30,-300,0.45,0.00035823433545898375
+30,-300,0.5,0.000357162846918229
+30,-300,0.55,0.0003582343354589838
+30,-300,0.6000000000000001,0.00036144880108124783
+30,-300,0.65,0.00036680624378502115
+30,-300,0.7000000000000001,0.0003743066635703041
+30,-300,0.75,0.0003839500604370962
+30,-300,0.8,0.0003957364343853978
+30,-300,0.8500000000000001,0.0004096657854152087
+30,-300,0.9,0.000425738113526529
+30,-300,0.9500000000000001,0.00044395341871935874
+30,-300,1.0,0.0004643117009936978
+30,-250,0.0,0.00046203566324372856
+30,-250,0.05,0.00044177717647073426
+30,-250,0.1,0.0004236511619896342
+30,-250,0.15000000000000002,0.0004076576198004282
+30,-250,0.2,0.0003937965499031164
+30,-250,0.25,0.00038206795229769864
+30,-250,0.30000000000000004,0.0003724718269841751
+30,-250,0.35000000000000003,0.00036500817396254554
+30,-250,0.4,0.00035967699323281025
+30,-250,0.45,0.00035647828479496905
+30,-250,0.5,0.000355412048649022
+30,-250,0.55,0.00035647828479496915
+30,-250,0.6000000000000001,0.00035967699323281025
+30,-250,0.65,0.00036500817396254554
+30,-250,0.7000000000000001,0.0003724718269841751
+30,-250,0.75,0.00038206795229769864
+30,-250,0.8,0.0003937965499031164
+30,-250,0.8500000000000001,0.0004076576198004282
+30,-250,0.9,0.0004236511619896342
+30,-250,0.9500000000000001,0.00044177717647073437
+30,-250,1.0,0.00046203566324372856
+30,-200,0.0,0.00045975962549375956
+30,-200,0.05,0.0004396009342221101
+30,-200,0.1,0.0004215642104527394
+30,-200,0.15000000000000002,0.0004056494541856478
+30,-200,0.2,0.0003918566654208351
+30,-200,0.25,0.00038018584415830116
+30,-200,0.30000000000000004,0.0003706369903980462
+30,-200,0.35000000000000003,0.00036321010414007
+30,-200,0.4,0.00035790518538437283
+30,-200,0.45,0.00035472223413095445
+30,-200,0.5,0.00035366125037981504
+30,-200,0.55,0.00035472223413095456
+30,-200,0.6000000000000001,0.00035790518538437283
+30,-200,0.65,0.00036321010414007
+30,-200,0.7000000000000001,0.0003706369903980462
+30,-200,0.75,0.00038018584415830116
+30,-200,0.8,0.0003918566654208351
+30,-200,0.8500000000000001,0.0004056494541856478
+30,-200,0.9,0.0004215642104527394
+30,-200,0.9500000000000001,0.00043960093422211016
+30,-200,1.0,0.00045975962549375956
+30,-150,0.0,0.0004574835877437904
+30,-150,0.05,0.00043742469197348573
+30,-150,0.1,0.0004194772589158446
+30,-150,0.15000000000000002,0.0004036412885708673
+30,-150,0.2,0.00038991678093855365
+30,-150,0.25,0.00037830373601890357
+30,-150,0.30000000000000004,0.0003688021538119172
+30,-150,0.35000000000000003,0.00036141203431759437
+30,-150,0.4,0.0003561333775359353
+30,-150,0.45,0.0003529661834669398
+30,-150,0.5,0.000351910452110608
+30,-150,0.55,0.0003529661834669399
+30,-150,0.6000000000000001,0.0003561333775359353
+30,-150,0.65,0.00036141203431759437
+30,-150,0.7000000000000001,0.0003688021538119172
+30,-150,0.75,0.00037830373601890357
+30,-150,0.8,0.00038991678093855365
+30,-150,0.8500000000000001,0.0004036412885708673
+30,-150,0.9,0.0004194772589158446
+30,-150,0.9500000000000001,0.0004374246919734858
+30,-150,1.0,0.0004574835877437904
+30,-100,0.0,0.0004552075499938213
+30,-100,0.05,0.0004352484497248614
+30,-100,0.1,0.00041739030737894994
+30,-100,0.15000000000000002,0.0004016331229560869
+30,-100,0.2,0.00038797689645627233
+30,-100,0.25,0.0003764216278795061
+30,-100,0.30000000000000004,0.00036696731722578833
+30,-100,0.35000000000000003,0.0003596139644951188
+30,-100,0.4,0.00035436156968749784
+30,-100,0.45,0.0003512101328029252
+30,-100,0.5,0.000350159653841401
+30,-100,0.55,0.0003512101328029253
+30,-100,0.6000000000000001,0.00035436156968749784
+30,-100,0.65,0.0003596139644951188
+30,-100,0.7000000000000001,0.00036696731722578833
+30,-100,0.75,0.0003764216278795061
+30,-100,0.8,0.00038797689645627233
+30,-100,0.8500000000000001,0.0004016331229560869
+30,-100,0.9,0.00041739030737894994
+30,-100,0.9500000000000001,0.0004352484497248615
+30,-100,1.0,0.0004552075499938213
+30,-50,0.0,0.0004529315122438522
+30,-50,0.05,0.00043307220747623715
+30,-50,0.1,0.00041530335584205515
+30,-50,0.15000000000000002,0.0003996249573413065
+30,-50,0.2,0.00038603701197399096
+30,-50,0.25,0.00037453951974010855
+30,-50,0.30000000000000004,0.00036513248063965937
+30,-50,0.35000000000000003,0.0003578158946726432
+30,-50,0.4,0.00035258976183906036
+30,-50,0.45,0.0003494540821389106
+30,-50,0.5,0.000348408855572194
+30,-50,0.55,0.00034945408213891066
+30,-50,0.6000000000000001,0.00035258976183906036
+30,-50,0.65,0.0003578158946726432
+30,-50,0.7000000000000001,0.00036513248063965937
+30,-50,0.75,0.00037453951974010855
+30,-50,0.8,0.00038603701197399096
+30,-50,0.8500000000000001,0.0003996249573413065
+30,-50,0.9,0.00041530335584205515
+30,-50,0.9500000000000001,0.0004330722074762372
+30,-50,1.0,0.0004529315122438522
+30,0,0.0,0.00045065547449388315
+30,0,0.05,0.0004308959652276128
+30,0,0.1,0.00041321640430516047
+30,0,0.15000000000000002,0.0003976167917265261
+30,0,0.2,0.0003840971274917096
+30,0,0.25,0.000372657411600711
+30,0,0.30000000000000004,0.0003632976440535304
+30,0,0.35000000000000003,0.00035601782485016764
+30,0,0.4,0.00035081795399062284
+30,0,0.45,0.00034769803147489595
+30,0,0.5,0.000346658057302987
+30,0,0.55,0.00034769803147489606
+30,0,0.6000000000000001,0.00035081795399062284
+30,0,0.65,0.00035601782485016764
+30,0,0.7000000000000001,0.0003632976440535304
+30,0,0.75,0.000372657411600711
+30,0,0.8,0.0003840971274917096
+30,0,0.8500000000000001,0.0003976167917265261
+30,0,0.9,0.00041321640430516047
+30,0,0.9500000000000001,0.00043089596522761283
+30,0,1.0,0.00045065547449388315
+30,50,0.0,0.0004529315122438522
+30,50,0.05,0.00043307220747623715
+30,50,0.1,0.00041530335584205515
+30,50,0.15000000000000002,0.0003996249573413065
+30,50,0.2,0.00038603701197399096
+30,50,0.25,0.00037453951974010855
+30,50,0.30000000000000004,0.00036513248063965937
+30,50,0.35000000000000003,0.0003578158946726432
+30,50,0.4,0.00035258976183906036
+30,50,0.45,0.0003494540821389106
+30,50,0.5,0.000348408855572194
+30,50,0.55,0.00034945408213891066
+30,50,0.6000000000000001,0.00035258976183906036
+30,50,0.65,0.0003578158946726432
+30,50,0.7000000000000001,0.00036513248063965937
+30,50,0.75,0.00037453951974010855
+30,50,0.8,0.00038603701197399096
+30,50,0.8500000000000001,0.0003996249573413065
+30,50,0.9,0.00041530335584205515
+30,50,0.9500000000000001,0.0004330722074762372
+30,50,1.0,0.0004529315122438522
+30,100,0.0,0.0004552075499938213
+30,100,0.05,0.0004352484497248614
+30,100,0.1,0.00041739030737894994
+30,100,0.15000000000000002,0.0004016331229560869
+30,100,0.2,0.00038797689645627233
+30,100,0.25,0.0003764216278795061
+30,100,0.30000000000000004,0.00036696731722578833
+30,100,0.35000000000000003,0.0003596139644951188
+30,100,0.4,0.00035436156968749784
+30,100,0.45,0.0003512101328029252
+30,100,0.5,0.000350159653841401
+30,100,0.55,0.0003512101328029253
+30,100,0.6000000000000001,0.00035436156968749784
+30,100,0.65,0.0003596139644951188
+30,100,0.7000000000000001,0.00036696731722578833
+30,100,0.75,0.0003764216278795061
+30,100,0.8,0.00038797689645627233
+30,100,0.8500000000000001,0.0004016331229560869
+30,100,0.9,0.00041739030737894994
+30,100,0.9500000000000001,0.0004352484497248615
+30,100,1.0,0.0004552075499938213
+30,150,0.0,0.0004574835877437904
+30,150,0.05,0.00043742469197348573
+30,150,0.1,0.0004194772589158446
+30,150,0.15000000000000002,0.0004036412885708673
+30,150,0.2,0.00038991678093855365
+30,150,0.25,0.00037830373601890357
+30,150,0.30000000000000004,0.0003688021538119172
+30,150,0.35000000000000003,0.00036141203431759437
+30,150,0.4,0.0003561333775359353
+30,150,0.45,0.0003529661834669398
+30,150,0.5,0.000351910452110608
+30,150,0.55,0.0003529661834669399
+30,150,0.6000000000000001,0.0003561333775359353
+30,150,0.65,0.00036141203431759437
+30,150,0.7000000000000001,0.0003688021538119172
+30,150,0.75,0.00037830373601890357
+30,150,0.8,0.00038991678093855365
+30,150,0.8500000000000001,0.0004036412885708673
+30,150,0.9,0.0004194772589158446
+30,150,0.9500000000000001,0.0004374246919734858
+30,150,1.0,0.0004574835877437904
+30,200,0.0,0.00045975962549375956
+30,200,0.05,0.0004396009342221101
+30,200,0.1,0.0004215642104527394
+30,200,0.15000000000000002,0.0004056494541856478
+30,200,0.2,0.0003918566654208351
+30,200,0.25,0.00038018584415830116
+30,200,0.30000000000000004,0.0003706369903980462
+30,200,0.35000000000000003,0.00036321010414007
+30,200,0.4,0.00035790518538437283
+30,200,0.45,0.00035472223413095445
+30,200,0.5,0.00035366125037981504
+30,200,0.55,0.00035472223413095456
+30,200,0.6000000000000001,0.00035790518538437283
+30,200,0.65,0.00036321010414007
+30,200,0.7000000000000001,0.0003706369903980462
+30,200,0.75,0.00038018584415830116
+30,200,0.8,0.0003918566654208351
+30,200,0.8500000000000001,0.0004056494541856478
+30,200,0.9,0.0004215642104527394
+30,200,0.9500000000000001,0.00043960093422211016
+30,200,1.0,0.00045975962549375956
+30,250,0.0,0.00046203566324372856
+30,250,0.05,0.00044177717647073426
+30,250,0.1,0.0004236511619896342
+30,250,0.15000000000000002,0.0004076576198004282
+30,250,0.2,0.0003937965499031164
+30,250,0.25,0.00038206795229769864
+30,250,0.30000000000000004,0.0003724718269841751
+30,250,0.35000000000000003,0.00036500817396254554
+30,250,0.4,0.00035967699323281025
+30,250,0.45,0.00035647828479496905
+30,250,0.5,0.000355412048649022
+30,250,0.55,0.00035647828479496915
+30,250,0.6000000000000001,0.00035967699323281025
+30,250,0.65,0.00036500817396254554
+30,250,0.7000000000000001,0.0003724718269841751
+30,250,0.75,0.00038206795229769864
+30,250,0.8,0.0003937965499031164
+30,250,0.8500000000000001,0.0004076576198004282
+30,250,0.9,0.0004236511619896342
+30,250,0.9500000000000001,0.00044177717647073437
+30,250,1.0,0.00046203566324372856
+30,300,0.0,0.0004643117009936978
+30,300,0.05,0.00044395341871935863
+30,300,0.1,0.000425738113526529
+30,300,0.15000000000000002,0.0004096657854152087
+30,300,0.2,0.0003957364343853978
+30,300,0.25,0.0003839500604370962
+30,300,0.30000000000000004,0.0003743066635703041
+30,300,0.35000000000000003,0.00036680624378502115
+30,300,0.4,0.00036144880108124783
+30,300,0.45,0.00035823433545898375
+30,300,0.5,0.000357162846918229
+30,300,0.55,0.0003582343354589838
+30,300,0.6000000000000001,0.00036144880108124783
+30,300,0.65,0.00036680624378502115
+30,300,0.7000000000000001,0.0003743066635703041
+30,300,0.75,0.0003839500604370962
+30,300,0.8,0.0003957364343853978
+30,300,0.8500000000000001,0.0004096657854152087
+30,300,0.9,0.000425738113526529
+30,300,0.9500000000000001,0.00044395341871935874
+30,300,1.0,0.0004643117009936978
+30,350,0.0,0.00046658773874366685
+30,350,0.05,0.00044612966096798295
+30,350,0.1,0.0004278250650634237
+30,350,0.15000000000000002,0.00041167395102998907
+30,350,0.2,0.0003976763188676791
+30,350,0.25,0.0003858321685764937
+30,350,0.30000000000000004,0.00037614150015643296
+30,350,0.35000000000000003,0.00036860431360749677
+30,350,0.4,0.00036322060892968525
+30,350,0.45,0.0003599903861229983
+30,350,0.5,0.000358913645187436
+30,350,0.55,0.0003599903861229984
+30,350,0.6000000000000001,0.00036322060892968525
+30,350,0.65,0.00036860431360749677
+30,350,0.7000000000000001,0.00037614150015643296
+30,350,0.75,0.0003858321685764937
+30,350,0.8,0.0003976763188676791
+30,350,0.8500000000000001,0.00041167395102998907
+30,350,0.9,0.0004278250650634237
+30,350,0.9500000000000001,0.000446129660967983
+30,350,1.0,0.00046658773874366685
+30,400,0.0,0.000468863776493636
+30,400,0.05,0.0004483059032166073
+30,400,0.1,0.00042991201660031846
+30,400,0.15000000000000002,0.0004136821166447696
+30,400,0.2,0.00039961620334996056
+30,400,0.25,0.0003877142767158913
+30,400,0.30000000000000004,0.000377976336742562
+30,400,0.35000000000000003,0.0003704023834299724
+30,400,0.4,0.00036499241677812283
+30,400,0.45,0.000361746436787013
+30,400,0.5,0.00036066444345664306
+30,400,0.55,0.00036174643678701305
+30,400,0.6000000000000001,0.00036499241677812283
+30,400,0.65,0.0003704023834299724
+30,400,0.7000000000000001,0.000377976336742562
+30,400,0.75,0.0003877142767158913
+30,400,0.8,0.00039961620334996056
+30,400,0.8500000000000001,0.0004136821166447696
+30,400,0.9,0.00042991201660031846
+30,400,0.9500000000000001,0.0004483059032166074
+30,400,1.0,0.000468863776493636
+30,450,0.0,0.000471139814243605
+30,450,0.05,0.00045048214546523154
+30,450,0.1,0.00043199896813721315
+30,450,0.15000000000000002,0.00041569028225954996
+30,450,0.2,0.0004015560878322418
+30,450,0.25,0.0003895963848552888
+30,450,0.30000000000000004,0.0003798111733286909
+30,450,0.35000000000000003,0.00037220045325244794
+30,450,0.4,0.00036676422462656025
+30,450,0.45,0.0003635024874510276
+30,450,0.5,0.00036241524172585005
+30,450,0.55,0.00036350248745102765
+30,450,0.6000000000000001,0.00036676422462656025
+30,450,0.65,0.00037220045325244794
+30,450,0.7000000000000001,0.0003798111733286909
+30,450,0.75,0.0003895963848552888
+30,450,0.8,0.0004015560878322418
+30,450,0.8500000000000001,0.00041569028225954996
+30,450,0.9,0.00043199896813721315
+30,450,0.9500000000000001,0.0004504821454652316
+30,450,1.0,0.000471139814243605
+30,500,0.0,0.0004734158519935742
+30,500,0.05,0.0004526583877138559
+30,500,0.1,0.00043408591967410793
+30,500,0.15000000000000002,0.0004176984478743305
+30,500,0.2,0.00040349597231452325
+30,500,0.25,0.00039147849299468637
+30,500,0.30000000000000004,0.00038164600991481986
+30,500,0.35000000000000003,0.0003739985230749236
+30,500,0.4,0.00036853603247499777
+30,500,0.45,0.00036525853811504225
+30,500,0.5,0.0003641660399950571
+30,500,0.55,0.00036525853811504236
+30,500,0.6000000000000001,0.00036853603247499777
+30,500,0.65,0.0003739985230749236
+30,500,0.7000000000000001,0.00038164600991481986
+30,500,0.75,0.00039147849299468637
+30,500,0.8,0.00040349597231452325
+30,500,0.8500000000000001,0.0004176984478743305
+30,500,0.9,0.00043408591967410793
+30,500,0.9500000000000001,0.00045265838771385596
+30,500,1.0,0.0004734158519935742
+30,550,0.0,0.00047569188974354326
+30,550,0.05,0.0004548346299624802
+30,550,0.1,0.0004361728712110027
+30,550,0.15000000000000002,0.0004197066134891108
+30,550,0.2,0.0004054358567968045
+30,550,0.25,0.00039336060113408385
+30,550,0.30000000000000004,0.00038348084650094877
+30,550,0.35000000000000003,0.0003757965928973991
+30,550,0.4,0.00037030784032343524
+30,550,0.45,0.00036701458877905685
+30,550,0.5,0.00036591683826426403
+30,550,0.55,0.0003670145887790569
+30,550,0.6000000000000001,0.00037030784032343524
+30,550,0.65,0.0003757965928973991
+30,550,0.7000000000000001,0.00038348084650094877
+30,550,0.75,0.00039336060113408385
+30,550,0.8,0.0004054358567968045
+30,550,0.8500000000000001,0.0004197066134891108
+30,550,0.9,0.0004361728712110027
+30,550,0.9500000000000001,0.0004548346299624803
+30,550,1.0,0.00047569188974354326
+30,600,0.0,0.0004779679274935125
+30,600,0.05,0.00045701087221110455
+30,600,0.1,0.00043825982274789746
+30,600,0.15000000000000002,0.0004217147791038913
+30,600,0.2,0.000407375741279086
+30,600,0.25,0.00039524270927348144
+30,600,0.30000000000000004,0.00038531568308707774
+30,600,0.35000000000000003,0.0003775946627198748
+30,600,0.4,0.0003720796481718727
+30,600,0.45,0.00036877063944307144
+30,600,0.5,0.0003676676365334711
+30,600,0.55,0.0003687706394430716
+30,600,0.6000000000000001,0.0003720796481718727
+30,600,0.65,0.0003775946627198748
+30,600,0.7000000000000001,0.00038531568308707774
+30,600,0.75,0.00039524270927348144
+30,600,0.8,0.000407375741279086
+30,600,0.8500000000000001,0.0004217147791038913
+30,600,0.9,0.00043825982274789746
+30,600,0.9500000000000001,0.00045701087221110465
+30,600,1.0,0.0004779679274935125
+30,650,0.0,0.0004802439652434815
+30,650,0.05,0.00045918711445972876
+30,650,0.1,0.0004403467742847922
+30,650,0.15000000000000002,0.0004237229447186717
+30,650,0.2,0.00040931562576136725
+30,650,0.25,0.0003971248174128789
+30,650,0.30000000000000004,0.00038715051967320665
+30,650,0.35000000000000003,0.00037939273254235034
+30,650,0.4,0.0003738514560203102
+30,650,0.45,0.00037052669010708604
+30,650,0.5,0.00036941843480267807
+30,650,0.55,0.0003705266901070862
+30,650,0.6000000000000001,0.0003738514560203102
+30,650,0.65,0.00037939273254235034
+30,650,0.7000000000000001,0.00038715051967320665
+30,650,0.75,0.0003971248174128789
+30,650,0.8,0.00040931562576136725
+30,650,0.8500000000000001,0.0004237229447186717
+30,650,0.9,0.0004403467742847922
+30,650,0.9500000000000001,0.0004591871144597288
+30,650,1.0,0.0004802439652434815
+30,700,0.0,0.00048252000299345066
+30,700,0.05,0.00046136335670835313
+30,700,0.1,0.00044243372582168693
+30,700,0.15000000000000002,0.00042573111033345217
+30,700,0.2,0.0004112555102436487
+30,700,0.25,0.0003990069255522765
+30,700,0.30000000000000004,0.0003889853562593356
+30,700,0.35000000000000003,0.00038119080236482595
+30,700,0.4,0.0003756232638687477
+30,700,0.45,0.00037228274077110075
+30,700,0.5,0.0003711692330718851
+30,700,0.55,0.0003722827407711008
+30,700,0.6000000000000001,0.0003756232638687477
+30,700,0.65,0.00038119080236482595
+30,700,0.7000000000000001,0.0003889853562593356
+30,700,0.75,0.0003990069255522765
+30,700,0.8,0.0004112555102436487
+30,700,0.8500000000000001,0.00042573111033345217
+30,700,0.9,0.00044243372582168693
+30,700,0.9500000000000001,0.0004613633567083532
+30,700,1.0,0.00048252000299345066
+40,-400,0.0,0.0003639113525411101
+40,-400,0.05,0.00034795523939123063
+40,-400,0.1,0.0003336787170992332
+40,-400,0.15000000000000002,0.0003210817856651179
+40,-400,0.2,0.0003101644450888846
+40,-400,0.25,0.0003009266953705333
+40,-400,0.30000000000000004,0.00029336853651006415
+40,-400,0.35000000000000003,0.00028748996850747695
+40,-400,0.4,0.00028329099136277183
+40,-400,0.45,0.0002807716050759488
+40,-400,0.5,0.0002799318096470078
+40,-400,0.55,0.00028077160507594884
+40,-400,0.6000000000000001,0.00028329099136277183
+40,-400,0.65,0.00028748996850747695
+40,-400,0.7000000000000001,0.00029336853651006415
+40,-400,0.75,0.0003009266953705333
+40,-400,0.8,0.0003101644450888846
+40,-400,0.8500000000000001,0.0003210817856651179
+40,-400,0.9,0.0003336787170992332
+40,-400,0.9500000000000001,0.00034795523939123063
+40,-400,1.0,0.0003639113525411101
+40,-350,0.0,0.00036214479257731824
+40,-350,0.05,0.00034626613628738965
+40,-350,0.1,0.0003320589175016641
+40,-350,0.15000000000000002,0.00031952313622014155
+40,-350,0.2,0.00030865879244282204
+40,-350,0.25,0.00029946588616970544
+40,-350,0.30000000000000004,0.00029194441740079197
+40,-350,0.35000000000000003,0.00028609438613608136
+40,-350,0.4,0.0002819157923755739
+40,-350,0.45,0.0002794086361192694
+40,-350,0.5,0.0002785729173671679
+40,-350,0.55,0.00027940863611926943
+40,-350,0.6000000000000001,0.0002819157923755739
+40,-350,0.65,0.00028609438613608136
+40,-350,0.7000000000000001,0.00029194441740079197
+40,-350,0.75,0.00029946588616970544
+40,-350,0.8,0.00030865879244282204
+40,-350,0.8500000000000001,0.00031952313622014155
+40,-350,0.9,0.0003320589175016641
+40,-350,0.9500000000000001,0.0003462661362873897
+40,-350,1.0,0.00036214479257731824
+40,-300,0.0,0.0003603782326135265
+40,-300,0.05,0.0003445770331835488
+40,-300,0.1,0.000330439117904095
+40,-300,0.15000000000000002,0.00031796448677516527
+40,-300,0.2,0.0003071531397967595
+40,-300,0.25,0.00029800507696887767
+40,-300,0.30000000000000004,0.0002905202982915198
+40,-300,0.35000000000000003,0.0002846988037646859
+40,-300,0.4,0.000280540593388376
+40,-300,0.45,0.0002780456671625901
+40,-300,0.5,0.00027721402508732807
+40,-300,0.55,0.0002780456671625901
+40,-300,0.6000000000000001,0.000280540593388376
+40,-300,0.65,0.0002846988037646859
+40,-300,0.7000000000000001,0.0002905202982915198
+40,-300,0.75,0.00029800507696887767
+40,-300,0.8,0.0003071531397967595
+40,-300,0.8500000000000001,0.00031796448677516527
+40,-300,0.9,0.000330439117904095
+40,-300,0.9500000000000001,0.0003445770331835488
+40,-300,1.0,0.0003603782326135265
+40,-250,0.0,0.0003586116726497347
+40,-250,0.05,0.0003428879300797078
+40,-250,0.1,0.0003288193183065259
+40,-250,0.15000000000000002,0.0003164058373301889
+40,-250,0.2,0.00030564748715069693
+40,-250,0.25,0.0002965442677680498
+40,-250,0.30000000000000004,0.0002890961791822476
+40,-250,0.35000000000000003,0.0002833032213932903
+40,-250,0.4,0.00027916539440117806
+40,-250,0.45,0.00027668269820591067
+40,-250,0.5,0.0002758551328074882
+40,-250,0.55,0.00027668269820591067
+40,-250,0.6000000000000001,0.00027916539440117806
+40,-250,0.65,0.0002833032213932903
+40,-250,0.7000000000000001,0.0002890961791822476
+40,-250,0.75,0.0002965442677680498
+40,-250,0.8,0.00030564748715069693
+40,-250,0.8500000000000001,0.0003164058373301889
+40,-250,0.9,0.0003288193183065259
+40,-250,0.9500000000000001,0.00034288793007970786
+40,-250,1.0,0.0003586116726497347
+40,-200,0.0,0.0003568451126859429
+40,-200,0.05,0.00034119882697586693
+40,-200,0.1,0.00032719951870895683
+40,-200,0.15000000000000002,0.00031484718788521264
+40,-200,0.2,0.0003041418345046344
+40,-200,0.25,0.000295083458567222
+40,-200,0.30000000000000004,0.0002876720600729755
+40,-200,0.35000000000000003,0.0002819076390218949
+40,-200,0.4,0.00027779019541398017
+40,-200,0.45,0.0002753197292492313
+40,-200,0.5,0.00027449624052764836
+40,-200,0.55,0.00027531972924923137
+40,-200,0.6000000000000001,0.00027779019541398017
+40,-200,0.65,0.0002819076390218949
+40,-200,0.7000000000000001,0.0002876720600729755
+40,-200,0.75,0.000295083458567222
+40,-200,0.8,0.0003041418345046344
+40,-200,0.8500000000000001,0.00031484718788521264
+40,-200,0.9,0.00032719951870895683
+40,-200,0.9500000000000001,0.00034119882697586693
+40,-200,1.0,0.0003568451126859429
+40,-150,0.0,0.000355078552722151
+40,-150,0.05,0.00033950972387202595
+40,-150,0.1,0.00032557971911138773
+40,-150,0.15000000000000002,0.0003132885384402363
+40,-150,0.2,0.00030263618185857183
+40,-150,0.25,0.0002936226493663941
+40,-150,0.30000000000000004,0.00028624794096370333
+40,-150,0.35000000000000003,0.0002805120566504993
+40,-150,0.4,0.0002764149964267822
+40,-150,0.45,0.0002739567602925519
+40,-150,0.5,0.0002731373482478085
+40,-150,0.55,0.00027395676029255196
+40,-150,0.6000000000000001,0.0002764149964267822
+40,-150,0.65,0.0002805120566504993
+40,-150,0.7000000000000001,0.00028624794096370333
+40,-150,0.75,0.0002936226493663941
+40,-150,0.8,0.00030263618185857183
+40,-150,0.8500000000000001,0.0003132885384402363
+40,-150,0.9,0.00032557971911138773
+40,-150,0.9500000000000001,0.000339509723872026
+40,-150,1.0,0.000355078552722151
+40,-100,0.0,0.0003533119927583593
+40,-100,0.05,0.0003378206207681851
+40,-100,0.1,0.0003239599195138186
+40,-100,0.15000000000000002,0.00031172988899526007
+40,-100,0.2,0.0003011305292125093
+40,-100,0.25,0.00029216184016556633
+40,-100,0.30000000000000004,0.0002848238218544312
+40,-100,0.35000000000000003,0.0002791164742791038
+40,-100,0.4,0.0002750397974395843
+40,-100,0.45,0.0002725937913358726
+40,-100,0.5,0.0002717784559679687
+40,-100,0.55,0.00027259379133587265
+40,-100,0.6000000000000001,0.0002750397974395843
+40,-100,0.65,0.0002791164742791038
+40,-100,0.7000000000000001,0.0002848238218544312
+40,-100,0.75,0.00029216184016556633
+40,-100,0.8,0.0003011305292125093
+40,-100,0.8500000000000001,0.00031172988899526007
+40,-100,0.9,0.0003239599195138186
+40,-100,0.9500000000000001,0.0003378206207681851
+40,-100,1.0,0.0003533119927583593
+40,-50,0.0,0.00035154543279456753
+40,-50,0.05,0.0003361315176643441
+40,-50,0.1,0.0003223401199162495
+40,-50,0.15000000000000002,0.0003101712395502838
+40,-50,0.2,0.0002996248765664468
+40,-50,0.25,0.0002907010309647385
+40,-50,0.30000000000000004,0.00028339970274515904
+40,-50,0.35000000000000003,0.0002777208919077083
+40,-50,0.4,0.0002736645984523864
+40,-50,0.45,0.00027123082237919324
+40,-50,0.5,0.0002704195636881288
+40,-50,0.55,0.00027123082237919324
+40,-50,0.6000000000000001,0.0002736645984523864
+40,-50,0.65,0.0002777208919077083
+40,-50,0.7000000000000001,0.00028339970274515904
+40,-50,0.75,0.0002907010309647385
+40,-50,0.8,0.0002996248765664468
+40,-50,0.8500000000000001,0.0003101712395502838
+40,-50,0.9,0.0003223401199162495
+40,-50,0.9500000000000001,0.00033613151766434415
+40,-50,1.0,0.00035154543279456753
+40,0,0.0,0.0003497788728307757
+40,0,0.05,0.00033444241456050323
+40,0,0.1,0.00032072032031868047
+40,0,0.15000000000000002,0.0003086125901053075
+40,0,0.2,0.0002981192239203842
+40,0,0.25,0.00028924022176391064
+40,0,0.30000000000000004,0.00028197558363588686
+40,0,0.35000000000000003,0.00027632530953631277
+40,0,0.4,0.00027228939946518846
+40,0,0.45,0.00026986785342251383
+40,0,0.5,0.000269060671408289
+40,0,0.55,0.0002698678534225139
+40,0,0.6000000000000001,0.00027228939946518846
+40,0,0.65,0.00027632530953631277
+40,0,0.7000000000000001,0.00028197558363588686
+40,0,0.75,0.00028924022176391064
+40,0,0.8,0.0002981192239203842
+40,0,0.8500000000000001,0.0003086125901053075
+40,0,0.9,0.00032072032031868047
+40,0,0.9500000000000001,0.00033444241456050323
+40,0,1.0,0.0003497788728307757
+40,50,0.0,0.00035154543279456753
+40,50,0.05,0.0003361315176643441
+40,50,0.1,0.0003223401199162495
+40,50,0.15000000000000002,0.0003101712395502838
+40,50,0.2,0.0002996248765664468
+40,50,0.25,0.0002907010309647385
+40,50,0.30000000000000004,0.00028339970274515904
+40,50,0.35000000000000003,0.0002777208919077083
+40,50,0.4,0.0002736645984523864
+40,50,0.45,0.00027123082237919324
+40,50,0.5,0.0002704195636881288
+40,50,0.55,0.00027123082237919324
+40,50,0.6000000000000001,0.0002736645984523864
+40,50,0.65,0.0002777208919077083
+40,50,0.7000000000000001,0.00028339970274515904
+40,50,0.75,0.0002907010309647385
+40,50,0.8,0.0002996248765664468
+40,50,0.8500000000000001,0.0003101712395502838
+40,50,0.9,0.0003223401199162495
+40,50,0.9500000000000001,0.00033613151766434415
+40,50,1.0,0.00035154543279456753
+40,100,0.0,0.0003533119927583593
+40,100,0.05,0.0003378206207681851
+40,100,0.1,0.0003239599195138186
+40,100,0.15000000000000002,0.00031172988899526007
+40,100,0.2,0.0003011305292125093
+40,100,0.25,0.00029216184016556633
+40,100,0.30000000000000004,0.0002848238218544312
+40,100,0.35000000000000003,0.0002791164742791038
+40,100,0.4,0.0002750397974395843
+40,100,0.45,0.0002725937913358726
+40,100,0.5,0.0002717784559679687
+40,100,0.55,0.00027259379133587265
+40,100,0.6000000000000001,0.0002750397974395843
+40,100,0.65,0.0002791164742791038
+40,100,0.7000000000000001,0.0002848238218544312
+40,100,0.75,0.00029216184016556633
+40,100,0.8,0.0003011305292125093
+40,100,0.8500000000000001,0.00031172988899526007
+40,100,0.9,0.0003239599195138186
+40,100,0.9500000000000001,0.0003378206207681851
+40,100,1.0,0.0003533119927583593
+40,150,0.0,0.000355078552722151
+40,150,0.05,0.00033950972387202595
+40,150,0.1,0.00032557971911138773
+40,150,0.15000000000000002,0.0003132885384402363
+40,150,0.2,0.00030263618185857183
+40,150,0.25,0.0002936226493663941
+40,150,0.30000000000000004,0.00028624794096370333
+40,150,0.35000000000000003,0.0002805120566504993
+40,150,0.4,0.0002764149964267822
+40,150,0.45,0.0002739567602925519
+40,150,0.5,0.0002731373482478085
+40,150,0.55,0.00027395676029255196
+40,150,0.6000000000000001,0.0002764149964267822
+40,150,0.65,0.0002805120566504993
+40,150,0.7000000000000001,0.00028624794096370333
+40,150,0.75,0.0002936226493663941
+40,150,0.8,0.00030263618185857183
+40,150,0.8500000000000001,0.0003132885384402363
+40,150,0.9,0.00032557971911138773
+40,150,0.9500000000000001,0.000339509723872026
+40,150,1.0,0.000355078552722151
+40,200,0.0,0.0003568451126859429
+40,200,0.05,0.00034119882697586693
+40,200,0.1,0.00032719951870895683
+40,200,0.15000000000000002,0.00031484718788521264
+40,200,0.2,0.0003041418345046344
+40,200,0.25,0.000295083458567222
+40,200,0.30000000000000004,0.0002876720600729755
+40,200,0.35000000000000003,0.0002819076390218949
+40,200,0.4,0.00027779019541398017
+40,200,0.45,0.0002753197292492313
+40,200,0.5,0.00027449624052764836
+40,200,0.55,0.00027531972924923137
+40,200,0.6000000000000001,0.00027779019541398017
+40,200,0.65,0.0002819076390218949
+40,200,0.7000000000000001,0.0002876720600729755
+40,200,0.75,0.000295083458567222
+40,200,0.8,0.0003041418345046344
+40,200,0.8500000000000001,0.00031484718788521264
+40,200,0.9,0.00032719951870895683
+40,200,0.9500000000000001,0.00034119882697586693
+40,200,1.0,0.0003568451126859429
+40,250,0.0,0.0003586116726497347
+40,250,0.05,0.0003428879300797078
+40,250,0.1,0.0003288193183065259
+40,250,0.15000000000000002,0.0003164058373301889
+40,250,0.2,0.00030564748715069693
+40,250,0.25,0.0002965442677680498
+40,250,0.30000000000000004,0.0002890961791822476
+40,250,0.35000000000000003,0.0002833032213932903
+40,250,0.4,0.00027916539440117806
+40,250,0.45,0.00027668269820591067
+40,250,0.5,0.0002758551328074882
+40,250,0.55,0.00027668269820591067
+40,250,0.6000000000000001,0.00027916539440117806
+40,250,0.65,0.0002833032213932903
+40,250,0.7000000000000001,0.0002890961791822476
+40,250,0.75,0.0002965442677680498
+40,250,0.8,0.00030564748715069693
+40,250,0.8500000000000001,0.0003164058373301889
+40,250,0.9,0.0003288193183065259
+40,250,0.9500000000000001,0.00034288793007970786
+40,250,1.0,0.0003586116726497347
+40,300,0.0,0.0003603782326135265
+40,300,0.05,0.0003445770331835488
+40,300,0.1,0.000330439117904095
+40,300,0.15000000000000002,0.00031796448677516527
+40,300,0.2,0.0003071531397967595
+40,300,0.25,0.00029800507696887767
+40,300,0.30000000000000004,0.0002905202982915198
+40,300,0.35000000000000003,0.0002846988037646859
+40,300,0.4,0.000280540593388376
+40,300,0.45,0.0002780456671625901
+40,300,0.5,0.00027721402508732807
+40,300,0.55,0.0002780456671625901
+40,300,0.6000000000000001,0.000280540593388376
+40,300,0.65,0.0002846988037646859
+40,300,0.7000000000000001,0.0002905202982915198
+40,300,0.75,0.00029800507696887767
+40,300,0.8,0.0003071531397967595
+40,300,0.8500000000000001,0.00031796448677516527
+40,300,0.9,0.000330439117904095
+40,300,0.9500000000000001,0.0003445770331835488
+40,300,1.0,0.0003603782326135265
+40,350,0.0,0.00036214479257731824
+40,350,0.05,0.00034626613628738965
+40,350,0.1,0.0003320589175016641
+40,350,0.15000000000000002,0.00031952313622014155
+40,350,0.2,0.00030865879244282204
+40,350,0.25,0.00029946588616970544
+40,350,0.30000000000000004,0.00029194441740079197
+40,350,0.35000000000000003,0.00028609438613608136
+40,350,0.4,0.0002819157923755739
+40,350,0.45,0.0002794086361192694
+40,350,0.5,0.0002785729173671679
+40,350,0.55,0.00027940863611926943
+40,350,0.6000000000000001,0.0002819157923755739
+40,350,0.65,0.00028609438613608136
+40,350,0.7000000000000001,0.00029194441740079197
+40,350,0.75,0.00029946588616970544
+40,350,0.8,0.00030865879244282204
+40,350,0.8500000000000001,0.00031952313622014155
+40,350,0.9,0.0003320589175016641
+40,350,0.9500000000000001,0.0003462661362873897
+40,350,1.0,0.00036214479257731824
+40,400,0.0,0.0003639113525411101
+40,400,0.05,0.00034795523939123063
+40,400,0.1,0.0003336787170992332
+40,400,0.15000000000000002,0.0003210817856651179
+40,400,0.2,0.0003101644450888846
+40,400,0.25,0.0003009266953705333
+40,400,0.30000000000000004,0.00029336853651006415
+40,400,0.35000000000000003,0.00028748996850747695
+40,400,0.4,0.00028329099136277183
+40,400,0.45,0.0002807716050759488
+40,400,0.5,0.0002799318096470078
+40,400,0.55,0.00028077160507594884
+40,400,0.6000000000000001,0.00028329099136277183
+40,400,0.65,0.00028748996850747695
+40,400,0.7000000000000001,0.00029336853651006415
+40,400,0.75,0.0003009266953705333
+40,400,0.8,0.0003101644450888846
+40,400,0.8500000000000001,0.0003210817856651179
+40,400,0.9,0.0003336787170992332
+40,400,0.9500000000000001,0.00034795523939123063
+40,400,1.0,0.0003639113525411101
+40,450,0.0,0.00036567791250490184
+40,450,0.05,0.0003496443424950715
+40,450,0.1,0.00033529851669680225
+40,450,0.15000000000000002,0.00032264043511009413
+40,450,0.2,0.0003116700977349471
+40,450,0.25,0.00030238750457136114
+40,450,0.30000000000000004,0.00029479265561933627
+40,450,0.35000000000000003,0.0002888855508788724
+40,450,0.4,0.0002846661903499697
+40,450,0.45,0.0002821345740326281
+40,450,0.5,0.00028129070192684755
+40,450,0.55,0.00028213457403262815
+40,450,0.6000000000000001,0.0002846661903499697
+40,450,0.65,0.0002888855508788724
+40,450,0.7000000000000001,0.00029479265561933627
+40,450,0.75,0.00030238750457136114
+40,450,0.8,0.0003116700977349471
+40,450,0.8500000000000001,0.00032264043511009413
+40,450,0.9,0.00033529851669680225
+40,450,0.9500000000000001,0.00034964434249507156
+40,450,1.0,0.00036567791250490184
+40,500,0.0,0.0003674444724686937
+40,500,0.05,0.0003513334455989125
+40,500,0.1,0.0003369183162943714
+40,500,0.15000000000000002,0.00032419908455507047
+40,500,0.2,0.00031317575038100967
+40,500,0.25,0.000303848313772189
+40,500,0.30000000000000004,0.0002962167747286085
+40,500,0.35000000000000003,0.00029028113325026795
+40,500,0.4,0.0002860413893371677
+40,500,0.45,0.0002834975429893075
+40,500,0.5,0.00028264959420668743
+40,500,0.55,0.00028349754298930756
+40,500,0.6000000000000001,0.0002860413893371677
+40,500,0.65,0.00029028113325026795
+40,500,0.7000000000000001,0.0002962167747286085
+40,500,0.75,0.000303848313772189
+40,500,0.8,0.00031317575038100967
+40,500,0.8500000000000001,0.00032419908455507047
+40,500,0.9,0.0003369183162943714
+40,500,0.9500000000000001,0.0003513334455989125
+40,500,1.0,0.0003674444724686937
+40,550,0.0,0.00036921103243248545
+40,550,0.05,0.00035302254870275335
+40,550,0.1,0.00033853811589194046
+40,550,0.15000000000000002,0.00032575773400004676
+40,550,0.2,0.00031468140302707225
+40,550,0.25,0.0003053091229730168
+40,550,0.30000000000000004,0.0002976408938378806
+40,550,0.35000000000000003,0.0002916767156216635
+40,550,0.4,0.0002874165883243656
+40,550,0.45,0.00028486051194598686
+40,550,0.5,0.00028400848648652726
+40,550,0.55,0.0002848605119459869
+40,550,0.6000000000000001,0.0002874165883243656
+40,550,0.65,0.0002916767156216635
+40,550,0.7000000000000001,0.0002976408938378806
+40,550,0.75,0.0003053091229730168
+40,550,0.8,0.00031468140302707225
+40,550,0.8500000000000001,0.00032575773400004676
+40,550,0.9,0.00033853811589194046
+40,550,0.9500000000000001,0.0003530225487027534
+40,550,1.0,0.00036921103243248545
+40,600,0.0,0.00037097759239627725
+40,600,0.05,0.00035471165180659433
+40,600,0.1,0.00034015791548950956
+40,600,0.15000000000000002,0.0003273163834450231
+40,600,0.2,0.00031618705567313483
+40,600,0.25,0.00030676993217384466
+40,600,0.30000000000000004,0.0002990650129471528
+40,600,0.35000000000000003,0.000293072297993059
+40,600,0.4,0.00028879178731156354
+40,600,0.45,0.0002862234809026662
+40,600,0.5,0.0002853673787663671
+40,600,0.55,0.00028622348090266627
+40,600,0.6000000000000001,0.00028879178731156354
+40,600,0.65,0.000293072297993059
+40,600,0.7000000000000001,0.0002990650129471528
+40,600,0.75,0.00030676993217384466
+40,600,0.8,0.00031618705567313483
+40,600,0.8500000000000001,0.0003273163834450231
+40,600,0.9,0.00034015791548950956
+40,600,0.9500000000000001,0.00035471165180659433
+40,600,1.0,0.00037097759239627725
+40,650,0.0,0.00037274415236006905
+40,650,0.05,0.0003564007549104352
+40,650,0.1,0.00034177771508707867
+40,650,0.15000000000000002,0.00032887503288999933
+40,650,0.2,0.0003176927083191973
+40,650,0.25,0.0003082307413746724
+40,650,0.30000000000000004,0.0003004891320564249
+40,650,0.35000000000000003,0.00029446788036445454
+40,650,0.4,0.0002901669862987614
+40,650,0.45,0.00028758644985934557
+40,650,0.5,0.0002867262710462069
+40,650,0.55,0.0002875864498593456
+40,650,0.6000000000000001,0.0002901669862987614
+40,650,0.65,0.00029446788036445454
+40,650,0.7000000000000001,0.0003004891320564249
+40,650,0.75,0.0003082307413746724
+40,650,0.8,0.0003176927083191973
+40,650,0.8500000000000001,0.00032887503288999933
+40,650,0.9,0.00034177771508707867
+40,650,0.9500000000000001,0.00035640075491043526
+40,650,1.0,0.00037274415236006905
+40,700,0.0,0.0003745107123238609
+40,700,0.05,0.0003580898580142762
+40,700,0.1,0.00034339751468464777
+40,700,0.15000000000000002,0.00033043368233497567
+40,700,0.2,0.0003191983609652599
+40,700,0.25,0.0003096915505755003
+40,700,0.30000000000000004,0.0003019132511656971
+40,700,0.35000000000000003,0.00029586346273585007
+40,700,0.4,0.00029154218528595937
+40,700,0.45,0.0002889494188160249
+40,700,0.5,0.00028808516332604685
+40,700,0.55,0.000288949418816025
+40,700,0.6000000000000001,0.00029154218528595937
+40,700,0.65,0.00029586346273585007
+40,700,0.7000000000000001,0.0003019132511656971
+40,700,0.75,0.0003096915505755003
+40,700,0.8,0.0003191983609652599
+40,700,0.8500000000000001,0.00033043368233497567
+40,700,0.9,0.00034339751468464777
+40,700,0.9500000000000001,0.0003580898580142762
+40,700,1.0,0.0003745107123238609
+50,-400,0.0,0.00028691659742073453
+50,-400,0.05,0.00027433640814921
+50,-400,0.1,0.0002630804493273196
+50,-400,0.15000000000000002,0.00025314872095506347
+50,-400,0.2,0.00024454122303244145
+50,-400,0.25,0.00023725795555945355
+50,-400,0.30000000000000004,0.00023129891853609984
+50,-400,0.35000000000000003,0.00022666411196238024
+50,-400,0.4,0.00022335353583829485
+50,-400,0.45,0.00022136719016384364
+50,-400,0.5,0.00022070507493902655
+50,-400,0.55,0.00022136719016384367
+50,-400,0.6000000000000001,0.00022335353583829485
+50,-400,0.65,0.00022666411196238024
+50,-400,0.7000000000000001,0.00023129891853609984
+50,-400,0.75,0.00023725795555945355
+50,-400,0.8,0.00024454122303244145
+50,-400,0.8500000000000001,0.00025314872095506347
+50,-400,0.9,0.0002630804493273196
+50,-400,0.9500000000000001,0.00027433640814921004
+50,-400,1.0,0.00028691659742073453
+50,-350,0.0,0.000285523798404129
+50,-350,0.05,0.0002730046780125633
+50,-350,0.1,0.00026180335976747825
+50,-350,0.15000000000000002,0.00025191984366887383
+50,-350,0.2,0.00024335412971674994
+50,-350,0.25,0.00023610621791110665
+50,-350,0.30000000000000004,0.000230176108251944
+50,-350,0.35000000000000003,0.00022556380073926187
+50,-350,0.4,0.0002222692953730604
+50,-350,0.45,0.0002202925921533395
+50,-350,0.5,0.0002196336910800992
+50,-350,0.55,0.00022029259215333954
+50,-350,0.6000000000000001,0.0002222692953730604
+50,-350,0.65,0.00022556380073926187
+50,-350,0.7000000000000001,0.000230176108251944
+50,-350,0.75,0.00023610621791110665
+50,-350,0.8,0.00024335412971674994
+50,-350,0.8500000000000001,0.00025191984366887383
+50,-350,0.9,0.00026180335976747825
+50,-350,0.9500000000000001,0.00027300467801256333
+50,-350,1.0,0.000285523798404129
+50,-300,0.0,0.00028413099938752353
+50,-300,0.05,0.0002716729478759167
+50,-300,0.1,0.0002605262702076369
+50,-300,0.15000000000000002,0.0002506909663826842
+50,-300,0.2,0.00024216703640105852
+50,-300,0.25,0.0002349544802627598
+50,-300,0.30000000000000004,0.0002290532979677882
+50,-300,0.35000000000000003,0.00022446348951614357
+50,-300,0.4,0.000221185054907826
+50,-300,0.45,0.00021921799414283545
+50,-300,0.5,0.00021856230722117195
+50,-300,0.55,0.0002192179941428355
+50,-300,0.6000000000000001,0.000221185054907826
+50,-300,0.65,0.00022446348951614357
+50,-300,0.7000000000000001,0.0002290532979677882
+50,-300,0.75,0.0002349544802627598
+50,-300,0.8,0.00024216703640105852
+50,-300,0.8500000000000001,0.0002506909663826842
+50,-300,0.9,0.0002605262702076369
+50,-300,0.9500000000000001,0.00027167294787591674
+50,-300,1.0,0.00028413099938752353
+50,-250,0.0,0.000282738200370918
+50,-250,0.05,0.00027034121773927003
+50,-250,0.1,0.0002592491806477955
+50,-250,0.15000000000000002,0.00024946208909649455
+50,-250,0.2,0.000240979943085367
+50,-250,0.25,0.0002338027426144129
+50,-250,0.30000000000000004,0.00022793048768363235
+50,-250,0.35000000000000003,0.00022336317829302517
+50,-250,0.4,0.00022010081444259153
+50,-250,0.45,0.00021814339613233133
+50,-250,0.5,0.0002174909233622446
+50,-250,0.55,0.00021814339613233135
+50,-250,0.6000000000000001,0.00022010081444259153
+50,-250,0.65,0.00022336317829302517
+50,-250,0.7000000000000001,0.00022793048768363235
+50,-250,0.75,0.0002338027426144129
+50,-250,0.8,0.000240979943085367
+50,-250,0.8500000000000001,0.00024946208909649455
+50,-250,0.9,0.0002592491806477955
+50,-250,0.9500000000000001,0.00027034121773927003
+50,-250,1.0,0.000282738200370918
+50,-200,0.0,0.0002813454013543125
+50,-200,0.05,0.0002690094876026234
+50,-200,0.1,0.00025797209108795416
+50,-200,0.15000000000000002,0.00024823321181030497
+50,-200,0.2,0.00023979284976967556
+50,-200,0.25,0.0002326510049660661
+50,-200,0.30000000000000004,0.00022680767739947656
+50,-200,0.35000000000000003,0.00022226286706990685
+50,-200,0.4,0.00021901657397735712
+50,-200,0.45,0.00021706879812182723
+50,-200,0.5,0.00021641953950331732
+50,-200,0.55,0.00021706879812182726
+50,-200,0.6000000000000001,0.00021901657397735712
+50,-200,0.65,0.00022226286706990685
+50,-200,0.7000000000000001,0.00022680767739947656
+50,-200,0.75,0.0002326510049660661
+50,-200,0.8,0.00023979284976967556
+50,-200,0.8500000000000001,0.00024823321181030497
+50,-200,0.9,0.00025797209108795416
+50,-200,0.9500000000000001,0.00026900948760262344
+50,-200,1.0,0.0002813454013543125
+50,-150,0.0,0.000279952602337707
+50,-150,0.05,0.0002676777574659767
+50,-150,0.1,0.0002566950015281128
+50,-150,0.15000000000000002,0.00024700433452411527
+50,-150,0.2,0.00023860575645398408
+50,-150,0.25,0.0002314992673177192
+50,-150,0.30000000000000004,0.0002256848671153207
+50,-150,0.35000000000000003,0.0002211625558467885
+50,-150,0.4,0.00021793233351212265
+50,-150,0.45,0.00021599420011132313
+50,-150,0.5,0.00021534815564438998
+50,-150,0.55,0.0002159942001113232
+50,-150,0.6000000000000001,0.00021793233351212265
+50,-150,0.65,0.0002211625558467885
+50,-150,0.7000000000000001,0.0002256848671153207
+50,-150,0.75,0.0002314992673177192
+50,-150,0.8,0.00023860575645398408
+50,-150,0.8500000000000001,0.00024700433452411527
+50,-150,0.9,0.0002566950015281128
+50,-150,0.9500000000000001,0.00026767775746597673
+50,-150,1.0,0.000279952602337707
+50,-100,0.0,0.0002785598033211015
+50,-100,0.05,0.0002663460273293301
+50,-100,0.1,0.00025541791196827143
+50,-100,0.15000000000000002,0.0002457754572379257
+50,-100,0.2,0.00023741866313829263
+50,-100,0.25,0.00023034752966937238
+50,-100,0.30000000000000004,0.0002245620568311649
+50,-100,0.35000000000000003,0.00022006224462367015
+50,-100,0.4,0.0002168480930468882
+50,-100,0.45,0.00021491960210081904
+50,-100,0.5,0.0002142767717854627
+50,-100,0.55,0.0002149196021008191
+50,-100,0.6000000000000001,0.0002168480930468882
+50,-100,0.65,0.00022006224462367015
+50,-100,0.7000000000000001,0.0002245620568311649
+50,-100,0.75,0.00023034752966937238
+50,-100,0.8,0.00023741866313829263
+50,-100,0.8500000000000001,0.0002457754572379257
+50,-100,0.9,0.00025541791196827143
+50,-100,0.9500000000000001,0.00026634602732933014
+50,-100,1.0,0.0002785598033211015
+50,-50,0.0,0.000277167004304496
+50,-50,0.05,0.00026501429719268343
+50,-50,0.1,0.00025414082240843007
+50,-50,0.15000000000000002,0.00024454657995173605
+50,-50,0.2,0.00023623156982260115
+50,-50,0.25,0.00022919579202102552
+50,-50,0.30000000000000004,0.00022343924654700905
+50,-50,0.35000000000000003,0.0002189619334005518
+50,-50,0.4,0.0002157638525816538
+50,-50,0.45,0.00021384500409031494
+50,-50,0.5,0.00021320538792653538
+50,-50,0.55,0.000213845004090315
+50,-50,0.6000000000000001,0.0002157638525816538
+50,-50,0.65,0.0002189619334005518
+50,-50,0.7000000000000001,0.00022343924654700905
+50,-50,0.75,0.00022919579202102552
+50,-50,0.8,0.00023623156982260115
+50,-50,0.8500000000000001,0.00024454657995173605
+50,-50,0.9,0.00025414082240843007
+50,-50,0.9500000000000001,0.00026501429719268343
+50,-50,1.0,0.000277167004304496
+50,0,0.0,0.0002757742052878905
+50,0,0.05,0.00026368256705603673
+50,0,0.1,0.0002528637328485887
+50,0,0.15000000000000002,0.00024331770266554644
+50,0,0.2,0.00023504447650690973
+50,0,0.25,0.00022804405437267861
+50,0,0.30000000000000004,0.00022231643626285325
+50,0,0.35000000000000003,0.00021786162217743345
+50,0,0.4,0.00021467961211641933
+50,0,0.45,0.00021277040607981087
+50,0,0.5,0.00021213400406760804
+50,0,0.55,0.0002127704060798109
+50,0,0.6000000000000001,0.00021467961211641933
+50,0,0.65,0.00021786162217743345
+50,0,0.7000000000000001,0.00022231643626285325
+50,0,0.75,0.00022804405437267861
+50,0,0.8,0.00023504447650690973
+50,0,0.8500000000000001,0.00024331770266554644
+50,0,0.9,0.0002528637328485887
+50,0,0.9500000000000001,0.0002636825670560368
+50,0,1.0,0.0002757742052878905
+50,50,0.0,0.000277167004304496
+50,50,0.05,0.00026501429719268343
+50,50,0.1,0.00025414082240843007
+50,50,0.15000000000000002,0.00024454657995173605
+50,50,0.2,0.00023623156982260115
+50,50,0.25,0.00022919579202102552
+50,50,0.30000000000000004,0.00022343924654700905
+50,50,0.35000000000000003,0.0002189619334005518
+50,50,0.4,0.0002157638525816538
+50,50,0.45,0.00021384500409031494
+50,50,0.5,0.00021320538792653538
+50,50,0.55,0.000213845004090315
+50,50,0.6000000000000001,0.0002157638525816538
+50,50,0.65,0.0002189619334005518
+50,50,0.7000000000000001,0.00022343924654700905
+50,50,0.75,0.00022919579202102552
+50,50,0.8,0.00023623156982260115
+50,50,0.8500000000000001,0.00024454657995173605
+50,50,0.9,0.00025414082240843007
+50,50,0.9500000000000001,0.00026501429719268343
+50,50,1.0,0.000277167004304496
+50,100,0.0,0.0002785598033211015
+50,100,0.05,0.0002663460273293301
+50,100,0.1,0.00025541791196827143
+50,100,0.15000000000000002,0.0002457754572379257
+50,100,0.2,0.00023741866313829263
+50,100,0.25,0.00023034752966937238
+50,100,0.30000000000000004,0.0002245620568311649
+50,100,0.35000000000000003,0.00022006224462367015
+50,100,0.4,0.0002168480930468882
+50,100,0.45,0.00021491960210081904
+50,100,0.5,0.0002142767717854627
+50,100,0.55,0.0002149196021008191
+50,100,0.6000000000000001,0.0002168480930468882
+50,100,0.65,0.00022006224462367015
+50,100,0.7000000000000001,0.0002245620568311649
+50,100,0.75,0.00023034752966937238
+50,100,0.8,0.00023741866313829263
+50,100,0.8500000000000001,0.0002457754572379257
+50,100,0.9,0.00025541791196827143
+50,100,0.9500000000000001,0.00026634602732933014
+50,100,1.0,0.0002785598033211015
+50,150,0.0,0.000279952602337707
+50,150,0.05,0.0002676777574659767
+50,150,0.1,0.0002566950015281128
+50,150,0.15000000000000002,0.00024700433452411527
+50,150,0.2,0.00023860575645398408
+50,150,0.25,0.0002314992673177192
+50,150,0.30000000000000004,0.0002256848671153207
+50,150,0.35000000000000003,0.0002211625558467885
+50,150,0.4,0.00021793233351212265
+50,150,0.45,0.00021599420011132313
+50,150,0.5,0.00021534815564438998
+50,150,0.55,0.0002159942001113232
+50,150,0.6000000000000001,0.00021793233351212265
+50,150,0.65,0.0002211625558467885
+50,150,0.7000000000000001,0.0002256848671153207
+50,150,0.75,0.0002314992673177192
+50,150,0.8,0.00023860575645398408
+50,150,0.8500000000000001,0.00024700433452411527
+50,150,0.9,0.0002566950015281128
+50,150,0.9500000000000001,0.00026767775746597673
+50,150,1.0,0.000279952602337707
+50,200,0.0,0.0002813454013543125
+50,200,0.05,0.0002690094876026234
+50,200,0.1,0.00025797209108795416
+50,200,0.15000000000000002,0.00024823321181030497
+50,200,0.2,0.00023979284976967556
+50,200,0.25,0.0002326510049660661
+50,200,0.30000000000000004,0.00022680767739947656
+50,200,0.35000000000000003,0.00022226286706990685
+50,200,0.4,0.00021901657397735712
+50,200,0.45,0.00021706879812182723
+50,200,0.5,0.00021641953950331732
+50,200,0.55,0.00021706879812182726
+50,200,0.6000000000000001,0.00021901657397735712
+50,200,0.65,0.00022226286706990685
+50,200,0.7000000000000001,0.00022680767739947656
+50,200,0.75,0.0002326510049660661
+50,200,0.8,0.00023979284976967556
+50,200,0.8500000000000001,0.00024823321181030497
+50,200,0.9,0.00025797209108795416
+50,200,0.9500000000000001,0.00026900948760262344
+50,200,1.0,0.0002813454013543125
+50,250,0.0,0.000282738200370918
+50,250,0.05,0.00027034121773927003
+50,250,0.1,0.0002592491806477955
+50,250,0.15000000000000002,0.00024946208909649455
+50,250,0.2,0.000240979943085367
+50,250,0.25,0.0002338027426144129
+50,250,0.30000000000000004,0.00022793048768363235
+50,250,0.35000000000000003,0.00022336317829302517
+50,250,0.4,0.00022010081444259153
+50,250,0.45,0.00021814339613233133
+50,250,0.5,0.0002174909233622446
+50,250,0.55,0.00021814339613233135
+50,250,0.6000000000000001,0.00022010081444259153
+50,250,0.65,0.00022336317829302517
+50,250,0.7000000000000001,0.00022793048768363235
+50,250,0.75,0.0002338027426144129
+50,250,0.8,0.000240979943085367
+50,250,0.8500000000000001,0.00024946208909649455
+50,250,0.9,0.0002592491806477955
+50,250,0.9500000000000001,0.00027034121773927003
+50,250,1.0,0.000282738200370918
+50,300,0.0,0.00028413099938752353
+50,300,0.05,0.0002716729478759167
+50,300,0.1,0.0002605262702076369
+50,300,0.15000000000000002,0.0002506909663826842
+50,300,0.2,0.00024216703640105852
+50,300,0.25,0.0002349544802627598
+50,300,0.30000000000000004,0.0002290532979677882
+50,300,0.35000000000000003,0.00022446348951614357
+50,300,0.4,0.000221185054907826
+50,300,0.45,0.00021921799414283545
+50,300,0.5,0.00021856230722117195
+50,300,0.55,0.0002192179941428355
+50,300,0.6000000000000001,0.000221185054907826
+50,300,0.65,0.00022446348951614357
+50,300,0.7000000000000001,0.0002290532979677882
+50,300,0.75,0.0002349544802627598
+50,300,0.8,0.00024216703640105852
+50,300,0.8500000000000001,0.0002506909663826842
+50,300,0.9,0.0002605262702076369
+50,300,0.9500000000000001,0.00027167294787591674
+50,300,1.0,0.00028413099938752353
+50,350,0.0,0.000285523798404129
+50,350,0.05,0.0002730046780125633
+50,350,0.1,0.00026180335976747825
+50,350,0.15000000000000002,0.00025191984366887383
+50,350,0.2,0.00024335412971674994
+50,350,0.25,0.00023610621791110665
+50,350,0.30000000000000004,0.000230176108251944
+50,350,0.35000000000000003,0.00022556380073926187
+50,350,0.4,0.0002222692953730604
+50,350,0.45,0.0002202925921533395
+50,350,0.5,0.0002196336910800992
+50,350,0.55,0.00022029259215333954
+50,350,0.6000000000000001,0.0002222692953730604
+50,350,0.65,0.00022556380073926187
+50,350,0.7000000000000001,0.000230176108251944
+50,350,0.75,0.00023610621791110665
+50,350,0.8,0.00024335412971674994
+50,350,0.8500000000000001,0.00025191984366887383
+50,350,0.9,0.00026180335976747825
+50,350,0.9500000000000001,0.00027300467801256333
+50,350,1.0,0.000285523798404129
+50,400,0.0,0.00028691659742073453
+50,400,0.05,0.00027433640814921
+50,400,0.1,0.0002630804493273196
+50,400,0.15000000000000002,0.00025314872095506347
+50,400,0.2,0.00024454122303244145
+50,400,0.25,0.00023725795555945355
+50,400,0.30000000000000004,0.00023129891853609984
+50,400,0.35000000000000003,0.00022666411196238024
+50,400,0.4,0.00022335353583829485
+50,400,0.45,0.00022136719016384364
+50,400,0.5,0.00022070507493902655
+50,400,0.55,0.00022136719016384367
+50,400,0.6000000000000001,0.00022335353583829485
+50,400,0.65,0.00022666411196238024
+50,400,0.7000000000000001,0.00023129891853609984
+50,400,0.75,0.00023725795555945355
+50,400,0.8,0.00024454122303244145
+50,400,0.8500000000000001,0.00025314872095506347
+50,400,0.9,0.0002630804493273196
+50,400,0.9500000000000001,0.00027433640814921004
+50,400,1.0,0.00028691659742073453
+50,450,0.0,0.00028830939643734003
+50,450,0.05,0.00027566813828585663
+50,450,0.1,0.00026435753888716097
+50,450,0.15000000000000002,0.00025437759824125305
+50,450,0.2,0.00024572831634813287
+50,450,0.25,0.00023840969320780038
+50,450,0.30000000000000004,0.00023242172882025566
+50,450,0.35000000000000003,0.0002277644231854986
+50,450,0.4,0.00022443777630352926
+50,450,0.45,0.00022244178817434768
+50,450,0.5,0.00022177645879795386
+50,450,0.55,0.0002224417881743477
+50,450,0.6000000000000001,0.00022443777630352926
+50,450,0.65,0.0002277644231854986
+50,450,0.7000000000000001,0.00023242172882025566
+50,450,0.75,0.00023840969320780038
+50,450,0.8,0.00024572831634813287
+50,450,0.8500000000000001,0.00025437759824125305
+50,450,0.9,0.00026435753888716097
+50,450,0.9500000000000001,0.00027566813828585663
+50,450,1.0,0.00028830939643734003
+50,500,0.0,0.0002897021954539456
+50,500,0.05,0.0002769998684225033
+50,500,0.1,0.00026563462844700234
+50,500,0.15000000000000002,0.0002556064755274427
+50,500,0.2,0.00024691540966382435
+50,500,0.25,0.0002395614308561473
+50,500,0.30000000000000004,0.0002335445391044115
+50,500,0.35000000000000003,0.000228864734408617
+50,500,0.4,0.00022552201676876373
+50,500,0.45,0.0002235163861848518
+50,500,0.5,0.0002228478426568812
+50,500,0.55,0.00022351638618485186
+50,500,0.6000000000000001,0.00022552201676876373
+50,500,0.65,0.000228864734408617
+50,500,0.7000000000000001,0.0002335445391044115
+50,500,0.75,0.0002395614308561473
+50,500,0.8,0.00024691540966382435
+50,500,0.8500000000000001,0.0002556064755274427
+50,500,0.9,0.00026563462844700234
+50,500,0.9500000000000001,0.00027699986842250334
+50,500,1.0,0.0002897021954539456
+50,550,0.0,0.00029109499447055103
+50,550,0.05,0.0002783315985591499
+50,550,0.1,0.00026691171800684364
+50,550,0.15000000000000002,0.00025683535281363233
+50,550,0.2,0.0002481025029795158
+50,550,0.25,0.0002407131685044941
+50,550,0.30000000000000004,0.0002346673493885673
+50,550,0.35000000000000003,0.00022996504563173529
+50,550,0.4,0.00022660625723399817
+50,550,0.45,0.0002245909841953559
+50,550,0.5,0.0002239192265158085
+50,550,0.55,0.00022459098419535595
+50,550,0.6000000000000001,0.00022660625723399817
+50,550,0.65,0.00022996504563173529
+50,550,0.7000000000000001,0.0002346673493885673
+50,550,0.75,0.0002407131685044941
+50,550,0.8,0.0002481025029795158
+50,550,0.8500000000000001,0.00025683535281363233
+50,550,0.9,0.00026691171800684364
+50,550,0.9500000000000001,0.00027833159855914993
+50,550,1.0,0.00029109499447055103
+50,600,0.0,0.0002924877934871566
+50,600,0.05,0.0002796633286957966
+50,600,0.1,0.00026818880756668506
+50,600,0.15000000000000002,0.00025806423009982197
+50,600,0.2,0.0002492895962952073
+50,600,0.25,0.00024186490615284097
+50,600,0.30000000000000004,0.00023579015967272314
+50,600,0.35000000000000003,0.00023106535685485366
+50,600,0.4,0.00022769049769923264
+50,600,0.45,0.00022566558220586
+50,600,0.5,0.00022499061037473583
+50,600,0.55,0.00022566558220586002
+50,600,0.6000000000000001,0.00022769049769923264
+50,600,0.65,0.00023106535685485366
+50,600,0.7000000000000001,0.00023579015967272314
+50,600,0.75,0.00024186490615284097
+50,600,0.8,0.0002492895962952073
+50,600,0.8500000000000001,0.00025806423009982197
+50,600,0.9,0.00026818880756668506
+50,600,0.9500000000000001,0.00027966332869579664
+50,600,1.0,0.0002924877934871566
+50,650,0.0,0.00029388059250376204
+50,650,0.05,0.00028099505883244323
+50,650,0.1,0.00026946589712652637
+50,650,0.15000000000000002,0.00025929310738601155
+50,650,0.2,0.00025047668961089873
+50,650,0.25,0.00024301664380118782
+50,650,0.30000000000000004,0.00023691296995687896
+50,650,0.35000000000000003,0.000232165668077972
+50,650,0.4,0.00022877473816446705
+50,650,0.45,0.0002267401802163641
+50,650,0.5,0.00022606199423366312
+50,650,0.55,0.00022674018021636412
+50,650,0.6000000000000001,0.00022877473816446705
+50,650,0.65,0.000232165668077972
+50,650,0.7000000000000001,0.00023691296995687896
+50,650,0.75,0.00024301664380118782
+50,650,0.8,0.00025047668961089873
+50,650,0.8500000000000001,0.00025929310738601155
+50,650,0.9,0.00026946589712652637
+50,650,0.9500000000000001,0.00028099505883244323
+50,650,1.0,0.00029388059250376204
+50,700,0.0,0.0002952733915203676
+50,700,0.05,0.0002823267889690899
+50,700,0.1,0.0002707429866863678
+50,700,0.15000000000000002,0.00026052198467220125
+50,700,0.2,0.0002516637829265902
+50,700,0.25,0.00024416838144953473
+50,700,0.30000000000000004,0.0002380357802410348
+50,700,0.35000000000000003,0.00023326597930109036
+50,700,0.4,0.00022985897862970152
+50,700,0.45,0.0002278147782268682
+50,700,0.5,0.00022713337809259046
+50,700,0.55,0.00022781477822686827
+50,700,0.6000000000000001,0.00022985897862970152
+50,700,0.65,0.00023326597930109036
+50,700,0.7000000000000001,0.0002380357802410348
+50,700,0.75,0.00024416838144953473
+50,700,0.8,0.0002516637829265902
+50,700,0.8500000000000001,0.00026052198467220125
+50,700,0.9,0.0002707429866863678
+50,700,0.9500000000000001,0.00028232678896908994
+50,700,1.0,0.0002952733915203676
diff --git a/tests/unit/test_parameters/test_ecm_parameters.py b/tests/unit/test_parameters/test_ecm_parameters.py
new file mode 100644
index 0000000000..8c1646fc53
--- /dev/null
+++ b/tests/unit/test_parameters/test_ecm_parameters.py
@@ -0,0 +1,100 @@
+#
+# Tests for the equivalent circuit parameters
+#
+import pybamm
+import unittest
+
+
+values = {
+ "Initial SoC": 0.5,
+ "Initial cell temperature [degC]": 25,
+ "Initial jig temperature [degC]": 25,
+ "Cell capacity [A.h]": 100,
+ "Nominal cell capacity [A.h]": 100,
+ "Ambient temperature [degC]": 25,
+ "Current function [A]": 100,
+ "Upper voltage cut-off [V]": 4.2,
+ "Lower voltage cut-off [V]": 3.2,
+ "Cell thermal mass [J/K]": 1000,
+ "Cell-jig heat transfer coefficient [W/K]": 10,
+ "Jig thermal mass [J/K]": 500,
+ "Jig-air heat transfer coefficient [W/K]": 10,
+ "R0 [Ohm]": 0.4e-3,
+ "Element-1 initial overpotential [V]": 0,
+ "R1 [Ohm]": 0.6e-3,
+ "C1 [F]": 30 / 0.6e-3,
+ "Entropic change [V/K]": 0,
+ "RCR lookup limit [A]": 340,
+ "Open circuit voltage [V]": 3.4,
+}
+
+parameter_values = pybamm.ParameterValues(values)
+
+
+class TestEcmParameters(unittest.TestCase):
+ def test_init_parameters(self):
+
+ param = pybamm.EcmParameters()
+
+ simpled_mapped_parameters = [
+ (param.cell_capacity, "Cell capacity [A.h]"),
+ (param.dimensional_current_with_time, "Current function [A]"),
+ (param.voltage_high_cut, "Upper voltage cut-off [V]"),
+ (param.voltage_low_cut, "Lower voltage cut-off [V]"),
+ (param.cth_cell, "Cell thermal mass [J/K]"),
+ (param.k_cell_jig, "Jig-air heat transfer coefficient [W/K]"),
+ (param.cth_jig, "Jig thermal mass [J/K]"),
+ (param.k_jig_air, "Jig-air heat transfer coefficient [W/K]"),
+ (param.Q, "Cell capacity [A.h]"),
+ (param.current_with_time, "Current function [A]"),
+ (param.dimensional_current_density_with_time, "Current function [A]"),
+ (param.initial_soc, "Initial SoC"),
+ (param.initial_T_cell, "Initial cell temperature [degC]"),
+ (param.initial_T_jig, "Initial jig temperature [degC]"),
+ ]
+
+ for symbol, key in simpled_mapped_parameters:
+ value = parameter_values.evaluate(symbol)
+ expected_value = values[key]
+ self.assertEqual(value, expected_value)
+
+ compatibility_parameters = [
+ (param.I_typ, 1),
+ (param.n_electrodes_parallel, 1),
+ (param.A_cc, 1),
+ (param.n_cells, 1),
+ ]
+
+ for symbol, expected_value in compatibility_parameters:
+ value = parameter_values.evaluate(symbol)
+ self.assertEqual(value, expected_value)
+
+ def test_function_parameters(self):
+ param = pybamm.EcmParameters()
+
+ sym = pybamm.Scalar(1)
+
+ mapped_functions = [
+ (param.T_amb(sym), "Ambient temperature [degC]"),
+ (param.ocv(sym), "Open circuit voltage [V]"),
+ (param.rcr_element("R0 [Ohm]", sym, sym, sym), "R0 [Ohm]"),
+ (param.rcr_element("R1 [Ohm]", sym, sym, sym), "R1 [Ohm]"),
+ (param.rcr_element("C1 [F]", sym, sym, sym), "C1 [F]"),
+ (param.initial_rc_overpotential(1), "Element-1 initial overpotential [V]"),
+ (param.dUdT(sym, sym), "Entropic change [V/K]"),
+ ]
+
+ for symbol, key in mapped_functions:
+ value = parameter_values.evaluate(symbol)
+ expected_value = values[key]
+ self.assertEqual(value, expected_value)
+
+
+if __name__ == "__main__":
+ print("Add -v for more debug output")
+ import sys
+
+ if "-v" in sys.argv:
+ debug = True
+ pybamm.settings.debug_mode = True
+ unittest.main()
diff --git a/tests/unit/test_parameters/test_lead_acid_parameters.py b/tests/unit/test_parameters/test_lead_acid_parameters.py
index 49e9d5d716..bb67d74e21 100644
--- a/tests/unit/test_parameters/test_lead_acid_parameters.py
+++ b/tests/unit/test_parameters/test_lead_acid_parameters.py
@@ -67,10 +67,8 @@ def test_concatenated_parameters(self):
processed_s = disc.process_symbol(parameter_values.process_symbol(s_param))
# test output
- combined_submeshes = disc.mesh.combine_submeshes(
- "negative electrode", "separator", "positive electrode"
- )
- self.assertEqual(processed_s.shape, (combined_submeshes.npts, 1))
+ submeshes = disc.mesh[("negative electrode", "separator", "positive electrode")]
+ self.assertEqual(processed_s.shape, (submeshes.npts, 1))
def test_current_functions(self):
# create current functions
diff --git a/tests/unit/test_parameters/test_parameter_sets_class.py b/tests/unit/test_parameters/test_parameter_sets_class.py
index a31d5976fb..eca1d6b2dd 100644
--- a/tests/unit/test_parameters/test_parameter_sets_class.py
+++ b/tests/unit/test_parameters/test_parameter_sets_class.py
@@ -22,9 +22,9 @@ def test_name_interface(self):
def test_all_registered(self):
"""Check that all parameter sets have been registered with the
- ``pybamm_parameter_set`` entry point"""
+ ``pybamm_parameter_sets`` entry point"""
known_entry_points = set(
- ep.name for ep in pkg_resources.iter_entry_points("pybamm_parameter_set")
+ ep.name for ep in pkg_resources.iter_entry_points("pybamm_parameter_sets")
)
self.assertEqual(set(pybamm.parameter_sets.keys()), known_entry_points)
self.assertEqual(len(known_entry_points), len(pybamm.parameter_sets))
@@ -32,7 +32,7 @@ def test_all_registered(self):
def test_get_docstring(self):
"""Test that :meth:`pybamm.parameter_sets.get_doctstring` works"""
docstring = pybamm.parameter_sets.get_docstring("Marquis2019")
- self.assertRegexpMatches(docstring, "Parameters for a Kokam SLPB78205130H cell")
+ self.assertRegex(docstring, "Parameters for a Kokam SLPB78205130H cell")
def test_iter(self):
"""Test that iterating `pybamm.parameter_sets` iterates over keys"""
diff --git a/tests/unit/test_parameters/test_parameter_values.py b/tests/unit/test_parameters/test_parameter_values.py
index 3e063dd16c..a89f327ba8 100644
--- a/tests/unit/test_parameters/test_parameter_values.py
+++ b/tests/unit/test_parameters/test_parameter_values.py
@@ -18,6 +18,7 @@
lico2_ocp_Dualfoil1998,
lico2_diffusivity_Dualfoil1998,
)
+import casadi
class TestParameterValues(unittest.TestCase):
@@ -314,10 +315,7 @@ def test_process_input_parameter(self):
b = pybamm.Parameter("b")
add = a + b
processed_add = parameter_values.process_symbol(add)
- self.assertIsInstance(processed_add, pybamm.Addition)
- self.assertIsInstance(processed_add.children[0], pybamm.InputParameter)
- self.assertIsInstance(processed_add.children[1], pybamm.Scalar)
- self.assertEqual(processed_add.evaluate(inputs={"a": 4}), 7)
+ self.assertEqual(processed_add, 3 + pybamm.InputParameter("a"))
# process complex input parameter
c = pybamm.Parameter("c times 2")
@@ -346,7 +344,10 @@ def test_function(var):
self.assertEqual(processed_func.evaluate(inputs={"a": 3}), 369)
# process constant function
- const = pybamm.FunctionParameter("const", {"a": a})
+ # this should work even if the parameter in the function is not provided
+ const = pybamm.FunctionParameter(
+ "const", {"a": pybamm.Parameter("not provided")}
+ )
processed_const = parameter_values.process_symbol(const)
self.assertIsInstance(processed_const, pybamm.Scalar)
self.assertEqual(processed_const.evaluate(), 254)
@@ -452,59 +453,33 @@ def D(a, b):
processed_func = parameter_values.process_symbol(func)
self.assertEqual(processed_func.evaluate(), 3)
- def test_function_parameter_replace_callable(self):
- # This functionality is used for generating a model in Julia's MTK
- def D(a, b):
- return a * pybamm.exp(b)
-
- parameter_values = pybamm.ParameterValues({"a": 3, "Diffusivity": D})
- parameter_values._replace_callable_function_parameters = False
-
- a = pybamm.Parameter("a")
- b = pybamm.Variable("b")
- func = pybamm.FunctionParameter("Diffusivity", {"a": a, "b": b})
- func.print_name = "D"
-
- processed_func = parameter_values.process_symbol(func)
- self.assertIsInstance(processed_func, pybamm.FunctionParameter)
- self.assertEqual(processed_func.name, "D")
- self.assertEqual(processed_func.arg_names, ["a", "b"])
- self.assertIsInstance(processed_func.callable, pybamm.Multiplication)
-
def test_process_interpolant(self):
x = np.linspace(0, 10)[:, np.newaxis]
data = np.hstack([x, 2 * x])
- parameter_values = pybamm.ParameterValues(
- {"a": 3.01, "Times two": ("times two", data)}
- )
+ parameter_values = pybamm.ParameterValues({"Times two": ("times two", data)})
- a = pybamm.Parameter("a")
+ a = pybamm.InputParameter("a")
func = pybamm.FunctionParameter("Times two", {"a": a})
processed_func = parameter_values.process_symbol(func)
self.assertIsInstance(processed_func, pybamm.Interpolant)
- self.assertEqual(processed_func.evaluate(), 6.02)
-
- # process differentiated function parameter
- diff_func = func.diff(a)
- processed_diff_func = parameter_values.process_symbol(diff_func)
- self.assertEqual(processed_diff_func.evaluate(), 2)
+ self.assertEqual(processed_func.evaluate(inputs={"a": 3.01}), 6.02)
# interpolant defined up front
- interp2 = pybamm.Interpolant(data[:, 0], data[:, 1], a)
- processed_interp2 = parameter_values.process_symbol(interp2)
- self.assertEqual(processed_interp2.evaluate(), 6.02)
+ interp = pybamm.Interpolant(data[:, 0], data[:, 1], a, interpolator="cubic")
+ processed_interp = parameter_values.process_symbol(interp)
+ self.assertEqual(processed_interp.evaluate(inputs={"a": 3.01}), 6.02)
- data3 = np.hstack([x, 3 * x])
- interp3 = pybamm.Interpolant(data3[:, 0], data3[:, 1], a)
- processed_interp3 = parameter_values.process_symbol(interp3)
- self.assertEqual(processed_interp3.evaluate(), 9.03)
+ # process differentiated function parameter
+ diff_interp = interp.diff(a)
+ processed_diff_interp = parameter_values.process_symbol(diff_interp)
+ self.assertEqual(processed_diff_interp.evaluate(inputs={"a": 3.01}), 2)
def test_process_interpolant_2d(self):
x_ = [np.linspace(0, 10), np.linspace(0, 20)]
- X = list(np.meshgrid(*x_))
+ X = list(np.meshgrid(*x_, indexing="ij"))
x = np.column_stack([el.reshape(-1, 1) for el in X])
@@ -514,17 +489,17 @@ def test_process_interpolant_2d(self):
data = x_, Y
- parameter_values = pybamm.ParameterValues(
- {"a": 3.01, "b": 4.4, "Times two": ("times two", data)}
- )
+ parameter_values = pybamm.ParameterValues({"Times two": ("times two", data)})
- a = pybamm.Parameter("a")
- b = pybamm.Parameter("b")
+ a = pybamm.InputParameter("a")
+ b = pybamm.InputParameter("b")
func = pybamm.FunctionParameter("Times two", {"a": a, "b": b})
processed_func = parameter_values.process_symbol(func)
self.assertIsInstance(processed_func, pybamm.Interpolant)
- self.assertAlmostEqual(processed_func.evaluate()[0][0], 14.82)
+ self.assertAlmostEqual(
+ processed_func.evaluate(inputs={"a": 3.01, "b": 4.4})[0][0], 14.82
+ )
# process differentiated function parameter
# diff_func = func.diff(a)
@@ -534,7 +509,9 @@ def test_process_interpolant_2d(self):
# interpolant defined up front
interp2 = pybamm.Interpolant(data[0], data[1], children=(a, b))
processed_interp2 = parameter_values.process_symbol(interp2)
- self.assertEqual(processed_interp2.evaluate(), 14.82)
+ self.assertEqual(
+ processed_interp2.evaluate(inputs={"a": 3.01, "b": 4.4}), 14.82
+ )
y3 = (3 * x).sum(axis=1)
@@ -543,25 +520,29 @@ def test_process_interpolant_2d(self):
data3 = x_, Y3
parameter_values = pybamm.ParameterValues(
- {"a": 3.01, "b": 4.4, "Times three": ("times three", data3)}
+ {"Times three": ("times three", data3)}
)
- a = pybamm.Parameter("a")
- b = pybamm.Parameter("b")
+ a = pybamm.InputParameter("a")
+ b = pybamm.InputParameter("b")
func = pybamm.FunctionParameter("Times three", {"a": a, "b": b})
processed_func = parameter_values.process_symbol(func)
self.assertIsInstance(processed_func, pybamm.Interpolant)
# self.assertEqual(processed_func.evaluate().flatten()[0], 22.23)
np.testing.assert_almost_equal(
- processed_func.evaluate().flatten()[0], 22.23, decimal=4
+ processed_func.evaluate(inputs={"a": 3.01, "b": 4.4}).flatten()[0],
+ 22.23,
+ decimal=4,
)
interp3 = pybamm.Interpolant(data3[0], data3[1], children=(a, b))
processed_interp3 = parameter_values.process_symbol(interp3)
# self.assertEqual(processed_interp3.evaluate().flatten()[0], 22.23)
np.testing.assert_almost_equal(
- processed_interp3.evaluate().flatten()[0], 22.23, decimal=4
+ processed_interp3.evaluate(inputs={"a": 3.01, "b": 4.4}).flatten()[0],
+ 22.23,
+ decimal=4,
)
def test_interpolant_against_function(self):
@@ -589,15 +570,6 @@ def test_interpolant_against_function(self):
processed_func.evaluate(), processed_interp.evaluate(), decimal=3
)
- # process differentiated function parameter
- diff_func = func.diff(a)
- diff_interp = interp.diff(a)
- processed_diff_func = parameter_values.process_symbol(diff_func)
- processed_diff_interp = parameter_values.process_symbol(diff_interp)
- np.testing.assert_array_almost_equal(
- processed_diff_func.evaluate(), processed_diff_interp.evaluate(), decimal=2
- )
-
def test_interpolant_2d_from_json(self):
parameter_values = pybamm.ParameterValues(
{"function": lico2_diffusivity_Dualfoil1998}
@@ -622,6 +594,95 @@ def test_interpolant_2d_from_json(self):
processed_func.evaluate(), processed_interp.evaluate(), decimal=4
)
+ def test_process_interpolant_3D_from_csv(self):
+ name = "data_for_testing_3D"
+ path = os.path.join(pybamm.root_dir(), "tests", "unit", "test_parameters")
+
+ processed = pybamm.parameters.process_3D_data_csv(name, path)
+ parameter_values = pybamm.ParameterValues({"interpolation": processed})
+
+ x1 = pybamm.StateVector(slice(0, 1))
+ x2 = pybamm.StateVector(slice(1, 2))
+ x3 = pybamm.StateVector(slice(2, 3))
+ interpolation = pybamm.FunctionParameter(
+ "interpolation", {"x1": x1, "x2": x2, "x3": x3}
+ )
+
+ processed_interpolation = parameter_values.process_symbol(interpolation)
+
+ filename, name = pybamm.parameters.process_parameter_data._process_name(
+ name, path, ".csv"
+ )
+ raw_df = pd.read_csv(filename)
+
+ # It's also helpful to check the casadi conversion here aswell
+ # We check elsewhere but this helps catch additional bugs
+ casadi_y = casadi.MX.sym("y", 3)
+ interp_casadi = processed_interpolation.to_casadi(y=casadi_y)
+ casadi_f = casadi.Function("f", [casadi_y], [interp_casadi])
+
+ # check that passing the input columns give the correct output
+ for values in raw_df.values:
+
+ y = np.array([values[0], values[1], values[2]])
+ f = values[3]
+ casadi_sol = casadi_f(y)
+
+ np.testing.assert_almost_equal(
+ processed_interpolation.evaluate(y=y)[0][0],
+ f,
+ decimal=10,
+ )
+
+ np.testing.assert_almost_equal(
+ f,
+ casadi_sol.__float__(),
+ decimal=10,
+ )
+
+ def test_process_interpolant_2D_from_csv(self):
+ name = "data_for_testing_2D"
+ path = os.path.join(pybamm.root_dir(), "tests", "unit", "test_parameters")
+
+ processed = pybamm.parameters.process_2D_data_csv(name, path)
+ parameter_values = pybamm.ParameterValues({"interpolation": processed})
+
+ x1 = pybamm.StateVector(slice(0, 1))
+ x2 = pybamm.StateVector(slice(1, 2))
+ interpolation = pybamm.FunctionParameter("interpolation", {"x1": x1, "x2": x2})
+ processed_interpolation = parameter_values.process_symbol(interpolation)
+
+ # It's also helpful to check the casadi conversion here aswell
+ # We check elsewhere but this helps catch additional bugs
+ casadi_y = casadi.MX.sym("y", 2)
+ interp_casadi = processed_interpolation.to_casadi(y=casadi_y)
+ casadi_f = casadi.Function("f", [casadi_y], [interp_casadi])
+
+ filename, name = pybamm.parameters.process_parameter_data._process_name(
+ name, path, ".csv"
+ )
+ raw_df = pd.read_csv(filename)
+
+ # check that passing the input columns give the correct output
+ for values in raw_df.values:
+
+ y = np.array([values[0], values[1]])
+ f = values[2]
+
+ casadi_sol = casadi_f(y)
+
+ np.testing.assert_almost_equal(
+ processed_interpolation.evaluate(y=y)[0][0],
+ f,
+ decimal=10,
+ )
+
+ np.testing.assert_almost_equal(
+ f,
+ casadi_sol.__float__(),
+ decimal=10,
+ )
+
def test_process_integral_broadcast(self):
# Test that the x-average of a broadcast gets processed correctly
var = pybamm.Variable("var", domain="negative electrode")
@@ -796,23 +857,9 @@ def test_process_complex_expression(self):
par2 = pybamm.Parameter("par2")
expression = (3 * (par1**var2)) / ((var1 - par2) + var2)
- param = pybamm.ParameterValues({"par1": 1, "par2": 2})
+ param = pybamm.ParameterValues({"par1": 2, "par2": 4})
exp_param = param.process_symbol(expression)
- self.assertIsInstance(exp_param, pybamm.Division)
- # left side
- self.assertIsInstance(exp_param.left, pybamm.Multiplication)
- self.assertIsInstance(exp_param.left.left, pybamm.Scalar)
- self.assertIsInstance(exp_param.left.right, pybamm.Power)
- self.assertIsInstance(exp_param.left.right.left, pybamm.Scalar)
- self.assertEqual(exp_param.left.right.left.value, 1)
- self.assertIsInstance(exp_param.left.right.right, pybamm.Variable)
- # right side
- self.assertIsInstance(exp_param.right, pybamm.Addition)
- self.assertIsInstance(exp_param.right.left, pybamm.Subtraction)
- self.assertIsInstance(exp_param.right.left.left, pybamm.Variable)
- self.assertIsInstance(exp_param.right.left.right, pybamm.Scalar)
- self.assertEqual(exp_param.right.left.right.value, 2)
- self.assertIsInstance(exp_param.right.right, pybamm.Variable)
+ self.assertEqual(exp_param, 3.0 * (2.0**var2) / ((-4.0 + var1) + var2))
def test_process_model(self):
model = pybamm.BaseModel()
diff --git a/tests/unit/test_parameters/test_process_parameter_data.py b/tests/unit/test_parameters/test_process_parameter_data.py
index ade04af7d4..310d17002f 100644
--- a/tests/unit/test_parameters/test_process_parameter_data.py
+++ b/tests/unit/test_parameters/test_process_parameter_data.py
@@ -36,6 +36,29 @@ def test_process_2D_data(self):
self.assertIsInstance(processed[1][0][1], np.ndarray)
self.assertIsInstance(processed[1][1], np.ndarray)
+ def test_process_2D_data_csv(self):
+ name = "data_for_testing_2D"
+ path = os.path.join(pybamm.root_dir(), "tests", "unit", "test_parameters")
+ processed = pybamm.parameters.process_2D_data_csv(name, path)
+
+ self.assertEqual(processed[0], name)
+ self.assertIsInstance(processed[1], tuple)
+ self.assertIsInstance(processed[1][0][0], np.ndarray)
+ self.assertIsInstance(processed[1][0][1], np.ndarray)
+ self.assertIsInstance(processed[1][1], np.ndarray)
+
+ def test_process_3D_data_csv(self):
+ name = "data_for_testing_3D"
+ path = os.path.join(pybamm.root_dir(), "tests", "unit", "test_parameters")
+ processed = pybamm.parameters.process_3D_data_csv(name, path)
+
+ self.assertEqual(processed[0], name)
+ self.assertIsInstance(processed[1], tuple)
+ self.assertIsInstance(processed[1][0][0], np.ndarray)
+ self.assertIsInstance(processed[1][0][1], np.ndarray)
+ self.assertIsInstance(processed[1][0][2], np.ndarray)
+ self.assertIsInstance(processed[1][1], np.ndarray)
+
def test_error(self):
with self.assertRaisesRegex(FileNotFoundError, "Could not find file"):
pybamm.parameters.process_1D_data("not_a_real_file", "not_a_real_path")
diff --git a/tests/unit/test_plotting/test_quick_plot.py b/tests/unit/test_plotting/test_quick_plot.py
index ff28a3fc48..a7816a748a 100644
--- a/tests/unit/test_plotting/test_quick_plot.py
+++ b/tests/unit/test_plotting/test_quick_plot.py
@@ -322,7 +322,7 @@ def test_loqs_spme(self):
c_e_var = solution["Electrolyte concentration [mol.m-3]"]
# 1D variables should be evaluated on edges
L_x = param.evaluate(model.param.L_x)
- c_e = c_e_var(t=t, x=mesh.combine_submeshes(*c_e_var.domain).edges * L_x)
+ c_e = c_e_var(t=t, x=mesh[c_e_var.domain].edges * L_x)
for unit, scale in zip(["seconds", "minutes", "hours"], [1, 60, 3600]):
quick_plot = pybamm.QuickPlot(
diff --git a/tests/unit/test_solvers/test_base_solver.py b/tests/unit/test_solvers/test_base_solver.py
index 30a8eece1e..0217b0a4e2 100644
--- a/tests/unit/test_solvers/test_base_solver.py
+++ b/tests/unit/test_solvers/test_base_solver.py
@@ -121,7 +121,7 @@ def __init__(self):
self.convert_to_format = "casadi"
self.bounds = (np.array([-np.inf]), np.array([np.inf]))
self.len_rhs_and_alg = 1
- self.interpolant_extrapolation_events_eval = []
+ self.events = []
def rhs_eval(self, t, y, inputs):
return np.array([])
@@ -160,7 +160,7 @@ def __init__(self):
self.bounds = (-np.inf * np.ones(4), np.inf * np.ones(4))
self.len_rhs = 1
self.len_rhs_and_alg = 4
- self.interpolant_extrapolation_events_eval = []
+ self.events = []
def rhs_eval(self, t, y, inputs):
return y[0:1]
@@ -209,7 +209,6 @@ def __init__(self):
)
self.convert_to_format = "casadi"
self.bounds = (np.array([-np.inf]), np.array([np.inf]))
- self.interpolant_extrapolation_events_eval = []
def rhs_eval(self, t, y, inputs):
return np.array([])
diff --git a/tests/unit/test_solvers/test_casadi_solver.py b/tests/unit/test_solvers/test_casadi_solver.py
index 6b9d073ab6..86f671546d 100644
--- a/tests/unit/test_solvers/test_casadi_solver.py
+++ b/tests/unit/test_solvers/test_casadi_solver.py
@@ -509,7 +509,7 @@ def test_interpolant_extrapolate(self):
model = pybamm.lithium_ion.DFN()
param = pybamm.ParameterValues("NCA_Kim2011")
experiment = pybamm.Experiment(
- ["Charge at 1C until 4.6 V"], period="10 seconds"
+ ["Charge at 1C until 4.2 V"], period="10 seconds"
)
param["Upper voltage cut-off [V]"] = 4.8
@@ -528,18 +528,6 @@ def test_interpolant_extrapolate(self):
with self.assertRaisesRegex(pybamm.SolverError, "interpolation bounds"):
sim.solve()
- ci = param["Initial concentration in positive electrode [mol.m-3]"]
- param["Initial concentration in positive electrode [mol.m-3]"] = 0.8 * ci
-
- sim = pybamm.Simulation(
- model,
- parameter_values=param,
- experiment=experiment,
- solver=pybamm.CasadiSolver(mode="safe", dt_max=0.05),
- )
- with self.assertRaisesRegex(pybamm.SolverError, "interpolation bounds"):
- sim.solve()
-
def test_casadi_safe_no_termination(self):
model = pybamm.BaseModel()
v = pybamm.Variable("v")
diff --git a/tests/unit/test_solvers/test_idaklu_solver.py b/tests/unit/test_solvers/test_idaklu_solver.py
index 932dc7876e..9788d0d278 100644
--- a/tests/unit/test_solvers/test_idaklu_solver.py
+++ b/tests/unit/test_solvers/test_idaklu_solver.py
@@ -1,9 +1,13 @@
#
# Tests for the KLU Solver class
#
-import pybamm
-import numpy as np
+from contextlib import redirect_stdout
+import io
import unittest
+
+import numpy as np
+
+import pybamm
from tests import get_discretisation_for_testing
@@ -250,7 +254,7 @@ def test_sensitivities_with_events(self):
# this test implements a python version of the ida Roberts
# example provided in sundials
# see sundials ida examples pdf
- for form in ["python", "casadi", "jax"]:
+ for form in ["casadi", "python", "jax"]:
if form == "jax" and not pybamm.have_jax():
continue
if form == "casadi":
@@ -443,6 +447,81 @@ def test_dae_solver_algebraic_model(self):
solution = solver.solve(model, t_eval)
np.testing.assert_array_equal(solution.y, -1)
+ def test_options(self):
+ model = pybamm.BaseModel()
+ u = pybamm.Variable("u")
+ v = pybamm.Variable("v")
+ model.rhs = {u: -0.1 * u}
+ model.algebraic = {v: v - u}
+ model.initial_conditions = {u: 1, v: 1}
+ disc = pybamm.Discretisation()
+ disc.process_model(model)
+
+ t_eval = np.linspace(0, 1)
+ solver = pybamm.IDAKLUSolver()
+ soln_base = solver.solve(model, t_eval)
+
+ # test print_stats
+ solver = pybamm.IDAKLUSolver(options={"print_stats": True})
+ f = io.StringIO()
+ with redirect_stdout(f):
+ solver.solve(model, t_eval)
+ s = f.getvalue()
+ self.assertIn("Solver Stats", s)
+
+ solver = pybamm.IDAKLUSolver(options={"print_stats": False})
+ f = io.StringIO()
+ with redirect_stdout(f):
+ solver.solve(model, t_eval)
+ s = f.getvalue()
+ self.assertEqual(len(s), 0)
+
+ # test everything else
+ for jacobian in ["none", "dense", "sparse", "matrix-free", "garbage"]:
+ for linear_solver in [
+ "SUNLinSol_SPBCGS",
+ "SUNLinSol_Dense",
+ "SUNLinSol_KLU",
+ "SUNLinSol_SPFGMR",
+ "SUNLinSol_SPGMR",
+ "SUNLinSol_SPTFQMR",
+ "garbage",
+ ]:
+ for precon in ["none", "BBDP"]:
+ options = {
+ "jacobian": jacobian,
+ "linear_solver": linear_solver,
+ "preconditioner": precon,
+ }
+ solver = pybamm.IDAKLUSolver(options=options)
+ if (
+ jacobian == "none"
+ and (linear_solver == "SUNLinSol_Dense")
+ or jacobian == "dense"
+ and (linear_solver == "SUNLinSol_Dense")
+ or jacobian == "sparse"
+ and (
+ linear_solver != "SUNLinSol_Dense"
+ and linear_solver != "garbage"
+ )
+ or jacobian == "matrix-free"
+ and (
+ linear_solver != "SUNLinSol_KLU"
+ and linear_solver != "SUNLinSol_Dense"
+ and linear_solver != "garbage"
+ )
+ ):
+ works = True
+ else:
+ works = False
+
+ if works:
+ soln = solver.solve(model, t_eval)
+ np.testing.assert_array_almost_equal(soln.y, soln_base.y, 5)
+ else:
+ with self.assertRaises(ValueError):
+ soln = solver.solve(model, t_eval)
+
if __name__ == "__main__":
print("Add -v for more debug output")
diff --git a/tests/unit/test_solvers/test_scikits_solvers.py b/tests/unit/test_solvers/test_scikits_solvers.py
index 5ad45c2886..9d186a9072 100644
--- a/tests/unit/test_solvers/test_scikits_solvers.py
+++ b/tests/unit/test_solvers/test_scikits_solvers.py
@@ -73,7 +73,7 @@ def test_dae_integrate_bad_ics(self):
t_eval = np.linspace(0, 1, 100)
solver.set_up(model)
- solver._set_initial_conditions(model, {}, True)
+ solver._set_initial_conditions(model, 0, {}, True)
# check y0
np.testing.assert_array_equal(model.y0.full().flatten(), [0, 0])
# check dae solutions
@@ -165,10 +165,8 @@ def test_model_solver_ode_jacobian_python(self):
# Add user-supplied Jacobian to model
mesh = get_mesh_for_testing()
- combined_submesh = mesh.combine_submeshes(
- "negative electrode", "separator", "positive electrode"
- )
- N = combined_submesh.npts
+ submesh = mesh[("negative electrode", "separator", "positive electrode")]
+ N = submesh.npts
# Solve testing various linear solvers
linsolvers = [
@@ -478,10 +476,8 @@ def test_model_solver_dae_with_jacobian_python(self):
# Add user-supplied Jacobian to model
mesh = get_mesh_for_testing()
- combined_submesh = mesh.combine_submeshes(
- "negative electrode", "separator", "positive electrode"
- )
- N = combined_submesh.npts
+ submesh = mesh[("negative electrode", "separator", "positive electrode")]
+ N = submesh.npts
def jacobian(t, y):
return np.block(
diff --git a/tests/unit/test_solvers/test_scipy_solver.py b/tests/unit/test_solvers/test_scipy_solver.py
index 63cd50a40d..6363fea6ce 100644
--- a/tests/unit/test_solvers/test_scipy_solver.py
+++ b/tests/unit/test_solvers/test_scipy_solver.py
@@ -123,10 +123,8 @@ def test_model_solver_ode_with_jacobian_python(self):
disc.process_model(model)
# Add user-supplied Jacobian to model
- combined_submesh = mesh.combine_submeshes(
- "negative electrode", "separator", "positive electrode"
- )
- N = combined_submesh.npts
+ submesh = mesh[("negative electrode", "separator", "positive electrode")]
+ N = submesh.npts
# construct jacobian in order of model.rhs
J = []
@@ -503,6 +501,25 @@ def test_model_solver_manually_update_initial_conditions(self):
solution.y[0], 2 * np.exp(-solution.t), decimal=5
)
+ def test_scale_and_reference(self):
+ # Create model
+ model = pybamm.BaseModel()
+ var1 = pybamm.Variable("var1", scale=2, reference=1)
+ model.rhs = {var1: -var1}
+ model.initial_conditions = {var1: 3}
+ model.variables = {"var1": var1}
+ solver = pybamm.ScipySolver()
+ t_eval = np.linspace(0, 5, 100)
+ solution = solver.solve(model, t_eval)
+
+ # Check that the initial conditions and solution are scaled correctly
+ np.testing.assert_array_almost_equal(
+ model.concatenated_initial_conditions.evaluate(), 1
+ )
+ np.testing.assert_array_almost_equal(
+ solution.y[0], (solution["var1"].data - 1) / 2, decimal=14
+ )
+
class TestScipySolverWithSensitivity(unittest.TestCase):
def test_solve_sensitivity_scalar_var_scalar_input(self):
diff --git a/tests/unit/test_spatial_methods/test_base_spatial_method.py b/tests/unit/test_spatial_methods/test_base_spatial_method.py
index 259173092e..46a792f26a 100644
--- a/tests/unit/test_spatial_methods/test_base_spatial_method.py
+++ b/tests/unit/test_spatial_methods/test_base_spatial_method.py
@@ -107,7 +107,7 @@ def test_discretise_spatial_variable(self):
var_disc = spatial_method.spatial_variable(var)
self.assertIsInstance(var_disc, pybamm.Vector)
np.testing.assert_array_equal(
- var_disc.evaluate()[:, 0], mesh.combine_submeshes(*var.domain).nodes
+ var_disc.evaluate()[:, 0], mesh[var.domain].nodes
)
# edges
@@ -118,7 +118,7 @@ def test_discretise_spatial_variable(self):
var_disc = spatial_method.spatial_variable(var)
self.assertIsInstance(var_disc, pybamm.Vector)
np.testing.assert_array_equal(
- var_disc.evaluate()[:, 0], mesh.combine_submeshes(*var.domain).edges
+ var_disc.evaluate()[:, 0], mesh[var.domain].edges
)
def test_boundary_value_checks(self):
diff --git a/tests/unit/test_spatial_methods/test_finite_volume/test_extrapolation.py b/tests/unit/test_spatial_methods/test_finite_volume/test_extrapolation.py
index 07462cf3d2..2521755708 100644
--- a/tests/unit/test_spatial_methods/test_finite_volume/test_extrapolation.py
+++ b/tests/unit/test_spatial_methods/test_finite_volume/test_extrapolation.py
@@ -248,7 +248,7 @@ def test_linear_extrapolate_left_right(self):
disc = pybamm.Discretisation(mesh, spatial_methods)
whole_cell = ["negative electrode", "separator", "positive electrode"]
- macro_submesh = mesh.combine_submeshes(*whole_cell)
+ macro_submesh = mesh[whole_cell]
micro_submesh = mesh["negative particle"]
# Macroscale
@@ -315,7 +315,7 @@ def test_quadratic_extrapolate_left_right(self):
disc = pybamm.Discretisation(mesh, spatial_methods)
whole_cell = ["negative electrode", "separator", "positive electrode"]
- macro_submesh = mesh.combine_submeshes(*whole_cell)
+ macro_submesh = mesh[whole_cell]
micro_submesh = mesh["negative particle"]
# Macroscale
diff --git a/tests/unit/test_spatial_methods/test_finite_volume/test_finite_volume.py b/tests/unit/test_spatial_methods/test_finite_volume/test_finite_volume.py
index 008e39b26c..cd532ac380 100644
--- a/tests/unit/test_spatial_methods/test_finite_volume/test_finite_volume.py
+++ b/tests/unit/test_spatial_methods/test_finite_volume/test_finite_volume.py
@@ -64,9 +64,7 @@ def test_concatenation(self):
edges = [pybamm.Vector(mesh[dom].edges, domain=dom) for dom in whole_cell]
# Concatenation of edges should get averaged to nodes first, using edge_to_node
v_disc = fin_vol.concatenation(edges)
- np.testing.assert_array_equal(
- v_disc.evaluate()[:, 0], mesh.combine_submeshes(*whole_cell).nodes
- )
+ np.testing.assert_array_equal(v_disc.evaluate()[:, 0], mesh[whole_cell].nodes)
# test for bad shape
edges = [
@@ -81,12 +79,12 @@ def test_discretise_diffusivity_times_spatial_operator(self):
spatial_methods = {"macroscale": pybamm.FiniteVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
whole_cell = ["negative electrode", "separator", "positive electrode"]
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
# Discretise some equations where averaging is needed
var = pybamm.Variable("var", domain=whole_cell)
disc.set_variable_slices([var])
- y_test = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ y_test = np.ones_like(submesh.nodes[:, np.newaxis])
for eqn in [
var * pybamm.grad(var),
var**2 * pybamm.grad(var),
@@ -165,9 +163,7 @@ def test_discretise_spatial_variable(self):
self.assertIsInstance(x2_disc, pybamm.Vector)
np.testing.assert_array_equal(
x2_disc.evaluate(),
- disc.mesh.combine_submeshes("negative electrode", "separator").nodes[
- :, np.newaxis
- ],
+ disc.mesh[("negative electrode", "separator")].nodes[:, np.newaxis],
)
# microscale
r = 3 * pybamm.SpatialVariable("r", ["negative particle"])
@@ -194,11 +190,11 @@ def test_mass_matrix_shape(self):
mesh = get_mesh_for_testing()
spatial_methods = {"macroscale": pybamm.FiniteVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
disc.process_model(model)
# Mass matrix
- mass = np.eye(combined_submesh.npts)
+ mass = np.eye(submesh.npts)
np.testing.assert_array_equal(mass, model.mass_matrix.entries.toarray())
def test_p2d_mass_matrix_shape(self):
@@ -238,15 +234,15 @@ def test_jacobian(self):
mesh = get_mesh_for_testing()
spatial_methods = {"macroscale": pybamm.FiniteVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
spatial_method = pybamm.FiniteVolume()
spatial_method.build(mesh)
# Setup variable
var = pybamm.Variable("var", domain=whole_cell)
disc.set_variable_slices([var])
- y = pybamm.StateVector(slice(0, combined_submesh.npts))
- y_test = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ y = pybamm.StateVector(slice(0, submesh.npts))
+ y_test = np.ones_like(submesh.nodes[:, np.newaxis])
# grad
eqn = pybamm.grad(var)
@@ -422,6 +418,7 @@ def test_upwind_downwind(self):
# Remove boundary conditions and check error is raised
disc.bcs = {}
+ disc._discretised_symbols = {}
with self.assertRaisesRegex(pybamm.ModelError, "Boundary conditions"):
disc.process_symbol(upwind)
diff --git a/tests/unit/test_spatial_methods/test_finite_volume/test_ghost_nodes_and_neumann.py b/tests/unit/test_spatial_methods/test_finite_volume/test_ghost_nodes_and_neumann.py
index d9f35523f7..0a9d1dd102 100644
--- a/tests/unit/test_spatial_methods/test_finite_volume/test_ghost_nodes_and_neumann.py
+++ b/tests/unit/test_spatial_methods/test_finite_volume/test_ghost_nodes_and_neumann.py
@@ -30,8 +30,8 @@ def test_add_ghost_nodes(self):
sp_meth = pybamm.FiniteVolume()
sp_meth.build(mesh)
sym_ghost, _ = sp_meth.add_ghost_nodes(var, discretised_symbol, bcs)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
- y_test = np.linspace(0, 1, combined_submesh.npts)
+ submesh = mesh[whole_cell]
+ y_test = np.linspace(0, 1, submesh.npts)
np.testing.assert_array_equal(
sym_ghost.evaluate(y=y_test)[1:-1], discretised_symbol.evaluate(y=y_test)
)
@@ -76,8 +76,8 @@ def test_add_ghost_nodes_concatenation(self):
}
# Test
- combined_submesh = mesh.combine_submeshes(*whole_cell)
- y_test = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ submesh = mesh[whole_cell]
+ y_test = np.ones_like(submesh.nodes[:, np.newaxis])
# both
sp_meth = pybamm.FiniteVolume()
diff --git a/tests/unit/test_spatial_methods/test_finite_volume/test_grad_div_shapes.py b/tests/unit/test_spatial_methods/test_finite_volume/test_grad_div_shapes.py
index a586939a08..ac5ec6f489 100644
--- a/tests/unit/test_spatial_methods/test_finite_volume/test_grad_div_shapes.py
+++ b/tests/unit/test_spatial_methods/test_finite_volume/test_grad_div_shapes.py
@@ -22,11 +22,11 @@ def test_grad_div_shapes_Dirichlet_bcs(self):
mesh = get_mesh_for_testing()
spatial_methods = {"macroscale": pybamm.FiniteVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
# Test gradient of constant is zero
# grad(1) = 0
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
var = pybamm.Variable("var", domain=whole_cell)
grad_eqn = pybamm.grad(var)
boundary_conditions = {
@@ -40,11 +40,11 @@ def test_grad_div_shapes_Dirichlet_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_equal(
grad_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.edges[:, np.newaxis]),
+ np.zeros_like(submesh.edges[:, np.newaxis]),
)
# Test operations on linear x
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
N = pybamm.grad(var)
div_eqn = pybamm.div(N)
boundary_conditions = {
@@ -58,13 +58,13 @@ def test_grad_div_shapes_Dirichlet_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y),
- np.ones_like(combined_submesh.edges[:, np.newaxis]),
+ np.ones_like(submesh.edges[:, np.newaxis]),
)
# div(grad(x)) = 0
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, linear_y),
- np.zeros_like(combined_submesh.nodes[:, np.newaxis]),
+ np.zeros_like(submesh.nodes[:, np.newaxis]),
)
def test_cylindrical_grad_div_shapes_Dirichlet_bcs(self):
@@ -261,11 +261,11 @@ def test_grad_div_shapes_Neumann_bcs(self):
mesh = get_mesh_for_testing()
spatial_methods = {"macroscale": pybamm.FiniteVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
# Test gradient of constant is zero
# grad(1) = 0
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
var = pybamm.Variable("var", domain=whole_cell)
grad_eqn = pybamm.grad(var)
boundary_conditions = {
@@ -279,11 +279,11 @@ def test_grad_div_shapes_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_equal(
grad_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.edges[:, np.newaxis]),
+ np.zeros_like(submesh.edges[:, np.newaxis]),
)
# Test operations on linear x
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
N = pybamm.grad(var)
div_eqn = pybamm.div(N)
boundary_conditions = {
@@ -297,13 +297,13 @@ def test_grad_div_shapes_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y),
- np.ones_like(combined_submesh.edges[:, np.newaxis]),
+ np.ones_like(submesh.edges[:, np.newaxis]),
)
# div(grad(x)) = 0
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, linear_y),
- np.zeros_like(combined_submesh.nodes[:, np.newaxis]),
+ np.zeros_like(submesh.nodes[:, np.newaxis]),
)
def test_grad_div_shapes_Dirichlet_and_Neumann_bcs(self):
@@ -316,10 +316,10 @@ def test_grad_div_shapes_Dirichlet_and_Neumann_bcs(self):
mesh = get_mesh_for_testing()
spatial_methods = {"macroscale": pybamm.FiniteVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
# Test gradient and divergence of a constant
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
var = pybamm.Variable("var", domain=whole_cell)
grad_eqn = pybamm.grad(var)
N = pybamm.grad(var)
@@ -336,17 +336,17 @@ def test_grad_div_shapes_Dirichlet_and_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_equal(
grad_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.edges[:, np.newaxis]),
+ np.zeros_like(submesh.edges[:, np.newaxis]),
)
# div(grad(1)) = 0
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.nodes[:, np.newaxis]),
+ np.zeros_like(submesh.nodes[:, np.newaxis]),
)
# Test gradient and divergence of linear x
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
boundary_conditions = {
var: {
"left": (pybamm.Scalar(1), "Neumann"),
@@ -358,13 +358,13 @@ def test_grad_div_shapes_Dirichlet_and_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y),
- np.ones_like(combined_submesh.edges[:, np.newaxis]),
+ np.ones_like(submesh.edges[:, np.newaxis]),
)
# div(grad(x)) = 0
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, linear_y),
- np.zeros_like(combined_submesh.nodes[:, np.newaxis]),
+ np.zeros_like(submesh.nodes[:, np.newaxis]),
)
def test_cylindrical_grad_div_shapes_Neumann_bcs(self):
@@ -439,13 +439,13 @@ def test_spherical_grad_div_shapes_Neumann_bcs(self):
mesh = get_mesh_for_testing()
spatial_methods = {"negative particle": pybamm.FiniteVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes("negative particle")
+ submesh = mesh["negative particle"]
# Test gradient
var = pybamm.Variable("var", domain="negative particle")
grad_eqn = pybamm.grad(var)
# grad(1) = 0
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
boundary_conditions = {
var: {
"left": (pybamm.Scalar(0), "Neumann"),
@@ -457,10 +457,10 @@ def test_spherical_grad_div_shapes_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_equal(
grad_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.edges[:, np.newaxis]),
+ np.zeros_like(submesh.edges[:, np.newaxis]),
)
# grad(r) == 1
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
boundary_conditions = {
var: {
"left": (pybamm.Scalar(1), "Neumann"),
@@ -471,12 +471,12 @@ def test_spherical_grad_div_shapes_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y),
- np.ones_like(combined_submesh.edges[:, np.newaxis]),
+ np.ones_like(submesh.edges[:, np.newaxis]),
)
# Test divergence of gradient
# div(grad(r^2)) = 6 , N_left = 0, N_right = 2
- quadratic_y = combined_submesh.nodes**2
+ quadratic_y = submesh.nodes**2
N = pybamm.grad(var)
div_eqn = pybamm.div(N)
boundary_conditions = {
@@ -489,7 +489,7 @@ def test_spherical_grad_div_shapes_Neumann_bcs(self):
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, quadratic_y),
- 6 * np.ones((combined_submesh.npts, 1)),
+ 6 * np.ones((submesh.npts, 1)),
)
def test_p2d_spherical_grad_div_shapes_Neumann_bcs(self):
@@ -548,11 +548,11 @@ def test_grad_div_shapes_mixed_domain(self):
mesh = get_mesh_for_testing()
spatial_methods = {"macroscale": pybamm.FiniteVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes("negative electrode", "separator")
+ submesh = mesh[("negative electrode", "separator")]
# Test gradient of constant
# grad(1) = 0
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
var = pybamm.Variable("var", domain=["negative electrode", "separator"])
grad_eqn = pybamm.grad(var)
boundary_conditions = {
@@ -566,17 +566,17 @@ def test_grad_div_shapes_mixed_domain(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_equal(
grad_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.edges[:, np.newaxis]),
+ np.zeros_like(submesh.edges[:, np.newaxis]),
)
# Test operations on linear x
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
N = pybamm.grad(var)
div_eqn = pybamm.div(N)
boundary_conditions = {
var: {
"left": (pybamm.Scalar(0), "Dirichlet"),
- "right": (pybamm.Scalar(combined_submesh.edges[-1]), "Dirichlet"),
+ "right": (pybamm.Scalar(submesh.edges[-1]), "Dirichlet"),
}
}
disc.bcs = boundary_conditions
@@ -584,13 +584,13 @@ def test_grad_div_shapes_mixed_domain(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y),
- np.ones_like(combined_submesh.edges[:, np.newaxis]),
+ np.ones_like(submesh.edges[:, np.newaxis]),
)
# div(grad(x)) = 0
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, linear_y),
- np.zeros_like(combined_submesh.nodes[:, np.newaxis]),
+ np.zeros_like(submesh.nodes[:, np.newaxis]),
)
def test_grad_1plus1d(self):
@@ -627,13 +627,11 @@ def test_grad_1plus1d(self):
grad_eqn_disc = disc.process_symbol(pybamm.grad(var))
# Evaulate
- combined_submesh = mesh.combine_submeshes(*var.domain)
- linear_y = np.outer(np.linspace(0, 1, 15), combined_submesh.nodes).reshape(
+ submesh = mesh[var.domain]
+ linear_y = np.outer(np.linspace(0, 1, 15), submesh.nodes).reshape(-1, 1)
+ expected = np.outer(np.linspace(0, 1, 15), np.ones_like(submesh.edges)).reshape(
-1, 1
)
- expected = np.outer(
- np.linspace(0, 1, 15), np.ones_like(combined_submesh.edges)
- ).reshape(-1, 1)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y), expected
)
diff --git a/tests/unit/test_spatial_methods/test_finite_volume/test_integration.py b/tests/unit/test_spatial_methods/test_finite_volume/test_integration.py
index 0885eb58ca..b8b2918682 100644
--- a/tests/unit/test_spatial_methods/test_finite_volume/test_integration.py
+++ b/tests/unit/test_spatial_methods/test_finite_volume/test_integration.py
@@ -33,15 +33,15 @@ def test_definite_integral(self):
integral_eqn = pybamm.Integral(var, x)
disc.set_variable_slices([var])
integral_eqn_disc = disc.process_symbol(integral_eqn)
- combined_submesh = mesh.combine_submeshes("negative electrode", "separator")
+ submesh = mesh[("negative electrode", "separator")]
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
self.assertEqual(integral_eqn_disc.evaluate(None, constant_y), ln + ls)
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
np.testing.assert_array_almost_equal(
integral_eqn_disc.evaluate(None, linear_y), (ln + ls) ** 2 / 2
)
- cos_y = np.cos(combined_submesh.nodes[:, np.newaxis])
+ cos_y = np.cos(submesh.nodes[:, np.newaxis])
np.testing.assert_array_almost_equal(
integral_eqn_disc.evaluate(None, cos_y), np.sin(ln + ls), decimal=4
)
@@ -52,15 +52,15 @@ def test_definite_integral(self):
integral_eqn = pybamm.Integral(var, x)
disc.set_variable_slices([var])
integral_eqn_disc = disc.process_symbol(integral_eqn)
- combined_submesh = mesh.combine_submeshes("separator", "positive electrode")
+ submesh = mesh[("separator", "positive electrode")]
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
self.assertEqual(integral_eqn_disc.evaluate(None, constant_y), ls + lp)
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
self.assertAlmostEqual(
integral_eqn_disc.evaluate(None, linear_y)[0][0], (1 - (ln) ** 2) / 2
)
- cos_y = np.cos(combined_submesh.nodes[:, np.newaxis])
+ cos_y = np.cos(submesh.nodes[:, np.newaxis])
np.testing.assert_array_almost_equal(
integral_eqn_disc.evaluate(None, cos_y), np.sin(1) - np.sin(ln), decimal=4
)
@@ -318,7 +318,7 @@ def test_indefinite_integral(self):
int_grad_phi = pybamm.IndefiniteIntegral(i, x)
disc.set_variable_slices([phi]) # i is not a fundamental variable
# Set boundary conditions (required for shape but don't matter)
- disc._bcs = {
+ disc.bcs = {
phi: {
"left": (pybamm.Scalar(0), "Neumann"),
"right": (pybamm.Scalar(0), "Neumann"),
@@ -328,22 +328,22 @@ def test_indefinite_integral(self):
left_boundary_value = pybamm.BoundaryValue(int_grad_phi, "left")
left_boundary_value_disc = disc.process_symbol(left_boundary_value)
- combined_submesh = mesh.combine_submeshes("negative electrode", "separator")
+ submesh = mesh[("negative electrode", "separator")]
# constant case
- phi_exact = np.ones((combined_submesh.npts, 1))
+ phi_exact = np.ones((submesh.npts, 1))
phi_approx = int_grad_phi_disc.evaluate(None, phi_exact)
phi_approx += 1 # add constant of integration
np.testing.assert_array_equal(phi_exact, phi_approx)
self.assertEqual(left_boundary_value_disc.evaluate(y=phi_exact), 0)
# linear case
- phi_exact = combined_submesh.nodes[:, np.newaxis]
+ phi_exact = submesh.nodes[:, np.newaxis]
phi_approx = int_grad_phi_disc.evaluate(None, phi_exact)
np.testing.assert_array_almost_equal(phi_exact, phi_approx)
self.assertEqual(left_boundary_value_disc.evaluate(y=phi_exact), 0)
# sine case
- phi_exact = np.sin(combined_submesh.nodes[:, np.newaxis])
+ phi_exact = np.sin(submesh.nodes[:, np.newaxis])
phi_approx = int_grad_phi_disc.evaluate(None, phi_exact)
np.testing.assert_array_almost_equal(phi_exact, phi_approx)
self.assertEqual(left_boundary_value_disc.evaluate(y=phi_exact), 0)
@@ -355,7 +355,7 @@ def test_indefinite_integral(self):
x = pybamm.SpatialVariable("x", ["separator", "positive electrode"])
int_grad_phi = pybamm.IndefiniteIntegral(i, x)
disc.set_variable_slices([phi]) # i is not a fundamental variable
- disc._bcs = {
+ disc.bcs = {
phi: {
"left": (pybamm.Scalar(0), "Neumann"),
"right": (pybamm.Scalar(0), "Neumann"),
@@ -364,17 +364,17 @@ def test_indefinite_integral(self):
int_grad_phi_disc = disc.process_symbol(int_grad_phi)
left_boundary_value = pybamm.BoundaryValue(int_grad_phi, "left")
left_boundary_value_disc = disc.process_symbol(left_boundary_value)
- combined_submesh = mesh.combine_submeshes("separator", "positive electrode")
+ submesh = mesh[("separator", "positive electrode")]
# constant case
- phi_exact = np.ones((combined_submesh.npts, 1))
+ phi_exact = np.ones((submesh.npts, 1))
phi_approx = int_grad_phi_disc.evaluate(None, phi_exact)
phi_approx += 1 # add constant of integration
np.testing.assert_array_equal(phi_exact, phi_approx)
self.assertEqual(left_boundary_value_disc.evaluate(y=phi_exact), 0)
# linear case
- phi_exact = combined_submesh.nodes[:, np.newaxis] - combined_submesh.edges[0]
+ phi_exact = submesh.nodes[:, np.newaxis] - submesh.edges[0]
phi_approx = int_grad_phi_disc.evaluate(None, phi_exact)
np.testing.assert_array_almost_equal(phi_exact, phi_approx)
np.testing.assert_array_almost_equal(
@@ -382,9 +382,7 @@ def test_indefinite_integral(self):
)
# sine case
- phi_exact = np.sin(
- combined_submesh.nodes[:, np.newaxis] - combined_submesh.edges[0]
- )
+ phi_exact = np.sin(submesh.nodes[:, np.newaxis] - submesh.edges[0])
phi_approx = int_grad_phi_disc.evaluate(None, phi_exact)
np.testing.assert_array_almost_equal(phi_exact, phi_approx)
np.testing.assert_array_almost_equal(
@@ -417,7 +415,7 @@ def test_indefinite_integral(self):
r_n = pybamm.SpatialVariable("r_n", ["negative particle"])
c_integral = pybamm.IndefiniteIntegral(N, r_n)
disc.set_variable_slices([c]) # N is not a fundamental variable
- disc._bcs = {
+ disc.bcs = {
c: {
"left": (pybamm.Scalar(0), "Neumann"),
"right": (pybamm.Scalar(0), "Neumann"),
@@ -427,17 +425,17 @@ def test_indefinite_integral(self):
c_integral_disc = disc.process_symbol(c_integral)
left_boundary_value = pybamm.BoundaryValue(c_integral, "left")
left_boundary_value_disc = disc.process_symbol(left_boundary_value)
- combined_submesh = mesh["negative particle"]
+ submesh = mesh["negative particle"]
# constant case
- c_exact = np.ones((combined_submesh.npts, 1))
+ c_exact = np.ones((submesh.npts, 1))
c_approx = c_integral_disc.evaluate(None, c_exact)
c_approx += 1 # add constant of integration
np.testing.assert_array_equal(c_exact, c_approx)
self.assertEqual(left_boundary_value_disc.evaluate(y=c_exact), 0)
# linear case
- c_exact = combined_submesh.nodes[:, np.newaxis]
+ c_exact = submesh.nodes[:, np.newaxis]
c_approx = c_integral_disc.evaluate(None, c_exact)
np.testing.assert_array_almost_equal(c_exact, c_approx)
np.testing.assert_array_almost_equal(
@@ -445,7 +443,7 @@ def test_indefinite_integral(self):
)
# sine case
- c_exact = np.sin(combined_submesh.nodes[:, np.newaxis])
+ c_exact = np.sin(submesh.nodes[:, np.newaxis])
c_approx = c_integral_disc.evaluate(None, c_exact)
np.testing.assert_array_almost_equal(c_exact, c_approx, decimal=3)
np.testing.assert_array_almost_equal(
@@ -466,7 +464,7 @@ def test_backward_indefinite_integral(self):
x = pybamm.SpatialVariable("x", ["negative electrode", "separator"])
int_grad_phi = pybamm.BackwardIndefiniteIntegral(i, x)
disc.set_variable_slices([phi]) # i is not a fundamental variable
- disc._bcs = {
+ disc.bcs = {
phi: {
"left": (pybamm.Scalar(0), "Neumann"),
"right": (pybamm.Scalar(0), "Neumann"),
@@ -475,18 +473,18 @@ def test_backward_indefinite_integral(self):
int_grad_phi_disc = disc.process_symbol(int_grad_phi)
right_boundary_value = pybamm.BoundaryValue(int_grad_phi, "right")
right_boundary_value_disc = disc.process_symbol(right_boundary_value)
- combined_submesh = mesh.combine_submeshes("negative electrode", "separator")
+ submesh = mesh[("negative electrode", "separator")]
# Test that the backward_integral(grad(phi)) = -phi
# constant case
- phi_exact = np.ones((combined_submesh.npts, 1))
+ phi_exact = np.ones((submesh.npts, 1))
phi_approx = int_grad_phi_disc.evaluate(None, phi_exact)
phi_approx += 1 # add constant of integration
np.testing.assert_array_equal(phi_exact, phi_approx)
self.assertEqual(right_boundary_value_disc.evaluate(y=phi_exact), 0)
# linear case
- phi_exact = combined_submesh.nodes - combined_submesh.edges[-1]
+ phi_exact = submesh.nodes - submesh.edges[-1]
phi_approx = int_grad_phi_disc.evaluate(None, phi_exact).flatten()
np.testing.assert_array_almost_equal(phi_exact, -phi_approx)
np.testing.assert_array_almost_equal(
@@ -494,7 +492,7 @@ def test_backward_indefinite_integral(self):
)
# sine case
- phi_exact = np.sin(combined_submesh.nodes - combined_submesh.edges[-1])
+ phi_exact = np.sin(submesh.nodes - submesh.edges[-1])
phi_approx = int_grad_phi_disc.evaluate(None, phi_exact).flatten()
np.testing.assert_array_almost_equal(phi_exact, -phi_approx)
np.testing.assert_array_almost_equal(
@@ -518,8 +516,8 @@ def test_indefinite_integral_of_broadcasted_to_cell_edges(self):
i = pybamm.PrimaryBroadcastToEdges(1, phi.domain)
x = pybamm.SpatialVariable("x", phi.domain)
disc.set_variable_slices([phi])
- combined_submesh = mesh.combine_submeshes("negative electrode", "separator")
- x_end = combined_submesh.edges[-1]
+ submesh = mesh[("negative electrode", "separator")]
+ x_end = submesh.edges[-1]
# take indefinite integral
int_phi = pybamm.IndefiniteIntegral(i * phi, x)
@@ -528,12 +526,12 @@ def test_indefinite_integral_of_broadcasted_to_cell_edges(self):
int_int_phi_disc = disc.process_symbol(int_int_phi)
# constant case
- phi_exact = np.ones_like(combined_submesh.nodes)
+ phi_exact = np.ones_like(submesh.nodes)
phi_approx = int_int_phi_disc.evaluate(None, phi_exact)
np.testing.assert_array_almost_equal(x_end**2 / 2, phi_approx)
# linear case
- phi_exact = combined_submesh.nodes[:, np.newaxis]
+ phi_exact = submesh.nodes[:, np.newaxis]
phi_approx = int_int_phi_disc.evaluate(None, phi_exact)
np.testing.assert_array_almost_equal(x_end**3 / 6, phi_approx, decimal=4)
@@ -549,21 +547,21 @@ def test_indefinite_integral_on_nodes(self):
disc.set_variable_slices([phi])
int_phi_disc = disc.process_symbol(int_phi)
- combined_submesh = mesh.combine_submeshes("negative electrode", "separator")
+ submesh = mesh[("negative electrode", "separator")]
# constant case
- phi_exact = np.ones((combined_submesh.npts, 1))
- int_phi_exact = combined_submesh.edges
+ phi_exact = np.ones((submesh.npts, 1))
+ int_phi_exact = submesh.edges
int_phi_approx = int_phi_disc.evaluate(None, phi_exact).flatten()
np.testing.assert_array_equal(int_phi_exact, int_phi_approx)
# linear case
- phi_exact = combined_submesh.nodes
- int_phi_exact = combined_submesh.edges**2 / 2
+ phi_exact = submesh.nodes
+ int_phi_exact = submesh.edges**2 / 2
int_phi_approx = int_phi_disc.evaluate(None, phi_exact).flatten()
np.testing.assert_array_almost_equal(int_phi_exact, int_phi_approx)
# cos case
- phi_exact = np.cos(combined_submesh.nodes)
- int_phi_exact = np.sin(combined_submesh.edges)
+ phi_exact = np.cos(submesh.nodes)
+ int_phi_exact = np.sin(submesh.edges)
int_phi_approx = int_phi_disc.evaluate(None, phi_exact).flatten()
np.testing.assert_array_almost_equal(int_phi_exact, int_phi_approx, decimal=5)
@@ -595,21 +593,21 @@ def test_backward_indefinite_integral_on_nodes(self):
disc.set_variable_slices([phi])
back_int_phi_disc = disc.process_symbol(back_int_phi)
- combined_submesh = mesh.combine_submeshes("negative electrode", "separator")
- edges = combined_submesh.edges
+ submesh = mesh[("negative electrode", "separator")]
+ edges = submesh.edges
# constant case
- phi_exact = np.ones((combined_submesh.npts, 1))
+ phi_exact = np.ones((submesh.npts, 1))
back_int_phi_exact = edges[-1] - edges
back_int_phi_approx = back_int_phi_disc.evaluate(None, phi_exact).flatten()
np.testing.assert_array_almost_equal(back_int_phi_exact, back_int_phi_approx)
# linear case
- phi_exact = combined_submesh.nodes
+ phi_exact = submesh.nodes
back_int_phi_exact = edges[-1] ** 2 / 2 - edges**2 / 2
back_int_phi_approx = back_int_phi_disc.evaluate(None, phi_exact).flatten()
np.testing.assert_array_almost_equal(back_int_phi_exact, back_int_phi_approx)
# cos case
- phi_exact = np.cos(combined_submesh.nodes)
+ phi_exact = np.cos(submesh.nodes)
back_int_phi_exact = np.sin(edges[-1]) - np.sin(edges)
back_int_phi_approx = back_int_phi_disc.evaluate(None, phi_exact).flatten()
np.testing.assert_array_almost_equal(
@@ -637,13 +635,13 @@ def test_forward_plus_backward_integral(self):
) + pybamm.BackwardIndefiniteIntegral(phi, x)
int_plus_back_int_phi_disc = disc.process_symbol(int_plus_back_int_phi)
- combined_submesh = mesh.combine_submeshes("separator", "positive electrode")
+ submesh = mesh[("separator", "positive electrode")]
# test
for phi_exact in [
- np.ones((combined_submesh.npts, 1)),
- combined_submesh.nodes,
- np.cos(combined_submesh.nodes),
+ np.ones((submesh.npts, 1)),
+ submesh.nodes,
+ np.cos(submesh.nodes),
]:
np.testing.assert_array_almost_equal(
full_int_phi_disc.evaluate(y=phi_exact).flatten(),
diff --git a/tests/unit/test_spatial_methods/test_spectral_volume.py b/tests/unit/test_spatial_methods/test_spectral_volume.py
index ee63fc16c7..c2e5f3396d 100644
--- a/tests/unit/test_spatial_methods/test_spectral_volume.py
+++ b/tests/unit/test_spatial_methods/test_spectral_volume.py
@@ -121,11 +121,11 @@ def test_grad_div_shapes_Dirichlet_bcs(self):
mesh = get_mesh_for_testing(1)
spatial_methods = {"macroscale": pybamm.SpectralVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
# Test gradient of constant is zero
# grad(1) = 0
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
var = pybamm.Variable("var", domain=whole_cell)
grad_eqn = pybamm.grad(var)
boundary_conditions = {
@@ -139,11 +139,11 @@ def test_grad_div_shapes_Dirichlet_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.edges[:, np.newaxis]),
+ np.zeros_like(submesh.edges[:, np.newaxis]),
)
# Test operations on linear x
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
N = pybamm.grad(var)
div_eqn = pybamm.div(N)
boundary_conditions = {
@@ -157,13 +157,13 @@ def test_grad_div_shapes_Dirichlet_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y),
- np.ones_like(combined_submesh.edges[:, np.newaxis]),
+ np.ones_like(submesh.edges[:, np.newaxis]),
)
# div(grad(x)) = 0
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, linear_y),
- np.zeros_like(combined_submesh.nodes[:, np.newaxis]),
+ np.zeros_like(submesh.nodes[:, np.newaxis]),
)
def test_spherical_grad_div_shapes_Dirichlet_bcs(self):
@@ -312,11 +312,11 @@ def test_grad_div_shapes_Neumann_bcs(self):
mesh = get_mesh_for_testing()
spatial_methods = {"macroscale": pybamm.SpectralVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
# Test gradient of constant is zero
# grad(1) = 0
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
var = pybamm.Variable("var", domain=whole_cell)
grad_eqn = pybamm.grad(var)
boundary_conditions = {
@@ -330,11 +330,11 @@ def test_grad_div_shapes_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.edges[:, np.newaxis]),
+ np.zeros_like(submesh.edges[:, np.newaxis]),
)
# Test operations on linear x
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
N = pybamm.grad(var)
div_eqn = pybamm.div(N)
boundary_conditions = {
@@ -348,13 +348,13 @@ def test_grad_div_shapes_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y),
- np.ones_like(combined_submesh.edges[:, np.newaxis]),
+ np.ones_like(submesh.edges[:, np.newaxis]),
)
# div(grad(x)) = 0
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, linear_y),
- np.zeros_like(combined_submesh.nodes[:, np.newaxis]),
+ np.zeros_like(submesh.nodes[:, np.newaxis]),
)
def test_grad_div_shapes_Dirichlet_and_Neumann_bcs(self):
@@ -367,10 +367,10 @@ def test_grad_div_shapes_Dirichlet_and_Neumann_bcs(self):
mesh = get_mesh_for_testing()
spatial_methods = {"macroscale": pybamm.SpectralVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes(*whole_cell)
+ submesh = mesh[whole_cell]
# Test gradient and divergence of a constant
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
var = pybamm.Variable("var", domain=whole_cell)
grad_eqn = pybamm.grad(var)
N = pybamm.grad(var)
@@ -387,17 +387,17 @@ def test_grad_div_shapes_Dirichlet_and_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.edges[:, np.newaxis]),
+ np.zeros_like(submesh.edges[:, np.newaxis]),
)
# div(grad(1)) = 0
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.nodes[:, np.newaxis]),
+ np.zeros_like(submesh.nodes[:, np.newaxis]),
)
# Test gradient and divergence of linear x
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
boundary_conditions = {
var: {
"left": (pybamm.Scalar(1), "Neumann"),
@@ -409,13 +409,13 @@ def test_grad_div_shapes_Dirichlet_and_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y),
- np.ones_like(combined_submesh.edges[:, np.newaxis]),
+ np.ones_like(submesh.edges[:, np.newaxis]),
)
# div(grad(x)) = 0
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, linear_y),
- np.zeros_like(combined_submesh.nodes[:, np.newaxis]),
+ np.zeros_like(submesh.nodes[:, np.newaxis]),
)
def test_spherical_grad_div_shapes_Neumann_bcs(self):
@@ -427,13 +427,13 @@ def test_spherical_grad_div_shapes_Neumann_bcs(self):
mesh = get_mesh_for_testing()
spatial_methods = {"negative particle": pybamm.SpectralVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes("negative particle")
+ submesh = mesh["negative particle"]
# Test gradient
var = pybamm.Variable("var", domain="negative particle")
grad_eqn = pybamm.grad(var)
# grad(1) = 0
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
boundary_conditions = {
var: {
"left": (pybamm.Scalar(0), "Neumann"),
@@ -445,10 +445,10 @@ def test_spherical_grad_div_shapes_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.edges[:, np.newaxis]),
+ np.zeros_like(submesh.edges[:, np.newaxis]),
)
# grad(r) == 1
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
boundary_conditions = {
var: {
"left": (pybamm.Scalar(1), "Neumann"),
@@ -459,12 +459,12 @@ def test_spherical_grad_div_shapes_Neumann_bcs(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y),
- np.ones_like(combined_submesh.edges[:, np.newaxis]),
+ np.ones_like(submesh.edges[:, np.newaxis]),
)
# Test divergence of gradient
# div(grad(r^2)) = 6 , N_left = 0, N_right = 2
- quadratic_y = combined_submesh.nodes**2
+ quadratic_y = submesh.nodes**2
N = pybamm.grad(var)
div_eqn = pybamm.div(N)
boundary_conditions = {
@@ -477,7 +477,7 @@ def test_spherical_grad_div_shapes_Neumann_bcs(self):
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, quadratic_y),
- 6 * np.ones((combined_submesh.npts, 1)),
+ 6 * np.ones((submesh.npts, 1)),
)
def test_p2d_spherical_grad_div_shapes_Neumann_bcs(self):
@@ -537,11 +537,11 @@ def test_grad_div_shapes_mixed_domain(self):
mesh = get_mesh_for_testing()
spatial_methods = {"macroscale": pybamm.SpectralVolume()}
disc = pybamm.Discretisation(mesh, spatial_methods)
- combined_submesh = mesh.combine_submeshes("negative electrode", "separator")
+ submesh = mesh[("negative electrode", "separator")]
# Test gradient of constant
# grad(1) = 0
- constant_y = np.ones_like(combined_submesh.nodes[:, np.newaxis])
+ constant_y = np.ones_like(submesh.nodes[:, np.newaxis])
var = pybamm.Variable("var", domain=["negative electrode", "separator"])
grad_eqn = pybamm.grad(var)
boundary_conditions = {
@@ -555,17 +555,17 @@ def test_grad_div_shapes_mixed_domain(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, constant_y),
- np.zeros_like(combined_submesh.edges[:, np.newaxis]),
+ np.zeros_like(submesh.edges[:, np.newaxis]),
)
# Test operations on linear x
- linear_y = combined_submesh.nodes
+ linear_y = submesh.nodes
N = pybamm.grad(var)
div_eqn = pybamm.div(N)
boundary_conditions = {
var: {
"left": (pybamm.Scalar(0), "Dirichlet"),
- "right": (pybamm.Scalar(combined_submesh.edges[-1]), "Dirichlet"),
+ "right": (pybamm.Scalar(submesh.edges[-1]), "Dirichlet"),
}
}
disc.bcs = boundary_conditions
@@ -573,13 +573,13 @@ def test_grad_div_shapes_mixed_domain(self):
grad_eqn_disc = disc.process_symbol(grad_eqn)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y),
- np.ones_like(combined_submesh.edges[:, np.newaxis]),
+ np.ones_like(submesh.edges[:, np.newaxis]),
)
# div(grad(x)) = 0
div_eqn_disc = disc.process_symbol(div_eqn)
np.testing.assert_array_almost_equal(
div_eqn_disc.evaluate(None, linear_y),
- np.zeros_like(combined_submesh.nodes[:, np.newaxis]),
+ np.zeros_like(submesh.nodes[:, np.newaxis]),
)
def test_grad_1plus1d(self):
@@ -616,13 +616,11 @@ def test_grad_1plus1d(self):
grad_eqn_disc = disc.process_symbol(pybamm.grad(var))
# Evaulate
- combined_submesh = mesh.combine_submeshes(*var.domain)
- linear_y = np.outer(np.linspace(0, 1, 15), combined_submesh.nodes).reshape(
+ submesh = mesh[var.domain]
+ linear_y = np.outer(np.linspace(0, 1, 15), submesh.nodes).reshape(-1, 1)
+ expected = np.outer(np.linspace(0, 1, 15), np.ones_like(submesh.edges)).reshape(
-1, 1
)
- expected = np.outer(
- np.linspace(0, 1, 15), np.ones_like(combined_submesh.edges)
- ).reshape(-1, 1)
np.testing.assert_array_almost_equal(
grad_eqn_disc.evaluate(None, linear_y), expected
)
diff --git a/tests/unit/test_spatial_methods/test_zero_dimensional_method.py b/tests/unit/test_spatial_methods/test_zero_dimensional_method.py
index 4ba2e71cc6..b853080791 100644
--- a/tests/unit/test_spatial_methods/test_zero_dimensional_method.py
+++ b/tests/unit/test_spatial_methods/test_zero_dimensional_method.py
@@ -39,7 +39,7 @@ def test_discretise_spatial_variable(self):
var_disc = spatial_method.spatial_variable(var)
self.assertIsInstance(var_disc, pybamm.Vector)
np.testing.assert_array_equal(
- var_disc.evaluate()[:, 0], mesh.combine_submeshes(*var.domain).nodes
+ var_disc.evaluate()[:, 0], mesh[var.domain].nodes
)
# edges
@@ -50,7 +50,7 @@ def test_discretise_spatial_variable(self):
var_disc = spatial_method.spatial_variable(var)
self.assertIsInstance(var_disc, pybamm.Vector)
np.testing.assert_array_equal(
- var_disc.evaluate()[:, 0], mesh.combine_submeshes(*var.domain).edges
+ var_disc.evaluate()[:, 0], mesh[var.domain].edges
)
def test_averages(self):
diff --git a/vcpkg.json b/vcpkg.json
index 59286c73f0..d812052bb9 100644
--- a/vcpkg.json
+++ b/vcpkg.json
@@ -1,6 +1,6 @@
{
"name": "pybamm",
- "version-string": "22.10",
+ "version-string": "22.11",
"dependencies": [
"casadi",
{