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
ndrewwang

🐛 💻 MichaPhilipp
MichaPhilipp

🐛 Alec Bills
Alec Bills

💻 - Agriya Khetarpal
Agriya Khetarpal

🚇 + Agriya Khetarpal
Agriya Khetarpal

🚇 💻 Alex Wadell
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": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAELCAYAAADz6wBxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABPk0lEQVR4nO3dd3gU1dfA8e9NbyQhJARIIIEEkI5UQaQjSBVEAZVmQcXeXhUQUEGULgKi0hQsoID0qhSpoVhAunQEQq+BlD3vH7vJLwkJbEjZJJzP8+zD7sydmbPLJidzqxERlFJKqTvl5OgAlFJK5W2aSJRSSmWKJhKllFKZoolEKaVUpmgiUUoplSkujg4guwUGBkp4eLijw1BKqTxj69atZ0QkyN7y+T6RhIeHs2XLFkeHoZRSeYYx5nBGymvVllJKqUzRRKKUUipTNJEopZTKFE0kSimlMkUTiVJKqUzRRKKUUipT8n333zsVn2DBxVnz7N3q0qVLREdHExcX5+hQlMpSrq6uFC5cGF9f3yw7pyaSNFy9Ec8L4/pS9Z6O9GpyLz7u+jHdTS5dusSpU6cICQnB09MTY4yjQ1IqS4gIMTExHD9+HCDLkon+yZ2G2Ssnsz1gIb8ee4pHR45n+sbDxCdYHB2WyiHR0dGEhITg5eWlSUTlK8YYvLy8CAkJITo6OsvOq4kkDbUiQihmMRxxh7NFvuSnlYN5cPQalv1zEl0ILP+Li4vD09PT0WEolW08PT2ztNpWE0kaypZuxYyOS2jh5EuMkxMHim0g0LU/r32/lE5fbeSvoxccHaLKZnonovKzrP5+ayJJh49vCEMfX0O/wPtwFWGX33l8I4cRd2kU7cat4uUf/uDouWuODlMppRxOE8ktGGdnOrX6mln3fcwDCa5cdTLsL7yLyMj+7DkwlSYjVjF44U4uXtOePUqpu5cmEjuUvKct43tsYXx4R8LjLZxyFU6E/kbZ4u8zf8sv1B+2kklrDxIbrw3yKncYOHAggYGBtywTHx/P6NGjqVKlCp6enhQsWJCWLVuydu3aNMtfvXqVgQMHUrZsWTw8PChcuDCdOnVi165dN5U9c+YML730EqVKlcLDw4NixYrRvHlzfvnll6x4e1lq7Nixd1TVY4xh7Nix2RBR3qOJxF5OTjzQYACzu/xOH/97KZhg4ZBnLFfDfyCy0IeMXrqMpiNXs/DvE9ogr3K9hIQEHn74Yfr06UPbtm1ZtGgRU6dOxdnZmYYNG/L999+nKH/lyhUaNmzImDFjeOaZZ1iyZAljx47l+PHj1KxZM0XyiYuLo1GjRixevJi+ffuyZMkShg4dSnBwML/++mtOv1WVA3J0gIQxpjjwLRAMCPCViHyWqsw9wBSgGtBXRIYn23cIuAwkAPEiUiOHQk/i6hVAl3bf0vrMHiYuf5Xp14+xt8BFXH0+J+h8cV77sTuT1hanb6tyVA8LyOnwlLLL559/zsKFC1m8eDEtWrRI2t6uXTs6d+5Mr169aNCgASEhIQD069ePv/76i61bt1KpUqWk8u3bt6dRo0Y8/vjj7N27Fw8PD1atWsWOHTuIioqiZs2aSWWffPJJ/SMrn8rpO5J44E0RKQ/cB7xojCmfqsw54BVgeOqDbRqJSFVHJJHkCgSW5fUuS5hffzStxZs4Y9gbcIygyEHEXxnHI1+s4YXpWzl05qojw1QqTZ999hmNGjVKkUQSDR48mOvXrzNp0iQArl27xsSJE3nyySdTJBGwjpIePHgwR48eZfbs2QBcuHABgCJFitx07ttVITVs2JCOHTsyZcoUSpYsiY+PD127duXGjRtERUVRq1YtfHx8aNiwIUeOHElx7JkzZ+jevTuFChXCy8uLhg0b3rSo3Y0bN3jppZfw9/cnICCA119/Pc1usOfOnaNXr14EBwfj4eFB3bp12bRp0y1jv5vlaCIRkRMiss32/DKwCwhJVSZaRDYDeaIFu1hEU4Z038CPFV+lZrwTl50NB4O3ExH5PvuPfEuzUav4YP4/nL8a6+hQlQLg6NGjHDp0iIcffjjN/REREVSqVIk1a9YAsHXrVq5evZpu+QYNGuDv78/q1asBqFq1Kk5OTjz11FOsXbuW+Pj4DMW3ceNGvvnmGz7//HOGDh3KzJkzefnll3n22Wd59dVXmT59OgcOHKBXr14pjnv44YdZunQpw4cPZ8aMGVgsFho1asT+/fuTyrz77rtMnDiR999/n++++47Dhw8zYsSIFOe5ceMGTZs2ZcWKFQwbNoxffvmFoKAgmjZtysmTJzP0Xu4WDpv7wxgTDtwLZCTNC7DMGCPAlyLyVTrn7gX0AihRokQmI7WDMVSo/gyTqnRn9ZqBjDz4CwddnSDkN8rG/M7SbY/w89YavNw4km51wvFwdc7+mFSWCn93oUOvf+iTVll2rsTpMcLCwtItExYWxp49ezJU/tixYwCULl2aYcOG8e677/LAAw/g4eFBgwYNePrpp3n00UdvG9+VK1eYO3cufn5+AKxatYqvv/6a1atXU79+fQD+++8/XnzxRa5du4aXlxdLlixh3bp1rFq1igYNGgDQuHFjwsPDGTZsGF9++SVnz55lwoQJfPDBB7z55psANG/enPLlU1aKTJ8+nR07dvDPP/9QunRpAJo2bUrZsmUZMWIEw4YNu+17uNs4pLHdGOMDzAJeE5FLGTi0nohUAx7CWi1WP61CIvKViNQQkRpBQXavX59pxsWVho0HM/vxtfQrWJ2ABAuHPeO4HP4jpQM/ZNzyZTQZsZq5fx7HYtG6YpW/JK+2euONNzh48CDjxo2jTZs2bNq0iccee4z33nvvtuepUaNGUhIBiIyMxM3NjXr16qXYBtaEAhAVFUXhwoWTkgiAt7c3rVu3TuoIsH37dq5fv067du2Syjg5OaV4DbBixQqqV69OyZIliY+PT7qjatCgwU1VZcoqx+9IjDGuWJPIdyIyOyPHishx27/Rxpg5QC1gTdZHmTkungXp1HYqrc7sZfKK1/g25jD7ClzCxWccRc6H8vbMbkxeW4K+rcpTq6Q2yOcFWXlH4GiJDeiHDx9Ot8zhw4eTyiUvX6VKlXTLJ29YTzyud+/e9O7dm6tXr9KxY0eGDRvGW2+9RaFChdK9tr+/f4rXbm5uFChQACcnpxTbAK5fvw7AiRMnKFy48E3nCg4O5ty5cwBJ1VKpy6V+febMGTZu3Iirq+tN54uIiEg37rtZjt6RGOufLJOAXSIyMoPHehtjCiQ+Bx4EdmR9lFnHJ7AMr3RexIKGY2mLDwnA3oDjFIr8GGLG8dhXa3hu2hYOnL7i6FDVXaR48eKEh4czb968NPcfPHiQHTt2JFUjVa9eHW9v73TL//7771y4cIG6deume01vb2969+5NQkJCijaLrFK0aNE0JyE8deoUAQHWP9YSG/9Tl0v9OiAggBo1arB58+abHnPmzMny2PODnK7auh/oCjQ2xvxpe7Q0xjxvjHkewBhTxBhzDHgD6GeMOWaM8cXaZXitMeYvIApYKCJLcjj+O1KkZCMGd1vPjCpvUDveiSvOhgOFdxAR8T4Hjn7Lg6NWM3DeP5zTBnmVQ1599VV+/fVXli1bdtO+vn374u7uztNPPw2Al5cXzzzzDN9++y07dqT82y0+Pp5+/frh5+dHhw4dAGuPp4SEhJvOu2/fPsB6l5DVateuTXR0dFIHAbD2Nlu4cGFSlVilSpXw8PBg7ty5SWUsFkuK1wBNmjRh//79lChRgho1aqR4pO61pqxytGpLRNYCt+z/JyIngdA0dl0C0r6vzguMody9T/F1pa78/vuHjDgwmwOuThCyknti1rLsj0eYtbUGLzaOpEddbZBXmRcbG8vPP/980/YGDRrw8ssvs2LFCtq3b89bb71Fw4YNuXz5MpMmTWLBggVMmzYtqUoLYNCgQaxbt44GDRrw3nvvUbNmTaKjoxkzZgzr1q1jxowZSe0av/32G++99x49e/akZs2aODk5sX79ej755BNat25NeHh4lr/X5s2bU7duXTp16sQnn3xCoUKFGD58ODExMbz99tsAFCpUiF69ejFgwABcXFyoUKECX3/9NVeupKwR6NatGxMmTKBhw4a89dZblCpVirNnzxIVFUWRIkV4/fXXszz+PE9E8vWjevXqkhvFXTsnM+b2kPqTykvFqRWl4tSK0v7zulKp3xdSd8iv8ssfxyQhweLoMO9KO3fudHQImTZgwADB2svxpsfKlStFRCQuLk5GjhwplSpVEg8PD/H395cWLVrI77//nuY5r1y5Iv3795cyZcqIq6urAOLh4ZF0vkRHjhyRN998U6pUqSJ+fn7i4+MjFStWlI8//liuXr16y7gbNGggjzzyyE3vpVChQim2rVy5UgDZvn170rbo6Gjp2rWr+Pv7i4eHh9SvX1+ioqJSHHf9+nV54YUXxNfXV/z9/eWll16SESNGiPVX4f9cuHBBXnnlFQkNDRVXV1cJCQmR9u3by9q1a5PKAPL555/f8v3kZrf6ngNbJAO/Z43k85GmNWrUkNzc0+LK2X1MXv4q38Yc5oaTE64ilDwfyt+ne1C+WKg2yDvArl27KFeunKPDyPWWLVtGy5Yt+fDDD+nTp4+jw1EZdKvvuTFmq2Rg0LfOteVgPoVKJzXIt8HHNkL+OEGRg5Br43nsS2uD/EEdIa9ymQcffJBhw4bRr18/ZsyY4ehwlAPpHUluIsLOP6Yw7I/P2OJinUk4OM5gTjXm4NVmPHlfOK82KU1BbzcHB5q/6R2JuhvoHUl+ZQzlqz3F5O5bGFO8bdKU9SdDf6Vcif4s+WMeDYat5Os1B7gRf3OvGKWUcgRNJLmQcXGlUePBaUxZ/z2RhQYxZtmvNBu5RqesV0rlCppIcrHEKesXtpnFU27FcLMI+3wv4Bb5GUGuw3n1xzU88sV6th4+7+hQlVJ3MU0keUCBoHt4vctS5j0wgofEi1hj2BtwhCKRHxF3+Sse+WINL36/TdeQV0o5hCaSPCQksjlDu2/kuwq9uTfecNHZcKjINspG9GfXgRk0GbGKjxft4mJMnpiBXymVT2giyWuMoXKNF/im22ZGFGtOaLyF/9wsnC6+iHKhA5izaTENh63km/WHiEvQNeSVUtkv3SlSjDEz7/Cc/ycih+7wWGUn4+rOg82G0/DK2/yw7FW+vLCdA17XcSo5mdKXgvh0YXe+2RDOew+Vo2m5wrddmU4ppe7Ure5IOgIRQJCdj8LAI4AOw85Bbj7BdO/wI4tafscTzkE4AXv8zuAdORx/xvDctLU8/vUmdhy/6OhQlQPMmjWLxo0b4+/vj7u7O2XKlOGNN95IWscjPxk4cCCBgYFJr/fu3cvAgQOTlv7Ni65cuYIxhqlTp2bouB49elCjRs6tRn67qq0XRKSRPQ+gKbeZkFFlH/8iVXn3yd+Yc98gGlncuO5k2Be4jxKRA7lwbgptxq7hrZ/+4uTF644OVeWQN998k8cee4xSpUoxbdo0li1bxuuvv86vv/7Kiy++6OjwstwzzzzD0qVLk17v3buXDz74IE8nkrziVrP/fgAcy8C5EmzH5L8/dfKQ8HseZkyZtmzeOJJhu6ayy8VA0fWUKxjFpl1tafR3HZ6tX4rn6pfC291hKy2rbDZ//nxGjhzJpEmTeOqpp5K2N2jQgF69eqU5fXxeFxoaSmhoWhOHq+yW7h2JiHwgInYnBdukkR+IdRp45UhOTtSs+xY/dt3EoKB6FE6wcNQjngthsylX5AO+XbOcRsNXMXPLURJ0yd98adSoUVSrVi1FEknk7OzMQw89lPT6zJkzdO/enUKFCuHl5UXDhg1vWlI2PDyct956i08++YSiRYvi5+fHm2++iYiwaNEiKlSoQIECBXj44Yc5f/5/45pWrVqFMYZly5bRunVrvL29KVGiBBMmTLgprpkzZ1KpUiXc3d0pXrw4ffv2TVrmFuDChQs888wzFCtWDA8PD0qUKMGzzz6btD951daqVato06YNACVLlsQYk2L6+iNHjtC5c2cCAgLw8vKiefPmSWvUp2fq1KkYY9i2bRsNGzbEy8uLqlWrsm3bNq5evUrPnj3x8/OjVKlS/PDDDzcdP3bsWEqXLo27uzuRkZGMGjXqpjKzZs2iTJkyeHp6Ur9+fXbv3p1mLBMnTqRChQq4u7sTFhbG0KFDbxl7tktvWmBgIfAE4JOR6YRz2yO3TiOfk66ePyTjZ7SRmpOtU9ZXnVJBHhn5oJR+73t5aPQaWbf/tKNDzFXy+jTysbGx4u7uLn369LGr/P333y/BwcEyefJkmTdvnjzwwAPi4+Mj+/btSyoTFhaWNJX64sWLZdCgQQLIa6+9JtWqVZNZs2bJ9OnTxd/fX5577rmk4xKnew8NDZX33ntPlixZIs8995wAMn/+/KRyS5cuFUC6desmixcvlk8//VTc3NxSnKtnz55StmxZ+fHHH2XVqlUybdo0efbZZ5P2J59u/uLFizJ8+HABZPbs2bJhwwbZtm2biIicPXtWihcvLlWrVpUZM2bI/Pnz5f7775fQ0FC5du1aup/TlClTBJCKFSvKhAkTZNGiRVK5cmUpWbKkdOrUSfr06SPLli2Tzp07i4uLixw9ejTp2K+++koAeeONN2Tp0qXy7rvvijFGhgwZklRm69at4uzsLB07dpRFixbJ0KFDpWTJkgLIlClTksoNHTpUXFxckq43ZMgQcXNzSzGlfffu3eV2v/uychr5WyWSHYAFuArMBB4G3DJy8tzw0ETyP6cO/S59p9aRSlMqSMWpFaXOpArS9tPHJeydX+TpqZvl3+jLjg4xV0jzB2yAr2MfGXDixAkBZMKECbctu3jxYgFk1apVSduuXLkigYGB0qtXr6RtYWFhEhERIfHx8UnbatasKc7OznLgwIGkbW+//bYULlw46XViIkn+C19EpGnTplK7du2k17Vr15aGDRumKPPpp5+Kk5NT0i/kChUqyJgxY9J9L6nXLZk/f74AcvDgwRTl+vXrJwEBAXL27NmkbefOnRNfX18ZO3ZsuudPTCRTp05N2rZw4UIBpGfPnknbLly4IC4uLjJ+/HgREUlISJBixYpJjx49UpwvcV2UmJgYERF59NFHpVy5cmKx/G8dosSEnZhILl68KN7e3jJw4MAU53r//fclODg46f8npxPJraq2KgKVgVFAVWA2EG2MmWyMaWaM0TEoeUzhsHoM6r6eGVXeoma8E5edDQeC/6Z0xPscOvpD0pK/53XJ33zBni7fUVFRFC5cmAYNGiRt8/b2pnXr1qxduzZF2YYNG+Ls/L+VOyMjIwkPD6dkyZIptp0+fZrY2JTfofbt26d43aFDB7Zu3UpCQgIJCQls27aNRx99NEWZTp06YbFY2LBhAwBVq1Zl2LBhjB8/nr179972vaVnxYoVNGvWDF9fX+Lj44mPj6dAgQJUr179piq9tDRp0iTpeWRkJACNGzdO2ubn50dQUBDHjx8H4NixY/z3339pvr9Lly6xfft2wPp/0bZt2xT/b4nLFyfasGEDV69e5dFHH02KPT4+nsaNG3Pq1CmOHctIs3bWuWVrq4jsAPphXTu9BtAZeBToAZw2xvwE/CAi67I7UJV1yt3bg0mVnmDlmgGMPDiXw25OUHwZFa6tZtHWzszedoxXmpSmW51w3Fz07wUABuad7tOFChXC3d2dI0eO3LbsiRMnKFy48E3bg4ODOXfuXIpt/v7+KV67ubmluU1EiI2Nxc3tf8sdpL5G4cKFiY+P58yZMwDExcXdtJZ74uvEOMaOHUv//v358MMPefHFF4mMjOSjjz6ic+fOt32fyZ05c4aNGzemuYZK8iSRnuTvOfE9pvU5XL9u7SF54sSJFO8nUer3d/LkyTQ/p9SxA1SoUCHN2I4ePUpYWNht30NWs7vbjohsAbYAbxlj7gc6YR1r8oIx5oiIlLzlCVSuYlxcadz4Yx64+gYzlr3CF+f/4oDXDUzJqZS5FMjIJT2YvvEw77Usx4Plg3VAYx7i6urK/fffz9KlSxk0aNAtyxYtWpTo6Oibtp86dYqAgKwbEpb6GtHR0bi4uCQ1jru6ut5U5tSpUwBJcfj7+zNmzBjGjBnD33//zdChQ3niiSeoXLky5cuXtzuWgIAA2rZty/vvv3/TvgIFCmTofdmjaNGiwM2fQer3V6RIkTQ/p+QSyy5YsOCmxARQtmzZrAk6g+70z83NwG9A4p1IiawJR+U0V+9Anmz/PYta/ciTzkE4A3v8zuITOZwAp895Yfp6uny9UQc05jGvvfYaW7Zs4Ztvvrlpn8ViYcmSJQDUrl2b6Oho1qxZk7T/2rVrLFy4kHr16mVZPHPmzLnpdfXq1XF2dsbZ2Znq1avz008/pSgzc+ZMnJycqFOnzk3nq1y5MsOGDcNisaTbsynxbiHxziBRkyZN+Oeff6hQoQI1atRI8ciOX8ShoaEUK1Yszffn6+tLpUqVAKhZsybz5s1LbKMGYPbs2SmOqVOnDp6envz33383xV6jRo1sSYT2sPuOxBjjDDyI9U6kHeCLtUG+L/BjtkSncoxfcCXeefI3Ou3+hRHrP2KVc6x1QKP/AC5E16PN2FY8Uq04bzcvS7Cvh6PDVbfRpk0b3njjDZ5++mnWrVtHu3bt8PHxYffu3UyYMIHw8HBatGhB8+bNqVu3Lp06deKTTz6hUKFCDB8+nJiYGN5+++0si2fx4sX07duXBg0aMHv2bJYvX87cuXOT9n/wwQc0b96cnj170rlzZ7Zv387777/Ps88+mzQ2pF69erRv356KFStijOHrr7/G29ubWrVqpXnNxKTw5Zdf0rlzZ7y8vKhUqRJvvPEG06dPp3Hjxrz88suEhIRw6tQpVq9eTb169ejSpUuWvW8AJycnBg4cyHPPPUehQoVo1qwZq1ev5osvvuDjjz/Gw8P68/TOO+9Qu3ZtHnvsMZ5++ml27NjBpEmTUpzL39+fgQMH8uqrr3L48GHq16+PxWJh7969rFy58qaEnWNu1xoPNAK+BE5j7cW1D/gIKJ+RVn1HPbTX1h1ISJCNaz+RRyZae3dVnFpRWk6oKnUHfij39Fsso5fvlWs34m9/njwqr3f/Te7nn3+Whg0biq+vr7i6ukrp0qXlzTfflBMnTiSViY6Olq5du4q/v794eHhI/fr1JSoqKsV5wsLC5M0330yxLa2eQYk9my5ftvYATOy1tWTJEmnRooV4enpKSEiIjBs37qZYf/zxR6lYsaK4urpKSEiI9OnTR+Li4pL2v/XWW1KxYkXx8fERPz8/adiwoaxZsyZpf+peWyIiw4cPlxIlSoizs7OEhYUlbT9+/Lj06NFDChcuLG5ubhIWFiZPPPGE7NixI93PMvV7ExE5ePDgTV2Z0/u8xowZIxEREeLq6iolS5aUkSNH3nSNmTNnSkREhLi7u8v9998vUVFRN3X/FRGZNm2aVKtWTTw8PMTf319q1aolI0aMSNqf07220l2z3RjzGdY2kCLASWAG1ob1zdmZ2LJanlqzPZdJuH6ZuSveZEz0Os46W2tBy1z2Ze/Jbnh7RfJ/LcrycNUQnJzyV/uJrtmedVatWkWjRo3Yvn07FStWdHQ4KpmcWrP9CWAB0AQIFZE38loSUZnj7FGADq2/YmG7eTzrXhw3i7C3wCXcIj4nxGMUb/+8gfbj17Hl0Lnbn0wplW/dKpEUEZHnRGSVpHfbou4K3oUieKXzIubXH21dodHJsLfQYUIiPiD+6hQ6TlinKzQqdRe7VSJpaYzxy8jJjDFtjTG+mYxJ5VLFIpoytPtGppV7nsrxcN7FcKRIFOVKvc/2f+fQZORqPl2ym8vXdYVGZdWwYUNERKu18rlbJZI5QBl7T2Tr1TUHiMxsUCoXM4aqtV5kWrcoPgluTHCChWPuCZwv8QsVi37ID+t+o9HwVfwQdUQnhFTqLnGr7r8GeMUYc8LOc+WvFld1S06unrRq8RmNLx7jm6UvMfnqPvb5XMElYjzh54vT/5cefLP+EP1bl6duZODtT6iUyrNulUiOABkdkXQEuHHn4ai8xtMvlOcf+4UOR9bx2cq3mWcusyfgGIX9PsL1dHUen9iBpuVC6NuqHCUDvR0drlIqG6SbSEQkPAfjUHlc4RL3M7jbOh7/YzJD//iMbS5wqcg2ygb8yf4jrXhwVD261wnn5Sal8fN0dXS4SqkspDPyqaxjDBWqPc3U7lsYXuxBQuIt/Odm4WyJ+VQM+YDZUb/ScNhKpm04RHyCxdHRKqWyiCYSleWMixvNm41g7mMreNW7DF4WC/u9ryGlviSiwAg+mr+BlmN+Z83e044OVSmVBTSRqGzjXqAoz3ScxcJmk+hg/EgA9gT8R1DkYDxiJ9Ft8np6Toni39NXHB2qUioTNJGobBcYeh8fdFvLjCpvUT3eiUvOhoNF/uCeiP4cPPYLzUet4cP5O7l4TcefZJWBAwdijLnp0bRpU7vPkbhG+ZUr1kR/6NAhjDEsWLAgu8K+YzVq1KBHjx4ZOib1+1N3zu7Zf7OCMaY48C0QDAjwlYh8lqrMPcAUoBrQV0SGJ9vXAvgMcAYmisgnORW7yrxy9/ZgSqXHWbGyHyOOLOS4G1BiPpWu/MacqK7M/uMYbzQrw+O1SuDirH/jZJafn1/SdPHJtymV1TKUSIwxBYGKQHFgsYicN8Z4ALEiYk/raTzwpohsM8YUALYaY5aLyM5kZc4Br2BdIz75tZ2BcUAz4Biw2RgzL9WxKpczLm40azaU+pdfZ9rSl/n68i72+1zFJeILIs+H8tH8nkzbcJh+rcvToEyQo8PN01xcXLjvvvscHYa6C9j1Z58xxtkYMxTrL/DVwDQgcUXEWcAAe84jIidEZJvt+WVgFxCSqky0bXLI1PUctYD9InJARGKxroHSzp7rqtzH2n7yMwuaTqK98bW1nxwnOPIjPOKm0H3yBp6aulnbT7KJMYaxY8em2DZw4MCkFQvvVGL1148//kjPnj3x9fUlNDSU6dOnAzB06FCKFStGUFAQ77zzDhZLyr8/f/vtN2rXro2HhwfBwcH07t37pqqnHTt2cP/99+Ph4UG5cuWYN29emrH8/vvvNGjQAC8vLwoVKsSzzz7L5cuXM/X+VNrsrT/4GHgWeAkoRcpR7HOBNhm9sDEmHLgX2GTnISHA0WSvj5EqCSU7dy9jzBZjzJbTp7VnUG4WVPw+Puy2jh8qv061eMNFZ8OhIlspV+p99h+dR/NRa/howU4uxmj7yZ2Ij49P8cip+VffeecdihYtyqxZs3jggQfo3r07b775JlFRUUyePJnXXnuNoUOHMnPmzKRj/vnnH1q0aEFgYCCzZs3igw8+4Pvvv6djx45JZWJiYmjevDlXrlzh+++/p1+/frz22ms3rU+/bt06mjZtSpEiRfj5558ZPXo0ixYtomfPnjny/u829lZtdQPeFZEptiqm5P7FmlzsZozxwXon85qIXMrIsfYQka+Ar8C6HklWn19lvQrVnmZq5a4s/e09Rh5dwjF3oMQvVLmygp83dWfOH8d5o1kZutQqgbMD1j+p9E2lHL9mctu7b8/wMWfPnsXVNeXgz+XLl2eowf1ONW7cmI8//hiwLuf7888/M2/ePHbv3o2zszMtWrRg7ty5zJkzh86dOwPw0UcfERYWxrx583B2tv6aCQgIoFOnTmzYsIE6deowZcoUoqOj2bRpU9LKieHh4TctC/zuu+9St25dZsyYkbQtJCSEJk2asGPHDp1EMovZe0fijzVhpMUNa+O3XYwxrliTyHciMvt25ZM5jrVtJlGobZvKJ4yLGy0eHMG8R5fzolcEnhYLe32u4BIxlpLeoxk4bxOtxvzO+v1nHB1qnuDn58fmzZtTPGrXrp0j127SpEnSc19fX4KCgmjQoEFSggCIjIzk+PH//QhHRUXRvn37FGUeeeQRXFxcWLt2bVKZ6tWrJyURgPvvv5/ChQsnvb527RobNmzgscceS3E3Vq9ePVxdXdm6dWu2vOe7mb13JDuwtkesSGPfQ8A2e05ijDHAJGCXiIy089qJNgOljTElsSaQzsDjGTyHygM8fIvx/KO/0P7wWj5b9TbzzRX2FjpCiN+HOJ+uw+MT29K8QlH6tixPiUJeORLTndwROJqLiws1ati9yF2W8vf3T/Hazc0tzW3Xr19Pen3ixAmCg4NTlHF2dqZQoUKcO2ddPO3kyZMpkkai5NvOnz9PQkICvXv3pnfv3jeVPXr06E3bVObYm0gGAbOMMZ7AT1i77lY1xrQHngPa2nme+4GuwHZjzJ+2bX2AEgAiMsEYUwTYAvgCFmPMa1jXh79kjHkJWIr1DmiyiPxj53VVHhQcVo+Pu62n05YJfPr3eLa7GM4V3UiFglvYcaADTUee5ukHSvJio0h83HO0J3ue5+7uTmxsbIpt58+fd1A0VkWLFiU6OjrFtoSEBM6ePUtAQAAARYoUYffu3Tcdm/w4f39/jDEMHDiQli1b3lS2WLFiWRy5suunT0TmGmMeB4YCT9k2T8R6Z9BVRJbaeZ613Ga6eRE5ibXaKq19i4BF9lxL5RPGUKXmC0yv2oMFK95i9IlVHPGIh/CZVLq0jGlre/Dz1mP8X/OyPFItNN+tH59dQkND2bVrV9Jri8XCr7/+6sCIrG0pc+bM4eOPP06q3po9e3ZStRRAzZo1+e677zh27FhS9da6detSJBJvb2/uu+8+9uzZQ//+/XP+jdyF7P4zTkRmAjONMWWAQKzjPfboMrwqJzi5etL2oXE0PX+IiUt7803MEfb6XsDTZxTFz5Xh/2Y9ybSNhxnQpjzVwwIcHW6u1759e8aNG8e9995LqVKlmDhxIpcuZXm/lwzp168f9957Lw8//DAvvPACx44d45133qF58+bUqVMHgJ49ezJo0CBatWrFwIEDiYmJ4f3337+p2/LQoUNp0qQJTk5OdOzYkQIFCnDkyBEWLlzI4MGDKVPG7jX7lB0yPHxYRPaKyHoR2a1JROU0r4LhvNJ5EXMfGEEziwfXnQz7AvdRMmIA1y/N5JEv1vPqj39w4mKMo0PN1QYMGMCjjz5Kv3796NGjB1WrVnV419gKFSqwePFioqOj6dChA/369aNLly78/PPPSWW8vLxYunQp3t7edO7cmQ8++IARI0YQFhaW4lz16tVjzZo1nD59mq5du9KmTRuGDh1K8eLFb2qHUZln7MkFxphb3R9agEvAXyKyOqsCyyo1atSQLVu2ODoMlR1EiNownE92fcM+F2uVVqkYd06c6MxlS0VeaBhBr/ql8HC1u1MhALt27aJcuXLZEbFSucatvufGmK0iYndPDXurtl4GPIDEJe6uAD6251dt53G3NaA/JCKn7A1AqTtmDLXqvs3Mar2YtexVPj+zmQOeN3AqOZUKF4MZ99tTzNh8lL6tyvFQxSJYOw0qpbKavVVbLYETQCfAU0R8AU+sXXBPAE2B+kAQMCIb4lQqXS4efnRqO5WFrWbQxTkQA+zxj6ZQxBACnSbT+7souny9kV0nHNsGoFR+ZW8iGQt8IiI/icgNABG5YWuA/xT43NYjaxDQPHtCVerW/IIr0ufJlfxU431qJzhz2dlwIPgv7onoz8lTC2g15nf6/bKdc1djb38ypZTd7E0klYGT6ew7ASRWtO0GCmQ2KKUyo3TFTnzdbTOjQ1sTEm/huJuFsyXmUTV0EPO2rqfR8FVMXXdQl/tVKovYm0j2Aq8aY9ySbzTGuAOvA3tsm4oA2j6iHM64uNKkyRDmPraCV7xK42mxsM/nCq6lPieywOd8uGAbLcf8zrp0plvRDokqP8vq77e9ieRVoB5wzBjznTFmtDHmO6yz8da17QfrbL4ZmT9LqWzlXqAozz46m/mNv6SleBHrZNhb6BBhkQNxipnJExM38ty0LRw9dy3pGFdXV2JitPuwyr9iYmJumtAzM+zq/gtgjCmG9e6jBtY7j5NY578aLSL/ZVlEWUy7/6okImyLGsMnOyayy9ZfsWSMGydPdOFCQgWeq1+KFxpGEH/9GqdOnSIkJARPT0/t7aXyDREhJiaG48ePExwcjK+vb5rlMtr91+5EkldpIlGpJdy4wuxlr/H56Q2cd3bCSYTSF4PZHv0UAT5FeK9lORqEe3P69Gni4nQdFJW/uLq6Urhw4XSTCGgiuYkmEpWei9E7+WL5y/wYd4oEYyiQIASeuZe/zz1KrZJBDGxTgfLF0v9hUyq/yrZEYozphHWVxDJYByemICI3z+2cC2giUbezb8cMPokaQpRzAgChN5y4cvJhjsfU4vHaJXizWVkKervd5ixK5R8ZTST2rtn+OPANsB/rzLzzgAW24y9hHWeiVJ5UumInJnbbzMiQlhSNt3DM3cKFsNncGzKEuVuiaDRiFdM2HibBkr/v3pW6U/b22nob+Ah40fZ6vIg8BZQEzgDX0jtQqbzAuLjSrOmnzO24jBc8SuJusbC3wEU8I0ZRyusr+s/dRuvP17LpwFlHh6pUrmNvIikNrBORBCAB66JTiMhlrCPbX8qe8JTKWZ5+IfTuNI+59UfTxOJOjJNhX9AeIiMGEHt5Hp2+2sgrP+jswkolZ28iuQS4254f538j2cG6UFWhrAxKKUcLiWjG6B6b+TKiCyXjLZx0FaKLL6FaiQ/5fecGmoxYzbiV+7kRn+DoUJVyOHsTyWas06SAtX2kvzHmWWNMd2AYsDE7glPKoYyhbr0+zHp8LW8VqIC3xcI+72s4RYynvP9YRi77k+aj1rByd/Ttz6VUPmbveiT3AWEiMsMY44+14b0V1kS0GXhcRP7NzkDvlPbaUlnl9NFNjP7tNeZxBYDAeHA71ZA9l5rTtFww77cuT1gh79ucRancL8fGkdjm2XIXkVw9N7cmEpWlRPhz8zg+3v5l0uj4iGvuHDvxJJcsZXmufil6N4zE0y1ji2kplZtkV/ffycaYksm32aaRv2SMCTPGTM5ooErlScZQtdZL/PDkBt4vWBO/BAv/et0gvtREKhf6jAmr/qTpyNUs2n5CJ35Udw1720h6YF20Ki2BQPcsiUapPMLZ3YfH2k5mQasfeNQpAAuwJ+A4RSM+wk9m0Pu7rTw5aRP7oy87OlSlsp29iQQgvT+vKgKnsyAWpfIc/+DK9O+6mh+qvEnleMN5F8PRYuupEj6AfUfX0WL07wxeuJPL13XOLpV/pdtGYox5lf9NDx+GdbbfG6mKeQDBwFQReTq7gswMbSNROcUSF8Pc5a8z+uTvnHN2wlmE0heK8lf00/h7B9KnZTnaVS2mswmrXC/LGtuNMc2AB7GOE3kD+B7raojJxWJdFXFm4hK8uY0mEpXTLp3ezbilvfkxPhqLMfgnCL7R9/HPhXbUKhnIh+0qcE8RnQxS5V7Z0mvLGDMAmCgixzMTnCNoIlGOsuev6QzeMpQ/XKw/YyWvu3Lqvy6ciatA1/vCeOPBMvh6ZN3iQkplFZ1GPhVNJMqRJO4G81e8wYgTqzhnW/ukzMWi/HXqKXy9Ann3oXI8Ui1Eq7tUrpKVVVszM3BdEZFOGSifYzSRqNzg0uk9jF/Wmx/iTiWr7qrDPxfaUTM8gA/aVtS1T1SukZWJZGVGLiwijTJSPqdoIlG5yZ6/pzN48/+qu0pdd+PEf104E1uObnXCtbpL5QpatZWKJhKV26Su7rL27irGn9FP4+dViD4t76H9vVrdpRwnW0a2p3ER/ZNJqTtkXN1p+9A45reZRRfnIATYXfAERSM/orDzz7wx8086fbmR3Sdz9exDSiWxO5EYY+oaYxYbYy4D140xl40xi4wxdbIxPqXyLd+ge+jz5G/8UPUt62BGZ8PRYuuoGj6QA/9totWYtQxaoIMZVe5nb/ffZsBCYA/wE3AK60DEjkBZoJWIrMjGOO+YVm2pvMASF8Mvy15j1Km1XHB2wkWEyPMl2Bb9FIV8/OnXujxtKhfV6i6VI7JrHEkUcAR4VFIdYIyZBRQXkVoZDTYnaCJRecmFU9v5bNlLzEo4ixhDUDy4nmzMnsvNqBsRyIftKhJZ2MfRYap8LrvaSCoBX6dOIjZf2fYrpTLJP7gSA7quZnrFlykXD6dd4L/Q36ge9hE7j2zjoc/WMHTJbmJidWVGlXvYm0guABHp7Iuw7b8tY0xxY8xKY8xOY8w/tvm8Upcxxpgxxpj9xpi/jTHVku1LMMb8aXvMszN2pfKcyjWe44cn1tPH/158LBb2el3DpdR4Kgd8zRerd9F05GqW7zzl6DCVAuxPJD8BQ4wxTxpjPACMMR7GmCeBjwF7By/GA2+KSHngPuBFY0z5VGUeAkrbHr2AL5LtixGRqrZHWzuvqVSe5OxRgC7tvmV+sym0xpsbToa9gfspHTEA97jlPPvtFp6eupmj5645OlR1l7M3kbwDLMC6xO5VY8xF4Krt9QLb/tsSkRMiss32/DKwCwhJVawd8K1YbQT8jTFF7YxTqXwnMLQWQ7ptYFKZ7pSMF064CqdLLKBW8SFs3L+DZqNWM27lfmLjLY4OVd2lMjQg0RhzD1ATKIp1JuDNIrL7ji5sTDiwBqiYfLleY8wC4BMRWWt7/SvwjohsMcbEA39ivbP5RER+SefcvbDezVCiRInqhw8fvpMQlcp14q6e4ZvFzzHh8h5uOBm8LULw6Sr8da4TpYJ8GfRwRepGBDo6TJXHZVevLW8RuZqpyFKezwdYDQwWkdmp9t0qkYSIyHFjTCngN6CJiPx7q2tpry2VHx37dxlD1rzHGqdYAMJuuHD2xKOciKlC+3tD6NOyHEEF3B0cpcqrsqvXVrQxZoYxpr0xJlPfTtuo+FnAd6mTiM1xoHiy16G2bSROYy8iB4BVwL2ZiUWpvCo04kHGdtvE6NDWBCdYOOwez9Ww76lVdDQL/9pN4xGrmLbxMAmW/D0Fksod7E0k/wcUAX7GmlSmGWNaGWNcMnIxYx1NNQnYJSIj0yk2D+hm6711H3BRRE4YYwomJjFjTCBwP7AzI9dXKj8xzi40aTKEeR0W0d21KE7ALv+TFI0cRKj7XN7/ZTsdvljPjuMXHR2qyucy2kZSDHjM9rgPOA/8AvwoIsvtOL4e8DuwHUhsGewDlAAQkQm2ZDMWaAFcA3raqrXqAl/ajnMCRovIpNtdU6u21N1iz/bv+SjqE/6yzSxcOsaTg8d7cDE+jB51S/LGg2Xwcc/Q337qLpVjs/8aY0pgTSivA8Eikiu/oZpI1N3EEhfDrKUvM+r0Bi47OeFuEcLPlWHr6a4E+/oysG15mlcoolOtqFvKqdl/I4GuQDesPbjy3BK8SuVHTq6ePNp6IvOaf0trfLjhZNgTuI97IgfiFr+G56dv4+lvtujYE5WlMjL7b5gx5v+MMVuxTt74EtYG7wdEJCyb4lNK3YHAYtUZ0m09X0c+SVi8hWOuFs6HzaZ26HDW7d1Ls1Gr+WLVv8Ql6NgTlXkZmbSxOnAOmA38CKwWkVz/LdSqLXW3u3HlJBMX9mJSzAHikpb5vZ9/LrThniK+DG5fiephBR0dpspFsmscyRRgBrBcRPLUbHGaSJSyOrh7Lh+tH8BmZ+uPcJkYDw4e7875+JI8XqsE/9fiHvw8dc06pUvt3kQTiVL/I/GxzF32GiNOruaC8/8a47ec7kZQAR8GtClPq0q67sndLkca25VSeZNxcePhluOZ99D3tKVAUmN8ucgBeCas46Xv/6CnTgSpMkgTiVJ3oYJFqzC42zq+jnySErbG+AslfqJ2yCjW7ztAs1Gr+WrNv8RrY7yyg1ZtKXWXu375BF8tfIYp1w8TbwwBCeBxsiF7LjWnfFE/hnSoRJXi/o4OU+UgrdpSSmWIR4GivNJ5ITNrvk+VeMM5Z/gvZBU1wwZz9PQe2o9fx4fzd3L1RryjQ1W5lCYSpRQApSt04tuuG+lbsAbeFgu7va7gFTGaygV/YPK6/TQbuZpfd+mqjOpm6VZtGWOGZuA8IiJ2LW6V07RqS6mMO3VkHR//+iq/Od0AIOKGK8ePdeV0bBlaVS7KgDblKVzAw8FRquySZd1/jTEHM3BdEZFSGSifYzSRKHWHLBZWrOzDx4fnc9rZCRcRSp+PYHN0Dwq4e9G3VTkeq1FcuwrnQzqOJBVNJEplzqXTexi9pBc/Wc4BEBrnxNX/OnDkWg3uKxXAkA6VKRno7eAoVVbSxnalVJbyDSpL/ydXMaXs04Qn6ypcJ2Q0Ww8dpfnoNYxftV/n7bqLZXQ9knpAGeCmylERGZ+FcWUZvSNRKuvcuHKSLxc8ndRVOCgenE40Z/+VRpQv6sunj1SmUqifo8NUmZRdc20FA78C5QEBEitFkw4WEeeMhZozNJEolfX2/D2d/ps/ZadtFaIKVwvy5/FnibUE8OwDpXitaRk83XLlrwRlh+yq2hoBXMS6lroBagPhwPvAPqx3KUqpu0TZyk/y3RPreKtABTwsFv7xPk9gxKfc47uAL9f8S4vP1rD+3zOODlPlEHsTSQOsyeSE7bURkSMi8jEwHciV1VpKqezj4uFL9w4/MrvecGolOHPR2XC02FpqhQ/m3MUDPP71Jt6b/TeXrsc5OlSVzexNJP7Aadv6I5eAwsn2rQfqZnFcSqk8onjph5jYdRMDCt2Hj8XCLs8r+ESMokrAz/wQdYRmI1ezYqcOZMzP7E0kB7EuqQvwD/BEsn1tsC54pZS6SxlXdzq2/ppfmnxFQ4sbV5wMB4K3UKPUh1yP2c8z327h5R/+4OyVG44OVWUDexPJQuBB2/NBwCPGmGO2QYuvAJ9nR3BKqbwluMT9jOm2iU+LNKFggoU97jG4lxpL9cAfmP/XMZqNWsO8v/4jv49fu9vc0YBEY0xN4GHAE+uqiYuzOK4so722lHKMcyf+YMjS51lirGublI5149CRnpyLK0mz8sEMfrgihX11mpXcSEe2p6KJRCkHslj4dWUfPjo8n7POTriLUPJcJTZHd8HXw533W5enY/VQnWYll8nWRGKMcQdCSHtA4k67T5SDNJEo5XgXo//hk8XPsIArAETGunHkaDfOxkbSoEwQQzpUopi/p4OjVImya0BiMeAr4KG0dmOdtDFXjj7SRKJULiHC6lUD+PDgLKJtdyelzlUgKvoJfNzd6duqHJ1r6iSQuUF2JZJFQDVgCLATiE1dRkRWZyDOHKOJRKnc5eLp3Qxb/DRz5RKQ8u7kgdKBDOlQidCCXg6O8u6WXYnkIvCsiMzMTHCOoIlEqVxIhDVrPuSDf2cm3Z1EnK/IplOP691JLpBdU6REAzF3FpJSSqViDPUbDGBOm9m0M77cMIadAf9QLeID3Cz7eG/2drpNjuL4Bf21kxfYm0j6A+8YY3yzMxil1N3FN6gsg7quZVxYB4ISLOxzi8Wp1ARqFf6B3/dF02LUGmZuPqrjTnI5e6u2fsI6UWMBYDNwIVUREZFOWR5dFtCqLaXyhovRO/lk8dNJPbvuifVg35GnuBBXgkZlg/jkkcoE67iTHJFdVVuBwL/An4ArEJTqUTjdI5VSyg5+hcszpNt6Roe2JiDBwm6367iXGkeNwNms3BNNs5GrmfPHMb07yYV0QKJSKtc5d+JPBi3txXJjbSOpeMObHUd6cTk+mOYVghncvhKBPu4OjjL/0qV2lVJ5XkDRqozouoFPizTFN8HCDver+EaMpErAIpb+c4oHR61hyY4Ttz+RyhHp3pEYY3oDP4nIadvzW9KldpVS2SH66EYGLu/N787WdU2qXC/I5sPPccPiT/t7QxjYtgJ+nq4OjjJ/ybJxJMYYC3CfiETZnt+KjmxXSmUbiY9j1pLeDD29nhgnJwolgOeph9h1sQFFfD0Y9mhlHigd5Ogw840sq9oSEScRiUr2/FYPu5KIMaa4MWalMWanMeYfY8yraZQxxpgxxpj9xpi/jTHVku3rbozZZ3t0t/dNKqXyNuPiSsfWXzPrgZHcm+DEWWc4VmwxDcI+4/Tl83SdFMWAuTuIiU1wdKh3pRxtbDfGFAWKisg2Y0wBYCvwcPIJH40xLYGXgZZYuxx/JiK1jTEBwBagBiC2Y6uLyPlbXVPvSJTKXxJuXGHqgqcYe3kn8cYQkmC4dqwTR65VpVSgN6M6VaVKcX9Hh5mnZWtjuzGmrDGmsTGmZeqHPceLyAkR2WZ7fhnYhXU24eTaAd+K1UbA35aAmmNd++ScLXksB1pkJH6lVN7n7O7D04/M5Mdq7xEZLxx3Fi6V+IEGoZM5cOYiHb5Yz+gVe4lLuF2NvMoqdiUSY0wlY8wOrBM2rgAWpHrMz+iFjTHhwL3AplS7QoCjyV4fs21Lb7tS6i5UtvIT/NjpV7q7FsUCbCuwl2qlP8Tf+QCjV+yj44QNHDxz1dFh3hXsvSOZDMQBrYGyQMlUj1IZuagxxgeYBbwmYpsCNAsZY3oZY7YYY7acPn06q0+vlMol3H2CeevxZUws24MiCRb2ucTiXGoC9wXP4a+j52n52e98v+mIDmLMZvYmknLAuyKyWET2icjh1A97L2iMccWaRL4TkdlpFDkOFE/2OtS2Lb3tNxGRr0SkhojUCArSnhxK5Xe16rzFz21m8RDexDgZ/gnYRL2ITxDLafrM2c6z327hzJUbjg4z37I3kUQBJTJ7MWOdE3oSsEtERqZTbB7QzdZ76z7gooicAJYCDxpjChpjCgIP2rYppRR+Qffw6ZPrGBLcCB+Lhb/cLlI0YigV/NexYlc0LUavYeXuaEeHmS/ZO2ljJPADMBpYyc2TNiIi1+w4Tz3gd2A7kNgS1gdbkhKRCbZkMxZrQ/o1oKeIbLEd/5StPMBgEZlyu2tqry2l7j7HD/xKn5VvsM3F+mumZkwJVh5+BhE3utUJo0/Lcni45sqhb7lCdi1s5Q98DXRIr4wOSFRK5SYJN64waV43xl/dS4IxlIp34dTRHpy8Hknpwj6M6XIv5Yrqyhhpya5EsgCoA0wE9pP2UrvfZCDOHKOJRKm7299bv+KdPz/jmIsTHhah7KX7WHviYdycnXnnoXt46v5wXYkxlexKJFexLrX7fWaCcwRNJEqpq+cO8vH8J5jHZQCqxRVk44HnuWHxo2HZIIY/WkVnE04muwYkHsLaXqGUUnmOd0BJBnddy6dFmuBtsbDN9TzFI4dQzm8rq/acpsXo31m9V4cK3Cl7E8nbQF/bIEKllMp7nJxo2Xw0Pz0wisrxhlPO8F/RmTQN+4YzV67RfXIUHy/aRWy8jojPKHurtjZj7VlVEOvdyYXUZUSkVhbHliW0aksplVpczAXGze3C5OtHEWOoGO/JP4ef51JsMJVD/RjT+V7CA70dHabDZFcbyW272YpIT3svmpM0kSil0rN+7Sf02TuNs85O+FuEwufasvX0/fi4uzC4fUXaVb07Z2HK8kRiG4leCzgkImmOJM/NNJEopW7lzH9b6bvkGdY7xwNQN7YUS/99CnChU43iDGxbAU+3XDm6IdtkR2N7AvAb1jm2lFIqXwksVp0vuq7nVe+yOIuw3u0ANcp8SJDHcWZsOUrbsWvZe+qyo8PM1W6bSETEAuwDimR/OEoplfOcXD15puPPTCn/PMEJFvY4x+IWNoY6RX5nX/QV2o5dy8zNR3Xyx3TY22urL9DfGFMpO4NRSilHurfWS/zcegb1LW5ccjLsKLiQhyK/5HpcLP8362/enPkXV2/EOzrMXCcjvbbCgQCsM+6ewrpKYRLttaWUyi8scdf5dn53Rl/6hwRjKJfgzsGjL3A6pggRQd588WR1ygQXcHSY2UZ7baWiiUQpdaf+3Dyet7aP45StV1fopYfZcKIOHq5OfNSuIo/WKH77k+RB2ZJI8jJNJEqpzDh/8i/eW9STdc5xGBEeiK/Awv1PAM48ViOUD9tVzHczCWf3mu3GGFPcGFPXGHP3jtZRSt01Chapwviu63jJKxKANa47eaDsEPzczjNzyzHaj1/Pobt8SV+7E4kxpjfW9pHDWNcUKWvbPtsY81q2RKeUUrmAk6snzz06hy8ju1IwwcKfTlcILDmUewv/w64Tl2jz+VqW7Djp6DAdxq5EYox5GxiJdU2SxkDyOZdXAZ2yPDKllMpl6tR7h5lNvqJKgiHaSTgc8C2tI+Zx+UYcz0/fypDFu4hPuPvm6rL3juRFoL+IDMB6N5LcHqBMlkallFK5VJGw+5nSeRWPOwcRZwyr3dbzUNnPcHO+wZerD9B1UtRdtz68vYmkCLA1nX0WwCNrwlFKqdzP1SuA9574lSHBjfCwWFjrdJKKkYMI9z3JhgNnaT1mLX8cOe/oMHOMvYlkP9AgnX31gZ1ZE45SSuURxtC6xRim1+hHaLyFfU5xJBQdRaPiWzl56TqdvtzId5sO3xWj4dNNJMaY+sYYH9vL0cC7xph+QGnbtsLGmKeBN4BR2RqlUkrlUmUrdeHHtrOoZ3HjgpNhm/dMHin7M7EJCfSds4N3Zv3N9bgER4eZrdIdR2KMSQDqiEiU7fXbQH/Ai/81tl8DPhCRYTkQ6x3RcSRKqZxgib3G+DmP8eX1wwA8QGFW7X+Ra3HuVCnuz4Qnq1HUz9PBUdonK8eRJO+ZhS1ZFAMeAp4EWgIhuTmJKKVUTnFy8+KlTgsYXbwNXhYLvxPNPaUGUTrgNH8dvUCbz9ey+dA5R4eZLTI0IFFELovIMhH5XkSWiMjF7ApMKaXyoiaNP+a7+z6khK3d5EbQCJqF7+DMlVge/3oj32864ugQs9ytqrYswIfAAXtOJCLfZmFcWUartpRSjnDxzB7emd+FdU5xuIjwoFMDZuxsCcATtUswoE0F3Fwy9Ld8jsmyubZsicReIiK5crIZTSRKKUdJuHGFUbM68E3cCQCaOYWzYE8vYuOdqFUygAlPVifA283BUd4sq+faagQUsOPhe0fRKqVUPubs7sNbXZYyuHB93CzCcssh6pb+mBDfa0QdPEfbsWvZffKSo8PMtNslkhgRuWrPI0eiVUqpvMYY2j40jkmVXiIgwcJWruBXdBD3hZzg2PkYHhm/nuU7Tzk6ykzJnRV0SimVz1St8Tw/Nh5P2Xg46mThiM9o2t+zg6uxCfSatoUvV/+bZwcvaiJRSqkcUjS8Ad92XERj8eCyk2EV0+heZTkiMGTxbt6Z9Tex8Xlv0sd0E4mIOCUORlRKKZU1vPyKM+qJNfR0K0a8McyO/ZUulafg4SrM3HKMrpM2ceFarKPDzBC9I1FKqRzm5OrJG52X8GFgHVxEWBC3h8ZlRlCkgIVNB8/lucWyNJEopZQjGEP7Vl8xoUx3Clgs/G45Q1jIB1Qqco2DZ67y8Ph1RB3MGyPhNZEopZQD1a77NtPuG0RIgoWd5gaxfh/xYMRpLlyL48mJm5j/13+ODvG2NJEopZSDRZRrz/SHplEx3vCfk/CPy3CeqPwvsQkWXv7hD75Ylbt7dGkiUUqpXCCwaDUmdVxEQ4s7l5wMS2K/4rkamzEGPl2ym36/7Mi1y/jmaCIxxkw2xkQbY3aks7+gMWaOMeZvY0yUMaZisn2HjDHbjTF/GmN0zhOlVL7j5RfK6MdX0cm5ELHG8MOVn3m+xhLcXZz4btMRnp++jZjY3Le2SU7fkUwFWtxifx/gTxGpDHQDPku1v5GIVM3IHDBKKZWXOLv70LfLCl71LoMYw/Qrq3ii8jR8PV1YsesUj0/cyLmruat7cI4mEhFZA9yqG0J54Ddb2d1AuDEmOCdiU0qp3MI4u/DMIz8zKOgBnEX4KWY7zUuPppifK38cuUDHL9Zz9Nw1R4eZJLe1kfwFdAAwxtQCwoBQ2z4BlhljthpjejkoPqWUyhnG0K7leMZGdMHTYmFJ3DGqhA7inmAXDpy5SscJ63PNhI+5LZF8AvgbY/4EXgb+ABIrBOuJSDWsKzS+aIypn95JjDG9jDFbjDFbTp8+nd0xK6VUtqn3QF8mVnkdvwQLay3nCQroT51ww6lLN3hswoZcsepirkokInJJRHqKSFWsbSRB2BbWEpHjtn+jgTlArVuc5ysRqSEiNYKCgrI/cKWUykaVqz3Dt3UHE5xg4U+uccOjHw+Vs3DpejxPTtzEb7sdO3twrkokxhh/Y0ziKi/PAGtE5JIxxtsYU8BWxht4EEiz55dSSuVHpe55mOlNJlAyXthn4jhi6UfnqrHciLfQ69utzP3zuMNiy+nuvz8AG4CyxphjxpinjTHPG2OetxUpB+wwxuzBWoX1qm17MLDWGPMXEAUsFJElORm7Uko5WpGwB5ja6jvKxcMRJwtbYgbwTO2rxFuE12b8ybcbDjkkrnSX2s0vdKldpVR+c/ncv7z0Swe2OVsIsMDDge/x2To/AN5uXpYXG0Vm6vxZvdSuUkqpXKZAQAQTOi7mfosr55zgpzMf806DMxgDw5buYdjS3Tk6pYomEqWUyoM8fYsx5rFlNLEtkjX15DDea/gfzk6GcSv/5YP5O7FYciaZaCJRSqk8ys07kGGdf+UhfLjmZPj6xGf0aXgYN2cnpq4/xLKdJ3MkDk0kSimVh7l6+DKk8wraG3+uG8MX/42jb+ODPFe/FM0rFMmRGDSRKKVUHufs7s3ALst5xKkgN4xhzNHxPBCyEWNMjlxfE4lSSuUDTq4e9O+yPGnm4Ff+GEHU39Nz5to5chWllFLZzsnFnb6dl/G4cxClEgxlitybI9d1yZGrKKWUyhHGxY13Oy/l2qWjeAeUypFr6h2JUkrlM8bFNceSCGgiUUoplUmaSJRSSmWKJhKllFKZoolEKaVUpmgiUUoplSmaSJRSSmWKJhKllFKZku8XtjLGnAYO3+HhgcCZLAwnJ+S1mPNavKAx55S8FnNeixfSjzlMRILsPUm+TySZYYzZkpFVwnKDvBZzXosXNOacktdizmvxQtbFrFVbSimlMkUTiVJKqUzRRHJrXzk6gDuQ12LOa/GCxpxT8lrMeS1eyKKYtY1EKaVUpugdiVJKqUzRRKKUUipTNJEAxpgWxpg9xpj9xph309jvboyZYdu/yRgT7oAwE2MpboxZaYzZaYz5xxjzahplGhpjLhpj/rQ9+jsi1lQxHTLGbLfFsyWN/cYYM8b2Gf9tjKnmiDiTxVM22ef3pzHmkjHmtVRlHP45G2MmG2OijTE7km0LMMYsN8bss/1bMJ1ju9vK7DPGdHdwzMOMMbtt//dzjDH+6Rx7y+9RDsY70BhzPNn/fct0jr3l75YcjnlGsngPGWP+TOfYjH/GInJXPwBn4F+gFOAG/AWUT1WmNzDB9rwzMMOB8RYFqtmeFwD2phFvQ2CBoz/bVDEdAgJvsb8lsBgwwH3AJkfHnOo7chLrIK1c9TkD9YFqwI5k24YC79qevwt8msZxAcAB278Fbc8LOjDmBwEX2/NP04rZnu9RDsY7EHjLju/NLX+35GTMqfaPAPpn1WesdyRQC9gvIgdEJBb4EWiXqkw74Bvb85+BJsYYk4MxJhGREyKyzfb8MrALCHFELFmsHfCtWG0E/I0xRR0dlE0T4F8RudMZErKNiKwBzqXanPz7+g3wcBqHNgeWi8g5ETkPLAdaZFecyaUVs4gsE5F428uNQGhOxGKPdD5je9jzuyVb3Cpm2++ux4Afsup6mkisv4SPJnt9jJt/MSeVsX3ZLwKFciS6W7BVsd0LbEpjdx1jzF/GmMXGmAo5G1maBFhmjNlqjOmVxn57/h8cpTPp/9Dlts8ZIFhETtienwSC0yiTmz/vp7Denabldt+jnPSSrSpucjrVh7n1M34AOCUi+9LZn+HPWBNJHmWM8QFmAa+JyKVUu7dhrYapAnwO/JLD4aWlnohUAx4CXjTG1Hd0QPYwxrgBbYGf0tidGz/nFMRaV5Fn+vgbY/oC8cB36RTJLd+jL4AIoCpwAmtVUV7RhVvfjWT4M9ZEAseB4sleh9q2pVnGGOMC+AFncyS6NBhjXLEmke9EZHbq/SJySUSu2J4vAlyNMYE5HGbqmI7b/o0G5mC97U/Onv8HR3gI2CYip1LvyI2fs82pxGpB27/RaZTJdZ+3MaYH0Bp4wpYAb2LH9yhHiMgpEUkQEQvwdTpx5MbP2AXoAMxIr8ydfMaaSGAzUNoYU9L212dnYF6qMvOAxF4tHYHf0vuiZzdb/eYkYJeIjEynTJHENhxjTC2s/8+OTHzexpgCic+xNqzuSFVsHtDN1nvrPuBisuoZR0r3r7fc9jknk/z72h2Ym0aZpcCDxpiCtmqZB23bHMIY0wL4P6CtiFxLp4w936Mckar9rn06cdjzuyWnNQV2i8ixtHbe8WecEz0IcvsDa4+hvVh7WPS1bfsQ65cawANr1cZ+IAoo5cBY62Gtqvgb+NP2aAk8DzxvK/MS8A/WXiIbgboO/nxL2WL5yxZX4mecPGYDjLP9H2wHauSC74U31sTgl2xbrvqcsSa5E0Ac1jr4p7G23/0K7ANWAAG2sjWAicmOfcr2nd4P9HRwzPuxtickfqcTe0kWAxbd6nvkoHin2b6nf2NNDkVTx2t7fdPvFkfFbNs+NfH7m6xspj9jnSJFKaVUpmjVllJKqUzRRKKUUipTNJEopZTKFE0kSimlMkUTiVJKqUzRRKLuWsYYsePR0DYb6nAHxhmeKib/VNtb3+b4HsmOzZEZc9XdxcXRASjlQHWSPfcEfgMGAQuTbd+JdcBZbhho+BawDricweMWYn2v75P2vFtKZYomEnXXEussw0DS3GVgneV3Y6qif+RcVLe0J43YbktETgOnjTGn0USisoFWbSl1G6mrtowxU40xW4wxrYx1gbFrxpiFxrqgVKSxLjx21VamcqpzORlj3rUtdHTDGLPXZH5RKS9jzJfGusjWMWPMB8YY/dlWOUa/bErdmRJYp9HpB/QC6gJfYV1z4kesc7K5AD+mWrvmc9sxXwGtsE6KN/l27Ry3MRS4YrvmdKC/7blSOUKrtpS6MwFAHRH5F8B25/E20F1EvrVtM1jbJ+4BdhljIoEXsM5rlbjw1ArbBIADgAV3GMsaEXnT9ny5bQLEDsDMOzyfUhmidyRK3ZlDiUnEZr/t39/S2Ja4mFETwALMMca4JD6wTrBY1RjjfIexLEv1eie5aIVBlf/pHYlSd+ZCqtexaWxP3OZh+zcQ6zreF9M5Z1GsM7VmRSweaZRTKltoIlEq55zDuvrf/VjvTFJLawEqpXI9TSRK5ZzfsN6R+InIckcHo1RW0USiVA4RkT3GmAlYe3INBbZgrYKqAJQRkWccGqBSd0gTiVI560WsK+Y9i7X78CWsjeOTHBmUUpmhKyQqlcsZY8KBg0A7rEuixmfweIO1Sm0SUEFEamR5kOqupt1/lco75gJxiZM2ZkB3rGt3d8vyiJRC70iUyvWMMW5A8qlW/hCRhAwcXwgoaXt5VUR2ZWV8SmkiUUoplSlataWUUipTNJEopZTKFE0kSimlMkUTiVJKqUzRRKKUUipT/h8v/SyHNYFc6QAAAABJRU5ErkJggg==\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++ij33XcfWVlZ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", "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+raqq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", + "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", {