diff --git a/.github/build_dependencies.sh b/.github/build_dependencies.sh new file mode 100644 index 00000000000..3fc66717909 --- /dev/null +++ b/.github/build_dependencies.sh @@ -0,0 +1,88 @@ +#!/bin/bash +pushd ${RUNNER_TEMP} + +curl -fsSLO "https://github.com/HDFGroup/hdf5/releases/download/hdf5_${HDF5_VERSION}/hdf5-${HDF5_VERSION}.tar.gz" +tar -xzf hdf5-${HDF5_VERSION}.tar.gz +mkdir -p hdf5-${HDF5_VERSION}/build +pushd hdf5-${HDF5_VERSION}/build + +cmake -G "$GENERATOR" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="${HDF5_DIR}" \ + -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=ON \ + -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=ON \ + -DHDF5_BUILD_EXAMPLES:BOOL=OFF \ + -DHDF5_BUILD_TOOLS:BOOL=OFF \ + -DBUILD_TESTING:BOOL=OFF \ + -DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING=TGZ \ + -DZLIB_PACKAGE_NAME:STRING=zlib \ + -DZLIB_TGZ_NAME:STRING=zlib-${ZLIB_VERSION}.tar.gz \ + -DZLIB_TGZ_ORIGPATH:STRING=https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION} \ + -DZLIB_USE_LOCALCONTENT:BOOL=OFF \ + -DLIBAEC_PACKAGE_NAME:STRING=libaec \ + -DLIBAEC_TGZ_NAME:STRING=libaec-${LIBAEC_VERSION}.tar.gz \ + -DLIBAEC_TGZ_ORIGPATH:STRING=https://github.com/MathisRosenhauer/libaec/releases/download/v${LIBAEC_VERSION} \ + -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \ + -DHDF_PACKAGE_NAMESPACE:STRING=ct_ \ + .. + +cmake --build . --target install --config Release +popd + +curl -fsSLO https://github.com/BlueBrain/HighFive/archive/refs/tags/v${HIGHFIVE_VERSION}.tar.gz +tar -xzf v${HIGHFIVE_VERSION}.tar.gz +mkdir -p HighFive-${HIGHFIVE_VERSION}/build +pushd HighFive-${HIGHFIVE_VERSION}/build + +cmake -G "$GENERATOR" \ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ + -DCMAKE_BUILD_TYPE=Release \ + -DHDF5_ROOT="${HDF5_DIR}" \ + -DCMAKE_INSTALL_PREFIX="${HIGHFIVE_DIR}" \ + -DHIGHFIVE_USE_BOOST:BOOL=OFF \ + -DHIGHFIVE_UNIT_TESTS:BOOL=OFF \ + -DHIGHFIVE_EXAMPLES:BOOL=OFF \ + -DHIGHFIVE_BUILD_DOCS:BOOL=OFF \ + .. + +cmake --build . --target install --config Release +popd + +curl -fsSLO https://github.com/LLNL/sundials/releases/download/v${SUNDIALS_VERSION}/sundials-${SUNDIALS_VERSION}.tar.gz +tar -xzf sundials-${SUNDIALS_VERSION}.tar.gz +mkdir -p sundials-${SUNDIALS_VERSION}/build +pushd sundials-${SUNDIALS_VERSION}/build + +cmake -G "$GENERATOR" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="${SUNDIALS_DIR}" \ + -DEXAMPLES_INSTALL=OFF \ + -DEXAMPLES_ENABLE_C=OFF \ + -DBUILD_ARKODE=OFF \ + -DBUILD_CVODE=OFF \ + -DBUILD_IDA=OFF \ + -DBUILD_KINSOL=OFF \ + -DBUILD_CPODES=OFF \ + -DBUILD_FORTRAN_MODULE_INTERFACE=OFF \ + "${SUNDIALS_BUILD_OPTIONS[@]}" \ + .. + +cmake --build . --target install --config Release +popd + +curl -fsSLO https://github.com/jbeder/yaml-cpp/archive/refs/tags/${YAML_CPP_VERSION}.tar.gz +tar -xzf ${YAML_CPP_VERSION}.tar.gz +mkdir -p yaml-cpp-${YAML_CPP_VERSION}/build +pushd yaml-cpp-${YAML_CPP_VERSION}/build +cmake -G "$GENERATOR" \ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ + -DCMAKE_INSTALL_PREFIX="${YAML_CPP_DIR}" \ + -DCMAKE_BUILD_TYPE:STRING=Release \ + -DCMAKE_INSTALL_LIBDIR:STRING=lib \ + -DYAML_CPP_FORMAT_SOURCE:BOOL=OFF \ + -DBUILD_TESTING:BOOL=OFF \ + -DBUILD_SHARED_LIBS:BOOL=ON \ + .. + +cmake --build . --target install --config Release +popd \ No newline at end of file diff --git a/.github/cibw_before_all_macos.sh b/.github/cibw_before_all_macos.sh new file mode 100644 index 00000000000..921722e8109 --- /dev/null +++ b/.github/cibw_before_all_macos.sh @@ -0,0 +1,97 @@ +#!/bin/bash +# Adapted from h5py. Licensed under the BSD 3-Clause license. +# Copyright (c) 2008 Andrew Collette and contributors +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: + +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. + +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. + +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set -eo pipefail # Option pour que le script exit si une erreur est détecté dans l'un des pipeline +set +x # set -x correspond au mode debug qui permet de print les commende avant de les exécuter, set -x permet d'éviter ça (utile pour éviter que les token github apparaissent dans les log) + +function setup_github_env { + echo "HDF5_ROOT=${HDF5_DIR}" | tee -a $GITHUB_ENV + echo "HighFive_ROOT=${HIGHFIVE_DIR}" | tee -a $GITHUB_ENV + echo "SUNDIALS_ROOT=${SUNDIALS_DIR}" | tee -a $GITHUB_ENV + echo "MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET}" | tee -a $GITHUB_ENV + echo "DYLD_FALLBACK_LIBRARY_PATH=${HDF5_DIR}/lib:${YAML_CPP_DIR}/lib" | tee -a $GITHUB_ENV + echo "yaml-cpp_ROOT=${YAML_CPP_DIR}" | tee -a $GITHUB_ENV +} + +# Check if the current script ($0) is called with the correct option ($1) which should correspond to the project path +if [[ "$1" == "" ]] ; then + echo "Usage: $0 " + exit 1 +fi + +PROJECT_PATH="$1" +ARCH=$(uname -m) # Récupère l'architecture du système (arm64 / x86_64 ...) +GENERATOR="Ninja" +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +source "${SCRIPT_DIR}/dependencies.sh" + +HDF5_DIR="${PROJECT_PATH}/cache/hdf5/${HDF5_VERSION}-${ARCH}" +HIGHFIVE_DIR="${PROJECT_PATH}/cache/highfive/${HIGHFIVE_VERSION}-${ARCH}" +SUNDIALS_DIR="${PROJECT_PATH}/cache/sundials/${SUNDIALS_VERSION}-${ARCH}" +SUNDIALS_BUILD_OPTIONS=( + "-DENABLE_LAPACK=ON" + "-DBLA_VENDOR=Apple" + "-DSUNDIALS_LAPACK_CASE=LOWER" + "-DSUNDIALS_LAPACK_UNDERSCORES=NONE" +) +YAML_CPP_DIR="${PROJECT_PATH}/cache/yaml-cpp/${YAML_CPP_VERSION}-${ARCH}" + +# When compiling HDF5, we should use the minimum across all Python versions for a given +# arch, for versions see for example a more updated version of the following: +# https://github.com/pypa/cibuildwheel/blob/9c75ea15c2f31a77e6043b80b1b7081372319d85/cibuildwheel/macos.py#L302-L315 +if [[ "${ARCH}" == "arm64" ]]; then + export MACOSX_DEPLOYMENT_TARGET="11.0" +else + # This is the minimum version for Cantera + export MACOSX_DEPLOYMENT_TARGET="10.15" +fi + +lib_name=libhdf5.dylib +inc_name=highfive.hpp + +if [ -f ${HDF5_DIR}/lib/${lib_name} ] && [ -f ${HIGHFIVE_DIR}/include/highfive/${inc_name} ]; then + echo "using cached build" + setup_github_env + exit 0 +else + echo "building dependencies" +fi + +brew uninstall cmake + +brew install ninja cmake --formula + +source "${SCRIPT_DIR}/build_dependencies.sh" # Build here hdf5, highFive, sundials, yaml_cpp + +setup_github_env \ No newline at end of file diff --git a/.github/dependencies.sh b/.github/dependencies.sh new file mode 100644 index 00000000000..e940953234f --- /dev/null +++ b/.github/dependencies.sh @@ -0,0 +1,6 @@ +export HDF5_VERSION="1.14.5" +export LIBAEC_VERSION="1.1.3" +export ZLIB_VERSION="1.3.1" +export HIGHFIVE_VERSION="2.10.0" +export SUNDIALS_VERSION="7.1.1" +export YAML_CPP_VERSION="0.8.0" \ No newline at end of file diff --git a/.github/workflows/CERFACS_packaging.yml b/.github/workflows/CERFACS_packaging.yml new file mode 100644 index 00000000000..9e4311a464b --- /dev/null +++ b/.github/workflows/CERFACS_packaging.yml @@ -0,0 +1,408 @@ +name: Build Python Package + +on: + workflow_dispatch: + inputs: + incoming_ref: + description: > + The ref from cerfacs/cantera-avbp to be built. Can be a tag, commit hash, + or branch name. + required: true + default: "dev_cantera-avbp" + upload: + description: Attempt to upload to PyPI + required: true + default: "false" + build_linux: + description: "Build wheels on Linux" + required: true + default: "false" + build_windows: + description: "Build wheels on Windows" + required: true + default: "false" + build_macos: + description: "Build wheels on MacOS" + required: true + default: "false" + +concurrency: + group: ${{ github.ref }}-${{ github.event.inputs.incoming_ref}} + cancel-in-progress: true + +env: + ACTION_URL: "https://github.com/cerfacs/cantera-avbp/actions/runs/${{ github.run_id }}" + REPO_API_URL: "https://api.github.com/repos/cerfacs/cantera-avbp/tarball/${{ github.event.inputs.incoming_ref }}" + + +jobs: + dump: + name: Dump the input parameters for the workflow + runs-on: ubuntu-22.04 + steps: + - name: Dump Event Payload + run: jq . "$GITHUB_EVENT_PATH" + - name: Echo the input variables + run: | + echo "${{ github.event.inputs.incoming_ref }}" + echo "${{ github.event.inputs.upload }}" + + post-pending-status: + name: Post a pending workflow status to cerfacs/cantera-avbp + runs-on: ubuntu-22.04 + env: + GH_TOKEN: ${{ secrets.PAT }} + outputs: + incoming-sha: ${{ steps.get-incoming-sha.outputs.incoming-sha }} + tag-ref: ${{ steps.munge-incoming-ref.outputs.tag-ref }} + steps: + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + - name: Munge the incoming ref + id: munge-incoming-ref + run: | + import os + import re + from pathlib import Path + INCOMING_REF = "${{ github.event.inputs.incoming_ref }}" + INCOMING_SHA = "" + if INCOMING_REF.startswith("refs/"): + INCOMING_REF = INCOMING_REF.replace("refs/", "") + elif re.match(r"^v\d\.\d\.\d.*$", INCOMING_REF) is not None: + INCOMING_REF = f"tags/{INCOMING_REF}" + elif re.match(r"^[a-f0-9]{6,40}", INCOMING_REF) is not None: + INCOMING_SHA = INCOMING_REF + else: + INCOMING_REF = f"heads/{INCOMING_REF}" + TAG_REF = "false" + if INCOMING_REF.startswith("tags"): + TAG_REF = "true" + Path(os.environ["GITHUB_ENV"]).write_text( + f"INCOMING_REF={INCOMING_REF}\n" + f"TAG_REF={TAG_REF}\n" + f"INCOMING_SHA={INCOMING_SHA}" + ) + Path(os.environ["GITHUB_OUTPUT"]).write_text( + f"tag-ref={TAG_REF}" + ) + shell: python + - name: Get the SHA associated with the incoming ref + id: get-incoming-sha + run: | + if [[ "${INCOMING_SHA}" == "" ]]; then + INCOMING_SHA=$(gh api repos/cerfacs/cantera-avbp/git/matching-refs/${INCOMING_REF} \ + -H "Accept: application/vnd.github.v3+json" --jq ".[0].object.sha") + echo "INCOMING_SHA=${INCOMING_SHA}" >> $GITHUB_ENV + fi + # This needs to be in this step to be output to other jobs. + echo "incoming-sha=${INCOMING_SHA}" >> $GITHUB_OUTPUT + - name: Post the status to the upstream commit + id: set-the-status + if: env.TAG_REF == 'false' + run: | + gh api repos/cerfacs/cantera-avbp/statuses/${INCOMING_SHA} \ + -H "Accept: application/vnd.github.v3+json" \ + --field state='pending' \ + --field target_url=$ACTION_URL \ + --field context='PyPI Package Build' \ + --field description="Pending build" \ + --silent + + sdist: + name: Build the sdist + runs-on: ubuntu-22.04 + needs: + - "post-pending-status" + outputs: + job-status: ${{ job.status }} + steps: + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install libboost-dev + - uses: actions/checkout@v4 + name: Checkout the repository + with: + repository: "cerfacs/cantera-avbp" + submodules: recursive + ref: ${{ github.event.inputs.incoming_ref }} + - name: Set Up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Install dependencies + run: python3 -m pip install -U pip scons build + - name: Build the sdist + run: | + python3 `which scons` sdist f90_interface=n python_package='none' \ + system_blas_lapack=n system_sundials=n system_eigen=n system_fmt=n \ + system_yamlcpp=n googletest=none env_vars='CYTHON_FORCE_REGEN' + env: + CYTHON_FORCE_REGEN: "1" + - name: Archive the built sdist + uses: actions/upload-artifact@v4 + with: + path: ./build/python_sdist/dist/*.tar.gz + name: cibw-sdist + if-no-files-found: error + # Copied from https://github.com/hynek/build-and-inspect-python-package/ + - name: Show SDist contents hierarchically, including metadata. + shell: bash + run: | + mkdir -p /tmp/out/sdist + cp build/python_sdist/dist/*.tar.gz /tmp/ + cd /tmp + tar xf *.tar.gz -C out/sdist + echo -e '\n
SDist contents\n' >> $GITHUB_STEP_SUMMARY + (cd /tmp/out/sdist && tree -Da --timefmt="%Y-%m-%dT%H:%M:%SZ" * | sed 's/^/ /' | tee -a $GITHUB_STEP_SUMMARY) + echo -e '\n
\n' >> $GITHUB_STEP_SUMMARY + echo ----- Metadata Follows ----- + echo -e '\n
Metadata\n' >> $GITHUB_STEP_SUMMARY + cat out/sdist/*/PKG-INFO | sed 's/^/ /' | tee -a $GITHUB_STEP_SUMMARY + echo -e '\n
\n' >> $GITHUB_STEP_SUMMARY + echo ----- End of Metadata ----- + + upload-sh-scripts: + if: ${{ github.event.inputs.build_macos == 'true' }} + name: Upload the *.sh scripts required for installation + runs-on: ubuntu-latest + needs: + - "post-pending-status" + outputs: + job-status: ${{ job.status }} + steps: + - uses: actions/checkout@v5 + name: Checkout the repository + with: + repository: "cerfacs/cantera-avbp" + # submodules: recursive + ref: ${{ github.event.inputs.incoming_ref }} + - name: Archive the *.sh scripts + uses: actions/upload-artifact@v4 + with: + path: | + .github/build_dependencies.sh + .github/cibw_before_all_macos.sh + .github/dependencies.sh + name: sh-scripts + if-no-files-found: error + + windows-wheel: + if: ${{ github.event.inputs.build_windows == 'true' }} + name: Build Windows Wheels for py${{ matrix.py }} + runs-on: windows-2019 + needs: ["sdist", "post-pending-status"] + outputs: + job-status: ${{ job.status }} + strategy: + matrix: + py: ["311"] #"38", "39", "310", + arch: ["AMD64"] # , "x86"] + fail-fast: true + env: + BOOST_ROOT: ${{ github.workspace }}/3rdparty/boost + BOOST_URL: https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.7z + steps: + - name: Download pre-built sdist + uses: actions/download-artifact@v4 + with: + name: cibw-sdist + - name: Extract the sdist tarball + run: tar -xvf *.tar.gz --strip-components=1 + shell: bash + - name: Restore Boost cache + uses: actions/cache@v3 + id: cache-boost + with: + path: ${{env.BOOST_ROOT}} + key: boost-${{env.BOOST_URL}} + - name: Install Boost Headers + if: steps.cache-boost.outputs.cache-hit != 'true' + run: | + BOOST_ROOT=$(echo $BOOST_ROOT | sed 's/\\/\//g') + mkdir -p $BOOST_ROOT + curl --progress-bar --location --output $BOOST_ROOT/download.7z $BOOST_URL + 7z -o$BOOST_ROOT x $BOOST_ROOT/download.7z -y -bd boost_1_78_0/boost + mv $BOOST_ROOT/boost_1_78_0/boost $BOOST_ROOT/boost + rm $BOOST_ROOT/download.7z + shell: bash + - name: Build wheels + uses: pypa/cibuildwheel@v2.19.1 + env: + CIBW_ENVIRONMENT: BOOST_INCLUDE=${BOOST_ROOT} CT_SKIP_SLOW=1 REPO_API_URL=${{ env.REPO_API_URL }} GH_TARBALL_DL=${{ env.GH_TARBALL_DL }} + CIBW_ARCHS: ${{ matrix.arch }} + CIBW_BUILD: cp${{ matrix.py }}-* + CIBW_TEST_COMMAND: pytest -vv --durations=100 ${{ runner.temp }}/test/python + CIBW_BEFORE_TEST: | + curl -sL -H "Authorization: token $GH_TARBALL_DL" -o ${{ runner.temp }}/cantera.tar.gz $REPO_API_URL \ + && tar -xzf ${{ runner.temp }}/cantera.tar.gz --strip-components=1 -C ${{ runner.temp }} "joebarteam11-cantera-avbp-3.0.0-${{ needs.post-pending-status.outputs.incoming-sha }}/test" + - name: Archive the built wheels + uses: actions/upload-artifact@v3 + with: + path: ./wheelhouse/*.whl + name: cibw-wheels-windows-${{ strategy.job-index }} + + macos-wheel: + if: ${{ github.event.inputs.build_macos == 'true' }} + name: Build ${{ matrix.arch }} macOS Wheels #for Python ${{ matrix.python-version }} + runs-on: macos-14 + needs: ["sdist", "upload-sh-scripts", "post-pending-status"] + outputs: + job-status: ${{ job.status }} + strategy: + matrix: + # python-version: ["39"] + # arch: ["arm64"] + # deployment_target: ["13.0"] + include: + - # py: "38" + # deployment_target: "10.15" + boost-arch: aarch64 + boost-toolset: clang + boost-platform-version: "14" + boost-version: "1.86.0" + arch: "arm64" + fail-fast: true # Si plusieurs configs dans la matrice et fail-fast = False permet de continuer le workflow pour les autre config. + + steps: + - name: Download shell scripts required to set-up environments and install libraries + uses: actions/download-artifact@v5 + with: + name: sh-scripts + + - name: Download pre-built sdist + uses: actions/download-artifact@v5 + with: + name: cibw-sdist + + - name: Extract the sdist tarball + run: tar -xvf *.tar.gz --strip-components=1 + shell: bash + + - name: Set test file download destination + id: download-test-files + run: | + mkdir -p "${RUNNER_TEMP}/ct-test-dir" + echo "test-root=${RUNNER_TEMP}/ct-test-dir" >> $GITHUB_OUTPUT + shell: bash + + - name: Install boost + uses: MarkusJx/install-boost@b1f0ee8b87cf60236b72440c72d0085d002770c5 # v2.5.0 + id: install-boost + with: + # REQUIRED: Specify the required boost version + # A list of supported versions can be found here: + # https://github.com/MarkusJx/prebuilt-boost/blob/main/versions-manifest.json + boost_version: ${{ matrix.boost-version }} + # OPTIONAL: Specify a custon install location + boost_install_dir: ${{ runner.temp }} + toolset: ${{ matrix.boost-toolset }} + platform_version: ${{ matrix.boost-platform-version }} + arch: ${{ matrix.boost-arch }} + + # - name: Restore the cached built libraries ## This step is usesfull if several architechures are build. This enable to load lib instead of re-install them each time. This first time there are no cache directory thus this step is ignored (return cache-hit = 'false') + # id: restore-built-libraries + # # Our custom manylinux images already have all our dependencies installed + # uses: actions/cache/restore@v4 + # with: + # key: ${{ matrix.os }}-${{ matrix.arch }}-${{ hashFiles('dependencies.sh') }}-1 + # path: ${{ github.workspace }}/cache + + - name: Build required libraries + run: bash cibw_before_all_macos.sh "${{ github.workspace }}" + + - name: Set up CIBW environment + run: | + echo "Boost_ROOT=$BOOST_ROOT" >> $GITHUB_ENV + env: + BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }} + + # - name: Write dependencies to a file for caching # added from cantera + # run: | + # echo "scons ruamel.yaml numpy cython!=3.1.2 pandas pytest pytest-xdist pytest-github-actions-annotate-failures pint graphviz Jinja2" | tr " " "\n" > requirements.txt + + # - name: Set up Python + # uses: actions/setup-python@v5 + # with: + # python-version: ${{ matrix.python-version }} + # cache: pip + # cache-dependency-path: requirements.txt + + # - name: Save the cache # This step is usefull when multiple architectures are build. It enable to save in caches the installed libs that will be loaded in the following build by "Restore the cached built libraries" step. + # uses: actions/cache/save@v4 + # if: always() && runner.os != 'Linux' && steps.restore-built-libraries.outputs.cache-hit != 'true' + # with: + # path: ${{ github.workspace }}/cache + # key: ${{ steps.restore-built-libraries.outputs.cache-primary-key }} + + - name: Build wheels + uses: pypa/cibuildwheel@c923d83ad9c1bc00211c5041d0c3f73294ff88f6 # 3.1.4 + env: + CC: clang + CXX: clang++ + SDKROOT: /Applications/Xcode_15.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk + CANTERA_TEST_DIR: ${{ steps.download-test-files.outputs.test-root }} + CIBW_ENVIRONMENT_MACOS: CT_SKIP_SLOW=1 + CIBW_BEFORE_BUILD: | + python -m pip install --upgrade pip + python -m pip install Cython==3.1.1 numpy>=2.0 + CIBW_BUILD: "cp39-macosx_arm64" #"cp*-*" + CIBW_ARCHS: ${{ matrix.arch }} + CIBW_TEST_SKIP: "*" # Enable to deactivate the automatic pytest after building the wheel + + - name: Archive the built wheels + uses: actions/upload-artifact@v4 + with: + path: ./wheelhouse/*.whl + name: cibw-wheels-${{ runner.os }}-${{ strategy.job-index }} + + linux-wheel: + if: ${{ github.event.inputs.build_linux == 'true' }} + name: Build ${{ matrix.arch }} linux Wheels #for Python ${{ matrix.python-version }} + runs-on: ubuntu-24.04 + needs: ["sdist", "post-pending-status"] + outputs: + job-status: ${{ job.status }} + strategy: + matrix: + # python-version: ["39"] + # arch: ["arm64"] + # deployment_target: ["13.0"] + include: + - # py: "38" + arch: x86_64 #aarch64 + fail-fast: true # Si plusieurs configs dans la matrice et fail-fast = False permet de continuer le workflow pour les autre config. + + steps: + - name: Download pre-built sdist + uses: actions/download-artifact@v5 + with: + name: cibw-sdist + + - name: Extract the sdist tarball + run: tar -xvf *.tar.gz --strip-components=1 + shell: bash + + - name: Set test file download destination + id: download-test-files + run: | + mkdir -p "${RUNNER_TEMP}/ct-test-dir" + echo "test-root=${RUNNER_TEMP}/ct-test-dir" >> $GITHUB_OUTPUT + shell: bash + + - name: Build wheels + uses: pypa/cibuildwheel@c923d83ad9c1bc00211c5041d0c3f73294ff88f6 # 3.1.4 + env: + CIBW_ENVIRONMENT_LINUX: CT_SKIP_SLOW=1 CANTERA_TEST_DIR=/host${{ steps.download-test-files.outputs.test-root }} + CIBW_BEFORE_BUILD: | + python -m pip install --upgrade pip + python -m pip install Cython==3.1.1 numpy>=2.0 + CIBW_BUILD: "cp312-manylinux_x86_64" #"cp39-manylinux_aarch64" #"cp*-*" + CIBW_TEST_SKIP: "*" # Enable to deactivate the automatic pytest after building the wheel + + - name: Archive the built wheels + uses: actions/upload-artifact@v4 + with: + path: ./wheelhouse/*.whl + name: cibw-wheels-${{ runner.os }}-${{ strategy.job-index }} diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index df7d0c6dc78..5e636d6de1d 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -1,10 +1,11 @@ name: Linters on: - pull_request: - # Build when a pull request targets main - branches: - - main +# pull_request: +# # Build when a pull request targets main +# branches: +# - main + workflow_dispatch: jobs: linter: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a61055c65e9..cd773e239d1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,20 +1,21 @@ name: CI on: - push: - # Build on tags that look like releases - tags: - - v* - # Build when main, testing, or the maintenance branch is pushed to - branches: - - main - - testing - - "3.1" - pull_request: - # Build when a pull request targets main or the maintenance branch - branches: - - main - - "3.1" + workflow_dispatch: + # push: + # # Build on tags that look like releases + # tags: + # - v* + # # Build when main, testing, or the maintenance branch is pushed to + # branches: + # - main + # - testing + # - "3.1" + # pull_request: + # # Build when a pull request targets main or the maintenance branch + # branches: + # - main + # - "3.1" concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml index d49e496e32e..cf275a26be5 100644 --- a/.github/workflows/packaging.yml +++ b/.github/workflows/packaging.yml @@ -10,13 +10,13 @@ on: description: "Try to upload wheels and sdist to PyPI after building" required: false default: "false" - push: - # Run on tags that look like releases - tags: - - v* - # Run when main is pushed to - branches: - - main + # push: + # # Run on tags that look like releases + # tags: + # - v* + # # Run when main is pushed to + # branches: + # - main jobs: build-packages: diff --git a/.github/workflows/post-merge-tests.yml b/.github/workflows/post-merge-tests.yml index 9fb985326c0..1d6e9895aa4 100644 --- a/.github/workflows/post-merge-tests.yml +++ b/.github/workflows/post-merge-tests.yml @@ -6,16 +6,16 @@ on: description: "The ref to be built. Can be a tag, commit hash, or branch name" required: true default: "main" - push: - # Run when the main branch is pushed to - branches: - - main - # Run on pull requests when this file is modified - pull_request: - branches: - - main - paths: - - .github/workflows/post-merge-tests.yml + # push: + # # Run when the main branch is pushed to + # branches: + # - main + # # Run on pull requests when this file is modified + # pull_request: + # branches: + # - main + # paths: + # - .github/workflows/post-merge-tests.yml env: PIP_EXTRA_INDEX_URL: https://pypi.anaconda.org/scientific-python-nightly-wheels/simple diff --git a/.gitignore b/.gitignore index 3144947a3db..23d55771f41 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,9 @@ environment.y* coverage/ coverage.info .coverage +doc/sphinx/matlab/*.rst +!doc/sphinx/matlab/index.rst +reduced.yaml +INSTALL_DIR/ +*.code-workspace +test_problems/cxx_samples/flamespeed.yaml diff --git a/README.rst b/README.rst index 86d4f4fc5d9..b6184bdcd23 100644 --- a/README.rst +++ b/README.rst @@ -30,26 +30,230 @@ using the following MyBinder link: .. image:: https://mybinder.org/badge.svg :target: https://mybinder.org/repo/cantera/cantera-jupyter -Installation +Local Installation (MAC) ============ -|pip| |conda-forge| +To ensure a smooth installation, we highly recommend setting up Cantera within a virtual environment. +Follow the steps below for a **local** installation: -`Installation instructions for the current release of Cantera -`_ are available from the main `Cantera -documentation site `_. +0. Clone the Cantera repository:: -- The Python module can also be installed using pip on Windows, macOS, and Linux. + cd /Users/$USER/Documents + git clone git@github.com:cerfacs/cantera-avbp.git -- Conda packages containing the Cantera Python and Matlab modules are also available - for Windows, macOS, and Linux. +1. Create a virtual environment in your home directory:: -- Additional installation packages are provided for Windows, macOS, Ubuntu, Fedora, - RHEL, Gentoo, and FreeBSD. + cd $HOME + python3 -m venv env_cantera + source ~/env_cantera/bin/activate + +2. Navigate to the Cantera directory:: + + cd /Users/$USER/Documents/cantera-avbp + +3. Run the installation script:: + + python install_cantera.py + +4. When prompted about NFS, answer ``no``. + +5. When prompted about package and libraries installations (boost, numpy, scons,...), answer ``yes``. + +6. Wait for the compilation and installation process to complete successfully. + +If everything goes well, you should see the following message:: + + ******************************************************************************** + + To use this brandnew Cantera installation, you must update some of your environment variables. + To do so, you can add the following lines to your .bashrc (or equivalent): + + #cantera-avbp-3.1 + function load_cantera + { + source /Users/$USER/Documents/VENV/test/bin/activate + + + + export PYTHONPATH=/Users/$USER/Documents/cantera-avbp/INSTALL_DIR/lib/python3.9/site-packages:$PYTHONPATH + export PKG_CONFIG_PATH=/Users/$USER/Documents/cantera-avbp/INSTALL_DIR/lib/pkgconfig:$PKG_CONFIG_PATH + export LD_LIBRARY_PATH=/Users/$USER/Documents/cantera-avbp/INSTALL_DIR/lib:$LD_LIBRARY_PATH + export PATH=/Users/$USER/Documents/cantera-avbp/INSTALL_DIR/bin:$PATH + + #Only if you dont already have a custom lib folder: + export CUSTOM_LIB=/Users/$USER/Documents/cantera-avbp/INSTALL_DIR/mech_lib + export LD_LIBRARY_PATH=$CUSTOM_LIB:$LD_LIBRARY_PATH + + #Required for MacOS: + export DYLD_LIBRARY_PATH=$CUSTOM_LIB + + } + + + DONT FORGET TO SOURCE YOUR .bashrc ! + + ******************************************************************************** + +Copy and paste the provided lines into your ``.zshrc`` or ``.bashrc`` file and **source it**. + +7. To activate Cantera environment:: + + load_cantera + +8. Test if everything works using a sample script, for example:: + + python samples/python/AVBP/ARC.py + + +KRAKEN Installation +============ + +For **KRAKEN** users, use the following commands to install Cantera: + +0. Load the necessary modules:: + + module purge && module load python/3.9.5 + +1. Create a virtual environment in your home folder and activate it:: + + cd $HOME + python3 -m venv env_cantera + source ~/env_cantera/bin/activate + +2. Clone the Cantera repository:: + + cd /scratch/cfd/$USER + git clone git@github.com:cerfacs/cantera-avbp.git + +3. Run the installation script:: + + cd cantera-avbp + python install_cantera.py + +4. When prompted about NFS, answer ``yes``. + +5. When prompted about cluster, answer ``KRAKEN``. + +6. When prompted about package installations (numpy, scons,...), answer ``yes``. + +7. Wait for the compilation and installation process to complete successfully. + +If everything goes well, you should see the following message:: + + ******************************************************************************** + + To use this brandnew Cantera installation, you must update some of your environment variables. + To do so, you can add the following lines to your .bashrc (or equivalent): + + #cantera-avbp-3.1 + function load_cantera + { + source /home/cfd/$USER/env_cantera/bin/activate + + module load compiler/gcc/11.2.0 + + export PYTHONPATH=/scratch/cfd/$USER/cantera-avbp/INSTALL_DIR/lib/python3.9/site-packages:$PYTHONPATH + export PKG_CONFIG_PATH=/scratch/cfd/$USER/cantera-avbp/INSTALL_DIR/lib/pkgconfig:$PKG_CONFIG_PATH + export LD_LIBRARY_PATH=/scratch/cfd/$USER/cantera-avbp/INSTALL_DIR/lib:$LD_LIBRAR + export PATH=/scratch/cfd/$USER/cantera-avbp/INSTALL_DIR/bin:$PATH + + #Only if you dont already have a custom lib folder: + export CUSTOM_LIB=/scratch/cfd/$USER/cantera-avbp/INSTALL_DIR/mech_lib + export LD_LIBRARY_PATH=$CUSTOM_LIB:$LD_LIBRARY_PATH + + + } + + + DONT FORGET TO SOURCE YOUR .bashrc ! + + ******************************************************************************** + +Copy and paste the provided lines into your ``.zshrc`` or ``.bashrc`` file and **source it**. + +8. To activate Cantera environment:: + + load_cantera + +9. Test if everything works using a sample script, for example:: + + python samples/python/AVBP/ARC.py + + +CALYPSO Installation +============ + +For **CALYPSO** users, use the following commands to install Cantera: + +0. Load the necessary modules:: + + module purge && module load python/3.9.19 + +1. Create a virtual environment in your home folder and activate it:: + + cd $HOME + python3 -m venv env_cantera + source ~/env_cantera/bin/activate + +2. Clone the Cantera repository:: + + cd /scratch/cfd/$USER + git clone git@github.com:cerfacs/cantera-avbp.git + +3. Run the installation script:: + + cd cantera-avbp + python install_cantera.py + +4. When prompted about NFS, answer ``yes``. + +5. When prompted about cluster, answer ``CALYPSO``. + +6. When prompted about package installations (numpy, scons,...), answer ``yes``. + +7. Wait for the compilation and installation process to complete successfully. + +If everything goes well, you should see the following message:: + + ******************************************************************************** + + To use this brandnew Cantera installation, you must update some of your environment variables. + To do so, you can add the following lines to your .bashrc (or equivalent): + + #cantera-avbp-3.1 + function load_cantera + { + source /gpfs-calypso/home/cfd/$USER/env_cantera/bin/activate + + module load gcc/12.3.0 + + export PYTHONPATH=/gpfs-calypso/scratch/cfd/$USER/cantera-avbp/INSTALL_DIR/lib/python3.9/site-packages:$PYTHONPATH + export PKG_CONFIG_PATH=/gpfs-calypso/scratch/cfd/$USER/cantera-avbp/INSTALL_DIR/lib/pkgconfig:$PKG_CONFIG_PATH + export LD_LIBRARY_PATH=/gpfs-calypso/scratch/cfd/$USER/cantera-avbp/INSTALL_DIR/lib:$LD_LIBRARY_PATH + export PATH=/gpfs-calypso/scratch/cfd/$USER/cantera-avbp/INSTALL_DIR/bin:$PATH + + #Only if you dont already have a custom lib folder: + export CUSTOM_LIB=/gpfs-calypso/scratch/cfd/$USER/cantera-avbp/INSTALL_DIR/mech_lib + export LD_LIBRARY_PATH=$CUSTOM_LIB:$LD_LIBRARY_PATH + + + } + + + DONT FORGET TO SOURCE YOUR .bashrc ! + + ******************************************************************************** + +Copy and paste the provided lines into your ``.zshrc`` or ``.bashrc`` file and **source it**. + +8. To activate Cantera environment:: + + load_cantera + +9. Test if everything works using a sample script, for example:: + + python samples/python/AVBP/ARC.py -- For other platforms, or for users wishing to install a development version of - Cantera, `compilation instructions `_ - are also available. Documentation ============= diff --git a/SConstruct b/SConstruct index bb2196ac7c4..be255a70bc5 100644 --- a/SConstruct +++ b/SConstruct @@ -99,7 +99,7 @@ from buildutils import (Option, PathOption, BoolOption, EnumOption, Configuratio config_error, run_preprocessor, make_relative_path_absolute) # ensure that Python and SCons versions are sufficient for the build process -EnsurePythonVersion(3, 7) +EnsurePythonVersion(3, 9) EnsureSConsVersion(3, 0, 0) if not COMMAND_LINE_TARGETS: @@ -180,7 +180,7 @@ else: # Python Package Settings -python_min_version = parse_version("3.8") +python_min_version = parse_version("3.9") # Newest Python version not supported/tested by Cantera python_max_version = parse_version("3.14") # The string is used to set python_requires in setup.cfg.in @@ -1660,7 +1660,7 @@ elif env['python_package'] == 'none': env["python_min_version"] = python_min_version env["python_max_version"] = python_max_version env["py_requires_ver_str"] = py_requires_ver_str -env["cython_version_spec"] = SpecifierSet(">=0.29.31", prereleases=True) +env["cython_version_spec"] = SpecifierSet(">=0.29.31,!=3.1.2", prereleases=True) env["numpy_version_spec"] = SpecifierSet(">=1.12.0,<3", prereleases=True) env["cython_version_spec_str"] = str(env["cython_version_spec"]) env["numpy_version_spec_str"] = str(env["numpy_version_spec"]) diff --git a/data/example_data b/data/example_data index 1a5d27e508a..dbc42129c99 160000 --- a/data/example_data +++ b/data/example_data @@ -1 +1 @@ -Subproject commit 1a5d27e508a38b1791543e9fded80ffd5c5b8d75 +Subproject commit dbc42129c998c3a977dfa2a8b779851776fb2982 diff --git a/doc/sphinx/favicon.png b/doc/sphinx/favicon.png new file mode 100644 index 00000000000..a3af328e23f Binary files /dev/null and b/doc/sphinx/favicon.png differ diff --git a/doc/sphinx/python/index.rst b/doc/sphinx/python/index.rst new file mode 100644 index 00000000000..557445f69c4 --- /dev/null +++ b/doc/sphinx/python/index.rst @@ -0,0 +1,20 @@ +.. _sec-python-documentation: + +Python Module Documentation +=========================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + importing + thermo + kinetics + transport + zerodim + onedim + constants + units + utilities + scripts diff --git a/doc/sphinx/reference/science/reactors/controlreactor.md b/doc/sphinx/reference/science/reactors/controlreactor.md new file mode 100644 index 00000000000..ea0535125fb --- /dev/null +++ b/doc/sphinx/reference/science/reactors/controlreactor.md @@ -0,0 +1,73 @@ +```{py:currentmodule} cantera +``` + +# Control Volume Reactor + +This model represents a homogeneous zero-dimensional reactor, as implemented by the C++ +class {ct}`Reactor`. By default, these reactors are closed (no inlets or outlets), have +fixed volume, and have adiabatic, chemically-inert walls. These properties may all be +changed by adding appropriate components such as {py:class}`Wall`, +{py:class}`ReactorSurface`, {py:class}`MassFlowController`, and +{py:class}`Valve`. + +A control volume reactor is defined by the four state variables: + +- $m$, the mass of the reactor's contents (in kg) +- $V$, the reactor volume (in m$^3$) +- $U$, the total internal energy of the reactors contents (in J) +- $Y_k$, the mass fractions for each species (dimensionless) + +The total mass of the reactor's contents changes as a result of flow through the +reactor's inlets and outlets, and production of homogeneous phase species on the reactor +{py:class}`Wall`. + +$$ +\frac{dm}{dt} = \sum_{in} \dot{m}_{in} - \sum_{out} \dot{m}_{out} + \dot{m}_{wall} +$$ (mass) + +Where the subscripts *in* and *out* refer to the sum of the corresponding property over +all inlets and outlets respectively. A dot above a variable signifies a time derivative. + +The reactor volume changes as a function of time due to the motion of one or more walls: + +$$ +\frac{dV}{dt} = \sum_w f_w A_w v_w(t) +$$ (volume) + +where $f_w = \pm 1$ indicates the facing of the wall (whether moving the wall increases +or decreases the volume of the reactor), $A_w$ is the surface area of the wall, and +$v_w(t)$ is the velocity of the wall as a function of time. + +The equation for the total internal energy is found by writing the first law for an open +system: + +$$ +\frac{dU}{dt} = - p \frac{dV}{dt} + \dot{Q} + + \sum_{in} \dot{m}_{in} h_{in} - h \sum_{out} \dot{m}_{out} +$$ (energy) + +Where $\dot{Q}$ is the net rate of heat addition to the system. + +The rate at which species $k$ is generated through homogeneous phase reactions is +$V \dot{\omega}_k W_k$, and the total rate at which species $k$ is generated is: + +$$ +\dot{m}_{k,gen} = V \dot{\omega}_k W_k + \dot{m}_{k,wall} +$$ + +The rate of change in the mass of each species is: + +$$ +\frac{d(mY_k)}{dt} = \sum_{in} \dot{m}_{in} Y_{k,in} - \sum_{out} \dot{m}_{out} Y_k + + \dot{m}_{k,gen} +$$ + +Expanding the derivative on the left hand side and substituting the equation +for $dm/dt$, the equation for each homogeneous phase species is: + +$$ +m \frac{dY_k}{dt} = \sum_{in} \dot{m}_{in} (Y_{k,in} - Y_k) + + \dot{m}_{k,gen} - Y_k \dot{m}_{wall} +$$ (species) + +Equations 1-4 are the governing equations for a control volume reactor. diff --git a/doc/sphinx/reference/science/reactors/index.md b/doc/sphinx/reference/science/reactors/index.md new file mode 100644 index 00000000000..fe80fddfd33 --- /dev/null +++ b/doc/sphinx/reference/science/reactors/index.md @@ -0,0 +1,67 @@ +# Reactors and Reactor Networks + +```{caution} +This page is a work in progress. For more complete documentation of the current Cantera +release (Cantera 3.0), please see this page. +``` + +## Reactors + +A Cantera *reactor* represents the simplest form of a chemically reacting system. It +corresponds to an extensive thermodynamic control volume $V$, in which all state +variables are homogeneously distributed. The system is generally unsteady -- that is, +all states are functions of time. In particular, transient state changes due to chemical +reactions are possible. However, thermodynamic (but not chemical) equilibrium is assumed +to be present throughout the reactor at all instants of time. + +Reactors can interact with the surrounding environment in multiple ways: + +- Expansion/compression work: By moving the walls of the reactor, its volume can be + changed and expansion or compression work can be done by or on the reactor. + +- Heat transfer: An arbitrary heat transfer rate can be defined to cross the boundaries + of the reactor. + +- Mass transfer: The reactor can have multiple inlets and outlets. For the inlets, + arbitrary states can be defined. Fluid with the current state of the reactor exits the + reactor at the outlets. + +- Surface interaction: One or multiple walls can influence the chemical reactions in the + reactor. This is not just restricted to catalytic reactions, but mass transfer between + the surface and the fluid can also be modeled. + +All of these interactions do not have to be constant, but can vary as a function of time +or state. For example, heat transfer can be described as a function of the temperature +difference between the reactor and the environment, or the wall movement can be modeled +depending on the pressure difference. Interactions of the reactor with the environment +are defined on one or more walls, inlets, and outlets. + +In addition to single reactors, Cantera is also able to interconnect reactors into a +*reactor network*. Each reactor in a network may be connected so that the contents of one +reactor flow into another. Reactors may also be in contact with one another or the +environment via walls that conduct heat or move to do work. + +## Reactor Types and Governing Equations + +All reactor types are modelled using combinations of Cantera's governing equations of +state. The specific governing equations defining Cantera's supported reactor models are +derived and described below. + + +````{grid} 2 +:gutter: 3 + +```{grid-item-card} Control Volume Reactor +:link: controlreactor +:link-type: doc + +A reactor where the volume is prescribed by the motion of the reactor's walls. The state variables are the volume, mass, total internal energy, and species mass fractions. +``` + +```` + +```{toctree} +:hidden: + +controlreactor +``` \ No newline at end of file diff --git a/include/cantera/base/Parser.h b/include/cantera/base/Parser.h new file mode 100644 index 00000000000..3b879187de4 --- /dev/null +++ b/include/cantera/base/Parser.h @@ -0,0 +1,66 @@ +// Small parser for driving CANTERA C++ program +#include +#include +#include +using std::cout; +using std::endl; +using std::string; +#include +using std::ifstream; +#include + +class Param { +private: + size_t m_count; + string m_name; + std::vector m_args; +public: + Param() { + m_count = 0; + } + Param(const string& name) { + m_count = 0; + setName(name); + } + void setName(const string& name) { + m_name = name; + } + string Name() { + return m_name; + } + void print(); + void addArgs(const string& arg) { + m_args.push_back(arg); + } + size_t nbArgs() { + return(m_args.size()); + } + void incrCount() { + ++m_count; + } + double readDouble(const int i); + int readInteger(const int i); + bool readBool(const int i); + string readString(const int i); +}; + +class Parser { +private: + std::list m_params; + //std::list i_count; + size_t m_count; +public: + Parser() { + m_count = 0; + } + void parseFile(const string& file); + bool addParamFromLine(Param& param,const string& line); + Param * getParam(const string& name); + Param * getParam(const string& name, const size_t n); + Param * getParam(const string& name, const size_t n, const size_t m); + Param * getParam(const string& name, const size_t n, const size_t m, const size_t l); + size_t getParamNumber(const string& name, const size_t n); + bool checkParam(const string& name); + bool checkParam(const string& name, const size_t n, const size_t m); + size_t nbParamOccurence(const string& name); +}; diff --git a/include/cantera/base/ct_defs.h b/include/cantera/base/ct_defs.h index bf3e0e32744..3cccfa4ef2f 100644 --- a/include/cantera/base/ct_defs.h +++ b/include/cantera/base/ct_defs.h @@ -179,6 +179,44 @@ typedef map Composition; //! index returned by functions to indicate "no position" const size_t npos = static_cast(-1); +//! Soot +// Thermal accomodation factor +const double alphaT = 0.9; +// Active sites : Blanquart and Pitsch (2017) [kmol4/kg4] +const double Cn_cst = 7.5e-12; +// Soot particle density [kg/m3] +const double rho_soot = 1.86e3; +//C2 molecule volume : 2*Wc/rho_soot/Avogadro [m3] +const double V_C2 = 2. * 12. / rho_soot / Avogadro; +// C2 molecule surface area [m2] +const double S_C2 = Pi * pow(6.0 * V_C2 / Pi, 2.0/3.0); +// Soot particle fractal dimension +const double Df = 1.80; +// Amplification factors +const double eps_nucl = 2.5; +const double eps_cond = 1.3; +const double eps_coag = 2.2; +// Biggest soot [m-3] +const double bigSoot = 1.0e-15; +//Condensation +const double alphaV = 1.0 - 2.0 / Df; +const double alphaS = 3.0 / Df - 1.0; +const double vlim1 = 3.98 * 1.0e-25; // [m3] +//Coagulation +const double d_gaz = 2.0e-10; // [m] +const double Csut1 = 1.4558e-6; // [Pa/s] +const double Csut2 = 110.4; +//Surface +const double alpha_surf = 1.0; // Proportion of active sites at soot surface +// Radiative +const double aRadSoot = 1.57; +const double bRadSoot = 0.56; +const double CRad0 = 36 * Pi * aRadSoot * bRadSoot / (pow(pow(aRadSoot,2.0) - pow(bRadSoot,2.0) + + 2, 2.0) + pow(2 * aRadSoot * bRadSoot, 2.0)); +const double CRad2 = Planck * lightSpeed / Boltzmann; +// Soot soret +const double C_soot_soret = 0.554; + } // namespace #endif diff --git a/include/cantera/clib/ctonedim.h b/include/cantera/clib/ctonedim.h index 8ae5e529040..c4960fbb5c1 100644 --- a/include/cantera/clib/ctonedim.h +++ b/include/cantera/clib/ctonedim.h @@ -68,7 +68,7 @@ extern "C" { CANTERA_CAPI int sim1D_show(int i, const char* fname); CANTERA_CAPI int sim1D_setTimeStep(int i, double stepsize, size_t ns, const int* nsteps); CANTERA_CAPI int sim1D_getInitialSoln(int i); - CANTERA_CAPI int sim1D_solve(int i, int loglevel, int refine_grid); + CANTERA_CAPI int sim1D_solve(int i, int loglevel, const char* refine_grid); CANTERA_CAPI int sim1D_refine(int i, int loglevel); CANTERA_CAPI int sim1D_setRefineCriteria(int i, int dom, double ratio, double slope, double curve, double prune); diff --git a/include/cantera/kinetics/CustomKinetics.h b/include/cantera/kinetics/CustomKinetics.h new file mode 100644 index 00000000000..186f44e8428 --- /dev/null +++ b/include/cantera/kinetics/CustomKinetics.h @@ -0,0 +1,49 @@ +/** + * @file CustomKinetics.h + * + * @ingroup chemkinetics + */ + +// Author: Q. Cazeres, A. Felden, P. Pepiot + +#include "BulkKinetics.h" + +namespace Cantera +{ + /** + * Kinetics manager implementing reaction mechanism GRI-Mech 3.0 + * @deprecated + */ + class CustomKinetics : public BulkKinetics + { + public: + /// Default constructor. + CustomKinetics(); + + // virtual int type() const { + // return cCustomKinetics; + // } + + void getNetProductionRates(double* net) { + get_wdot_reduced(net); + } + + string kineticsType() const override { + return "custom"; + } + + void closeDynamicLib() { + close_dl(); + } + + void* handle; + +private: + typedef void (*ck_t)(double*,double*,const double*, double*); + // New yarc2 format + //typedef void (*ck_t)(const double*,const double*,const double*,const double*,double*); + ck_t ck; + void get_wdot_reduced(double* wdot); + void close_dl(); + }; +} diff --git a/include/cantera/kinetics/Kinetics.h b/include/cantera/kinetics/Kinetics.h index 7d81acb3426..97584aedd34 100644 --- a/include/cantera/kinetics/Kinetics.h +++ b/include/cantera/kinetics/Kinetics.h @@ -132,6 +132,8 @@ class Kinetics virtual ~Kinetics() = default; + virtual void closeDynamicLib(); + //! Kinetics objects are not copyable or assignable Kinetics(const Kinetics&) = delete; Kinetics& operator=(const Kinetics&)= delete; diff --git a/include/cantera/oneD/Boundary1D.h b/include/cantera/oneD/Boundary1D.h index 060dea3fe3b..90b89847f46 100644 --- a/include/cantera/oneD/Boundary1D.h +++ b/include/cantera/oneD/Boundary1D.h @@ -82,6 +82,16 @@ class Boundary1D : public Domain1D throw NotImplementedError("Boundary1D::setMoleFractions"); } + //! Set the mass fractions by specifying a string. + virtual void setMassFractions(const std::string& xin) { + throw NotImplementedError("Boundary1D::setMassFractions"); + } + + //! Set the mass fractions by specifying an array. + virtual void setMassFractions(const double* xin) { + throw NotImplementedError("Boundary1D::setMassFractions"); + } + //! Mass fraction of species k. virtual double massFraction(size_t k) { throw NotImplementedError("Boundary1D::massFraction"); @@ -168,6 +178,9 @@ class Inlet1D : public Boundary1D void setMoleFractions(const string& xin) override; void setMoleFractions(const double* xin) override; + void setMassFractions(const std::string& xin) override; + void setMassFractions(const double* xin) override; + double massFraction(size_t k) override { return m_yin[k]; } diff --git a/include/cantera/oneD/Domain1D.h b/include/cantera/oneD/Domain1D.h index 1fa401f48f0..b8bba461cb5 100644 --- a/include/cantera/oneD/Domain1D.h +++ b/include/cantera/oneD/Domain1D.h @@ -34,7 +34,7 @@ class Domain1D * @param points Number of grid points. * @param time (unused) */ - Domain1D(size_t nv=1, size_t points=1, double time=0.0); + Domain1D(size_t nv=1, size_t points=1, double time=0.0, size_t nsoot=0, size_t nfic=0, size_t neq=0); virtual ~Domain1D(); Domain1D(const Domain1D&) = delete; @@ -517,12 +517,12 @@ class Domain1D void setProfile(const string& name, double* values, double* soln); //! Access the array of grid coordinates [m] - vector& grid() { + vector& z() { return m_z; } //! Access the array of grid coordinates [m] - const vector& grid() const { + const vector& z() const { return m_z; } diff --git a/include/cantera/oneD/DomainFactory.h b/include/cantera/oneD/DomainFactory.h index 747c2f7a713..cff9c0ef75f 100644 --- a/include/cantera/oneD/DomainFactory.h +++ b/include/cantera/oneD/DomainFactory.h @@ -19,7 +19,7 @@ namespace Cantera //! ```cpp //! shared_ptr d1 = newDomain("Inlet", sol, "reactants"); //! ``` -class DomainFactory : public Factory, const string&> +class DomainFactory : public Factory, const string&, const size_t&, const size_t&> { public: /** @@ -51,7 +51,7 @@ class DomainFactory : public Factory, const strin //! @ingroup onedGroup template shared_ptr newDomain( - const string& domainType, shared_ptr solution, const string& id="") + const string& domainType, shared_ptr solution, const string& id="", const size_t& sections=0, const size_t& fictives=0) { string id_ = id; if (id_ == "") { @@ -59,7 +59,7 @@ shared_ptr newDomain( } auto ret = std::dynamic_pointer_cast( shared_ptr( - DomainFactory::factory()->create(domainType, solution, id_))); + DomainFactory::factory()->create(domainType, solution, id_, sections, fictives))); if (!ret) { throw CanteraError("newDomain", "Invalid cast: unable to access 'Domain1D' as '{}'.", demangle(typeid(T))); diff --git a/include/cantera/oneD/Flamelet.h b/include/cantera/oneD/Flamelet.h new file mode 100644 index 00000000000..fa922aee8bc --- /dev/null +++ b/include/cantera/oneD/Flamelet.h @@ -0,0 +1,176 @@ +#ifndef CT_FLAMELET_H +#define CT_FLAMELET_H + +// #include "Domain1D.h" +#include "cantera/base/Array.h" +#include "cantera/oneD/Flow1D.h" +#include "cantera/kinetics/Kinetics.h" +#include "cantera/thermo/IdealGasPhase.h" +#include "cantera/thermo/ThermoPhase.h" + + + +#include +/** + * A class for counter-flow diffusion flames in mixture fraction space + * @ingroup onedim + * L. Esclapez - 01/2018 + */ + +namespace Cantera +{ + +class Flamelet : public Flow1D +{ +public: + Flamelet(IdealGasPhase* ph = 0, size_t nsp = 1, size_t nsoot = 0, size_t nfic = 0, size_t neq = c_offset_Yflamelet, size_t points = 1); + + //! Delegating constructor + Flamelet(shared_ptr th, size_t nsp = 1, size_t nsoot = 0, size_t nfic = 0, size_t neq = c_offset_Yflamelet, size_t points = 1); + + //! Create a new flow domain. + //! @param sol Solution object used to evaluate all thermodynamic, kinetic, and + //! transport properties + //! @param id name of flow domain + //! @param points initial number of grid points + Flamelet(shared_ptr sol, const string& id="", size_t nsoot = 0, size_t nfic = 0, size_t neq = c_offset_Yflamelet, size_t points=1); + + virtual ~Flamelet(); + + virtual void eval(size_t j, double* x, double* r, integer* mask, double rdt) override; + + string domainType() const override{ + return "flamelet-flow"; + } + + virtual void resize(size_t components, size_t points) override; + + virtual string componentName(size_t n) const override; + + virtual size_t componentIndex(const string& name) const override; + + vector dCpdT(const Array2D sol); + + vector d2CpdT2(const Array2D sol); + + virtual void setGas(const double* x, size_t j) override; + + virtual void setGasAtMidpoint(const double* x, size_t j) override; + + virtual void resetBadValues(double* xg) override; + + virtual void setChiSt(double chiSt) { + m_chiSt = chiSt; + m_updateChi = true; + } + + virtual void setzSt(double zSt) { + m_zSt = zSt; + m_updateChi = true; + } + + virtual double chiSt() const { + return m_chiSt; + } + + virtual double zSt() const { + return m_zSt; + } + + void setChi(); + + void setUnityLewisNumber(bool doLewisNumber) { + m_do_unityLewisNumber = doLewisNumber; + } + + virtual void updateTransport(double* x, size_t j0, size_t j1) override; + + virtual void _getInitialSoln(double* x) override{ + for (size_t j = 0; j < m_points; j++) { + T(x,j) = m_thermo->temperature(); + m_thermo->getMassFractions(&Y(x, 0, j)); + } + } + + void showChiProfile() { + std::cout << "Chi profile " << std::endl; + for (size_t i = 0; i < m_points; i++) { + std::cout << z(i) << " " << m_chi[i] << std::endl; + } + } + + double chi(size_t j) const { + return m_chi[j]; + } + + size_t indexSt() const + { + auto low = std::lower_bound(m_z.begin(), m_z.end(), m_zSt); + return (low - m_z.begin()); + } + + virtual double T(const double* x, size_t j) const override { + return x[index(c_offset_Tflamelet, j)]; + } + virtual double& T(double* x, size_t j) override { + return x[index(c_offset_Tflamelet, j)]; + } + virtual double T_prev(size_t j) const override { + return prevSoln(c_offset_Tflamelet, j); + } + + virtual double Y(const double* x, size_t k, size_t j) const override { + return x[index(c_offset_Yflamelet + k, j)]; + } + + virtual double& Y(double* x, size_t k, size_t j) override { + return x[index(c_offset_Yflamelet + k, j)]; + } + + virtual double Y_prev(size_t k, size_t j) const override { + return prevSoln(c_offset_Yflamelet + k, j); + } + + double d2Ydz2(const double* x, size_t k, size_t j) const { + double c1 = (Y(x,k,j) - Y(x,k,j-1)); + double c2 = (Y(x,k,j+1) - Y(x,k,j)); + return 2.0*(c2/(z(j+1) - z(j)) - c1/(z(j) - z(j-1)))/(z(j+1) - z(j-1)); + } + + double d2Tdz2(const double* x, size_t j) const { + double c1 = (T(x,j) - T(x,j-1)); + double c2 = (T(x,j+1) - T(x,j)); + return 2.0*(c2/(z(j+1) - z(j)) - c1/(z(j) - z(j-1)))/(z(j+1) - z(j-1)); + } + + double Lek(size_t k, size_t j) { + return m_Lek[j*m_nsp+k]; + } + + double exactChi(double zz); + + double erfinv(double p1, double q1); + + // Lewis number stuff + bool m_do_unityLewisNumber = true; + vector m_Lek; + + // Thermo stuff + vector h_RT; + vector cp_R; + + + // Scalar dissipation rate stuff + vector m_chi; + vector m_exactchi; + double m_chiSt = 0.0; + double m_zSt = 0.0; + bool m_updateChi = true; + +// private: + // vector m_ybar; +}; + +} + +#endif \ No newline at end of file diff --git a/include/cantera/oneD/Flow1D.h b/include/cantera/oneD/Flow1D.h index c1ee13c6d60..a22d96d7112 100644 --- a/include/cantera/oneD/Flow1D.h +++ b/include/cantera/oneD/Flow1D.h @@ -31,6 +31,13 @@ enum offset , c_offset_Y //! mass fractions }; +//! Offsets of solution components in the 1D solution array for mixture fraction space +enum offset_z +{ + c_offset_Tflamelet, //! Temperature + c_offset_Yflamelet, //! Species mass fractions +}; + class Transport; //! @defgroup flowGroup Flow Domains @@ -52,30 +59,32 @@ class Flow1D : public Domain1D //! Create a new flow domain. //! @param ph Object representing the gas phase. This object will be used //! to evaluate all thermodynamic, kinetic, and transport properties. - //! @param nsp Number of species. - //! @param points Initial number of grid points - Flow1D(ThermoPhase* ph = 0, size_t nsp = 1, size_t points = 1); + //! @param nsp Number of species. + //! @param points Initial number of grid points + //! @param n_eq Number of non-species equations (default = 6 for spatial resolution) + Flow1D(ThermoPhase* ph = 0, size_t nsp = 1, size_t nsoot = 0, size_t nfic = 0, size_t neq = c_offset_Y, size_t points = 1); //! Delegating constructor - Flow1D(shared_ptr th, size_t nsp = 1, size_t points = 1); + Flow1D(shared_ptr th, size_t nsp = 1, size_t nsoot = 0, size_t nfic = 0, size_t neq = c_offset_Y, size_t points = 1); //! Create a new flow domain. //! @param sol Solution object used to evaluate all thermodynamic, kinetic, and //! transport properties //! @param id name of flow domain //! @param points initial number of grid points - Flow1D(shared_ptr sol, const string& id="", size_t points=1); + Flow1D(shared_ptr sol, const string& id="", size_t nsoot = 0, size_t nfic = 0, size_t neq = c_offset_Y, size_t points=1); - ~Flow1D(); + virtual ~Flow1D(); // virtual kw required for derived class destructors (flamelet) - string domainType() const override; + virtual string domainType() const override; //! @name Problem Specification //! @{ void setupGrid(size_t n, const double* z) override; + void setupGrid(size_t n); - void resetBadValues(double* xg) override; + virtual void resetBadValues(double* xg) override; //! Access the phase object used to compute thermodynamic properties for points in //! this domain. @@ -144,6 +153,16 @@ class Flow1D : public Domain1D return m_press; } + //! Set the number of non-species equations + void setNequation(size_t neq){ + m_neq = neq; + } + + //! The current number of non-species equations + size_t nEq(){ + return m_neq; + } + //! Write the initial solution estimate into array x. void _getInitialSoln(double* x) override; @@ -171,6 +190,18 @@ class Flow1D : public Domain1D return m_fixedtemp[j]; } + /// Returns the mixture fraction at point j + /// Added by P. Wolf - March 2010 + /// Thanks to Alireza Najafiyazdi + double getMixFrac(size_t j) { + return m_zmixfrac[j]; + } + + /// Updates the mixture fraction at point j + /// Added by P. Wolf - March 2010 + /// Thanks to Alireza Najafiyazdi + void calcMixFrac(const double* x,size_t j); + //! @} string componentName(size_t n) const override; @@ -180,6 +211,7 @@ class Flow1D : public Domain1D //! Returns true if the specified component is an active part of the solver state virtual bool componentActive(size_t n) const; + //! Print the solution. void show(const double* x) override; shared_ptr asArray(const double* soln) const override; @@ -209,6 +241,17 @@ class Flow1D : public Domain1D m_usesLambda = false; } + void setFlameletFlow() { + // m_type = cFlameletFlow; + m_dovisc = true; + m_isFree = false; + m_usesLambda = true; + } + + virtual void setFuelSpecies(const std::string fuel) { + m_fuel = fuel; + } + //! Specify that the energy equation should be solved at point `j`. //! The converse of this method is fixTemperature(). //! @param j Point at which to enable the energy equation. `npos` means all points. @@ -235,6 +278,18 @@ class Flow1D : public Domain1D virtual bool doElectricField(size_t j) const; //! Turn radiation on / off. + /*! + * The simple radiation model used was established by Liu and Rogg + * @cite liu1991. This model considers the radiation of CO2 and H2O. + * + * This model uses the optically thin limit and the gray-gas approximation to + * simply calculate a volume specified heat flux out of the Planck absorption + * coefficients, the boundary emissivities and the temperature. Polynomial lines + * calculate the species Planck coefficients for H2O and CO2. The data for the + * lines are taken from the RADCAL program @cite RADCAL. + * The coefficients for the polynomials are taken from + * [TNF Workshop](https://tnfworkshop.org/radiation/) material. + */ void enableRadiation(bool doRadiation) { m_do_radiation = doRadiation; } @@ -267,6 +322,395 @@ class Flow1D : public Domain1D return m_epsilon_right; } + // Turn fictive species on / off. + + const size_t getFictives() const { + return m_nfic; + } + + void setFictives(size_t nFic) { + m_nfic = nFic; + } + + void initFictive(); + + // Returns fictive name + std::string fictiveName(size_t n) const { + return m_fictive_name[n]; + } + + // Fictive transport properties + void setFictiveSchmidt(std::vector fictive_schmidt) { + m_fictive_schmidt = fictive_schmidt; + } + const doublereal getFictiveSchmidt(size_t k) const { + return m_fictive_schmidt[k]; + } + + // Fictive fuel and oxidizer inlet conditions + void setFictive_fuel_inlet_Y(std::vector fictive_fuel_inlet_Y) { + m_fictive_fuel_inlet_Y = fictive_fuel_inlet_Y; + } + + const doublereal getFictive_fuel_inlet_Y(size_t k) const { + return m_fictive_fuel_inlet_Y[k]; + } + void setFictive_oxidizer_inlet_Y(std::vector fictive_oxidizer_inlet_Y) { + m_fictive_oxidizer_inlet_Y = fictive_oxidizer_inlet_Y; + } + const doublereal getFictive_oxidizer_inlet_Y(size_t k) const { + return m_fictive_oxidizer_inlet_Y[k]; + } + + // Fictive source term + void setFictiveSourceTermProfile(const std::string& name, vector& zfixed, vector& omegafixed) { + for (size_t k = 0; k < m_nfic; k++) { + if (m_fictive_name[k] == name) { + for (size_t i = 0; i < m_points; i++) { + m_fictive_source_term(k, i) = omegafixed[i]; + } + } + } + } + + + + // Turn soot formation on / off. + // setSections + const size_t getSections() const{ + return m_nsoot; + } + + void setSections(size_t nSec) { + m_nsoot = nSec; + } + + void setPrecursors(std::vector id_precursors); + + void setSootLoglevel(size_t loglevel){ + soot_loglevel = loglevel; + } + + size_t getSootLoglevel(){ + return soot_loglevel; + } + + void enableCondensation(bool doCondensation) { + m_do_condensation = doCondensation; + } + bool condensationEnabled(){ + return m_do_condensation; + } + + void enableCoagulation(bool doCoagulation) { + m_do_coagulation = doCoagulation; + } + bool coagulationEnabled(){ + return m_do_coagulation; + } + + void setCollisionModel(std::string collisionModel){ + m_collision_model = collisionModel; + } + + std::string getCollisionModel(){ + return m_collision_model; + } + + void setSootMorphology(std::string morphologyModel){ + m_soot_morphology = morphologyModel; + } + + std::string getSootMorphology(){ + return m_soot_morphology; + } + + void enableRetroaction(bool doRetroaction){ + m_do_retroaction = doRetroaction; + } + bool retroactionEnabled(){ + return m_do_retroaction; + } + + void enableSootRadiation(bool do_soot_radiation){ + m_do_soot_radiation = do_soot_radiation; + } + + bool sootRadiationEnabled(){ + return m_do_soot_radiation; + } + + void enableSootSoret(bool do_soot_soret){ + m_do_soot_soret = do_soot_soret; + } + + bool sootSoretEnabled(){ + return m_do_soot_soret; + } + + void enableSurfaceGrowth(bool do_sg){ + m_do_sg = do_sg; + } + bool surfaceGrowthEnabled(){ + return m_do_sg; + } + + void enableOxidation(bool do_oxidation){ + m_do_oxidation = do_oxidation; + } + bool oxidationEnabled(){ + return m_do_oxidation; + } + + void enableTrashSection(double trash_section){ + if (trash_section > 0){ + m_trash_section = true; + dTrashLowLim = trash_section; + }else{ + m_trash_section = false; + dTrashLowLim = 0.0; + } + } + + bool trashSectionEnabled(){ + return m_trash_section; + } + + void setHaca(size_t haca_model){ + m_haca_model = haca_model; + } + + size_t getHaca(){ + return m_haca_model; + } + + double getKazakovTad(){ + return kazakovTad; + } + void setKazakovTad(double kazakov_tad){ + kazakovTad = kazakov_tad; + } + + void loadHaca(size_t m_haca_model){ + if (m_haca_model == 1){ //Mauss + // Number of sites at the particle's surface per unit surface (each site occupies S_C2) [1/m2] + double lambda = 1.0 / S_C2; + // Number of sites [-] + // Used in sootSurface to compute lambda * s = lambda * s_c2 * (v/v_c2)^(theta/3) + n_sites = lambda * S_C2; + // Mauss HACA-RC model + //1st order : [1/s] , [-], [J/mol] + //2nd order : [m3/kmol/s], [-], [J/mol] + // S-H + H <-> S* + H2 + ak01f = 1.000e14 * 1e-3, nk01f = 0.000e00, ek01f = 0.0000e00; + ak01b = 1.439e13 * 1e-3, nk01b = 0.000e00, ek01b = -37.63e03; + // S-H + OH <-> S* + H2O + ak02f = 1.630e08 * 1e-3, nk02f = 1.400e00, ek02f = 6.1000e03; + ak02b = 1.101e08 * 1e-3, nk02b = 1.400e00, ek02b = 31.140e03; + // S* + H <-> S-H + ak03f = 1.000e13 * 1e-3, nk03f = 0.000e00, ek03f = 0.00000e0; + ak03b = 0.000e00, nk03b = 0.000e00, ek03b = 0.00000e0; + // S* + C2H2 <-> S-H + ak04f = 3.500e13 * 1e-3, nk04f = 0.000e00, ek04f = 0.00000e0; + ak04b = 3.225e14, nk04b = 0.000e00, ek04b = 181.69e03; + // S* <-> S-H + H + ak05f = 1.000e10, nk05f = 0.000e00, ek05f = 20.000e03; + ak05b = 8.770e11 * 1e-3, nk05b = 0.000e00, ek05b = 74.440e03; + // S* + O2 -> S-H + 2CO + ak06f = 1.000e12 * 1e-3, nk06f = 0.000e00, ek06f = 8.4000e03; + // S* + O2 -> S-H + 2HCO + // S-H + OH -> S-H + CO + gamma_oh = 0.13; + }else if (m_haca_model == 11){ //Mauss tuned (Guo 2016) + // Number of sites at the particle's surface per unit surface (each site occupies S_C2) [1/m2] + double lambda = 1.0 / S_C2; + // Number of sites [-] + // Used in sootSurface to compute lambda * s = lambda * s_c2 * (v/v_c2)^(theta/3) + n_sites = lambda * S_C2; + // Mauss HACA-RC model + //1st order : [1/s] , [-], [J/mol] + //2nd order : [m3/kmol/s], [-], [J/mol] + // S-H + H <-> S* + H2 + ak01f = 1.000e14 * 1e-3, nk01f = 0.000e00, ek01f = 0.0000e00; + ak01b = 1.439e13 * 1e-3, nk01b = 0.000e00, ek01b = -37.63e03; + // S-H + OH <-> S* + H2O + ak02f = 1.630e08 * 1e-3, nk02f = 1.400e00, ek02f = 6.1000e03; + ak02b = 1.101e08 * 1e-3, nk02b = 1.400e00, ek02b = 31.140e03; + // S* + H <-> S-H + ak03f = 1.000e13 * 1e-3, nk03f = 0.000e00, ek03f = 0.00000e0; + ak03b = 0.000e00, nk03b = 0.000e00, ek03b = 0.00000e0; + // S* + C2H2 <-> S-H + ak04f = 3.500e13 * 1e-3, nk04f = 0.000e00, ek04f = 0.00000e0; + ak04b = 3.225e14, nk04b = 0.000e00, ek04b = 181.69e03; + // S* <-> S-H + H + ak05f = 1.000e10, nk05f = 0.000e00, ek05f = 20.000e03; + ak05b = 8.770e11 * 1e-3, nk05b = 0.000e00, ek05b = 74.440e03; + // S* + O2 -> S-H + 2CO + ak06f = 1.000e12 * 1e-3, nk06f = 0.000e00, ek06f = 190.000e03; + // S* + O2 -> S-H + 2HCO + // S-H + OH -> S-H + CO + gamma_oh = 0.10; + }else if (m_haca_model == 2){ //Blanquart + // Number of sites at the particle's surface per unit surface (each site occupies S_C2) [1/m2] + double lambda = 1.7e19; + // Number of sites [-] + // Used in sootSurface to compute lambda * s = lambda * s_c2 * (v/v_c2)^(theta/3) + n_sites = lambda * S_C2; + // Blanquart HACA model + //1st order : [1/s] , [-], [J/mol] + //2nd order : [m3/kmol/s], [-], [J/mol] + // S-H + H <-> S* + H2 + ak01f = 1.0e8 * 1e-3; nk01f = 1.8; ek01f = 68420.0; + ak01b = 8.68e4 * 1e-3; nk01b = 2.36; ek01b = 25460.0; + // S-H + OH <-> S* + H2O + ak02f = 6.72e1 * 1e-3; nk02f = 3.33; ek02f = 6090.0; + ak02b = 6.44e-1 * 1e-3; nk02b = 3.79; ek02b = 27960.0; + // S-H <-> S* + H + ak03f = 1.13e16; nk03f = -0.06; ek03f = 476050.0; + ak03b = 4.17e13 * 1e-3; nk03b = 0.15; ek03b = 0.0; + // S* + C2H2 -> S-H + ak04f = 2.52e9 * 1e-3; nk04f = 1.77; ek04f = 13540.0; + // S* + O2 -> S + 2CO + ak05f = 2.2e12 * 1e-3; nk05f = 0.0; ek05f = 31380.0; + // S-H + OH -> S-H + CO + gamma_oh = 0.13; + }else if (m_haca_model == 3){ + // Number of sites at the particle's surface per unit surface (each site occupies S_C2) [m-2] + double lambda = 2.3e19; + // Number of sites [-] + // Used in sootSurface to compute lambda * s = lambda * s_c2 * (v/v_c2)^(theta/3) + n_sites = lambda * S_C2; + // Kazakov HACA model + //1st order : [1/s] , [-], [J/mol] + //2nd order : [m3/mol/s], [-], [J/mol] + // S-H + H <-> S* + H2 + ak01f = 2.5e14 * 1e-3; nk01f = 0.0; ek01f = 66900.0; + ak01b = 3.9e12 * 1e-3; nk01b = 0.0; ek01b = 39000.0; + // S* + H -> S-H + ak02f = 1.0e14 * 1e-3; nk02f = 0.0; ek02f = 0.0; + // S* + C2H2 -> S-H + H + ak03f = 8.4e11 * 1e-3; nk03f = 0.4; ek03f = 35100.0; + // S* + O2 -> S + 2CO + ak04f = 2.2e12 * 1e-3; nk04f = 0.0; ek04f = 31300.0; + // S-H + OH -> S-H + CO + gamma_oh = 0.13; + } + } + + void finalizeSoot(); + void loadSurface(); + //Initialize soot + void initSoot(); + void showSootInfo(); + // Sections generation and display + void sootCreationVol(); + void showSootSections(); + void sootCollisionModel(); + void getDistributionOrdre0(const double* x, size_t j); + // Soot source terms + void sootSource(const double* x, size_t j); + void sootDimerization(const double* x, size_t j); + void sootNucleation(const double* x, size_t j); + void sootCondensation(const double* x, size_t j); + void sootCoagulation(const double* x, size_t j); + void sootSurface(const double* x, size_t j); + void sootSurfaceInitialization(const double* x, size_t j); + void sootCollisionInverse(); + // Returns section name + std::string sectionName(size_t n) const { + return m_section_name[n]; + } + + const vector& vMin() const { + return vSectMin; + } + + const vector& vMax() const { + return vSectMax; + } + + const vector& vMean() const { + return vSectMean; + } + + const vector& dMean() const { + return dSectMean; + } + + const vector& dCol() const { + return dSectCol; + } + + const vector& aCol() const { + return aSectCol; + } + + const vector& sMean() const { + return sSectMean; + } + + const vector& thetaSoot() const { + return theta_surf; + } + + const vector& fractalPrefactor() const { + return kfractal; + } + + const vector& fractalDimension() const { + return Dfractal; + } + + const double rhoSoot() const { + return rho_soot; + } + + const double getSootInception(size_t j) const { + return m_qdotNucleation[j] * m_rho[j]; + } + + const double getSootCondensation(size_t k, size_t j) const { + return m_qdotCondensation(k,j) * m_rho[j]; + } + + const double getSootCoagulation(size_t k, size_t j) const { + return m_qdotCoagulation(k,j) * m_rho[j]; + } + + const double getSootSg(size_t k, size_t j) const { + return m_qdotSg(k,j) * m_rho[j]; + } + + const double getSootOxidation(size_t k, size_t j) const { + return m_qdotOxidation(k,j) * m_rho[j]; + } + + const double fv(const double* x, size_t j){ + double val = 0.0; + for (size_t k=0; k < m_nsoot; k++){ + val += Ys(x,k,j); + } + val *= m_rho[j] / rho_soot; + return val; + } + + const double sootPrimaryDiam(size_t k) const { + return 2.0 * rNucMean[k]; + } + + const double sootPrimaryPart(size_t k) const { + return nNucMean[k]; + } + + void setThick(double thickness){ + m_thick = thickness; + AVBPReadInputChem(); + } + + double getThick() const { + return m_thick; + } + //! Specify that the the temperature should be held fixed at point `j`. //! The converse of this method is enableEnergyEqn(). //! @param j Point at which to specify a fixed temperature. `npos` means all @@ -340,17 +784,34 @@ class Flow1D : public Domain1D void resize(size_t components, size_t points) override; //! Set the gas object state to be consistent with the solution at point j. - void setGas(const double* x, size_t j); + virtual void setGas(const double* x, size_t j); //! Set the gas state to be consistent with the solution at the midpoint //! between j and j + 1. - void setGasAtMidpoint(const double* x, size_t j); + virtual void setGasAtMidpoint(const double* x, size_t j); //! Get the density [kg/m³] at point `j` double density(size_t j) const { return m_rho[j]; } + //! seems unused + double cpBar(size_t j) const { + return m_cpm[j]; + } + + double enthalpy(size_t j) const { + return m_h[j]; + } + + double thCond(size_t j) const { + return m_tcon[j]; + } + + double HR(size_t j) const { + return m_hr[j]; + } + /** * Retrieve flag indicating whether flow is freely propagating. * The flow is unstrained and the axial mass flow rate is not specified. @@ -377,6 +838,19 @@ class Flow1D : public Domain1D m_dovisc = dovisc; } + + // P. Wolf + void AVBPReadInputPea(); + + //+++++++++++++++++++++++++++++++++++++++++++++++++++ + // B. Franzelli modifications to perform thickening + //+++++++++++++++++++++++++++++++++++++++++++++++++++ + void AVBPReadInputChem(); + void AVBPcompute_local_thick(double* x,size_t j); + + double AVBPthick(size_t j) const { + return avbp_thick[j]; + } /** * Evaluate the residual functions for axisymmetric stagnation flow. * If jGlobal == npos, the residual function is evaluated at all grid points. @@ -414,6 +888,138 @@ class Flow1D : public Domain1D AnyMap getMeta() const override; void setMeta(const AnyMap& state) override; + double wdot(size_t k, size_t j) const { + return m_wdot(k,j); + } + +/// write the net production rates at point j into array m_wdot +/// Modified by P. Wolf March 2010 - Thanks to Alireza N. +/// when PEA activated: production rates depends on mixture fraction at point j +/// WARNING: the following is valid only for fuel/AIR right now + void getWdot(double *x, size_t j) + { + double zloc; + double phi; + setGas(x, j); // We'll need to set the gas before retrieving + // std::cout << "after setGas" << std::endl; + zloc = getMixFrac(j); // the Mixture Fraction and calculating wdot + phi = zloc / (1. - zloc) * phi_cst; + + switch (avbp_ipea) + { + case 0: + m_kin->getNetProductionRates(&m_wdot(0, j)); + break; + // ipea = 1, apply the PEA on fuel oxydation reaction only + case 1: + double pea_f; // pea correction function + // Now set the PEA correction function + pea_f = 0.5 * (1. + tanh((avbp_pea_coeffs[0] - phi) / avbp_pea_coeffs[1])) + + avbp_pea_coeffs[2] / 4. * (1. + tanh((phi - avbp_pea_coeffs[3]) / avbp_pea_coeffs[4])) + * (1. + tanh((avbp_pea_coeffs[5] - phi) / avbp_pea_coeffs[6])); + + // Multiply reaction rate of reaction 1 by the pea coeff + m_kin->setMultiplier(1, pea_f); + // Get the net production rates for all species + m_kin->getNetProductionRates(&m_wdot(0, j)); + // Restore the original reaction rates (not necessary) + m_kin->setMultiplier(1, 1.0 / pea_f); + break; + // ipea = 2, apply PEA on both reactions + case 2: + // TEST 081014: differencie bien les cas + double pea2_f[2]; // pea correction function + // Now set the PEA correction function + pea2_f[0] = 2. / ((1. + tanh((avbp_pea_coeffs[0] - phi) / avbp_pea_coeffs[1])) + + avbp_pea_coeffs[2] * (1. + tanh((phi - avbp_pea_coeffs[3]) / avbp_pea_coeffs[4])) + + avbp_pea_coeffs[5] * (1. + tanh((phi - avbp_pea_coeffs[6]) / avbp_pea_coeffs[7]))); + + pea2_f[1] = 0.5 * ((1. + tanh((avbp_pea_coeffs[8] - phi) / avbp_pea_coeffs[9])) + + avbp_pea_coeffs[10] * (1. + tanh((phi - avbp_pea_coeffs[11]) / avbp_pea_coeffs[12])) + + avbp_pea_coeffs[13] * (1. + tanh((phi - avbp_pea_coeffs[14]) / avbp_pea_coeffs[15])) + * (1. + tanh((avbp_pea_coeffs[16] - phi) / avbp_pea_coeffs[17]))); + + // Multiply reaction rates by the pea coeff + if (m_kin->nReactions() == 2) + { + for (size_t n = 0; n < m_kin->nReactions(); n++) + { + m_kin->setMultiplier(n, pea2_f[n]); + } + // Get the net production rates for all species + m_kin->getNetProductionRates(&m_wdot(0, j)); + // Restore the original reaction rates (not necessary) + for (size_t n = 0; n < m_kin->nReactions(); n++) + { + m_kin->setMultiplier(n, 1.0 / pea2_f[n]); + } + } + else + { + throw CanteraError("getWdot", "ipea = 2 but there ain't 2 reactions"); + } + break; + // ipea = 3, apply PEA on both reactions (for CM2 only) + case 3: + double pea3_f[2]; // pea correction function + + // Now set the PEA correction function + if (phi > 1.0) + { + pea3_f[0] = avbp_pea_coeffs[0] * phi * phi + avbp_pea_coeffs[1] * phi + avbp_pea_coeffs[2]; + } + else + { + pea3_f[0] = 1; + } + pea3_f[1] = pea3_f[0]; + + // Multiply reaction rates by the pea coeff + if (m_kin->nReactions() == 2) + { + for (size_t n = 0; n < m_kin->nReactions(); n++) + { + m_kin->setMultiplier(n, pea2_f[n]); + } + + // Get the net production rates for all species + m_kin->getNetProductionRates(&m_wdot(0, j)); + + // Restore the original reaction rates (not necessary) + for (size_t n = 0; n < m_kin->nReactions(); n++) + { + m_kin->setMultiplier(n, 1.0 / pea2_f[n]); + } + } + else + { + throw CanteraError("getWdot", "ipea = 3 but there ain't 2 reactions"); + } + + break; + + default: + throw CanteraError("getWdot", "ipea is set to a weird value"); + break; + } + } + + //-------------------------------- + // central-differenced derivatives + //-------------------------------- + double cdif1(const double*x, size_t n, size_t j) const { + double c1 = (x[index(n,j+1)] - x[index(n,j-1)]); + return c1/(z(j+1) - z(j-1)); + } + + //! seems unused + double cdif2(const double* x, size_t n, size_t j, + const double* f) const { + double c1 = (f[j] + f[j-1])*(x[index(n,j)] - x[index(n,j-1)]); + double c2 = (f[j+1] + f[j])*(x[index(n,j+1)] - x[index(n,j)]); + return (c2/(z(j+1) - z(j)) - c1/(z(j) - z(j-1)))/(z(j+1) - z(j-1)); + } + //! @name Updates of cached properties //! These methods are called by eval() to update cached properties and data that are //! used for the evaluation of the governing equations. @@ -433,7 +1039,7 @@ class Flow1D : public Domain1D * * #m_hk (species specific enthalpies) * * #m_wdot (species production rates) */ - void updateThermo(const double* x, size_t j0, size_t j1) { + virtual void updateThermo(const double* x, size_t j0, size_t j1) { for (size_t j = j0; j <= j1; j++) { setGas(x,j); m_rho[j] = m_thermo->density(); @@ -606,13 +1212,15 @@ class Flow1D : public Domain1D virtual void evalElectricField(double* x, double* rsd, int* diag, double rdt, size_t jmin, size_t jmax); - //! @} End of Governing Equations + // Evaluate the soot sections equations' residuals. + virtual void evalSoot(double* x, double* rsd, int* diag, + double rdt, size_t jmin, size_t jmax); - //! Alternate version of evalContinuity with legacy signature. - //! Implemented by StFlow; included here to prevent compiler warnings about shadowed - //! virtual functions. - //! @deprecated To be removed after %Cantera 3.1. - virtual void evalContinuity(size_t j, double* x, double* r, int* diag, double rdt); + // Evaluate the fictive species equations' residuals. + virtual void evalFictives(double* x, double* rsd, int* diag, + double rdt, size_t jmin, size_t jmax); + + //! @} End of Governing Equations /** * Evaluate the oxidizer axial velocity equation residual. @@ -636,16 +1244,17 @@ class Flow1D : public Domain1D //! @{ //! Get the temperature at point `j` from the local state vector `x`. - double T(const double* x, size_t j) const { + virtual double T(const double* x, size_t j) const { return x[index(c_offset_T, j)]; } + //! Get the temperature at point `j` from the local state vector `x`. - double& T(double* x, size_t j) { + virtual double& T(double* x, size_t j) { return x[index(c_offset_T, j)]; } //! Get the temperature at point `j` from the previous time step. - double T_prev(size_t j) const { + virtual double T_prev(size_t j) const { return prevSoln(c_offset_T, j); } @@ -680,27 +1289,54 @@ class Flow1D : public Domain1D //! vector `x`. //! //! @see evalUo() - double Uo(const double* x, size_t j) const { + virtual double Uo(const double* x, size_t j) const { return x[index(c_offset_Uo, j)]; } //! Get the mass fraction of species `k` at point `j` from the local state vector //! `x`. - double Y(const double* x, size_t k, size_t j) const { + virtual double Y(const double* x, size_t k, size_t j) const { return x[index(c_offset_Y + k, j)]; } //! Get the mass fraction of species `k` at point `j` from the local state vector //! `x`. - double& Y(double* x, size_t k, size_t j) { + virtual double& Y(double* x, size_t k, size_t j) { return x[index(c_offset_Y + k, j)]; } //! Get the mass fraction of species `k` at point `j` from the previous time step. - double Y_prev(size_t k, size_t j) const { + virtual double Y_prev(size_t k, size_t j) const { return prevSoln(c_offset_Y + k, j); } + //Soot + double Ys(const double* x, size_t k, size_t j) const { + return x[index(c_offset_S+k, j)]; + } + + double& Ys(double* x, size_t k, size_t j) { + return x[index(c_offset_S+k, j)]; + } + + double Ys_prev(size_t k, size_t j) const { + return prevSoln(c_offset_S + k, j); + } + + //Fictive species + double Yfic(const double* x, size_t k, size_t j) const { + return x[index(c_offset_F+k, j)]; + } + + double& Yfic(double* x, size_t k, size_t j) { + return x[index(c_offset_F+k, j)]; + } + + double Yfic_prev(size_t k, size_t j) const { + return prevSoln(c_offset_F + k, j); + } + //---- + //! Get the mole fraction of species `k` at point `j` from the local state vector //! `x`. double X(const double* x, size_t k, size_t j) const { @@ -761,6 +1397,18 @@ class Flow1D : public Domain1D return (Y(x, k, jloc) - Y(x, k, jloc-1))/m_dz[jloc-1]; } + // Soot + double dYsdz(const double* x, size_t k, size_t j) const { + size_t jloc = (u(x,j) > 0.0 ? j : j + 1); + return (Ys(x,k,jloc) - Ys(x,k,jloc-1))/m_dz[jloc-1]; + } + + // Fictive species + double dYficdz(const double* x, size_t k, size_t j) const { + size_t jloc = (u(x,j) > 0.0 ? j : j + 1); + return (Yfic(x,k,jloc) - Yfic(x,k,jloc-1))/m_dz[jloc-1]; + } + /** * Calculates the spatial derivative of temperature T with respect to z at point * j using upwind differencing. @@ -819,6 +1467,12 @@ class Flow1D : public Domain1D return -2.0*(A_right - A_left) / (z(j+1) - z(j-1)); } + double AVBPdivHeatFlux(const double* x, size_t j) const { + double c1 = avbp_thick[j-1]*m_tcon[j-1]*(T(x,j) - T(x,j-1)); + double c2 = avbp_thick[j]*m_tcon[j]*(T(x,j+1) - T(x,j)); + return -2.0*(c2/(z(j+1) - z(j)) - c1/(z(j) - z(j-1)))/(z(j+1) - z(j-1)); + } + /** * Array access mapping for a 3D array stored in a 1D vector. Used for * accessing data in the #m_multidiff member variable. @@ -831,6 +1485,12 @@ class Flow1D : public Domain1D return m*m_nsp*m_nsp + m_nsp*j + k; } + //! Update the soot diffusive mass fluxes. + virtual void updateSootDiffFluxes(const double* x, size_t j0, size_t j1); + + //! Update the fictive species diffusive mass fluxes. + virtual void updateFictiveDiffFluxes(const double* x, size_t j0, size_t j1); + /** * Compute the spatial derivative of species specific molar enthalpies using upwind * differencing. Updates all species molar enthalpies for all species at point j. @@ -853,12 +1513,20 @@ class Flow1D : public Domain1D vector m_dz; // mixture thermo properties - vector m_rho; //!< Density at each grid point - vector m_wtm; //!< Mean molecular weight at each grid point - vector m_wt; //!< Molecular weight of each species - vector m_cp; //!< Specific heat capacity at each grid point + vector m_rho; //!< Density at each grid point + vector m_wtm; //!< Mean molecular weight at each grid point + // P. Wolf + vector m_zmixfrac; + + vector m_cpm; + vector m_h; + + // species thermo properties + vector m_wt; //!< Molecular weight of each species + vector m_cp; //!< Specific heat capacity at each grid poin // transport properties + vector m_ybar; // CERFACS : Added to the public part to be accessible for Flamelet computations vector m_visc; //!< Dynamic viscosity at each grid point [Pa∙s] vector m_tcon; //!< Thermal conductivity at each grid point [W/m/K] @@ -887,9 +1555,16 @@ class Flow1D : public Domain1D Array2D m_dhk_dz; //! Array of size #m_nsp by #m_points for saving species production rates + vector m_hr; Array2D m_wdot; + size_t m_nsp; //!< Number of species in the mechanism + size_t m_neq; //!< Number of non-species equations + size_t m_nsoot; //!< Number of soot sections + size_t m_nfic; //!< Number of fictive species equations + + std::string m_fuel; //! Phase object used for calculating thermodynamic properties ThermoPhase* m_thermo = nullptr; @@ -912,6 +1587,20 @@ class Flow1D : public Domain1D //! for CO2, second is for H2O. vector m_kRadiating; + // Pierre WOLF: added parameters for input_pea.dat + size_t avbp_ipea = 0; + std::string avbp_fuel; + vector avbp_pea_coeffs; + double phi_cst; + + //+++++++++++++++++++++++++++++++++++++++++++++++++++ + // B. Franzelli modifications to perform thickening + // input_chem parameters + //+++++++++++++++++++++++++++++++++++++++++++++++++++ + double avbp_fthick; + vector avbp_thick; + double m_thick = 1.0; + //! @name flags //! @{ @@ -958,6 +1647,110 @@ class Flow1D : public Domain1D //! radiative heat loss vector vector m_qdotRadiation; + // ---------------------- + // FICTIVE SPECIES RELATED VARIABLES + // ---------------------- + size_t fictive_loglevel=1; + std::vector m_fictive_name; + Array2D m_fic_diff ; + Array2D m_fic_soret ; + Array2D m_fictive_source_term; + size_t c_offset_F = 7; // CAC + vector m_fictive_schmidt; + vector m_fictive_fuel_inlet_Y; + vector m_fictive_oxidizer_inlet_Y; + + + // ---------------------- + // SOOT RELATED VARIABLES + // ---------------------- + bool m_do_soot_soret = true; + bool m_do_condensation = false; + bool m_do_soot_radiation = false; + bool m_do_coagulation = false; + std::string m_soot_morphology; + bool m_do_retroaction = false; + bool m_do_sg = false; + bool m_do_oxidation = false; + bool m_trash_section = false; + std::string m_collision_model = "rodrigues"; + size_t soot_loglevel=1; + size_t c_offset_S = 7; + size_t n_PAH = 0; + size_t m_haca_model; + double Y_PAH; + double C_PAH; + double dTrashLowLim; + vector W_PAH; + double W_C; + vector n_C; + double N_dimer; + double beta_dimer; + double r_dimer; + double V_dimer; + double beta_fm; + double n_sites; + double kazakovTad; + double ksg; + double kox; + Array2D sootConsumption; + vector vSectMin; + vector vSectMax; + vector dSectMean; + vector dSectCol; + vector rSectCol; + vector aSectCol; + vector vSectMean; + vector sSectMean; + vector Dfractal; + vector kfractal; + vector nNucMean; + vector rNucMean; + vector rSmolMean; + vector PAMean; + vector m_qdotNucleation; + Array2D m_qdotCondensation; + Array2D m_qdotCoagulation; + Array2D m_qdotSg; + Array2D m_qdotOxidation; + vector q; + vector theta_surf; + vector jpower; + vector kpower; + vector mpower; + vector vc2power; + vector vc2powerm; + vector vmax_kpower; + vector vmin_kpower; + vector vmax_jpower; + vector vmin_jpower; + vector vmax_mpower; + vector vmin_mpower; + vector vmaxmc2_kpower; + vector vminpc2_kpower; + vector vmaxmc2_jpower; + vector vminpc2_jpower; + vector vmaxmc2_mpower; + vector vminpc2_mpower; + vector vc2powervect; + vector vc2powermvect; + vector m_section_name; + vector m_precursors; + Array2D m_soot_diff ; + Array2D m_soot_soret ; + Array2D collision_mat; + //Surface reactions + double ak00f, nk00f, ek00f, ak01f, nk01f, ek01f, ak02f, nk02f, ek02f, + ak03f, nk03f, ek03f, ak04f, nk04f, ek04f, ak05f, nk05f, ek05f, + ak06f, nk06f, ek06f, ak07f, nk07f, ek07f; + double ak00b, nk00b, ek00b, ak01b, nk01b, ek01b, ak02b, nk02b, ek02b, + ak03b, nk03b, ek03b, ak04b, nk04b, ek04b, ak05b, nk05b, ek05b, + ak06b, nk06b, ek06b, ak07b, nk07b, ek07b; + double gamma_oh; + // ----------------------------- + // END OF SOOT RELATED VARIABLES + // ----------------------------- + // fixed T and Y values //! Fixed values of the temperature at each grid point that are used when solving //! with the energy equation disabled. @@ -1005,10 +1798,7 @@ class Flow1D : public Domain1D double m_tfixed = -1.0; private: - //! Holds the average of the species mass fractions between grid points j and j+1. - //! Used when building a gas state at the grid midpoints for evaluating transport - //! properties at the midpoints. - vector m_ybar; + }; } diff --git a/include/cantera/oneD/OneDim.h b/include/cantera/oneD/OneDim.h index 1a73ab74aa1..86f53d60fdc 100644 --- a/include/cantera/oneD/OneDim.h +++ b/include/cantera/oneD/OneDim.h @@ -410,7 +410,7 @@ class OneDim int m_nsteps = 0; //! Maximum number of timesteps allowed per call to solve() - int m_nsteps_max = 500; + int m_nsteps_max = 5000; private: //! @name Statistics diff --git a/include/cantera/oneD/Sim1D.h b/include/cantera/oneD/Sim1D.h index 2448bd5ada6..9def31684d1 100644 --- a/include/cantera/oneD/Sim1D.h +++ b/include/cantera/oneD/Sim1D.h @@ -232,9 +232,9 @@ class Sim1D : public OneDim * grid no longer needs refinement based on the refine criteria. * * @param loglevel Controls the amount of diagnostic output. - * @param refine_grid If `true`, the grid will be refined + * @param refine_grid If `refine`, the grid will be refined */ - void solve(int loglevel = 0, bool refine_grid = true); + void solve(int loglevel = 0, const string& refine_grid = "refine"); void eval(double rdt=-1.0, int count = 1) { OneDim::eval(npos, m_state->data(), m_xnew.data(), rdt, count); @@ -254,6 +254,11 @@ class Sim1D : public OneDim //! were removed but not added. int refine(int loglevel=0); + /// Remesh the grid in all domains. + double remesh(int loglevel, const double dist_min=1e9, const double domain_size=50.0); //from MUTAGEN + void addPoint(size_t ndomain, double zpoint, vector xpoint, int loglevel, bool newjac=true); //from MUTAGEN + void getRatio(); //from MUTAGEN + //! Add node for fixed temperature point of freely propagating flame int setFixedTemperature(double t); diff --git a/include/cantera/oneD/StFlow.h b/include/cantera/oneD/StFlow.h deleted file mode 100644 index 268f1428bbc..00000000000 --- a/include/cantera/oneD/StFlow.h +++ /dev/null @@ -1,67 +0,0 @@ -//! @file StFlow.h - -// This file is part of Cantera. See License.txt in the top-level directory or -// at https://cantera.org/license.txt for license and copyright information. - -#ifndef CT_STFLOW_H -#define CT_STFLOW_H - -#include "Flow1D.h" - -namespace Cantera -{ - -/** - * This class represents 1D flow domains that satisfy the one-dimensional - * similarity solution for chemically-reacting, axisymmetric flows. - * - * @deprecated To be removed after %Cantera 3.1; replaced by Flow1D. - * @ingroup flowGroup - */ -class StFlow : public Flow1D -{ -public: - //! Create a new flow domain. - //! @param ph Object representing the gas phase. This object will be used - //! to evaluate all thermodynamic, kinetic, and transport properties. - //! @param nsp Number of species. - //! @param points Initial number of grid points - StFlow(ThermoPhase* ph = 0, size_t nsp = 1, size_t points = 1); - - //! Delegating constructor - StFlow(shared_ptr th, size_t nsp = 1, size_t points = 1); - - //! Create a new flow domain. - //! @param sol Solution object used to evaluate all thermodynamic, kinetic, and - //! transport properties - //! @param id name of flow domain - //! @param points initial number of grid points - StFlow(shared_ptr sol, const string& id="", size_t points=1); - - void eval(size_t j, double* x, double* r, integer* mask, double rdt) override; - - //! Evaluate all residual components at the right boundary. - virtual void evalRightBoundary(double* x, double* res, int* diag, double rdt); - - void evalContinuity(size_t j, double* x, double* r, int* diag, double rdt) override; - -protected: - double wdot(size_t k, size_t j) const { - return m_wdot(k,j); - } - - //! Write the net production rates at point `j` into array `m_wdot` - void getWdot(double* x, size_t j) { - setGas(x,j); - m_kin->getNetProductionRates(&m_wdot(0,j)); - } - - //! Evaluate the residual function. This function is called in eval - //! after updateProperties is called. - virtual void evalResidual(double* x, double* rsd, int* diag, - double rdt, size_t jmin, size_t jmax); -}; - -} - -#endif diff --git a/include/cantera/oneD/refine.h b/include/cantera/oneD/refine.h index 4a9d4e7cafa..c35595c9522 100644 --- a/include/cantera/oneD/refine.h +++ b/include/cantera/oneD/refine.h @@ -128,6 +128,12 @@ class Domain1D; */ int getNewGrid(int n, const double* z, int nn, double* znew); + double remeshFromSolution(int np, const double* z, const double* x, const double dist_min=1e9, const double domain_size=50.0); //from MUTAGEN + + int indxtp(int np,double val,const double* array); //from MUTAGEN + + void getRatio(int np, const double* z, double* x); //from MUTAGEN + //! Returns the number of new grid points that were needed. int nNewPoints() { return static_cast(m_insertPts.size()); @@ -163,6 +169,26 @@ class Domain1D; return (m_keep[j] != REMOVE); } + double z_new(const int m) //from MUTAGEN + { + return m_z_new[m]; + } + + int z_new_size() //from MUTAGEN + { + return m_z_new.size(); + } + + double grad_max() //from MUTAGEN + { + return m_grad_max; + } + + double curve_max() //from MUTAGEN + { + return m_curve_max; + } + /** * Returns the value of the solution component, n, at grid point j. * @@ -222,10 +248,11 @@ class Domain1D; //! Threshold for ignoring small changes around a constant during refinement. double m_min_range = 0.01; - Domain1D* m_domain; //!< Pointer to the domain to be refined. size_t m_nv; //!< Number of components in the domain size_t m_npmax = 1000; //!< Maximum number of grid points + vector m_z_new; //from MUTAGEN + double m_grad_max, m_curve_max; //from MUTAGEN //! Absolute tolerance threshold for solution components in the domain double m_thresh = std::sqrt(std::numeric_limits::epsilon()); diff --git a/include/cantera/transport/AVBPTransport.h b/include/cantera/transport/AVBPTransport.h new file mode 100644 index 00000000000..f6680b4b2ed --- /dev/null +++ b/include/cantera/transport/AVBPTransport.h @@ -0,0 +1,120 @@ +/** + * + * @file AVBPTransport.h + * Header file defining class AVBPTransport which implements + * the simplified transport model used in the solver AVBP + */ + +/* $Author: B. Franzelli (v. 1.7) $ + * $Revision: A. Felden (v 2.1-2.3) $ + * $Date: 01/2018 $ + */ + + +#ifndef CT_AVBPTRAN_H +#define CT_AVBPTRAN_H + +#include "GasTransport.h" +#include "cantera/numerics/DenseMatrix.h" + +// STL includes +#include +#include +#include +#include +#include + +namespace Cantera +{ + +// class GasTransportParams; + +/** + * Class AVBPTransport + * Constant Sch for each species, Pr, and simplified viscosity + */ +class AVBPTransport : public GasTransport +{ + +public: + //! Default constructor. + AVBPTransport() = default; + + //! Return the model id for transport + /*! + * @return cAVBPAverage + */ + // virtual int model() const { + // warn_deprecated("AVBPTransport::model", + // "To be removed after Cantera 2.3."); + // return cAVBPTransport; + // } + string transportModel() const override { + return (m_mode == CK_Mode) ? "AVBP-CK" : "AVBP"; + } + // virtual std::string transportType() const { + // return "AVBP"; + // } + + //! Return the thermal diffusion coefficients + //virtual void getThermalDiffCoeffs(double* const dt); + + //! Returns the mixture thermal conductivity + double thermalConductivity() override; + + //! Get the Electrical mobilities (m^2/V/s). + //virtual void getMobilities(double* const mobil); + + //! Update the internal parameters whenever the temperature has changed + void update_T() override; + + //! Update the internal parameters whenever the concentrations have changed + void update_C() override; + + //virtual void getSpeciesFluxes(size_t ndim, + // const double* const grad_T, + // size_t ldx, + // const double* const grad_X, + // size_t ldf, double* const fluxes); + + //! Initialize the transport object + //virtual bool initGas(GasTransportParams& tr); + void init(ThermoPhase* thermo, int mode=0, int log_level=0) override; + + //! Viscosity of the mixture + virtual double viscosity(); + + virtual void getSpeciesViscosities(double* const visc) { + update_T(); + updateViscosity_T(); + std::copy(m_visc.begin(), m_visc.end(), visc); + } + + //! Mixture diffusion coefficients [m^2/s]. + virtual void getMixDiffCoeffs(double* const d); + + virtual void read_mixture(std::string s); + + size_t avbp_ipea; + vector avbp_pea_coeffs; + +protected: + + //! Calculate the pressure from the ideal gas law + double pressure_ig(); + + double m_lambda; + //bool m_debug; + + // AVBP variables + vector avbp_Sch; + vector avbp_Le; + double avbp_Prandtl; + double avbp_mu0; + double avbp_T0; + double avbp_beta; + std::string avbp_fuel; + +}; +} +#endif diff --git a/install_cantera.py b/install_cantera.py new file mode 100644 index 00000000000..8ad1b706cbc --- /dev/null +++ b/install_cantera.py @@ -0,0 +1,187 @@ +# Small python script for Cantera CERFACS installation + +import sys +import os +import subprocess + + +def fill_cantera_conf(file_path, install_dir_path): + f = open(file_path, 'w') + + text = """\ +prefix = '{0}' +""" + + f.write(text.format(install_dir_path)) + + if argument == 'local': + text = """\ +boost_inc_dir = '/opt/homebrew/Cellar/boost/{0}/include' +verbose_tests = True +""" + # use the output of ls /opt/homebrew/Cellar/boost/ to get the version number + f.write(text.format(subprocess.check_output('ls /opt/homebrew/Cellar/boost/', shell=True).decode('utf-8').split('\n')[0])) + else : + if cluster == 'CALYPSO': + text = """\ +boost_inc_dir = '/softs/local/boost/1.86.0/include' +""" + elif cluster == 'KRAKEN': + text = """\ +boost_inc_dir = '/softs/local/boost/1.78.0_gcc112/include' +""" + f.write(text) + + f.close() + + +def execute_with_live_display(command): + process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) + + while True: + # Read a line from the output + line = process.stdout.readline() + + # Break the loop if there are no more lines + if not line and process.poll() is not None: + break + + # Display the line in real-time + print(line.strip()) + + # Wait for the process to complete + process.wait() + + # Return the exit code of the process + return process.returncode + + +# Asking about the environment +if sys.version_info[0] < 3: + quit('You should compile cantera with python 3 ! Use module load python/3.9.5') + string_argument = raw_input('Are you installing Cantera on NFS machine ? (yes/no) ') + python_version = 2 +else: + string_argument = input('Are you installing Cantera on NFS machine ? (yes/no) ') + python_version = 3 + +if string_argument in ['yes', 'y']: + argument = 'NFS' + cluster = input('On which cluster are you installing Cantera ? (KRAKEN/CALYPSO) ') +elif string_argument in ['no', 'n']: + argument = 'local' +else: + quit('Invalid answer ! \n Really ?! How could you fail a yes or no question ?') + +dir_path = os.path.dirname(os.path.realpath(__file__)) + +install_dir_path = os.path.dirname(os.path.realpath(__file__)) + "/INSTALL_DIR" + +if not os.path.isdir(install_dir_path): + os.mkdir(install_dir_path) + +#create mech_lib folder in INSTALL_DIR +if not os.path.isdir(install_dir_path + "/mech_lib"): + os.mkdir(install_dir_path + "/mech_lib") + +file_path = dir_path + "/cantera.conf" + +if argument == 'local': + print("""To run cantera, the installation of: \n + - python, boost and gcc with brew command. \n + - numpy, cython, scons, wheel and ruamel.yaml with pip3 command. \n + are required.""") + update_argument = input('Do you want to install/update those libraries ? (yes/no) ') + + if update_argument in ['yes', 'y']: + if subprocess.call('which brew', shell=True) == 1: + subprocess.call('/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"', shell=True) + subprocess.call('brew install boost', shell=True) + subprocess.call('brew install gcc', shell=True) + subprocess.call('pip3 install numpy', shell=True) + subprocess.call('pip3 install cython==3.1.1', shell=True) + subprocess.call('pip3 install packaging', shell=True) + subprocess.call('pip3 install scons', shell=True) + subprocess.call('pip3 install wheel', shell=True) + subprocess.call('pip3 install ruamel.yaml', shell=True) + elif update_argument in ['no', 'n']: + pass + else: + quit('Invalid answer ! \n Really ?! How could you fail a yes or no question ?') + + fill_cantera_conf(file_path, install_dir_path) + error = subprocess.call('scons build && scons install', shell=True) +else: + print("""To run cantera, the installation of: \n + - numpy, cython, scons, wheel and ruamel.yaml with pip command. \n + are required.""") + update_argument = input('Do you want to install/update those libraries ? (yes/no) ') + + if update_argument in ['yes', 'y']: + subprocess.call('pip3 install numpy', shell=True) + subprocess.call('pip3 install cython==3.1.1', shell=True) + subprocess.call('pip3 install packaging', shell=True) + subprocess.call('pip3 install scons', shell=True) + subprocess.call('pip3 install wheel', shell=True) + subprocess.call('pip3 install ruamel.yaml', shell=True) + elif update_argument in ['no', 'n']: + pass + else: + quit('Invalid answer ! \n Really ?! How could you fail a yes or no question ?') + + + fill_cantera_conf(file_path, install_dir_path) + error = execute_with_live_display("./run_compil_" + cluster) + + +if not error: + print("*" * 80) + print() + print("To use this brandnew Cantera installation, you must update some of your environment variables.") + print("To do so, you can add the following lines to your .bashrc (or equivalent):") + text="""\ +#cantera-avbp-3.1 +function load_cantera +{7} + source {4} + + {5} + + export PYTHONPATH={0}/lib/python{1}.{2}/site-packages:$PYTHONPATH + export PKG_CONFIG_PATH={0}/lib/pkgconfig:$PKG_CONFIG_PATH + export LD_LIBRARY_PATH={0}/lib:$LD_LIBRARY_PATH + export PATH={0}/bin:$PATH + + #Only if you dont already have a custom lib folder: + export CUSTOM_LIB={0}/mech_lib + export LD_LIBRARY_PATH=$CUSTOM_LIB:$LD_LIBRARY_PATH + +{6} +{8} +""" + #get the output of which python to get the path to the python executable + open_braket_string = "{" + close_bracket_strinc = "}" + pythonpath = subprocess.check_output('which python3', shell=True).decode('utf-8').split('\n')[0] + source_venv = subprocess.check_output('echo $VIRTUAL_ENV', shell=True).decode('utf-8').split('\n')[0] + "/bin/activate" + if argument == 'NFS' and cluster == 'CALYPSO': + module_gcc = "module load gcc/12.3.0" + elif argument == 'NFS' and cluster == 'KRAKEN': + module_gcc = "module load compiler/gcc/11.2.0" + else: + module_gcc = "" + if argument == 'local': + dyld_path = """\ + #Required for MacOS: + export DYLD_LIBRARY_PATH=$CUSTOM_LIB +""" + else: + dyld_path = "" + + print() + print(text.format(install_dir_path,str(python_version), str(sys.version_info[1]),pythonpath,source_venv,module_gcc,dyld_path,open_braket_string,close_bracket_strinc)) + print() + print("DONT FORGET TO SOURCE YOUR .bashrc !") + print() + print("*" * 80) + diff --git a/interfaces/cython/cantera/_onedim.pxd b/interfaces/cython/cantera/_onedim.pxd index 37c326d1862..b4b0b1b8566 100644 --- a/interfaces/cython/cantera/_onedim.pxd +++ b/interfaces/cython/cantera/_onedim.pxd @@ -13,7 +13,7 @@ from .thermo cimport * cdef extern from "cantera/oneD/DomainFactory.h" namespace "Cantera": cdef shared_ptr[CxxDomain1D] CxxNewDomain1D "newDomain" ( - string, shared_ptr[CxxSolution], string) except +translate_exception + string, shared_ptr[CxxSolution], string, size_t, size_t) except +translate_exception cdef extern from "cantera/oneD/Domain1D.h": @@ -38,6 +38,7 @@ cdef extern from "cantera/oneD/Domain1D.h": double transient_atol(size_t) double z(size_t) void setupGrid(size_t, double*) except +translate_exception + void setupGrid(size_t) except +translate_exception void setID(string) string& id() string domainType "type"() @@ -83,6 +84,8 @@ cdef extern from "cantera/oneD/Flow1D.h": void setBoundaryEmissivities(double, double) double leftEmissivity() double rightEmissivity() + void setThick(double) + double getThick() void solveEnergyEqn() void fixTemperature() cbool doEnergy(size_t) @@ -100,7 +103,71 @@ cdef extern from "cantera/oneD/Flow1D.h": double rightControlPointTemperature() except +translate_exception double rightControlPointCoordinate() except +translate_exception void setRightControlPointTemperature(double) except +translate_exception + void setSections(size_t) + size_t getSections() + void setFictives(size_t) + size_t getFictives() + double getFictiveSchmidt(size_t) + void setFictiveSchmidt(vector[double]&) + double getFictive_fuel_inlet_Y(size_t) + void setFictive_fuel_inlet_Y(vector[double]&) + double getFictive_oxidizer_inlet_Y(size_t) + void setFictive_oxidizer_inlet_Y(vector[double]&) + void setFictiveSourceTermProfile(string, vector[double]&, vector[double]&) + + void setFlameletFlow() + + + void setPrecursors(vector[size_t]&) + void showSootSections() + void setSootSoret(cbool) + void enableCondensation(cbool) + cbool condensationEnabled() + void enableCoagulation(cbool) + cbool coagulationEnabled() + void setCollisionModel(string) + string getCollisionModel() + void enableRetroaction(cbool) + cbool retroactionEnabled() + void setSootMorphology(string) + cbool getSootMorphology() + void enableSurfaceGrowth(cbool) + cbool surfaceGrowthEnabled() + void enableOxidation(cbool) + cbool oxidationEnabled() + void enableSootRadiation(cbool) + cbool sootRadiationEnabled() + void enableSootSoret(cbool) + cbool sootSoretEnabled() + void enableTrashSection(double) + cbool trashSectionEnabled() + void finalizeSoot() + size_t getHaca() + void setHaca(size_t) + double getKazakovTad() + void setKazakovTad(double) + size_t getSootLoglevel() + void setSootLoglevel(size_t) + + vector[double]& vMin() + vector[double]& vMax() + vector[double]& vMean() + vector[double]& dMean() + vector[double]& sMean() + vector[double]& dCol() + vector[double]& aCol() + vector[double]& thetaSoot() + vector[double]& fractalPrefactor() + vector[double]& fractalDimension() + double sootPrimaryPart(size_t) + double sootPrimaryDiam(size_t) + double rhoSoot() + double getSootInception(size_t) + double getSootCondensation(size_t, size_t) + double getSootCoagulation(size_t, size_t) + double getSootSg(size_t, size_t) + double getSootOxidation(size_t, size_t) cdef extern from "cantera/oneD/Sim1D.h": cdef cppclass CxxSim1D "Cantera::Sim1D": @@ -115,7 +182,7 @@ cdef extern from "cantera/oneD/Sim1D.h": void setMaxTimeStepCount(int) int maxTimeStepCount() void getInitialSoln() except +translate_exception - void solve(int, cbool) except +translate_exception + void solve(int, string&) except +translate_exception void refine(int) except +translate_exception void setRefineCriteria(size_t, double, double, double, double) except +translate_exception vector[double] getRefineCriteria(int) except +translate_exception @@ -158,6 +225,13 @@ cdef extern from "cantera/oneD/Sim1D.h": cdef extern from "cantera/thermo/IdealGasPhase.h": cdef cppclass CxxIdealGasPhase "Cantera::IdealGasPhase" +cdef extern from "cantera/oneD/Flamelet.h": + cdef cppclass CxxFlamelet "Cantera::Flamelet" (CxxFlow1D): + CxxFlamelet(CxxFlow1D*) + double chiSt() #except +translate_exception + double zSt() #except +translate_exception + void setChiSt(double) #except +translate_exception + void setzSt(double) #except +translate_exception cdef class Domain1D: cdef shared_ptr[CxxDomain1D] _domain @@ -175,6 +249,9 @@ cdef class ReactingSurface1D(Boundary1D): cdef class FlowBase(Domain1D): cdef CxxFlow1D* flow +cdef class FlameletFlow(FlowBase): + cdef CxxFlamelet* flamelet + cdef class Sim1D: cdef CxxSim1D* sim cdef readonly object domains diff --git a/interfaces/cython/cantera/_onedim.pyx b/interfaces/cython/cantera/_onedim.pyx index 3ba626eb738..88c07af2c0a 100644 --- a/interfaces/cython/cantera/_onedim.pyx +++ b/interfaces/cython/cantera/_onedim.pyx @@ -306,11 +306,17 @@ cdef class Boundary1D(Domain1D): self.boundary = NULL else: self._domain = CxxNewDomain1D( - stringify(self._domain_type), phase._base, stringify(name)) + stringify(self._domain_type), phase._base, stringify(name), + #add kwargs if kwargs provided + # Get 'sections' from kwargs, defaulting to 0 if not provided + kwargs.get('sections', 0), + # Get 'fictives' from kwargs, defaulting to 0 if not provided + kwargs.get('fictives', 0), + ) self.domain = self._domain.get() self.boundary = self.domain - def __init__(self, phase, name=None): + def __init__(self, phase, name=None, **kwargs): if self.boundary is NULL: raise TypeError("Can't instantiate abstract class Boundary1D.") Domain1D.__init__(self, phase, name=name) @@ -447,7 +453,13 @@ cdef class FlowBase(Domain1D): """ Base class for 1D flow domains """ def __cinit__(self, _SolutionBase phase, *args, name="", **kwargs): self._domain = CxxNewDomain1D( - stringify(self._domain_type), phase._base, stringify(name)) + stringify(self._domain_type), phase._base, stringify(name), + #add kwargs if kwargs provided + # Get 'sections' from kwargs, defaulting to 0 if not provided + kwargs.get('sections', 0), + # Get 'fictives' from kwargs, defaulting to 0 if not provided + kwargs.get('fictives', 0), + ) self.domain = self._domain.get() self.flow = self.domain @@ -591,6 +603,618 @@ cdef class FlowBase(Domain1D): data[j] = self.flow.radiativeHeatLoss(j) return data + # BEGIN of fictive species API + + property fictive_equations: + """ + Returns number of fictive equations. + + :param None + + :return int : + Number of fictive equations + """ + def __set__(self, nFic): + #self.flow.setFictives(nFic) + raise KeyError ('/!\ FICTIVE SPECIES ERROR : You cannot set equations number this way !') + def __get__(self): + return self.flow.getFictives() + + property fictive_schmidt : + """ + Gets / sets flame Schmidt number of the fictive species + + : param adiabatic_temperature = double : + adiabatic temperature (K) + + : return double : + adiabatic temperature (K) + """ + def __set__(self, fictive_schmidt): + self.flow.setFictiveSchmidt(fictive_schmidt) + + property fictive_fuel_inlet_Y : + """ + Gets / sets flame temperature used as reference for Kazakov's surface reactions model + + : param adiabatic_temperature = double : + adiabatic temperature (K) + + : return double : + adiabatic temperature (K) + """ + def __set__(self, fictive_fuel_inlet_Y): + self.flow.setFictive_fuel_inlet_Y(fictive_fuel_inlet_Y) + + property fictive_oxidizer_inlet_Y : + """ + Gets / sets flame temperature used as reference for Kazakov's surface reactions model + + : param adiabatic_temperature = double : + adiabatic temperature (K) + + : return double : + adiabatic temperature (K) + """ + def __set__(self, fictive_oxidizer_inlet_Y): + self.flow.setFictive_oxidizer_inlet_Y(fictive_oxidizer_inlet_Y) + + def set_fictive_source_term_profile(self, name, pos, Omegas): + """Set the fixed temperature profile. This profile is used + whenever the energy equation is disabled. + + :param pos: + arrray of relative positions from 0 to 1 + :param temp: + array of temperature values + + >>> d.set_fixed_temp_profile(array([0.0, 0.5, 1.0]), + ... array([500.0, 1500.0, 2000.0])) + """ + cdef vector[double] x, y + for p in pos: + x.push_back(p) + for value in Omegas: + y.push_back(value) + self.flow.setFictiveSourceTermProfile(stringify(name) ,x, y) + + # BEGIN of soot API + + property soot_loglevel: + """ + Outputs soot sections informations. + + :param None + + :return None + """ + def __set__(self, loglevel): + self.flow.setSootLoglevel(loglevel) + def __get__(self): + return self.flow.getSootLoglevel() + + property soot_sections: + """ + Returns number of soot sections. + + :param None + + :return int : + Number of sections + """ + def __set__(self, nSec): + #self.flow.setSections(nSec) + raise KeyError ('/!\ SOOT ERROR : You cannot set sections number this way !') + def __get__(self): + return self.flow.getSections() + + property soot_precursors: + """ + Sets soot precursors. + + : param precrursors = list[str] : + precursors names (in mechanism nomenclature) + + : return None + """ + def __set__(self, precursors): + cdef vector[size_t] id_precursors + if isinstance(precursors, str): + precursors = [precursors] + av_precursors = [precursor for precursor in precursors if precursor in self.gas.species_names] + id_precursors = [self.component_index(precursor) for precursor in av_precursors] + if len(id_precursors) == 0: + raise KeyError('/!\ SOOT ERROR : No acceptable precursors !') + else: + self.flow.setPrecursors(id_precursors) + def __get__(self): + raise NotImplementedError('Getter not implemented yet.') + + property soot_trash_section: + """ + Gets / sets trash section size (<0 if disabled). + + : param trash_section = float : + trash section size [m] + + : return bool : + trash section enabled + """ + def __set__(self, trash_section): + self.flow.enableTrashSection(trash_section) + def __get__(self): + return self.flow.trashSectionEnabled() + + property soot_do_retroaction: + """ + Gets / sets whether retroaction on gas phase is activated or not. + + : param do_retroaction = bool : + reatroaction enabled + + : return bool : + retroaction enabled + """ + def __set__(self, do_retroaction): + self.flow.enableRetroaction(do_retroaction) + def __get__(self): + return self.flow.retroactionEnabled() + + property soot_do_condensation: + """ + Gets / sets whether dimer condensation on soot particles is activated or not. + + : param do_condensation = bool : + condensation enabled + + : return bool : + condensation enabled + """ + def __set__(self, do_condensation): + self.flow.enableCondensation(do_condensation) + def __get__(self): + return self.flow.condensationEnabled() + + property soot_do_coagulation: + """ + Gets / sets whether coagulation between soot particles is activated or not. + + : param do_coagulation = bool : + coagulation enabled + + : return bool : + coagulation enabled + """ + def __set__(self, do_coagulation): + self.flow.enableCoagulation(do_coagulation) + def __get__(self): + return self.flow.coagulationEnabled() + + property soot_morphology: + """ + """ + def __set__(self, morphology_model): + self.flow.setSootMorphology(stringify(morphology_model)) + def __get__(self): + self.flow.getSootMorphology() + + property soot_collision_model: + """ + Gets / sets whether coagulation between soot particles is activated or not. + + : return str : + coagulation enabled + """ + def __set__(self, collision_model): + self.flow.setCollisionModel(stringify(collision_model)) + def __get__(self): + return self.flow.getCollisionModel() + + property soot_haca: + """ + Gets / sets haca model. + : param haca_model = str or int : + "mauss" : 1 + "blanquart" : 2 + "kazakov" : 3 + "mauss tuned" : 11 + : return int : + haca model + """ + def __set__(self, haca_model): + haca = 0 + if haca_model in [1, 'mauss']: + haca = 1 + if haca_model in [11, 'mauss tuned']: + haca = 11 + elif haca_model in [2, 'blanquart']: + haca = 2 + elif haca_model in [3, 'kazakov']: + haca = 3 + if haca not in [1,11,2,3]: + raise KeyError ('/!\ SOOT ERROR : haca_model must be mauss(1), mauss tuned(11), blanquart(2), or kazakov(3)') + self.flow.setHaca(haca) + def __get__(self): + return self.flow.getHaca() + + property soot_do_surface_growth: + """ + Gets / sets whether acetylene condensation on soot particles is activated or not. + + : param do_surface_growth = bool : + surface growth enabled + + : return bool : + surface growth enabled + """ + def __set__(self, do_surface_growth): + self.flow.enableSurfaceGrowth(do_surface_growth) + def __get__(self): + return self.flow.surfaceGrowthEnabled() + + property soot_do_oxidation: + """ + Gets / sets whether soot particles oxidation is activated or not. + + : param do_oxidation = bool : + oxidation enabled + + : return bool : + oxidation enabled + """ + def __set__(self, do_oxidation): + self.flow.enableOxidation(do_oxidation) + def __get__(self): + return self.flow.oxidationEnabled() + + property kazakov_flame_temperature : + """ + Gets / sets flame temperature used as reference for Kazakov's surface reactions model + + : param adiabatic_temperature = double : + adiabatic temperature (K) + + : return double : + adiabatic temperature (K) + """ + def __set__(self, tad): + self.flow.setKazakovTad(tad) + def __get__(self): + return self.flow.getKazakovTad() + + property soot_do_radiation: + """ + Gets / sets whether soot particles radiative heat losses are considered or not. + + : param do_soot_radiation = bool : + soot radiation enabled + + : return bool : + soot radiation enabled + """ + def __set__(self,do_soot_radiation): + if not self.energy_enabled and do_soot_radiation: + if self.soot_loglevel >= 1: + print(' ') + print('SOOT INFO : Energy equation is disabled') + print(" ==> RHL won't be computed") + self.radiation_enabled = False + if not self.radiation_enabled and do_soot_radiation: + if self.soot_loglevel >= 1: + print(' ') + print('SOOT INFO : RHL were disabled') + print(" ==> RHL now enabled") + self.radiation_enabled = True + self.flow.enableSootRadiation(do_soot_radiation) + def __get__(self): + return self.flow.sootRadiationEnabled() + + property soot_do_soret: + """ + Gets / sets whether soret effect is computed on soot particles. + + : param do_soot_soret = bool : + soot soret enabled + + : return bool : + soot soret enabled + """ + def __set__(self,do_soot_soret): + self.flow.enableSootSoret(do_soot_soret) + def __get__(self): + return self.flow.sootSoretEnabled() + + property soot_finalize: + """ + Generates sections, collision matrix and loads surface reactions constants if needed. + To be used after modifications on : collision model, precursors, oxidation or surface growth. + + : param None + + : return None + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return self.flow.finalizeSoot() + + + property sections_min_v: + """" + Gets soot sections minimal volumes. + + : param None + + : return (sections) numpy array : + minimal volume of each section [m-3] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return np.asarray(self.flow.vMin()) + + property sections_max_v: + """" + Gets soot sections maximal volumes. + + : param None + + : return (sections) numpy array : + maximal volume of each section [m-3] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return np.asarray(self.flow.vMax()) + + property sections_mean_v: + """" + Gets soot sections mean volumes. + + : param None + + : return (sections) numpy array : + mean volume of each section [m-3] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return np.asarray(self.flow.vMean()) + + property sections_mean_d: + """" + Gets soot sections mean diameters. + + : param None + + : return (sections) numpy array : + mean diameter of each section [m] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return np.asarray(self.flow.dMean()) + + property sections_col_d: + """" + Gets soot sections colision diameters. + + : param None + + : return (sections) numpy array : + colision diameter of each section [m-3] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return np.asarray(self.flow.dCol()) + + property sections_col_a: + """" + Gets soot sections collisional cross-section + + : param None + + : return (sections) numpy array : + mean section of each section [m-2] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return np.asarray(self.flow.aCol()) + + property sections_mean_s: + """" + Gets soot sections surface area + + : param None + + : return (sections) numpy array : + mean section of each section [m-2] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return np.asarray(self.flow.sMean()) + + property sections_fractal_prefactor: + """ + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return np.asarray(self.flow.fractalPrefactor()) + + property sections_fractal_dimension: + """ + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return np.asarray(self.flow.fractalDimension()) + + property sections_theta: + """ + Gets soot sections theta value (fractality). + + : param None + + : return (sections) numpy array : + theta factor of each section + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return np.asarray(self.flow.thetaSoot()) + + property soot_density: + """" + Gets soot density. + + : param None + + : return float : + soot density [kg.m-3] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + return self.flow.rhoSoot() + + # property soot_dump_inception: + # """ + # Gets soot nucleation source terms. + + # : param None + + # : return (sections x points) numpy array : + # inception source terms [s-1] + # """ + # def __set__(self, dummy): + # raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + # def __get__(self): + # data = np.zeros((self.soot_sections, self.n_points)) + # for j in range(self.n_points): + # data[0,j] = self.flow.getSootInception(j) + # return data + + property soot_dump_condensation: + """ + Gets soot condensation source terms. + + : param None + + : return (sections x points) numpy array : + condensation source terms [s-1] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + data = np.empty((self.soot_sections, self.n_points)) + for k in range(self.soot_sections): + for j in range(self.n_points): + data[k,j] = self.flow.getSootCondensation(k,j) + return data + + property soot_dump_coagulation: + """ + Gets soot coagulation source terms. + + : param None + + : return (sections x points) numpy array : + coagulation source terms [s-1] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + data = np.empty((self.soot_sections, self.n_points)) + for k in range(self.soot_sections): + for j in range(self.n_points): + data[k,j] = self.flow.getSootCoagulation(k,j) + return data + + property soot_dump_surface_growth: + """ + Gets soot surface growth source terms. + + : param None + + : return (sections x points) numpy array : + surface growth source terms [s-1] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + data = np.empty((self.soot_sections, self.n_points)) + for k in range(self.soot_sections): + for j in range(self.n_points): + data[k,j] = self.flow.getSootSg(k,j) + return data + + property soot_dump_oxidation: + """ + Gets soot oxidation source terms. + + : param None + + : return (sections x points) numpy array : + oxidation source terms [s-1] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + data = np.empty((self.soot_sections, self.n_points)) + for k in range(self.soot_sections): + for j in range(self.n_points): + data[k,j] = self.flow.getSootOxidation(k,j) + return data + + property sections_np: + """ + Gets number of primary particles per aggregate. + + : param None + + : return (sections) numpy array : + number of primary particles per aggregate + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + data = np.empty(self.soot_sections) + for k in range(self.soot_sections): + data[k] = self.flow.sootPrimaryPart(k) + return data + + property sections_dp: + """ + Gets primary particles diameter. + + : param None + + : return (sections) numpy array : + primary particles diameter [m] + """ + def __set__(self, dummy): + raise KeyError ('/!\ SOOT ERROR : You cannot set such data !') + def __get__(self): + data = np.empty(self.soot_sections) + for k in range(self.soot_sections): + data[k] = self.flow.sootPrimaryDiam(k) + return data + + # END of soot API + + property thick: + """ + Thickening that will be applied [JW] + """ + def __set__(self, thickness): + self.flow.setThick(thickness) + def __get__(self): + return self.flow.getThick() + def set_free_flow(self): """ Set flow configuration for freely-propagating flames, using an internal @@ -606,6 +1230,13 @@ cdef class FlowBase(Domain1D): """ self.flow.setAxisymmetricFlow() + def set_flamelet_flow(self): + """ + Set flow configuration for flamelet solutions, using specified inlet + mass fluxes. + """ + self.flow.setFlameletFlow() + @property def type(self): """ @@ -695,6 +1326,37 @@ cdef class FreeFlow(FlowBase): _domain_type = "free-flow" +cdef class FlameletFlow(FlowBase): + """A flamelet flow domain. The equations solved are standard equations for + adiabatic one-dimensional flow in Z-space. The solution variables are: + + *T* + temperature + + *Y_k* + species mass fractions + + """ + _domain_type = "flamelet-flow" + + def __cinit__(self, _SolutionBase phase, *args, name="", **kwargs): + self.flamelet = self.flow + + property ChiSt: + """ ChiSt """ + def __get__(self): + return self.flamelet.chiSt() + def __set__(self, val): + self.flamelet.setChiSt(val) + + property ZSt: + """ ZSt """ + def __get__(self): + return self.flamelet.zSt() + def __set__(self, val): + self.flamelet.setzSt(val) + + cdef class UnstrainedFlow(FlowBase): r"""An unstrained flow domain. The equations solved are standard equations for adiabatic one-dimensional flow. The solution variables are: @@ -983,8 +1645,8 @@ cdef class Sim1D: def show(self): """ print the current solution. """ - if not self._initialized: - self.set_initial_guess() + # if not self._initialized: + # self.set_initial_guess() self.sim.show() def set_time_step(self, stepsize, n_steps): @@ -1036,7 +1698,7 @@ cdef class Sim1D: """ return False - def solve(self, loglevel=1, refine_grid=True, auto=False): + def solve(self, loglevel=1, refine_grid='refine', auto=False): """ Solve the problem. @@ -1044,7 +1706,8 @@ cdef class Sim1D: integer flag controlling the amount of diagnostic output. Zero suppresses all output, and 5 produces very verbose output. :param refine_grid: - if True, enable grid refinement. + if "refine", enable grid refinement, + if "remesh", remeshing of the grid. :param auto: if True, sequentially execute the different solution stages and attempt to automatically recover from errors. Attempts to first solve on the initial grid with energy enabled. If that does not @@ -1055,10 +1718,19 @@ cdef class Sim1D: will be calculated. """ + if type(refine_grid) == bool: + print("WARNING : Keyword status has been changed to string to enable the remesh feature") + print("True --> 'refine' or 'remesh'") + print("False --> 'disabled'") + if refine_grid: + refine_grid = 'refine' + else: + refine_grid = 'disabled' + if not auto: if not self._initialized: self.set_initial_guess() - self.sim.solve(loglevel, refine_grid) + self.sim.solve(loglevel, stringify(refine_grid)) return def set_transport(multi): @@ -1132,7 +1804,7 @@ cdef class Sim1D: log('Solving on {} point grid with energy equation enabled', N) self.energy_enabled = True try: - self.sim.solve(loglevel, False) + self.sim.solve(loglevel, stringify('disabled')) solved = True except CanteraError as e: log(str(e)) @@ -1154,7 +1826,7 @@ cdef class Sim1D: log('Initial solve failed; Retrying with energy equation disabled') self.energy_enabled = False try: - self.sim.solve(loglevel, False) + self.sim.solve(loglevel, stringify('disabled')) solved = True except CanteraError as e: log(str(e)) @@ -1170,7 +1842,7 @@ cdef class Sim1D: log('Solving on {} point grid with energy equation re-enabled', N) self.energy_enabled = True try: - self.sim.solve(loglevel, False) + self.sim.solve(loglevel, stringify('disabled')) solved = True except CanteraError as e: log(str(e)) @@ -1182,11 +1854,11 @@ cdef class Sim1D: restore_tolerances() raise e - if solved and not self.extinct() and refine_grid: + if solved and not self.extinct() and refine_grid != 'disabled': # Found a non-extinct solution on the fixed grid log('Solving with grid refinement enabled') try: - self.sim.solve(loglevel, True) + self.sim.solve(loglevel, stringify('refine')) solved = True except CanteraError as e: log(str(e)) @@ -1205,7 +1877,7 @@ cdef class Sim1D: if self.extinct(): log('Flame is extinct on {} point grid', N) - if not refine_grid: + if refine_grid == 'disabled': break if not solved: @@ -1225,7 +1897,7 @@ cdef class Sim1D: # Final call with expensive options enabled if have_user_tolerances or solve_multi or soret_doms: - self.sim.solve(loglevel, refine_grid) + self.sim.solve(loglevel, stringify('refine')) def refine(self, loglevel=1): """ diff --git a/interfaces/cython/cantera/composite.py b/interfaces/cython/cantera/composite.py index 4b459625993..606e3a945cf 100644 --- a/interfaces/cython/cantera/composite.py +++ b/interfaces/cython/cantera/composite.py @@ -7,6 +7,11 @@ import csv as _csv import importlib.metadata import warnings +import shutil +import filecmp +import subprocess +import time +import os _pandas = None @@ -395,6 +400,171 @@ def f(self, *args, **kwargs): setattr(Quantity, _attr, _prop(_attr)) +# A pure-Python class to store weakrefs to +class _WeakrefProxy: + pass + + +def compile_fortran(f90_filename, force=False, fortran_format='f90', + mechanism_lib=None, output=False, remote_install=True): + """ Creates dynamic library to compute chemistry source terms for Cantera + + Compile a f90 file (potentially generated through create_mech_f90) containing + all routines necessary to return wdot to Cantera during runs. The output is a + dynamic library, used in Cantera via the custom kinetics keyword. + + :param f90_filename: name of the f90 file to compile + :param force: if True, compiles fortran even if it hasn't been changed + :param fortran_format: string specifying if it's for example in f77 format + :param mechanism_lib: path to the directory where dynamic libraries are to be compiled + :param output: if True displays the output of the make + :param remote_install: if False the compilation will be done automatically in the sources + :return: None + """ + + ## Test to know if subroutine has the right name to do the compiling + line_custom = None + f = open(f90_filename,'r') + for lines in f.readlines(): + if 'subroutine' in lines.lower() and '(p,t,y,wdot)' in lines.replace(" ","").lower(): + line_custom = lines + break + f.close() + + if line_custom == None: + print("The main subroutine of the f90 file should be written : 'subroutine customkinetics (P, T, y, wdot)' to work") + sys.exit() + else: + if 'customkinetics' not in line_custom.lower(): + print("The main subroutine of the f90 file should be written : 'subroutine customkinetics (P, T, y, wdot)' to work") + sys.exit() + + # Check installation path + if not remote_install: + # Finds the path to the cantera module and then copies the f90 file in the correct directory + path_to_init = os.path.realpath(__file__) + + terminator = path_to_init.rfind('/lib') + path = (path_to_init[:terminator]) + + lib_name = '/lib' + + path_to_dir = path + lib_name + + if not os.path.isdir(path_to_dir) and os.path.isdir(path_to_dir + '64'): + lib_name = '/lib64' + path_to_dir = path + lib_name + + elif not os.path.isdir(path_to_dir) and not os.path.isdir(path_to_dir + '64'): + print('There is a problem with your installation, ' + path_to_dir + ' does not exist') + sys.exit() + + elif not os.environ.get('CUSTOM_LIB'): + if mechanism_lib: + path_to_dir = mechanism_lib + else: + # path_to_file = os.path.realpath(__file__) + # terminator = path_to_file.rfind('/') + # path = (path_to_file[:terminator]) + # lib_name = '/mech_lib' + + path_to_dir = './mech_lib' + + path_to_dir = os.path.abspath(path_to_dir) + + if not os.path.isdir(path_to_dir): + try: + os.mkdir(path_to_dir) + except PermissionError: + print("Please specify a mech_lib directory to write in that is accessible " + "with the argument mechanism_lib=the_path_you_want") + quit() + else: + print('The directory ' + path_to_dir + ' has been created') + print('The necessary files for the compilation and customised kinetics run will be stored there') + print("If this location does not suit you, please specify a path as mechanism_lib argument") + + else: + path_to_dir = os.environ['CUSTOM_LIB'] + + # Correct path definitions + + path_to_ext = path_to_dir + '/customkinetics.f90' + path_to_makefile = path_to_dir + '/Makefile' + + make_call = 'make -C ' + path_to_dir + if not output: + make_call += ' &> compilation_output.txt' + + # Copying f90 file to the right place + + if not f90_filename.endswith('.f90'): + f90_filename = f90_filename + '.f90' + + if not os.path.isfile(path_to_ext) or not filecmp.cmp(f90_filename, path_to_ext) or force: + + shutil.copy(f90_filename, path_to_ext) + + # Checks if the Makefile exists, if not creates it + if not os.path.isfile(path_to_makefile): + + f = open(path_to_makefile, 'w') + text = """\ +customkinetics.so: customkinetics.f90 +\tgfortran -ffixed-line-length-0 -c customkinetics.f90 -g -fPIC -o customkinetics.o +\tgfortran -shared -o customkinetics.so customkinetics.o + """ + if fortran_format == 'f77': + text = """\ +customkinetics.so: customkinetics.f90 +\tgfortran -ffixed-line-length-0 -ffixed-form -c customkinetics.f90 -g -fPIC -o customkinetics.o +\tgfortran -shared -o customkinetics.so customkinetics.o + """ + f.write(text) + f.close() + print('The Makefile was missing or wrongly named') + print('The correct Makefile has been created (' + path_to_makefile + ')') + + # In remote installation, sets the correct LD_LIBRARY_PATH for the dynamic library + if not os.environ.get('CUSTOM_LIB'): + custom_env_set = 'export CUSTOM_LIB=' + path_to_dir + environment_set = 'export LD_LIBRARY_PATH=$CUSTOM_LIB:$LD_LIBRARY_PATH' + + if mechanism_lib: + dir_status = 'you chose' + else: + dir_status = 'automatically created' + + text = ("""\ + +This part is not automated as it would require sneaky modifications of your bashrc and that is privacy violation ! + +Please copy those commands in your bashrc (or execute them in your shell): +{0} +{1} + +It will add the directory {2} to the dynamic library path blab bla bla, informatics stuff ... + +I advise you stick to only one directory for the compilation for 2 reasons: +- 1: it will be boring to add the path again. +- 2: it's absolutely useless to have several.""") + + print(text.format(custom_env_set, environment_set, dir_status)) + sys.exit() + + process = subprocess.call(make_call, shell=True) + + if process != 0: + print('The compilation of the f90 file failed ! There is something wrong ...') + if not output: + print('Check compilation_output.txt for intel') + exit() + else: + + print('Compilation of the f90 successful') + subprocess.call('rm -f compilation_output.txt', shell=True) + time.sleep(0.05) # Necessary for python to understand there was a change + class SolutionArray(SolutionArrayBase): """ A class providing a convenient interface for representing many thermodynamic diff --git a/interfaces/cython/cantera/cti2yaml.py b/interfaces/cython/cantera/cti2yaml.py index dc598ffb4b7..b7895987c64 100644 --- a/interfaces/cython/cantera/cti2yaml.py +++ b/interfaces/cython/cantera/cti2yaml.py @@ -110,12 +110,17 @@ def applyUnits(value): 'GasKinetics': 'gas', 'Interface': 'surface', 'Edge': 'edge', + 'AVBP': 'AVBP', 'Mix': 'mixture-averaged', + 'mixture-averaged': 'mixture-averaged', 'Multi': 'multicomponent', + 'multicomponent': 'multicomponent', 'Ion': 'ionized-gas', 'molar_volume': 'species-molar-volume', 'solvent_volume': 'solvent-molar-volume', - 'unity': 'unity' + 'unity': 'unity', + 'UnityLewis': 'unity', + 'custom': 'custom', } # constants that can be used in .cti files diff --git a/interfaces/cython/cantera/kinetics.pxd b/interfaces/cython/cantera/kinetics.pxd index e341f762ed1..426e379ee33 100644 --- a/interfaces/cython/cantera/kinetics.pxd +++ b/interfaces/cython/cantera/kinetics.pxd @@ -40,6 +40,8 @@ cdef extern from "cantera/kinetics/Kinetics.h" namespace "Cantera": void invalidateCache() except +translate_exception void resizeReactions() + void closeDynamicLib() except +translate_exception + shared_ptr[CxxReaction] reaction(size_t) except +translate_exception double reactantStoichCoeff(int, int) except +translate_exception double productStoichCoeff(int, int) except +translate_exception diff --git a/interfaces/cython/cantera/kinetics.pyx b/interfaces/cython/cantera/kinetics.pyx index 43168f365a1..3da95917668 100644 --- a/interfaces/cython/cantera/kinetics.pyx +++ b/interfaces/cython/cantera/kinetics.pyx @@ -137,6 +137,13 @@ cdef class Kinetics(_SolutionBase): if not 0 <= n < self.n_total_species: raise ValueError("Kinetics Species index ({0}) out of range".format(n)) + def reset_custom(self): + """ + Function calling the dlclose in CustomKinetics + in order to close the dynamic library (handle) + """ + self.kinetics.closeDynamicLib() + def kinetics_species_index(self, species, int phase=0): """ The index of species ``species`` of phase ``phase`` within arrays returned diff --git a/interfaces/cython/cantera/onedim.py b/interfaces/cython/cantera/onedim.py index e02af7c3b34..a7836e07aa2 100644 --- a/interfaces/cython/cantera/onedim.py +++ b/interfaces/cython/cantera/onedim.py @@ -5,6 +5,8 @@ from pathlib import Path import warnings import numpy as np +import csv as _csv +import os from ._cantera import * from .composite import Solution, SolutionArray @@ -25,12 +27,48 @@ def __init__(self, domains, gas, grid=None): if grid is None: grid = np.linspace(0.0, 0.1, 6) self.flame.grid = grid + # self.flame.soot_sections = sections super().__init__(domains) #: The `Solution` object representing the species and reactions in the flame self.gas = gas self.flame.P = gas.P + def other_components(self, domain=None): + """ + The method returns simulation components that are specific to a class + derived from `FlameBase` or a specific ``domain`` within the `FlameBase` + simulation object. Entries may include: + + * ``grid``: grid point positions along the flame [m] + * ``velocity``: normal velocity [m/s] + * ``spread_rate``: tangential velocity gradient [1/s] + * ``lambda``: radial pressure gradient [N/m^4] + * ``eField``: electric field strength + + :param domain: + Index of a specific domain within the `Sim1D.domains` + list. The default is to return other columns of the `Sim1D` object. + + .. deprecated:: 3.0 + + Method to be removed after Cantera 3.0. After moving SolutionArray HDF + export to the C++ core, this method is unused. + """ + warnings.warn("FlameBase.other_components: Method to be removed after " + "Cantera 3.0 (unused).", DeprecationWarning, stacklevel=2) + if domain is None: + return self._other + + dom = self.domains[self.domain_index(domain)] + if isinstance(dom, Inlet1D): + return tuple([e for e in self._other + if e not in {'grid', 'lambda', 'eField'}]) + elif isinstance(dom, (FreeFlow, AxisymmetricFlow, IdealGasFlow, FlameletFlow)): + return self._other + else: + return () + def set_refine_criteria(self, ratio=10.0, slope=0.8, curve=0.8, prune=0.0): """ Set the criteria used for grid refinement. @@ -251,6 +289,502 @@ def boundary_emissivities(self, epsilon): raise ValueError("Boundary emissivities must both be set at the same time.") self.flame.boundary_emissivities = epsilon[0], epsilon[1] + + @property + def fic_Y(self): + """ + Gets fictive mass fraction. + + : param None + + : return (fictives equations x points) numpy array : + fictive mass fraction for each equations at each point + """ + data = np.empty((self.flame.fictive_equations, self.flame.n_points)) + ns = self.flame.fictive_equations + for k in range(ns): + data[k,:] = self.profile(self.flame, 'Yfic_'+str(k)) + + return data + + # BEGIN of fictive species API + def add_fic(self, fictive_schmidt=[0], fictive_fuel_inlet_Y = [0], fictive_oxidizer_inlet_Y=[0] ): + if self.flame.fictive_equations == 0: + raise CanteraError('/!\ FICTIVES SPECIES ERROR : cannot set fictive equations') + self.flame.fictive_schmidt = fictive_schmidt + self.flame.fictive_fuel_inlet_Y = fictive_fuel_inlet_Y + self.flame.fictive_oxidizer_inlet_Y = fictive_oxidizer_inlet_Y + + # BEGIN of soot API + + def soot_setup(self, precursors=["A2"], condensation=True, coagulation=True, morphology='rodrigues', collision_model='rodrigues', + retroaction=True, haca_model = 'mauss', kazakov_temperature = 0, + surface_growth=True, oxidation=True, radiation=True, trash_section=-1.0, + loglevel = 2): + """ + Sets soot computation up. + + : param precursors = list[str] : + list of precursors in mechanism nomenclature (default : ['A2']) + : param condensation = bool : + condensation enabled (default : True) + : param coagulation = bool : + coagulation enabled (default : True) + : param retroaction = bool : + retroaction on gas phase enabled (default : True) + : param collision_model = str : + Collision model :sphere, rodrigues or thajudeen (default : rodrigues) + : param haca_model = string or int : + haca_model to use (default : Mauss) + 1 : Mauss + 11 : Mauss (tuned as Guo 2016) + 2 : Blanquart + 3 : Kazakov + : param suface_growth = bool : + surface growth enabled (default : True) + : param oxidation = bool : + oxidation enabled (default : True) + : param kazakov = double : + adiabatic flame temperature, only for Kazakov's haca model (default : 0 (automatically computed)) + : param radiation = bool : + soot radiative heat losses enabled (default : True) + : param trash_section = float : + trash section size, <=0 if no trash section (default : -1.0) + : param show_sections = bool : + show sections informations (default : False) + + : return None + """ + if self.flame.soot_sections == 0: + raise CanteraError('/!\ SOOT ERROR : cannot set sections properties (no sections)') + self.flame.soot_loglevel = loglevel + # Impacts geomery, need to use "flame.soot_finalize" + self.flame.soot_precursors = precursors + self.flame.soot_trash_section = trash_section + self.flame.soot_morphology = morphology + self.flame.soot_collision_model = collision_model + # Processes, need to use "flame.soot_finalize" + self.flame.soot_haca = haca_model + if self.flame.soot_haca == 3 : + if kazakov_temperature > 0: + self.flame.kazakov_flame_temperature = kazakov_temperature + else: + self.flame.kazakov_flame_temperature = self.adiabatic_flame_temperature + self.flame.soot_do_surface_growth = surface_growth + self.flame.soot_do_oxidation = oxidation + # Processes, do not impact geometry + self.flame.soot_do_retroaction = retroaction + self.flame.soot_do_condensation = condensation + self.flame.soot_do_coagulation = coagulation + self.flame.soot_do_radiation = radiation + self.flame.soot_finalize + + @property + def soot_Y(self): + """ + Gets soot mass fraction. + + : param None + + : return (sections x points) numpy array : + soot mass fraction for each section at each point + """ + data = np.empty((self.flame.soot_sections, self.flame.n_points)) + ns = self.flame.soot_sections + for k in range(ns): + data[k,:] = self.profile(self.flame, 'Ys'+str(k)) + return data + + @property + def soot_Q(self): + """ + + """ + Ys = self.soot_Y + density = self.density + soot_density = self.flame.soot_density + + data = np.empty(np.shape(Ys)) + for section in range(self.flame.soot_sections): + data[section,:] = density / soot_density * Ys[section,:] + + return data + + @property + def soot_q(self): + """" + Gets the volume distribution of the soot volume fraction + + : param None + + : return (sections x points) numpy array : + volume distribution of the soot volume fraction for each section at each point [m-3] + """ + Q = self.soot_Q + vMin = self.flame.sections_min_v + vMax = self.flame.sections_max_v + + data = np.empty(np.shape(Q)) + for section in range(self.flame.soot_sections): + data[section, :] = Q[section,:] / (vMax[section] - vMin[section]) + + return data + + @property + def soot_N(self): + """" + Gets the particles number density relative to each section + + : param None + + : return (sections x points) numpy array : + particles number density for each section at each point [m-3] + """ + q = self.soot_q + vMin = self.flame.sections_min_v + vMax = self.flame.sections_max_v + + data = np.empty(np.shape(q)) + for section in range(self.flame.soot_sections): + data[section, :] = q[section, :] * np.log(vMax[section]/vMin[section]) + + return data + + def soot_fv(self, **kwargs): + """ + Gets the soot volume fraction. + + : param first = int : + > 0 :index of first section to take into account (starting at 0) + : param last = int : + > 0 : index of last section to take into account (starting at 0) + < 0 : number of sections to remove, starting from the last one + : param min = float : + mean diameter of first section to take into account [m] + : param max = float : + mean diameter of last section to take into account [m] + + : return (points) numpy array : + soot volume fraction at each point + """ + first, last = self.getSectionBounds(**kwargs) + + data = np.sum(self.soot_Q[first:last, :], axis=0) + + return data + + def soot_Np(self, **kwargs): + """ + Gets the soot particles number density. + + : param first = int : + > 0 :index of first section to take into account (starting at 0) + : param last = int : + > 0 : index of last section to take into account (starting at 0) + < 0 : number of sections to remove, starting from the last one + : param min = float : + mean diameter of first section to take into account [m] + : param max = float : + mean diameter of last section to take into account [m] + + : return (points) numpy array : + soot particles number density at each point [m-3] + """ + first, last = self.getSectionBounds(**kwargs) + + data = np.sum(self.soot_N[first:last,:], axis=0) + + return data + + def soot_psdf(self, HAB, out='dNp/dlogd'): + """ + Gets the particles size distribution function at specified HAB. + + : param HAB = float : + Height Above the Burner surface at which PSDF shall be taken [m] + : param out = str : + Output to be computed : 'Np', 'Q' or 'dNp/dlogd' (default) + + : return (sections) numpy array : + particle size distribution for each section at specified HAB [m-3] + """ + if out in ['Q', 'dNp/dlogd', 'dV/dlogd']: + vals = self.soot_q + elif (out == 'Np'): + vals = self.soot_N + else: + raise KeyError("PSDF type should be 'Np', 'Q' or 'dNp/dlogd', not " + out) + if out == 'dV/dlogd': + vals = np.multiply(vals, np.pi * self.soot_mean_d ** 3 / 6) + z = self.flame.grid + data = np.asarray([np.interp(HAB,z,vals[k,:]) for k in range(self.flame.soot_sections)]) + if out=='dNp/dlogd': + data *= 3/(3-self.flame.sections_theta) + + return data + + def soot_mean_d(self, **kwargs): + """" + Gets soot particles mean diameter. + + : param first = int : + > 0 :index of first section to take into account (starting at 0) + : param last = int : + > 0 : index of last section to take into account (starting at 0) + < 0 : number of sections to remove, starting from the last one + : param min = float : + mean diameter of first section to take into account [m] + : param max = float : + mean diameter of last section to take into account [m] + + : return (points) numpy array : + mean diameter of soot particles at each point [m] + """ + first, last = self.getSectionBounds(**kwargs) + Ys = self.soot_Y[first:last,:] + dMean = self.flame.sections_mean_d[first:last] + data = [sum(Ys[:,i]*dMean)/sum(Ys[:,i]) for i in range(self.flame.n_points)] + return np.asarray(data) + + def soot_mean_s(self, **kwargs): + """" + Gets soot particles mean sections. + + : param first = int : + > 0 :index of first section to take into account (starting at 0) + : param last = int : + > 0 : index of last section to take into account (starting at 0) + < 0 : number of sections to remove, starting from the last one + : param min = float : + mean diameter of first section to take into account [m] + : param max = float : + mean diameter of last section to take into account [m] + + : return (points) numpy array : + mean section of soot particles at each point [m] + """ + first, last = self.getSectionBounds(**kwargs) + Ys = self.soot_Y[first:last,:] + sMean = self.flame.sections_mean_s[first:last] + data = [sum(Ys[:,i]*sMean)/sum(Ys[:,i]) for i in range(self.flame.n_points)] + return np.asarray(data) + + def soot_mean_v(self, **kwargs): + """" + Gets soot particles mean volumes. + + : param first = int : + > 0 :index of first section to take into account (starting at 0) + : param last = int : + > 0 : index of last section to take into account (starting at 0) + < 0 : number of sections to remove, starting from the last one + : param min = float : + mean diameter of first section to take into account [m] + : param max = float : + mean diameter of last section to take into account [m] + + : return (points) numpy array : + mean volume of soot particles at each point [m^3] + """ + first, last = self.getSectionBounds(**kwargs) + Ys = self.soot_Y[first:last,:] + vMean = self.flame.sections_mean_v[first:last] + data = [sum(Ys[:,i]*vMean)/sum(Ys[:,i]) for i in range(self.flame.n_points)] + return np.asarray(data) + + def soot_np(self, **kwargs): + """ + Gets number of primary particles per aggregate. + + : param first = int : + > 0 :index of first section to take into account (starting at 0) + : param last = int : + > 0 : index of last section to take into account (starting at 0) + < 0 : number of sections to remove, starting from the last one + : param min = float : + mean diameter of first section to take into account [m] + : param max = float : + mean diameter of last section to take into account [m] + + : return (points) numpy array : + number of primary particles per aggregate + """ + first, last = self.getSectionBounds(**kwargs) + Ys = self.soot_Y[first:last,:] + npart = self.flame.sections_np[first:last] + data = [max(1, sum(Ys[:,i]*npart)/sum(Ys[:,i])) if sum(Ys[:,i])>0 else None for i in range(self.flame.n_points)] + + return np.asarray(data) + + def soot_dp(self, **kwargs): + """ + Gets primary particles diameter. + + : param first = int : + > 0 :index of first section to take into account (starting at 0) + : param last = int : + > 0 : index of last section to take into account (starting at 0) + < 0 : number of sections to remove, starting from the last one + : param min = float : + mean diameter of first section to take into account [m] + : param max = float : + mean diameter of last section to take into account [m] + + : return (points) numpy array : + mean primary particles diameter [m] + """ + first, last = self.getSectionBounds(**kwargs) + + dpart = self.flame.sections_dp[first:last] * 1e7 + Ys = self.soot_Y[first:last,:] + data = [max(dpart[0], sum(Ys[:,i]*dpart)/sum(Ys[:,i])) if sum(Ys[:,i])>0 else None for i in range(self.flame.n_points)] + + return np.asarray(data) + + @property + def soot_source(self): + """ + Gets soot source terms. + + : param None + + : return dictionnary of (sections x points) numpy arrays : + soot source terms [s-1] + keys : + ['inception', 'condensation', 'coagulation', 'surface_growth', 'oxidation'] + """ + soot_source = {} + soot_source['inception'] = self.flame.soot_dump_inception + soot_source['condensation'] = self.flame.soot_dump_condensation + soot_source['coagulation'] = self.flame.soot_dump_coagulation + soot_source['surface_growth'] = self.flame.soot_dump_surface_growth + soot_source['oxidation'] = self.flame.soot_dump_oxidation + + return soot_source + + def soot_mcac_input(self, output='CANTERA2MCAC.dat', d_min=5e-9, fv_min=1e-10, x_max=0, t_max=0): + """ + Generates inputs for flame coupling with MCAC + + : param output : Output file to write the MCAC input file on + : param min_diam : Diameter of the smallest particle considered in MCAC + : param min_fv : Minimal volume fraction to consider (remove flame foot) + : param max_x : Maximal HAB to consider (remove flame end) (starting from the end if max_x < 0) + : param max_t : Maximal residence time to consider (remove flame end) (starting from the end if max_t < 0) + + : return : Dict containing MCAC inputs + """ + + ########################## + # RECOVER LOWER BOUNDARY # + ########################## + # Soot particles with diameter < min_diam are not considered in MCAC + first_section = self.getSectionBounds(d_min=d_min)[0] + if first_section == None: + first_section = 0 + + ########################## + # RECOVER RESIDENCE TIME # + ########################## + velocity = np.where(self.u == 0, 1e-10, self.u) # To avoid integration errors + time = [np.trapz(1/velocity[:idx+1], self.grid[:idx+1]) for idx in range(self.flame.n_points)] + + ####################### + # RECOVER SOURCE TERM # + ####################### + # Get source term for each section at each point + soot_source = self.soot_source + source_terms = soot_source['inception'][first_section:,:] + soot_source['surface_growth'][first_section:,:] + soot_source['oxidation'][first_section:,:] + soot_source['condensation'][first_section:,:] + soot_source['coagulation'][first_section:,:] + source_term = np.sum(source_terms, axis=0) + + # Nucleation is the mass entering the first section + nucleation = np.clip(source_terms[0,:], 0., None) + # Surface reactions are the rest + surface_reactions = source_term - nucleation + + # Recover the expected overall sourceterm dfv/dt to correct (don't ) + fv = self.soot_fv(first=first_section) + target_source_term = np.gradient(fv, time) + correction_factor = np.divide(target_source_term, source_term, out=np.zeros(source_term.shape, dtype=float), where=source_term!=0.) + nucleation *= correction_factor * self.flame.soot_density + surface_reactions *= correction_factor * self.flame.soot_density + + #################### + # RECOVER THE REST # + #################### + temperature = self.T + mean_diameter = self.soot_mean_d(first=first_section) + + ############# + # CLIP DATA # + ############# + # Clip flame beggining (no soot) + first_point = next(idx for idx,val in enumerate(fv) if val >= fv_min) + # Clip flame end (long residence times possible) + if x_max <= 0: + x_max = self.grid[-1] + x_max + last_point_x = next(idx for idx,val in enumerate(self.grid) if val >= x_max) + if t_max <= 0: + t_max = time[-1] + t_max + last_point_t = next(idx for idx,val in enumerate(time) if val >= t_max) + last_point = min(last_point_x, last_point_t) + + #################### + # WRITE INPUT FILE # + #################### + if output is not None: + with open(output, 'w') as f: + for index in range(first_point, last_point+1): + f.write('%.4e %.4e %.4e %.4e 0. %.4e %.4e\n' % (time[index], temperature[index], fv[index], mean_diameter[index], surface_reactions[index], nucleation[index])) + + return {'time':time, 'temperature':temperature, 'fv':fv, 'mean_diameter':mean_diameter, 'surface_reactions':surface_reactions, 'nucleation':nucleation} + + + def getSectionBounds(self, **kwargs): + """ + Gets index of sections given their mean diameter + :param first: Index of the first section to consider + :param d_min: Mean diameter of the first section to consider [m] + :param v_min: Mean volume of the first section to consider [m^3] + :param last: Index of the first section to consider + :param d_max: Mean diameter of the last section to consider [m] + :param v_max: Mean volume of the last section to consider [m^3] + """ + first = None + last = None + + if 'first' in kwargs and 'min' in kwargs : + raise KeyError('Cannot specify both section indice and diameter') + elif 'first' in kwargs : + first = kwargs['first'] + elif 'd_min' in kwargs: + dMean = self.flame.sections_mean_d + if kwargs['d_min'] > dMean[0] and kwargs['d_min'] < dMean[-1]: + first = next(idx for idx,val in enumerate(dMean) if val >= kwargs['d_min']) + elif 'v_min' in kwargs: + vMean = self.flame.sections_mean_v + if kwargs['v_min'] > vMean[0] and kwargs['v_min'] < vMean[-1]: + first = next(idx for idx,val in enumerate(vMean) if val >= kwargs['v_min']) + + if 'last' in kwargs and 'max' in kwargs: + raise KeyError('Cannot specify both section indice and diameter') + elif 'last' in kwargs: + last = kwargs['last'] + if last > 0 : + last += 1 + elif 'd_max' in kwargs: + dMean = self.flame.sections_mean_d + if kwargs['d_max'] > dMean[0] and kwargs['d_max'] < dMean[-1]: + last = next(idx for idx,val in enumerate(dMean) if val > kwargs['d_max']) + elif 'v_max' in kwargs: + vMean = self.flame.sections_mean_v + if kwargs['v_max'] > vMean[0] and kwargs['v_max'] < vMean[-1]: + last = next(idx for idx,val in enumerate(vMean) if val > kwargs['v_max']) + + return first, last + + # END of soot API + @property def grid(self): """ Array of grid point positions along the flame. """ @@ -398,6 +932,115 @@ def set_gas_state(self, point): self.gas.set_unnormalized_mass_fractions(Y) self.gas.TP = self.value(self.flame, 'T', point), self.P + def write_csv(self, filename, species='X', quiet=True, normalize=True): + """ + Write the velocity, temperature, density, and species profiles + to a CSV file. + + :param filename: + Output file name + :param species: + Attribute to use obtaining species profiles, for example ``X`` for + mole fractions or ``Y`` for mass fractions. + :param normalize: + Boolean flag to indicate whether the mole/mass fractions should + be normalized. + + .. deprecated:: 3.0 + + Method to be removed after Cantera 3.0; superseded by `save`. + """ + warnings.warn("FlameBase.write_csv: Superseded by 'save'. To be removed " + "after Cantera 3.0.", DeprecationWarning, stacklevel=2) + + # save data + cols = ('extra', 'T', 'D', species) + self.to_array(normalize=normalize).write_csv(filename, cols=cols) + + if not quiet: + print("Solution saved to '{0}'.".format(filename)) + + def write_AVBP(self, filename, quiet=True): + """ + Instanciate a solution for can2av + to a CSV file. + + :param filename: + Output file name + """ + II = self.gas.n_reactions + KK = self.gas.n_species + JJ = self.flame.n_points + z = self.grid + T = self.T + u = self.velocity + Lreac = list(self.gas.forward_rates_of_progress) + for index, object in enumerate(Lreac): + Lreac[index] = "FwRate_" +str(index+1) + Lreac_r = list(self.gas.reverse_rates_of_progress) + for index, object in enumerate(Lreac_r): + Lreac_r[index] = "RvRate_" +str(index+1) + Wspec = list(self.gas.species_names) + for index, object in enumerate(Wspec): + Wspec[index] = "w_" +object + Lreac_n = list(self.gas.net_rates_of_progress) + for index, object in enumerate(Lreac_n): + Lreac_n[index] = "NetRate_" +str(index+1) + fcsv = open(filename,'w') + writer = _csv.writer(fcsv) + writer.writerow(['Grid Points: ', str(JJ),' Sl= ',u[0]]) + writer.writerow(['x_axis','u','Temperature','rho','Pressure'] + + self.gas.species_names + + Wspec + + Lreac + + Lreac_r + + Lreac_n + + ['Heat_release']) + for n in range(self.flame.n_points): + self.set_gas_state(n) + HR = 0.0 + for m in range(KK): + HR = HR - self.gas.standard_enthalpies_RT[m]*self.gas.net_production_rates[m] + HR = HR * 8313.608 * T[n] + writer.writerow([z[n], u[n], T[n], self.gas.density, self.flame.P] + + list(self.gas.Y/np.sum(self.gas.Y)) + + list(self.gas.molecular_weights) + + list(1000*self.gas.forward_rates_of_progress) + + list(1000*self.gas.reverse_rates_of_progress) + + list(1000*self.gas.net_rates_of_progress) + + list([HR])) + + fcsv.close() + if not quiet: + print("Solution saved to '{0}'.".format(filename)) + + def write_AVBP_energy(self, filename='AVBP_energy.csv', quiet = False): + """ + Dumps energy profile to be imposed in AVBP as : + Line 1 : number of grid points + Next lines : grid | Temperature | density | Cv mass + + : param filename: + Output file name + + : returns : + File with inputs + """ + f = open(filename,'w') + grid = self.grid + T = self.T + points = len(grid) + f.write("%d\n"%(points)) + for i in range(points): + self.set_gas_state(i) + density = self.gas.density + cv_mass = self.gas.cv_mass + f.write("%1.5e %1.5e %1.5e %1.5e \n"%(grid[i], T[i], density, cv_mass)) + f.close() + if not quiet: + print("\nAVBP energy inputs saved to '{0}'.".format(filename)) + + def to_array(self, domain=None, normalize=False): """ Retrieve domain data as a `SolutionArray` object. @@ -581,7 +1224,7 @@ class FreeFlame(FlameBase): """A freely-propagating flat flame.""" __slots__ = ('inlet', 'flame', 'outlet') - def __init__(self, gas, grid=None, width=None): + def __init__(self, gas, grid=None, width=None, sections=0, fictives=0): """ A domain of type `FreeFlow` named 'flame' will be created to represent the flame. The three domains comprising the stack are stored as ``self.inlet``, @@ -597,15 +1240,15 @@ def __init__(self, gas, grid=None, width=None): """ #: `Inlet1D` at the left of the domain representing premixed reactants - self.inlet = Inlet1D(name='reactants', phase=gas) + self.inlet = Inlet1D(name='reactants', phase=gas, sections=sections, fictives=fictives) #: `Outlet1D` at the right of the domain representing the burned products - self.outlet = Outlet1D(name='products', phase=gas) + self.outlet = Outlet1D(name='products', phase=gas, sections=sections, fictives=fictives) if not hasattr(self, 'flame'): # Create flame domain if not already instantiated by a child class #: `FreeFlow` domain representing the flame - self.flame = FreeFlow(gas, name='flame') + self.flame = FreeFlow(gas, name='flame', sections=sections, fictives=fictives) if width is not None: if grid is not None: @@ -776,7 +1419,7 @@ class BurnerFlame(FlameBase): """A burner-stabilized flat flame.""" __slots__ = ('burner', 'flame', 'outlet') - def __init__(self, gas, grid=None, width=None): + def __init__(self, gas, grid=None, width=None, sections=0, fictives=0): """ :param gas: `Solution` (using the IdealGas thermodynamic model) used to @@ -795,15 +1438,15 @@ def __init__(self, gas, grid=None, width=None): """ #: `Inlet1D` at the left of the domain representing the burner surface through #: which reactants flow - self.burner = Inlet1D(name='burner', phase=gas) + self.burner = Inlet1D(name='burner', phase=gas, sections=sections, fictives=fictives) #: `Outlet1D` at the right of the domain representing the burned gas - self.outlet = Outlet1D(name='outlet', phase=gas) + self.outlet = Outlet1D(name='outlet', phase=gas, sections=sections, fictives=fictives) if not hasattr(self, 'flame'): # Create flame domain if not already instantiated by a child class #: `UnstrainedFlow` domain representing the flame - self.flame = UnstrainedFlow(gas, name='flame') + self.flame = UnstrainedFlow(gas, name='flame', sections=sections, fictives=fictives) if width is not None: if grid is not None: @@ -914,7 +1557,7 @@ class CounterflowDiffusionFlame(FlameBase): """ A counterflow diffusion flame """ __slots__ = ('fuel_inlet', 'flame', 'oxidizer_inlet') - def __init__(self, gas, grid=None, width=None): + def __init__(self, gas, grid=None, width=None, sections=0, fictives=0): """ :param gas: `Solution` (using the IdealGas thermodynamic model) used to @@ -933,15 +1576,15 @@ def __init__(self, gas, grid=None, width=None): """ #: `Inlet1D` at the left of the domain representing the fuel mixture - self.fuel_inlet = Inlet1D(name='fuel_inlet', phase=gas) + self.fuel_inlet = Inlet1D(name='fuel_inlet', phase=gas, sections=sections, fictives=fictives) self.fuel_inlet.T = gas.T #: `Inlet1D` at the right of the domain representing the oxidizer mixture - self.oxidizer_inlet = Inlet1D(name='oxidizer_inlet', phase=gas) + self.oxidizer_inlet = Inlet1D(name='oxidizer_inlet', phase=gas, sections=sections, fictives=fictives) self.oxidizer_inlet.T = gas.T #: `AxisymmetricFlow` domain representing the flame - self.flame = AxisymmetricFlow(gas, name='flame') + self.flame = AxisymmetricFlow(gas, name='flame', sections=sections, fictives=fictives) if width is not None: if grid is not None: @@ -1233,7 +1876,7 @@ class ImpingingJet(FlameBase): """An axisymmetric flow impinging on a surface at normal incidence.""" __slots__ = ('inlet', 'flame', 'surface') - def __init__(self, gas, grid=None, width=None, surface=None): + def __init__(self, gas, grid=None, width=None, surface=None, sections=0, fictives=0): """ :param gas: `Solution` (using the IdealGas thermodynamic model) used to @@ -1254,10 +1897,10 @@ def __init__(self, gas, grid=None, width=None, surface=None): """ #: `Inlet1D` at the left of the domain representing the incoming reactants - self.inlet = Inlet1D(name='inlet', phase=gas) + self.inlet = Inlet1D(name='inlet', phase=gas, sections=sections, fictives=fictives) #: `AxisymmetricFlow` domain representing the flame - self.flame = AxisymmetricFlow(gas, name='flame') + self.flame = AxisymmetricFlow(gas, name='flame', sections=sections, fictives=fictives) self.flame.set_axisymmetric_flow() if width is not None: @@ -1323,7 +1966,7 @@ class CounterflowPremixedFlame(FlameBase): """ A premixed counterflow flame """ __slots__ = ('reactants', 'flame', 'products') - def __init__(self, gas, grid=None, width=None): + def __init__(self, gas, grid=None, width=None, sections=0, fictives=0): """ :param gas: `Solution` (using the IdealGas thermodynamic model) used to @@ -1341,15 +1984,15 @@ def __init__(self, gas, grid=None, width=None): """ #: `Inlet1D` at the left of the domain representing premixed reactants - self.reactants = Inlet1D(name='reactants', phase=gas) + self.reactants = Inlet1D(name='reactants', phase=gas, sections=sections, fictives=fictives) self.reactants.T = gas.T #: `Inlet1D` at the right of the domain representing burned products - self.products = Inlet1D(name='products', phase=gas) + self.products = Inlet1D(name='products', phase=gas, sections=sections, fictives=fictives) self.products.T = gas.T #: `AxisymmetricFlow` domain representing the flame - self.flame = AxisymmetricFlow(gas, name='flame') + self.flame = AxisymmetricFlow(gas, name='flame', sections=sections, fictives=fictives) if width is not None: if grid is not None: @@ -1430,7 +2073,7 @@ class CounterflowTwinPremixedFlame(FlameBase): """ __slots__ = ('reactants', 'flame', 'products') - def __init__(self, gas, grid=None, width=None): + def __init__(self, gas, grid=None, width=None, sections=0, fictives=0): """ :param gas: `Solution` (using the IdealGas thermodynamic model) used to @@ -1446,14 +2089,14 @@ def __init__(self, gas, grid=None, width=None): represent the flame. The three domains comprising the stack are stored as ``self.reactants``, ``self.flame``, and ``self.products``. """ - self.reactants = Inlet1D(name='reactants', phase=gas) + self.reactants = Inlet1D(name='reactants', phase=gas, sections=sections, fictives=fictives) self.reactants.T = gas.T #: `AxisymmetricFlow` domain representing the flame - self.flame = AxisymmetricFlow(gas, name='flame') + self.flame = AxisymmetricFlow(gas, name='flame', sections=sections, fictives=fictives) #The right boundary is a symmetry plane - self.products = SymmetryPlane1D(name='products', phase=gas) + self.products = SymmetryPlane1D(name='products', phase=gas, sections=sections, fictives=fictives) if width is not None: if grid is not None: @@ -1505,3 +2148,365 @@ def set_initial_guess(self, data=None, group=None): self.set_profile('velocity', [0.0, 1.0], [uu, 0]) self.set_profile('spread_rate', [0.0, 1.0], [0.0, a]) self.set_profile("lambda", [0.0, 1.0], [L, L]) + + +class Flamelet(FlameBase): + """ A diffusion flamelet (Z-space) """ + __slots__ = ('oxidizer_inlet', 'flame', 'fuel_inlet') + _other = ('grid') + + def __init__(self, gas, grid=None, width=None): + """ + :param gas: + `Solution` (using the IdealGas thermodynamic model) used to + evaluate all gas properties and reaction rates. + :param grid: + A list of points to be used as the initial grid. Not recommended + unless solving only on a fixed grid; Use the `width` parameter + instead. + + A domain of class `FlameletFlow` named ``flame`` will be created to + represent the flame. The three domains comprising the stack are stored as + ``self.oxidizer_inlet``, ``self.flame``, and ``self.fuel_inlet``. + """ + + if width is not None: + warnings.warn("width parameter cannot be used with Flamelets, the width is fixed to 1. This parameter is available for consistency with other FlameBase subclasses and pytest",UserWarning) + + #: `Inlet1D` at the left of the domain representing the fuel mixture + self.fuel_inlet = Inlet1D(name='fuel_inlet', phase=gas) + self.fuel_inlet.T = gas.T + + #: `Inlet1D` at the right of the domain representing the oxidizer mixture + self.oxidizer_inlet = Inlet1D(name='oxidizer_inlet', phase=gas) + self.oxidizer_inlet.T = gas.T + + #: `FlameletFlow` domain representing the flame + self.flame = FlameletFlow(gas, name='flame') + + # CERFACS : This part need to be added to comply with the pytest test_width_grid::test_width_grid + if width is not None: + if grid is not None: + raise ValueError("'grid' and 'width' arguments are mutually exclusive") + + if grid is None: + grid = np.array([0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]) + # Note: flamelet initialisation is very sensitive to the number of grid points. + # Do not hesitate to try some: experience shows that between 10 and 20 is often a good guess + grid = np.asarray(grid) / max(grid) # Width of the grid must anyway be 1 because in Z-space + + super().__init__((self.oxidizer_inlet, self.flame, self.fuel_inlet), gas, grid) + + @property + def ChiSt(self): + return self.flame.ChiSt + + @ChiSt.setter + def ChiSt(self, val): + self.flame.ChiSt = val + + @property + def ZSt(self): + return self.flame.ZSt + + @ZSt.setter + def ZSt(self, val): + self.flame.ZSt = val + + def set_initial_guess(self, data=None, group=None): + """ + Set the initial guess for the solution. By default, the initial guess + is generated by assuming infinitely-fast chemistry. Alternatively, a + previously calculated result can be supplied as an initial guess via + 'data' and 'key' inputs (see `FlameBase.set_initial_guess`). + """ + super().set_initial_guess(data=data, group=group) + if data: + return + + moles = lambda el: (self.gas.elemental_mass_fraction(el) / + self.gas.atomic_weight(el)) + + # Compute stoichiometric mixture composition + Yin_f = self.fuel_inlet.Y + self.gas.TPY = self.fuel_inlet.T, self.P, Yin_f + + T0f = self.fuel_inlet.T + + sFuel = moles('O') + if 'C' in self.gas.element_names: + sFuel -= 2 * moles('C') + if 'H' in self.gas.element_names: + sFuel -= 0.5 * moles('H') + + Yin_o = self.oxidizer_inlet.Y + self.gas.TPY = self.oxidizer_inlet.T, self.P, Yin_o + + T0o = self.oxidizer_inlet.T + + sOx = moles('O') + if 'C' in self.gas.element_names: + sOx -= 2 * moles('C') + if 'H' in self.gas.element_names: + sOx -= 0.5 * moles('H') + + zst = 1.0 / (1 - sFuel / sOx) + Yst = zst * Yin_f + (1.0 - zst) * Yin_o + + self.flame.ZSt = zst + + # get adiabatic flame temperature and composition + Tbar = 0.5 * (T0f + T0o) + self.gas.TPY = Tbar, self.P, Yst + self.gas.equilibrate('HP') + Teq = self.gas.T + Yeq = self.gas.Y + + # estimate strain rate + zz = self.flame.grid + nz = len(zz) + + Y = np.zeros((nz, self.gas.n_species)) + T = np.zeros(nz) + for j, zmix in enumerate(zz): + if zmix > zst: + Y[j] = Yeq + (Yin_f - Yeq) * (zmix - zst) / (1.0 - zst) + T[j] = Teq + (T0f - Teq) * (zmix - zst) / (1.0 - zst) + else: + Y[j] = Yin_o + zmix * (Yeq - Yin_o) / zst + T[j] = T0o + (Teq - T0o) * zmix / zst + + T[0] = T0f + T[-1] = T0o + + self.set_profile('T', zz, T) + for k,spec in enumerate(self.gas.species_names): + self.set_profile(spec, zz, Y[:,k]) + + def extinct(self): + return max(self.T) - max(self.fuel_inlet.T, self.oxidizer_inlet.T) < 10 + + def solve(self, loglevel=1, refine_grid='refine', auto=False, stage=1): + """ + Solve the problem. + + :param loglevel: + integer flag controlling the amount of diagnostic output. Zero + suppresses all output, and 5 produces very verbose output. + :param refine_grid: + if True, enable grid refinement. + :param auto: if True, sequentially execute the different solution stages + and attempt to automatically recover from errors. Attempts to first + solve on the initial grid with energy enabled. If that does not + succeed, a fixed-temperature solution will be tried followed by + enabling the energy equation, and then with grid refinement enabled. + If non-default tolerances have been specified or multicomponent + transport is enabled, an additional solution using these options + will be calculated. + :param stage: solution stage; only used when transport model is ``ionized-gas``. + """ + if self.flame.transport_model == 'ionized-gas': + warnings.warn( + "The 'ionized-gas' transport model is untested for " + "'Flamelet' objects.", UserWarning) + self.flame.solving_stage = stage + + super().solve(loglevel, refine_grid, auto) + # Do some checks if loglevel is set + if loglevel > 0: + if self.extinct(): + print('WARNING: Flame is extinct.') + # else: + # # Check if the flame is very thick + # # crude width estimate based on temperature + # z_flame = self.grid[self.T > np.max(self.T) / 2] + # flame_width = z_flame[-1] - z_flame[0] + # domain_width = self.grid[-1] - self.grid[0] + # if flame_width / domain_width > 0.4: + # print('WARNING: The flame is thick compared to the domain ' + # 'size. The flame might be affected by the plug-flow ' + # 'boundary conditions. Consider increasing the inlet mass ' + # 'fluxes or using a larger domain.') + + # # Check if the temperature peak is close to a boundary + # z_center = (self.grid[np.argmax(self.T)] - self.grid[0]) / domain_width + # if z_center < 0.25: + # print('WARNING: The flame temperature peak is close to the ' + # 'fuel inlet. Consider increasing the ratio of the ' + # 'fuel inlet mass flux to the oxidizer inlet mass flux.') + # if z_center > 0.75: + # print('WARNING: The flame temperature peak is close to the ' + # 'oxidizer inlet. Consider increasing the ratio of the ' + # 'oxidizer inlet mass flux to the fuel inlet mass flux.') + + def write_csv(self, filename, species='X', quiet=True): + """ + Write the velocity, temperature, density, and species profiles + to a CSV file. + + :param filename: + Output file name + :param species: + Attribute to use obtaining species profiles, e.g. ``X`` for + mole fractions or ``Y`` for mass fractions. + """ + + z = self.grid + T = self.T + + csvfile = open(filename, 'w') + writer = _csv.writer(csvfile) + writer.writerow(['z (m)', + 'T (K)', 'rho (kg/m3)'] + self.gas.species_names) + for n in range(self.flame.n_points): + self.set_gas_state(n) + writer.writerow([z[n], T[n], self.gas.density] + + list(getattr(self.gas, species))) + csvfile.close() + if not quiet: + print("Solution saved to '{0}'.".format(filename)) + # def strain_rate(self, definition, fuel=None, oxidizer='O2', stoich=None): + # r""" + # Return the axial strain rate of the counterflow diffusion flame in 1/s. + + # :param definition: + # The definition of the strain rate to be calculated. Options are: + # ``mean``, ``max``, ``stoichiometric``, ``potential_flow_fuel``, and + # ``potential_flow_oxidizer``. + # :param fuel: The fuel species. Used only if ``definition`` is + # ``stoichiometric``. + # :param oxidizer: The oxidizer species, default ``O2``. Used only if + # ``definition`` is ``stoichiometric``. + # :param stoich: The molar stoichiometric oxidizer-to-fuel ratio. + # Can be omitted if the oxidizer is ``O2``. Used only if ``definition`` + # is ``stoichiometric``. + + # The parameter ``definition`` sets the method to compute the strain rate. + # Possible options are: + + # ``mean``: + # The mean axial velocity gradient in the entire domain + + # .. math:: a_{mean} = \left| \frac{\Delta u}{\Delta z} \right| + + # ``max``: + # The maximum axial velocity gradient + + # .. math:: a_{max} = \max \left( \left| \frac{du}{dz} \right| \right) + + # ``stoichiometric``: + # The axial velocity gradient at the stoichiometric surface. + + # .. math:: + + # a_{stoichiometric} = \left| \left. \frac{du}{dz} + # \right|_{\phi=1} \right| + + # This method uses the additional keyword arguments ``fuel``, + # ``oxidizer``, and ``stoich``. + + # >>> f.strain_rate('stoichiometric', fuel='H2', oxidizer='O2', + # stoich=0.5) + + # ``potential_flow_fuel``: + # The corresponding axial strain rate for a potential flow boundary + # condition at the fuel inlet. + + # .. math:: a_{f} = \sqrt{-\frac{\Lambda}{\rho_{f}}} + + # ``potential_flow_oxidizer``: + # The corresponding axial strain rate for a potential flow boundary + # condition at the oxidizer inlet. + + # .. math:: a_{o} = \sqrt{-\frac{\Lambda}{\rho_{o}}} + # """ + # if definition == 'mean': + # return - (self.velocity[-1] - self.velocity[0]) / self.grid[-1] + + # elif definition == 'max': + # return np.max(np.abs(np.gradient(self.velocity) / np.gradient(self.grid))) + + # elif definition == 'stoichiometric': + # if fuel is None: + # raise KeyError('Required argument "fuel" not defined') + # if oxidizer != 'O2' and stoich is None: + # raise KeyError('Required argument "stoich" not defined') + + # if stoich is None: + # # oxidizer is O2 + # stoich = - 0.5 * self.gas.n_atoms(fuel, 'O') + # if 'H' in self.gas.element_names: + # stoich += 0.25 * self.gas.n_atoms(fuel, 'H') + # if 'C' in self.gas.element_names: + # stoich += self.gas.n_atoms(fuel, 'C') + + # d_u_d_z = np.gradient(self.velocity) / np.gradient(self.grid) + # phi = (self.X[self.gas.species_index(fuel)] * stoich / + # np.maximum(self.X[self.gas.species_index(oxidizer)], 1e-20)) + # z_stoich = np.interp(-1., -phi, self.grid) + # return np.abs(np.interp(z_stoich, self.grid, d_u_d_z)) + + # elif definition == 'potential_flow_fuel': + # return np.sqrt(- self.L[0] / self.density[0]) + + # elif definition == 'potential_flow_oxidizer': + # return np.sqrt(- self.L[0] / self.density[-1]) + + # else: + # raise ValueError('Definition "' + definition + '" is not available') + + # def mixture_fraction(self, m): + # r""" + # Compute the mixture fraction based on element ``m`` or from the + # Bilger mixture fraction by setting ``m="Bilger"`` + + # The mixture fraction is computed from the elemental mass fraction of + # element ``m``, normalized by its values on the fuel and oxidizer + # inlets: + + # .. math:: Z = \frac{Z_{\mathrm{mass},m}(z) - + # Z_{\mathrm{mass},m}(z_\mathrm{oxidizer})} + # {Z_{\mathrm{mass},m}(z_\mathrm{fuel}) - + # Z_{\mathrm{mass},m}(z_\mathrm{oxidizer})} + + # or from the Bilger mixture fraction: + + # .. math:: Z = \frac{\beta-\beta_{\mathrm{oxidizer}}} + # {\beta_{\mathrm{fuel}}-\beta_{\mathrm{oxidizer}}} + + # with + + # .. math:: \beta = 2\frac{Z_C}{M_C}+2\frac{Z_S}{M_S} + # +\frac{1}{2}\frac{Z_H}{M_H}-\frac{Z_O}{M_O} + + # :param m: + # The element based on which the mixture fraction is computed, + # may be specified by name or by index, or "Bilger" for the + # Bilger mixture fraction, which considers the elements C, + # H, S, and O + + # >>> f.mixture_fraction('H') + # >>> f.mixture_fraction('Bilger') + # """ + + # Yf = [self.value(self.flame, k, 0) for k in self.gas.species_names] + # Yo = [self.value(self.flame, k, self.flame.n_points - 1) + # for k in self.gas.species_names] + + # vals = np.empty(self.flame.n_points) + # for i in range(self.flame.n_points): + # self.set_gas_state(i) + # vals[i] = self.gas.mixture_fraction(Yf, Yo, 'mass', m) + # return vals + + # @property + # def equivalence_ratio(self): + # Yf = [self.value(self.flame, k, 0) for k in self.gas.species_names] + # Yo = [self.value(self.flame, k, self.flame.n_points - 1) + # for k in self.gas.species_names] + + # vals = np.empty(self.flame.n_points) + # for i in range(self.flame.n_points): + # self.set_gas_state(i) + # vals[i] = self.gas.equivalence_ratio(Yf, Yo, "mass") + # return vals \ No newline at end of file diff --git a/interfaces/cython/pyproject.toml b/interfaces/cython/pyproject.toml index cb092f63ec4..643c60a5ad2 100644 --- a/interfaces/cython/pyproject.toml +++ b/interfaces/cython/pyproject.toml @@ -1,3 +1,3 @@ [build-system] -requires = ["setuptools>=43.0.0", "wheel", "Cython>=0.29.12"] +requires = ["setuptools>=43.0.0", "wheel", "Cython>=0.29.12,!=3.1.2"] build-backend = "setuptools.build_meta" diff --git a/interfaces/python_sdist/pyproject.toml.in b/interfaces/python_sdist/pyproject.toml.in index e4f5f2a1f0b..16016d8811b 100644 --- a/interfaces/python_sdist/pyproject.toml.in +++ b/interfaces/python_sdist/pyproject.toml.in @@ -1,5 +1,5 @@ [build-system] -requires = ["scikit-build-core", "cython", "numpy>=2.0; python_version >= '3.9'", "oldest-supported-numpy; python_version == '3.8'"] +requires = ["scikit-build-core", "cython==3.1.1", "numpy>=2.0; python_version >= '3.9'"] build-backend = "scikit_build_core.build" [project] @@ -8,12 +8,12 @@ version = "@cantera_version@" description = "Cantera is an open-source suite of tools for problems involving chemical kinetics, thermodynamics, and transport processes." authors = [{name = "Cantera Developers", email = "developers@cantera.org"}] keywords = ["chemistry physics"] -license = { file = "License.txt" } +license = "BSD-3-Clause" +license-files = ["License.txt"] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Education", "Intended Audience :: Science/Research", - "License :: OSI Approved :: BSD License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX :: Linux", @@ -22,11 +22,12 @@ classifiers = [ "Programming Language :: Cython", "Programming Language :: Fortran", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Scientific/Engineering :: Chemistry", "Topic :: Scientific/Engineering :: Physics", @@ -35,6 +36,7 @@ requires-python = "@py_requires_ver_str@" dependencies = [ "numpy >= 1.12.0,<3", "ruamel.yaml >= 0.15.34", + "cython ==3.1.1", ] [project.readme] @@ -68,8 +70,7 @@ build.verbose = true version = ">=3.27" [tool.scikit-build.ninja] -# As of 01-DEC-2024, Ninja 1.12 is not available on PyPI -version = ">=1.11" +version = ">=1.13" make-fallback = false [tool.scikit-build.cmake.define] @@ -84,8 +85,9 @@ exclude = ["pyproject.toml.in", "cantera/with_units/solution.py.in"] exclude = ["include", "lib", "share", "**.pyx", "cantera/CMakeLists.txt"] [tool.cibuildwheel] -build-frontend = { name="build", args=["-vv"] } -skip = "pp* *musllinux*" +build-frontend = { name="build[uv]", args=["-vv"] } +archs = "auto64" +skip = ["*musllinux*", "cp3??t-win*"] test-extras = ["pandas", "units", "graphviz"] test-requires = ["pytest"] manylinux-x86_64-image = "ghcr.io/cantera/cantera-base-manylinux_2_28-x86_64" diff --git a/main.yaml b/main.yaml new file mode 100644 index 00000000000..603fff34ed1 --- /dev/null +++ b/main.yaml @@ -0,0 +1,66 @@ +name: Tests + +on: + push: + branches: + - '**' + +jobs: + ubuntu-multiple-pythons: + name: ${{ matrix.os }} with Python ${{ matrix.python-version }} + runs-on: ${{ matrix.os }} + timeout-minutes: 60 + strategy: + matrix: + python-version: ['3.9'] + os: ['self-hosted'] + fail-fast: false + env: + HDF5_LIBDIR: /usr/lib/x86_64-linux-gnu/hdf5/serial + HDF5_INCLUDEDIR: /usr/include/hdf5/serial + steps: + - uses: actions/checkout@v3 + name: Checkout the repository + with: + submodules: recursive + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + architecture: x64 + - name: Install Apt dependencies + run: | + sudo apt -y update + sudo apt -y install libboost-dev gfortran libopenmpi-dev libpython3-dev \ + libblas-dev liblapack-dev libhdf5-dev libfmt-dev + gcc --version + - name: Upgrade pip + run: python3 -m pip install -U pip setuptools wheel + - name: Install Python dependencies + # h5py is optional; some versions don't have binaries (yet) + run: | + python3 -m pip install ruamel.yaml scons==3.1.2 numpy cython pandas pytest \ + pytest-github-actions-annotate-failures pint + python3 -m pip install h5py + - name: Build Cantera + run: | + python3 `which scons` build env_vars=all -j2 debug=n --debug=time \ + system_fmt=y hdf_libdir=$HDF5_LIBDIR hdf_include=$HDF5_INCLUDEDIR \ + cc_flags=-D_GLIBCXX_ASSERTIONS + - name: Upload shared library + uses: actions/upload-artifact@v3 + if: matrix.python-version == '3.10' + with: + path: build/lib/libcantera_shared.so + name: libcantera_shared-${{ matrix.os }}.so + retention-days: 2 + - name: Test Cantera + run: + python3 `which scons` test show_long_tests=yes verbose_tests=yes --debug=time + - name: Save the wheel file to install Cantera + uses: actions/upload-artifact@v3 + with: + path: build/python/dist/Cantera*.whl + retention-days: 2 + name: cantera-wheel-${{ matrix.python-version }}-${{ matrix.os }} + if-no-files-found: error \ No newline at end of file diff --git a/run_compil_CALYPSO b/run_compil_CALYPSO new file mode 100755 index 00000000000..6848df18d8b --- /dev/null +++ b/run_compil_CALYPSO @@ -0,0 +1,6 @@ +#!/bin/bash +module purge +#module load python/3.9.5 # Not needed if install is done in an python environment (already loaded to create the environment) +module load gcc/12.3.0 +# module list +scons build -j4 && scons install diff --git a/run_compil_KRAKEN b/run_compil_KRAKEN new file mode 100755 index 00000000000..7752a79f2b7 --- /dev/null +++ b/run_compil_KRAKEN @@ -0,0 +1,10 @@ +#!/bin/bash +module purge +# module load python/3.9.5 +module load compiler/gcc/11.2.0 +#require the installation of ruamel.yaml +# scons build python2_package=n prefix=/softs/local/cantera-avbp/3.0 blas_lapack_libs=lapack,atlas debug_linker_flags='-L/usr/lib64/atlas' +# mv /softs/local/cantera-avbp/3.0 /softs/local/cantera-avbp/3.0-`date +%d%b%Y` +# scons install +scons build -j4 && scons install + diff --git a/samples/cxx/bvp/BoundaryValueProblem.h b/samples/cxx/bvp/BoundaryValueProblem.h index 2ae637e8fd8..82316f32f68 100644 --- a/samples/cxx/bvp/BoundaryValueProblem.h +++ b/samples/cxx/bvp/BoundaryValueProblem.h @@ -147,7 +147,7 @@ class BoundaryValueProblem : if (!m_sim) { start(); } - bool refine = true; + std::string refine = "refine"; m_sim->solve(loglevel, refine); } diff --git a/samples/cxx/flamespeed/flamespeed.cpp b/samples/cxx/flamespeed/flamespeed.cpp index a31c6c500e8..c7bde4df8a8 100644 --- a/samples/cxx/flamespeed/flamespeed.cpp +++ b/samples/cxx/flamespeed/flamespeed.cpp @@ -24,7 +24,7 @@ using namespace Cantera; using fmt::print; -int flamespeed(double phi, bool refine_grid, int loglevel) +int flamespeed(double phi, std::string refine_grid, int loglevel) { try { auto sol = newSolution("gri30.yaml", "gri30", "mixture-averaged"); @@ -199,7 +199,7 @@ int main(int argc, char** argv) { double phi; int loglevel = 1; - bool refine_grid = true; + std::string refine_grid = "refine"; if (argc >= 2) { phi = fpValue(argv[1]); } else { @@ -207,7 +207,7 @@ int main(int argc, char** argv) std::cin >> phi; } if (argc >= 3) { - refine_grid = bool(std::stoi(argv[2])); + refine_grid = std::string(argv[2]); } if (argc >= 4) { loglevel = std::stoi(argv[3]); diff --git a/samples/python/AVBP/1-runBurner.py b/samples/python/AVBP/1-runBurner.py new file mode 100644 index 00000000000..879f0688c3b --- /dev/null +++ b/samples/python/AVBP/1-runBurner.py @@ -0,0 +1,62 @@ +# Importing necessary libraries +import cantera as ct +import numpy as np +import os +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +# Setting the mechanism name +mech = 'BISETTI' + +#Setting pressure +pressure = ct.one_atm + +# Setting temperature +temperature = 298.00 + +# Setting inlet velocity +velocity = 6.73e-2 + +# Setting flame initial composition +composition = 'C2H4:14.08, O2:18.05, N2:67.87' + +# Creating gas object +if ct.__version__ >= '2.5.0': + gas = ct.Solution('./inputs/%s.yaml' % mech) +else: + gas = ct.Solution('./inputs/%s.cti' % mech) + +# Settng gas properties +gas.TPX = temperature, pressure, composition + +# Loading experimental data (temperature vs. height) +z, T = np.genfromtxt('./inputs/T_vs_x.dat').T + +# Creating flame object of the same size as the experimental flame +f = ct.BurnerFlame(gas=gas, width=z[-1]) + +# Setting the flame's mass flow rate +f.burner.mdot = velocity * gas.density + +# Disabling energy equation +f.energy_enabled = False + +#Imposing proposed temperature profile +f.flame.set_fixed_temp_profile(z/max(z), T) + +# Setting the transport model to mixture-averaged +f.transport_model = 'mixture-averaged' + +# Setting mesh refinement criteria +f.set_refine_criteria(ratio=2.0, slope=0.1, curve=0.1) + +# Solving the problem +f.solve(1, 'refine') + +# Showing the result +f.show() + +# Saving the result +if ct.__version__ >= '2.5.0': + f.save('./RESULTS/%s.yaml' % mech, 'non-sooting',overwrite=True) +else: + f.save('./RESULTS/%s.xml' % mech, 'non-sooting') diff --git a/samples/python/AVBP/2-restoreBurner.py b/samples/python/AVBP/2-restoreBurner.py new file mode 100644 index 00000000000..ccb653ea6f1 --- /dev/null +++ b/samples/python/AVBP/2-restoreBurner.py @@ -0,0 +1,54 @@ +# Importing necessary libraries +import cantera as ct +import numpy as np +import matplotlib.pyplot as plt +import os +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +# Setting the mechanism name +mech = 'BISETTI' + +# Creating gas object +#if cantera version is 2.5.0 or higher, use the following line instead +if ct.__version__ >= '2.5.0': + gas = ct.Solution('./inputs/%s.yaml' % mech) +else: + gas = ct.Solution('./inputs/%s.cti' % mech) + +# Loading experimental data (temperature vs. height) +z, T = np.genfromtxt('./inputs/T_vs_x.dat').T + +# Creating flame object of the same size as the experimental flame with 25 soot sections +f = ct.BurnerFlame(gas=gas, width=z[-1], sections = 25) + +# Setting transport model +f.transport_model = 'mixture-averaged' + +# Setting up soot calculation +f.soot_setup(precursors =['A2'], + retroaction =True, + condensation =True, + coagulation =True, + surface_growth =True, + oxidation =True, + #fractal_aggregates=True, + radiation =True, + trash_section =-1, + #show_sections = True + ) + +# Restoring the non-sooting flame +if ct.__version__ >= '2.5.0': + f.restore('./RESULTS/%s.yaml' % mech, 'non-sooting') +else: + f.restore('./RESULTS/%s.xml' % mech, 'non-sooting') +f.radiation_enabled = True + +# Solving the sooting flame +f.solve(1,refine_grid='disabled') + +# # Saving the result +if ct.__version__ >= '2.5.0': + f.save('./RESULTS/%s.yaml' % mech,'sooting',overwrite=True) +else: + f.save('./RESULTS/%s.xml' % mech,'sooting') diff --git a/samples/python/AVBP/3-plotBurner.py b/samples/python/AVBP/3-plotBurner.py new file mode 100644 index 00000000000..60388f4e7a8 --- /dev/null +++ b/samples/python/AVBP/3-plotBurner.py @@ -0,0 +1,53 @@ +# Importing necessary libraries +import cantera as ct +import numpy as np +import matplotlib.pyplot as plt +import os +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +# Setting the mechanism name +mech = 'BISETTI' + +# Creating gas object +#if cantera version is 2.5.0 or higher, use the following line instead +if ct.__version__ >= '2.5.0': + gas = ct.Solution('./inputs/%s.yaml' % mech) +else: + gas = ct.Solution('./inputs/%s.cti' % mech) + +# Loading experimental data (temperature vs. height) +z, T = np.genfromtxt('./inputs/T_vs_x.dat').T + +# Creating flame object of the same size as the experimental flame with 25 soot sections +f = ct.BurnerFlame(gas=gas, width=z[-1], sections=25) + +# Setting up soot computation +f.soot_setup(precursors =['A2'], + #fractal_aggregates=True, + trash_section =-1 + ) + +# Restoring the sooting flame +if ct.__version__ >= '2.5.0': + f.restore('./RESULTS/%s.yaml' % mech, 'sooting') +else: + f.restore('./RESULTS/%s.xml' % mech, 'sooting') + +# Plot volume fraction +# Particles under 2nm and in last section are excluded +plt.figure(0) +plt.plot(f.grid * 100, f.soot_fv(min=2e-7, last=-1)) +plt.yscale('log') +plt.ylabel('Volume fraction') +plt.xlabel('HAB ($cm$)') + +# Plot particles number density +# Particles under 2nm and in last section are excluded +plt.figure(1) +plt.plot(f.grid * 100, f.soot_Np(min=2e-7, last=-1)) +plt.yscale('log') +plt.ylabel('Soot particles number density ($cm^{-3}$)') +plt.xlabel('HAB ($cm$)') + +# Displaying graphs +plt.show() diff --git a/samples/python/AVBP/ARC.py b/samples/python/AVBP/ARC.py new file mode 100644 index 00000000000..10609e6425e --- /dev/null +++ b/samples/python/AVBP/ARC.py @@ -0,0 +1,44 @@ +import cantera as ct +import matplotlib.pyplot as plt +import os +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +p = 1e5 +tin = 400.0 +phi = 1.0 +fuel = {'CH4':1} +oxidizer = {'O2': 1, 'N2': 3.76} + +ct.compile_fortran('./inputs/Lu_ARC.f90') + +if ct.__version__ >= '2.5.0': + gas = ct.Solution('./inputs/Lu_ARC.yaml') +else: + gas = ct.Solution('./inputs/Lu_ARC.cti') + +gas.TP = tin, p +gas.set_equivalence_ratio(phi, fuel, oxidizer) + +loglevel = 1 +refine_grid = 'refine' + +f = ct.FreeFlame(gas, width=0.02) +f.inlet.X = gas.X +f.inlet.T = gas.T + +f.energy_enabled = True +f.set_refine_criteria(ratio=2.0, slope=0.05, curve=0.05, prune=0.01) +f.set_max_jac_age(10, 10) +f.set_time_step(1e-8, [10, 20, 40, 80, 100, 100, 150,]) +f.max_time_step_count = 500 + +f.solve(loglevel, refine_grid) + +if ct.__version__ >= '2.5.0': + plt.plot(f.flame.grid, f.velocity) +else: + plt.plot(f.flame.grid, f.u) + +plt.xlabel('Flame grid [m]') +plt.ylabel('Velocity [m/s]') +plt.show() \ No newline at end of file diff --git a/samples/python/AVBP/FLAMELET.py b/samples/python/AVBP/FLAMELET.py new file mode 100644 index 00000000000..f7a367acad6 --- /dev/null +++ b/samples/python/AVBP/FLAMELET.py @@ -0,0 +1,111 @@ +import cantera as ct +import time +import numpy as np +from scipy.special import erfinv, erfcinv, erf +from scipy import integrate +import matplotlib.pyplot as plt + +import os +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +#gas init + +T = 300.0 # temperature +P = 101325.0 # pressure + +rho_o = P / (8.314 / 0.032 * T) # oxidizer density +tin_o = 300.0 # oxidizer inlet temperature +mdot_o = 0.8 # kg/m^2/s +comp_o = 'O2:1' # oxidizer composition +u_o = mdot_o / rho_o # oxidizer speed + +rho_f = P / (8.314 / 0.016 * T) # fuel density +tin_f = 300.0 # fuel inlet temperature +mdot_f = 0.2 # kg/m^2/s +comp_f = 'CH4:1' # fuel composition +u_f = mdot_f / rho_f # fuel speed + +width = 1.0 # width +SR = (u_o + u_f) / (width) # strain rate + +if ct.__version__ >= '2.5.0': + ct.compile_fortran('./inputs/Lu_ARC.f90') + gas_1 = ct.Solution('./inputs/Lu_ARC.yaml') +else: + gas_1 = ct.Solution('./inputs/Lu.cti') + +gas_1.TP = T, P + +#flamelet creation +plt.rcParams['figure.figsize'] = (14, 10) + +initial_grid = np.linspace(0,width,11) # initial grid for the calculation + +f_1 = ct.Flamelet(gas_1) # Flamelet object creation + +f_1.fuel_inlet.mdot = mdot_f # Fuel inlet conditions +f_1.fuel_inlet.Y = comp_f +f_1.fuel_inlet.T = tin_f + # Oxidizer inlet conditions +f_1.oxidizer_inlet.mdot = mdot_o +f_1.oxidizer_inlet.Y = comp_o +f_1.oxidizer_inlet.T = tin_o +chist = SR/np.pi*(np.exp(-2*((erfinv(1-2*0.2))**2))) +f_1.ChiSt = chist # Stochiometric scalar dissipation rate + +f_1.set_initial_guess() + +# plt.plot(f_1.flame.grid, f_1.T) + +# Calculation properties + +loglevel = 1 +f_1.set_max_jac_age(1, 1) +f_1.set_time_step(1.e-9, [50, 100, 150]) +f_1.energy_enabled = True +f_1.set_refine_criteria(ratio=4, slope=0.1, curve=0.1) + +# Solver +t1_A = time.time() +f_1.solve(loglevel, refine_grid = 'refine') +t1_B = time.time() + +if ct.__version__ >= '2.5.0': + f_1.save('./RESULTS/CH4-O2-converged-flamelet-Lu.yaml', 'Lu.yaml-zspace',overwrite=True) +else: + f_1.save('./RESULTS/CH4-O2-converged-flamelet-Lu.xml') + +# Calculation of the heat release +hr_1 = -np.sum(f_1.standard_enthalpies_RT * f_1.net_production_rates, 0) * ct.gas_constant * f_1.T +# print('Heat release rate = ', hr_1) + +plt.rcParams['figure.figsize'] = (14, 10) + +# Get interesting indices for computation of species +fuel_species = 'CH4' +ifuel = gas_1.species_index(fuel_species) +io2 = gas_1.species_index('O2') +ico = gas_1.species_index('CO') + +# Initiate interesting vectors +ch4_1 = np.zeros(f_1.flame.n_points,'d') +o2_1 = np.zeros(f_1.flame.n_points,'d') +co_1 = np.zeros(f_1.flame.n_points,'d') + +# Computes interesting quantities for analyzing a counter-flow flame +for n in range(f_1.flame.n_points): + f_1.set_gas_state(n) + ch4_1[n]= gas_1.Y[ifuel] + o2_1[n]= gas_1.Y[io2] + co_1[n]= gas_1.Y[ico] + +T_1 = f_1.T + +plt.plot(f_1.flame.grid,T_1/np.max(T_1),f_1.flame.grid,ch4_1/np.max(ch4_1), + f_1.flame.grid,o2_1/np.max(o2_1),f_1.flame.grid,co_1/np.max(co_1), f_1.flame.grid,hr_1/np.max(hr_1)) +plt.title(r'$T_{adiabatic}, Y_{CH_4}, Y_{O_2}, Y_{CO}$, HR vs. Mixture fraction',fontsize=25) +plt.xlabel(r'Mixture fraction', fontsize=15) +plt.ylabel('Normalized values of different quantities',fontsize=15) +plt.legend(['Temperature','$Y_{CH_4}$', '$Y_{O_2}$', '$Y_{CO}$', 'HR'],fontsize=15) + +plt.show() \ No newline at end of file diff --git a/samples/python/AVBP/PEA.py b/samples/python/AVBP/PEA.py new file mode 100644 index 00000000000..98b248dcafd --- /dev/null +++ b/samples/python/AVBP/PEA.py @@ -0,0 +1,50 @@ +import cantera as ct +import numpy as np +import matplotlib.pyplot as plt +import os +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +# Parameters of the solver +loglevel = 1 +refine_grid = 'refine' + +if ct.__version__ >= '2.5.0': + mechanism_list = ['gri30.yaml', './inputs/BFER_methane.yaml', './inputs/BFER_methane.yaml'] +else: + mechanism_list = ['gri30.cti', './inputs/BFER_methane.cti', './inputs/BFER_methane.cti'] +gas_list = ['', 'BFER_nopea', 'BFER_pea'] + +for mechanism_name, gas_name in zip(mechanism_list, gas_list): + # Setting up the gas object (operating conditions) + gas = ct.Solution(mechanism_name, gas_name) + p = 1e5 + tin = 473.0 + phi = 1.4 + fuel = {'CH4': 1} + oxidizer = {'O2': 1, 'N2': 3.76} + gas.TP = tin, p + gas.set_equivalence_ratio(phi, fuel, oxidizer) + + # Setting up the flame object + f = ct.FreeFlame(gas, width=0.2) # Careful about the domain size if you want to retrieve the same profile ! + f.inlet.X = gas.X + f.inlet.T = gas.T + + f.energy_enabled = True + f.set_refine_criteria(ratio=2.0, slope=0.05, curve=0.05, prune=0.01) + f.set_max_jac_age(10, 10) + f.set_time_step(1e-8, [10, 20, 40, 80, 100, 100, 150]) + f.max_time_step_count = 5000 + + f.solve(loglevel, refine_grid) + + # Checking the results + if ct.__version__ >= '2.5.0': + plt.plot(f.flame.grid, f.velocity, label=mechanism_name + ' - ' + gas_name) + else: + plt.plot(f.grid, f.u, label=mechanism_name + ' - ' + gas_name) + +plt.xlabel('Flame grid [m]') +plt.ylabel('Veloctity [m/s]') +plt.legend() +plt.show() diff --git a/samples/python/AVBP/RESULTS/.gitignore b/samples/python/AVBP/RESULTS/.gitignore new file mode 100644 index 00000000000..5e7d2734cfc --- /dev/null +++ b/samples/python/AVBP/RESULTS/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore diff --git a/samples/python/AVBP/THICKENING.py b/samples/python/AVBP/THICKENING.py new file mode 100644 index 00000000000..94ee0d1860a --- /dev/null +++ b/samples/python/AVBP/THICKENING.py @@ -0,0 +1,67 @@ +import cantera as ct +import numpy as np +import matplotlib.pyplot as plt +import os +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +p = 101325 # pressure +tin = 300.0 # unburned gas temperature +phi = 0.8 # equivalence ratio + +if ct.__version__ >= '2.5.0': + gas = ct.Solution('./inputs/BFER_methane.yaml') +else: + gas = ct.Solution('./inputs/BFER_methane.cti') + +m = gas.n_species +x = np.zeros(m,'d') +fuel_species = 'CH4' +ifuel = gas.species_index(fuel_species) +io2 = gas.species_index('O2') + +refine_grid = "disabled" +tol_ss = [1.0e-5, 1.0e-8] # [rtol atol] for steady-state problem +tol_ts = [1.0e-5, 1.0e-8] # [rtol atol] for time stepping +loglevel = 1 # amount of diagnostic output (0 to 5) + +n_points = 1000 +F = [1.0, 2.0, 5.0, 10.0, 15.0, 20.0] +temperature = [] +position = [] + +for ind_thick, thick in enumerate(F): + gas.set_equivalence_ratio(phi, 'CH4:1', 'O2:1.0, N2:3.76') + gas.TP = tin, p + initial_grid = np.linspace(0, 0.02, int(1000/thick)) + f = ct.FreeFlame(gas, grid=initial_grid) + + # This is where thickening is applied + f.flame.thick = thick + + f.energy_enabled = True + f.flame.set_steady_tolerances(default=tol_ss) + f.flame.set_transient_tolerances(default=tol_ts) + f.inlet.X = gas.X + f.inlet.T = tin + #f.set_refine_criteria(ratio = 7.0, slope = 1, curve = 1) + f.set_max_jac_age(50, 50) + f.set_time_step(5.e-06, [10, 20, 80]) #s + #f.set_refine_criteria(ratio = 2.0, slope = 0.02, curve = 0.02, prune = 0.01) + f.solve(loglevel, refine_grid) + + temperature.append(f.T) + position.append(f.flame.grid) + +fig = plt.figure(figsize=(18,16)) +a=fig.add_subplot(111) +for ind_thick, thick in enumerate(F): + a.plot(position[ind_thick],temperature[ind_thick], label="F = "+str(thick)) +plt.title(r'$T_{adiabatic}$ vs. Position', fontsize=25) +plt.xlabel(r'Position [m]', fontsize=20) +plt.ylabel("Adiabatic Flame Temperature [K]", fontsize=20) +plt.xticks(fontsize=15) +plt.yticks(fontsize=15) +#a.xaxis.set_major_locator(MaxNLocator(10)) # this controls the number of tick marks on the axis +plt.legend(fontsize=15) + +plt.show() \ No newline at end of file diff --git a/samples/python/AVBP/fictive_species.py b/samples/python/AVBP/fictive_species.py new file mode 100644 index 00000000000..1e62e048705 --- /dev/null +++ b/samples/python/AVBP/fictive_species.py @@ -0,0 +1,103 @@ +# This script exists to show to use fictive species in Cantera. +# The implementation makes it's use similar to AVBP/ +# Note: only constant Schmidt number per species is possible + + +import cantera as ct +import numpy as np +import matplotlib.pyplot as plt +import os +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +loglevel = 0 # For clarity + +# Setting the mechanism name +mech = 'BISETTI' +P, T = 1e5, 300 +# Creating gas object +#if cantera version is 2.5.0 or higher, use the following line instead +if ct.__version__ >= '2.5.0': + gas = ct.Solution('./inputs/%s.yaml' % mech) +else: + gas = ct.Solution('./inputs/%s.cti' % mech) + +phi = 2.0 # equivalence ratio +fuel = {'C2H4': 1} # Ethylene composition +oxidizer = {'O2': 1, 'N2': 3.76} # Oxygen composition + +print("First flame: a rich premixed ethylene/air flame !") + +gas.TP = T, P +gas.set_equivalence_ratio(phi, fuel, oxidizer) + +# -------------- First, a flame without fictive species ------------------ # + +f = ct.FreeFlame(gas, width=0.02) # Create the free laminar premixed flame specifying the width of the grid +f.inlet.X = gas.X # Inlet condition on mass fraction +f.inlet.T = gas.T # Inlet condition on temperature + + +f.energy_enabled = True +tol_ss = [1.0e-5, 1.0e-9] # [rtol atol] for steady-state problem +tol_ts = [1.0e-5, 1.0e-9] # [rtol atol] for time stepping +f.flame.set_steady_tolerances(default=tol_ss) +f.flame.set_transient_tolerances(default=tol_ts) +f.set_max_jac_age(50, 50) +f.set_time_step(1.0e-5, [2, 5, 10, 20, 80]) # s + +f.set_refine_criteria(ratio=2.0, slope=0.05, curve=0.05) + +print("Solving flame without fictive") +f.solve(loglevel=1, refine_grid='refine') +if ct.__version__ >= '2.5.0': + f.save('./RESULTS/%s.yaml' % mech,'without_fic',overwrite=True) +else: + f.save('./RESULTS/%s.xml' % mech,'without_fic') + +# For the purpose of showing the fictive species, we store the source term of the soot precursor. +Omega_fic = np.zeros(f.flame.n_points,'d') +for n in range(f.flame.n_points): + f.set_gas_state(n) + Omega_fic[n] = gas.net_production_rates[gas.species_index('A2')] * gas.molecular_weights[gas.species_index('A2')] +grid = f.flame.grid + +# ------------- Second, fictive species are declared and the previosu flame is restored -------------------- # +f = ct.FreeFlame(gas, width=0.02, fictives=1) + +if ct.__version__ >= '2.5.0': + f.restore('./RESULTS/%s.yaml' % mech, 'without_fic') +else: + f.restore('./RESULTS/%s.xml' % mech, 'without_fic') + +# Fictive species properties are set like this (remember the order !) +# Note: the Schmidt of A2 is not the real one but sounds close.. +f.add_fic( + fictive_schmidt = [2.0], + fictive_fuel_inlet_Y = [0.0], + fictive_oxidizer_inlet_Y = [0.0] +) + + +# Add source term to the ficitve species (here, this is the "real" source term of A2) +f.flame.set_fictive_source_term_profile('Yfic_0', grid, Omega_fic) +print("Solving flame with fictive") +f.solve(loglevel=1, refine_grid='disabled') # Grid refinement must be deactivated ! +if ct.__version__ >= '2.5.0': + f.save('./RESULTS/%s.yaml' % mech,'with_fic',overwrite=True) +else: + f.save('./RESULTS/%s.xml' % mech,'with_fic') + +# Retrieve data +fictive_data = f.fic_Y +Y_A2_fic = fictive_data[0,:] + +Y_A2 = np.zeros(f.flame.n_points,'d') +for n in range(f.flame.n_points): + f.set_gas_state(n) + Y_A2[n]=gas.Y[gas.species_index('A2')] +plt.figure() +plt.plot(f.grid, Y_A2_fic, marker="*", label='A2-Fictive') +plt.plot(f.grid, Y_A2, label='A2-Real') +plt.legend() +# plt.savefig('plot_premixed_with_fictive.png', dpi=500) +plt.show() \ No newline at end of file diff --git a/samples/python/AVBP/inputs/BFER_methane.cti b/samples/python/AVBP/inputs/BFER_methane.cti new file mode 100755 index 00000000000..d8fde74b17b --- /dev/null +++ b/samples/python/AVBP/inputs/BFER_methane.cti @@ -0,0 +1,149 @@ +# CH4_BFER mechanisme: CH4 + 1.5 O2 => CO +2H2O +# CO + 0.5 O2 <=> CO2 +# +# Transport data from file ../transport/gri30_tran.dat. + +units(length = "cm", time = "s", quantity = "mol", act_energy = "cal/mol") + +ideal_gas(name = "BFER_nopea", + elements = " O H C N Ar", + species = """ CH4 CO2 CO O2 H2O N2 """, + reactions = "all", + transport = "AVBP", + initial_state = state(temperature = 300.0, + pressure = OneAtm) ) + +ideal_gas(name = "BFER_pea", + elements = " O H C N Ar", + species = """ CH4 CO2 CO O2 H2O N2 """, + reactions = "all", + transport = "AVBP", + initial_state = state(temperature = 300.0, + pressure = OneAtm) ) + +#------------------------------------------------------------------------------- +# Species data +#------------------------------------------------------------------------------- + +species(name = "O2", + atoms = " O:2 ", + thermo = ( + NASA( [ 200.00, 1000.00], [ 3.782456360E+00, -2.996734160E-03, + 9.847302010E-06, -9.681295090E-09, 3.243728370E-12, + -1.063943560E+03, 3.657675730E+00] ), + NASA( [ 1000.00, 3500.00], [ 3.282537840E+00, 1.483087540E-03, + -7.579666690E-07, 2.094705550E-10, -2.167177940E-14, + -1.088457720E+03, 5.453231290E+00] ) + ), + transport = gas_transport( + geom = "linear", + diam = 3.46, + well_depth = 107.40, + polar = 1.60, + rot_relax = 3.80), + note = "TPIS89" + ) + +species(name = "H2O", + atoms = " H:2 O:1 ", + thermo = ( + NASA( [ 200.00, 1000.00], [ 4.198640560E+00, -2.036434100E-03, + 6.520402110E-06, -5.487970620E-09, 1.771978170E-12, + -3.029372670E+04, -8.490322080E-01] ), + NASA( [ 1000.00, 3500.00], [ 3.033992490E+00, 2.176918040E-03, + -1.640725180E-07, -9.704198700E-11, 1.682009920E-14, + -3.000429710E+04, 4.966770100E+00] ) + ), + transport = gas_transport( + geom = "nonlinear", + diam = 2.60, + well_depth = 572.40, + dipole = 1.84, + rot_relax = 4.00), + note = "L 8/89" + ) + +species(name = "CH4", + atoms = " C:1 H:4 ", + thermo = ( + NASA( [ 200.00, 1000.00], [ 5.149876130E+00, -1.367097880E-02, + 4.918005990E-05, -4.847430260E-08, 1.666939560E-11, + -1.024664760E+04, -4.641303760E+00] ), + NASA( [ 1000.00, 3500.00], [ 7.485149500E-02, 1.339094670E-02, + -5.732858090E-06, 1.222925350E-09, -1.018152300E-13, + -9.468344590E+03, 1.843731800E+01] ) + ), + transport = gas_transport( + geom = "nonlinear", + diam = 3.75, + well_depth = 141.40, + polar = 2.60, + rot_relax = 13.00), + note = "L 8/88" + ) + +species(name = "CO", + atoms = " C:1 O:1 ", + thermo = ( + NASA( [ 200.00, 1000.00], [ 3.579533470E+00, -6.103536800E-04, + 1.016814330E-06, 9.070058840E-10, -9.044244990E-13, + -1.434408600E+04, 3.508409280E+00] ), + NASA( [ 1000.00, 3500.00], [ 2.715185610E+00, 2.062527430E-03, + -9.988257710E-07, 2.300530080E-10, -2.036477160E-14, + -1.415187240E+04, 7.818687720E+00] ) + ), + transport = gas_transport( + geom = "linear", + diam = 3.65, + well_depth = 98.10, + polar = 1.95, + rot_relax = 1.80), + note = "TPIS79" + ) + +species(name = "CO2", + atoms = " C:1 O:2 ", + thermo = ( + NASA( [ 200.00, 1000.00], [ 2.356773520E+00, 8.984596770E-03, + -7.123562690E-06, 2.459190220E-09, -1.436995480E-13, + -4.837196970E+04, 9.901052220E+00] ), + NASA( [ 1000.00, 3500.00], [ 3.857460290E+00, 4.414370260E-03, + -2.214814040E-06, 5.234901880E-10, -4.720841640E-14, + -4.875916600E+04, 2.271638060E+00] ) + ), + transport = gas_transport( + geom = "linear", + diam = 3.76, + well_depth = 244.00, + polar = 2.65, + rot_relax = 2.10), + note = "L 7/88" + ) + +species(name = "N2", + atoms = " N:2 ", + thermo = ( + NASA( [ 300.00, 1000.00], [ 3.298677000E+00, 1.408240400E-03, + -3.963222000E-06, 5.641515000E-09, -2.444854000E-12, + -1.020899900E+03, 3.950372000E+00] ), + NASA( [ 1000.00, 5000.00], [ 2.926640000E+00, 1.487976800E-03, + -5.684760000E-07, 1.009703800E-10, -6.753351000E-15, + -9.227977000E+02, 5.980528000E+00] ) + ), + transport = gas_transport( + geom = "linear", + diam = 3.62, + well_depth = 97.53, + polar = 1.76, + rot_relax = 4.00), + note = "121286" + ) + +#------------------------------------------------------------------------------- +# Reaction data +#------------------------------------------------------------------------------- +# Reaction +reaction( " CH4 + 1.5 O2 => CO + 2 H2O ", [4.9E+09, 0.0, 35500], order="CH4:0.5 O2:0.65 ") + +# Reaction 2 +reaction( " CO + 0.5 O2 <=> CO2", [2.00E+08, 0.7, 12000]) \ No newline at end of file diff --git a/samples/python/AVBP/inputs/BFER_methane.yaml b/samples/python/AVBP/inputs/BFER_methane.yaml new file mode 100644 index 00000000000..e063132325b --- /dev/null +++ b/samples/python/AVBP/inputs/BFER_methane.yaml @@ -0,0 +1,151 @@ +description: |- + CH4_BFER mechanisme: CH4 + 1.5 O2 => CO +2H2O + CO + 0.5 O2 <=> CO2 + + Transport data from file ../transport/gri30_tran.dat. + +generator: cti2yaml +cantera-version: 3.0.0 +date: Tue, 19 Dec 2023 15:25:36 +0100 +input-files: [BFER_methane.cti] + +units: {length: cm, quantity: mol, activation-energy: cal/mol} + +phases: +- name: BFER_nopea + thermo: ideal-gas + elements: [O, H, C, N, Ar] + species: [CH4, CO2, CO, O2, H2O, N2] + kinetics: gas + reactions: all + transport: AVBP + state: + T: 300.0 + P: 1.01325e+05 +- name: BFER_pea + thermo: ideal-gas + elements: [O, H, C, N, Ar] + species: [CH4, CO2, CO, O2, H2O, N2] + kinetics: gas + reactions: all + transport: AVBP + state: + T: 300.0 + P: 1.01325e+05 + +species: +- name: O2 + composition: {O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.78245636, -2.99673416e-03, 9.84730201e-06, -9.68129509e-09, 3.24372837e-12, + -1063.94356, 3.65767573] + - [3.28253784, 1.48308754e-03, -7.57966669e-07, 2.09470555e-10, -2.16717794e-14, + -1088.45772, 5.45323129] + transport: + model: gas + geometry: linear + diameter: 3.46 + well-depth: 107.4 + polarizability: 1.6 + rotational-relaxation: 3.8 + note: TPIS89 +- name: H2O + composition: {H: 2, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.19864056, -2.0364341e-03, 6.52040211e-06, -5.48797062e-09, 1.77197817e-12, + -3.02937267e+04, -0.849032208] + - [3.03399249, 2.17691804e-03, -1.64072518e-07, -9.7041987e-11, 1.68200992e-14, + -3.00042971e+04, 4.9667701] + transport: + model: gas + geometry: nonlinear + diameter: 2.6 + well-depth: 572.4 + dipole: 1.84 + rotational-relaxation: 4.0 + note: L 8/89 +- name: CH4 + composition: {C: 1, H: 4} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [5.14987613, -0.0136709788, 4.91800599e-05, -4.84743026e-08, 1.66693956e-11, + -1.02466476e+04, -4.64130376] + - [0.074851495, 0.0133909467, -5.73285809e-06, 1.22292535e-09, -1.0181523e-13, + -9468.34459, 18.437318] + transport: + model: gas + geometry: nonlinear + diameter: 3.75 + well-depth: 141.4 + polarizability: 2.6 + rotational-relaxation: 13.0 + note: L 8/88 +- name: CO + composition: {C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.57953347, -6.1035368e-04, 1.01681433e-06, 9.07005884e-10, -9.04424499e-13, + -1.4344086e+04, 3.50840928] + - [2.71518561, 2.06252743e-03, -9.98825771e-07, 2.30053008e-10, -2.03647716e-14, + -1.41518724e+04, 7.81868772] + transport: + model: gas + geometry: linear + diameter: 3.65 + well-depth: 98.1 + polarizability: 1.95 + rotational-relaxation: 1.8 + note: TPIS79 +- name: CO2 + composition: {C: 1, O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.35677352, 8.98459677e-03, -7.12356269e-06, 2.45919022e-09, -1.43699548e-13, + -4.83719697e+04, 9.90105222] + - [3.85746029, 4.41437026e-03, -2.21481404e-06, 5.23490188e-10, -4.72084164e-14, + -4.8759166e+04, 2.27163806] + transport: + model: gas + geometry: linear + diameter: 3.76 + well-depth: 244.0 + polarizability: 2.65 + rotational-relaxation: 2.1 + note: L 7/88 +- name: N2 + composition: {N: 2} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [3.298677, 1.4082404e-03, -3.963222e-06, 5.641515e-09, -2.444854e-12, + -1020.8999, 3.950372] + - [2.92664, 1.4879768e-03, -5.68476e-07, 1.0097038e-10, -6.753351e-15, + -922.7977, 5.980528] + transport: + model: gas + geometry: linear + diameter: 3.62 + well-depth: 97.53 + polarizability: 1.76 + rotational-relaxation: 4.0 + note: '121286' + +reactions: +- equation: ' CH4 + 1.5 O2 => CO + 2 H2O ' # Reaction 1 + rate-constant: {A: 4.9e+09, b: 0.0, Ea: 35500} + orders: {CH4: 0.5, O2: 0.65} +- equation: ' CO + 0.5 O2 <=> CO2' # Reaction 2 + rate-constant: {A: 2.0e+08, b: 0.7, Ea: 12000} diff --git a/samples/python/AVBP/inputs/BISETTI.cti b/samples/python/AVBP/inputs/BISETTI.cti new file mode 100644 index 00000000000..5d440837551 --- /dev/null +++ b/samples/python/AVBP/inputs/BISETTI.cti @@ -0,0 +1,1537 @@ +units(length='cm', time='s', quantity='mol', act_energy='cal/mol') + +ideal_gas(name='gas', + elements="N C H O Ar", + species="""AR N2 S-CH2 T-CH2 O H2 H + OH H2O O2 HO2 CH CO + HCO CH2O CH3 CO2 CH4 C2H3 + C2H4 C2H5 C2H HCCO C2H2 C3H3 + A-C3H5 N-C3H7 C2H6 P-C3H4 A-C3H4 A1 + A1- C5H5 C3H6 C4H8 C5H6 A2 + C5H10 C5H11 A1C2H2 A1CH2 A1CHO A1CH3 + C7H15 N-C7H16 A1C2H* A2- A1C2H""", + reactions='all', + transport='Mix', + initial_state=state(temperature=300.0, pressure=OneAtm)) + +#------------------------------------------------------------------------------- +# Species data +#------------------------------------------------------------------------------- + +species(name='AR', + atoms='Ar:1', + thermo=(NASA([200.00, 1000.00], + [ 2.50000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, -7.45375000E+02, + 4.37967491E+00]), + NASA([1000.00, 6000.00], + [ 2.50000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, -7.45375000E+02, + 4.37967491E+00])), + transport=gas_transport(geom='atom', + diam=3.33, + well_depth=136.5), + note='REFELEMENTG5/97') + +species(name=u'N2', + atoms='N:2', + thermo=(NASA([300.00, 1000.00], + [ 3.29867700E+00, 1.40824040E-03, -3.96322200E-06, + 5.64151500E-09, -2.44485400E-12, -1.02089990E+03, + 3.95037200E+00]), + NASA([1000.00, 5000.00], + [ 2.92664000E+00, 1.48797680E-03, -5.68476000E-07, + 1.00970380E-10, -6.75335100E-15, -9.22797700E+02, + 5.98052800E+00])), + transport=gas_transport(geom='linear', + diam=3.621, + well_depth=97.53, + polar=1.76, + rot_relax=4.0), + note=u'121286') + +species(name=u'S-CH2', + atoms='H:2 C:1', + thermo=(NASA([200.00, 1000.00], + [ 4.19860411E+00, -2.36661419E-03, 8.23296220E-06, + -6.68815981E-09, 1.94314737E-12, 5.04968163E+04, + -7.69118967E-01]), + NASA([1000.00, 3500.00], + [ 2.29203842E+00, 4.65588637E-03, -2.01191947E-06, + 4.17906000E-10, -3.39716365E-14, 5.09259997E+04, + 8.62650169E+00])), + transport=gas_transport(geom='linear', + diam=3.8, + well_depth=144.0), + note=u'LS/93') + +species(name=u'T-CH2', + atoms='H:2 C:1', + thermo=(NASA([200.00, 1000.00], + [ 3.76267867E+00, 9.68872143E-04, 2.79489841E-06, + -3.85091153E-09, 1.68741719E-12, 4.60040401E+04, + 1.56253185E+00]), + NASA([1000.00, 3500.00], + [ 2.87410113E+00, 3.65639292E-03, -1.40894597E-06, + 2.60179549E-10, -1.87727567E-14, 4.62636040E+04, + 6.17119324E+00])), + transport=gas_transport(geom='linear', + diam=3.8, + well_depth=144.0), + note=u'LS/93') + +species(name=u'O', + atoms='O:1', + thermo=(NASA([200.00, 1000.00], + [ 3.16826710E+00, -3.27931884E-03, 6.64306396E-06, + -6.12806624E-09, 2.11265971E-12, 2.91222592E+04, + 2.05193346E+00]), + NASA([1000.00, 3500.00], + [ 2.56942078E+00, -8.59741137E-05, 4.19484589E-08, + -1.00177799E-11, 1.22833691E-15, 2.92175791E+04, + 4.78433864E+00])), + transport=gas_transport(geom='atom', + diam=2.75, + well_depth=80.0), + note=u'L1/90') + +species(name=u'H2', + atoms='H:2', + thermo=(NASA([200.00, 1000.00], + [ 2.34433112E+00, 7.98052075E-03, -1.94781510E-05, + 2.01572094E-08, -7.37611761E-12, -9.17935173E+02, + 6.83010238E-01]), + NASA([1000.00, 3500.00], + [ 3.33727920E+00, -4.94024731E-05, 4.99456778E-07, + -1.79566394E-10, 2.00255376E-14, -9.50158922E+02, + -3.20502331E+00])), + transport=gas_transport(geom='linear', + diam=2.92, + well_depth=38.0, + polar=0.79, + rot_relax=280.0), + note=u'TPIS78') + +species(name=u'H', + atoms='H:1', + thermo=(NASA([200.00, 1000.00], + [ 2.50000000E+00, 7.05332819E-13, -1.99591964E-15, + 2.30081632E-18, -9.27732332E-22, 2.54736599E+04, + -4.46682853E-01]), + NASA([1000.00, 3500.00], + [ 2.50000001E+00, -2.30842973E-11, 1.61561948E-14, + -4.73515235E-18, 4.98197357E-22, 2.54736599E+04, + -4.46682914E-01])), + transport=gas_transport(geom='atom', + diam=2.05, + well_depth=145.0), + note=u'L7/88') + +species(name=u'OH', + atoms='H:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 4.12530561E+00, -3.22544939E-03, 6.52764691E-06, + -5.79853643E-09, 2.06237379E-12, 3.38153812E+03, + -6.90432960E-01]), + NASA([1000.00, 6000.00], + [ 2.86472886E+00, 1.05650448E-03, -2.59082758E-07, + 3.05218674E-11, -1.33195876E-15, 3.71885774E+03, + 5.70164073E+00])), + transport=gas_transport(geom='linear', + diam=2.75, + well_depth=80.0), + note=u'S9/01') + +species(name=u'H2O', + atoms='H:2 O:1', + thermo=(NASA([200.00, 1000.00], + [ 4.19864056E+00, -2.03643410E-03, 6.52040211E-06, + -5.48797062E-09, 1.77197817E-12, -3.02937267E+04, + -8.49032208E-01]), + NASA([1000.00, 3500.00], + [ 3.03399249E+00, 2.17691804E-03, -1.64072518E-07, + -9.70419870E-11, 1.68200992E-14, -3.00042971E+04, + 4.96677010E+00])), + transport=gas_transport(geom='nonlinear', + diam=2.605, + well_depth=572.4, + dipole=1.844, + rot_relax=4.0), + note=u'L8/89') + +species(name=u'O2', + atoms='O:2', + thermo=(NASA([200.00, 1000.00], + [ 3.78245636E+00, -2.99673416E-03, 9.84730201E-06, + -9.68129509E-09, 3.24372837E-12, -1.06394356E+03, + 3.65767573E+00]), + NASA([1000.00, 3500.00], + [ 3.28253784E+00, 1.48308754E-03, -7.57966669E-07, + 2.09470555E-10, -2.16717794E-14, -1.08845772E+03, + 5.45323129E+00])), + transport=gas_transport(geom='linear', + diam=3.458, + well_depth=107.4, + polar=1.6, + rot_relax=3.8), + note=u'TPIS89') + +species(name=u'HO2', + atoms='H:1 O:2', + thermo=(NASA([200.00, 1000.00], + [ 4.30179801E+00, -4.74912051E-03, 2.11582891E-05, + -2.42763894E-08, 9.29225124E-12, 2.94808040E+02, + 3.71666245E+00]), + NASA([1000.00, 3500.00], + [ 4.01721090E+00, 2.23982013E-03, -6.33658150E-07, + 1.14246370E-10, -1.07908535E-14, 1.11856713E+02, + 3.78510215E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.458, + well_depth=107.4, + rot_relax=1.0), + note=u'L5/89') + +species(name=u'CH', + atoms='H:1 C:1', + thermo=(NASA([200.00, 1000.00], + [ 3.48981665E+00, 3.23835541E-04, -1.68899065E-06, + 3.16217327E-09, -1.40609067E-12, 7.07972934E+04, + 2.08401108E+00]), + NASA([1000.00, 3500.00], + [ 2.87846473E+00, 9.70913681E-04, 1.44445655E-07, + -1.30687849E-10, 1.76079383E-14, 7.10124364E+04, + 5.48497999E+00])), + transport=gas_transport(geom='linear', + diam=2.75, + well_depth=80.0), + note=u'TPIS79') + +species(name=u'CO', + atoms='C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 3.57953347E+00, -6.10353680E-04, 1.01681433E-06, + 9.07005884E-10, -9.04424499E-13, -1.43440860E+04, + 3.50840928E+00]), + NASA([1000.00, 3500.00], + [ 2.71518561E+00, 2.06252743E-03, -9.98825771E-07, + 2.30053008E-10, -2.03647716E-14, -1.41518724E+04, + 7.81868772E+00])), + transport=gas_transport(geom='linear', + diam=3.65, + well_depth=98.1, + polar=1.95, + rot_relax=1.8), + note=u'TPIS79') + +species(name=u'HCO', + atoms='H:1 C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 4.22118584E+00, -3.24392532E-03, 1.37799446E-05, + -1.33144093E-08, 4.33768865E-12, 3.83956496E+03, + 3.39437243E+00]), + NASA([1000.00, 3500.00], + [ 2.77217438E+00, 4.95695526E-03, -2.48445613E-06, + 5.89161778E-10, -5.33508711E-14, 4.01191815E+03, + 9.79834492E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.59, + well_depth=498.0), + note=u'L12/89') + +species(name=u'CH2O', + atoms='H:2 C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 4.79372315E+00, -9.90833369E-03, 3.73220008E-05, + -3.79285261E-08, 1.31772652E-11, -1.43089567E+04, + 6.02812900E-01]), + NASA([1000.00, 3500.00], + [ 1.76069008E+00, 9.20000082E-03, -4.42258813E-06, + 1.00641212E-09, -8.83855640E-14, -1.39958323E+04, + 1.36563230E+01])), + transport=gas_transport(geom='nonlinear', + diam=3.59, + well_depth=498.0, + rot_relax=2.0), + note=u'L8/88') + +species(name=u'CH3', + atoms='H:3 C:1', + thermo=(NASA([200.00, 1000.00], + [ 3.65717970E+00, 2.12659790E-03, 5.45838830E-06, + -6.61810030E-09, 2.46570740E-12, 1.64227160E+04, + 1.67353540E+00]), + NASA([1000.00, 6000.00], + [ 2.97812060E+00, 5.79785200E-03, -1.97558000E-06, + 3.07297900E-10, -1.79174160E-14, 1.65095130E+04, + 4.72247990E+00])), + transport=gas_transport(geom='linear', + diam=3.8, + well_depth=144.0), + note=u'METHYLIU0702') + +species(name=u'CO2', + atoms='C:1 O:2', + thermo=(NASA([200.00, 1000.00], + [ 2.35677352E+00, 8.98459677E-03, -7.12356269E-06, + 2.45919022E-09, -1.43699548E-13, -4.83719697E+04, + 9.90105222E+00]), + NASA([1000.00, 3500.00], + [ 3.85746029E+00, 4.41437026E-03, -2.21481404E-06, + 5.23490188E-10, -4.72084164E-14, -4.87591660E+04, + 2.27163806E+00])), + transport=gas_transport(geom='linear', + diam=3.763, + well_depth=244.0, + polar=2.65, + rot_relax=2.1), + note=u'L7/88') + +species(name=u'CH4', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14911468E+00, -1.36622009E-02, 4.91453921E-05, + -4.84246767E-08, 1.66603441E-11, -1.02465983E+04, + -4.63848842E+00]), + NASA([1000.00, 6000.00], + [ 1.65326226E+00, 1.00263099E-02, -3.31661238E-06, + 5.36483138E-10, -3.14696758E-14, -1.00095936E+04, + 9.90506283E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.746, + well_depth=141.4, + polar=2.6, + rot_relax=13.0), + note=u'g8/99') + +species(name=u'C2H3', + atoms='H:3 C:2', + thermo=(NASA([200.00, 1000.00], + [ 3.21246645E+00, 1.51479162E-03, 2.59209412E-05, + -3.57657847E-08, 1.47150873E-11, 3.48598468E+04, + 8.51054025E+00]), + NASA([1000.00, 3500.00], + [ 3.01672400E+00, 1.03302292E-02, -4.68082349E-06, + 1.01763288E-09, -8.62607041E-14, 3.46128739E+04, + 7.78732378E+00])), + transport=gas_transport(geom='nonlinear', + diam=4.1, + well_depth=209.0, + rot_relax=1.0), + note=u'L2/92') + +species(name=u'C2H4', + atoms='H:4 C:2', + thermo=(NASA([200.00, 1000.00], + [ 3.95920148E+00, -7.57052247E-03, 5.70990292E-05, + -6.91588753E-08, 2.69884373E-11, 5.08977593E+03, + 4.09733096E+00]), + NASA([1000.00, 3500.00], + [ 2.03611116E+00, 1.46454151E-02, -6.71077915E-06, + 1.47222923E-09, -1.25706061E-13, 4.93988614E+03, + 1.03053693E+01])), + transport=gas_transport(geom='nonlinear', + diam=3.971, + well_depth=280.8, + rot_relax=1.5), + note=u'L1/91') + +species(name=u'C2H5', + atoms='H:5 C:2', + thermo=(NASA([200.00, 1000.00], + [ 4.30646568E+00, -4.18658892E-03, 4.97142807E-05, + -5.99126606E-08, 2.30509004E-11, 1.28416265E+04, + 4.70720924E+00]), + NASA([1000.00, 3500.00], + [ 1.95465642E+00, 1.73972722E-02, -7.98206668E-06, + 1.75217689E-09, -1.49641576E-13, 1.28575200E+04, + 1.34624343E+01])), + transport=gas_transport(geom='nonlinear', + diam=4.302, + well_depth=252.3, + rot_relax=1.5), + note=u'L12/92') + +species(name=u'C2H', + atoms='H:1 C:2', + thermo=(NASA([200.00, 1000.00], + [ 2.88965733E+00, 1.34099611E-02, -2.84769501E-05, + 2.94791045E-08, -1.09331511E-11, 6.68393932E+04, + 6.22296438E+00]), + NASA([1000.00, 3500.00], + [ 3.16780652E+00, 4.75221902E-03, -1.83787077E-06, + 3.04190252E-10, -1.77232770E-14, 6.71210650E+04, + 6.63589475E+00])), + transport=gas_transport(geom='linear', + diam=4.1, + well_depth=209.0, + rot_relax=2.5), + note=u'L1/91') + +species(name=u'HCCO', + atoms='H:1 C:2 O:1', + thermo=(NASA([300.00, 1000.00], + [ 2.25172140E+00, 1.76550210E-02, -2.37291010E-05, + 1.72757590E-08, -5.06648110E-12, 2.00594490E+04, + 1.24904170E+01]), + NASA([1000.00, 4000.00], + [ 5.62820580E+00, 4.08534010E-03, -1.59345470E-06, + 2.86260520E-10, -1.94078320E-14, 1.93272150E+04, + -3.93025950E+00])), + transport=gas_transport(geom='nonlinear', + diam=2.5, + well_depth=150.0, + rot_relax=1.0), + note=u'SRIC91') + +species(name=u'C2H2', + atoms='H:2 C:2', + thermo=(NASA([200.00, 1000.00], + [ 8.08681094E-01, 2.33615629E-02, -3.55171815E-05, + 2.80152437E-08, -8.50072974E-12, 2.64289807E+04, + 1.39397051E+01]), + NASA([1000.00, 3500.00], + [ 4.14756964E+00, 5.96166664E-03, -2.37294852E-06, + 4.67412171E-10, -3.61235213E-14, 2.59359992E+04, + -1.23028121E+00])), + transport=gas_transport(geom='linear', + diam=4.1, + well_depth=209.0, + rot_relax=2.5), + note=u'L1/91') + +species(name=u'C3H3', + atoms='H:3 C:3', + thermo=(NASA([300.00, 1000.00], + [ 1.40299238E+00, 3.01773327E-02, -3.98449373E-05, + 2.93534629E-08, -8.70554579E-12, 3.93108220E+04, + 1.51527845E+01]), + NASA([1000.00, 3000.00], + [ 6.14915291E+00, 9.34063166E-03, -3.75055354E-06, + 6.90156316E-10, -4.60824994E-14, 3.83854848E+04, + -7.45345215E+00])), + transport=gas_transport(geom='nonlinear', + diam=4.76, + well_depth=252.0, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'A-C3H5', + atoms='H:5 C:3', + thermo=(NASA([300.00, 1000.00], + [-1.03516444E+00, 3.75043366E-02, -3.26381242E-05, + 1.47662613E-08, -2.43741154E-12, 1.88792254E+04, + 2.71451071E+01]), + NASA([1000.00, 3000.00], + [ 2.28794927E+00, 2.36401575E-02, -1.27891450E-05, + 3.36838540E-09, -3.47449449E-13, 1.83033514E+04, + 1.14063418E+01])), + transport=gas_transport(geom='nonlinear', + diam=4.982, + well_depth=266.8, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'N-C3H7', + atoms='H:7 C:3', + thermo=(NASA([298.15, 1000.00], + [ 1.04754730E+00, 2.60077940E-02, 2.35622520E-06, + -1.95923170E-08, 9.36801160E-12, 1.06326370E+04, + 2.11418760E+01]), + NASA([1000.00, 5000.00], + [ 7.70404050E+00, 1.60415400E-02, -5.28159670E-06, + 7.62544030E-10, -3.93534620E-14, 8.29795310E+03, + -1.54875140E+01])), + transport=gas_transport(geom='nonlinear', + diam=4.982, + well_depth=266.8, + rot_relax=1.0), + note=u'N-L9/85') + +species(name=u'C2H6', + atoms='H:6 C:2', + thermo=(NASA([200.00, 1000.00], + [ 4.29142492E+00, -5.50154270E-03, 5.99438288E-05, + -7.08466285E-08, 2.68685771E-11, -1.15222055E+04, + 2.66682316E+00]), + NASA([1000.00, 3500.00], + [ 1.07188150E+00, 2.16852677E-02, -1.00256067E-05, + 2.21412001E-09, -1.90002890E-13, -1.14263932E+04, + 1.51156107E+01])), + transport=gas_transport(geom='nonlinear', + diam=4.302, + well_depth=252.3, + rot_relax=1.5), + note=u'L8/88') + +species(name=u'P-C3H4', + atoms='H:4 C:3', + thermo=(NASA([300.00, 1000.00], + [ 1.46175323E+00, 2.46026602E-02, -1.90219395E-05, + 8.60363422E-09, -1.66729240E-12, 2.09209793E+04, + 1.49262585E+01]), + NASA([1000.00, 3000.00], + [ 2.81460543E+00, 1.85524496E-02, -9.55026768E-06, + 2.39951370E-09, -2.37485257E-13, 2.07010771E+04, + 8.60604972E+00])), + transport=gas_transport(geom='nonlinear', + diam=4.76, + well_depth=252.0, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'A-C3H4', + atoms='H:4 C:3', + thermo=(NASA([300.00, 1000.00], + [ 3.68928265E-01, 2.89351397E-02, -2.44386408E-05, + 1.12547166E-08, -2.03040262E-12, 2.17585256E+04, + 1.95267211E+01]), + NASA([1000.00, 3000.00], + [ 2.56128757E+00, 1.95080128E-02, -1.04061366E-05, + 2.70165173E-09, -2.75074329E-13, 2.13894289E+04, + 9.20550397E+00])), + transport=gas_transport(geom='nonlinear', + diam=4.76, + well_depth=252.0, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'A1', + atoms='H:6 C:6', + thermo=(NASA([300.00, 1000.00], + [-5.51558393E+00, 6.45453225E-02, -4.41402928E-05, + 7.47712161E-09, 3.10282254E-12, 9.11031457E+03, + 4.65332293E+01]), + NASA([1000.00, 3000.00], + [-2.06240612E-01, 4.64122440E-02, -2.77653536E-05, + 7.88910537E-09, -8.60365259E-13, 8.09883905E+03, + 2.06566629E+01])), + transport=gas_transport(geom='nonlinear', + diam=5.29, + well_depth=464.8, + polar=10.32, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'A1-', + atoms='H:5 C:6', + thermo=(NASA([300.00, 1000.00], + [-4.87654845E+00, 6.26805782E-02, -4.87402286E-05, + 1.41122287E-08, 5.18518312E-13, 3.99269438E+04, + 4.59964173E+01]), + NASA([1000.00, 3000.00], + [ 1.38016336E+00, 4.04032009E-02, -2.42250885E-05, + 6.88723321E-09, -7.50960802E-13, 3.86973520E+04, + 1.55220921E+01])), + transport=gas_transport(geom='nonlinear', + diam=5.29, + well_depth=464.8, + polar=10.32, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'C5H5', + atoms='H:5 C:5', + thermo=(NASA([300.00, 1000.00], + [-7.37844042E+00, 9.72391818E-02, -1.69579138E-04, + 1.51818667E-07, -5.12075479E-11, 3.05514662E+04, + 5.12829539E+01]), + NASA([1000.00, 3000.00], + [ 4.21464919E+00, 2.71834728E-02, -1.33173209E-05, + 3.08980119E-09, -2.77879873E-13, 2.88952416E+04, + -3.05999781E-02])), + transport=gas_transport(geom='nonlinear', + diam=5.2, + well_depth=400.0, + rot_relax=1.0), + note=u'Refitted') + +species(name=u'C3H6', + atoms='H:6 C:3', + thermo=(NASA([300.00, 1000.00], + [-2.29261670E-03, 3.10261065E-02, -1.67151548E-05, + 1.89594170E-09, 1.24957915E-12, 1.13437406E+03, + 2.35719601E+01]), + NASA([1000.00, 3000.00], + [ 4.71697982E-01, 2.89513070E-02, -1.56601819E-05, + 4.11443199E-09, -4.23075141E-13, 1.12603387E+03, + 2.15237289E+01])), + transport=gas_transport(geom='nonlinear', + diam=4.982, + well_depth=266.8, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'C4H8', + atoms='H:8 C:4', + thermo=(NASA([300.00, 1000.00], + [-8.31372089E-01, 4.52580978E-02, -2.93658559E-05, + 1.00220436E-08, -1.43191680E-12, -1.57875035E+03, + 2.95084236E+01]), + NASA([1000.00, 5000.00], + [ 3.04470367E+00, 3.27451765E-02, -1.45363237E-05, + 2.39744017E-09, 0.00000000E+00, -2.52177534E+03, + 1.00151514E+01])), + transport=gas_transport(geom='nonlinear', + diam=5.088, + well_depth=345.7, + dipole=0.3, + rot_relax=1.0), + note=u'000000') + +species(name=u'C5H6', + atoms='H:6 C:5', + thermo=(NASA([300.00, 1000.00], + [-5.13691194E+00, 6.06953453E-02, -4.60552837E-05, + 1.28457201E-08, 7.41214852E-13, 1.53675713E+04, + 4.61567559E+01]), + NASA([1000.00, 3000.00], + [ 2.30537462E-01, 4.09571826E-02, -2.41588958E-05, + 6.79763480E-09, -7.36374421E-13, 1.43779465E+04, + 2.02551234E+01])), + transport=gas_transport(geom='nonlinear', + diam=5.2, + well_depth=400.0), + note=u'G3B3') + +species(name=u'A2', + atoms='H:8 C:10', + thermo=(NASA([300.00, 1000.00], + [-8.72434585E+00, 1.05376008E-01, -8.01710690E-05, + 2.18545974E-08, 1.42066606E-12, 1.48059774E+04, + 6.19827540E+01]), + NASA([1000.00, 3000.00], + [ 1.76826275E+00, 6.89143506E-02, -4.14322176E-05, + 1.17914309E-08, -1.28597061E-12, 1.26883657E+04, + 1.06256608E+01])), + transport=gas_transport(geom='nonlinear', + diam=6.18, + well_depth=630.4, + polar=16.5, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'C5H10', + atoms='H:10 C:5', + thermo=(NASA([300.00, 1000.00], + [-1.06223481E+00, 5.74218294E-02, -3.74486890E-05, + 1.27364989E-08, -1.79609789E-12, -4.46546666E+03, + 3.22739790E+01]), + NASA([1000.00, 5000.00], + [ 3.98580522E+00, 4.12429986E-02, -1.84390497E-05, + 3.06155241E-09, 0.00000000E+00, -5.70112071E+03, + 6.85332264E+00])), + transport=gas_transport(geom='nonlinear', + diam=5.489, + well_depth=386.2, + dipole=0.4, + rot_relax=1.0), + note=u'000000') + +species(name=u'C5H11', + atoms='H:11 C:5', + thermo=(NASA([300.00, 1000.00], + [-9.05255912E-01, 6.10632852E-02, -4.09491825E-05, + 1.46093470E-08, -2.18859615E-12, 4.83995303E+03, + 3.25574963E+01]), + NASA([1000.00, 5000.00], + [ 4.88920629E+00, 4.22834537E-02, -1.85843100E-05, + 3.04124763E-09, 0.00000000E+00, 3.43475468E+03, + 3.43704878E+00])), + transport=gas_transport(geom='nonlinear', + diam=5.041, + well_depth=440.735), + note=u'000000') + +species(name=u'A1C2H2', + atoms='H:7 C:8', + thermo=(NASA([300.00, 1000.00], + [-6.31199276E+00, 9.51097942E-02, -9.56352102E-05, + 4.97780207E-08, -1.02323717E-11, 4.57330975E+04, + 5.35475222E+01]), + NASA([1000.00, 3000.00], + [ 5.85935080E+00, 4.72571459E-02, -2.69864733E-05, + 7.35311775E-09, -7.74900830E-13, 4.33198974E+04, + -5.22359403E+00])), + transport=gas_transport(geom='nonlinear', + diam=6.0, + well_depth=546.2, + dipole=0.13, + polar=15.0, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'A1CH2', + atoms='H:7 C:7', + thermo=(NASA([300.00, 1000.00], + [-6.07053038E+00, 8.35201507E-02, -7.41700083E-05, + 3.13153847E-08, -4.23670868E-12, 2.35894712E+04, + 5.07932172E+01]), + NASA([1000.00, 3000.00], + [ 3.30049696E+00, 4.80055340E-02, -2.78443022E-05, + 7.72371356E-09, -8.27154136E-13, 2.17498572E+04, + 5.42371919E+00])), + transport=gas_transport(geom='nonlinear', + diam=5.68, + well_depth=495.3, + dipole=0.43, + polar=12.3, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'A1CHO', + atoms='H:6 C:7 O:1', + thermo=(NASA([300.00, 1000.00], + [-3.47171048E+00, 6.92891889E-02, -4.32603509E-05, + 3.43871096E-09, 4.81010261E-12, -6.14558774E+03, + 4.14094024E+01]), + NASA([1000.00, 3000.00], + [ 1.87355756E+00, 5.26231551E-02, -3.17644962E-05, + 9.06403069E-09, -9.90306123E-13, -7.23603865E+03, + 1.49787009E+01])), + transport=gas_transport(geom='nonlinear', + diam=5.68, + well_depth=495.3, + dipole=0.43, + polar=12.3, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'A1CH3', + atoms='H:8 C:7', + thermo=(NASA([300.00, 1000.00], + [-4.54072038E+00, 6.85427145E-02, -3.57113024E-05, + -4.19397642E-09, 7.41779795E-12, 4.64121087E+03, + 4.57564849E+01]), + NASA([1000.00, 3000.00], + [-1.01117220E+00, 5.85301912E-02, -3.47595069E-05, + 9.82180993E-09, -1.06680870E-12, 3.99363395E+03, + 2.83610783E+01])), + transport=gas_transport(geom='nonlinear', + diam=5.68, + well_depth=495.3, + dipole=0.43, + polar=12.3, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'C7H15', + atoms='H:15 C:7', + thermo=(NASA([300.00, 1000.00], + [-3.79155767E-02, 7.56726570E-02, -4.07473634E-05, + 9.32678943E-09, -4.92360745E-13, -2.35605303E+03, + 3.37321506E+01]), + NASA([1000.00, 5000.00], + [ 3.74721159E+00, 6.49345162E-02, -3.01341025E-05, + 5.17418142E-09, 0.00000000E+00, -3.37018357E+03, + 1.42780413E+01])), + transport=gas_transport(geom='nonlinear', + diam=6.253, + well_depth=459.6, + rot_relax=1.0), + note=u'000000') + +species(name=u'N-C7H16', + atoms='H:16 C:7', + thermo=(NASA([300.00, 1000.00], + [-1.26836187E+00, 8.54355820E-02, -5.25346786E-05, + 1.62945721E-08, -2.02394925E-12, -2.56586565E+04, + 3.53732912E+01]), + NASA([1000.00, 5000.00], + [ 5.14079241E+00, 6.53078671E-02, -2.94827624E-05, + 4.93726726E-09, 0.00000000E+00, -2.72533890E+04, + 2.98195967E+00])), + transport=gas_transport(geom='nonlinear', + diam=6.253, + well_depth=459.6, + rot_relax=1.0), + note=u'000000') + +species(name=u'A1C2H*', + atoms='H:5 C:8', + thermo=(NASA([300.00, 1000.00], + [-4.42757639E+00, 8.36668645E-02, -8.70106362E-05, + 4.70285661E-08, -1.01816985E-11, 6.73302359E+04, + 4.48118287E+01]), + NASA([1000.00, 3000.00], + [ 7.23812069E+00, 3.83812109E-02, -2.18850731E-05, + 5.97161247E-09, -6.30351467E-13, 6.49528135E+04, + -1.17512654E+01])), + transport=gas_transport(geom='nonlinear', + diam=5.72, + well_depth=535.6, + dipole=0.77, + polar=12.0, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'A2-', + atoms='H:7 C:10', + thermo=(NASA([300.00, 1000.00], + [-8.02718034E+00, 1.02924518E-01, -8.34272010E-05, + 2.72135383E-08, -7.24559554E-13, 5.01363344E+04, + 6.08902264E+01]), + NASA([1000.00, 3000.00], + [ 3.22892303E+00, 6.31264486E-02, -3.80582381E-05, + 1.08454069E-08, -1.18342512E-12, 4.78400840E+04, + 5.82016697E+00])), + transport=gas_transport(geom='nonlinear', + diam=6.18, + well_depth=630.4, + polar=16.5, + rot_relax=1.0), + note=u'G3B3') + +species(name=u'A1C2H', + atoms='H:6 C:8', + thermo=(NASA([300.00, 1000.00], + [-5.21036925E+00, 8.65551944E-02, -8.45007483E-05, + 4.21920706E-08, -8.16766167E-12, 3.52488620E+04, + 4.69445057E+01]), + NASA([1000.00, 3000.00], + [ 5.81520488E+00, 4.40872933E-02, -2.52053858E-05, + 6.90275228E-09, -7.31378908E-13, 3.30271906E+04, + -6.49320690E+00])), + transport=gas_transport(geom='nonlinear', + diam=5.72, + well_depth=535.6, + dipole=0.77, + polar=12.0, + rot_relax=1.0), + note=u'G3B3') + +#------------------------------------------------------------------------------- +# Reaction data +#------------------------------------------------------------------------------- + +# Reaction 1 +reaction('S-CH2 + N2 <=> T-CH2 + N2', [1.500000e+13, 0.0, 599.9]) + +# Reaction 2 +reaction('O + H2 <=> H + OH', [4.590000e+04, 2.7, 6259.56]) + +# Reaction 3 +three_body_reaction('H + O + M => OH + M', [9.430000e+18, -1.0, 0.0], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0') + +# Reaction 4 +three_body_reaction('H + OH + M => H2O + M', [4.400000e+22, -2.0, 0.0], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:6.3 CH4:2.0 C2H6:3.0') + +# Reaction 5 +reaction('OH + H2 <=> H + H2O', [1.730000e+08, 1.51, 3429.73]) + +# Reaction 6 +reaction('2 OH <=> O + H2O', [3.970000e+04, 2.4, -2110.42]) + +# Reaction 7 +falloff_reaction('H + O2 (+ M) => HO2 (+ M)', + kf=[5.120000e+12, 0.44, 0.0], + kf0=[6.330000e+19, -1.4, 0.0], + efficiencies='H2:0.75 H2O:11.89 CO2:2.18 CO:1.09 O2:0.85', + falloff=Troe(A=0.5, T3=0.0, T1=10000000000.0, T2=10000000000.0)) + +# Reaction 8 +reaction('H + O2 <=> O + OH', [2.640000e+16, -0.67, 17041.11]) + +# Reaction 9 +reaction('HO2 + H => O2 + H2', [3.649000e+06, 2.07, -1092.26]) + +# Reaction 10 +reaction('HO2 + H => O + H2O', [3.970000e+12, 0.0, 671.61]) + +# Reaction 11 +reaction('HO2 + H => 2 OH', [7.490000e+13, 0.0, 635.76]) + +# Reaction 12 +reaction('HO2 + O => OH + O2', [4.000000e+13, 0.0, 0.0]) + +# Reaction 13 +reaction('HO2 + OH => H2O + O2', [2.380000e+13, 0.0, -499.52], + options='duplicate') + +# Reaction 14 +reaction('HO2 + OH => H2O + O2', [1.000000e+16, 0.0, 17330.31], + options='duplicate') + +# Reaction 15 +reaction('CH + O => CO + H', [5.700000e+13, 0.0, 0.0]) + +# Reaction 16 +reaction('CH + OH => HCO + H', [3.000000e+13, 0.0, 0.0]) + +# Reaction 17 +reaction('CH + H2 <=> T-CH2 + H', [1.080000e+14, 0.0, 3109.46]) + +# Reaction 18 +reaction('CH + H2O => CH2O + H', [5.710000e+12, 0.0, -755.26]) + +# Reaction 19 +reaction('CH + O2 => HCO + O', [6.710000e+13, 0.0, 0.0]) + +# Reaction 20 +reaction('T-CH2 + O => HCO + H', [8.000000e+13, 0.0, 0.0]) + +# Reaction 21 +reaction('T-CH2 + OH => CH2O + H', [2.000000e+13, 0.0, 0.0]) + +# Reaction 22 +reaction('T-CH2 + OH <=> CH + H2O', [1.130000e+07, 2.0, 2999.52]) + +# Reaction 23 +reaction('T-CH2 + H2 <=> H + CH3', [5.000000e+05, 2.0, 7229.92]) + +# Reaction 24 +reaction('T-CH2 + O2 => CO2 + 2 H', [5.800000e+12, 0.0, 1500.96]) + +# Reaction 25 +reaction('T-CH2 + O2 => CH2O + O', [2.400000e+12, 0.0, 1500.96]) + +# Reaction 26 +reaction('T-CH2 + O2 => OH + H + CO', [5.000000e+12, 0.0, 1500.96]) + +# Reaction 27 +reaction('S-CH2 + H2 <=> CH3 + H', [7.000000e+13, 0.0, 0.0]) + +# Reaction 28 +reaction('S-CH2 + O2 => H + OH + CO', [2.800000e+13, 0.0, 0.0]) + +# Reaction 29 +reaction('S-CH2 + O2 => CO + H2O', [1.200000e+13, 0.0, 0.0]) + +# Reaction 30 +falloff_reaction('S-CH2 + H2O (+ M) => CH2O + H2 (+ M)', + kf=[4.820000e+17, -1.16, 1144.84], + kf0=[1.880000e+38, -6.36, 5040.63], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.6027, T3=208.0, T1=3922.0, T2=10180.0)) + +# Reaction 31 +reaction('S-CH2 + H2O <=> T-CH2 + H2O', [3.000000e+13, 0.0, 0.0]) + +# Reaction 32 +reaction('S-CH2 + H2O => H2 + CH2O', [6.820000e+10, 0.25, -934.51]) + +# Reaction 33 +falloff_reaction('CH3 + H (+ M) <=> CH4 (+ M)', + kf=[6.920000e+13, 0.18, 0.0], + kf0=[3.470000e+38, -6.3, 5074.09], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:3.0 C2H6:3.0') + +# Reaction 34 +reaction('CH3 + O => CH2O + H', [5.060000e+13, 0.0, 0.0]) + +# Reaction 35 +reaction('CH3 + O => H + H2 + CO', [3.370000e+13, 0.0, 0.0]) + +# Reaction 36 +falloff_reaction('CH3 + OH (+ M) => CH2O + H2 (+ M)', + kf=[2.790000e+18, -1.43, 1331.26], + kf0=[4.000000e+36, -5.92, 3140.54], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.412, T3=195.0, T1=5900.0, T2=6394.0)) + +# Reaction 37 +reaction('CH3 + OH <=> T-CH2 + H2O', [5.600000e+07, 1.6, 5420.65]) + +# Reaction 38 +reaction('CH3 + OH <=> S-CH2 + H2O', [6.440000e+17, -1.34, 1417.3]) + +# Reaction 39 +reaction('CH3 + O2 => CH2O + O + H', [1.380000e+13, 0.0, 30480.4]) + +# Reaction 40 +reaction('CH3 + O2 => CH2O + OH', [5.870000e+11, 0.0, 13840.82]) + +# Reaction 41 +reaction('CH3 + HO2 => CH2O + OH + H', [1.000000e+13, 0.0, 0.0]) + +# Reaction 42 +reaction('CH3 + HO2 => CH4 + O2', [3.610000e+12, 0.0, 0.0]) + +# Reaction 43 +reaction('CH3 + CH => C2H3 + H', [3.000000e+13, 0.0, 0.0]) + +# Reaction 44 +reaction('CH3 + T-CH2 => C2H4 + H', [1.000000e+14, 0.0, 0.0]) + +# Reaction 45 +reaction('2 CH3 <=> C2H5 + H', [6.840000e+12, 0.1, 10599.9]) + +# Reaction 46 +reaction('2 CH3 => S-CH2 + CH4', [2.632000e+12, -0.06, 13661.57]) + +# Reaction 47 +reaction('CH4 + H <=> CH3 + H2', [6.600000e+08, 1.62, 10841.3]) + +# Reaction 48 +reaction('CH4 + O <=> CH3 + OH', [1.020000e+09, 1.5, 8599.43]) + +# Reaction 49 +reaction('CH4 + OH <=> CH3 + H2O', [1.000000e+08, 1.6, 3119.02]) + +# Reaction 50 +reaction('CH4 + CH => C2H4 + H', [6.000000e+13, 0.0, 0.0]) + +# Reaction 51 +reaction('CH4 + T-CH2 <=> 2 CH3', [2.460000e+06, 2.0, 8269.6]) + +# Reaction 52 +falloff_reaction('CO + O (+ M) => CO2 (+ M)', + kf=[1.360000e+10, 0.0, 2385.28], + kf0=[1.170000e+24, -2.79, 4192.16], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=1.0, T3=1.0, T1=10000000.0, T2=10000000.0)) + +# Reaction 53 +reaction('CO + OH <=> CO2 + H', [8.000000e+11, 0.14, 7351.82], + options='duplicate') + +# Reaction 54 +reaction('CO + OH <=> CO2 + H', [8.780000e+10, 0.03, -16.73], + options='duplicate') + +# Reaction 55 +reaction('CO + HO2 => CO2 + OH', [3.010000e+13, 0.0, 22999.52]) + +# Reaction 56 +reaction('CO + S-CH2 <=> CO + T-CH2', [9.000000e+12, 0.0, 0.0]) + +# Reaction 57 +reaction('HCO + H => CO + H2', [1.200000e+14, 0.0, 0.0]) + +# Reaction 58 +reaction('HCO + O => CO + OH', [3.000000e+13, 0.0, 0.0]) + +# Reaction 59 +reaction('HCO + O => CO2 + H', [3.000000e+13, 0.0, 0.0]) + +# Reaction 60 +reaction('HCO + OH => CO + H2O', [3.020000e+13, 0.0, 0.0]) + +# Reaction 61 +three_body_reaction('HCO + M <=> CO + H + M', [1.870000e+17, -1.0, 17000.48], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:0.0 CH4:2.0 C2H6:3.0') + +# Reaction 62 +reaction('HCO + H2O <=> CO + H + H2O', [2.240000e+18, -1.0, 17000.48]) + +# Reaction 63 +reaction('HCO + O2 => CO + HO2', [1.200000e+10, 0.81, -726.58]) + +# Reaction 64 +reaction('CH3 + HCO => CH4 + CO', [2.650000e+13, 0.0, 0.0]) + +# Reaction 65 +reaction('CH2O + H <=> HCO + H2', [5.740000e+07, 1.9, 2741.4]) + +# Reaction 66 +reaction('CH2O + O => HCO + OH', [3.900000e+13, 0.0, 3539.67]) + +# Reaction 67 +reaction('CH2O + OH => HCO + H2O', [3.430000e+09, 1.18, -446.94]) + +# Reaction 68 +reaction('CH3 + CH2O => CH4 + HCO', [3.320000e+03, 2.81, 5860.42]) + +# Reaction 69 +reaction('CO2 + CH => HCO + CO', [1.900000e+14, 0.0, 15791.11]) + +# Reaction 70 +reaction('CO2 + S-CH2 <=> CO2 + T-CH2', [7.000000e+12, 0.0, 0.0]) + +# Reaction 71 +reaction('CO2 + S-CH2 => CH2O + CO', [1.400000e+13, 0.0, 0.0]) + +# Reaction 72 +reaction('C2H + O => CH + CO', [5.000000e+13, 0.0, 0.0]) + +# Reaction 73 +reaction('C2H + OH => HCCO + H', [2.000000e+13, 0.0, 0.0]) + +# Reaction 74 +reaction('C2H + O2 => HCO + CO', [1.000000e+13, 0.0, -755.26]) + +# Reaction 75 +reaction('C2H + H2 <=> C2H2 + H', [3.310000e+06, 2.26, 901.05]) + +# Reaction 76 +falloff_reaction('C2H2 + H (+ M) <=> C2H3 (+ M)', + kf=[1.710000e+10, 1.27, 2707.93], + kf0=[6.340000e+31, -4.66, 3781.07], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.2122, T3=1.0, T1=-10210.0)) + +# Reaction 77 +reaction('C2H2 + O => HCCO + H', [8.100000e+06, 2.0, 1900.1]) + +# Reaction 78 +reaction('C2H2 + O => T-CH2 + CO', [1.250000e+07, 2.0, 1900.1]) + +# Reaction 79 +reaction('C2H2 + O => C2H + OH', [3.324000e+16, -0.44, 30697.9]) + +# Reaction 80 +reaction('C2H2 + OH => C2H + H2O', [2.630000e+06, 2.14, 17060.23]) + +# Reaction 81 +reaction('C2H2 + OH => CH3 + CO', [7.530000e+06, 1.55, 2105.64], + options='duplicate') + +# Reaction 82 +reaction('C2H2 + OH => CH3 + CO', [1.280000e+09, 0.73, 2578.87], + options='duplicate') + +# Reaction 83 +reaction('C2H2 + S-CH2 <=> C3H3 + H', [1.900000e+14, 0.0, 0.0]) + +# Reaction 84 +falloff_reaction('C2H3 + H (+ M) => C2H4 (+ M)', + kf=[6.080000e+12, 0.27, 279.64], + kf0=[1.400000e+30, -3.86, 3319.79], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.782, T3=207.5, T1=2663.0, T2=6095.0)) + +# Reaction 85 +reaction('C2H3 + H => C2H2 + H2', [3.000000e+13, 0.0, 0.0]) + +# Reaction 86 +reaction('C2H3 + O => CH3 + CO', [1.030000e+13, 0.21, -427.82]) + +# Reaction 87 +reaction('C2H3 + OH => C2H2 + H2O', [5.000000e+12, 0.0, 0.0]) + +# Reaction 88 +reaction('C2H3 + O2 => C2H2 + HO2', [1.340000e+06, 1.61, -384.8]) + +# Reaction 89 +reaction('C2H3 + O2 => CH3 + CO + O', [3.030000e+11, 0.29, 11.95]) + +# Reaction 90 +reaction('C2H3 + O2 => HCO + CH2O', [4.580000e+16, -1.39, 1015.77]) + +# Reaction 91 +reaction('C2H3 + HCO => C2H4 + CO', [9.000000e+13, 0.0, 0.0]) + +# Reaction 92 +reaction('C2H3 + CH3 => C2H2 + CH4', [9.030000e+12, 0.0, -764.82]) + +# Reaction 93 +reaction('C2H3 + CH3 <=> A-C3H5 + H', [1.930000e+18, -1.25, 7669.69]) + +# Reaction 94 +falloff_reaction('C2H4 + H (+ M) <=> C2H5 (+ M)', + kf=[1.370000e+09, 1.46, 1355.16], + kf0=[2.030000e+39, -6.64, 5769.6], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=-0.569, T3=299.0, T1=-9147.0, T2=152.4)) + +# Reaction 95 +reaction('C2H4 + H => C2H3 + H2', [1.330000e+06, 2.53, 12239.48]) + +# Reaction 96 +reaction('C2H4 + O => CH3 + CO + H', [7.660000e+09, 0.88, 1140.06]) + +# Reaction 97 +reaction('C2H4 + O => T-CH2 + CH2O', [7.150000e+04, 2.47, 929.73]) + +# Reaction 98 +reaction('C2H4 + O => CH3 + HCO', [3.890000e+08, 1.36, 886.71]) + +# Reaction 99 +reaction('C2H4 + OH => C2H3 + H2O', [1.310000e-01, 4.2, -860.42]) + +# Reaction 100 +reaction('C2H4 + OH => CH3 + CH2O', [3.750000e+36, -7.8, 7060.23]) + +# Reaction 101 +reaction('C2H4 + CH3 => C2H3 + CH4', [2.270000e+05, 2.0, 9199.33]) + +# Reaction 102 +falloff_reaction('C2H4 + CH3 (+ M) <=> N-C3H7 (+ M)', + kf=[2.550000e+06, 1.6, 5700.29], + kf0=[3.000000e+63, -14.6, 18169.22], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.1894, T3=277.0, T1=8748.0, T2=7891.0)) + +# Reaction 103 +falloff_reaction('C2H5 + H (+ M) <=> C2H6 (+ M)', + kf=[5.210000e+17, -0.99, 1579.83], + kf0=[1.990000e+41, -7.08, 6684.99], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.8422, T3=125.0, T1=2219.0, T2=6882.0)) + +# Reaction 104 +reaction('C2H5 + O => CH3 + CH2O', [3.170000e+13, 0.03, -394.36]) + +# Reaction 105 +reaction('C2H5 + O2 => C2H4 + HO2', [1.920000e+07, 1.02, -2033.94]) + +# Reaction 106 +reaction('C2H5 + HCO => C2H6 + CO', [1.200000e+14, 0.0, 0.0]) + +# Reaction 107 +reaction('C2H5 + HO2 => C2H6 + O2', [3.000000e+11, 0.0, 0.0]) + +# Reaction 108 +reaction('C2H5 + HO2 => CH3 + CH2O + OH', [3.100000e+13, 0.0, 0.0]) + +# Reaction 109 +falloff_reaction('C2H6 (+ M) <=> 2 CH3 (+ M)', + kf=[1.880000e+50, -9.72, 107342.26], + kf0=[3.720000e+65, -13.14, 101579.83], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.39, T3=100.0, T1=1900.0, T2=6000.0)) + +# Reaction 110 +reaction('C2H6 + H => C2H5 + H2', [1.700000e+05, 2.7, 5740.92]) + +# Reaction 111 +reaction('C2H6 + O => C2H5 + OH', [8.980000e+07, 1.92, 5690.73]) + +# Reaction 112 +reaction('C2H6 + OH => C2H5 + H2O', [1.610000e+06, 2.22, 740.92]) + +# Reaction 113 +reaction('C2H6 + CH3 => C2H5 + CH4', [8.430000e+14, 0.0, 22256.21]) + +# Reaction 114 +falloff_reaction('HCCO (+ M) => CO + CH (+ M)', + kf=[2.255000e+20, -1.44, 74732.31], + kf0=[1.213000e+35, -5.18, 76668.26], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.5757, T3=237.0, T1=1652.0, T2=5069.0)) + +# Reaction 115 +reaction('HCCO + H => S-CH2 + CO', [1.000000e+14, 0.0, 0.0]) + +# Reaction 116 +reaction('HCCO + O => H + 2 CO', [1.000000e+14, 0.0, 0.0]) + +# Reaction 117 +reaction('HCCO + O2 => OH + 2 CO', [4.200000e+10, 0.0, 853.25]) + +# Reaction 118 +reaction('2 HCCO => C2H2 + 2 CO', [1.000000e+13, 0.0, 0.0]) + +# Reaction 119 +reaction('HCCO + C2H2 => C3H3 + CO', [1.000000e+11, 0.0, 2999.52]) + +# Reaction 120 +reaction('HCCO + CH3 => C2H4 + CO', [5.000000e+13, 0.0, 0.0]) + +# Reaction 121 +reaction('HCCO + OH => 2 HCO', [1.000000e+13, 0.0, 0.0]) + +# Reaction 122 +reaction('C3H3 + H <=> P-C3H4', [7.940000e+29, -5.06, 4861.38]) + +# Reaction 123 +reaction('C3H3 + H <=> A-C3H4', [3.160000e+29, -5.0, 4710.8]) + +# Reaction 124 +reaction('C3H3 + OH => C2H4 + CO', [1.280000e+09, 0.73, 2578.87]) + +# Reaction 125 +reaction('C3H3 + O => C2H2 + CO + H', [6.950000e+13, 0.0, 0.0]) + +# Reaction 126 +reaction('C3H3 + O2 => CH3 + 2 CO', [1.700000e+05, 1.7, 1500.96]) + +# Reaction 127 +reaction('C3H3 + HO2 => OH + CO + C2H3', [8.000000e+11, 0.0, 0.0]) + +# Reaction 128 +reaction('2 C3H3 <=> A1', [1.870000e+46, -9.84, 16804.49]) + +# Reaction 129 +reaction('2 C3H3 <=> A1- + H', [5.770000e+37, -7.0, 31505.74]) + +# Reaction 130 +reaction('C3H3 + C2H2 <=> C5H5', [2.350000e+11, 0.0, 9995.22]) + +# Reaction 131 +reaction('P-C3H4 + H <=> C2H2 + CH3', [3.460000e+12, 0.44, 5463.67]) + +# Reaction 132 +reaction('P-C3H4 + H <=> C3H3 + H2', [8.500000e+04, 2.7, 5740.92]) + +# Reaction 133 +reaction('P-C3H4 + OH => C3H3 + H2O', [8.050000e+05, 2.22, 740.92]) + +# Reaction 134 +reaction('P-C3H4 + CH3 => C3H3 + CH4', [4.220000e+14, 0.0, 22256.21]) + +# Reaction 135 +reaction('P-C3H4 + O => HCCO + CH3', [4.050000e+06, 2.0, 1900.1]) + +# Reaction 136 +reaction('P-C3H4 + O => C2H4 + CO', [6.250000e+06, 2.0, 1900.1]) + +# Reaction 137 +reaction('P-C3H4 + OH => C2H5 + CO', [1.280000e+09, 0.73, 2578.87]) + +# Reaction 138 +reaction('A-C3H4 + H <=> C2H2 + CH3', [8.950000e+13, -0.02, 11250.0]) + +# Reaction 139 +reaction('A-C3H4 <=> P-C3H4', [7.760000e+39, -7.8, 78446.46]) + +# Reaction 140 +reaction('A-C3H4 + H <=> P-C3H4 + H', [2.470000e+15, -0.33, 6436.42]) + +# Reaction 141 +reaction('A-C3H4 + H => C3H3 + H2', [1.330000e+06, 2.53, 12239.48]) + +# Reaction 142 +reaction('A-C3H4 + OH => C3H3 + H2O', [1.310000e-01, 4.2, -860.42]) + +# Reaction 143 +reaction('A-C3H4 + CH3 => C3H3 + CH4', [2.270000e+05, 2.0, 9199.33]) + +# Reaction 144 +reaction('A-C3H4 + H <=> A-C3H5', [2.010000e+49, -10.77, 19622.37]) + +# Reaction 145 +reaction('A-C3H5 + H => A-C3H4 + H2', [9.560000e+03, 2.8, 3291.11]) + +# Reaction 146 +reaction('A-C3H5 + OH => A-C3H4 + H2O', [6.030000e+12, 0.0, 0.0]) + +# Reaction 147 +reaction('A-C3H5 + CH3 => A-C3H4 + CH4', [4.860000e+11, -0.32, -131.45]) + +# Reaction 148 +reaction('A-C3H5 + O2 => C2H2 + CH2O + OH', [9.710000e+20, -2.7, 24980.88]) + +# Reaction 149 +reaction('A-C3H5 + C3H3 => A1 + 2 H', [2.160000e+39, -7.74, 23852.77]) + +# Reaction 150 +falloff_reaction('C3H6 + H (+ M) <=> N-C3H7 (+ M)', + kf=[3.060000e+14, -0.37, 4032.03], + kf0=[6.260000e+38, -6.66, 7000.48], + efficiencies='CO2:3.6 CO:1.75 H2:2.0 H2O:12.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=1.0, T3=1000.0, T1=1310.0, T2=48100.0)) + +# Reaction 151 +reaction('C3H6 <=> C2H3 + CH3', [4.040000e+42, -7.67, 111830.78]) + +# Reaction 152 +reaction('A-C3H5 + H <=> C3H6', [5.930000e+54, -11.76, 23549.24]) + +# Reaction 153 +reaction('C3H6 + H <=> C2H4 + CH3', [8.000000e+21, -2.39, 11180.69]) + +# Reaction 154 +reaction('C3H6 + O => 2 CH3 + CO', [1.200000e+08, 1.6, 327.44]) + +# Reaction 155 +reaction('C3H6 + O => C2H5 + HCO', [3.500000e+07, 1.6, -972.75]) + +# Reaction 156 +reaction('C3H6 + H => A-C3H5 + H2', [6.600000e+05, 2.54, 6756.69]) + +# Reaction 157 +reaction('C3H6 + O => A-C3H5 + OH', [9.650000e+04, 2.68, 3716.54]) + +# Reaction 158 +reaction('C3H6 + OH => A-C3H5 + H2O', [2.000000e+08, 1.46, 537.76]) + +# Reaction 159 +reaction('C3H6 + CH3 => A-C3H5 + CH4', [4.520000e-01, 3.65, 7153.44]) + +# Reaction 160 +reaction('C4H8 + H => C2H5 + C2H4', [7.680000e+12, 0.11, 1479.45]) + +# Reaction 161 +reaction('C4H8 => A-C3H5 + CH3', [5.000000e+15, 0.0, 70999.04]) + +# Reaction 162 +reaction('C5H5 + HO2 => O2 + C5H6', [2.561000e+12, 0.06, 3116.63]) + +# Reaction 163 +reaction('2 C5H5 => A2 + 2 H', [6.390000e+29, -4.03, 35205.54]) + +# Reaction 164 +reaction('C5H5 + O => C2H3 + C2H2 + CO', [7.000000e+13, 0.0, 0.0]) + +# Reaction 165 +reaction('C5H5 + HO2 => C2H3 + C2H2 + CO + OH', [6.776000e+29, -4.7, 11658.7]) + +# Reaction 166 +reaction('C5H5 + HO2 => 2 C2H2 + CO + H2O', [1.190000e+33, -6.52, 13401.05]) + +# Reaction 167 +reaction('C5H5 + OH => C2H3 + C2H2 + CO + H', [3.020000e+13, 0.0, 0.0]) + +# Reaction 168 +reaction('C5H6 <=> C5H5 + H', [1.730000e+68, -15.16, 116371.89]) + +# Reaction 169 +reaction('C5H6 + H => C5H5 + H2', [2.800000e+13, 0.0, 2258.6]) + +# Reaction 170 +reaction('C5H6 + H => A-C3H5 + C2H2', [6.600000e+14, 0.0, 12344.65]) + +# Reaction 171 +reaction('C5H6 + O => C5H5 + OH', [4.770000e+04, 2.71, 1106.6]) + +# Reaction 172 +reaction('C5H6 + OH => C5H5 + H2O', [3.080000e+06, 2.0, 0.0]) + +# Reaction 173 +reaction('C5H6 + CH3 => C5H5 + CH4', [1.800000e-01, 4.0, 0.0]) + +# Reaction 174 +reaction('C5H10 + H => C5H11', [7.100000e+12, 0.12, 1460.33]) + +# Reaction 175 +reaction('C5H10 => C2H5 + A-C3H5', [9.170000e+20, -1.63, 73989.01]) + +# Reaction 176 +reaction('C5H11 => C2H4 + N-C3H7', [7.460000e+21, -2.61, 32026.77]) + +# Reaction 177 +reaction('C5H11 => H + C5H10', [8.460000e+14, -0.47, 37617.11]) + +# Reaction 178 +reaction('C5H11 => C3H6 + C2H5', [3.150000e-19, 8.84, 7105.64]) + +# Reaction 179 +reaction('A1- + O2 => C5H5 + CO + O', [2.600000e+13, 0.0, 6120.94]) + +# Reaction 180 +reaction('A1- + O2 => 2 CO + 2 C2H2 + H', [3.000000e+13, 0.0, 8979.45]) + +# Reaction 181 +reaction('A1- + O => C5H5 + CO', [1.000000e+14, 0.0, 0.0]) + +# Reaction 182 +reaction('A1- + OH => C5H6 + CO', [3.000000e+13, 0.0, 0.0]) + +# Reaction 183 +reaction('A1- + HO2 => C5H5 + CO + OH', [3.000000e+13, 0.0, 0.0]) + +# Reaction 184 +reaction('A1- + C2H2 <=> A1C2H2', [3.290000e+06, 2.05, 3162.05]) + +# Reaction 185 +reaction('A1 <=> A1- + H', [1.290000e+61, -12.48, 148085.56]) + +# Reaction 186 +reaction('A1 + H => A1- + H2', [6.020000e+08, 1.8, 16352.77]) + +# Reaction 187 +reaction('A1 + OH => A1- + H2O', [4.030000e+02, 3.33, 1455.54]) + +# Reaction 188 +reaction('A1 + CH3 => A1- + CH4', [2.752000e-02, 4.46, 13637.67]) + +# Reaction 189 +reaction('A1 + O => C5H5 + CO + H', [2.220000e+13, 0.0, 4531.55]) + +# Reaction 190 +reaction('A1 + OH => C5H6 + CO + H', [1.320000e+02, 3.25, 5590.34]) + +# Reaction 191 +reaction('A1CH2 <=> C5H5 + C2H2', [8.200000e+14, 0.0, 80676.39]) + +# Reaction 192 +reaction('A1CH2 + H <=> A1- + CH3', [5.830000e+67, -14.15, 68329.35]) + +# Reaction 193 +reaction('A1CH2 + O => A1CHO + H', [3.310000e+14, 0.0, 0.0]) + +# Reaction 194 +reaction('A1CH2 + HO2 => A1CHO + OH + H', [1.060000e+16, -0.94, 2523.9]) + +# Reaction 195 +reaction('A1CH2 + C3H3 => A2 + 2 H', [4.320000e+39, -7.74, 23852.77]) + +# Reaction 196 +reaction('A1CH3 + H <=> A1 + CH3', [2.310000e+06, 2.17, 4163.48]) + +# Reaction 197 +reaction('A1CH3 <=> A1CH2 + H', [1.250000e+18, -0.6, 94787.28]) + +# Reaction 198 +reaction('A1CH3 <=> A1- + CH3', [2.160000e+29, -3.58, 110164.91]) + +# Reaction 199 +reaction('A1CH3 + H => A1CH2 + H2', [6.470000e+00, 3.98, 3384.32]) + +# Reaction 200 +reaction('A1CH3 + OH => A1CH2 + H2O', [1.620000e+13, 0.0, 2770.08]) + +# Reaction 201 +reaction('A1CH3 + CH3 => A1CH2 + CH4', [4.220000e+14, 0.0, 22256.21]) + +# Reaction 202 +reaction('C7H15 => C5H11 + C2H4', [1.890000e+12, 0.02, 27784.42]) + +# Reaction 203 +reaction('C7H15 => C2H5 + C2H4 + C3H6', [7.730000e+18, -1.75, 31974.19]) + +# Reaction 204 +reaction('C7H15 => C4H8 + N-C3H7', [2.530000e+18, -1.65, 31682.6]) + +# Reaction 205 +reaction('C7H15 => C2H5 + C5H10', [2.490000e+16, -1.18, 29517.21]) + +# Reaction 206 +reaction('N-C7H16 => C5H11 + C2H5', [8.100000e+77, -17.62, 120399.14]) + +# Reaction 207 +reaction('N-C7H16 => C2H5 + C2H4 + N-C3H7', [1.420000e+78, -17.71, 120700.29]) + +# Reaction 208 +reaction('N-C7H16 + H => C7H15 + H2', [1.750000e+06, 2.6, 4361.85]) + +# Reaction 209 +reaction('N-C7H16 + O => C7H15 + OH', [1.720000e+05, 2.81, 2260.99]) + +# Reaction 210 +reaction('N-C7H16 + OH => C7H15 + H2O', [7.400000e+08, 1.5, 258.13]) + +# Reaction 211 +reaction('N-C7H16 + CH3 => C7H15 + CH4', [1.460000e+04, 2.57, 6933.56]) + +# Reaction 212 +reaction('A1CHO => A1- + HCO', [2.610000e+15, 0.15, 80549.71]) + +# Reaction 213 +reaction('A1CHO + H => A1- + CO + H2', [2.050000e+09, 1.16, 2404.4]) + +# Reaction 214 +reaction('A1CHO + CH3 => A1- + CO + CH4', [2.720000e+06, 1.77, 5920.17]) + +# Reaction 215 +reaction('A1C2H* + C2H2 <=> A2-', [1.340000e+04, 2.5, 1283.46]) + +# Reaction 216 +reaction('A1C2H* + C2H4 <=> A2 + H', [3.620000e+28, -4.24, 23864.72]) + +# Reaction 217 +reaction('A1C2H <=> A1C2H* + H', [2.100000e+60, -12.4, 148076.0]) + +# Reaction 218 +reaction('A1C2H + H <=> A1C2H* + H2', [1.320000e+08, 1.88, 16821.22]) + +# Reaction 219 +reaction('A1C2H + OH <=> A1C2H* + H2O', [1.340000e+02, 3.33, 1455.54]) + +# Reaction 220 +reaction('A1C2H2 <=> A1C2H + H', [1.340000e+17, -0.86, 41238.05]) + +# Reaction 221 +reaction('A1C2H2 + C2H2 <=> A2 + H', [7.091000e+13, -0.26, 7002.87]) + +# Reaction 222 +reaction('A2 <=> A2- + H', [8.600000e+60, -12.48, 148076.0]) + +# Reaction 223 +reaction('A2 + H <=> A2- + H2', [2.650000e+08, 1.87, 17096.08]) + +# Reaction 224 +reaction('A2 + OH <=> A2- + H2O', [9.630000e+02, 3.02, 4373.8]) diff --git a/samples/python/AVBP/inputs/BISETTI.yaml b/samples/python/AVBP/inputs/BISETTI.yaml new file mode 100644 index 00000000000..fe0e0b7e836 --- /dev/null +++ b/samples/python/AVBP/inputs/BISETTI.yaml @@ -0,0 +1,1367 @@ +description: |- + nits(length='cm', time='s', quantity='mol', act_energy='cal/mol') + +generator: cti2yaml +cantera-version: 3.0.0 +date: Wed, 20 Dec 2023 16:58:00 +0100 +input-files: [BISETTI.cti] + +units: {length: cm, quantity: mol, activation-energy: cal/mol} + +phases: +- name: gas + thermo: ideal-gas + elements: [N, C, H, O, Ar] + species: [AR, N2, S-CH2, T-CH2, O, H2, H, OH, H2O, O2, HO2, CH, CO, HCO, + CH2O, CH3, CO2, CH4, C2H3, C2H4, C2H5, C2H, HCCO, C2H2, C3H3, A-C3H5, + N-C3H7, C2H6, P-C3H4, A-C3H4, A1, A1-, C5H5, C3H6, C4H8, C5H6, A2, C5H10, + C5H11, A1C2H2, A1CH2, A1CHO, A1CH3, C7H15, N-C7H16, A1C2H*, A2-, A1C2H] + kinetics: gas + reactions: all + transport: mixture-averaged + state: + T: 300.0 + P: 1.01325e+05 + +species: +- name: AR + composition: {Ar: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [2.5, 0.0, 0.0, 0.0, 0.0, -745.375, 4.37967491] + - [2.5, 0.0, 0.0, 0.0, 0.0, -745.375, 4.37967491] + transport: + model: gas + geometry: atom + diameter: 3.33 + well-depth: 136.5 + note: REFELEMENTG5/97 +- name: N2 + composition: {N: 2} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [3.298677, 1.4082404e-03, -3.963222e-06, 5.641515e-09, -2.444854e-12, + -1020.8999, 3.950372] + - [2.92664, 1.4879768e-03, -5.68476e-07, 1.0097038e-10, -6.753351e-15, + -922.7977, 5.980528] + transport: + model: gas + geometry: linear + diameter: 3.621 + well-depth: 97.53 + polarizability: 1.76 + rotational-relaxation: 4.0 + note: '121286' +- name: S-CH2 + composition: {H: 2, C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.19860411, -2.36661419e-03, 8.2329622e-06, -6.68815981e-09, 1.94314737e-12, + 5.04968163e+04, -0.769118967] + - [2.29203842, 4.65588637e-03, -2.01191947e-06, 4.17906e-10, -3.39716365e-14, + 5.09259997e+04, 8.62650169] + transport: + model: gas + geometry: linear + diameter: 3.8 + well-depth: 144.0 + note: LS/93 +- name: T-CH2 + composition: {H: 2, C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.76267867, 9.68872143e-04, 2.79489841e-06, -3.85091153e-09, 1.68741719e-12, + 4.60040401e+04, 1.56253185] + - [2.87410113, 3.65639292e-03, -1.40894597e-06, 2.60179549e-10, -1.87727567e-14, + 4.6263604e+04, 6.17119324] + transport: + model: gas + geometry: linear + diameter: 3.8 + well-depth: 144.0 + note: LS/93 +- name: O + composition: {O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.1682671, -3.27931884e-03, 6.64306396e-06, -6.12806624e-09, 2.11265971e-12, + 2.91222592e+04, 2.05193346] + - [2.56942078, -8.59741137e-05, 4.19484589e-08, -1.00177799e-11, 1.22833691e-15, + 2.92175791e+04, 4.78433864] + transport: + model: gas + geometry: atom + diameter: 2.75 + well-depth: 80.0 + note: L1/90 +- name: H2 + composition: {H: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.34433112, 7.98052075e-03, -1.9478151e-05, 2.01572094e-08, -7.37611761e-12, + -917.935173, 0.683010238] + - [3.3372792, -4.94024731e-05, 4.99456778e-07, -1.79566394e-10, 2.00255376e-14, + -950.158922, -3.20502331] + transport: + model: gas + geometry: linear + diameter: 2.92 + well-depth: 38.0 + polarizability: 0.79 + rotational-relaxation: 280.0 + note: TPIS78 +- name: H + composition: {H: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.5, 7.05332819e-13, -1.99591964e-15, 2.30081632e-18, -9.27732332e-22, + 2.54736599e+04, -0.446682853] + - [2.50000001, -2.30842973e-11, 1.61561948e-14, -4.73515235e-18, 4.98197357e-22, + 2.54736599e+04, -0.446682914] + transport: + model: gas + geometry: atom + diameter: 2.05 + well-depth: 145.0 + note: L7/88 +- name: OH + composition: {H: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [4.12530561, -3.22544939e-03, 6.52764691e-06, -5.79853643e-09, 2.06237379e-12, + 3381.53812, -0.69043296] + - [2.86472886, 1.05650448e-03, -2.59082758e-07, 3.05218674e-11, -1.33195876e-15, + 3718.85774, 5.70164073] + transport: + model: gas + geometry: linear + diameter: 2.75 + well-depth: 80.0 + note: S9/01 +- name: H2O + composition: {H: 2, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.19864056, -2.0364341e-03, 6.52040211e-06, -5.48797062e-09, 1.77197817e-12, + -3.02937267e+04, -0.849032208] + - [3.03399249, 2.17691804e-03, -1.64072518e-07, -9.7041987e-11, 1.68200992e-14, + -3.00042971e+04, 4.9667701] + transport: + model: gas + geometry: nonlinear + diameter: 2.605 + well-depth: 572.4 + dipole: 1.844 + rotational-relaxation: 4.0 + note: L8/89 +- name: O2 + composition: {O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.78245636, -2.99673416e-03, 9.84730201e-06, -9.68129509e-09, 3.24372837e-12, + -1063.94356, 3.65767573] + - [3.28253784, 1.48308754e-03, -7.57966669e-07, 2.09470555e-10, -2.16717794e-14, + -1088.45772, 5.45323129] + transport: + model: gas + geometry: linear + diameter: 3.458 + well-depth: 107.4 + polarizability: 1.6 + rotational-relaxation: 3.8 + note: TPIS89 +- name: HO2 + composition: {H: 1, O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.30179801, -4.74912051e-03, 2.11582891e-05, -2.42763894e-08, 9.29225124e-12, + 294.80804, 3.71666245] + - [4.0172109, 2.23982013e-03, -6.3365815e-07, 1.1424637e-10, -1.07908535e-14, + 111.856713, 3.78510215] + transport: + model: gas + geometry: nonlinear + diameter: 3.458 + well-depth: 107.4 + rotational-relaxation: 1.0 + note: L5/89 +- name: CH + composition: {H: 1, C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.48981665, 3.23835541e-04, -1.68899065e-06, 3.16217327e-09, -1.40609067e-12, + 7.07972934e+04, 2.08401108] + - [2.87846473, 9.70913681e-04, 1.44445655e-07, -1.30687849e-10, 1.76079383e-14, + 7.10124364e+04, 5.48497999] + transport: + model: gas + geometry: linear + diameter: 2.75 + well-depth: 80.0 + note: TPIS79 +- name: CO + composition: {C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.57953347, -6.1035368e-04, 1.01681433e-06, 9.07005884e-10, -9.04424499e-13, + -1.4344086e+04, 3.50840928] + - [2.71518561, 2.06252743e-03, -9.98825771e-07, 2.30053008e-10, -2.03647716e-14, + -1.41518724e+04, 7.81868772] + transport: + model: gas + geometry: linear + diameter: 3.65 + well-depth: 98.1 + polarizability: 1.95 + rotational-relaxation: 1.8 + note: TPIS79 +- name: HCO + composition: {H: 1, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.22118584, -3.24392532e-03, 1.37799446e-05, -1.33144093e-08, 4.33768865e-12, + 3839.56496, 3.39437243] + - [2.77217438, 4.95695526e-03, -2.48445613e-06, 5.89161778e-10, -5.33508711e-14, + 4011.91815, 9.79834492] + transport: + model: gas + geometry: nonlinear + diameter: 3.59 + well-depth: 498.0 + note: L12/89 +- name: CH2O + composition: {H: 2, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.79372315, -9.90833369e-03, 3.73220008e-05, -3.79285261e-08, 1.31772652e-11, + -1.43089567e+04, 0.6028129] + - [1.76069008, 9.20000082e-03, -4.42258813e-06, 1.00641212e-09, -8.8385564e-14, + -1.39958323e+04, 13.656323] + transport: + model: gas + geometry: nonlinear + diameter: 3.59 + well-depth: 498.0 + rotational-relaxation: 2.0 + note: L8/88 +- name: CH3 + composition: {H: 3, C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [3.6571797, 2.1265979e-03, 5.4583883e-06, -6.6181003e-09, 2.4657074e-12, + 1.6422716e+04, 1.6735354] + - [2.9781206, 5.797852e-03, -1.97558e-06, 3.072979e-10, -1.7917416e-14, + 1.6509513e+04, 4.7224799] + transport: + model: gas + geometry: linear + diameter: 3.8 + well-depth: 144.0 + note: METHYLIU0702 +- name: CO2 + composition: {C: 1, O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.35677352, 8.98459677e-03, -7.12356269e-06, 2.45919022e-09, -1.43699548e-13, + -4.83719697e+04, 9.90105222] + - [3.85746029, 4.41437026e-03, -2.21481404e-06, 5.23490188e-10, -4.72084164e-14, + -4.8759166e+04, 2.27163806] + transport: + model: gas + geometry: linear + diameter: 3.763 + well-depth: 244.0 + polarizability: 2.65 + rotational-relaxation: 2.1 + note: L7/88 +- name: CH4 + composition: {H: 4, C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [5.14911468, -0.0136622009, 4.91453921e-05, -4.84246767e-08, 1.66603441e-11, + -1.02465983e+04, -4.63848842] + - [1.65326226, 0.0100263099, -3.31661238e-06, 5.36483138e-10, -3.14696758e-14, + -1.00095936e+04, 9.90506283] + transport: + model: gas + geometry: nonlinear + diameter: 3.746 + well-depth: 141.4 + polarizability: 2.6 + rotational-relaxation: 13.0 + note: g8/99 +- name: C2H3 + composition: {H: 3, C: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.21246645, 1.51479162e-03, 2.59209412e-05, -3.57657847e-08, 1.47150873e-11, + 3.48598468e+04, 8.51054025] + - [3.016724, 0.0103302292, -4.68082349e-06, 1.01763288e-09, -8.62607041e-14, + 3.46128739e+04, 7.78732378] + transport: + model: gas + geometry: nonlinear + diameter: 4.1 + well-depth: 209.0 + rotational-relaxation: 1.0 + note: L2/92 +- name: C2H4 + composition: {H: 4, C: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.95920148, -7.57052247e-03, 5.70990292e-05, -6.91588753e-08, 2.69884373e-11, + 5089.77593, 4.09733096] + - [2.03611116, 0.0146454151, -6.71077915e-06, 1.47222923e-09, -1.25706061e-13, + 4939.88614, 10.3053693] + transport: + model: gas + geometry: nonlinear + diameter: 3.971 + well-depth: 280.8 + rotational-relaxation: 1.5 + note: L1/91 +- name: C2H5 + composition: {H: 5, C: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.30646568, -4.18658892e-03, 4.97142807e-05, -5.99126606e-08, 2.30509004e-11, + 1.28416265e+04, 4.70720924] + - [1.95465642, 0.0173972722, -7.98206668e-06, 1.75217689e-09, -1.49641576e-13, + 1.285752e+04, 13.4624343] + transport: + model: gas + geometry: nonlinear + diameter: 4.302 + well-depth: 252.3 + rotational-relaxation: 1.5 + note: L12/92 +- name: C2H + composition: {H: 1, C: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.88965733, 0.0134099611, -2.84769501e-05, 2.94791045e-08, -1.09331511e-11, + 6.68393932e+04, 6.22296438] + - [3.16780652, 4.75221902e-03, -1.83787077e-06, 3.04190252e-10, -1.7723277e-14, + 6.7121065e+04, 6.63589475] + transport: + model: gas + geometry: linear + diameter: 4.1 + well-depth: 209.0 + rotational-relaxation: 2.5 + note: L1/91 +- name: HCCO + composition: {H: 1, C: 2, O: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 4000.0] + data: + - [2.2517214, 0.017655021, -2.3729101e-05, 1.7275759e-08, -5.0664811e-12, + 2.0059449e+04, 12.490417] + - [5.6282058, 4.0853401e-03, -1.5934547e-06, 2.8626052e-10, -1.9407832e-14, + 1.9327215e+04, -3.9302595] + transport: + model: gas + geometry: nonlinear + diameter: 2.5 + well-depth: 150.0 + rotational-relaxation: 1.0 + note: SRIC91 +- name: C2H2 + composition: {H: 2, C: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [0.808681094, 0.0233615629, -3.55171815e-05, 2.80152437e-08, -8.50072974e-12, + 2.64289807e+04, 13.9397051] + - [4.14756964, 5.96166664e-03, -2.37294852e-06, 4.67412171e-10, -3.61235213e-14, + 2.59359992e+04, -1.23028121] + transport: + model: gas + geometry: linear + diameter: 4.1 + well-depth: 209.0 + rotational-relaxation: 2.5 + note: L1/91 +- name: C3H3 + composition: {H: 3, C: 3} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [1.40299238, 0.0301773327, -3.98449373e-05, 2.93534629e-08, -8.70554579e-12, + 3.9310822e+04, 15.1527845] + - [6.14915291, 9.34063166e-03, -3.75055354e-06, 6.90156316e-10, -4.60824994e-14, + 3.83854848e+04, -7.45345215] + transport: + model: gas + geometry: nonlinear + diameter: 4.76 + well-depth: 252.0 + rotational-relaxation: 1.0 + note: G3B3 +- name: A-C3H5 + composition: {H: 5, C: 3} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-1.03516444, 0.0375043366, -3.26381242e-05, 1.47662613e-08, -2.43741154e-12, + 1.88792254e+04, 27.1451071] + - [2.28794927, 0.0236401575, -1.2789145e-05, 3.3683854e-09, -3.47449449e-13, + 1.83033514e+04, 11.4063418] + transport: + model: gas + geometry: nonlinear + diameter: 4.982 + well-depth: 266.8 + rotational-relaxation: 1.0 + note: G3B3 +- name: N-C3H7 + composition: {H: 7, C: 3} + thermo: + model: NASA7 + temperature-ranges: [298.15, 1000.0, 5000.0] + data: + - [1.0475473, 0.026007794, 2.3562252e-06, -1.9592317e-08, 9.3680116e-12, + 1.0632637e+04, 21.141876] + - [7.7040405, 0.01604154, -5.2815967e-06, 7.6254403e-10, -3.9353462e-14, + 8297.9531, -15.487514] + transport: + model: gas + geometry: nonlinear + diameter: 4.982 + well-depth: 266.8 + rotational-relaxation: 1.0 + note: N-L9/85 +- name: C2H6 + composition: {H: 6, C: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.29142492, -5.5015427e-03, 5.99438288e-05, -7.08466285e-08, 2.68685771e-11, + -1.15222055e+04, 2.66682316] + - [1.0718815, 0.0216852677, -1.00256067e-05, 2.21412001e-09, -1.9000289e-13, + -1.14263932e+04, 15.1156107] + transport: + model: gas + geometry: nonlinear + diameter: 4.302 + well-depth: 252.3 + rotational-relaxation: 1.5 + note: L8/88 +- name: P-C3H4 + composition: {H: 4, C: 3} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [1.46175323, 0.0246026602, -1.90219395e-05, 8.60363422e-09, -1.6672924e-12, + 2.09209793e+04, 14.9262585] + - [2.81460543, 0.0185524496, -9.55026768e-06, 2.3995137e-09, -2.37485257e-13, + 2.07010771e+04, 8.60604972] + transport: + model: gas + geometry: nonlinear + diameter: 4.76 + well-depth: 252.0 + rotational-relaxation: 1.0 + note: G3B3 +- name: A-C3H4 + composition: {H: 4, C: 3} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [0.368928265, 0.0289351397, -2.44386408e-05, 1.12547166e-08, -2.03040262e-12, + 2.17585256e+04, 19.5267211] + - [2.56128757, 0.0195080128, -1.04061366e-05, 2.70165173e-09, -2.75074329e-13, + 2.13894289e+04, 9.20550397] + transport: + model: gas + geometry: nonlinear + diameter: 4.76 + well-depth: 252.0 + rotational-relaxation: 1.0 + note: G3B3 +- name: A1 + composition: {H: 6, C: 6} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-5.51558393, 0.0645453225, -4.41402928e-05, 7.47712161e-09, 3.10282254e-12, + 9110.31457, 46.5332293] + - [-0.206240612, 0.046412244, -2.77653536e-05, 7.88910537e-09, -8.60365259e-13, + 8098.83905, 20.6566629] + transport: + model: gas + geometry: nonlinear + diameter: 5.29 + well-depth: 464.8 + polarizability: 10.32 + rotational-relaxation: 1.0 + note: G3B3 +- name: A1- + composition: {H: 5, C: 6} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-4.87654845, 0.0626805782, -4.87402286e-05, 1.41122287e-08, 5.18518312e-13, + 3.99269438e+04, 45.9964173] + - [1.38016336, 0.0404032009, -2.42250885e-05, 6.88723321e-09, -7.50960802e-13, + 3.8697352e+04, 15.5220921] + transport: + model: gas + geometry: nonlinear + diameter: 5.29 + well-depth: 464.8 + polarizability: 10.32 + rotational-relaxation: 1.0 + note: G3B3 +- name: C5H5 + composition: {H: 5, C: 5} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-7.37844042, 0.0972391818, -1.69579138e-04, 1.51818667e-07, -5.12075479e-11, + 3.05514662e+04, 51.2829539] + - [4.21464919, 0.0271834728, -1.33173209e-05, 3.08980119e-09, -2.77879873e-13, + 2.88952416e+04, -0.0305999781] + transport: + model: gas + geometry: nonlinear + diameter: 5.2 + well-depth: 400.0 + rotational-relaxation: 1.0 + note: Refitted +- name: C3H6 + composition: {H: 6, C: 3} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-2.2926167e-03, 0.0310261065, -1.67151548e-05, 1.8959417e-09, 1.24957915e-12, + 1134.37406, 23.5719601] + - [0.471697982, 0.028951307, -1.56601819e-05, 4.11443199e-09, -4.23075141e-13, + 1126.03387, 21.5237289] + transport: + model: gas + geometry: nonlinear + diameter: 4.982 + well-depth: 266.8 + rotational-relaxation: 1.0 + note: G3B3 +- name: C4H8 + composition: {H: 8, C: 4} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [-0.831372089, 0.0452580978, -2.93658559e-05, 1.00220436e-08, -1.4319168e-12, + -1578.75035, 29.5084236] + - [3.04470367, 0.0327451765, -1.45363237e-05, 2.39744017e-09, 0.0, -2521.77534, + 10.0151514] + transport: + model: gas + geometry: nonlinear + diameter: 5.088 + well-depth: 345.7 + dipole: 0.3 + rotational-relaxation: 1.0 + note: '000000' +- name: C5H6 + composition: {H: 6, C: 5} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-5.13691194, 0.0606953453, -4.60552837e-05, 1.28457201e-08, 7.41214852e-13, + 1.53675713e+04, 46.1567559] + - [0.230537462, 0.0409571826, -2.41588958e-05, 6.7976348e-09, -7.36374421e-13, + 1.43779465e+04, 20.2551234] + transport: + model: gas + geometry: nonlinear + diameter: 5.2 + well-depth: 400.0 + note: G3B3 +- name: A2 + composition: {H: 8, C: 10} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-8.72434585, 0.105376008, -8.0171069e-05, 2.18545974e-08, 1.42066606e-12, + 1.48059774e+04, 61.982754] + - [1.76826275, 0.0689143506, -4.14322176e-05, 1.17914309e-08, -1.28597061e-12, + 1.26883657e+04, 10.6256608] + transport: + model: gas + geometry: nonlinear + diameter: 6.18 + well-depth: 630.4 + polarizability: 16.5 + rotational-relaxation: 1.0 + note: G3B3 +- name: C5H10 + composition: {H: 10, C: 5} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [-1.06223481, 0.0574218294, -3.7448689e-05, 1.27364989e-08, -1.79609789e-12, + -4465.46666, 32.273979] + - [3.98580522, 0.0412429986, -1.84390497e-05, 3.06155241e-09, 0.0, -5701.12071, + 6.85332264] + transport: + model: gas + geometry: nonlinear + diameter: 5.489 + well-depth: 386.2 + dipole: 0.4 + rotational-relaxation: 1.0 + note: '000000' +- name: C5H11 + composition: {H: 11, C: 5} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [-0.905255912, 0.0610632852, -4.09491825e-05, 1.4609347e-08, -2.18859615e-12, + 4839.95303, 32.5574963] + - [4.88920629, 0.0422834537, -1.858431e-05, 3.04124763e-09, 0.0, 3434.75468, + 3.43704878] + transport: + model: gas + geometry: nonlinear + diameter: 5.041 + well-depth: 440.735 + note: '000000' +- name: A1C2H2 + composition: {H: 7, C: 8} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-6.31199276, 0.0951097942, -9.56352102e-05, 4.97780207e-08, -1.02323717e-11, + 4.57330975e+04, 53.5475222] + - [5.8593508, 0.0472571459, -2.69864733e-05, 7.35311775e-09, -7.7490083e-13, + 4.33198974e+04, -5.22359403] + transport: + model: gas + geometry: nonlinear + diameter: 6.0 + well-depth: 546.2 + dipole: 0.13 + polarizability: 15.0 + rotational-relaxation: 1.0 + note: G3B3 +- name: A1CH2 + composition: {H: 7, C: 7} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-6.07053038, 0.0835201507, -7.41700083e-05, 3.13153847e-08, -4.23670868e-12, + 2.35894712e+04, 50.7932172] + - [3.30049696, 0.048005534, -2.78443022e-05, 7.72371356e-09, -8.27154136e-13, + 2.17498572e+04, 5.42371919] + transport: + model: gas + geometry: nonlinear + diameter: 5.68 + well-depth: 495.3 + dipole: 0.43 + polarizability: 12.3 + rotational-relaxation: 1.0 + note: G3B3 +- name: A1CHO + composition: {H: 6, C: 7, O: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-3.47171048, 0.0692891889, -4.32603509e-05, 3.43871096e-09, 4.81010261e-12, + -6145.58774, 41.4094024] + - [1.87355756, 0.0526231551, -3.17644962e-05, 9.06403069e-09, -9.90306123e-13, + -7236.03865, 14.9787009] + transport: + model: gas + geometry: nonlinear + diameter: 5.68 + well-depth: 495.3 + dipole: 0.43 + polarizability: 12.3 + rotational-relaxation: 1.0 + note: G3B3 +- name: A1CH3 + composition: {H: 8, C: 7} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-4.54072038, 0.0685427145, -3.57113024e-05, -4.19397642e-09, 7.41779795e-12, + 4641.21087, 45.7564849] + - [-1.0111722, 0.0585301912, -3.47595069e-05, 9.82180993e-09, -1.0668087e-12, + 3993.63395, 28.3610783] + transport: + model: gas + geometry: nonlinear + diameter: 5.68 + well-depth: 495.3 + dipole: 0.43 + polarizability: 12.3 + rotational-relaxation: 1.0 + note: G3B3 +- name: C7H15 + composition: {H: 15, C: 7} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [-0.0379155767, 0.075672657, -4.07473634e-05, 9.32678943e-09, -4.92360745e-13, + -2356.05303, 33.7321506] + - [3.74721159, 0.0649345162, -3.01341025e-05, 5.17418142e-09, 0.0, -3370.18357, + 14.2780413] + transport: + model: gas + geometry: nonlinear + diameter: 6.253 + well-depth: 459.6 + rotational-relaxation: 1.0 + note: '000000' +- name: N-C7H16 + composition: {H: 16, C: 7} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [-1.26836187, 0.085435582, -5.25346786e-05, 1.62945721e-08, -2.02394925e-12, + -2.56586565e+04, 35.3732912] + - [5.14079241, 0.0653078671, -2.94827624e-05, 4.93726726e-09, 0.0, -2.7253389e+04, + 2.98195967] + transport: + model: gas + geometry: nonlinear + diameter: 6.253 + well-depth: 459.6 + rotational-relaxation: 1.0 + note: '000000' +- name: A1C2H* + composition: {H: 5, C: 8} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-4.42757639, 0.0836668645, -8.70106362e-05, 4.70285661e-08, -1.01816985e-11, + 6.73302359e+04, 44.8118287] + - [7.23812069, 0.0383812109, -2.18850731e-05, 5.97161247e-09, -6.30351467e-13, + 6.49528135e+04, -11.7512654] + transport: + model: gas + geometry: nonlinear + diameter: 5.72 + well-depth: 535.6 + dipole: 0.77 + polarizability: 12.0 + rotational-relaxation: 1.0 + note: G3B3 +- name: A2- + composition: {H: 7, C: 10} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-8.02718034, 0.102924518, -8.3427201e-05, 2.72135383e-08, -7.24559554e-13, + 5.01363344e+04, 60.8902264] + - [3.22892303, 0.0631264486, -3.80582381e-05, 1.08454069e-08, -1.18342512e-12, + 4.7840084e+04, 5.82016697] + transport: + model: gas + geometry: nonlinear + diameter: 6.18 + well-depth: 630.4 + polarizability: 16.5 + rotational-relaxation: 1.0 + note: G3B3 +- name: A1C2H + composition: {H: 6, C: 8} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [-5.21036925, 0.0865551944, -8.45007483e-05, 4.21920706e-08, -8.16766167e-12, + 3.5248862e+04, 46.9445057] + - [5.81520488, 0.0440872933, -2.52053858e-05, 6.90275228e-09, -7.31378908e-13, + 3.30271906e+04, -6.4932069] + transport: + model: gas + geometry: nonlinear + diameter: 5.72 + well-depth: 535.6 + dipole: 0.77 + polarizability: 12.0 + rotational-relaxation: 1.0 + note: G3B3 + +reactions: +- equation: S-CH2 + N2 <=> T-CH2 + N2 # Reaction 1 + rate-constant: {A: 1.5e+13, b: 0.0, Ea: 599.9} +- equation: O + H2 <=> H + OH # Reaction 2 + rate-constant: {A: 4.59e+04, b: 2.7, Ea: 6259.56} +- equation: H + O + M => OH + M # Reaction 3 + type: three-body + rate-constant: {A: 9.43e+18, b: -1.0, Ea: 0.0} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: H + OH + M => H2O + M # Reaction 4 + type: three-body + rate-constant: {A: 4.4e+22, b: -2.0, Ea: 0.0} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 6.3, CH4: 2.0, C2H6: 3.0} +- equation: OH + H2 <=> H + H2O # Reaction 5 + rate-constant: {A: 1.73e+08, b: 1.51, Ea: 3429.73} +- equation: 2 OH <=> O + H2O # Reaction 6 + rate-constant: {A: 3.97e+04, b: 2.4, Ea: -2110.42} +- equation: H + O2 (+ M) => HO2 (+ M) # Reaction 7 + type: falloff + low-P-rate-constant: {A: 6.33e+19, b: -1.4, Ea: 0.0} + high-P-rate-constant: {A: 5.12e+12, b: 0.44, Ea: 0.0} + Troe: {A: 0.5, T3: 0.0, T1: 1.0e+10, T2: 1.0e+10} + efficiencies: {H2: 0.75, H2O: 11.89, CO2: 2.18, CO: 1.09, O2: 0.85} +- equation: H + O2 <=> O + OH # Reaction 8 + rate-constant: {A: 2.64e+16, b: -0.67, Ea: 1.704111e+04} +- equation: HO2 + H => O2 + H2 # Reaction 9 + rate-constant: {A: 3.649e+06, b: 2.07, Ea: -1092.26} +- equation: HO2 + H => O + H2O # Reaction 10 + rate-constant: {A: 3.97e+12, b: 0.0, Ea: 671.61} +- equation: HO2 + H => 2 OH # Reaction 11 + rate-constant: {A: 7.49e+13, b: 0.0, Ea: 635.76} +- equation: HO2 + O => OH + O2 # Reaction 12 + rate-constant: {A: 4.0e+13, b: 0.0, Ea: 0.0} +- equation: HO2 + OH => H2O + O2 # Reaction 13 + rate-constant: {A: 2.38e+13, b: 0.0, Ea: -499.52} + duplicate: true +- equation: HO2 + OH => H2O + O2 # Reaction 14 + rate-constant: {A: 1.0e+16, b: 0.0, Ea: 1.733031e+04} + duplicate: true +- equation: CH + O => CO + H # Reaction 15 + rate-constant: {A: 5.7e+13, b: 0.0, Ea: 0.0} +- equation: CH + OH => HCO + H # Reaction 16 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: CH + H2 <=> T-CH2 + H # Reaction 17 + rate-constant: {A: 1.08e+14, b: 0.0, Ea: 3109.46} +- equation: CH + H2O => CH2O + H # Reaction 18 + rate-constant: {A: 5.71e+12, b: 0.0, Ea: -755.26} +- equation: CH + O2 => HCO + O # Reaction 19 + rate-constant: {A: 6.71e+13, b: 0.0, Ea: 0.0} +- equation: T-CH2 + O => HCO + H # Reaction 20 + rate-constant: {A: 8.0e+13, b: 0.0, Ea: 0.0} +- equation: T-CH2 + OH => CH2O + H # Reaction 21 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: T-CH2 + OH <=> CH + H2O # Reaction 22 + rate-constant: {A: 1.13e+07, b: 2.0, Ea: 2999.52} +- equation: T-CH2 + H2 <=> H + CH3 # Reaction 23 + rate-constant: {A: 5.0e+05, b: 2.0, Ea: 7229.92} +- equation: T-CH2 + O2 => CO2 + 2 H # Reaction 24 + rate-constant: {A: 5.8e+12, b: 0.0, Ea: 1500.96} +- equation: T-CH2 + O2 => CH2O + O # Reaction 25 + rate-constant: {A: 2.4e+12, b: 0.0, Ea: 1500.96} +- equation: T-CH2 + O2 => OH + H + CO # Reaction 26 + rate-constant: {A: 5.0e+12, b: 0.0, Ea: 1500.96} +- equation: S-CH2 + H2 <=> CH3 + H # Reaction 27 + rate-constant: {A: 7.0e+13, b: 0.0, Ea: 0.0} +- equation: S-CH2 + O2 => H + OH + CO # Reaction 28 + rate-constant: {A: 2.8e+13, b: 0.0, Ea: 0.0} +- equation: S-CH2 + O2 => CO + H2O # Reaction 29 + rate-constant: {A: 1.2e+13, b: 0.0, Ea: 0.0} +- equation: S-CH2 + H2O (+ M) => CH2O + H2 (+ M) # Reaction 30 + type: falloff + low-P-rate-constant: {A: 1.88e+38, b: -6.36, Ea: 5040.63} + high-P-rate-constant: {A: 4.82e+17, b: -1.16, Ea: 1144.84} + Troe: {A: 0.6027, T3: 208.0, T1: 3922.0, T2: 1.018e+04} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: S-CH2 + H2O <=> T-CH2 + H2O # Reaction 31 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: S-CH2 + H2O => H2 + CH2O # Reaction 32 + rate-constant: {A: 6.82e+10, b: 0.25, Ea: -934.51} +- equation: CH3 + H (+ M) <=> CH4 (+ M) # Reaction 33 + type: falloff + low-P-rate-constant: {A: 3.47e+38, b: -6.3, Ea: 5074.09} + high-P-rate-constant: {A: 6.92e+13, b: 0.18, Ea: 0.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 3.0, C2H6: 3.0} +- equation: CH3 + O => CH2O + H # Reaction 34 + rate-constant: {A: 5.06e+13, b: 0.0, Ea: 0.0} +- equation: CH3 + O => H + H2 + CO # Reaction 35 + rate-constant: {A: 3.37e+13, b: 0.0, Ea: 0.0} +- equation: CH3 + OH (+ M) => CH2O + H2 (+ M) # Reaction 36 + type: falloff + low-P-rate-constant: {A: 4.0e+36, b: -5.92, Ea: 3140.54} + high-P-rate-constant: {A: 2.79e+18, b: -1.43, Ea: 1331.26} + Troe: {A: 0.412, T3: 195.0, T1: 5900.0, T2: 6394.0} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: CH3 + OH <=> T-CH2 + H2O # Reaction 37 + rate-constant: {A: 5.6e+07, b: 1.6, Ea: 5420.65} +- equation: CH3 + OH <=> S-CH2 + H2O # Reaction 38 + rate-constant: {A: 6.44e+17, b: -1.34, Ea: 1417.3} +- equation: CH3 + O2 => CH2O + O + H # Reaction 39 + rate-constant: {A: 1.38e+13, b: 0.0, Ea: 3.04804e+04} +- equation: CH3 + O2 => CH2O + OH # Reaction 40 + rate-constant: {A: 5.87e+11, b: 0.0, Ea: 1.384082e+04} +- equation: CH3 + HO2 => CH2O + OH + H # Reaction 41 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 0.0} +- equation: CH3 + HO2 => CH4 + O2 # Reaction 42 + rate-constant: {A: 3.61e+12, b: 0.0, Ea: 0.0} +- equation: CH3 + CH => C2H3 + H # Reaction 43 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: CH3 + T-CH2 => C2H4 + H # Reaction 44 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 0.0} +- equation: 2 CH3 <=> C2H5 + H # Reaction 45 + rate-constant: {A: 6.84e+12, b: 0.1, Ea: 1.05999e+04} +- equation: 2 CH3 => S-CH2 + CH4 # Reaction 46 + rate-constant: {A: 2.632e+12, b: -0.06, Ea: 1.366157e+04} +- equation: CH4 + H <=> CH3 + H2 # Reaction 47 + rate-constant: {A: 6.6e+08, b: 1.62, Ea: 1.08413e+04} +- equation: CH4 + O <=> CH3 + OH # Reaction 48 + rate-constant: {A: 1.02e+09, b: 1.5, Ea: 8599.43} +- equation: CH4 + OH <=> CH3 + H2O # Reaction 49 + rate-constant: {A: 1.0e+08, b: 1.6, Ea: 3119.02} +- equation: CH4 + CH => C2H4 + H # Reaction 50 + rate-constant: {A: 6.0e+13, b: 0.0, Ea: 0.0} +- equation: CH4 + T-CH2 <=> 2 CH3 # Reaction 51 + rate-constant: {A: 2.46e+06, b: 2.0, Ea: 8269.6} +- equation: CO + O (+ M) => CO2 (+ M) # Reaction 52 + type: falloff + low-P-rate-constant: {A: 1.17e+24, b: -2.79, Ea: 4192.16} + high-P-rate-constant: {A: 1.36e+10, b: 0.0, Ea: 2385.28} + Troe: {A: 1.0, T3: 1.0, T1: 1.0e+07, T2: 1.0e+07} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: CO + OH <=> CO2 + H # Reaction 53 + rate-constant: {A: 8.0e+11, b: 0.14, Ea: 7351.82} + duplicate: true +- equation: CO + OH <=> CO2 + H # Reaction 54 + rate-constant: {A: 8.78e+10, b: 0.03, Ea: -16.73} + duplicate: true +- equation: CO + HO2 => CO2 + OH # Reaction 55 + rate-constant: {A: 3.01e+13, b: 0.0, Ea: 2.299952e+04} +- equation: CO + S-CH2 <=> CO + T-CH2 # Reaction 56 + rate-constant: {A: 9.0e+12, b: 0.0, Ea: 0.0} +- equation: HCO + H => CO + H2 # Reaction 57 + rate-constant: {A: 1.2e+14, b: 0.0, Ea: 0.0} +- equation: HCO + O => CO + OH # Reaction 58 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: HCO + O => CO2 + H # Reaction 59 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: HCO + OH => CO + H2O # Reaction 60 + rate-constant: {A: 3.02e+13, b: 0.0, Ea: 0.0} +- equation: HCO + M <=> CO + H + M # Reaction 61 + type: three-body + rate-constant: {A: 1.87e+17, b: -1.0, Ea: 1.700048e+04} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 0.0, CH4: 2.0, C2H6: 3.0} +- equation: HCO + H2O <=> CO + H + H2O # Reaction 62 + rate-constant: {A: 2.24e+18, b: -1.0, Ea: 1.700048e+04} +- equation: HCO + O2 => CO + HO2 # Reaction 63 + rate-constant: {A: 1.2e+10, b: 0.81, Ea: -726.58} +- equation: CH3 + HCO => CH4 + CO # Reaction 64 + rate-constant: {A: 2.65e+13, b: 0.0, Ea: 0.0} +- equation: CH2O + H <=> HCO + H2 # Reaction 65 + rate-constant: {A: 5.74e+07, b: 1.9, Ea: 2741.4} +- equation: CH2O + O => HCO + OH # Reaction 66 + rate-constant: {A: 3.9e+13, b: 0.0, Ea: 3539.67} +- equation: CH2O + OH => HCO + H2O # Reaction 67 + rate-constant: {A: 3.43e+09, b: 1.18, Ea: -446.94} +- equation: CH3 + CH2O => CH4 + HCO # Reaction 68 + rate-constant: {A: 3320.0, b: 2.81, Ea: 5860.42} +- equation: CO2 + CH => HCO + CO # Reaction 69 + rate-constant: {A: 1.9e+14, b: 0.0, Ea: 1.579111e+04} +- equation: CO2 + S-CH2 <=> CO2 + T-CH2 # Reaction 70 + rate-constant: {A: 7.0e+12, b: 0.0, Ea: 0.0} +- equation: CO2 + S-CH2 => CH2O + CO # Reaction 71 + rate-constant: {A: 1.4e+13, b: 0.0, Ea: 0.0} +- equation: C2H + O => CH + CO # Reaction 72 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: C2H + OH => HCCO + H # Reaction 73 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: C2H + O2 => HCO + CO # Reaction 74 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: -755.26} +- equation: C2H + H2 <=> C2H2 + H # Reaction 75 + rate-constant: {A: 3.31e+06, b: 2.26, Ea: 901.05} +- equation: C2H2 + H (+ M) <=> C2H3 (+ M) # Reaction 76 + type: falloff + low-P-rate-constant: {A: 6.34e+31, b: -4.66, Ea: 3781.07} + high-P-rate-constant: {A: 1.71e+10, b: 1.27, Ea: 2707.93} + Troe: {A: 0.2122, T3: 1.0, T1: -1.021e+04} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: C2H2 + O => HCCO + H # Reaction 77 + rate-constant: {A: 8.1e+06, b: 2.0, Ea: 1900.1} +- equation: C2H2 + O => T-CH2 + CO # Reaction 78 + rate-constant: {A: 1.25e+07, b: 2.0, Ea: 1900.1} +- equation: C2H2 + O => C2H + OH # Reaction 79 + rate-constant: {A: 3.324e+16, b: -0.44, Ea: 3.06979e+04} +- equation: C2H2 + OH => C2H + H2O # Reaction 80 + rate-constant: {A: 2.63e+06, b: 2.14, Ea: 1.706023e+04} +- equation: C2H2 + OH => CH3 + CO # Reaction 81 + rate-constant: {A: 7.53e+06, b: 1.55, Ea: 2105.64} + duplicate: true +- equation: C2H2 + OH => CH3 + CO # Reaction 82 + rate-constant: {A: 1.28e+09, b: 0.73, Ea: 2578.87} + duplicate: true +- equation: C2H2 + S-CH2 <=> C3H3 + H # Reaction 83 + rate-constant: {A: 1.9e+14, b: 0.0, Ea: 0.0} +- equation: C2H3 + H (+ M) => C2H4 (+ M) # Reaction 84 + type: falloff + low-P-rate-constant: {A: 1.4e+30, b: -3.86, Ea: 3319.79} + high-P-rate-constant: {A: 6.08e+12, b: 0.27, Ea: 279.64} + Troe: {A: 0.782, T3: 207.5, T1: 2663.0, T2: 6095.0} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: C2H3 + H => C2H2 + H2 # Reaction 85 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: C2H3 + O => CH3 + CO # Reaction 86 + rate-constant: {A: 1.03e+13, b: 0.21, Ea: -427.82} +- equation: C2H3 + OH => C2H2 + H2O # Reaction 87 + rate-constant: {A: 5.0e+12, b: 0.0, Ea: 0.0} +- equation: C2H3 + O2 => C2H2 + HO2 # Reaction 88 + rate-constant: {A: 1.34e+06, b: 1.61, Ea: -384.8} +- equation: C2H3 + O2 => CH3 + CO + O # Reaction 89 + rate-constant: {A: 3.03e+11, b: 0.29, Ea: 11.95} +- equation: C2H3 + O2 => HCO + CH2O # Reaction 90 + rate-constant: {A: 4.58e+16, b: -1.39, Ea: 1015.77} +- equation: C2H3 + HCO => C2H4 + CO # Reaction 91 + rate-constant: {A: 9.0e+13, b: 0.0, Ea: 0.0} +- equation: C2H3 + CH3 => C2H2 + CH4 # Reaction 92 + rate-constant: {A: 9.03e+12, b: 0.0, Ea: -764.82} +- equation: C2H3 + CH3 <=> A-C3H5 + H # Reaction 93 + rate-constant: {A: 1.93e+18, b: -1.25, Ea: 7669.69} +- equation: C2H4 + H (+ M) <=> C2H5 (+ M) # Reaction 94 + type: falloff + low-P-rate-constant: {A: 2.03e+39, b: -6.64, Ea: 5769.6} + high-P-rate-constant: {A: 1.37e+09, b: 1.46, Ea: 1355.16} + Troe: {A: -0.569, T3: 299.0, T1: -9147.0, T2: 152.4} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: C2H4 + H => C2H3 + H2 # Reaction 95 + rate-constant: {A: 1.33e+06, b: 2.53, Ea: 1.223948e+04} +- equation: C2H4 + O => CH3 + CO + H # Reaction 96 + rate-constant: {A: 7.66e+09, b: 0.88, Ea: 1140.06} +- equation: C2H4 + O => T-CH2 + CH2O # Reaction 97 + rate-constant: {A: 7.15e+04, b: 2.47, Ea: 929.73} +- equation: C2H4 + O => CH3 + HCO # Reaction 98 + rate-constant: {A: 3.89e+08, b: 1.36, Ea: 886.71} +- equation: C2H4 + OH => C2H3 + H2O # Reaction 99 + rate-constant: {A: 0.131, b: 4.2, Ea: -860.42} +- equation: C2H4 + OH => CH3 + CH2O # Reaction 100 + rate-constant: {A: 3.75e+36, b: -7.8, Ea: 7060.23} +- equation: C2H4 + CH3 => C2H3 + CH4 # Reaction 101 + rate-constant: {A: 2.27e+05, b: 2.0, Ea: 9199.33} +- equation: C2H4 + CH3 (+ M) <=> N-C3H7 (+ M) # Reaction 102 + type: falloff + low-P-rate-constant: {A: 3.0e+63, b: -14.6, Ea: 1.816922e+04} + high-P-rate-constant: {A: 2.55e+06, b: 1.6, Ea: 5700.29} + Troe: {A: 0.1894, T3: 277.0, T1: 8748.0, T2: 7891.0} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: C2H5 + H (+ M) <=> C2H6 (+ M) # Reaction 103 + type: falloff + low-P-rate-constant: {A: 1.99e+41, b: -7.08, Ea: 6684.99} + high-P-rate-constant: {A: 5.21e+17, b: -0.99, Ea: 1579.83} + Troe: {A: 0.8422, T3: 125.0, T1: 2219.0, T2: 6882.0} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: C2H5 + O => CH3 + CH2O # Reaction 104 + rate-constant: {A: 3.17e+13, b: 0.03, Ea: -394.36} +- equation: C2H5 + O2 => C2H4 + HO2 # Reaction 105 + rate-constant: {A: 1.92e+07, b: 1.02, Ea: -2033.94} +- equation: C2H5 + HCO => C2H6 + CO # Reaction 106 + rate-constant: {A: 1.2e+14, b: 0.0, Ea: 0.0} +- equation: C2H5 + HO2 => C2H6 + O2 # Reaction 107 + rate-constant: {A: 3.0e+11, b: 0.0, Ea: 0.0} +- equation: C2H5 + HO2 => CH3 + CH2O + OH # Reaction 108 + rate-constant: {A: 3.1e+13, b: 0.0, Ea: 0.0} +- equation: C2H6 (+ M) <=> 2 CH3 (+ M) # Reaction 109 + type: falloff + low-P-rate-constant: {A: 3.72e+65, b: -13.14, Ea: 1.0157983e+05} + high-P-rate-constant: {A: 1.88e+50, b: -9.72, Ea: 1.0734226e+05} + Troe: {A: 0.39, T3: 100.0, T1: 1900.0, T2: 6000.0} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: C2H6 + H => C2H5 + H2 # Reaction 110 + rate-constant: {A: 1.7e+05, b: 2.7, Ea: 5740.92} +- equation: C2H6 + O => C2H5 + OH # Reaction 111 + rate-constant: {A: 8.98e+07, b: 1.92, Ea: 5690.73} +- equation: C2H6 + OH => C2H5 + H2O # Reaction 112 + rate-constant: {A: 1.61e+06, b: 2.22, Ea: 740.92} +- equation: C2H6 + CH3 => C2H5 + CH4 # Reaction 113 + rate-constant: {A: 8.43e+14, b: 0.0, Ea: 2.225621e+04} +- equation: HCCO (+ M) => CO + CH (+ M) # Reaction 114 + type: falloff + low-P-rate-constant: {A: 1.213e+35, b: -5.18, Ea: 7.666826e+04} + high-P-rate-constant: {A: 2.255e+20, b: -1.44, Ea: 7.473231e+04} + Troe: {A: 0.5757, T3: 237.0, T1: 1652.0, T2: 5069.0} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: HCCO + H => S-CH2 + CO # Reaction 115 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 0.0} +- equation: HCCO + O => H + 2 CO # Reaction 116 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 0.0} +- equation: HCCO + O2 => OH + 2 CO # Reaction 117 + rate-constant: {A: 4.2e+10, b: 0.0, Ea: 853.25} +- equation: 2 HCCO => C2H2 + 2 CO # Reaction 118 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 0.0} +- equation: HCCO + C2H2 => C3H3 + CO # Reaction 119 + rate-constant: {A: 1.0e+11, b: 0.0, Ea: 2999.52} +- equation: HCCO + CH3 => C2H4 + CO # Reaction 120 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: HCCO + OH => 2 HCO # Reaction 121 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 0.0} +- equation: C3H3 + H <=> P-C3H4 # Reaction 122 + rate-constant: {A: 7.94e+29, b: -5.06, Ea: 4861.38} +- equation: C3H3 + H <=> A-C3H4 # Reaction 123 + rate-constant: {A: 3.16e+29, b: -5.0, Ea: 4710.8} +- equation: C3H3 + OH => C2H4 + CO # Reaction 124 + rate-constant: {A: 1.28e+09, b: 0.73, Ea: 2578.87} +- equation: C3H3 + O => C2H2 + CO + H # Reaction 125 + rate-constant: {A: 6.95e+13, b: 0.0, Ea: 0.0} +- equation: C3H3 + O2 => CH3 + 2 CO # Reaction 126 + rate-constant: {A: 1.7e+05, b: 1.7, Ea: 1500.96} +- equation: C3H3 + HO2 => OH + CO + C2H3 # Reaction 127 + rate-constant: {A: 8.0e+11, b: 0.0, Ea: 0.0} +- equation: 2 C3H3 <=> A1 # Reaction 128 + rate-constant: {A: 1.87e+46, b: -9.84, Ea: 1.680449e+04} +- equation: 2 C3H3 <=> A1- + H # Reaction 129 + rate-constant: {A: 5.77e+37, b: -7.0, Ea: 3.150574e+04} +- equation: C3H3 + C2H2 <=> C5H5 # Reaction 130 + rate-constant: {A: 2.35e+11, b: 0.0, Ea: 9995.22} +- equation: P-C3H4 + H <=> C2H2 + CH3 # Reaction 131 + rate-constant: {A: 3.46e+12, b: 0.44, Ea: 5463.67} +- equation: P-C3H4 + H <=> C3H3 + H2 # Reaction 132 + rate-constant: {A: 8.5e+04, b: 2.7, Ea: 5740.92} +- equation: P-C3H4 + OH => C3H3 + H2O # Reaction 133 + rate-constant: {A: 8.05e+05, b: 2.22, Ea: 740.92} +- equation: P-C3H4 + CH3 => C3H3 + CH4 # Reaction 134 + rate-constant: {A: 4.22e+14, b: 0.0, Ea: 2.225621e+04} +- equation: P-C3H4 + O => HCCO + CH3 # Reaction 135 + rate-constant: {A: 4.05e+06, b: 2.0, Ea: 1900.1} +- equation: P-C3H4 + O => C2H4 + CO # Reaction 136 + rate-constant: {A: 6.25e+06, b: 2.0, Ea: 1900.1} +- equation: P-C3H4 + OH => C2H5 + CO # Reaction 137 + rate-constant: {A: 1.28e+09, b: 0.73, Ea: 2578.87} +- equation: A-C3H4 + H <=> C2H2 + CH3 # Reaction 138 + rate-constant: {A: 8.95e+13, b: -0.02, Ea: 1.125e+04} +- equation: A-C3H4 <=> P-C3H4 # Reaction 139 + rate-constant: {A: 7.76e+39, b: -7.8, Ea: 7.844646e+04} +- equation: A-C3H4 + H <=> P-C3H4 + H # Reaction 140 + rate-constant: {A: 2.47e+15, b: -0.33, Ea: 6436.42} +- equation: A-C3H4 + H => C3H3 + H2 # Reaction 141 + rate-constant: {A: 1.33e+06, b: 2.53, Ea: 1.223948e+04} +- equation: A-C3H4 + OH => C3H3 + H2O # Reaction 142 + rate-constant: {A: 0.131, b: 4.2, Ea: -860.42} +- equation: A-C3H4 + CH3 => C3H3 + CH4 # Reaction 143 + rate-constant: {A: 2.27e+05, b: 2.0, Ea: 9199.33} +- equation: A-C3H4 + H <=> A-C3H5 # Reaction 144 + rate-constant: {A: 2.01e+49, b: -10.77, Ea: 1.962237e+04} +- equation: A-C3H5 + H => A-C3H4 + H2 # Reaction 145 + rate-constant: {A: 9560.0, b: 2.8, Ea: 3291.11} +- equation: A-C3H5 + OH => A-C3H4 + H2O # Reaction 146 + rate-constant: {A: 6.03e+12, b: 0.0, Ea: 0.0} +- equation: A-C3H5 + CH3 => A-C3H4 + CH4 # Reaction 147 + rate-constant: {A: 4.86e+11, b: -0.32, Ea: -131.45} +- equation: A-C3H5 + O2 => C2H2 + CH2O + OH # Reaction 148 + rate-constant: {A: 9.71e+20, b: -2.7, Ea: 2.498088e+04} +- equation: A-C3H5 + C3H3 => A1 + 2 H # Reaction 149 + rate-constant: {A: 2.16e+39, b: -7.74, Ea: 2.385277e+04} +- equation: C3H6 + H (+ M) <=> N-C3H7 (+ M) # Reaction 150 + type: falloff + low-P-rate-constant: {A: 6.26e+38, b: -6.66, Ea: 7000.48} + high-P-rate-constant: {A: 3.06e+14, b: -0.37, Ea: 4032.03} + Troe: {A: 1.0, T3: 1000.0, T1: 1310.0, T2: 4.81e+04} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.0, H2O: 12.0, CH4: 2.0, C2H6: 3.0} +- equation: C3H6 <=> C2H3 + CH3 # Reaction 151 + rate-constant: {A: 4.04e+42, b: -7.67, Ea: 1.1183078e+05} +- equation: A-C3H5 + H <=> C3H6 # Reaction 152 + rate-constant: {A: 5.93e+54, b: -11.76, Ea: 2.354924e+04} +- equation: C3H6 + H <=> C2H4 + CH3 # Reaction 153 + rate-constant: {A: 8.0e+21, b: -2.39, Ea: 1.118069e+04} +- equation: C3H6 + O => 2 CH3 + CO # Reaction 154 + rate-constant: {A: 1.2e+08, b: 1.6, Ea: 327.44} +- equation: C3H6 + O => C2H5 + HCO # Reaction 155 + rate-constant: {A: 3.5e+07, b: 1.6, Ea: -972.75} +- equation: C3H6 + H => A-C3H5 + H2 # Reaction 156 + rate-constant: {A: 6.6e+05, b: 2.54, Ea: 6756.69} +- equation: C3H6 + O => A-C3H5 + OH # Reaction 157 + rate-constant: {A: 9.65e+04, b: 2.68, Ea: 3716.54} +- equation: C3H6 + OH => A-C3H5 + H2O # Reaction 158 + rate-constant: {A: 2.0e+08, b: 1.46, Ea: 537.76} +- equation: C3H6 + CH3 => A-C3H5 + CH4 # Reaction 159 + rate-constant: {A: 0.452, b: 3.65, Ea: 7153.44} +- equation: C4H8 + H => C2H5 + C2H4 # Reaction 160 + rate-constant: {A: 7.68e+12, b: 0.11, Ea: 1479.45} +- equation: C4H8 => A-C3H5 + CH3 # Reaction 161 + rate-constant: {A: 5.0e+15, b: 0.0, Ea: 7.099904e+04} +- equation: C5H5 + HO2 => O2 + C5H6 # Reaction 162 + rate-constant: {A: 2.561e+12, b: 0.06, Ea: 3116.63} +- equation: 2 C5H5 => A2 + 2 H # Reaction 163 + rate-constant: {A: 6.39e+29, b: -4.03, Ea: 3.520554e+04} +- equation: C5H5 + O => C2H3 + C2H2 + CO # Reaction 164 + rate-constant: {A: 7.0e+13, b: 0.0, Ea: 0.0} +- equation: C5H5 + HO2 => C2H3 + C2H2 + CO + OH # Reaction 165 + rate-constant: {A: 6.776e+29, b: -4.7, Ea: 1.16587e+04} +- equation: C5H5 + HO2 => 2 C2H2 + CO + H2O # Reaction 166 + rate-constant: {A: 1.19e+33, b: -6.52, Ea: 1.340105e+04} +- equation: C5H5 + OH => C2H3 + C2H2 + CO + H # Reaction 167 + rate-constant: {A: 3.02e+13, b: 0.0, Ea: 0.0} +- equation: C5H6 <=> C5H5 + H # Reaction 168 + rate-constant: {A: 1.73e+68, b: -15.16, Ea: 1.1637189e+05} +- equation: C5H6 + H => C5H5 + H2 # Reaction 169 + rate-constant: {A: 2.8e+13, b: 0.0, Ea: 2258.6} +- equation: C5H6 + H => A-C3H5 + C2H2 # Reaction 170 + rate-constant: {A: 6.6e+14, b: 0.0, Ea: 1.234465e+04} +- equation: C5H6 + O => C5H5 + OH # Reaction 171 + rate-constant: {A: 4.77e+04, b: 2.71, Ea: 1106.6} +- equation: C5H6 + OH => C5H5 + H2O # Reaction 172 + rate-constant: {A: 3.08e+06, b: 2.0, Ea: 0.0} +- equation: C5H6 + CH3 => C5H5 + CH4 # Reaction 173 + rate-constant: {A: 0.18, b: 4.0, Ea: 0.0} +- equation: C5H10 + H => C5H11 # Reaction 174 + rate-constant: {A: 7.1e+12, b: 0.12, Ea: 1460.33} +- equation: C5H10 => C2H5 + A-C3H5 # Reaction 175 + rate-constant: {A: 9.17e+20, b: -1.63, Ea: 7.398901e+04} +- equation: C5H11 => C2H4 + N-C3H7 # Reaction 176 + rate-constant: {A: 7.46e+21, b: -2.61, Ea: 3.202677e+04} +- equation: C5H11 => H + C5H10 # Reaction 177 + rate-constant: {A: 8.46e+14, b: -0.47, Ea: 3.761711e+04} +- equation: C5H11 => C3H6 + C2H5 # Reaction 178 + rate-constant: {A: 3.15e-19, b: 8.84, Ea: 7105.64} +- equation: A1- + O2 => C5H5 + CO + O # Reaction 179 + rate-constant: {A: 2.6e+13, b: 0.0, Ea: 6120.94} +- equation: A1- + O2 => 2 CO + 2 C2H2 + H # Reaction 180 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 8979.45} +- equation: A1- + O => C5H5 + CO # Reaction 181 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 0.0} +- equation: A1- + OH => C5H6 + CO # Reaction 182 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: A1- + HO2 => C5H5 + CO + OH # Reaction 183 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: A1- + C2H2 <=> A1C2H2 # Reaction 184 + rate-constant: {A: 3.29e+06, b: 2.05, Ea: 3162.05} +- equation: A1 <=> A1- + H # Reaction 185 + rate-constant: {A: 1.29e+61, b: -12.48, Ea: 1.4808556e+05} +- equation: A1 + H => A1- + H2 # Reaction 186 + rate-constant: {A: 6.02e+08, b: 1.8, Ea: 1.635277e+04} +- equation: A1 + OH => A1- + H2O # Reaction 187 + rate-constant: {A: 403.0, b: 3.33, Ea: 1455.54} +- equation: A1 + CH3 => A1- + CH4 # Reaction 188 + rate-constant: {A: 0.02752, b: 4.46, Ea: 1.363767e+04} +- equation: A1 + O => C5H5 + CO + H # Reaction 189 + rate-constant: {A: 2.22e+13, b: 0.0, Ea: 4531.55} +- equation: A1 + OH => C5H6 + CO + H # Reaction 190 + rate-constant: {A: 132.0, b: 3.25, Ea: 5590.34} +- equation: A1CH2 <=> C5H5 + C2H2 # Reaction 191 + rate-constant: {A: 8.2e+14, b: 0.0, Ea: 8.067639e+04} +- equation: A1CH2 + H <=> A1- + CH3 # Reaction 192 + rate-constant: {A: 5.83e+67, b: -14.15, Ea: 6.832935e+04} +- equation: A1CH2 + O => A1CHO + H # Reaction 193 + rate-constant: {A: 3.31e+14, b: 0.0, Ea: 0.0} +- equation: A1CH2 + HO2 => A1CHO + OH + H # Reaction 194 + rate-constant: {A: 1.06e+16, b: -0.94, Ea: 2523.9} +- equation: A1CH2 + C3H3 => A2 + 2 H # Reaction 195 + rate-constant: {A: 4.32e+39, b: -7.74, Ea: 2.385277e+04} +- equation: A1CH3 + H <=> A1 + CH3 # Reaction 196 + rate-constant: {A: 2.31e+06, b: 2.17, Ea: 4163.48} +- equation: A1CH3 <=> A1CH2 + H # Reaction 197 + rate-constant: {A: 1.25e+18, b: -0.6, Ea: 9.478728e+04} +- equation: A1CH3 <=> A1- + CH3 # Reaction 198 + rate-constant: {A: 2.16e+29, b: -3.58, Ea: 1.1016491e+05} +- equation: A1CH3 + H => A1CH2 + H2 # Reaction 199 + rate-constant: {A: 6.47, b: 3.98, Ea: 3384.32} +- equation: A1CH3 + OH => A1CH2 + H2O # Reaction 200 + rate-constant: {A: 1.62e+13, b: 0.0, Ea: 2770.08} +- equation: A1CH3 + CH3 => A1CH2 + CH4 # Reaction 201 + rate-constant: {A: 4.22e+14, b: 0.0, Ea: 2.225621e+04} +- equation: C7H15 => C5H11 + C2H4 # Reaction 202 + rate-constant: {A: 1.89e+12, b: 0.02, Ea: 2.778442e+04} +- equation: C7H15 => C2H5 + C2H4 + C3H6 # Reaction 203 + rate-constant: {A: 7.73e+18, b: -1.75, Ea: 3.197419e+04} +- equation: C7H15 => C4H8 + N-C3H7 # Reaction 204 + rate-constant: {A: 2.53e+18, b: -1.65, Ea: 3.16826e+04} +- equation: C7H15 => C2H5 + C5H10 # Reaction 205 + rate-constant: {A: 2.49e+16, b: -1.18, Ea: 2.951721e+04} +- equation: N-C7H16 => C5H11 + C2H5 # Reaction 206 + rate-constant: {A: 8.1e+77, b: -17.62, Ea: 1.2039914e+05} +- equation: N-C7H16 => C2H5 + C2H4 + N-C3H7 # Reaction 207 + rate-constant: {A: 1.42e+78, b: -17.71, Ea: 1.2070029e+05} +- equation: N-C7H16 + H => C7H15 + H2 # Reaction 208 + rate-constant: {A: 1.75e+06, b: 2.6, Ea: 4361.85} +- equation: N-C7H16 + O => C7H15 + OH # Reaction 209 + rate-constant: {A: 1.72e+05, b: 2.81, Ea: 2260.99} +- equation: N-C7H16 + OH => C7H15 + H2O # Reaction 210 + rate-constant: {A: 7.4e+08, b: 1.5, Ea: 258.13} +- equation: N-C7H16 + CH3 => C7H15 + CH4 # Reaction 211 + rate-constant: {A: 1.46e+04, b: 2.57, Ea: 6933.56} +- equation: A1CHO => A1- + HCO # Reaction 212 + rate-constant: {A: 2.61e+15, b: 0.15, Ea: 8.054971e+04} +- equation: A1CHO + H => A1- + CO + H2 # Reaction 213 + rate-constant: {A: 2.05e+09, b: 1.16, Ea: 2404.4} +- equation: A1CHO + CH3 => A1- + CO + CH4 # Reaction 214 + rate-constant: {A: 2.72e+06, b: 1.77, Ea: 5920.17} +- equation: A1C2H* + C2H2 <=> A2- # Reaction 215 + rate-constant: {A: 1.34e+04, b: 2.5, Ea: 1283.46} +- equation: A1C2H* + C2H4 <=> A2 + H # Reaction 216 + rate-constant: {A: 3.62e+28, b: -4.24, Ea: 2.386472e+04} +- equation: A1C2H <=> A1C2H* + H # Reaction 217 + rate-constant: {A: 2.1e+60, b: -12.4, Ea: 1.48076e+05} +- equation: A1C2H + H <=> A1C2H* + H2 # Reaction 218 + rate-constant: {A: 1.32e+08, b: 1.88, Ea: 1.682122e+04} +- equation: A1C2H + OH <=> A1C2H* + H2O # Reaction 219 + rate-constant: {A: 134.0, b: 3.33, Ea: 1455.54} +- equation: A1C2H2 <=> A1C2H + H # Reaction 220 + rate-constant: {A: 1.34e+17, b: -0.86, Ea: 4.123805e+04} +- equation: A1C2H2 + C2H2 <=> A2 + H # Reaction 221 + rate-constant: {A: 7.091e+13, b: -0.26, Ea: 7002.87} +- equation: A2 <=> A2- + H # Reaction 222 + rate-constant: {A: 8.6e+60, b: -12.48, Ea: 1.48076e+05} +- equation: A2 + H <=> A2- + H2 # Reaction 223 + rate-constant: {A: 2.65e+08, b: 1.87, Ea: 1.709608e+04} +- equation: A2 + OH <=> A2- + H2O # Reaction 224 + rate-constant: {A: 963.0, b: 3.02, Ea: 4373.8} diff --git a/samples/python/AVBP/inputs/Lu.cti b/samples/python/AVBP/inputs/Lu.cti new file mode 100755 index 00000000000..66a81d9203c --- /dev/null +++ b/samples/python/AVBP/inputs/Lu.cti @@ -0,0 +1,1351 @@ +""" + A 30-species skeletal mechanism based on GRI3.0 + + by Tianfeng Lu + Email: tlu@engr.uconn.edu + + Reference: + Tianfeng Lu and Chung K. Law, + "A criterion based on computational singular perturbation + for the identification of quasi steady state species: + A reduced mechanism for methane oxidation with NO chemistry," + Combustion and Flame, Vol.154 No.4 pp.761774, 2008. + + +""" + +units(length='cm', time='s', quantity='mol', act_energy='cal/mol') + +ideal_gas(name='gas', + elements="O H C N Ar", + species="""H2 H O O2 OH H2O HO2 + H2O2 C CH CH2 CH2(S) CH3 CH4 + CO CO2 HCO CH2O CH2OH CH3O CH3OH + C2H2 C2H3 C2H4 C2H5 C2H6 HCCO CH2CO + CH2CHO N2""", + reactions='all', + transport='Mix', + initial_state=state(temperature=300.0, pressure=OneAtm)) + +#------------------------------------------------------------------------------- +# Species data +#------------------------------------------------------------------------------- + +species(name=u'H2', + atoms='H:2', + thermo=(NASA([200.00, 1000.00], + [ 2.34433112E+00, 7.98052075E-03, -1.94781510E-05, + 2.01572094E-08, -7.37611761E-12, -9.17935173E+02, + 6.83010238E-01]), + NASA([1000.00, 3500.00], + [ 3.33727920E+00, -4.94024731E-05, 4.99456778E-07, + -1.79566394E-10, 2.00255376E-14, -9.50158922E+02, + -3.20502331E+00])), + transport=gas_transport(geom='linear', + diam=2.92, + well_depth=38.0, + polar=0.79, + rot_relax=280.0), + note=u'TPIS78') + +species(name=u'H', + atoms='H:1', + thermo=(NASA([200.00, 1000.00], + [ 2.50000000E+00, 7.05332819E-13, -1.99591964E-15, + 2.30081632E-18, -9.27732332E-22, 2.54736599E+04, + -4.46682853E-01]), + NASA([1000.00, 3500.00], + [ 2.50000001E+00, -2.30842973E-11, 1.61561948E-14, + -4.73515235E-18, 4.98197357E-22, 2.54736599E+04, + -4.46682914E-01])), + transport=gas_transport(geom='atom', + diam=2.05, + well_depth=145.0), + note=u'L7/88') + +species(name=u'O', + atoms='O:1', + thermo=(NASA([200.00, 1000.00], + [ 3.16826710E+00, -3.27931884E-03, 6.64306396E-06, + -6.12806624E-09, 2.11265971E-12, 2.91222592E+04, + 2.05193346E+00]), + NASA([1000.00, 3500.00], + [ 2.56942078E+00, -8.59741137E-05, 4.19484589E-08, + -1.00177799E-11, 1.22833691E-15, 2.92175791E+04, + 4.78433864E+00])), + transport=gas_transport(geom='atom', + diam=2.75, + well_depth=80.0), + note=u'L1/90') + +species(name=u'O2', + atoms='O:2', + thermo=(NASA([200.00, 1000.00], + [ 3.78245636E+00, -2.99673416E-03, 9.84730201E-06, + -9.68129509E-09, 3.24372837E-12, -1.06394356E+03, + 3.65767573E+00]), + NASA([1000.00, 3500.00], + [ 3.28253784E+00, 1.48308754E-03, -7.57966669E-07, + 2.09470555E-10, -2.16717794E-14, -1.08845772E+03, + 5.45323129E+00])), + transport=gas_transport(geom='linear', + diam=3.458, + well_depth=107.4, + polar=1.6, + rot_relax=3.8), + note=u'TPIS89') + +species(name=u'OH', + atoms='H:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 3.99201543E+00, -2.40131752E-03, 4.61793841E-06, + -3.88113333E-09, 1.36411470E-12, 3.61508056E+03, + -1.03925458E-01]), + NASA([1000.00, 3500.00], + [ 3.09288767E+00, 5.48429716E-04, 1.26505228E-07, + -8.79461556E-11, 1.17412376E-14, 3.85865700E+03, + 4.47669610E+00])), + transport=gas_transport(geom='linear', + diam=2.75, + well_depth=80.0), + note=u'RUS78') + +species(name=u'H2O', + atoms='H:2 O:1', + thermo=(NASA([200.00, 1000.00], + [ 4.19864056E+00, -2.03643410E-03, 6.52040211E-06, + -5.48797062E-09, 1.77197817E-12, -3.02937267E+04, + -8.49032208E-01]), + NASA([1000.00, 3500.00], + [ 3.03399249E+00, 2.17691804E-03, -1.64072518E-07, + -9.70419870E-11, 1.68200992E-14, -3.00042971E+04, + 4.96677010E+00])), + transport=gas_transport(geom='nonlinear', + diam=2.605, + well_depth=572.4, + dipole=1.844, + rot_relax=4.0), + note=u'L8/89') + +species(name=u'HO2', + atoms='H:1 O:2', + thermo=(NASA([200.00, 1000.00], + [ 4.30179801E+00, -4.74912051E-03, 2.11582891E-05, + -2.42763894E-08, 9.29225124E-12, 2.94808040E+02, + 3.71666245E+00]), + NASA([1000.00, 3500.00], + [ 4.01721090E+00, 2.23982013E-03, -6.33658150E-07, + 1.14246370E-10, -1.07908535E-14, 1.11856713E+02, + 3.78510215E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.458, + well_depth=107.4, + rot_relax=1.0), + note=u'L5/89') + +species(name=u'H2O2', + atoms='H:2 O:2', + thermo=(NASA([200.00, 1000.00], + [ 4.27611269E+00, -5.42822417E-04, 1.67335701E-05, + -2.15770813E-08, 8.62454363E-12, -1.77025821E+04, + 3.43505074E+00]), + NASA([1000.00, 3500.00], + [ 4.16500285E+00, 4.90831694E-03, -1.90139225E-06, + 3.71185986E-10, -2.87908305E-14, -1.78617877E+04, + 2.91615662E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.458, + well_depth=107.4, + rot_relax=3.8), + note=u'L7/88') + +species(name=u'C', + atoms='C:1', + thermo=(NASA([200.00, 1000.00], + [ 2.55423955E+00, -3.21537724E-04, 7.33792245E-07, + -7.32234889E-10, 2.66521446E-13, 8.54438832E+04, + 4.53130848E+00]), + NASA([1000.00, 3500.00], + [ 2.49266888E+00, 4.79889284E-05, -7.24335020E-08, + 3.74291029E-11, -4.87277893E-15, 8.54512953E+04, + 4.80150373E+00])), + transport=gas_transport(geom='atom', + diam=3.298, + well_depth=71.4), + note=u'L11/88') + +species(name=u'CH', + atoms='H:1 C:1', + thermo=(NASA([200.00, 1000.00], + [ 3.48981665E+00, 3.23835541E-04, -1.68899065E-06, + 3.16217327E-09, -1.40609067E-12, 7.07972934E+04, + 2.08401108E+00]), + NASA([1000.00, 3500.00], + [ 2.87846473E+00, 9.70913681E-04, 1.44445655E-07, + -1.30687849E-10, 1.76079383E-14, 7.10124364E+04, + 5.48497999E+00])), + transport=gas_transport(geom='linear', + diam=2.75, + well_depth=80.0), + note=u'TPIS79') + +species(name=u'CH2', + atoms='H:2 C:1', + thermo=(NASA([200.00, 1000.00], + [ 3.76267867E+00, 9.68872143E-04, 2.79489841E-06, + -3.85091153E-09, 1.68741719E-12, 4.60040401E+04, + 1.56253185E+00]), + NASA([1000.00, 3500.00], + [ 2.87410113E+00, 3.65639292E-03, -1.40894597E-06, + 2.60179549E-10, -1.87727567E-14, 4.62636040E+04, + 6.17119324E+00])), + transport=gas_transport(geom='linear', + diam=3.8, + well_depth=144.0), + note=u'LS/93') + +species(name=u'CH2(S)', + atoms='H:2 C:1', + thermo=(NASA([200.00, 1000.00], + [ 4.19860411E+00, -2.36661419E-03, 8.23296220E-06, + -6.68815981E-09, 1.94314737E-12, 5.04968163E+04, + -7.69118967E-01]), + NASA([1000.00, 3500.00], + [ 2.29203842E+00, 4.65588637E-03, -2.01191947E-06, + 4.17906000E-10, -3.39716365E-14, 5.09259997E+04, + 8.62650169E+00])), + transport=gas_transport(geom='linear', + diam=3.8, + well_depth=144.0), + note=u'LS/93') + +species(name=u'CH3', + atoms='H:3 C:1', + thermo=(NASA([200.00, 1000.00], + [ 3.67359040E+00, 2.01095175E-03, 5.73021856E-06, + -6.87117425E-09, 2.54385734E-12, 1.64449988E+04, + 1.60456433E+00]), + NASA([1000.00, 3500.00], + [ 2.28571772E+00, 7.23990037E-03, -2.98714348E-06, + 5.95684644E-10, -4.67154394E-14, 1.67755843E+04, + 8.48007179E+00])), + transport=gas_transport(geom='linear', + diam=3.8, + well_depth=144.0), + note=u'L11/89') + +species(name=u'CH4', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01])), + transport=gas_transport(geom='nonlinear', + diam=3.746, + well_depth=141.4, + polar=2.6, + rot_relax=13.0), + note=u'L8/88') + +species(name=u'CO', + atoms='C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 3.57953347E+00, -6.10353680E-04, 1.01681433E-06, + 9.07005884E-10, -9.04424499E-13, -1.43440860E+04, + 3.50840928E+00]), + NASA([1000.00, 3500.00], + [ 2.71518561E+00, 2.06252743E-03, -9.98825771E-07, + 2.30053008E-10, -2.03647716E-14, -1.41518724E+04, + 7.81868772E+00])), + transport=gas_transport(geom='linear', + diam=3.65, + well_depth=98.1, + polar=1.95, + rot_relax=1.8), + note=u'TPIS79') + +species(name=u'CO2', + atoms='C:1 O:2', + thermo=(NASA([200.00, 1000.00], + [ 2.35677352E+00, 8.98459677E-03, -7.12356269E-06, + 2.45919022E-09, -1.43699548E-13, -4.83719697E+04, + 9.90105222E+00]), + NASA([1000.00, 3500.00], + [ 3.85746029E+00, 4.41437026E-03, -2.21481404E-06, + 5.23490188E-10, -4.72084164E-14, -4.87591660E+04, + 2.27163806E+00])), + transport=gas_transport(geom='linear', + diam=3.763, + well_depth=244.0, + polar=2.65, + rot_relax=2.1), + note=u'L7/88') + +species(name=u'HCO', + atoms='H:1 C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 4.22118584E+00, -3.24392532E-03, 1.37799446E-05, + -1.33144093E-08, 4.33768865E-12, 3.83956496E+03, + 3.39437243E+00]), + NASA([1000.00, 3500.00], + [ 2.77217438E+00, 4.95695526E-03, -2.48445613E-06, + 5.89161778E-10, -5.33508711E-14, 4.01191815E+03, + 9.79834492E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.59, + well_depth=498.0), + note=u'L12/89') + +species(name=u'CH2O', + atoms='H:2 C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 4.79372315E+00, -9.90833369E-03, 3.73220008E-05, + -3.79285261E-08, 1.31772652E-11, -1.43089567E+04, + 6.02812900E-01]), + NASA([1000.00, 3500.00], + [ 1.76069008E+00, 9.20000082E-03, -4.42258813E-06, + 1.00641212E-09, -8.83855640E-14, -1.39958323E+04, + 1.36563230E+01])), + transport=gas_transport(geom='nonlinear', + diam=3.59, + well_depth=498.0, + rot_relax=2.0), + note=u'L8/88') + +species(name=u'CH2OH', + atoms='H:3 C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 3.86388918E+00, 5.59672304E-03, 5.93271791E-06, + -1.04532012E-08, 4.36967278E-12, -3.19391367E+03, + 5.47302243E+00]), + NASA([1000.00, 3500.00], + [ 3.69266569E+00, 8.64576797E-03, -3.75101120E-06, + 7.87234636E-10, -6.48554201E-14, -3.24250627E+03, + 5.81043215E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.69, + well_depth=417.0, + dipole=1.7, + rot_relax=2.0), + note=u'GUNL93') + +species(name=u'CH3O', + atoms='H:3 C:1 O:1', + thermo=(NASA([300.00, 1000.00], + [ 2.10620400E+00, 7.21659500E-03, 5.33847200E-06, + -7.37763600E-09, 2.07561000E-12, 9.78601100E+02, + 1.31521770E+01]), + NASA([1000.00, 3000.00], + [ 3.77079900E+00, 7.87149700E-03, -2.65638400E-06, + 3.94443100E-10, -2.11261600E-14, 1.27832520E+02, + 2.92957500E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.69, + well_depth=417.0, + dipole=1.7, + rot_relax=2.0), + note=u'121686') + +species(name=u'CH3OH', + atoms='H:4 C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 5.71539582E+00, -1.52309129E-02, 6.52441155E-05, + -7.10806889E-08, 2.61352698E-11, -2.56427656E+04, + -1.50409823E+00]), + NASA([1000.00, 3500.00], + [ 1.78970791E+00, 1.40938292E-02, -6.36500835E-06, + 1.38171085E-09, -1.17060220E-13, -2.53748747E+04, + 1.45023623E+01])), + transport=gas_transport(geom='nonlinear', + diam=3.626, + well_depth=481.8, + rot_relax=1.0), + note=u'L8/88') + +species(name=u'C2H2', + atoms='H:2 C:2', + thermo=(NASA([200.00, 1000.00], + [ 8.08681094E-01, 2.33615629E-02, -3.55171815E-05, + 2.80152437E-08, -8.50072974E-12, 2.64289807E+04, + 1.39397051E+01]), + NASA([1000.00, 3500.00], + [ 4.14756964E+00, 5.96166664E-03, -2.37294852E-06, + 4.67412171E-10, -3.61235213E-14, 2.59359992E+04, + -1.23028121E+00])), + transport=gas_transport(geom='linear', + diam=4.1, + well_depth=209.0, + rot_relax=2.5), + note=u'L1/91') + +species(name=u'C2H3', + atoms='H:3 C:2', + thermo=(NASA([200.00, 1000.00], + [ 3.21246645E+00, 1.51479162E-03, 2.59209412E-05, + -3.57657847E-08, 1.47150873E-11, 3.48598468E+04, + 8.51054025E+00]), + NASA([1000.00, 3500.00], + [ 3.01672400E+00, 1.03302292E-02, -4.68082349E-06, + 1.01763288E-09, -8.62607041E-14, 3.46128739E+04, + 7.78732378E+00])), + transport=gas_transport(geom='nonlinear', + diam=4.1, + well_depth=209.0, + rot_relax=1.0), + note=u'L2/92') + +species(name=u'C2H4', + atoms='H:4 C:2', + thermo=(NASA([200.00, 1000.00], + [ 3.95920148E+00, -7.57052247E-03, 5.70990292E-05, + -6.91588753E-08, 2.69884373E-11, 5.08977593E+03, + 4.09733096E+00]), + NASA([1000.00, 3500.00], + [ 2.03611116E+00, 1.46454151E-02, -6.71077915E-06, + 1.47222923E-09, -1.25706061E-13, 4.93988614E+03, + 1.03053693E+01])), + transport=gas_transport(geom='nonlinear', + diam=3.971, + well_depth=280.8, + rot_relax=1.5), + note=u'L1/91') + +species(name=u'C2H5', + atoms='H:5 C:2', + thermo=(NASA([200.00, 1000.00], + [ 4.30646568E+00, -4.18658892E-03, 4.97142807E-05, + -5.99126606E-08, 2.30509004E-11, 1.28416265E+04, + 4.70720924E+00]), + NASA([1000.00, 3500.00], + [ 1.95465642E+00, 1.73972722E-02, -7.98206668E-06, + 1.75217689E-09, -1.49641576E-13, 1.28575200E+04, + 1.34624343E+01])), + transport=gas_transport(geom='nonlinear', + diam=4.302, + well_depth=252.3, + rot_relax=1.5), + note=u'L12/92') + +species(name=u'C2H6', + atoms='H:6 C:2', + thermo=(NASA([200.00, 1000.00], + [ 4.29142492E+00, -5.50154270E-03, 5.99438288E-05, + -7.08466285E-08, 2.68685771E-11, -1.15222055E+04, + 2.66682316E+00]), + NASA([1000.00, 3500.00], + [ 1.07188150E+00, 2.16852677E-02, -1.00256067E-05, + 2.21412001E-09, -1.90002890E-13, -1.14263932E+04, + 1.51156107E+01])), + transport=gas_transport(geom='nonlinear', + diam=4.302, + well_depth=252.3, + rot_relax=1.5), + note=u'L8/88') + +species(name=u'HCCO', + atoms='H:1 C:2 O:1', + thermo=(NASA([300.00, 1000.00], + [ 2.25172140E+00, 1.76550210E-02, -2.37291010E-05, + 1.72757590E-08, -5.06648110E-12, 2.00594490E+04, + 1.24904170E+01]), + NASA([1000.00, 4000.00], + [ 5.62820580E+00, 4.08534010E-03, -1.59345470E-06, + 2.86260520E-10, -1.94078320E-14, 1.93272150E+04, + -3.93025950E+00])), + transport=gas_transport(geom='nonlinear', + diam=2.5, + well_depth=150.0, + rot_relax=1.0), + note=u'SRIC91') + +species(name=u'CH2CO', + atoms='H:2 C:2 O:1', + thermo=(NASA([200.00, 1000.00], + [ 2.13583630E+00, 1.81188721E-02, -1.73947474E-05, + 9.34397568E-09, -2.01457615E-12, -7.04291804E+03, + 1.22156480E+01]), + NASA([1000.00, 3500.00], + [ 4.51129732E+00, 9.00359745E-03, -4.16939635E-06, + 9.23345882E-10, -7.94838201E-14, -7.55105311E+03, + 6.32247205E-01])), + transport=gas_transport(geom='nonlinear', + diam=3.97, + well_depth=436.0, + rot_relax=2.0), + note=u'L5/90') + +species(name=u'CH2CHO', + atoms='H:3 C:2 O:1', + thermo=(NASA([300.00, 1000.00], + [ 3.40906200E+00, 1.07385740E-02, 1.89149200E-06, + -7.15858300E-09, 2.86738500E-12, 1.52147660E+03, + 9.55829000E+00]), + NASA([1000.00, 5000.00], + [ 5.97567000E+00, 8.13059100E-03, -2.74362400E-06, + 4.07030400E-10, -2.17601700E-14, 4.90321800E+02, + -5.04525100E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.97, + well_depth=436.0, + rot_relax=2.0), + note=u'SAND86') + +species(name=u'N2', + atoms='N:2', + thermo=(NASA([300.00, 1000.00], + [ 3.29867700E+00, 1.40824040E-03, -3.96322200E-06, + 5.64151500E-09, -2.44485400E-12, -1.02089990E+03, + 3.95037200E+00]), + NASA([1000.00, 5000.00], + [ 2.92664000E+00, 1.48797680E-03, -5.68476000E-07, + 1.00970380E-10, -6.75335100E-15, -9.22797700E+02, + 5.98052800E+00])), + transport=gas_transport(geom='linear', + diam=3.621, + well_depth=97.53, + polar=1.76, + rot_relax=4.0), + note=u'121286') + +#------------------------------------------------------------------------------- +# Reaction data +#------------------------------------------------------------------------------- +# R1 + +# Reaction 1 +three_body_reaction('2 O + M <=> O2 + M', [1.200000e+17, -1.0, 0.0], + efficiencies='CO2:3.6 CO:1.75 H2:2.4 H2O:15.4 CH4:2.0 C2H6:3.0') +# R2 + +# Reaction 2 +three_body_reaction('O + H + M <=> OH + M', [5.000000e+17, -1.0, 0.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0') +# R3 + +# Reaction 3 +reaction('O + H2 <=> H + OH', [3.870000e+04, 2.7, 6260.0]) +# R4 + +# Reaction 4 +reaction('O + HO2 <=> OH + O2', [2.000000e+13, 0.0, 0.0]) +# R5 + +# Reaction 5 +reaction('O + H2O2 <=> OH + HO2', [9.630000e+06, 2.0, 4000.0]) +# R6 + +# Reaction 6 +reaction('O + CH <=> H + CO', [5.700000e+13, 0.0, 0.0]) +# R7 + +# Reaction 7 +reaction('O + CH2 <=> H + HCO', [8.000000e+13, 0.0, 0.0]) +# R8 + +# Reaction 8 +reaction('O + CH2(S) <=> H2 + CO', [1.500000e+13, 0.0, 0.0]) +# R9 + +# Reaction 9 +reaction('O + CH2(S) <=> H + HCO', [1.500000e+13, 0.0, 0.0]) +# R10 + +# Reaction 10 +reaction('O + CH3 <=> H + CH2O', [5.060000e+13, 0.0, 0.0]) +# R11 + +# Reaction 11 +reaction('O + CH4 <=> OH + CH3', [1.020000e+09, 1.5, 8600.0]) +# R12 + +# Reaction 12 +falloff_reaction('O + CO (+ M) <=> CO2 (+ M)', + kf=[1.800000e+10, 0.0, 2385.0], + kf0=[6.020000e+14, 0.0, 3000.0], + efficiencies='CO2:3.5 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0 O2:6.0') +# R13 + +# Reaction 13 +reaction('O + HCO <=> OH + CO', [3.000000e+13, 0.0, 0.0]) +# R14 + +# Reaction 14 +reaction('O + HCO <=> H + CO2', [3.000000e+13, 0.0, 0.0]) +# R15 + +# Reaction 15 +reaction('O + CH2O <=> OH + HCO', [3.900000e+13, 0.0, 3540.0]) +# R16 + +# Reaction 16 +reaction('O + CH2OH <=> OH + CH2O', [1.000000e+13, 0.0, 0.0]) +# R17 + +# Reaction 17 +reaction('O + CH3O <=> OH + CH2O', [1.000000e+13, 0.0, 0.0]) +# R18 + +# Reaction 18 +reaction('O + CH3OH <=> OH + CH2OH', [3.880000e+05, 2.5, 3100.0]) +# R19 + +# Reaction 19 +reaction('O + CH3OH <=> OH + CH3O', [1.300000e+05, 2.5, 5000.0]) +# R20 + +# Reaction 20 +reaction('O + C2H2 <=> H + HCCO', [1.350000e+07, 2.0, 1900.0]) +# R21 + +# Reaction 21 +reaction('O + C2H2 <=> CO + CH2', [6.940000e+06, 2.0, 1900.0]) +# R22 + +# Reaction 22 +reaction('O + C2H3 <=> H + CH2CO', [3.000000e+13, 0.0, 0.0]) +# R23 + +# Reaction 23 +reaction('O + C2H4 <=> CH3 + HCO', [1.250000e+07, 1.83, 220.0]) +# R24 + +# Reaction 24 +reaction('O + C2H5 <=> CH3 + CH2O', [2.240000e+13, 0.0, 0.0]) +# R25 + +# Reaction 25 +reaction('O + C2H6 <=> OH + C2H5', [8.980000e+07, 1.92, 5690.0]) +# R26 + +# Reaction 26 +reaction('O + HCCO <=> H + 2 CO', [1.000000e+14, 0.0, 0.0]) +# R27 + +# Reaction 27 +reaction('O + CH2CO <=> OH + HCCO', [1.000000e+13, 0.0, 8000.0]) +# R28 + +# Reaction 28 +reaction('O + CH2CO <=> CH2 + CO2', [1.750000e+12, 0.0, 1350.0]) +# R29 + +# Reaction 29 +reaction('O2 + CO <=> O + CO2', [2.500000e+12, 0.0, 47800.0]) +# R30 + +# Reaction 30 +reaction('O2 + CH2O <=> HO2 + HCO', [1.000000e+14, 0.0, 40000.0]) +# R31 + +# Reaction 31 +three_body_reaction('H + O2 + M <=> HO2 + M', [2.800000e+18, -0.86, 0.0], + efficiencies='CO2:1.5 CO:0.75 H2O:0.0 C2H6:1.5 N2:0.0 O2:0.0') +# R32 + +# Reaction 32 +reaction('H + 2 O2 <=> HO2 + O2', [2.080000e+19, -1.24, 0.0]) +# R33 + +# Reaction 33 +reaction('H + O2 + H2O <=> HO2 + H2O', [1.126000e+19, -0.76, 0.0]) +# R34 + +# Reaction 34 +reaction('H + O2 + N2 <=> HO2 + N2', [2.600000e+19, -1.24, 0.0]) +# R35 + +# Reaction 35 +reaction('H + O2 <=> O + OH', [2.650000e+16, -0.6707, 17041.0]) +# R36 + +# Reaction 36 +three_body_reaction('2 H + M <=> H2 + M', [1.000000e+18, -1.0, 0.0], + efficiencies='H2:0.0 C2H6:3.0 H2O:0.0 CO2:0.0 CH4:2.0') +# R37 + +# Reaction 37 +reaction('2 H + H2 <=> 2 H2', [9.000000e+16, -0.6, 0.0]) +# R38 + +# Reaction 38 +reaction('2 H + H2O <=> H2 + H2O', [6.000000e+19, -1.25, 0.0]) +# R39 + +# Reaction 39 +reaction('2 H + CO2 <=> H2 + CO2', [5.500000e+20, -2.0, 0.0]) +# R40 + +# Reaction 40 +three_body_reaction('H + OH + M <=> H2O + M', [2.200000e+22, -2.0, 0.0], + efficiencies='H2:0.73 C2H6:3.0 H2O:3.65 CH4:2.0') +# R41 + +# Reaction 41 +reaction('H + HO2 <=> O + H2O', [3.970000e+12, 0.0, 671.0]) +# R42 + +# Reaction 42 +reaction('H + HO2 <=> O2 + H2', [4.480000e+13, 0.0, 1068.0]) +# R43 + +# Reaction 43 +reaction('H + HO2 <=> 2 OH', [8.400000e+13, 0.0, 635.0]) +# R44 + +# Reaction 44 +reaction('H + H2O2 <=> HO2 + H2', [1.210000e+07, 2.0, 5200.0]) +# R45 + +# Reaction 45 +reaction('H + H2O2 <=> OH + H2O', [1.000000e+13, 0.0, 3600.0]) +# R46 + +# Reaction 46 +reaction('H + CH <=> C + H2', [1.650000e+14, 0.0, 0.0]) +# R47 + +# Reaction 47 +falloff_reaction('H + CH2 (+ M) <=> CH3 (+ M)', + kf=[6.000000e+14, 0.0, 0.0], + kf0=[1.040000e+26, -2.76, 1600.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.562, T3=91.0, T1=5836.0, T2=8552.0)) +# R48 + +# Reaction 48 +reaction('H + CH2(S) <=> CH + H2', [3.000000e+13, 0.0, 0.0]) +# R49 + +# Reaction 49 +falloff_reaction('H + CH3 (+ M) <=> CH4 (+ M)', + kf=[1.390000e+16, -0.534, 536.0], + kf0=[2.620000e+33, -4.76, 2440.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:3.0 C2H6:3.0', + falloff=Troe(A=0.783, T3=74.0, T1=2941.0, T2=6964.0)) +# R50 + +# Reaction 50 +reaction('H + CH4 <=> CH3 + H2', [6.600000e+08, 1.62, 10840.0]) +# R51 + +# Reaction 51 +falloff_reaction('H + HCO (+ M) <=> CH2O (+ M)', + kf=[1.090000e+12, 0.48, -260.0], + kf0=[2.470000e+24, -2.57, 425.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.7824, T3=271.0, T1=2755.0, T2=6570.0)) +# R52 + +# Reaction 52 +reaction('H + HCO <=> H2 + CO', [7.340000e+13, 0.0, 0.0]) +# R53 + +# Reaction 53 +falloff_reaction('H + CH2O (+ M) <=> CH2OH (+ M)', + kf=[5.400000e+11, 0.454, 3600.0], + kf0=[1.270000e+32, -4.82, 6530.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.7187, T3=103.0, T1=1291.0, T2=4160.0)) +# R54 + +# Reaction 54 +falloff_reaction('H + CH2O (+ M) <=> CH3O (+ M)', + kf=[5.400000e+11, 0.454, 2600.0], + kf0=[2.200000e+30, -4.8, 5560.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.758, T3=94.0, T1=1555.0, T2=4200.0)) +# R55 + +# Reaction 55 +reaction('H + CH2O <=> HCO + H2', [5.740000e+07, 1.9, 2742.0]) +# R56 + +# Reaction 56 +falloff_reaction('H + CH2OH (+ M) <=> CH3OH (+ M)', + kf=[1.055000e+12, 0.5, 86.0], + kf0=[4.360000e+31, -4.65, 5080.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.6, T3=100.0, T1=90000.0, T2=10000.0)) +# R57 + +# Reaction 57 +reaction('H + CH2OH <=> H2 + CH2O', [2.000000e+13, 0.0, 0.0]) +# R58 + +# Reaction 58 +reaction('H + CH2OH <=> OH + CH3', [1.650000e+11, 0.65, -284.0]) +# R59 + +# Reaction 59 +reaction('H + CH2OH <=> CH2(S) + H2O', [3.280000e+13, -0.09, 610.0]) +# R60 + +# Reaction 60 +falloff_reaction('H + CH3O (+ M) <=> CH3OH (+ M)', + kf=[2.430000e+12, 0.515, 50.0], + kf0=[4.660000e+41, -7.44, 14080.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.7, T3=100.0, T1=90000.0, T2=10000.0)) +# R61 + +# Reaction 61 +reaction('H + CH3O <=> H + CH2OH', [4.150000e+07, 1.63, 1924.0]) +# R62 + +# Reaction 62 +reaction('H + CH3O <=> H2 + CH2O', [2.000000e+13, 0.0, 0.0]) +# R63 + +# Reaction 63 +reaction('H + CH3O <=> OH + CH3', [1.500000e+12, 0.5, -110.0]) +# R64 + +# Reaction 64 +reaction('H + CH3O <=> CH2(S) + H2O', [2.620000e+14, -0.23, 1070.0]) +# R65 + +# Reaction 65 +reaction('H + CH3OH <=> CH2OH + H2', [1.700000e+07, 2.1, 4870.0]) +# R66 + +# Reaction 66 +reaction('H + CH3OH <=> CH3O + H2', [4.200000e+06, 2.1, 4870.0]) +# R67 + +# Reaction 67 +falloff_reaction('H + C2H2 (+ M) <=> C2H3 (+ M)', + kf=[5.600000e+12, 0.0, 2400.0], + kf0=[3.800000e+40, -7.27, 7220.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.7507, T3=98.5, T1=1302.0, T2=4167.0)) +# R68 + +# Reaction 68 +falloff_reaction('H + C2H3 (+ M) <=> C2H4 (+ M)', + kf=[6.080000e+12, 0.27, 280.0], + kf0=[1.400000e+30, -3.86, 3320.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.782, T3=207.5, T1=2663.0, T2=6095.0)) +# R69 + +# Reaction 69 +reaction('H + C2H3 <=> H2 + C2H2', [3.000000e+13, 0.0, 0.0]) +# R70 + +# Reaction 70 +falloff_reaction('H + C2H4 (+ M) <=> C2H5 (+ M)', + kf=[5.400000e+11, 0.454, 1820.0], + kf0=[6.000000e+41, -7.62, 6970.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.9753, T3=210.0, T1=984.0, T2=4374.0)) +# R71 + +# Reaction 71 +reaction('H + C2H4 <=> C2H3 + H2', [1.325000e+06, 2.53, 12240.0]) +# R72 + +# Reaction 72 +falloff_reaction('H + C2H5 (+ M) <=> C2H6 (+ M)', + kf=[5.210000e+17, -0.99, 1580.0], + kf0=[1.990000e+41, -7.08, 6685.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.8422, T3=125.0, T1=2219.0, T2=6882.0)) +# R73 + +# Reaction 73 +reaction('H + C2H5 <=> H2 + C2H4', [2.000000e+12, 0.0, 0.0]) +# R74 + +# Reaction 74 +reaction('H + C2H6 <=> C2H5 + H2', [1.150000e+08, 1.9, 7530.0]) +# R75 + +# Reaction 75 +reaction('H + HCCO <=> CH2(S) + CO', [1.000000e+14, 0.0, 0.0]) +# R76 + +# Reaction 76 +reaction('H + CH2CO <=> HCCO + H2', [5.000000e+13, 0.0, 8000.0]) +# R77 + +# Reaction 77 +reaction('H + CH2CO <=> CH3 + CO', [1.130000e+13, 0.0, 3428.0]) +# R78 + +# Reaction 78 +falloff_reaction('H2 + CO (+ M) <=> CH2O (+ M)', + kf=[4.300000e+07, 1.5, 79600.0], + kf0=[5.070000e+27, -3.42, 84350.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.932, T3=197.0, T1=1540.0, T2=10300.0)) +# R79 + +# Reaction 79 +reaction('OH + H2 <=> H + H2O', [2.160000e+08, 1.51, 3430.0]) +# R80 + +# Reaction 80 +falloff_reaction('2 OH (+ M) <=> H2O2 (+ M)', + kf=[7.400000e+13, -0.37, 0.0], + kf0=[2.300000e+18, -0.9, -1700.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.7346, T3=94.0, T1=1756.0, T2=5182.0)) +# R81 + +# Reaction 81 +reaction('2 OH <=> O + H2O', [3.570000e+04, 2.4, -2110.0]) +# R82 + +# Reaction 82 +reaction('OH + HO2 <=> O2 + H2O', [1.450000e+13, 0.0, -500.0], + options='duplicate') +# R83 + +# Reaction 83 +reaction('OH + H2O2 <=> HO2 + H2O', [2.000000e+12, 0.0, 427.0], + options='duplicate') +# R84 + +# Reaction 84 +reaction('OH + H2O2 <=> HO2 + H2O', [1.700000e+18, 0.0, 29410.0], + options='duplicate') +# R85 + +# Reaction 85 +reaction('OH + C <=> H + CO', [5.000000e+13, 0.0, 0.0]) +# R86 + +# Reaction 86 +reaction('OH + CH <=> H + HCO', [3.000000e+13, 0.0, 0.0]) +# R87 + +# Reaction 87 +reaction('OH + CH2 <=> H + CH2O', [2.000000e+13, 0.0, 0.0]) +# R88 + +# Reaction 88 +reaction('OH + CH2 <=> CH + H2O', [1.130000e+07, 2.0, 3000.0]) +# R89 + +# Reaction 89 +reaction('OH + CH2(S) <=> H + CH2O', [3.000000e+13, 0.0, 0.0]) +# R90 + +# Reaction 90 +falloff_reaction('OH + CH3 (+ M) <=> CH3OH (+ M)', + kf=[2.790000e+18, -1.43, 1330.0], + kf0=[4.000000e+36, -5.92, 3140.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.412, T3=195.0, T1=5900.0, T2=6394.0)) +# R91 + +# Reaction 91 +reaction('OH + CH3 <=> CH2 + H2O', [5.600000e+07, 1.6, 5420.0]) +# R92 + +# Reaction 92 +reaction('OH + CH3 <=> CH2(S) + H2O', [6.440000e+17, -1.34, 1417.0]) +# R93 + +# Reaction 93 +reaction('OH + CH4 <=> CH3 + H2O', [1.000000e+08, 1.6, 3120.0]) +# R94 + +# Reaction 94 +reaction('OH + CO <=> H + CO2', [4.760000e+07, 1.228, 70.0]) +# R95 + +# Reaction 95 +reaction('OH + HCO <=> H2O + CO', [5.000000e+13, 0.0, 0.0]) +# R96 + +# Reaction 96 +reaction('OH + CH2O <=> HCO + H2O', [3.430000e+09, 1.18, -447.0]) +# R97 + +# Reaction 97 +reaction('OH + CH2OH <=> H2O + CH2O', [5.000000e+12, 0.0, 0.0]) +# R98 + +# Reaction 98 +reaction('OH + CH3O <=> H2O + CH2O', [5.000000e+12, 0.0, 0.0]) +# R99 + +# Reaction 99 +reaction('OH + CH3OH <=> CH2OH + H2O', [1.440000e+06, 2.0, -840.0]) +# R100 + +# Reaction 100 +reaction('OH + CH3OH <=> CH3O + H2O', [6.300000e+06, 2.0, 1500.0]) +# R101 + +# Reaction 101 +reaction('OH + C2H2 <=> H + CH2CO', [2.180000e-04, 4.5, -1000.0]) +# R102 + +# Reaction 102 +reaction('OH + C2H2 <=> CH3 + CO', [4.830000e-04, 4.0, -2000.0]) +# R103 + +# Reaction 103 +reaction('OH + C2H3 <=> H2O + C2H2', [5.000000e+12, 0.0, 0.0]) +# R104 + +# Reaction 104 +reaction('OH + C2H4 <=> C2H3 + H2O', [3.600000e+06, 2.0, 2500.0]) +# R105 + +# Reaction 105 +reaction('OH + C2H6 <=> C2H5 + H2O', [3.540000e+06, 2.12, 870.0]) +# R106 + +# Reaction 106 +reaction('OH + CH2CO <=> HCCO + H2O', [7.500000e+12, 0.0, 2000.0]) +# R107 + +# Reaction 107 +reaction('2 HO2 <=> O2 + H2O2', [1.300000e+11, 0.0, -1630.0], + options='duplicate') +# R108 + +# Reaction 108 +reaction('2 HO2 <=> O2 + H2O2', [4.200000e+14, 0.0, 12000.0], + options='duplicate') +# R109 + +# Reaction 109 +reaction('HO2 + CH2 <=> OH + CH2O', [2.000000e+13, 0.0, 0.0]) +# R110 + +# Reaction 110 +reaction('HO2 + CH3 <=> O2 + CH4', [1.000000e+12, 0.0, 0.0]) +# R111 + +# Reaction 111 +reaction('HO2 + CH3 <=> OH + CH3O', [3.780000e+13, 0.0, 0.0]) +# R112 + +# Reaction 112 +reaction('HO2 + CO <=> OH + CO2', [1.500000e+14, 0.0, 23600.0]) +# R113 + +# Reaction 113 +reaction('HO2 + CH2O <=> HCO + H2O2', [5.600000e+06, 2.0, 12000.0]) +# R114 + +# Reaction 114 +reaction('C + O2 <=> O + CO', [5.800000e+13, 0.0, 576.0]) +# R115 + +# Reaction 115 +reaction('C + CH3 <=> H + C2H2', [5.000000e+13, 0.0, 0.0]) +# R116 + +# Reaction 116 +reaction('CH + O2 <=> O + HCO', [6.710000e+13, 0.0, 0.0]) +# R117 + +# Reaction 117 +reaction('CH + H2 <=> H + CH2', [1.080000e+14, 0.0, 3110.0]) +# R118 + +# Reaction 118 +reaction('CH + H2O <=> H + CH2O', [5.710000e+12, 0.0, -755.0]) +# R119 + +# Reaction 119 +# reaction('CH + CH2 <=> H + C2H2', [4.000000e+13, 0.0, 0.0]) +# R120 + +# Reaction 120 +reaction('CH + CH3 <=> H + C2H3', [3.000000e+13, 0.0, 0.0]) +# R121 + +# Reaction 121 +reaction('CH + CH4 <=> H + C2H4', [6.000000e+13, 0.0, 0.0]) +# R122 + +# Reaction 122 +falloff_reaction('CH + CO (+ M) <=> HCCO (+ M)', + kf=[5.000000e+13, 0.0, 0.0], + kf0=[2.690000e+28, -3.74, 1936.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.5757, T3=237.0, T1=1652.0, T2=5069.0)) +# R123 + +# Reaction 123 +reaction('CH + CO2 <=> HCO + CO', [1.900000e+14, 0.0, 15792.0]) +# R124 + +# Reaction 124 +reaction('CH + CH2O <=> H + CH2CO', [9.460000e+13, 0.0, -515.0]) +# R125 + +# Reaction 125 +# reaction('CH + HCCO <=> CO + C2H2', [5.000000e+13, 0.0, 0.0]) +# R126 + +# Reaction 126 +reaction('CH2 + O2 => OH + H + CO', [5.000000e+12, 0.0, 1500.0]) +# R127 + +# Reaction 127 +reaction('CH2 + H2 <=> H + CH3', [5.000000e+05, 2.0, 7230.0]) +# R128 + +# Reaction 128 +# reaction('2 CH2 <=> H2 + C2H2', [1.600000e+15, 0.0, 11944.0]) +# R129 + +# Reaction 129 +reaction('CH2 + CH3 <=> H + C2H4', [4.000000e+13, 0.0, 0.0]) +# R130 + +# Reaction 130 +reaction('CH2 + CH4 <=> 2 CH3', [2.460000e+06, 2.0, 8270.0]) +# R131 + +# Reaction 131 +falloff_reaction('CH2 + CO (+ M) <=> CH2CO (+ M)', + kf=[8.100000e+11, 0.5, 4510.0], + kf0=[2.690000e+33, -5.11, 7095.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.5907, T3=275.0, T1=1226.0, T2=5185.0)) +# R132 + +# Reaction 132 +# reaction('CH2 + HCCO <=> C2H3 + CO', [3.000000e+13, 0.0, 0.0]) +# R133 + +# Reaction 133 +reaction('CH2(S) + N2 <=> CH2 + N2', [1.500000e+13, 0.0, 600.0]) +# R134 + +# Reaction 134 +reaction('CH2(S) + O2 <=> H + OH + CO', [2.800000e+13, 0.0, 0.0]) +# R135 + +# Reaction 135 +reaction('CH2(S) + O2 <=> CO + H2O', [1.200000e+13, 0.0, 0.0]) +# R136 + +# Reaction 136 +reaction('CH2(S) + H2 <=> CH3 + H', [7.000000e+13, 0.0, 0.0]) +# R137 + +# Reaction 137 +falloff_reaction('CH2(S) + H2O (+ M) <=> CH3OH (+ M)', + kf=[4.820000e+17, -1.16, 1145.0], + kf0=[1.880000e+38, -6.36, 5040.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.6027, T3=208.0, T1=3922.0, T2=10180.0)) +# R138 + +# Reaction 138 +reaction('CH2(S) + H2O <=> CH2 + H2O', [3.000000e+13, 0.0, 0.0]) +# R139 + +# Reaction 139 +reaction('CH2(S) + CH3 <=> H + C2H4', [1.200000e+13, 0.0, -570.0]) +# R140 + +# Reaction 140 +reaction('CH2(S) + CH4 <=> 2 CH3', [1.600000e+13, 0.0, -570.0]) +# R141 + +# Reaction 141 +reaction('CH2(S) + CO <=> CH2 + CO', [9.000000e+12, 0.0, 0.0]) +# R142 + +# Reaction 142 +reaction('CH2(S) + CO2 <=> CH2 + CO2', [7.000000e+12, 0.0, 0.0]) +# R143 + +# Reaction 143 +reaction('CH2(S) + CO2 <=> CO + CH2O', [1.400000e+13, 0.0, 0.0]) +# R144 + +# Reaction 144 +reaction('CH2(S) + C2H6 <=> CH3 + C2H5', [4.000000e+13, 0.0, -550.0]) +# R145 + +# Reaction 145 +reaction('CH3 + O2 <=> O + CH3O', [3.560000e+13, 0.0, 30480.0]) +# R146 + +# Reaction 146 +reaction('CH3 + O2 <=> OH + CH2O', [2.310000e+12, 0.0, 20315.0]) +# R147 + +# Reaction 147 +reaction('CH3 + H2O2 <=> HO2 + CH4', [2.450000e+04, 2.47, 5180.0]) +# R148 + +# Reaction 148 +falloff_reaction('2 CH3 (+ M) <=> C2H6 (+ M)', + kf=[6.770000e+16, -1.18, 654.0], + kf0=[3.400000e+41, -7.03, 2762.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.619, T3=73.2, T1=1180.0, T2=9999.0)) +# R149 + +# Reaction 149 +reaction('2 CH3 <=> H + C2H5', [6.840000e+12, 0.1, 10600.0]) +# R150 + +# Reaction 150 +reaction('CH3 + HCO <=> CH4 + CO', [2.648000e+13, 0.0, 0.0]) +# R151 + +# Reaction 151 +reaction('CH3 + CH2O <=> HCO + CH4', [3.320000e+03, 2.81, 5860.0]) +# R152 + +# Reaction 152 +reaction('CH3 + CH3OH <=> CH2OH + CH4', [3.000000e+07, 1.5, 9940.0]) +# R153 + +# Reaction 153 +reaction('CH3 + CH3OH <=> CH3O + CH4', [1.000000e+07, 1.5, 9940.0]) +# R154 + +# Reaction 154 +reaction('CH3 + C2H4 <=> C2H3 + CH4', [2.270000e+05, 2.0, 9200.0]) +# R155 + +# Reaction 155 +reaction('CH3 + C2H6 <=> C2H5 + CH4', [6.140000e+06, 1.74, 10450.0]) +# R156 + +# Reaction 156 +reaction('HCO + H2O <=> H + CO + H2O', [1.500000e+18, -1.0, 17000.0]) +# R157 + +# Reaction 157 +three_body_reaction('HCO + M <=> H + CO + M', [1.870000e+17, -1.0, 17000.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:0.0 CH4:2.0 C2H6:3.0') +# R158 + +# Reaction 158 +reaction('HCO + O2 <=> HO2 + CO', [1.345000e+13, 0.0, 400.0]) +# R159 + +# Reaction 159 +reaction('CH2OH + O2 <=> HO2 + CH2O', [1.800000e+13, 0.0, 900.0]) +# R160 + +# Reaction 160 +reaction('CH3O + O2 <=> HO2 + CH2O', [4.280000e-13, 7.6, -3530.0]) +# R161 + +# Reaction 161 +reaction('C2H3 + O2 <=> HCO + CH2O', [4.580000e+16, -1.39, 1015.0]) +# R162 + +# Reaction 162 +falloff_reaction('C2H4 (+ M) <=> H2 + C2H2 (+ M)', + kf=[8.000000e+12, 0.44, 86770.0], + kf0=[1.580000e+51, -9.3, 97800.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.7345, T3=180.0, T1=1035.0, T2=5417.0)) +# R163 + +# Reaction 163 +reaction('C2H5 + O2 <=> HO2 + C2H4', [8.400000e+11, 0.0, 3875.0]) +# R164 + +# Reaction 164 +reaction('HCCO + O2 <=> OH + 2 CO', [3.200000e+12, 0.0, 854.0]) +# R165 + +# Reaction 165 +# reaction('2 HCCO <=> 2 CO + C2H2', [1.000000e+13, 0.0, 0.0]) +# R166 + +# Reaction 166 +reaction('O + CH3 => H + H2 + CO', [3.370000e+13, 0.0, 0.0]) +# R167 + +# Reaction 167 +reaction('O + C2H4 <=> H + CH2CHO', [6.700000e+06, 1.83, 220.0]) +# R168 + +# Reaction 168 +reaction('OH + HO2 <=> O2 + H2O', [5.000000e+15, 0.0, 17330.0], + options='duplicate') +# R169 + +# Reaction 169 +reaction('OH + CH3 => H2 + CH2O', [8.000000e+09, 0.5, -1755.0]) +# R170 + +# Reaction 170 +falloff_reaction('CH + H2 (+ M) <=> CH3 (+ M)', + kf=[1.970000e+12, 0.43, -370.0], + kf0=[4.820000e+25, -2.8, 590.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.578, T3=122.0, T1=2535.0, T2=9365.0)) +# R171 + +# Reaction 171 +reaction('CH2 + O2 => 2 H + CO2', [5.800000e+12, 0.0, 1500.0]) +# R172 + +# Reaction 172 +reaction('CH2 + O2 <=> O + CH2O', [2.400000e+12, 0.0, 1500.0]) +# R173 + +# Reaction 173 +# reaction('CH2 + CH2 => 2 H + C2H2', [2.000000e+14, 0.0, 10989.0]) +# R174 + +# Reaction 174 +reaction('CH2(S) + H2O => H2 + CH2O', [6.820000e+10, 0.25, -935.0]) +# R175 + +# Reaction 175 +reaction('C2H3 + O2 <=> O + CH2CHO', [3.030000e+11, 0.29, 11.0]) +# R176 + +# Reaction 176 +reaction('C2H3 + O2 <=> HO2 + C2H2', [1.337000e+06, 1.61, -384.0]) +# R177 + +# Reaction 177 +falloff_reaction('H + CH2CO (+ M) <=> CH2CHO (+ M)', + kf=[4.865000e+11, 0.422, -1755.0], + kf0=[1.012000e+42, -7.63, 3854.0], + efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', + falloff=Troe(A=0.465, T3=201.0, T1=1773.0, T2=5333.0)) +# R178 + +# Reaction 178 +reaction('O + CH2CHO => H + CH2 + CO2', [1.500000e+14, 0.0, 0.0]) +# R179 + +# Reaction 179 +reaction('O2 + CH2CHO => OH + CO + CH2O', [1.810000e+10, 0.0, 0.0]) +# R180 + +# Reaction 180 +reaction('O2 + CH2CHO => OH + 2 HCO', [2.350000e+10, 0.0, 0.0]) +# R181 + +# Reaction 181 +reaction('H + CH2CHO <=> CH3 + HCO', [2.200000e+13, 0.0, 0.0]) +# R182 + +# Reaction 182 +reaction('H + CH2CHO <=> CH2CO + H2', [1.100000e+13, 0.0, 0.0]) +# R183 + +# Reaction 183 +reaction('OH + CH2CHO <=> H2O + CH2CO', [1.200000e+13, 0.0, 0.0]) +# R184 + +# Reaction 184 +# reaction('OH + CH2CHO <=> HCO + CH2OH', [3.010000e+13, 0.0, 0.0]) diff --git a/samples/python/AVBP/inputs/Lu.yaml b/samples/python/AVBP/inputs/Lu.yaml new file mode 100644 index 00000000000..3dcf578a23c --- /dev/null +++ b/samples/python/AVBP/inputs/Lu.yaml @@ -0,0 +1,997 @@ +description: |- + "" + +generator: cti2yaml +cantera-version: 3.0.0 +date: Tue, 26 Dec 2023 00:54:57 +0100 +input-files: [Lu.cti] + +units: {length: cm, quantity: mol, activation-energy: cal/mol} + +phases: +- name: gas + thermo: ideal-gas + elements: [O, H, C, N, Ar] + species: [H2, H, O, O2, OH, H2O, HO2, H2O2, C, CH, CH2, CH2(S), CH3, CH4, + CO, CO2, HCO, CH2O, CH2OH, CH3O, CH3OH, C2H2, C2H3, C2H4, C2H5, C2H6, + HCCO, CH2CO, CH2CHO, N2] + kinetics: gas + reactions: all + transport: mixture-averaged + state: + T: 300.0 + P: 1.01325e+05 + +species: +- name: H2 + composition: {H: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.34433112, 7.98052075e-03, -1.9478151e-05, 2.01572094e-08, -7.37611761e-12, + -917.935173, 0.683010238] + - [3.3372792, -4.94024731e-05, 4.99456778e-07, -1.79566394e-10, 2.00255376e-14, + -950.158922, -3.20502331] + transport: + model: gas + geometry: linear + diameter: 2.92 + well-depth: 38.0 + polarizability: 0.79 + rotational-relaxation: 280.0 + note: TPIS78 +- name: H + composition: {H: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.5, 7.05332819e-13, -1.99591964e-15, 2.30081632e-18, -9.27732332e-22, + 2.54736599e+04, -0.446682853] + - [2.50000001, -2.30842973e-11, 1.61561948e-14, -4.73515235e-18, 4.98197357e-22, + 2.54736599e+04, -0.446682914] + transport: + model: gas + geometry: atom + diameter: 2.05 + well-depth: 145.0 + note: L7/88 +- name: O + composition: {O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.1682671, -3.27931884e-03, 6.64306396e-06, -6.12806624e-09, 2.11265971e-12, + 2.91222592e+04, 2.05193346] + - [2.56942078, -8.59741137e-05, 4.19484589e-08, -1.00177799e-11, 1.22833691e-15, + 2.92175791e+04, 4.78433864] + transport: + model: gas + geometry: atom + diameter: 2.75 + well-depth: 80.0 + note: L1/90 +- name: O2 + composition: {O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.78245636, -2.99673416e-03, 9.84730201e-06, -9.68129509e-09, 3.24372837e-12, + -1063.94356, 3.65767573] + - [3.28253784, 1.48308754e-03, -7.57966669e-07, 2.09470555e-10, -2.16717794e-14, + -1088.45772, 5.45323129] + transport: + model: gas + geometry: linear + diameter: 3.458 + well-depth: 107.4 + polarizability: 1.6 + rotational-relaxation: 3.8 + note: TPIS89 +- name: OH + composition: {H: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.99201543, -2.40131752e-03, 4.61793841e-06, -3.88113333e-09, 1.3641147e-12, + 3615.08056, -0.103925458] + - [3.09288767, 5.48429716e-04, 1.26505228e-07, -8.79461556e-11, 1.17412376e-14, + 3858.657, 4.4766961] + transport: + model: gas + geometry: linear + diameter: 2.75 + well-depth: 80.0 + note: RUS78 +- name: H2O + composition: {H: 2, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.19864056, -2.0364341e-03, 6.52040211e-06, -5.48797062e-09, 1.77197817e-12, + -3.02937267e+04, -0.849032208] + - [3.03399249, 2.17691804e-03, -1.64072518e-07, -9.7041987e-11, 1.68200992e-14, + -3.00042971e+04, 4.9667701] + transport: + model: gas + geometry: nonlinear + diameter: 2.605 + well-depth: 572.4 + dipole: 1.844 + rotational-relaxation: 4.0 + note: L8/89 +- name: HO2 + composition: {H: 1, O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.30179801, -4.74912051e-03, 2.11582891e-05, -2.42763894e-08, 9.29225124e-12, + 294.80804, 3.71666245] + - [4.0172109, 2.23982013e-03, -6.3365815e-07, 1.1424637e-10, -1.07908535e-14, + 111.856713, 3.78510215] + transport: + model: gas + geometry: nonlinear + diameter: 3.458 + well-depth: 107.4 + rotational-relaxation: 1.0 + note: L5/89 +- name: H2O2 + composition: {H: 2, O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.27611269, -5.42822417e-04, 1.67335701e-05, -2.15770813e-08, 8.62454363e-12, + -1.77025821e+04, 3.43505074] + - [4.16500285, 4.90831694e-03, -1.90139225e-06, 3.71185986e-10, -2.87908305e-14, + -1.78617877e+04, 2.91615662] + transport: + model: gas + geometry: nonlinear + diameter: 3.458 + well-depth: 107.4 + rotational-relaxation: 3.8 + note: L7/88 +- name: C + composition: {C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.55423955, -3.21537724e-04, 7.33792245e-07, -7.32234889e-10, 2.66521446e-13, + 8.54438832e+04, 4.53130848] + - [2.49266888, 4.79889284e-05, -7.2433502e-08, 3.74291029e-11, -4.87277893e-15, + 8.54512953e+04, 4.80150373] + transport: + model: gas + geometry: atom + diameter: 3.298 + well-depth: 71.4 + note: L11/88 +- name: CH + composition: {H: 1, C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.48981665, 3.23835541e-04, -1.68899065e-06, 3.16217327e-09, -1.40609067e-12, + 7.07972934e+04, 2.08401108] + - [2.87846473, 9.70913681e-04, 1.44445655e-07, -1.30687849e-10, 1.76079383e-14, + 7.10124364e+04, 5.48497999] + transport: + model: gas + geometry: linear + diameter: 2.75 + well-depth: 80.0 + note: TPIS79 +- name: CH2 + composition: {H: 2, C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.76267867, 9.68872143e-04, 2.79489841e-06, -3.85091153e-09, 1.68741719e-12, + 4.60040401e+04, 1.56253185] + - [2.87410113, 3.65639292e-03, -1.40894597e-06, 2.60179549e-10, -1.87727567e-14, + 4.6263604e+04, 6.17119324] + transport: + model: gas + geometry: linear + diameter: 3.8 + well-depth: 144.0 + note: LS/93 +- name: CH2(S) + composition: {H: 2, C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.19860411, -2.36661419e-03, 8.2329622e-06, -6.68815981e-09, 1.94314737e-12, + 5.04968163e+04, -0.769118967] + - [2.29203842, 4.65588637e-03, -2.01191947e-06, 4.17906e-10, -3.39716365e-14, + 5.09259997e+04, 8.62650169] + transport: + model: gas + geometry: linear + diameter: 3.8 + well-depth: 144.0 + note: LS/93 +- name: CH3 + composition: {H: 3, C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.6735904, 2.01095175e-03, 5.73021856e-06, -6.87117425e-09, 2.54385734e-12, + 1.64449988e+04, 1.60456433] + - [2.28571772, 7.23990037e-03, -2.98714348e-06, 5.95684644e-10, -4.67154394e-14, + 1.67755843e+04, 8.48007179] + transport: + model: gas + geometry: linear + diameter: 3.8 + well-depth: 144.0 + note: L11/89 +- name: CH4 + composition: {H: 4, C: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [5.14987613, -0.0136709788, 4.91800599e-05, -4.84743026e-08, 1.66693956e-11, + -1.02466476e+04, -4.64130376] + - [0.074851495, 0.0133909467, -5.73285809e-06, 1.22292535e-09, -1.0181523e-13, + -9468.34459, 18.437318] + transport: + model: gas + geometry: nonlinear + diameter: 3.746 + well-depth: 141.4 + polarizability: 2.6 + rotational-relaxation: 13.0 + note: L8/88 +- name: CO + composition: {C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.57953347, -6.1035368e-04, 1.01681433e-06, 9.07005884e-10, -9.04424499e-13, + -1.4344086e+04, 3.50840928] + - [2.71518561, 2.06252743e-03, -9.98825771e-07, 2.30053008e-10, -2.03647716e-14, + -1.41518724e+04, 7.81868772] + transport: + model: gas + geometry: linear + diameter: 3.65 + well-depth: 98.1 + polarizability: 1.95 + rotational-relaxation: 1.8 + note: TPIS79 +- name: CO2 + composition: {C: 1, O: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.35677352, 8.98459677e-03, -7.12356269e-06, 2.45919022e-09, -1.43699548e-13, + -4.83719697e+04, 9.90105222] + - [3.85746029, 4.41437026e-03, -2.21481404e-06, 5.23490188e-10, -4.72084164e-14, + -4.8759166e+04, 2.27163806] + transport: + model: gas + geometry: linear + diameter: 3.763 + well-depth: 244.0 + polarizability: 2.65 + rotational-relaxation: 2.1 + note: L7/88 +- name: HCO + composition: {H: 1, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.22118584, -3.24392532e-03, 1.37799446e-05, -1.33144093e-08, 4.33768865e-12, + 3839.56496, 3.39437243] + - [2.77217438, 4.95695526e-03, -2.48445613e-06, 5.89161778e-10, -5.33508711e-14, + 4011.91815, 9.79834492] + transport: + model: gas + geometry: nonlinear + diameter: 3.59 + well-depth: 498.0 + note: L12/89 +- name: CH2O + composition: {H: 2, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.79372315, -9.90833369e-03, 3.73220008e-05, -3.79285261e-08, 1.31772652e-11, + -1.43089567e+04, 0.6028129] + - [1.76069008, 9.20000082e-03, -4.42258813e-06, 1.00641212e-09, -8.8385564e-14, + -1.39958323e+04, 13.656323] + transport: + model: gas + geometry: nonlinear + diameter: 3.59 + well-depth: 498.0 + rotational-relaxation: 2.0 + note: L8/88 +- name: CH2OH + composition: {H: 3, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.86388918, 5.59672304e-03, 5.93271791e-06, -1.04532012e-08, 4.36967278e-12, + -3193.91367, 5.47302243] + - [3.69266569, 8.64576797e-03, -3.7510112e-06, 7.87234636e-10, -6.48554201e-14, + -3242.50627, 5.81043215] + transport: + model: gas + geometry: nonlinear + diameter: 3.69 + well-depth: 417.0 + dipole: 1.7 + rotational-relaxation: 2.0 + note: GUNL93 +- name: CH3O + composition: {H: 3, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [2.106204, 7.216595e-03, 5.338472e-06, -7.377636e-09, 2.07561e-12, + 978.6011, 13.152177] + - [3.770799, 7.871497e-03, -2.656384e-06, 3.944431e-10, -2.112616e-14, + 127.83252, 2.929575] + transport: + model: gas + geometry: nonlinear + diameter: 3.69 + well-depth: 417.0 + dipole: 1.7 + rotational-relaxation: 2.0 + note: '121686' +- name: CH3OH + composition: {H: 4, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [5.71539582, -0.0152309129, 6.52441155e-05, -7.10806889e-08, 2.61352698e-11, + -2.56427656e+04, -1.50409823] + - [1.78970791, 0.0140938292, -6.36500835e-06, 1.38171085e-09, -1.1706022e-13, + -2.53748747e+04, 14.5023623] + transport: + model: gas + geometry: nonlinear + diameter: 3.626 + well-depth: 481.8 + rotational-relaxation: 1.0 + note: L8/88 +- name: C2H2 + composition: {H: 2, C: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [0.808681094, 0.0233615629, -3.55171815e-05, 2.80152437e-08, -8.50072974e-12, + 2.64289807e+04, 13.9397051] + - [4.14756964, 5.96166664e-03, -2.37294852e-06, 4.67412171e-10, -3.61235213e-14, + 2.59359992e+04, -1.23028121] + transport: + model: gas + geometry: linear + diameter: 4.1 + well-depth: 209.0 + rotational-relaxation: 2.5 + note: L1/91 +- name: C2H3 + composition: {H: 3, C: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.21246645, 1.51479162e-03, 2.59209412e-05, -3.57657847e-08, 1.47150873e-11, + 3.48598468e+04, 8.51054025] + - [3.016724, 0.0103302292, -4.68082349e-06, 1.01763288e-09, -8.62607041e-14, + 3.46128739e+04, 7.78732378] + transport: + model: gas + geometry: nonlinear + diameter: 4.1 + well-depth: 209.0 + rotational-relaxation: 1.0 + note: L2/92 +- name: C2H4 + composition: {H: 4, C: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.95920148, -7.57052247e-03, 5.70990292e-05, -6.91588753e-08, 2.69884373e-11, + 5089.77593, 4.09733096] + - [2.03611116, 0.0146454151, -6.71077915e-06, 1.47222923e-09, -1.25706061e-13, + 4939.88614, 10.3053693] + transport: + model: gas + geometry: nonlinear + diameter: 3.971 + well-depth: 280.8 + rotational-relaxation: 1.5 + note: L1/91 +- name: C2H5 + composition: {H: 5, C: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.30646568, -4.18658892e-03, 4.97142807e-05, -5.99126606e-08, 2.30509004e-11, + 1.28416265e+04, 4.70720924] + - [1.95465642, 0.0173972722, -7.98206668e-06, 1.75217689e-09, -1.49641576e-13, + 1.285752e+04, 13.4624343] + transport: + model: gas + geometry: nonlinear + diameter: 4.302 + well-depth: 252.3 + rotational-relaxation: 1.5 + note: L12/92 +- name: C2H6 + composition: {H: 6, C: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.29142492, -5.5015427e-03, 5.99438288e-05, -7.08466285e-08, 2.68685771e-11, + -1.15222055e+04, 2.66682316] + - [1.0718815, 0.0216852677, -1.00256067e-05, 2.21412001e-09, -1.9000289e-13, + -1.14263932e+04, 15.1156107] + transport: + model: gas + geometry: nonlinear + diameter: 4.302 + well-depth: 252.3 + rotational-relaxation: 1.5 + note: L8/88 +- name: HCCO + composition: {H: 1, C: 2, O: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 4000.0] + data: + - [2.2517214, 0.017655021, -2.3729101e-05, 1.7275759e-08, -5.0664811e-12, + 2.0059449e+04, 12.490417] + - [5.6282058, 4.0853401e-03, -1.5934547e-06, 2.8626052e-10, -1.9407832e-14, + 1.9327215e+04, -3.9302595] + transport: + model: gas + geometry: nonlinear + diameter: 2.5 + well-depth: 150.0 + rotational-relaxation: 1.0 + note: SRIC91 +- name: CH2CO + composition: {H: 2, C: 2, O: 1} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.1358363, 0.0181188721, -1.73947474e-05, 9.34397568e-09, -2.01457615e-12, + -7042.91804, 12.215648] + - [4.51129732, 9.00359745e-03, -4.16939635e-06, 9.23345882e-10, -7.94838201e-14, + -7551.05311, 0.632247205] + transport: + model: gas + geometry: nonlinear + diameter: 3.97 + well-depth: 436.0 + rotational-relaxation: 2.0 + note: L5/90 +- name: CH2CHO + composition: {H: 3, C: 2, O: 1} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [3.409062, 0.010738574, 1.891492e-06, -7.158583e-09, 2.867385e-12, + 1521.4766, 9.55829] + - [5.97567, 8.130591e-03, -2.743624e-06, 4.070304e-10, -2.176017e-14, + 490.3218, -5.045251] + transport: + model: gas + geometry: nonlinear + diameter: 3.97 + well-depth: 436.0 + rotational-relaxation: 2.0 + note: SAND86 +- name: N2 + composition: {N: 2} + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [3.298677, 1.4082404e-03, -3.963222e-06, 5.641515e-09, -2.444854e-12, + -1020.8999, 3.950372] + - [2.92664, 1.4879768e-03, -5.68476e-07, 1.0097038e-10, -6.753351e-15, + -922.7977, 5.980528] + transport: + model: gas + geometry: linear + diameter: 3.621 + well-depth: 97.53 + polarizability: 1.76 + rotational-relaxation: 4.0 + note: '121286' + +reactions: +- equation: 2 O + M <=> O2 + M # Reaction 1 + type: three-body + rate-constant: {A: 1.2e+17, b: -1.0, Ea: 0.0} + efficiencies: {CO2: 3.6, CO: 1.75, H2: 2.4, H2O: 15.4, CH4: 2.0, C2H6: 3.0} +- equation: O + H + M <=> OH + M # Reaction 2 + type: three-body + rate-constant: {A: 5.0e+17, b: -1.0, Ea: 0.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: O + H2 <=> H + OH # Reaction 3 + rate-constant: {A: 3.87e+04, b: 2.7, Ea: 6260.0} +- equation: O + HO2 <=> OH + O2 # Reaction 4 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: O + H2O2 <=> OH + HO2 # Reaction 5 + rate-constant: {A: 9.63e+06, b: 2.0, Ea: 4000.0} +- equation: O + CH <=> H + CO # Reaction 6 + rate-constant: {A: 5.7e+13, b: 0.0, Ea: 0.0} +- equation: O + CH2 <=> H + HCO # Reaction 7 + rate-constant: {A: 8.0e+13, b: 0.0, Ea: 0.0} +- equation: O + CH2(S) <=> H2 + CO # Reaction 8 + rate-constant: {A: 1.5e+13, b: 0.0, Ea: 0.0} +- equation: O + CH2(S) <=> H + HCO # Reaction 9 + rate-constant: {A: 1.5e+13, b: 0.0, Ea: 0.0} +- equation: O + CH3 <=> H + CH2O # Reaction 10 + rate-constant: {A: 5.06e+13, b: 0.0, Ea: 0.0} +- equation: O + CH4 <=> OH + CH3 # Reaction 11 + rate-constant: {A: 1.02e+09, b: 1.5, Ea: 8600.0} +- equation: O + CO (+ M) <=> CO2 (+ M) # Reaction 12 + type: falloff + low-P-rate-constant: {A: 6.02e+14, b: 0.0, Ea: 3000.0} + high-P-rate-constant: {A: 1.8e+10, b: 0.0, Ea: 2385.0} + efficiencies: {CO2: 3.5, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0, + O2: 6.0} +- equation: O + HCO <=> OH + CO # Reaction 13 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: O + HCO <=> H + CO2 # Reaction 14 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: O + CH2O <=> OH + HCO # Reaction 15 + rate-constant: {A: 3.9e+13, b: 0.0, Ea: 3540.0} +- equation: O + CH2OH <=> OH + CH2O # Reaction 16 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 0.0} +- equation: O + CH3O <=> OH + CH2O # Reaction 17 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 0.0} +- equation: O + CH3OH <=> OH + CH2OH # Reaction 18 + rate-constant: {A: 3.88e+05, b: 2.5, Ea: 3100.0} +- equation: O + CH3OH <=> OH + CH3O # Reaction 19 + rate-constant: {A: 1.3e+05, b: 2.5, Ea: 5000.0} +- equation: O + C2H2 <=> H + HCCO # Reaction 20 + rate-constant: {A: 1.35e+07, b: 2.0, Ea: 1900.0} +- equation: O + C2H2 <=> CO + CH2 # Reaction 21 + rate-constant: {A: 6.94e+06, b: 2.0, Ea: 1900.0} +- equation: O + C2H3 <=> H + CH2CO # Reaction 22 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: O + C2H4 <=> CH3 + HCO # Reaction 23 + rate-constant: {A: 1.25e+07, b: 1.83, Ea: 220.0} +- equation: O + C2H5 <=> CH3 + CH2O # Reaction 24 + rate-constant: {A: 2.24e+13, b: 0.0, Ea: 0.0} +- equation: O + C2H6 <=> OH + C2H5 # Reaction 25 + rate-constant: {A: 8.98e+07, b: 1.92, Ea: 5690.0} +- equation: O + HCCO <=> H + 2 CO # Reaction 26 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 0.0} +- equation: O + CH2CO <=> OH + HCCO # Reaction 27 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 8000.0} +- equation: O + CH2CO <=> CH2 + CO2 # Reaction 28 + rate-constant: {A: 1.75e+12, b: 0.0, Ea: 1350.0} +- equation: O2 + CO <=> O + CO2 # Reaction 29 + rate-constant: {A: 2.5e+12, b: 0.0, Ea: 4.78e+04} +- equation: O2 + CH2O <=> HO2 + HCO # Reaction 30 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 4.0e+04} +- equation: H + O2 + M <=> HO2 + M # Reaction 31 + type: three-body + rate-constant: {A: 2.8e+18, b: -0.86, Ea: 0.0} + efficiencies: {CO2: 1.5, CO: 0.75, H2O: 0.0, C2H6: 1.5, N2: 0.0, O2: 0.0} +- equation: H + 2 O2 <=> HO2 + O2 # Reaction 32 + rate-constant: {A: 2.08e+19, b: -1.24, Ea: 0.0} +- equation: H + O2 + H2O <=> HO2 + H2O # Reaction 33 + rate-constant: {A: 1.126e+19, b: -0.76, Ea: 0.0} +- equation: H + O2 + N2 <=> HO2 + N2 # Reaction 34 + rate-constant: {A: 2.6e+19, b: -1.24, Ea: 0.0} +- equation: H + O2 <=> O + OH # Reaction 35 + rate-constant: {A: 2.65e+16, b: -0.6707, Ea: 1.7041e+04} +- equation: 2 H + M <=> H2 + M # Reaction 36 + type: three-body + rate-constant: {A: 1.0e+18, b: -1.0, Ea: 0.0} + efficiencies: {H2: 0.0, C2H6: 3.0, H2O: 0.0, CO2: 0.0, CH4: 2.0} +- equation: 2 H + H2 <=> 2 H2 # Reaction 37 + rate-constant: {A: 9.0e+16, b: -0.6, Ea: 0.0} +- equation: 2 H + H2O <=> H2 + H2O # Reaction 38 + rate-constant: {A: 6.0e+19, b: -1.25, Ea: 0.0} +- equation: 2 H + CO2 <=> H2 + CO2 # Reaction 39 + rate-constant: {A: 5.5e+20, b: -2.0, Ea: 0.0} +- equation: H + OH + M <=> H2O + M # Reaction 40 + type: three-body + rate-constant: {A: 2.2e+22, b: -2.0, Ea: 0.0} + efficiencies: {H2: 0.73, C2H6: 3.0, H2O: 3.65, CH4: 2.0} +- equation: H + HO2 <=> O + H2O # Reaction 41 + rate-constant: {A: 3.97e+12, b: 0.0, Ea: 671.0} +- equation: H + HO2 <=> O2 + H2 # Reaction 42 + rate-constant: {A: 4.48e+13, b: 0.0, Ea: 1068.0} +- equation: H + HO2 <=> 2 OH # Reaction 43 + rate-constant: {A: 8.4e+13, b: 0.0, Ea: 635.0} +- equation: H + H2O2 <=> HO2 + H2 # Reaction 44 + rate-constant: {A: 1.21e+07, b: 2.0, Ea: 5200.0} +- equation: H + H2O2 <=> OH + H2O # Reaction 45 + rate-constant: {A: 1.0e+13, b: 0.0, Ea: 3600.0} +- equation: H + CH <=> C + H2 # Reaction 46 + rate-constant: {A: 1.65e+14, b: 0.0, Ea: 0.0} +- equation: H + CH2 (+ M) <=> CH3 (+ M) # Reaction 47 + type: falloff + low-P-rate-constant: {A: 1.04e+26, b: -2.76, Ea: 1600.0} + high-P-rate-constant: {A: 6.0e+14, b: 0.0, Ea: 0.0} + Troe: {A: 0.562, T3: 91.0, T1: 5836.0, T2: 8552.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: H + CH2(S) <=> CH + H2 # Reaction 48 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: H + CH3 (+ M) <=> CH4 (+ M) # Reaction 49 + type: falloff + low-P-rate-constant: {A: 2.62e+33, b: -4.76, Ea: 2440.0} + high-P-rate-constant: {A: 1.39e+16, b: -0.534, Ea: 536.0} + Troe: {A: 0.783, T3: 74.0, T1: 2941.0, T2: 6964.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 3.0, C2H6: 3.0} +- equation: H + CH4 <=> CH3 + H2 # Reaction 50 + rate-constant: {A: 6.6e+08, b: 1.62, Ea: 1.084e+04} +- equation: H + HCO (+ M) <=> CH2O (+ M) # Reaction 51 + type: falloff + low-P-rate-constant: {A: 2.47e+24, b: -2.57, Ea: 425.0} + high-P-rate-constant: {A: 1.09e+12, b: 0.48, Ea: -260.0} + Troe: {A: 0.7824, T3: 271.0, T1: 2755.0, T2: 6570.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: H + HCO <=> H2 + CO # Reaction 52 + rate-constant: {A: 7.34e+13, b: 0.0, Ea: 0.0} +- equation: H + CH2O (+ M) <=> CH2OH (+ M) # Reaction 53 + type: falloff + low-P-rate-constant: {A: 1.27e+32, b: -4.82, Ea: 6530.0} + high-P-rate-constant: {A: 5.4e+11, b: 0.454, Ea: 3600.0} + Troe: {A: 0.7187, T3: 103.0, T1: 1291.0, T2: 4160.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: H + CH2O (+ M) <=> CH3O (+ M) # Reaction 54 + type: falloff + low-P-rate-constant: {A: 2.2e+30, b: -4.8, Ea: 5560.0} + high-P-rate-constant: {A: 5.4e+11, b: 0.454, Ea: 2600.0} + Troe: {A: 0.758, T3: 94.0, T1: 1555.0, T2: 4200.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: H + CH2O <=> HCO + H2 # Reaction 55 + rate-constant: {A: 5.74e+07, b: 1.9, Ea: 2742.0} +- equation: H + CH2OH (+ M) <=> CH3OH (+ M) # Reaction 56 + type: falloff + low-P-rate-constant: {A: 4.36e+31, b: -4.65, Ea: 5080.0} + high-P-rate-constant: {A: 1.055e+12, b: 0.5, Ea: 86.0} + Troe: {A: 0.6, T3: 100.0, T1: 9.0e+04, T2: 1.0e+04} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: H + CH2OH <=> H2 + CH2O # Reaction 57 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: H + CH2OH <=> OH + CH3 # Reaction 58 + rate-constant: {A: 1.65e+11, b: 0.65, Ea: -284.0} +- equation: H + CH2OH <=> CH2(S) + H2O # Reaction 59 + rate-constant: {A: 3.28e+13, b: -0.09, Ea: 610.0} +- equation: H + CH3O (+ M) <=> CH3OH (+ M) # Reaction 60 + type: falloff + low-P-rate-constant: {A: 4.66e+41, b: -7.44, Ea: 1.408e+04} + high-P-rate-constant: {A: 2.43e+12, b: 0.515, Ea: 50.0} + Troe: {A: 0.7, T3: 100.0, T1: 9.0e+04, T2: 1.0e+04} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: H + CH3O <=> H + CH2OH # Reaction 61 + rate-constant: {A: 4.15e+07, b: 1.63, Ea: 1924.0} +- equation: H + CH3O <=> H2 + CH2O # Reaction 62 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: H + CH3O <=> OH + CH3 # Reaction 63 + rate-constant: {A: 1.5e+12, b: 0.5, Ea: -110.0} +- equation: H + CH3O <=> CH2(S) + H2O # Reaction 64 + rate-constant: {A: 2.62e+14, b: -0.23, Ea: 1070.0} +- equation: H + CH3OH <=> CH2OH + H2 # Reaction 65 + rate-constant: {A: 1.7e+07, b: 2.1, Ea: 4870.0} +- equation: H + CH3OH <=> CH3O + H2 # Reaction 66 + rate-constant: {A: 4.2e+06, b: 2.1, Ea: 4870.0} +- equation: H + C2H2 (+ M) <=> C2H3 (+ M) # Reaction 67 + type: falloff + low-P-rate-constant: {A: 3.8e+40, b: -7.27, Ea: 7220.0} + high-P-rate-constant: {A: 5.6e+12, b: 0.0, Ea: 2400.0} + Troe: {A: 0.7507, T3: 98.5, T1: 1302.0, T2: 4167.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: H + C2H3 (+ M) <=> C2H4 (+ M) # Reaction 68 + type: falloff + low-P-rate-constant: {A: 1.4e+30, b: -3.86, Ea: 3320.0} + high-P-rate-constant: {A: 6.08e+12, b: 0.27, Ea: 280.0} + Troe: {A: 0.782, T3: 207.5, T1: 2663.0, T2: 6095.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: H + C2H3 <=> H2 + C2H2 # Reaction 69 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: H + C2H4 (+ M) <=> C2H5 (+ M) # Reaction 70 + type: falloff + low-P-rate-constant: {A: 6.0e+41, b: -7.62, Ea: 6970.0} + high-P-rate-constant: {A: 5.4e+11, b: 0.454, Ea: 1820.0} + Troe: {A: 0.9753, T3: 210.0, T1: 984.0, T2: 4374.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: H + C2H4 <=> C2H3 + H2 # Reaction 71 + rate-constant: {A: 1.325e+06, b: 2.53, Ea: 1.224e+04} +- equation: H + C2H5 (+ M) <=> C2H6 (+ M) # Reaction 72 + type: falloff + low-P-rate-constant: {A: 1.99e+41, b: -7.08, Ea: 6685.0} + high-P-rate-constant: {A: 5.21e+17, b: -0.99, Ea: 1580.0} + Troe: {A: 0.8422, T3: 125.0, T1: 2219.0, T2: 6882.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: H + C2H5 <=> H2 + C2H4 # Reaction 73 + rate-constant: {A: 2.0e+12, b: 0.0, Ea: 0.0} +- equation: H + C2H6 <=> C2H5 + H2 # Reaction 74 + rate-constant: {A: 1.15e+08, b: 1.9, Ea: 7530.0} +- equation: H + HCCO <=> CH2(S) + CO # Reaction 75 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 0.0} +- equation: H + CH2CO <=> HCCO + H2 # Reaction 76 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 8000.0} +- equation: H + CH2CO <=> CH3 + CO # Reaction 77 + rate-constant: {A: 1.13e+13, b: 0.0, Ea: 3428.0} +- equation: H2 + CO (+ M) <=> CH2O (+ M) # Reaction 78 + type: falloff + low-P-rate-constant: {A: 5.07e+27, b: -3.42, Ea: 8.435e+04} + high-P-rate-constant: {A: 4.3e+07, b: 1.5, Ea: 7.96e+04} + Troe: {A: 0.932, T3: 197.0, T1: 1540.0, T2: 1.03e+04} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: OH + H2 <=> H + H2O # Reaction 79 + rate-constant: {A: 2.16e+08, b: 1.51, Ea: 3430.0} +- equation: 2 OH (+ M) <=> H2O2 (+ M) # Reaction 80 + type: falloff + low-P-rate-constant: {A: 2.3e+18, b: -0.9, Ea: -1700.0} + high-P-rate-constant: {A: 7.4e+13, b: -0.37, Ea: 0.0} + Troe: {A: 0.7346, T3: 94.0, T1: 1756.0, T2: 5182.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: 2 OH <=> O + H2O # Reaction 81 + rate-constant: {A: 3.57e+04, b: 2.4, Ea: -2110.0} +- equation: OH + HO2 <=> O2 + H2O # Reaction 82 + rate-constant: {A: 1.45e+13, b: 0.0, Ea: -500.0} + duplicate: true +- equation: OH + H2O2 <=> HO2 + H2O # Reaction 83 + rate-constant: {A: 2.0e+12, b: 0.0, Ea: 427.0} + duplicate: true +- equation: OH + H2O2 <=> HO2 + H2O # Reaction 84 + rate-constant: {A: 1.7e+18, b: 0.0, Ea: 2.941e+04} + duplicate: true +- equation: OH + C <=> H + CO # Reaction 85 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH <=> H + HCO # Reaction 86 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH2 <=> H + CH2O # Reaction 87 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH2 <=> CH + H2O # Reaction 88 + rate-constant: {A: 1.13e+07, b: 2.0, Ea: 3000.0} +- equation: OH + CH2(S) <=> H + CH2O # Reaction 89 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH3 (+ M) <=> CH3OH (+ M) # Reaction 90 + type: falloff + low-P-rate-constant: {A: 4.0e+36, b: -5.92, Ea: 3140.0} + high-P-rate-constant: {A: 2.79e+18, b: -1.43, Ea: 1330.0} + Troe: {A: 0.412, T3: 195.0, T1: 5900.0, T2: 6394.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: OH + CH3 <=> CH2 + H2O # Reaction 91 + rate-constant: {A: 5.6e+07, b: 1.6, Ea: 5420.0} +- equation: OH + CH3 <=> CH2(S) + H2O # Reaction 92 + rate-constant: {A: 6.44e+17, b: -1.34, Ea: 1417.0} +- equation: OH + CH4 <=> CH3 + H2O # Reaction 93 + rate-constant: {A: 1.0e+08, b: 1.6, Ea: 3120.0} +- equation: OH + CO <=> H + CO2 # Reaction 94 + rate-constant: {A: 4.76e+07, b: 1.228, Ea: 70.0} +- equation: OH + HCO <=> H2O + CO # Reaction 95 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH2O <=> HCO + H2O # Reaction 96 + rate-constant: {A: 3.43e+09, b: 1.18, Ea: -447.0} +- equation: OH + CH2OH <=> H2O + CH2O # Reaction 97 + rate-constant: {A: 5.0e+12, b: 0.0, Ea: 0.0} +- equation: OH + CH3O <=> H2O + CH2O # Reaction 98 + rate-constant: {A: 5.0e+12, b: 0.0, Ea: 0.0} +- equation: OH + CH3OH <=> CH2OH + H2O # Reaction 99 + rate-constant: {A: 1.44e+06, b: 2.0, Ea: -840.0} +- equation: OH + CH3OH <=> CH3O + H2O # Reaction 100 + rate-constant: {A: 6.3e+06, b: 2.0, Ea: 1500.0} +- equation: OH + C2H2 <=> H + CH2CO # Reaction 101 + rate-constant: {A: 2.18e-04, b: 4.5, Ea: -1000.0} +- equation: OH + C2H2 <=> CH3 + CO # Reaction 102 + rate-constant: {A: 4.83e-04, b: 4.0, Ea: -2000.0} +- equation: OH + C2H3 <=> H2O + C2H2 # Reaction 103 + rate-constant: {A: 5.0e+12, b: 0.0, Ea: 0.0} +- equation: OH + C2H4 <=> C2H3 + H2O # Reaction 104 + rate-constant: {A: 3.6e+06, b: 2.0, Ea: 2500.0} +- equation: OH + C2H6 <=> C2H5 + H2O # Reaction 105 + rate-constant: {A: 3.54e+06, b: 2.12, Ea: 870.0} +- equation: OH + CH2CO <=> HCCO + H2O # Reaction 106 + rate-constant: {A: 7.5e+12, b: 0.0, Ea: 2000.0} +- equation: 2 HO2 <=> O2 + H2O2 # Reaction 107 + rate-constant: {A: 1.3e+11, b: 0.0, Ea: -1630.0} + duplicate: true +- equation: 2 HO2 <=> O2 + H2O2 # Reaction 108 + rate-constant: {A: 4.2e+14, b: 0.0, Ea: 1.2e+04} + duplicate: true +- equation: HO2 + CH2 <=> OH + CH2O # Reaction 109 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: HO2 + CH3 <=> O2 + CH4 # Reaction 110 + rate-constant: {A: 1.0e+12, b: 0.0, Ea: 0.0} +- equation: HO2 + CH3 <=> OH + CH3O # Reaction 111 + rate-constant: {A: 3.78e+13, b: 0.0, Ea: 0.0} +- equation: HO2 + CO <=> OH + CO2 # Reaction 112 + rate-constant: {A: 1.5e+14, b: 0.0, Ea: 2.36e+04} +- equation: HO2 + CH2O <=> HCO + H2O2 # Reaction 113 + rate-constant: {A: 5.6e+06, b: 2.0, Ea: 1.2e+04} +- equation: C + O2 <=> O + CO # Reaction 114 + rate-constant: {A: 5.8e+13, b: 0.0, Ea: 576.0} +- equation: C + CH3 <=> H + C2H2 # Reaction 115 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: CH + O2 <=> O + HCO # Reaction 116 + rate-constant: {A: 6.71e+13, b: 0.0, Ea: 0.0} +- equation: CH + H2 <=> H + CH2 # Reaction 117 + rate-constant: {A: 1.08e+14, b: 0.0, Ea: 3110.0} +- equation: CH + H2O <=> H + CH2O # Reaction 118 + rate-constant: {A: 5.71e+12, b: 0.0, Ea: -755.0} +- equation: CH + CH3 <=> H + C2H3 # Reaction 119 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: CH + CH4 <=> H + C2H4 # Reaction 120 + rate-constant: {A: 6.0e+13, b: 0.0, Ea: 0.0} +- equation: CH + CO (+ M) <=> HCCO (+ M) # Reaction 121 + type: falloff + low-P-rate-constant: {A: 2.69e+28, b: -3.74, Ea: 1936.0} + high-P-rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} + Troe: {A: 0.5757, T3: 237.0, T1: 1652.0, T2: 5069.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: CH + CO2 <=> HCO + CO # Reaction 122 + rate-constant: {A: 1.9e+14, b: 0.0, Ea: 1.5792e+04} +- equation: CH + CH2O <=> H + CH2CO # Reaction 123 + rate-constant: {A: 9.46e+13, b: 0.0, Ea: -515.0} +- equation: CH2 + O2 => OH + H + CO # Reaction 124 + rate-constant: {A: 5.0e+12, b: 0.0, Ea: 1500.0} +- equation: CH2 + H2 <=> H + CH3 # Reaction 125 + rate-constant: {A: 5.0e+05, b: 2.0, Ea: 7230.0} +- equation: CH2 + CH3 <=> H + C2H4 # Reaction 126 + rate-constant: {A: 4.0e+13, b: 0.0, Ea: 0.0} +- equation: CH2 + CH4 <=> 2 CH3 # Reaction 127 + rate-constant: {A: 2.46e+06, b: 2.0, Ea: 8270.0} +- equation: CH2 + CO (+ M) <=> CH2CO (+ M) # Reaction 128 + type: falloff + low-P-rate-constant: {A: 2.69e+33, b: -5.11, Ea: 7095.0} + high-P-rate-constant: {A: 8.1e+11, b: 0.5, Ea: 4510.0} + Troe: {A: 0.5907, T3: 275.0, T1: 1226.0, T2: 5185.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: CH2(S) + N2 <=> CH2 + N2 # Reaction 129 + rate-constant: {A: 1.5e+13, b: 0.0, Ea: 600.0} +- equation: CH2(S) + O2 <=> H + OH + CO # Reaction 130 + rate-constant: {A: 2.8e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + O2 <=> CO + H2O # Reaction 131 + rate-constant: {A: 1.2e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + H2 <=> CH3 + H # Reaction 132 + rate-constant: {A: 7.0e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + H2O (+ M) <=> CH3OH (+ M) # Reaction 133 + type: falloff + low-P-rate-constant: {A: 1.88e+38, b: -6.36, Ea: 5040.0} + high-P-rate-constant: {A: 4.82e+17, b: -1.16, Ea: 1145.0} + Troe: {A: 0.6027, T3: 208.0, T1: 3922.0, T2: 1.018e+04} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: CH2(S) + H2O <=> CH2 + H2O # Reaction 134 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + CH3 <=> H + C2H4 # Reaction 135 + rate-constant: {A: 1.2e+13, b: 0.0, Ea: -570.0} +- equation: CH2(S) + CH4 <=> 2 CH3 # Reaction 136 + rate-constant: {A: 1.6e+13, b: 0.0, Ea: -570.0} +- equation: CH2(S) + CO <=> CH2 + CO # Reaction 137 + rate-constant: {A: 9.0e+12, b: 0.0, Ea: 0.0} +- equation: CH2(S) + CO2 <=> CH2 + CO2 # Reaction 138 + rate-constant: {A: 7.0e+12, b: 0.0, Ea: 0.0} +- equation: CH2(S) + CO2 <=> CO + CH2O # Reaction 139 + rate-constant: {A: 1.4e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + C2H6 <=> CH3 + C2H5 # Reaction 140 + rate-constant: {A: 4.0e+13, b: 0.0, Ea: -550.0} +- equation: CH3 + O2 <=> O + CH3O # Reaction 141 + rate-constant: {A: 3.56e+13, b: 0.0, Ea: 3.048e+04} +- equation: CH3 + O2 <=> OH + CH2O # Reaction 142 + rate-constant: {A: 2.31e+12, b: 0.0, Ea: 2.0315e+04} +- equation: CH3 + H2O2 <=> HO2 + CH4 # Reaction 143 + rate-constant: {A: 2.45e+04, b: 2.47, Ea: 5180.0} +- equation: 2 CH3 (+ M) <=> C2H6 (+ M) # Reaction 144 + type: falloff + low-P-rate-constant: {A: 3.4e+41, b: -7.03, Ea: 2762.0} + high-P-rate-constant: {A: 6.77e+16, b: -1.18, Ea: 654.0} + Troe: {A: 0.619, T3: 73.2, T1: 1180.0, T2: 9999.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: 2 CH3 <=> H + C2H5 # Reaction 145 + rate-constant: {A: 6.84e+12, b: 0.1, Ea: 1.06e+04} +- equation: CH3 + HCO <=> CH4 + CO # Reaction 146 + rate-constant: {A: 2.648e+13, b: 0.0, Ea: 0.0} +- equation: CH3 + CH2O <=> HCO + CH4 # Reaction 147 + rate-constant: {A: 3320.0, b: 2.81, Ea: 5860.0} +- equation: CH3 + CH3OH <=> CH2OH + CH4 # Reaction 148 + rate-constant: {A: 3.0e+07, b: 1.5, Ea: 9940.0} +- equation: CH3 + CH3OH <=> CH3O + CH4 # Reaction 149 + rate-constant: {A: 1.0e+07, b: 1.5, Ea: 9940.0} +- equation: CH3 + C2H4 <=> C2H3 + CH4 # Reaction 150 + rate-constant: {A: 2.27e+05, b: 2.0, Ea: 9200.0} +- equation: CH3 + C2H6 <=> C2H5 + CH4 # Reaction 151 + rate-constant: {A: 6.14e+06, b: 1.74, Ea: 1.045e+04} +- equation: HCO + H2O <=> H + CO + H2O # Reaction 152 + rate-constant: {A: 1.5e+18, b: -1.0, Ea: 1.7e+04} +- equation: HCO + M <=> H + CO + M # Reaction 153 + type: three-body + rate-constant: {A: 1.87e+17, b: -1.0, Ea: 1.7e+04} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 0.0, CH4: 2.0, C2H6: 3.0} +- equation: HCO + O2 <=> HO2 + CO # Reaction 154 + rate-constant: {A: 1.345e+13, b: 0.0, Ea: 400.0} +- equation: CH2OH + O2 <=> HO2 + CH2O # Reaction 155 + rate-constant: {A: 1.8e+13, b: 0.0, Ea: 900.0} +- equation: CH3O + O2 <=> HO2 + CH2O # Reaction 156 + rate-constant: {A: 4.28e-13, b: 7.6, Ea: -3530.0} +- equation: C2H3 + O2 <=> HCO + CH2O # Reaction 157 + rate-constant: {A: 4.58e+16, b: -1.39, Ea: 1015.0} +- equation: C2H4 (+ M) <=> H2 + C2H2 (+ M) # Reaction 158 + type: falloff + low-P-rate-constant: {A: 1.58e+51, b: -9.3, Ea: 9.78e+04} + high-P-rate-constant: {A: 8.0e+12, b: 0.44, Ea: 8.677e+04} + Troe: {A: 0.7345, T3: 180.0, T1: 1035.0, T2: 5417.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: C2H5 + O2 <=> HO2 + C2H4 # Reaction 159 + rate-constant: {A: 8.4e+11, b: 0.0, Ea: 3875.0} +- equation: HCCO + O2 <=> OH + 2 CO # Reaction 160 + rate-constant: {A: 3.2e+12, b: 0.0, Ea: 854.0} +- equation: O + CH3 => H + H2 + CO # Reaction 161 + rate-constant: {A: 3.37e+13, b: 0.0, Ea: 0.0} +- equation: O + C2H4 <=> H + CH2CHO # Reaction 162 + rate-constant: {A: 6.7e+06, b: 1.83, Ea: 220.0} +- equation: OH + HO2 <=> O2 + H2O # Reaction 163 + rate-constant: {A: 5.0e+15, b: 0.0, Ea: 1.733e+04} + duplicate: true +- equation: OH + CH3 => H2 + CH2O # Reaction 164 + rate-constant: {A: 8.0e+09, b: 0.5, Ea: -1755.0} +- equation: CH + H2 (+ M) <=> CH3 (+ M) # Reaction 165 + type: falloff + low-P-rate-constant: {A: 4.82e+25, b: -2.8, Ea: 590.0} + high-P-rate-constant: {A: 1.97e+12, b: 0.43, Ea: -370.0} + Troe: {A: 0.578, T3: 122.0, T1: 2535.0, T2: 9365.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: CH2 + O2 => 2 H + CO2 # Reaction 166 + rate-constant: {A: 5.8e+12, b: 0.0, Ea: 1500.0} +- equation: CH2 + O2 <=> O + CH2O # Reaction 167 + rate-constant: {A: 2.4e+12, b: 0.0, Ea: 1500.0} +- equation: CH2(S) + H2O => H2 + CH2O # Reaction 168 + rate-constant: {A: 6.82e+10, b: 0.25, Ea: -935.0} +- equation: C2H3 + O2 <=> O + CH2CHO # Reaction 169 + rate-constant: {A: 3.03e+11, b: 0.29, Ea: 11.0} +- equation: C2H3 + O2 <=> HO2 + C2H2 # Reaction 170 + rate-constant: {A: 1.337e+06, b: 1.61, Ea: -384.0} +- equation: H + CH2CO (+ M) <=> CH2CHO (+ M) # Reaction 171 + type: falloff + low-P-rate-constant: {A: 1.012e+42, b: -7.63, Ea: 3854.0} + high-P-rate-constant: {A: 4.865e+11, b: 0.422, Ea: -1755.0} + Troe: {A: 0.465, T3: 201.0, T1: 1773.0, T2: 5333.0} + efficiencies: {CO2: 2.0, CO: 1.5, H2: 2.0, H2O: 6.0, CH4: 2.0, C2H6: 3.0} +- equation: O + CH2CHO => H + CH2 + CO2 # Reaction 172 + rate-constant: {A: 1.5e+14, b: 0.0, Ea: 0.0} +- equation: O2 + CH2CHO => OH + CO + CH2O # Reaction 173 + rate-constant: {A: 1.81e+10, b: 0.0, Ea: 0.0} +- equation: O2 + CH2CHO => OH + 2 HCO # Reaction 174 + rate-constant: {A: 2.35e+10, b: 0.0, Ea: 0.0} +- equation: H + CH2CHO <=> CH3 + HCO # Reaction 175 + rate-constant: {A: 2.2e+13, b: 0.0, Ea: 0.0} +- equation: H + CH2CHO <=> CH2CO + H2 # Reaction 176 + rate-constant: {A: 1.1e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH2CHO <=> H2O + CH2CO # Reaction 177 + rate-constant: {A: 1.2e+13, b: 0.0, Ea: 0.0} diff --git a/samples/python/AVBP/inputs/Lu_ARC.cti b/samples/python/AVBP/inputs/Lu_ARC.cti new file mode 100755 index 00000000000..d31c4b10100 --- /dev/null +++ b/samples/python/AVBP/inputs/Lu_ARC.cti @@ -0,0 +1,1338 @@ +#--------------------------------------------------------------------------- +# CTI File converted from Solution Object +#--------------------------------------------------------------------------- +units(length='cm', time='s', quantity='mol', act_energy='cal/mol') + +ideal_gas(name = "gas", + elements = "N O H C", + species = """H2 H O O2 OH H2O HO2 H2O2 CH3 CH4 CO CO2 CH2O + CH3OH C2H2 C2H4 C2H6 CH2CO N2""", +# species_qss = """ C CH CH2 CH2(S) HCO CH2OH CH3O C2H3 C2H5 +# HCCO CH2CHO """, + reactions = "all", + kinetics = "custom", + initial_state = state(temperature = 3.000000E+02, pressure= 1.013250E+05) ) +#------------------------------------------------------------------------------- +# Species data +#------------------------------------------------------------------------------- + +species(name='H2', + atoms='H:2', + thermo=(NASA([200.00, 1000.00], + [ 2.34433112E+00, 7.98052075E-03, -1.94781510E-05, + 2.01572094E-08, -7.37611761E-12, -9.17935173E+02, + 6.83010238E-01]), + NASA([1000.00, 3500.00], + [ 3.33727920E+00, -4.94024731E-05, 4.99456778E-07, + -1.79566394E-10, 2.00255376E-14, -9.50158922E+02, + -3.20502331E+00])), + transport=gas_transport(geom='linear', + diam=2.92, + well_depth=38.0, + polar=0.79, + rot_relax=280.0), + note=u'TPIS78') + +species(name='H', + atoms='H:1', + thermo=(NASA([200.00, 1000.00], + [ 2.50000000E+00, 7.05332819E-13, -1.99591964E-15, + 2.30081632E-18, -9.27732332E-22, 2.54736599E+04, + -4.46682853E-01]), + NASA([1000.00, 3500.00], + [ 2.50000001E+00, -2.30842973E-11, 1.61561948E-14, + -4.73515235E-18, 4.98197357E-22, 2.54736599E+04, + -4.46682914E-01])), + transport=gas_transport(geom='atom', + diam=2.05, + well_depth=145.0), + note=u'L7/88') + +species(name='O', + atoms='O:1', + thermo=(NASA([200.00, 1000.00], + [ 3.16826710E+00, -3.27931884E-03, 6.64306396E-06, + -6.12806624E-09, 2.11265971E-12, 2.91222592E+04, + 2.05193346E+00]), + NASA([1000.00, 3500.00], + [ 2.56942078E+00, -8.59741137E-05, 4.19484589E-08, + -1.00177799E-11, 1.22833691E-15, 2.92175791E+04, + 4.78433864E+00])), + transport=gas_transport(geom='atom', + diam=2.75, + well_depth=80.0), + note=u'L1/90') + +species(name='O2', + atoms='O:2', + thermo=(NASA([200.00, 1000.00], + [ 3.78245636E+00, -2.99673416E-03, 9.84730201E-06, + -9.68129509E-09, 3.24372837E-12, -1.06394356E+03, + 3.65767573E+00]), + NASA([1000.00, 3500.00], + [ 3.28253784E+00, 1.48308754E-03, -7.57966669E-07, + 2.09470555E-10, -2.16717794E-14, -1.08845772E+03, + 5.45323129E+00])), + transport=gas_transport(geom='linear', + diam=3.458, + well_depth=107.4, + polar=1.6, + rot_relax=3.8), + note=u'TPIS89') + +species(name='OH', + atoms='H:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 3.99201543E+00, -2.40131752E-03, 4.61793841E-06, + -3.88113333E-09, 1.36411470E-12, 3.61508056E+03, + -1.03925458E-01]), + NASA([1000.00, 3500.00], + [ 3.09288767E+00, 5.48429716E-04, 1.26505228E-07, + -8.79461556E-11, 1.17412376E-14, 3.85865700E+03, + 4.47669610E+00])), + transport=gas_transport(geom='linear', + diam=2.75, + well_depth=80.0), + note='RUS78') + +species(name='H2O', + atoms='H:2 O:1', + thermo=(NASA([200.00, 1000.00], + [ 4.19864056E+00, -2.03643410E-03, 6.52040211E-06, + -5.48797062E-09, 1.77197817E-12, -3.02937267E+04, + -8.49032208E-01]), + NASA([1000.00, 3500.00], + [ 3.03399249E+00, 2.17691804E-03, -1.64072518E-07, + -9.70419870E-11, 1.68200992E-14, -3.00042971E+04, + 4.96677010E+00])), + transport=gas_transport(geom='nonlinear', + diam=2.605, + well_depth=572.4, + dipole=1.844, + rot_relax=4.0), + note='L8/89') + +species(name='HO2', + atoms='H:1 O:2', + thermo=(NASA([200.00, 1000.00], + [ 4.30179801E+00, -4.74912051E-03, 2.11582891E-05, + -2.42763894E-08, 9.29225124E-12, 2.94808040E+02, + 3.71666245E+00]), + NASA([1000.00, 3500.00], + [ 4.01721090E+00, 2.23982013E-03, -6.33658150E-07, + 1.14246370E-10, -1.07908535E-14, 1.11856713E+02, + 3.78510215E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.458, + well_depth=107.4, + rot_relax=1.0), + note='L5/89') + +species(name='H2O2', + atoms='H:2 O:2', + thermo=(NASA([200.00, 1000.00], + [ 4.27611269E+00, -5.42822417E-04, 1.67335701E-05, + -2.15770813E-08, 8.62454363E-12, -1.77025821E+04, + 3.43505074E+00]), + NASA([1000.00, 3500.00], + [ 4.16500285E+00, 4.90831694E-03, -1.90139225E-06, + 3.71185986E-10, -2.87908305E-14, -1.78617877E+04, + 2.91615662E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.458, + well_depth=107.4, + rot_relax=3.8), + note='L7/88') + +species(name='C', + atoms='C:1', + thermo=(NASA([200.00, 1000.00], + [ 2.55423955E+00, -3.21537724E-04, 7.33792245E-07, + -7.32234889E-10, 2.66521446E-13, 8.54438832E+04, + 4.53130848E+00]), + NASA([1000.00, 3500.00], + [ 2.49266888E+00, 4.79889284E-05, -7.24335020E-08, + 3.74291029E-11, -4.87277893E-15, 8.54512953E+04, + 4.80150373E+00])), + transport=gas_transport(geom='atom', + diam=3.298, + well_depth=71.4), + note='L11/88') + +species(name='CH', + atoms='H:1 C:1', + thermo=(NASA([200.00, 1000.00], + [ 3.48981665E+00, 3.23835541E-04, -1.68899065E-06, + 3.16217327E-09, -1.40609067E-12, 7.07972934E+04, + 2.08401108E+00]), + NASA([1000.00, 3500.00], + [ 2.87846473E+00, 9.70913681E-04, 1.44445655E-07, + -1.30687849E-10, 1.76079383E-14, 7.10124364E+04, + 5.48497999E+00])), + transport=gas_transport(geom='linear', + diam=2.75, + well_depth=80.0), + note='TPIS79') + +species(name='CH2', + atoms='H:2 C:1', + thermo=(NASA([200.00, 1000.00], + [ 3.76267867E+00, 9.68872143E-04, 2.79489841E-06, + -3.85091153E-09, 1.68741719E-12, 4.60040401E+04, + 1.56253185E+00]), + NASA([1000.00, 3500.00], + [ 2.87410113E+00, 3.65639292E-03, -1.40894597E-06, + 2.60179549E-10, -1.87727567E-14, 4.62636040E+04, + 6.17119324E+00])), + transport=gas_transport(geom='linear', + diam=3.8, + well_depth=144.0), + note='LS/93') + +species(name='CH2(S)', + atoms='H:2 C:1', + thermo=(NASA([200.00, 1000.00], + [ 4.19860411E+00, -2.36661419E-03, 8.23296220E-06, + -6.68815981E-09, 1.94314737E-12, 5.04968163E+04, + -7.69118967E-01]), + NASA([1000.00, 3500.00], + [ 2.29203842E+00, 4.65588637E-03, -2.01191947E-06, + 4.17906000E-10, -3.39716365E-14, 5.09259997E+04, + 8.62650169E+00])), + transport=gas_transport(geom='linear', + diam=3.8, + well_depth=144.0), + note='LS/93') + +species(name='CH3', + atoms='H:3 C:1', + thermo=(NASA([200.00, 1000.00], + [ 3.67359040E+00, 2.01095175E-03, 5.73021856E-06, + -6.87117425E-09, 2.54385734E-12, 1.64449988E+04, + 1.60456433E+00]), + NASA([1000.00, 3500.00], + [ 2.28571772E+00, 7.23990037E-03, -2.98714348E-06, + 5.95684644E-10, -4.67154394E-14, 1.67755843E+04, + 8.48007179E+00])), + transport=gas_transport(geom='linear', + diam=3.8, + well_depth=144.0), + note='L11/89') + +species(name='CH4', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01])), + transport=gas_transport(geom='nonlinear', + diam=3.746, + well_depth=141.4, + polar=2.6, + rot_relax=13.0), + note='L8/88') + +species(name='CO', + atoms='C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 3.57953347E+00, -6.10353680E-04, 1.01681433E-06, + 9.07005884E-10, -9.04424499E-13, -1.43440860E+04, + 3.50840928E+00]), + NASA([1000.00, 3500.00], + [ 2.71518561E+00, 2.06252743E-03, -9.98825771E-07, + 2.30053008E-10, -2.03647716E-14, -1.41518724E+04, + 7.81868772E+00])), + transport=gas_transport(geom='linear', + diam=3.65, + well_depth=98.1, + polar=1.95, + rot_relax=1.8), + note='TPIS79') + +species(name='CO2', + atoms='C:1 O:2', + thermo=(NASA([200.00, 1000.00], + [ 2.35677352E+00, 8.98459677E-03, -7.12356269E-06, + 2.45919022E-09, -1.43699548E-13, -4.83719697E+04, + 9.90105222E+00]), + NASA([1000.00, 3500.00], + [ 3.85746029E+00, 4.41437026E-03, -2.21481404E-06, + 5.23490188E-10, -4.72084164E-14, -4.87591660E+04, + 2.27163806E+00])), + transport=gas_transport(geom='linear', + diam=3.763, + well_depth=244.0, + polar=2.65, + rot_relax=2.1), + note='L7/88') + +species(name='HCO', + atoms='H:1 C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 4.22118584E+00, -3.24392532E-03, 1.37799446E-05, + -1.33144093E-08, 4.33768865E-12, 3.83956496E+03, + 3.39437243E+00]), + NASA([1000.00, 3500.00], + [ 2.77217438E+00, 4.95695526E-03, -2.48445613E-06, + 5.89161778E-10, -5.33508711E-14, 4.01191815E+03, + 9.79834492E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.59, + well_depth=498.0), + note='L12/89') + +species(name='CH2O', + atoms='H:2 C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 4.79372315E+00, -9.90833369E-03, 3.73220008E-05, + -3.79285261E-08, 1.31772652E-11, -1.43089567E+04, + 6.02812900E-01]), + NASA([1000.00, 3500.00], + [ 1.76069008E+00, 9.20000082E-03, -4.42258813E-06, + 1.00641212E-09, -8.83855640E-14, -1.39958323E+04, + 1.36563230E+01])), + transport=gas_transport(geom='nonlinear', + diam=3.59, + well_depth=498.0, + rot_relax=2.0), + note='L8/88') + +species(name='CH2OH', + atoms='H:3 C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 3.86388918E+00, 5.59672304E-03, 5.93271791E-06, + -1.04532012E-08, 4.36967278E-12, -3.19391367E+03, + 5.47302243E+00]), + NASA([1000.00, 3500.00], + [ 3.69266569E+00, 8.64576797E-03, -3.75101120E-06, + 7.87234636E-10, -6.48554201E-14, -3.24250627E+03, + 5.81043215E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.69, + well_depth=417.0, + dipole=1.7, + rot_relax=2.0), + note='GUNL93') + +species(name='CH3O', + atoms='H:3 C:1 O:1', + thermo=(NASA([300.00, 1000.00], + [ 2.10620400E+00, 7.21659500E-03, 5.33847200E-06, + -7.37763600E-09, 2.07561000E-12, 9.78601100E+02, + 1.31521770E+01]), + NASA([1000.00, 3000.00], + [ 3.77079900E+00, 7.87149700E-03, -2.65638400E-06, + 3.94443100E-10, -2.11261600E-14, 1.27832520E+02, + 2.92957500E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.69, + well_depth=417.0, + dipole=1.7, + rot_relax=2.0), + note='121686') + +species(name='CH3OH', + atoms='H:4 C:1 O:1', + thermo=(NASA([200.00, 1000.00], + [ 5.71539582E+00, -1.52309129E-02, 6.52441155E-05, + -7.10806889E-08, 2.61352698E-11, -2.56427656E+04, + -1.50409823E+00]), + NASA([1000.00, 3500.00], + [ 1.78970791E+00, 1.40938292E-02, -6.36500835E-06, + 1.38171085E-09, -1.17060220E-13, -2.53748747E+04, + 1.45023623E+01])), + transport=gas_transport(geom='nonlinear', + diam=3.626, + well_depth=481.8, + rot_relax=1.0), + note='L8/88') + +species(name='C2H2', + atoms='H:2 C:2', + thermo=(NASA([200.00, 1000.00], + [ 8.08681094E-01, 2.33615629E-02, -3.55171815E-05, + 2.80152437E-08, -8.50072974E-12, 2.64289807E+04, + 1.39397051E+01]), + NASA([1000.00, 3500.00], + [ 4.14756964E+00, 5.96166664E-03, -2.37294852E-06, + 4.67412171E-10, -3.61235213E-14, 2.59359992E+04, + -1.23028121E+00])), + transport=gas_transport(geom='linear', + diam=4.1, + well_depth=209.0, + rot_relax=2.5), + note='L1/91') + +species(name='C2H3', + atoms='H:3 C:2', + thermo=(NASA([200.00, 1000.00], + [ 3.21246645E+00, 1.51479162E-03, 2.59209412E-05, + -3.57657847E-08, 1.47150873E-11, 3.48598468E+04, + 8.51054025E+00]), + NASA([1000.00, 3500.00], + [ 3.01672400E+00, 1.03302292E-02, -4.68082349E-06, + 1.01763288E-09, -8.62607041E-14, 3.46128739E+04, + 7.78732378E+00])), + transport=gas_transport(geom='nonlinear', + diam=4.1, + well_depth=209.0, + rot_relax=1.0), + note='L2/92') + +species(name='C2H4', + atoms='H:4 C:2', + thermo=(NASA([200.00, 1000.00], + [ 3.95920148E+00, -7.57052247E-03, 5.70990292E-05, + -6.91588753E-08, 2.69884373E-11, 5.08977593E+03, + 4.09733096E+00]), + NASA([1000.00, 3500.00], + [ 2.03611116E+00, 1.46454151E-02, -6.71077915E-06, + 1.47222923E-09, -1.25706061E-13, 4.93988614E+03, + 1.03053693E+01])), + transport=gas_transport(geom='nonlinear', + diam=3.971, + well_depth=280.8, + rot_relax=1.5), + note='L1/91') + +species(name='C2H5', + atoms='H:5 C:2', + thermo=(NASA([200.00, 1000.00], + [ 4.30646568E+00, -4.18658892E-03, 4.97142807E-05, + -5.99126606E-08, 2.30509004E-11, 1.28416265E+04, + 4.70720924E+00]), + NASA([1000.00, 3500.00], + [ 1.95465642E+00, 1.73972722E-02, -7.98206668E-06, + 1.75217689E-09, -1.49641576E-13, 1.28575200E+04, + 1.34624343E+01])), + transport=gas_transport(geom='nonlinear', + diam=4.302, + well_depth=252.3, + rot_relax=1.5), + note='L12/92') + +species(name='C2H6', + atoms='H:6 C:2', + thermo=(NASA([200.00, 1000.00], + [ 4.29142492E+00, -5.50154270E-03, 5.99438288E-05, + -7.08466285E-08, 2.68685771E-11, -1.15222055E+04, + 2.66682316E+00]), + NASA([1000.00, 3500.00], + [ 1.07188150E+00, 2.16852677E-02, -1.00256067E-05, + 2.21412001E-09, -1.90002890E-13, -1.14263932E+04, + 1.51156107E+01])), + transport=gas_transport(geom='nonlinear', + diam=4.302, + well_depth=252.3, + rot_relax=1.5), + note='L8/88') + +species(name='HCCO', + atoms='H:1 C:2 O:1', + thermo=(NASA([300.00, 1000.00], + [ 2.25172140E+00, 1.76550210E-02, -2.37291010E-05, + 1.72757590E-08, -5.06648110E-12, 2.00594490E+04, + 1.24904170E+01]), + NASA([1000.00, 4000.00], + [ 5.62820580E+00, 4.08534010E-03, -1.59345470E-06, + 2.86260520E-10, -1.94078320E-14, 1.93272150E+04, + -3.93025950E+00])), + transport=gas_transport(geom='nonlinear', + diam=2.5, + well_depth=150.0, + rot_relax=1.0), + note='SRIC91') + +species(name='CH2CO', + atoms='H:2 C:2 O:1', + thermo=(NASA([200.00, 1000.00], + [ 2.13583630E+00, 1.81188721E-02, -1.73947474E-05, + 9.34397568E-09, -2.01457615E-12, -7.04291804E+03, + 1.22156480E+01]), + NASA([1000.00, 3500.00], + [ 4.51129732E+00, 9.00359745E-03, -4.16939635E-06, + 9.23345882E-10, -7.94838201E-14, -7.55105311E+03, + 6.32247205E-01])), + transport=gas_transport(geom='nonlinear', + diam=3.97, + well_depth=436.0, + rot_relax=2.0), + note='L5/90') + +species(name='CH2CHO', + atoms='H:3 C:2 O:1', + thermo=(NASA([300.00, 1000.00], + [ 3.40906200E+00, 1.07385740E-02, 1.89149200E-06, + -7.15858300E-09, 2.86738500E-12, 1.52147660E+03, + 9.55829000E+00]), + NASA([1000.00, 5000.00], + [ 5.97567000E+00, 8.13059100E-03, -2.74362400E-06, + 4.07030400E-10, -2.17601700E-14, 4.90321800E+02, + -5.04525100E+00])), + transport=gas_transport(geom='nonlinear', + diam=3.97, + well_depth=436.0, + rot_relax=2.0), + note='SAND86') + +species(name='N2', + atoms='N:2', + thermo=(NASA([300.00, 1000.00], + [ 3.29867700E+00, 1.40824040E-03, -3.96322200E-06, + 5.64151500E-09, -2.44485400E-12, -1.02089990E+03, + 3.95037200E+00]), + NASA([1000.00, 5000.00], + [ 2.92664000E+00, 1.48797680E-03, -5.68476000E-07, + 1.00970380E-10, -6.75335100E-15, -9.22797700E+02, + 5.98052800E+00])), + transport=gas_transport(geom='linear', + diam=3.621, + well_depth=97.53, + polar=1.76, + rot_relax=4.0), + note='121286') + +#------------------------------------------------------------------------------- +# Reaction data +#------------------------------------------------------------------------------- + +# Dummy Reaction +reaction('O + H2 <=> H + OH', [0.0, 0.0, 0.0]) + +## Reaction 1 +#three_body_reaction('2 O + M <=> O2 + M', [1.200000e+17, -1.0, 0.0], +# efficiencies='CO2:3.6 CO:1.75 H2:2.4 H2O:15.4 CH4:2.0 C2H6:3.0') + +## Reaction 2 +#three_body_reaction('O + H + M <=> OH + M', [5.000000e+17, -1.0, 0.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0') + +## Reaction 3 +#reaction('O + H2 <=> H + OH', [3.870000e+04, 2.7, 6260.0]) +## R4 +# + +## Reaction 4 +#reaction('O + HO2 <=> OH + O2', [2.000000e+13, 0.0, 0.0]) +## R5 +# +## Reaction 5 +#reaction('O + H2O2 <=> OH + HO2', [9.630000e+06, 2.0, 4000.0]) +## R6 +# +## Reaction 6 +#reaction('O + CH <=> H + CO', [5.700000e+13, 0.0, 0.0]) +## R7 +# +## Reaction 7 +#reaction('O + CH2 <=> H + HCO', [8.000000e+13, 0.0, 0.0]) +## R8 +# +## Reaction 8 +#reaction('O + CH2(S) <=> H2 + CO', [1.500000e+13, 0.0, 0.0]) +## R9 +# +## Reaction 9 +#reaction('O + CH2(S) <=> H + HCO', [1.500000e+13, 0.0, 0.0]) +## R10 +# +## Reaction 10 +#reaction('O + CH3 <=> H + CH2O', [5.060000e+13, 0.0, 0.0]) +## R11 +# +## Reaction 11 +#reaction('O + CH4 <=> OH + CH3', [1.020000e+09, 1.5, 8600.0]) +## R12 +# +## Reaction 12 +#falloff_reaction('O + CO (+ M) <=> CO2 (+ M)', +# kf=[1.800000e+10, 0.0, 2385.0], +# kf0=[6.020000e+14, 0.0, 3000.0], +# efficiencies='CO2:3.5 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0 O2:6.0') +## R13 +# +## Reaction 13 +#reaction('O + HCO <=> OH + CO', [3.000000e+13, 0.0, 0.0]) +## R14 +# +## Reaction 14 +#reaction('O + HCO <=> H + CO2', [3.000000e+13, 0.0, 0.0]) +## R15 +# +## Reaction 15 +#reaction('O + CH2O <=> OH + HCO', [3.900000e+13, 0.0, 3540.0]) +## R16 +# +## Reaction 16 +#reaction('O + CH2OH <=> OH + CH2O', [1.000000e+13, 0.0, 0.0]) +## R17 +# +## Reaction 17 +#reaction('O + CH3O <=> OH + CH2O', [1.000000e+13, 0.0, 0.0]) +## R18 +# +## Reaction 18 +#reaction('O + CH3OH <=> OH + CH2OH', [3.880000e+05, 2.5, 3100.0]) +## R19 +# +## Reaction 19 +#reaction('O + CH3OH <=> OH + CH3O', [1.300000e+05, 2.5, 5000.0]) +## R20 +# +## Reaction 20 +#reaction('O + C2H2 <=> H + HCCO', [1.350000e+07, 2.0, 1900.0]) +## R21 +# +## Reaction 21 +#reaction('O + C2H2 <=> CO + CH2', [6.940000e+06, 2.0, 1900.0]) +## R22 +# +## Reaction 22 +#reaction('O + C2H3 <=> H + CH2CO', [3.000000e+13, 0.0, 0.0]) +## R23 +# +## Reaction 23 +#reaction('O + C2H4 <=> CH3 + HCO', [1.250000e+07, 1.83, 220.0]) +## R24 +# +## Reaction 24 +#reaction('O + C2H5 <=> CH3 + CH2O', [2.240000e+13, 0.0, 0.0]) +## R25 +# +## Reaction 25 +#reaction('O + C2H6 <=> OH + C2H5', [8.980000e+07, 1.92, 5690.0]) +## R26 +# +## Reaction 26 +#reaction('O + HCCO <=> H + 2 CO', [1.000000e+14, 0.0, 0.0]) +## R27 +# +## Reaction 27 +#reaction('O + CH2CO <=> OH + HCCO', [1.000000e+13, 0.0, 8000.0]) +## R28 +# +## Reaction 28 +#reaction('O + CH2CO <=> CH2 + CO2', [1.750000e+12, 0.0, 1350.0]) +## R29 +# +## Reaction 29 +#reaction('O2 + CO <=> O + CO2', [2.500000e+12, 0.0, 47800.0]) +## R30 +# +## Reaction 30 +#reaction('O2 + CH2O <=> HO2 + HCO', [1.000000e+14, 0.0, 40000.0]) +## R31 +# +## Reaction 31 +#three_body_reaction('H + O2 + M <=> HO2 + M', [2.800000e+18, -0.86, 0.0], +# efficiencies='CO2:1.5 CO:0.75 H2O:0.0 C2H6:1.5 N2:0.0 O2:0.0') +## R32 +# +## Reaction 32 +#reaction('H + 2 O2 <=> HO2 + O2', [2.080000e+19, -1.24, 0.0]) +## R33 +# +## Reaction 33 +#reaction('H + O2 + H2O <=> HO2 + H2O', [1.126000e+19, -0.76, 0.0]) +## R34 +# +## Reaction 34 +#reaction('H + O2 + N2 <=> HO2 + N2', [2.600000e+19, -1.24, 0.0]) +## R35 +# +## Reaction 35 +#reaction('H + O2 <=> O + OH', [2.650000e+16, -0.6707, 17041.0]) +## R36 +# +## Reaction 36 +#three_body_reaction('2 H + M <=> H2 + M', [1.000000e+18, -1.0, 0.0], +# efficiencies='H2:0.0 C2H6:3.0 H2O:0.0 CO2:0.0 CH4:2.0') +## R37 +# +## Reaction 37 +#reaction('2 H + H2 <=> 2 H2', [9.000000e+16, -0.6, 0.0]) +## R38 +# +## Reaction 38 +#reaction('2 H + H2O <=> H2 + H2O', [6.000000e+19, -1.25, 0.0]) +## R39 +# +## Reaction 39 +#reaction('2 H + CO2 <=> H2 + CO2', [5.500000e+20, -2.0, 0.0]) +## R40 +# +## Reaction 40 +#three_body_reaction('H + OH + M <=> H2O + M', [2.200000e+22, -2.0, 0.0], +# efficiencies='H2:0.73 C2H6:3.0 H2O:3.65 CH4:2.0') +## R41 +# +## Reaction 41 +#reaction('H + HO2 <=> O + H2O', [3.970000e+12, 0.0, 671.0]) +## R42 +# +## Reaction 42 +#reaction('H + HO2 <=> O2 + H2', [4.480000e+13, 0.0, 1068.0]) +## R43 +# +## Reaction 43 +#reaction('H + HO2 <=> 2 OH', [8.400000e+13, 0.0, 635.0]) +## R44 +# +## Reaction 44 +#reaction('H + H2O2 <=> HO2 + H2', [1.210000e+07, 2.0, 5200.0]) +## R45 +# +## Reaction 45 +#reaction('H + H2O2 <=> OH + H2O', [1.000000e+13, 0.0, 3600.0]) +## R46 +# +## Reaction 46 +#reaction('H + CH <=> C + H2', [1.650000e+14, 0.0, 0.0]) +## R47 +# +## Reaction 47 +#falloff_reaction('H + CH2 (+ M) <=> CH3 (+ M)', +# kf=[6.000000e+14, 0.0, 0.0], +# kf0=[1.040000e+26, -2.76, 1600.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.562, T3=91.0, T1=5836.0, T2=8552.0)) +## R48 +# +## Reaction 48 +#reaction('H + CH2(S) <=> CH + H2', [3.000000e+13, 0.0, 0.0]) +## R49 +# +## Reaction 49 +#falloff_reaction('H + CH3 (+ M) <=> CH4 (+ M)', +# kf=[1.390000e+16, -0.534, 536.0], +# kf0=[2.620000e+33, -4.76, 2440.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:3.0 C2H6:3.0', +# falloff=Troe(A=0.783, T3=74.0, T1=2941.0, T2=6964.0)) +## R50 +# +## Reaction 50 +#reaction('H + CH4 <=> CH3 + H2', [6.600000e+08, 1.62, 10840.0]) +## R51 +# +## Reaction 51 +#falloff_reaction('H + HCO (+ M) <=> CH2O (+ M)', +# kf=[1.090000e+12, 0.48, -260.0], +# kf0=[2.470000e+24, -2.57, 425.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.7824, T3=271.0, T1=2755.0, T2=6570.0)) +## R52 +# +## Reaction 52 +#reaction('H + HCO <=> H2 + CO', [7.340000e+13, 0.0, 0.0]) +## R53 +# +## Reaction 53 +#falloff_reaction('H + CH2O (+ M) <=> CH2OH (+ M)', +# kf=[5.400000e+11, 0.454, 3600.0], +# kf0=[1.270000e+32, -4.82, 6530.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.7187, T3=103.0, T1=1291.0, T2=4160.0)) +## R54 +# +## Reaction 54 +#falloff_reaction('H + CH2O (+ M) <=> CH3O (+ M)', +# kf=[5.400000e+11, 0.454, 2600.0], +# kf0=[2.200000e+30, -4.8, 5560.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.758, T3=94.0, T1=1555.0, T2=4200.0)) +## R55 +# +## Reaction 55 +#reaction('H + CH2O <=> HCO + H2', [5.740000e+07, 1.9, 2742.0]) +## R56 +# +## Reaction 56 +#falloff_reaction('H + CH2OH (+ M) <=> CH3OH (+ M)', +# kf=[1.055000e+12, 0.5, 86.0], +# kf0=[4.360000e+31, -4.65, 5080.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.6, T3=100.0, T1=90000.0, T2=10000.0)) +## R57 +# +## Reaction 57 +#reaction('H + CH2OH <=> H2 + CH2O', [2.000000e+13, 0.0, 0.0]) +## R58 +# +## Reaction 58 +#reaction('H + CH2OH <=> OH + CH3', [1.650000e+11, 0.65, -284.0]) +## R59 +# +## Reaction 59 +#reaction('H + CH2OH <=> CH2(S) + H2O', [3.280000e+13, -0.09, 610.0]) +## R60 +# +## Reaction 60 +#falloff_reaction('H + CH3O (+ M) <=> CH3OH (+ M)', +# kf=[2.430000e+12, 0.515, 50.0], +# kf0=[4.660000e+41, -7.44, 14080.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.7, T3=100.0, T1=90000.0, T2=10000.0)) +## R61 +# +## Reaction 61 +#reaction('H + CH3O <=> H + CH2OH', [4.150000e+07, 1.63, 1924.0]) +## R62 +# +## Reaction 62 +#reaction('H + CH3O <=> H2 + CH2O', [2.000000e+13, 0.0, 0.0]) +## R63 +# +## Reaction 63 +#reaction('H + CH3O <=> OH + CH3', [1.500000e+12, 0.5, -110.0]) +## R64 +# +## Reaction 64 +#reaction('H + CH3O <=> CH2(S) + H2O', [2.620000e+14, -0.23, 1070.0]) +## R65 +# +## Reaction 65 +#reaction('H + CH3OH <=> CH2OH + H2', [1.700000e+07, 2.1, 4870.0]) +## R66 +# +## Reaction 66 +#reaction('H + CH3OH <=> CH3O + H2', [4.200000e+06, 2.1, 4870.0]) +## R67 +# +## Reaction 67 +#falloff_reaction('H + C2H2 (+ M) <=> C2H3 (+ M)', +# kf=[5.600000e+12, 0.0, 2400.0], +# kf0=[3.800000e+40, -7.27, 7220.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.7507, T3=98.5, T1=1302.0, T2=4167.0)) +## R68 +# +## Reaction 68 +#falloff_reaction('H + C2H3 (+ M) <=> C2H4 (+ M)', +# kf=[6.080000e+12, 0.27, 280.0], +# kf0=[1.400000e+30, -3.86, 3320.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.782, T3=207.5, T1=2663.0, T2=6095.0)) +## R69 +# +## Reaction 69 +#reaction('H + C2H3 <=> H2 + C2H2', [3.000000e+13, 0.0, 0.0]) +## R70 +# +## Reaction 70 +#falloff_reaction('H + C2H4 (+ M) <=> C2H5 (+ M)', +# kf=[5.400000e+11, 0.454, 1820.0], +# kf0=[6.000000e+41, -7.62, 6970.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.9753, T3=210.0, T1=984.0, T2=4374.0)) +## R71 +# +## Reaction 71 +#reaction('H + C2H4 <=> C2H3 + H2', [1.325000e+06, 2.53, 12240.0]) +## R72 +# +## Reaction 72 +#falloff_reaction('H + C2H5 (+ M) <=> C2H6 (+ M)', +# kf=[5.210000e+17, -0.99, 1580.0], +# kf0=[1.990000e+41, -7.08, 6685.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.8422, T3=125.0, T1=2219.0, T2=6882.0)) +## R73 +# +## Reaction 73 +#reaction('H + C2H5 <=> H2 + C2H4', [2.000000e+12, 0.0, 0.0]) +## R74 +# +## Reaction 74 +#reaction('H + C2H6 <=> C2H5 + H2', [1.150000e+08, 1.9, 7530.0]) +## R75 +# +## Reaction 75 +#reaction('H + HCCO <=> CH2(S) + CO', [1.000000e+14, 0.0, 0.0]) +## R76 +# +## Reaction 76 +#reaction('H + CH2CO <=> HCCO + H2', [5.000000e+13, 0.0, 8000.0]) +## R77 +# +## Reaction 77 +#reaction('H + CH2CO <=> CH3 + CO', [1.130000e+13, 0.0, 3428.0]) +## R78 +# +## Reaction 78 +#falloff_reaction('H2 + CO (+ M) <=> CH2O (+ M)', +# kf=[4.300000e+07, 1.5, 79600.0], +# kf0=[5.070000e+27, -3.42, 84350.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.932, T3=197.0, T1=1540.0, T2=10300.0)) +## R79 +# +## Reaction 79 +#reaction('OH + H2 <=> H + H2O', [2.160000e+08, 1.51, 3430.0]) +## R80 +# +## Reaction 80 +#falloff_reaction('2 OH (+ M) <=> H2O2 (+ M)', +# kf=[7.400000e+13, -0.37, 0.0], +# kf0=[2.300000e+18, -0.9, -1700.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.7346, T3=94.0, T1=1756.0, T2=5182.0)) +## R81 +# +## Reaction 81 +#reaction('2 OH <=> O + H2O', [3.570000e+04, 2.4, -2110.0]) +## R82 +# +## Reaction 82 +#reaction('OH + HO2 <=> O2 + H2O', [1.450000e+13, 0.0, -500.0], +# options='duplicate') +## R83 +# +## Reaction 83 +#reaction('OH + H2O2 <=> HO2 + H2O', [2.000000e+12, 0.0, 427.0], +# options='duplicate') +## R84 +# +## Reaction 84 +#reaction('OH + H2O2 <=> HO2 + H2O', [1.700000e+18, 0.0, 29410.0], +# options='duplicate') +## R85 +# +## Reaction 85 +#reaction('OH + C <=> H + CO', [5.000000e+13, 0.0, 0.0]) +## R86 +# +## Reaction 86 +#reaction('OH + CH <=> H + HCO', [3.000000e+13, 0.0, 0.0]) +## R87 +# +## Reaction 87 +#reaction('OH + CH2 <=> H + CH2O', [2.000000e+13, 0.0, 0.0]) +## R88 +# +## Reaction 88 +#reaction('OH + CH2 <=> CH + H2O', [1.130000e+07, 2.0, 3000.0]) +## R89 +# +## Reaction 89 +#reaction('OH + CH2(S) <=> H + CH2O', [3.000000e+13, 0.0, 0.0]) +## R90 +# +## Reaction 90 +#falloff_reaction('OH + CH3 (+ M) <=> CH3OH (+ M)', +# kf=[2.790000e+18, -1.43, 1330.0], +# kf0=[4.000000e+36, -5.92, 3140.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.412, T3=195.0, T1=5900.0, T2=6394.0)) +## R91 +# +## Reaction 91 +#reaction('OH + CH3 <=> CH2 + H2O', [5.600000e+07, 1.6, 5420.0]) +## R92 +# +## Reaction 92 +#reaction('OH + CH3 <=> CH2(S) + H2O', [6.440000e+17, -1.34, 1417.0]) +## R93 +# +## Reaction 93 +#reaction('OH + CH4 <=> CH3 + H2O', [1.000000e+08, 1.6, 3120.0]) +## R94 +# +## Reaction 94 +#reaction('OH + CO <=> H + CO2', [4.760000e+07, 1.228, 70.0]) +## R95 +# +## Reaction 95 +#reaction('OH + HCO <=> H2O + CO', [5.000000e+13, 0.0, 0.0]) +## R96 +# +## Reaction 96 +#reaction('OH + CH2O <=> HCO + H2O', [3.430000e+09, 1.18, -447.0]) +## R97 +# +## Reaction 97 +#reaction('OH + CH2OH <=> H2O + CH2O', [5.000000e+12, 0.0, 0.0]) +## R98 +# +## Reaction 98 +#reaction('OH + CH3O <=> H2O + CH2O', [5.000000e+12, 0.0, 0.0]) +## R99 +# +## Reaction 99 +#reaction('OH + CH3OH <=> CH2OH + H2O', [1.440000e+06, 2.0, -840.0]) +## R100 +# +## Reaction 100 +#reaction('OH + CH3OH <=> CH3O + H2O', [6.300000e+06, 2.0, 1500.0]) +## R101 +# +## Reaction 101 +#reaction('OH + C2H2 <=> H + CH2CO', [2.180000e-04, 4.5, -1000.0]) +## R102 +# +## Reaction 102 +#reaction('OH + C2H2 <=> CH3 + CO', [4.830000e-04, 4.0, -2000.0]) +## R103 +# +## Reaction 103 +#reaction('OH + C2H3 <=> H2O + C2H2', [5.000000e+12, 0.0, 0.0]) +## R104 +# +## Reaction 104 +#reaction('OH + C2H4 <=> C2H3 + H2O', [3.600000e+06, 2.0, 2500.0]) +## R105 +# +## Reaction 105 +#reaction('OH + C2H6 <=> C2H5 + H2O', [3.540000e+06, 2.12, 870.0]) +## R106 +# +## Reaction 106 +#reaction('OH + CH2CO <=> HCCO + H2O', [7.500000e+12, 0.0, 2000.0]) +## R107 +# +## Reaction 107 +#reaction('2 HO2 <=> O2 + H2O2', [1.300000e+11, 0.0, -1630.0], +# options='duplicate') +## R108 +# +## Reaction 108 +#reaction('2 HO2 <=> O2 + H2O2', [4.200000e+14, 0.0, 12000.0], +# options='duplicate') +## R109 +# +## Reaction 109 +#reaction('HO2 + CH2 <=> OH + CH2O', [2.000000e+13, 0.0, 0.0]) +## R110 +# +## Reaction 110 +#reaction('HO2 + CH3 <=> O2 + CH4', [1.000000e+12, 0.0, 0.0]) +## R111 +# +## Reaction 111 +#reaction('HO2 + CH3 <=> OH + CH3O', [3.780000e+13, 0.0, 0.0]) +## R112 +# +## Reaction 112 +#reaction('HO2 + CO <=> OH + CO2', [1.500000e+14, 0.0, 23600.0]) +## R113 +# +## Reaction 113 +#reaction('HO2 + CH2O <=> HCO + H2O2', [5.600000e+06, 2.0, 12000.0]) +## R114 +# +## Reaction 114 +#reaction('C + O2 <=> O + CO', [5.800000e+13, 0.0, 576.0]) +## R115 +# +## Reaction 115 +#reaction('C + CH3 <=> H + C2H2', [5.000000e+13, 0.0, 0.0]) +## R116 +# +## Reaction 116 +#reaction('CH + O2 <=> O + HCO', [6.710000e+13, 0.0, 0.0]) +## R117 +# +## Reaction 117 +#reaction('CH + H2 <=> H + CH2', [1.080000e+14, 0.0, 3110.0]) +## R118 +# +## Reaction 118 +#reaction('CH + H2O <=> H + CH2O', [5.710000e+12, 0.0, -755.0]) +## R119 +# +## Reaction 119 +## reaction('CH + CH2 <=> H + C2H2', [4.000000e+13, 0.0, 0.0]) +## R120 +# +## Reaction 120 +#reaction('CH + CH3 <=> H + C2H3', [3.000000e+13, 0.0, 0.0]) +## R121 +# +## Reaction 121 +#reaction('CH + CH4 <=> H + C2H4', [6.000000e+13, 0.0, 0.0]) +## R122 +# +## Reaction 122 +#falloff_reaction('CH + CO (+ M) <=> HCCO (+ M)', +# kf=[5.000000e+13, 0.0, 0.0], +# kf0=[2.690000e+28, -3.74, 1936.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.5757, T3=237.0, T1=1652.0, T2=5069.0)) +## R123 +# +## Reaction 123 +#reaction('CH + CO2 <=> HCO + CO', [1.900000e+14, 0.0, 15792.0]) +## R124 +# +## Reaction 124 +#reaction('CH + CH2O <=> H + CH2CO', [9.460000e+13, 0.0, -515.0]) +## R125 +# +## Reaction 125 +## reaction('CH + HCCO <=> CO + C2H2', [5.000000e+13, 0.0, 0.0]) +## R126 +# +## Reaction 126 +#reaction('CH2 + O2 => OH + H + CO', [5.000000e+12, 0.0, 1500.0]) +## R127 +# +## Reaction 127 +#reaction('CH2 + H2 <=> H + CH3', [5.000000e+05, 2.0, 7230.0]) +## R128 +# +## Reaction 128 +## reaction('2 CH2 <=> H2 + C2H2', [1.600000e+15, 0.0, 11944.0]) +## R129 +# +## Reaction 129 +#reaction('CH2 + CH3 <=> H + C2H4', [4.000000e+13, 0.0, 0.0]) +## R130 +# +## Reaction 130 +#reaction('CH2 + CH4 <=> 2 CH3', [2.460000e+06, 2.0, 8270.0]) +## R131 +# +## Reaction 131 +#falloff_reaction('CH2 + CO (+ M) <=> CH2CO (+ M)', +# kf=[8.100000e+11, 0.5, 4510.0], +# kf0=[2.690000e+33, -5.11, 7095.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.5907, T3=275.0, T1=1226.0, T2=5185.0)) +## R132 +# +## Reaction 132 +## reaction('CH2 + HCCO <=> C2H3 + CO', [3.000000e+13, 0.0, 0.0]) +## R133 +# +## Reaction 133 +#reaction('CH2(S) + N2 <=> CH2 + N2', [1.500000e+13, 0.0, 600.0]) +## R134 +# +## Reaction 134 +#reaction('CH2(S) + O2 <=> H + OH + CO', [2.800000e+13, 0.0, 0.0]) +## R135 +# +## Reaction 135 +#reaction('CH2(S) + O2 <=> CO + H2O', [1.200000e+13, 0.0, 0.0]) +## R136 +# +## Reaction 136 +#reaction('CH2(S) + H2 <=> CH3 + H', [7.000000e+13, 0.0, 0.0]) +## R137 +# +## Reaction 137 +#falloff_reaction('CH2(S) + H2O (+ M) <=> CH3OH (+ M)', +# kf=[4.820000e+17, -1.16, 1145.0], +# kf0=[1.880000e+38, -6.36, 5040.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.6027, T3=208.0, T1=3922.0, T2=10180.0)) +## R138 +# +## Reaction 138 +#reaction('CH2(S) + H2O <=> CH2 + H2O', [3.000000e+13, 0.0, 0.0]) +## R139 +# +## Reaction 139 +#reaction('CH2(S) + CH3 <=> H + C2H4', [1.200000e+13, 0.0, -570.0]) +## R140 +# +## Reaction 140 +#reaction('CH2(S) + CH4 <=> 2 CH3', [1.600000e+13, 0.0, -570.0]) +## R141 +# +## Reaction 141 +#reaction('CH2(S) + CO <=> CH2 + CO', [9.000000e+12, 0.0, 0.0]) +## R142 +# +## Reaction 142 +#reaction('CH2(S) + CO2 <=> CH2 + CO2', [7.000000e+12, 0.0, 0.0]) +## R143 +# +## Reaction 143 +#reaction('CH2(S) + CO2 <=> CO + CH2O', [1.400000e+13, 0.0, 0.0]) +## R144 +# +## Reaction 144 +#reaction('CH2(S) + C2H6 <=> CH3 + C2H5', [4.000000e+13, 0.0, -550.0]) +## R145 +# +## Reaction 145 +#reaction('CH3 + O2 <=> O + CH3O', [3.560000e+13, 0.0, 30480.0]) +## R146 +# +## Reaction 146 +#reaction('CH3 + O2 <=> OH + CH2O', [2.310000e+12, 0.0, 20315.0]) +## R147 +# +## Reaction 147 +#reaction('CH3 + H2O2 <=> HO2 + CH4', [2.450000e+04, 2.47, 5180.0]) +## R148 +# +## Reaction 148 +#falloff_reaction('2 CH3 (+ M) <=> C2H6 (+ M)', +# kf=[6.770000e+16, -1.18, 654.0], +# kf0=[3.400000e+41, -7.03, 2762.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.619, T3=73.2, T1=1180.0, T2=9999.0)) +## R149 +# +## Reaction 149 +#reaction('2 CH3 <=> H + C2H5', [6.840000e+12, 0.1, 10600.0]) +## R150 +# +## Reaction 150 +#reaction('CH3 + HCO <=> CH4 + CO', [2.648000e+13, 0.0, 0.0]) +## R151 +# +## Reaction 151 +#reaction('CH3 + CH2O <=> HCO + CH4', [3.320000e+03, 2.81, 5860.0]) +## R152 +# +## Reaction 152 +#reaction('CH3 + CH3OH <=> CH2OH + CH4', [3.000000e+07, 1.5, 9940.0]) +## R153 +# +## Reaction 153 +#reaction('CH3 + CH3OH <=> CH3O + CH4', [1.000000e+07, 1.5, 9940.0]) +## R154 +# +## Reaction 154 +#reaction('CH3 + C2H4 <=> C2H3 + CH4', [2.270000e+05, 2.0, 9200.0]) +## R155 +# +## Reaction 155 +#reaction('CH3 + C2H6 <=> C2H5 + CH4', [6.140000e+06, 1.74, 10450.0]) +## R156 +# +## Reaction 156 +#reaction('HCO + H2O <=> H + CO + H2O', [1.500000e+18, -1.0, 17000.0]) +## R157 +# +## Reaction 157 +#three_body_reaction('HCO + M <=> H + CO + M', [1.870000e+17, -1.0, 17000.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:0.0 CH4:2.0 C2H6:3.0') +## R158 +# +## Reaction 158 +#reaction('HCO + O2 <=> HO2 + CO', [1.345000e+13, 0.0, 400.0]) +## R159 +# +## Reaction 159 +#reaction('CH2OH + O2 <=> HO2 + CH2O', [1.800000e+13, 0.0, 900.0]) +## R160 +# +## Reaction 160 +#reaction('CH3O + O2 <=> HO2 + CH2O', [4.280000e-13, 7.6, -3530.0]) +## R161 +# +## Reaction 161 +#reaction('C2H3 + O2 <=> HCO + CH2O', [4.580000e+16, -1.39, 1015.0]) +## R162 +# +## Reaction 162 +#falloff_reaction('C2H4 (+ M) <=> H2 + C2H2 (+ M)', +# kf=[8.000000e+12, 0.44, 86770.0], +# kf0=[1.580000e+51, -9.3, 97800.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.7345, T3=180.0, T1=1035.0, T2=5417.0)) +## R163 +# +## Reaction 163 +#reaction('C2H5 + O2 <=> HO2 + C2H4', [8.400000e+11, 0.0, 3875.0]) +## R164 +# +## Reaction 164 +#reaction('HCCO + O2 <=> OH + 2 CO', [3.200000e+12, 0.0, 854.0]) +## R165 +# +## Reaction 165 +## reaction('2 HCCO <=> 2 CO + C2H2', [1.000000e+13, 0.0, 0.0]) +## R166 +# +## Reaction 166 +#reaction('O + CH3 => H + H2 + CO', [3.370000e+13, 0.0, 0.0]) +## R167 +# +## Reaction 167 +#reaction('O + C2H4 <=> H + CH2CHO', [6.700000e+06, 1.83, 220.0]) +## R168 +# +## Reaction 168 +#reaction('OH + HO2 <=> O2 + H2O', [5.000000e+15, 0.0, 17330.0], +# options='duplicate') +## R169 +# +## Reaction 169 +#reaction('OH + CH3 => H2 + CH2O', [8.000000e+09, 0.5, -1755.0]) +## R170 +# +## Reaction 170 +#falloff_reaction('CH + H2 (+ M) <=> CH3 (+ M)', +# kf=[1.970000e+12, 0.43, -370.0], +# kf0=[4.820000e+25, -2.8, 590.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.578, T3=122.0, T1=2535.0, T2=9365.0)) +## R171 +# +## Reaction 171 +#reaction('CH2 + O2 => 2 H + CO2', [5.800000e+12, 0.0, 1500.0]) +## R172 +# +## Reaction 172 +#reaction('CH2 + O2 <=> O + CH2O', [2.400000e+12, 0.0, 1500.0]) +## R173 +# +## Reaction 173 +## reaction('CH2 + CH2 => 2 H + C2H2', [2.000000e+14, 0.0, 10989.0]) +## R174 +# +## Reaction 174 +#reaction('CH2(S) + H2O => H2 + CH2O', [6.820000e+10, 0.25, -935.0]) +## R175 +# +## Reaction 175 +#reaction('C2H3 + O2 <=> O + CH2CHO', [3.030000e+11, 0.29, 11.0]) +## R176 +# +## Reaction 176 +#reaction('C2H3 + O2 <=> HO2 + C2H2', [1.337000e+06, 1.61, -384.0]) +## R177 +# +## Reaction 177 +#falloff_reaction('H + CH2CO (+ M) <=> CH2CHO (+ M)', +# kf=[4.865000e+11, 0.422, -1755.0], +# kf0=[1.012000e+42, -7.63, 3854.0], +# efficiencies='CO2:2.0 CO:1.5 H2:2.0 H2O:6.0 CH4:2.0 C2H6:3.0', +# falloff=Troe(A=0.465, T3=201.0, T1=1773.0, T2=5333.0)) +## R178 +# +## Reaction 178 +#reaction('O + CH2CHO => H + CH2 + CO2', [1.500000e+14, 0.0, 0.0]) +## R179 +# +## Reaction 179 +#reaction('O2 + CH2CHO => OH + CO + CH2O', [1.810000e+10, 0.0, 0.0]) +## R180 +# +## Reaction 180 +#reaction('O2 + CH2CHO => OH + 2 HCO', [2.350000e+10, 0.0, 0.0]) +## R181 +# +## Reaction 181 +#reaction('H + CH2CHO <=> CH3 + HCO', [2.200000e+13, 0.0, 0.0]) +## R182 +# +## Reaction 182 +#reaction('H + CH2CHO <=> CH2CO + H2', [1.100000e+13, 0.0, 0.0]) +## R183 +# +## Reaction 183 +#reaction('OH + CH2CHO <=> H2O + CH2CO', [1.200000e+13, 0.0, 0.0]) +## R184 +# +## Reaction 184 +## reaction('OH + CH2CHO <=> HCO + CH2OH', [3.010000e+13, 0.0, 0.0]) +# \ No newline at end of file diff --git a/samples/python/AVBP/inputs/Lu_ARC.f90 b/samples/python/AVBP/inputs/Lu_ARC.f90 new file mode 100755 index 00000000000..355e516069d --- /dev/null +++ b/samples/python/AVBP/inputs/Lu_ARC.f90 @@ -0,0 +1,2317 @@ +! +! A 15-step reduced mechanism based on GRI3.0 +! +! by Tianfeng Lu +! Email: tlu@engr.uconn.edu +! +! Reference: +! Tianfeng Lu and Chung K. Law, +! "A criterion based on computational singular perturbation +! for the identification of quasi steady state species: +! A reduced mechanism for methane oxidation with NO chemistry," +! Combustion and Flame, Vol.154 No.4 pp.761�774, 2008. +! +! SUBROUTINE CKWYP (P, T, Y, ICKWRK, RCKWRK, WDOT) + SUBROUTINE customkinetics(P, T, Y, WDOT) + IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! +! DIMENSION ICKWRK(*), RCKWRK(*), WDOT(*), Y(*) + PARAMETER (RU=8.314510D7, PATM=1.01325D6, SMALL = 1.D-200) + DIMENSION WDOT(19), Y(19) + DIMENSION TN(5), ROP(184), CTB(184) + DIMENSION RF(184), RB(184), RKLOW(22), XQ(11), C(19) + DIMENSION EQK(184), SMH(30), EG(30) + + ! Correction for units compatibility in Cantera + P = P*10.D0 +! +! CALL YTCP(P, T, Y, C) +! CALL RATT(T, RF, RB, RKLOW) +! CALL RATX(T, C, RF, RB, RKLOW) +! CALL QSSA(RF, RB, XQ) +! CALL RDOT(RF, RB, WDOT) +! END +! +! ----------------------------------------------------------------------! +! +! SUBROUTINE YTCP (P, T, Y, C) +! IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! DIMENSION Y(*), C(*) +! +! +! convert Y to ! + + C(1) = Y(1)*4.96046521D-1 + C(2) = Y(2)*9.92093043D-1 + C(3) = Y(3)*6.25023433D-2 + C(4) = Y(4)*3.12511716D-2 + C(5) = Y(5)*5.87980383D-2 + C(6) = Y(6)*5.55082499D-2 + C(7) = Y(7)*3.02968146D-2 + C(8) = Y(8)*2.93990192D-2 + C(9) = Y(9)*6.65112065D-2 + C(10) = Y(10)*6.23323639D-2 + C(11) = Y(11)*3.57008335D-2 + C(12) = Y(12)*2.27221341D-2 + C(13) = Y(13)*3.33039255D-2 + C(14) = Y(14)*3.12086189D-2 + C(15) = Y(15)*3.84050525D-2 + C(16) = Y(16)*3.56453112D-2 + C(17) = Y(17)*3.32556033D-2 + C(18) = Y(18)*2.37882046D-2 + C(19) = Y(19)*3.56972032D-2 +! + SUM = 0.0 + DO K = 1, 19 + SUM = SUM + C(K) + ENDDO + SUM = P/(SUM*T*8.314510D7) +! + DO K = 1, 19 + C(K) = MAX(C(K),SMALL) * SUM + ENDDO +! END +! +! ----------------------------------------------------------------------! +! +! +! forward reaction rates +! +! SUBROUTINE RATT (T, RF, RB, RKLOW) +! IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! DIMENSION RF(*), RB(*), RKLOW(*), EQK(184), SMH(30), EG(30) +! + ALOGT = LOG(T) + TI = 1.0D0/T + TI2 = TI*TI +! + RF(1) = 1.2D17*TI + RF(2) = 5.D17*TI + RF(3) = EXP(1.05635949D1 +2.7D0*ALOGT -3.15013634D3*TI) + RF(4) = 2.D13 + RF(5) = EXP(1.60803938D1 +2.D0*ALOGT -2.01286667D3*TI) + RF(6) = 5.7D13 + RF(7) = 8.D13 + RF(8) = 1.5D13 + RF(9) = 1.5D13 + RF(10) = 5.06D13 + RF(11) = EXP(2.07430685D1 +1.5D0*ALOGT -4.32766334D3*TI) + RF(12) = EXP(2.36136376D1 -1.20017175D3*TI) + RF(13) = 3.D13 + RF(14) = 3.D13 + RF(15) = EXP(3.12945828D1 -1.781387D3*TI) + RF(16) = 1.D13 + RF(17) = 1.D13 + RF(18) = EXP(1.28687606D1 +2.5D0*ALOGT -1.55997167D3*TI) + RF(19) = EXP(1.17752897D1 +2.5D0*ALOGT -2.51608334D3*TI) + TMP = EXP(2.D0*ALOGT -9.56111669D2*TI ) + RF(20) = 1.35D7 * TMP + RF(21) = 6.94D6 * TMP + RF(22) = 3.D13 + TMP = EXP(1.83D0*ALOGT -1.10707667D2*TI ) + RF(23) = 1.25D7 * TMP + RF(167) = 6.7D6 * TMP + RF(24) = 2.24D13 + RF(25) = EXP(1.83130955D1 +1.92D0*ALOGT -2.86330284D3*TI) + RF(26) = 1.D14 + TMP = EXP(-4.02573334D3*TI) + RF(27) = 1.D13 * TMP + RF(76) = 5.D13 * TMP + RF(28) = EXP(2.81906369D1 -6.79342501D2*TI) + RF(29) = EXP(2.85473118D1 -2.40537567D4*TI) + RF(30) = EXP(3.22361913D1 -2.01286667D4*TI) + RF(31) = EXP(4.24761511D1 -8.6D-1*ALOGT) + TMP = EXP(-1.24D0*ALOGT) + RF(32) = 2.08D19 * TMP + RF(34) = 2.6D19 * TMP + RF(33) = EXP(4.38677883D1 -7.6D-1*ALOGT) + RF(35) = EXP(3.78159211D1 -6.707D-1*ALOGT -8.57531523D3*TI) + RF(36) = 1.D18*TI + RF(37) = EXP(3.90385861D1 -6.D-1*ALOGT) + RF(38) = EXP(4.55408762D1 -1.25D0*ALOGT) + RF(39) = 5.5D20*TI2 + RF(40) = 2.2D22*TI2 + RF(41) = EXP(2.90097872D1 -3.37658384D2*TI) + RF(42) = EXP(3.14332293D1 -5.37435401D2*TI) + RF(43) = EXP(3.20618379D1 -3.19542584D2*TI) + RF(44) = EXP(1.6308716D1 +2.D0*ALOGT -2.61672667D3*TI) + RF(45) = EXP(2.99336062D1 -1.81158D3*TI) + RF(46) = 1.65D14 + RF(47) = 6.D14 + RF(48) = 3.D13 + RF(49) = EXP(3.71706652D1 -5.34D-1*ALOGT -2.69724134D2*TI) + RF(50) = EXP(2.03077504D1 +1.62D0*ALOGT -5.45486868D3*TI) + RF(51) = EXP(2.77171988D1 +4.8D-1*ALOGT +1.30836334D2*TI) + RF(52) = 7.34D13 + RF(53) = EXP(2.7014835D1 +4.54D-1*ALOGT -1.81158D3*TI) + RF(54) = EXP(2.7014835D1 +4.54D-1*ALOGT -1.30836334D3*TI) + RF(55) = EXP(1.78655549D1 +1.9D0*ALOGT -1.3798201D3*TI) + RF(56) = EXP(2.76845619D1 +5.D-1*ALOGT -4.32766334D1*TI) + RF(57) = 2.D13 + RF(58) = EXP(2.58292113D1 +6.5D-1*ALOGT +1.42913534D2*TI) + RF(59) = EXP(3.11214496D1 -9.D-2*ALOGT -3.06962167D2*TI) + RF(60) = EXP(2.85189124D1 +5.15D-1*ALOGT -2.51608334D1*TI) + RF(61) = EXP(1.7541204D1 +1.63D0*ALOGT -9.68188869D2*TI) + RF(62) = 2.D13 + RF(63) = EXP(2.80364862D1 +5.D-1*ALOGT +5.53538334D1*TI) + RF(64) = EXP(3.31993656D1 -2.3D-1*ALOGT -5.38441834D2*TI) + TMP = EXP(2.1D0*ALOGT -2.45066517D3*TI ) + RF(65) = 1.7D7 * TMP + RF(66) = 4.2D6 * TMP + RF(67) = EXP(2.93537877D1 -1.20772D3*TI) + RF(68) = EXP(2.94360258D1 +2.7D-1*ALOGT -1.40900667D2*TI) + RF(69) = 3.D13 + RF(70) = EXP(2.7014835D1 +4.54D-1*ALOGT -9.15854335D2*TI) + RF(71) = EXP(1.4096923D1 +2.53D0*ALOGT -6.15937201D3*TI) + RF(72) = EXP(4.07945264D1 -9.9D-1*ALOGT -7.95082335D2*TI) + RF(73) = 2.D12 + RF(74) = EXP(1.85604427D1 +1.9D0*ALOGT -3.78922151D3*TI) + RF(75) = 1.D14 + RF(77) = EXP(3.00558238D1 -1.72502674D3*TI) + RF(78) = EXP(1.75767107D1 +1.5D0*ALOGT -4.00560467D4*TI) + RF(79) = EXP(1.9190789D1 +1.51D0*ALOGT -1.72603317D3*TI) + RF(80) = EXP(3.19350862D1 -3.7D-1*ALOGT) + RF(81) = EXP(1.0482906D1 +2.4D0*ALOGT +1.06178717D3*TI) + RF(82) = EXP(3.03051698D1 +2.51608334D2*TI) + RF(83) = EXP(2.83241683D1 -2.14873517D2*TI) + RF(84) = EXP(4.19771599D1 -1.47996022D4*TI) + RF(85) = 5.D13 + RF(86) = 3.D13 + RF(87) = 2.D13 + RF(88) = EXP(1.62403133D1 +2.D0*ALOGT -1.50965D3*TI) + RF(89) = 3.D13 + RF(90) = EXP(4.24725733D1 -1.43D0*ALOGT -6.69278168D2*TI) + RF(91) = EXP(1.78408622D1 +1.6D0*ALOGT -2.72743434D3*TI) + RF(92) = EXP(4.10064751D1 -1.34D0*ALOGT -7.13058018D2*TI) + RF(93) = EXP(1.84206807D1 +1.6D0*ALOGT -1.570036D3*TI) + RF(94) = EXP(1.76783433D1 +1.228D0*ALOGT -3.52251667D1*TI) + RF(95) = 5.D13 + RF(96) = EXP(2.19558261D1 +1.18D0*ALOGT +2.2493785D2*TI) + RF(97) = 5.D12 + RF(98) = 5.D12 + RF(99) = EXP(1.41801537D1 +2.D0*ALOGT +4.22702001D2*TI) + RF(100) = EXP(1.56560602D1 +2.D0*ALOGT -7.54825001D2*TI) + RF(101) = EXP(-8.4310155D0 +4.5D0*ALOGT +5.03216668D2*TI) + RF(102) = EXP(-7.6354939D0 +4.D0*ALOGT +1.00643334D3*TI) + RF(103) = 5.D12 + RF(104) = EXP(1.50964444D1 +2.D0*ALOGT -1.25804167D3*TI) + RF(105) = EXP(1.50796373D1 +2.12D0*ALOGT -4.37798501D2*TI) + RF(106) = EXP(2.96459241D1 -1.00643334D3*TI) + RF(107) = EXP(2.55908003D1 +8.20243168D2*TI) + RF(108) = EXP(3.36712758D1 -6.03860001D3*TI) + RF(109) = 2.D13 + RF(110) = 1.D12 + RF(111) = 3.78D13 + RF(112) = EXP(3.26416564D1 -1.18759134D4*TI) + RF(113) = EXP(1.55382772D1 +2.D0*ALOGT -6.03860001D3*TI) + RF(114) = EXP(3.16914641D1 -2.89852801D2*TI) + RF(115) = 5.D13 + RF(116) = 6.71D13 + RF(117) = EXP(3.23131523D1 -1.56500384D3*TI) + RF(118) = EXP(2.93732401D1 +3.79928584D2*TI) + RF(119) = 4.D13 + RF(120) = 3.D13 + RF(121) = 6.D13 + RF(122) = 5.D13 + RF(123) = EXP(3.28780452D1 -7.94679762D3*TI) + RF(124) = EXP(3.21806786D1 +2.59156584D2*TI) + RF(125) = 5.D13 + TMP = EXP(-7.54825001D2*TI) + RF(126) = 5.D12 * TMP + RF(171) = 5.8D12 * TMP + RF(172) = 2.4D12 * TMP + RF(127) = EXP(1.31223634D1 +2.D0*ALOGT -3.63825651D3*TI) + RF(128) = EXP(3.500878D1 -6.01041988D3*TI) + RF(129) = 4.D13 + RF(130) = EXP(1.47156719D1 +2.D0*ALOGT -4.16160184D3*TI) + RF(131) = EXP(2.74203001D1 +5.D-1*ALOGT -2.26950717D3*TI) + RF(132) = 3.D13 + RF(133) = EXP(3.03390713D1 -3.01930001D2*TI) + RF(134) = 2.8D13 + RF(135) = 1.2D13 + RF(136) = 7.D13 + RF(137) = EXP(4.07167205D1 -1.16D0*ALOGT -5.76183084D2*TI) + RF(138) = 3.D13 + TMP = EXP(2.86833501D2*TI) + RF(139) = 1.2D13 * TMP + RF(140) = 1.6D13 * TMP + RF(141) = 9.D12 + RF(142) = 7.D12 + RF(143) = 1.4D13 + RF(144) = EXP(3.13199006D1 +2.76769167D2*TI) + RF(145) = EXP(3.12033668D1 -1.5338044D4*TI) + RF(146) = EXP(2.84682686D1 -1.02228466D4*TI) + RF(147) = EXP(1.01064284D1 +2.47D0*ALOGT -2.60666234D3*TI) + RF(148) = EXP(3.87538626D1 -1.18D0*ALOGT -3.29103701D2*TI) + RF(149) = EXP(2.95538088D1 +1.D-1*ALOGT -5.33409668D3*TI) + RF(150) = 2.648D13 + RF(151) = EXP(8.10772006D0 +2.81D0*ALOGT -2.94884967D3*TI) + TMP = EXP(1.5D0*ALOGT -5.00197368D3*TI) + RF(152) = 3.D7 * TMP + RF(153) = 1.D7 * TMP + RF(154) = EXP(1.23327053D1 +2.D0*ALOGT -4.62959334D3*TI) + RF(155) = EXP(1.56303353D1 +1.74D0*ALOGT -5.25861418D3*TI) + TMP = EXP(-1.D0*ALOGT -8.55468335D3*TI) + RF(156) = 1.5D18 * TMP + RF(157) = 1.87D17 * TMP + RF(158) = EXP(3.02300002D1 -2.01286667D2*TI) + RF(159) = EXP(3.05213929D1 -4.52895001D2*TI) + RF(160) = EXP(-2.84796532D1 +7.6D0*ALOGT +1.77635484D3*TI) + RF(161) = EXP(3.83630605D1 -1.39D0*ALOGT -5.10764918D2*TI) + RF(162) = EXP(2.97104627D1 +4.4D-1*ALOGT -4.36641103D4*TI) + RF(163) = EXP(2.74566677D1 -1.94996459D3*TI) + RF(164) = EXP(2.87941719D1 -4.29747034D2*TI) + RF(165) = 1.D13 + RF(166) = 3.37D13 + RF(168) = EXP(3.61482143D1 -8.72074485D3*TI) + RF(169) = EXP(2.28027074D1 +5.D-1*ALOGT +8.83145252D2*TI) + RF(170) = EXP(2.83090547D1 +4.3D-1*ALOGT +1.86190167D2*TI) + RF(173) = EXP(3.29293385D1 -5.52984796D3*TI) + RF(174) = EXP(2.49457104D1 +2.5D-1*ALOGT +4.70507584D2*TI) + RF(175) = EXP(2.64369986D1 +2.9D-1*ALOGT -5.53538334D0*TI) + RF(176) = EXP(1.41059389D1 +1.61D0*ALOGT +1.932352D2*TI) + RF(177) = EXP(2.69105027D1 +4.22D-1*ALOGT +8.83145252D2*TI) + RF(178) = 1.5D14 + RF(179) = 1.81D10 + RF(180) = 2.35D10 + RF(181) = 2.2D13 + RF(182) = 1.1D13 + RF(183) = 1.2D13 + RF(184) = 3.01D13 +! +! +! thermal data +! +! + TLOG = LOG(T) + TI = 1.0D0/T + TN(1) = TLOG - 1.0 + TN(2) = T + TN(3) = TN(2)*T + TN(4) = TN(3)*T + TN(5) = TN(4)*T +! + IF (T .GT. 1.D3) THEN +! + SMH(1) = -3.20502331D+00 + 9.50158922D+02*TI & + + 3.33727920D+00*TN(1) - 2.47012365D-05*TN(2) & + + 8.32427963D-08*TN(3) - 1.49638662D-11*TN(4) & + + 1.00127688D-15*TN(5) + SMH(2) = -4.46682914D-01 - 2.54736599D+04*TI & + + 2.50000001D+00*TN(1) - 1.15421486D-11*TN(2) & + + 2.69269913D-15*TN(3) - 3.94596029D-19*TN(4) & + + 2.49098679D-23*TN(5) + SMH(3) = 4.78433864D+00 - 2.92175791D+04*TI & + + 2.56942078D+00*TN(1) - 4.29870569D-05*TN(2) & + + 6.99140982D-09*TN(3) - 8.34814992D-13*TN(4) & + + 6.14168455D-17*TN(5) + SMH(4) = 5.45323129D+00 + 1.08845772D+03*TI & + + 3.28253784D+00*TN(1) + 7.41543770D-04*TN(2) & + - 1.26327778D-07*TN(3) + 1.74558796D-11*TN(4) & + - 1.08358897D-15*TN(5) + SMH(5) = 4.47669610D+00 - 3.85865700D+03*TI & + + 3.09288767D+00*TN(1) + 2.74214858D-04*TN(2) & + + 2.10842047D-08*TN(3) - 7.32884630D-12*TN(4) & + + 5.87061880D-16*TN(5) + SMH(6) = 4.96677010D+00 + 3.00042971D+04*TI & + + 3.03399249D+00*TN(1) + 1.08845902D-03*TN(2) & + - 2.73454197D-08*TN(3) - 8.08683225D-12*TN(4) & + + 8.41004960D-16*TN(5) + SMH(7) = 3.78510215D+00 - 1.11856713D+02*TI & + + 4.01721090D+00*TN(1) + 1.11991007D-03*TN(2) & + - 1.05609692D-07*TN(3) + 9.52053083D-12*TN(4) & + - 5.39542675D-16*TN(5) + SMH(8) = 2.91615662D+00 + 1.78617877D+04*TI & + + 4.16500285D+00*TN(1) + 2.45415847D-03*TN(2) & + - 3.16898708D-07*TN(3) + 3.09321655D-11*TN(4) & + - 1.43954153D-15*TN(5) + SMH(9) = 4.80150373D+00 - 8.54512953D+04*TI & + + 2.49266888D+00*TN(1) + 2.39944642D-05*TN(2) & + - 1.20722503D-08*TN(3) + 3.11909191D-12*TN(4) & + - 2.43638946D-16*TN(5) + SMH(10) = 5.48497999D+00 - 7.10124364D+04*TI & + + 2.87846473D+00*TN(1) + 4.85456841D-04*TN(2) & + + 2.40742758D-08*TN(3) - 1.08906541D-11*TN(4) & + + 8.80396915D-16*TN(5) + SMH(11) = 6.17119324D+00 - 4.62636040D+04*TI & + + 2.87410113D+00*TN(1) + 1.82819646D-03*TN(2) & + - 2.34824328D-07*TN(3) + 2.16816291D-11*TN(4) & + - 9.38637835D-16*TN(5) + SMH(12) = 8.62650169D+00 - 5.09259997D+04*TI & + + 2.29203842D+00*TN(1) + 2.32794319D-03*TN(2) & + - 3.35319912D-07*TN(3) + 3.48255000D-11*TN(4) & + - 1.69858183D-15*TN(5) + SMH(13) = 8.48007179D+00 - 1.67755843D+04*TI & + + 2.28571772D+00*TN(1) + 3.61995018D-03*TN(2) & + - 4.97857247D-07*TN(3) + 4.96403870D-11*TN(4) & + - 2.33577197D-15*TN(5) + SMH(14) = 1.84373180D+01 + 9.46834459D+03*TI & + + 7.48514950D-02*TN(1) + 6.69547335D-03*TN(2) & + - 9.55476348D-07*TN(3) + 1.01910446D-10*TN(4) & + - 5.09076150D-15*TN(5) + SMH(15) = 7.81868772D+00 + 1.41518724D+04*TI & + + 2.71518561D+00*TN(1) + 1.03126372D-03*TN(2) & + - 1.66470962D-07*TN(3) + 1.91710840D-11*TN(4) & + - 1.01823858D-15*TN(5) + SMH(16) = 2.27163806D+00 + 4.87591660D+04*TI & + + 3.85746029D+00*TN(1) + 2.20718513D-03*TN(2) & + - 3.69135673D-07*TN(3) + 4.36241823D-11*TN(4) & + - 2.36042082D-15*TN(5) + SMH(17) = 9.79834492D+00 - 4.01191815D+03*TI & + + 2.77217438D+00*TN(1) + 2.47847763D-03*TN(2) & + - 4.14076022D-07*TN(3) + 4.90968148D-11*TN(4) & + - 2.66754356D-15*TN(5) + SMH(18) = 1.36563230D+01 + 1.39958323D+04*TI & + + 1.76069008D+00*TN(1) + 4.60000041D-03*TN(2) & + - 7.37098022D-07*TN(3) + 8.38676767D-11*TN(4) & + - 4.41927820D-15*TN(5) + SMH(19) = 5.81043215D+00 + 3.24250627D+03*TI & + + 3.69266569D+00*TN(1) + 4.32288399D-03*TN(2) & + - 6.25168533D-07*TN(3) + 6.56028863D-11*TN(4) & + - 3.24277101D-15*TN(5) + SMH(20) = 2.92957500D+00 - 1.27832520D+02*TI & + + 3.77079900D+00*TN(1) + 3.93574850D-03*TN(2) & + - 4.42730667D-07*TN(3) + 3.28702583D-11*TN(4) & + - 1.05630800D-15*TN(5) + + SMH(21) = 1.45023623D+01 + 2.53748747D+04*TI & + + 1.78970791D+00*TN(1) + 7.04691460D-03*TN(2) & + - 1.06083472D-06*TN(3) + 1.15142571D-10*TN(4) & + - 5.85301100D-15*TN(5) + SMH(22) = -1.23028121D+00 - 2.59359992D+04*TI & + + 4.14756964D+00*TN(1) + 2.98083332D-03*TN(2) & + - 3.95491420D-07*TN(3) + 3.89510143D-11*TN(4) & + - 1.80617607D-15*TN(5) + SMH(23) = 7.78732378D+00 - 3.46128739D+04*TI & + + 3.01672400D+00*TN(1) + 5.16511460D-03*TN(2) & + - 7.80137248D-07*TN(3) + 8.48027400D-11*TN(4) & + - 4.31303520D-15*TN(5) + SMH(24) = 1.03053693D+01 - 4.93988614D+03*TI & + + 2.03611116D+00*TN(1) + 7.32270755D-03*TN(2) & + - 1.11846319D-06*TN(3) + 1.22685769D-10*TN(4) & + - 6.28530305D-15*TN(5) + SMH(25) = 1.34624343D+01 - 1.28575200D+04*TI & + + 1.95465642D+00*TN(1) + 8.69863610D-03*TN(2) & + - 1.33034445D-06*TN(3) + 1.46014741D-10*TN(4) & + - 7.48207880D-15*TN(5) + SMH(26) = 1.51156107D+01 + 1.14263932D+04*TI & + + 1.07188150D+00*TN(1) + 1.08426339D-02*TN(2) & + - 1.67093445D-06*TN(3) + 1.84510001D-10*TN(4) & + - 9.50014450D-15*TN(5) + SMH(27) = -3.93025950D+00 - 1.93272150D+04*TI & + + 5.62820580D+00*TN(1) + 2.04267005D-03*TN(2) & + - 2.65575783D-07*TN(3) + 2.38550433D-11*TN(4) & + - 9.70391600D-16*TN(5) + SMH(28) = 6.32247205D-01 + 7.55105311D+03*TI & + + 4.51129732D+00*TN(1) + 4.50179872D-03*TN(2) & + - 6.94899392D-07*TN(3) + 7.69454902D-11*TN(4) & + - 3.97419100D-15*TN(5) + SMH(29) = -5.04525100D+00 - 4.90321800D+02*TI & + + 5.97567000D+00*TN(1) + 4.06529550D-03*TN(2) & + - 4.57270667D-07*TN(3) + 3.39192000D-11*TN(4) & + - 1.08800850D-15*TN(5) +! + ELSE +! + SMH(1) = 6.83010238D-01 + 9.17935173D+02*TI & + + 2.34433112D+00*TN(1) + 3.99026037D-03*TN(2) & + - 3.24635850D-06*TN(3) + 1.67976745D-09*TN(4) & + - 3.68805881D-13*TN(5) + SMH(2) = -4.46682853D-01 - 2.54736599D+04*TI & + + 2.50000000D+00*TN(1) + 3.52666409D-13*TN(2) & + - 3.32653273D-16*TN(3) + 1.91734693D-19*TN(4) & + - 4.63866166D-23*TN(5) + SMH(3) = 2.05193346D+00 - 2.91222592D+04*TI & + + 3.16826710D+00*TN(1) - 1.63965942D-03*TN(2) & + + 1.10717733D-06*TN(3) - 5.10672187D-10*TN(4) & + + 1.05632986D-13*TN(5) + SMH(4) = 3.65767573D+00 + 1.06394356D+03*TI & + + 3.78245636D+00*TN(1) - 1.49836708D-03*TN(2) & + + 1.64121700D-06*TN(3) - 8.06774591D-10*TN(4) & + + 1.62186419D-13*TN(5) + SMH(5) = -1.03925458D-01 - 3.61508056D+03*TI & + + 3.99201543D+00*TN(1) - 1.20065876D-03*TN(2) & + + 7.69656402D-07*TN(3) - 3.23427778D-10*TN(4) & + + 6.82057350D-14*TN(5) + SMH(6) = -8.49032208D-01 + 3.02937267D+04*TI & + + 4.19864056D+00*TN(1) - 1.01821705D-03*TN(2) & + + 1.08673369D-06*TN(3) - 4.57330885D-10*TN(4) & + + 8.85989085D-14*TN(5) + SMH(7) = 3.71666245D+00 - 2.94808040D+02*TI & + + 4.30179801D+00*TN(1) - 2.37456025D-03*TN(2) & + + 3.52638152D-06*TN(3) - 2.02303245D-09*TN(4) & + + 4.64612562D-13*TN(5) + SMH(8) = 3.43505074D+00 + 1.77025821D+04*TI & + + 4.27611269D+00*TN(1) - 2.71411208D-04*TN(2) & + + 2.78892835D-06*TN(3) - 1.79809011D-09*TN(4) & + + 4.31227182D-13*TN(5) + SMH(9) = 4.53130848D+00 - 8.54438832D+04*TI & + + 2.55423955D+00*TN(1) - 1.60768862D-04*TN(2) & + + 1.22298708D-07*TN(3) - 6.10195741D-11*TN(4) & + + 1.33260723D-14*TN(5) + SMH(10) = 2.08401108D+00 - 7.07972934D+04*TI & + + 3.48981665D+00*TN(1) + 1.61917771D-04*TN(2) & + - 2.81498442D-07*TN(3) + 2.63514439D-10*TN(4) & + - 7.03045335D-14*TN(5) + SMH(11) = 1.56253185D+00 - 4.60040401D+04*TI & + + 3.76267867D+00*TN(1) + 4.84436072D-04*TN(2) & + + 4.65816402D-07*TN(3) - 3.20909294D-10*TN(4) & + + 8.43708595D-14*TN(5) + SMH(12) = -7.69118967D-01 - 5.04968163D+04*TI & + + 4.19860411D+00*TN(1) - 1.18330710D-03*TN(2) & + + 1.37216037D-06*TN(3) - 5.57346651D-10*TN(4) & + + 9.71573685D-14*TN(5) + SMH(13) = 1.60456433D+00 - 1.64449988D+04*TI & + + 3.67359040D+00*TN(1) + 1.00547588D-03*TN(2) & + + 9.55036427D-07*TN(3) - 5.72597854D-10*TN(4) & + + 1.27192867D-13*TN(5) + SMH(14) = -4.64130376D+00 + 1.02466476D+04*TI & + + 5.14987613D+00*TN(1) - 6.83548940D-03*TN(2) & + + 8.19667665D-06*TN(3) - 4.03952522D-09*TN(4) & + + 8.33469780D-13*TN(5) + SMH(15) = 3.50840928D+00 + 1.43440860D+04*TI & + + 3.57953347D+00*TN(1) - 3.05176840D-04*TN(2) & + + 1.69469055D-07*TN(3) + 7.55838237D-11*TN(4) & + - 4.52212249D-14*TN(5) + SMH(16) = 9.90105222D+00 + 4.83719697D+04*TI & + + 2.35677352D+00*TN(1) + 4.49229839D-03*TN(2) & + - 1.18726045D-06*TN(3) + 2.04932518D-10*TN(4) & + - 7.18497740D-15*TN(5) + SMH(17) = 3.39437243D+00 - 3.83956496D+03*TI & + + 4.22118584D+00*TN(1) - 1.62196266D-03*TN(2) & + + 2.29665743D-06*TN(3) - 1.10953411D-09*TN(4) & + + 2.16884433D-13*TN(5) + SMH(18) = 6.02812900D-01 + 1.43089567D+04*TI & + + 4.79372315D+00*TN(1) - 4.95416685D-03*TN(2) & + + 6.22033347D-06*TN(3) - 3.16071051D-09*TN(4) & + + 6.58863260D-13*TN(5) + SMH(19) = 5.47302243D+00 + 3.19391367D+03*TI & + + 3.86388918D+00*TN(1) + 2.79836152D-03*TN(2) & + + 9.88786318D-07*TN(3) - 8.71100100D-10*TN(4) & + + 2.18483639D-13*TN(5) + SMH(20) = 1.31521770D+01 - 9.78601100D+02*TI & + + 2.10620400D+00*TN(1) + 3.60829750D-03*TN(2) & + + 8.89745333D-07*TN(3) - 6.14803000D-10*TN(4) & + + 1.03780500D-13*TN(5) + SMH(21) = -1.50409823D+00 + 2.56427656D+04*TI & + + 5.71539582D+00*TN(1) - 7.61545645D-03*TN(2) & + + 1.08740193D-05*TN(3) - 5.92339074D-09*TN(4) & + + 1.30676349D-12*TN(5) + SMH(22) = 1.39397051D+01 - 2.64289807D+04*TI & + + 8.08681094D-01*TN(1) + 1.16807815D-02*TN(2) & + - 5.91953025D-06*TN(3) + 2.33460364D-09*TN(4) & + - 4.25036487D-13*TN(5) + SMH(23) = 8.51054025D+00 - 3.48598468D+04*TI & + + 3.21246645D+00*TN(1) + 7.57395810D-04*TN(2) & + + 4.32015687D-06*TN(3) - 2.98048206D-09*TN(4) & + + 7.35754365D-13*TN(5) + SMH(24) = 4.09733096D+00 - 5.08977593D+03*TI & + + 3.95920148D+00*TN(1) - 3.78526124D-03*TN(2) & + + 9.51650487D-06*TN(3) - 5.76323961D-09*TN(4) & + + 1.34942187D-12*TN(5) + SMH(25) = 4.70720924D+00 - 1.28416265D+04*TI & + + 4.30646568D+00*TN(1) - 2.09329446D-03*TN(2) & + + 8.28571345D-06*TN(3) - 4.99272172D-09*TN(4) & + + 1.15254502D-12*TN(5) + SMH(26) = 2.66682316D+00 + 1.15222055D+04*TI & + + 4.29142492D+00*TN(1) - 2.75077135D-03*TN(2) & + + 9.99063813D-06*TN(3) - 5.90388571D-09*TN(4) & + + 1.34342886D-12*TN(5) + SMH(27) = 1.24904170D+01 - 2.00594490D+04*TI & + + 2.25172140D+00*TN(1) + 8.82751050D-03*TN(2) & + - 3.95485017D-06*TN(3) + 1.43964658D-09*TN(4) & + - 2.53324055D-13*TN(5) + SMH(28) = 1.22156480D+01 + 7.04291804D+03*TI & + + 2.13583630D+00*TN(1) + 9.05943605D-03*TN(2) & + - 2.89912457D-06*TN(3) + 7.78664640D-10*TN(4) & + - 1.00728807D-13*TN(5) + SMH(29) = 9.55829000D+00 - 1.52147660D+03*TI & + + 3.40906200D+00*TN(1) + 5.36928700D-03*TN(2) & + + 3.15248667D-07*TN(3) - 5.96548583D-10*TN(4) & + + 1.43369250D-13*TN(5) + ENDIF +! CALL RDSMH (T, SMH) +! +! equilibrium constants +! + DO N = 1, 29 + EG(N) = EXP(SMH(N)) + ENDDO +! + PFAC = PATM / (RU*T) + PFAC2 = PFAC*PFAC + PFAC3 = PFAC2*PFAC +! + EQK(1)=EG(4)/EG(3)/EG(3)/PFAC + EQK(2)=EG(5)/EG(2)/EG(3)/PFAC + EQK(3)=EG(2)*EG(5)/EG(1)/EG(3) + EQK(4)=EG(4)*EG(5)/EG(3)/EG(7) + EQK(5)=EG(5)*EG(7)/EG(3)/EG(8) + EQK(6)=EG(2)*EG(15)/EG(3)/EG(10) + EQK(7)=EG(2)*EG(17)/EG(3)/EG(11) + EQK(8)=EG(1)*EG(15)/EG(3)/EG(12) + EQK(9)=EG(2)*EG(17)/EG(3)/EG(12) + EQK(10)=EG(2)*EG(18)/EG(3)/EG(13) + EQK(11)=EG(5)*EG(13)/EG(3)/EG(14) + EQK(12)=EG(16)/EG(3)/EG(15)/PFAC + EQK(13)=EG(5)*EG(15)/EG(3)/EG(17) + EQK(14)=EG(2)*EG(16)/EG(3)/EG(17) + EQK(15)=EG(5)*EG(17)/EG(3)/EG(18) + EQK(16)=EG(5)*EG(18)/EG(3)/EG(19) + EQK(17)=EG(5)*EG(18)/EG(3)/EG(20) + EQK(18)=EG(5)*EG(19)/EG(3)/EG(21) + EQK(19)=EG(5)*EG(20)/EG(3)/EG(21) + EQK(20)=EG(2)*EG(27)/EG(3)/EG(22) + EQK(21)=EG(11)*EG(15)/EG(3)/EG(22) + EQK(22)=EG(2)*EG(28)/EG(3)/EG(23) + EQK(23)=EG(13)*EG(17)/EG(3)/EG(24) + EQK(24)=EG(13)*EG(18)/EG(3)/EG(25) + EQK(25)=EG(5)*EG(25)/EG(3)/EG(26) + EQK(26)=EG(2)*EG(15)*EG(15)/EG(3)/EG(27)*PFAC + EQK(27)=EG(5)*EG(27)/EG(3)/EG(28) + EQK(28)=EG(11)*EG(16)/EG(3)/EG(28) + EQK(29)=EG(3)*EG(16)/EG(4)/EG(15) + EQK(30)=EG(7)*EG(17)/EG(4)/EG(18) + EQK(31)=EG(7)/EG(2)/EG(4)/PFAC + EQK(32)=EQK(31) + EQK(33)=EQK(31) + EQK(34)=EQK(31) + EQK(35)=EG(3)*EG(5)/EG(2)/EG(4) + EQK(36)=EG(1)/EG(2)/EG(2)/PFAC + EQK(37)=EQK(36) + EQK(38)=EQK(36) + EQK(39)=EQK(36) + EQK(40)=EG(6)/EG(2)/EG(5)/PFAC + EQK(41)=EG(3)*EG(6)/EG(2)/EG(7) + EQK(42)=EG(1)*EG(4)/EG(2)/EG(7) + EQK(43)=EG(5)*EG(5)/EG(2)/EG(7) + EQK(44)=EG(1)*EG(7)/EG(2)/EG(8) + EQK(45)=EG(5)*EG(6)/EG(2)/EG(8) + EQK(46)=EG(1)*EG(9)/EG(2)/EG(10) + EQK(47)=EG(13)/EG(2)/EG(11)/PFAC + EQK(48)=EG(1)*EG(10)/EG(2)/EG(12) + EQK(49)=EG(14)/EG(2)/EG(13)/PFAC + EQK(50)=EG(1)*EG(13)/EG(2)/EG(14) + EQK(51)=EG(18)/EG(2)/EG(17)/PFAC + EQK(52)=EG(1)*EG(15)/EG(2)/EG(17) + EQK(53)=EG(19)/EG(2)/EG(18)/PFAC + EQK(54)=EG(20)/EG(2)/EG(18)/PFAC + EQK(55)=EG(1)*EG(17)/EG(2)/EG(18) + EQK(56)=EG(21)/EG(2)/EG(19)/PFAC + EQK(57)=EG(1)*EG(18)/EG(2)/EG(19) + EQK(58)=EG(5)*EG(13)/EG(2)/EG(19) + EQK(59)=EG(6)*EG(12)/EG(2)/EG(19) + EQK(60)=EG(21)/EG(2)/EG(20)/PFAC + EQK(61)=EG(19)/EG(20) + EQK(62)=EG(1)*EG(18)/EG(2)/EG(20) + EQK(63)=EG(5)*EG(13)/EG(2)/EG(20) + EQK(64)=EG(6)*EG(12)/EG(2)/EG(20) + EQK(65)=EG(1)*EG(19)/EG(2)/EG(21) + EQK(66)=EG(1)*EG(20)/EG(2)/EG(21) + EQK(67)=EG(23)/EG(2)/EG(22)/PFAC + EQK(68)=EG(24)/EG(2)/EG(23)/PFAC + EQK(69)=EG(1)*EG(22)/EG(2)/EG(23) + EQK(70)=EG(25)/EG(2)/EG(24)/PFAC + EQK(71)=EG(1)*EG(23)/EG(2)/EG(24) + EQK(72)=EG(26)/EG(2)/EG(25)/PFAC + EQK(73)=EG(1)*EG(24)/EG(2)/EG(25) + EQK(74)=EG(1)*EG(25)/EG(2)/EG(26) + EQK(75)=EG(12)*EG(15)/EG(2)/EG(27) + EQK(76)=EG(1)*EG(27)/EG(2)/EG(28) + EQK(77)=EG(13)*EG(15)/EG(2)/EG(28) + EQK(78)=EG(18)/EG(1)/EG(15)/PFAC + EQK(79)=EG(2)*EG(6)/EG(1)/EG(5) + EQK(80)=EG(8)/EG(5)/EG(5)/PFAC + EQK(81)=EG(3)*EG(6)/EG(5)/EG(5) + EQK(82)=EG(4)*EG(6)/EG(5)/EG(7) + EQK(168)=EQK(82) + EQK(83)=EG(6)*EG(7)/EG(5)/EG(8) + EQK(84)=EQK(83) + EQK(85)=EG(2)*EG(15)/EG(5)/EG(9) + EQK(86)=EG(2)*EG(17)/EG(5)/EG(10) + EQK(87)=EG(2)*EG(18)/EG(5)/EG(11) + EQK(88)=EG(6)*EG(10)/EG(5)/EG(11) + EQK(89)=EG(2)*EG(18)/EG(5)/EG(12) + EQK(90)=EG(21)/EG(5)/EG(13)/PFAC + EQK(91)=EG(6)*EG(11)/EG(5)/EG(13) + EQK(92)=EG(6)*EG(12)/EG(5)/EG(13) + EQK(93)=EG(6)*EG(13)/EG(5)/EG(14) + EQK(94)=EG(2)*EG(16)/EG(5)/EG(15) + EQK(95)=EG(6)*EG(15)/EG(5)/EG(17) + EQK(96)=EG(6)*EG(17)/EG(5)/EG(18) + EQK(97)=EG(6)*EG(18)/EG(5)/EG(19) + EQK(98)=EG(6)*EG(18)/EG(5)/EG(20) + EQK(99)=EG(6)*EG(19)/EG(5)/EG(21) + EQK(100)=EG(6)*EG(20)/EG(5)/EG(21) + EQK(101)=EG(2)*EG(28)/EG(5)/EG(22) + EQK(102)=EG(13)*EG(15)/EG(5)/EG(22) + EQK(103)=EG(6)*EG(22)/EG(5)/EG(23) + EQK(104)=EG(6)*EG(23)/EG(5)/EG(24) + EQK(105)=EG(6)*EG(25)/EG(5)/EG(26) + EQK(106)=EG(6)*EG(27)/EG(5)/EG(28) + EQK(107)=EG(4)*EG(8)/EG(7)/EG(7) + EQK(108)=EQK(107) + EQK(109)=EG(5)*EG(18)/EG(7)/EG(11) + EQK(110)=EG(4)*EG(14)/EG(7)/EG(13) + EQK(111)=EG(5)*EG(20)/EG(7)/EG(13) + EQK(112)=EG(5)*EG(16)/EG(7)/EG(15) + EQK(113)=EG(8)*EG(17)/EG(7)/EG(18) + EQK(114)=EG(3)*EG(15)/EG(4)/EG(9) + EQK(115)=EG(2)*EG(22)/EG(9)/EG(13) + EQK(116)=EG(3)*EG(17)/EG(4)/EG(10) + EQK(117)=EG(2)*EG(11)/EG(1)/EG(10) + EQK(118)=EG(2)*EG(18)/EG(6)/EG(10) + EQK(119)=EG(2)*EG(22)/EG(10)/EG(11) + EQK(120)=EG(2)*EG(23)/EG(10)/EG(13) + EQK(121)=EG(2)*EG(24)/EG(10)/EG(14) + EQK(122)=EG(27)/EG(10)/EG(15)/PFAC + EQK(123)=EG(15)*EG(17)/EG(10)/EG(16) + EQK(124)=EG(2)*EG(28)/EG(10)/EG(18) + EQK(125)=EG(15)*EG(22)/EG(10)/EG(27) + EQK(127)=EG(2)*EG(13)/EG(1)/EG(11) + EQK(128)=EG(1)*EG(22)/EG(11)/EG(11) + EQK(129)=EG(2)*EG(24)/EG(11)/EG(13) + EQK(130)=EG(13)*EG(13)/EG(11)/EG(14) + EQK(131)=EG(28)/EG(11)/EG(15)/PFAC + EQK(132)=EG(15)*EG(23)/EG(11)/EG(27) + EQK(133)=EG(11)/EG(12) + EQK(138)=EQK(133) + EQK(141)=EQK(133) + EQK(142)=EQK(133) + EQK(134)=EG(2)*EG(5)*EG(15)/EG(4)/EG(12)*PFAC + EQK(135)=EG(6)*EG(15)/EG(4)/EG(12) + EQK(136)=EG(2)*EG(13)/EG(1)/EG(12) + EQK(137)=EG(21)/EG(6)/EG(12)/PFAC + EQK(139)=EG(2)*EG(24)/EG(12)/EG(13) + EQK(140)=EG(13)*EG(13)/EG(12)/EG(14) + EQK(143)=EG(15)*EG(18)/EG(12)/EG(16) + EQK(144)=EG(13)*EG(25)/EG(12)/EG(26) + EQK(145)=EG(3)*EG(20)/EG(4)/EG(13) + EQK(146)=EG(5)*EG(18)/EG(4)/EG(13) + EQK(147)=EG(7)*EG(14)/EG(8)/EG(13) + EQK(148)=EG(26)/EG(13)/EG(13)/PFAC + EQK(149)=EG(2)*EG(25)/EG(13)/EG(13) + EQK(150)=EG(14)*EG(15)/EG(13)/EG(17) + EQK(151)=EG(14)*EG(17)/EG(13)/EG(18) + EQK(152)=EG(14)*EG(19)/EG(13)/EG(21) + EQK(153)=EG(14)*EG(20)/EG(13)/EG(21) + EQK(154)=EG(14)*EG(23)/EG(13)/EG(24) + EQK(155)=EG(14)*EG(25)/EG(13)/EG(26) + EQK(156)=EG(2)*EG(15)/EG(17)*PFAC + EQK(157)=EQK(156) + EQK(158)=EG(7)*EG(15)/EG(4)/EG(17) + EQK(159)=EG(7)*EG(18)/EG(4)/EG(19) + EQK(160)=EG(7)*EG(18)/EG(4)/EG(20) + EQK(161)=EG(17)*EG(18)/EG(4)/EG(23) + EQK(162)=EG(1)*EG(22)/EG(24)*PFAC + EQK(163)=EG(7)*EG(24)/EG(4)/EG(25) + EQK(164)=EG(5)*EG(15)*EG(15)/EG(4)/EG(27)*PFAC + EQK(165)=EG(15)*EG(15)*EG(22)/EG(27)/EG(27)*PFAC + EQK(167)=EG(2)*EG(29)/EG(3)/EG(24) + EQK(170)=EG(13)/EG(1)/EG(10)/PFAC + EQK(172)=EG(3)*EG(18)/EG(4)/EG(11) + EQK(175)=EG(3)*EG(29)/EG(4)/EG(23) + EQK(176)=EG(7)*EG(22)/EG(4)/EG(23) + EQK(177)=EG(29)/EG(2)/EG(28)/PFAC + EQK(181)=EG(13)*EG(17)/EG(2)/EG(29) + EQK(182)=EG(1)*EG(28)/EG(2)/EG(29) + EQK(183)=EG(6)*EG(28)/EG(5)/EG(29) + EQK(184)=EG(17)*EG(19)/EG(5)/EG(29) +! +! +! ! Compute reverse reaction rates +! +! PARAMETER (SMALL = 1.D-200) +! + RB(1) = RF(1) / MAX(EQK(1),SMALL) + RB(2) = RF(2) / MAX(EQK(2),SMALL) + RB(3) = RF(3) / MAX(EQK(3),SMALL) + RB(4) = RF(4) / MAX(EQK(4),SMALL) + RB(5) = RF(5) / MAX(EQK(5),SMALL) + RB(6) = RF(6) / MAX(EQK(6),SMALL) + RB(7) = RF(7) / MAX(EQK(7),SMALL) + RB(8) = RF(8) / MAX(EQK(8),SMALL) + RB(9) = RF(9) / MAX(EQK(9),SMALL) + RB(10) = RF(10) / MAX(EQK(10),SMALL) + RB(11) = RF(11) / MAX(EQK(11),SMALL) + RB(12) = RF(12) / MAX(EQK(12),SMALL) + RB(13) = RF(13) / MAX(EQK(13),SMALL) + RB(14) = RF(14) / MAX(EQK(14),SMALL) + RB(15) = RF(15) / MAX(EQK(15),SMALL) + RB(16) = RF(16) / MAX(EQK(16),SMALL) + RB(17) = RF(17) / MAX(EQK(17),SMALL) + RB(18) = RF(18) / MAX(EQK(18),SMALL) + RB(19) = RF(19) / MAX(EQK(19),SMALL) + RB(20) = RF(20) / MAX(EQK(20),SMALL) + RB(21) = RF(21) / MAX(EQK(21),SMALL) + RB(22) = RF(22) / MAX(EQK(22),SMALL) + RB(23) = RF(23) / MAX(EQK(23),SMALL) + RB(24) = RF(24) / MAX(EQK(24),SMALL) + RB(25) = RF(25) / MAX(EQK(25),SMALL) + RB(26) = RF(26) / MAX(EQK(26),SMALL) + RB(27) = RF(27) / MAX(EQK(27),SMALL) + RB(28) = RF(28) / MAX(EQK(28),SMALL) + RB(29) = RF(29) / MAX(EQK(29),SMALL) + RB(30) = RF(30) / MAX(EQK(30),SMALL) + RB(31) = RF(31) / MAX(EQK(31),SMALL) + RB(32) = RF(32) / MAX(EQK(32),SMALL) + RB(33) = RF(33) / MAX(EQK(33),SMALL) + RB(34) = RF(34) / MAX(EQK(34),SMALL) + RB(35) = RF(35) / MAX(EQK(35),SMALL) + RB(36) = RF(36) / MAX(EQK(36),SMALL) + RB(37) = RF(37) / MAX(EQK(37),SMALL) + + RB(38) = RF(38) / MAX(EQK(38),SMALL) + RB(39) = RF(39) / MAX(EQK(39),SMALL) + RB(40) = RF(40) / MAX(EQK(40),SMALL) + RB(41) = RF(41) / MAX(EQK(41),SMALL) + RB(42) = RF(42) / MAX(EQK(42),SMALL) + RB(43) = RF(43) / MAX(EQK(43),SMALL) + RB(44) = RF(44) / MAX(EQK(44),SMALL) + RB(45) = RF(45) / MAX(EQK(45),SMALL) + RB(46) = RF(46) / MAX(EQK(46),SMALL) + RB(47) = RF(47) / MAX(EQK(47),SMALL) + RB(48) = RF(48) / MAX(EQK(48),SMALL) + RB(49) = RF(49) / MAX(EQK(49),SMALL) + RB(50) = RF(50) / MAX(EQK(50),SMALL) + RB(51) = RF(51) / MAX(EQK(51),SMALL) + RB(52) = RF(52) / MAX(EQK(52),SMALL) + RB(53) = RF(53) / MAX(EQK(53),SMALL) + RB(54) = RF(54) / MAX(EQK(54),SMALL) + RB(55) = RF(55) / MAX(EQK(55),SMALL) + RB(56) = RF(56) / MAX(EQK(56),SMALL) + RB(57) = RF(57) / MAX(EQK(57),SMALL) + RB(58) = RF(58) / MAX(EQK(58),SMALL) + RB(59) = RF(59) / MAX(EQK(59),SMALL) + RB(60) = RF(60) / MAX(EQK(60),SMALL) + RB(61) = RF(61) / MAX(EQK(61),SMALL) + RB(62) = RF(62) / MAX(EQK(62),SMALL) + RB(63) = RF(63) / MAX(EQK(63),SMALL) + RB(64) = RF(64) / MAX(EQK(64),SMALL) + RB(65) = RF(65) / MAX(EQK(65),SMALL) + RB(66) = RF(66) / MAX(EQK(66),SMALL) + RB(67) = RF(67) / MAX(EQK(67),SMALL) + RB(68) = RF(68) / MAX(EQK(68),SMALL) + RB(69) = RF(69) / MAX(EQK(69),SMALL) + RB(70) = RF(70) / MAX(EQK(70),SMALL) + RB(71) = RF(71) / MAX(EQK(71),SMALL) + RB(72) = RF(72) / MAX(EQK(72),SMALL) + RB(73) = RF(73) / MAX(EQK(73),SMALL) + RB(74) = RF(74) / MAX(EQK(74),SMALL) + RB(75) = RF(75) / MAX(EQK(75),SMALL) + RB(76) = RF(76) / MAX(EQK(76),SMALL) + RB(77) = RF(77) / MAX(EQK(77),SMALL) + RB(78) = RF(78) / MAX(EQK(78),SMALL) + RB(79) = RF(79) / MAX(EQK(79),SMALL) + RB(80) = RF(80) / MAX(EQK(80),SMALL) + RB(81) = RF(81) / MAX(EQK(81),SMALL) + RB(82) = RF(82) / MAX(EQK(82),SMALL) + RB(83) = RF(83) / MAX(EQK(83),SMALL) + RB(84) = RF(84) / MAX(EQK(84),SMALL) + RB(85) = RF(85) / MAX(EQK(85),SMALL) + RB(86) = RF(86) / MAX(EQK(86),SMALL) + RB(87) = RF(87) / MAX(EQK(87),SMALL) + RB(88) = RF(88) / MAX(EQK(88),SMALL) + RB(89) = RF(89) / MAX(EQK(89),SMALL) + RB(90) = RF(90) / MAX(EQK(90),SMALL) + RB(91) = RF(91) / MAX(EQK(91),SMALL) + RB(92) = RF(92) / MAX(EQK(92),SMALL) + RB(93) = RF(93) / MAX(EQK(93),SMALL) + RB(94) = RF(94) / MAX(EQK(94),SMALL) + RB(95) = RF(95) / MAX(EQK(95),SMALL) + RB(96) = RF(96) / MAX(EQK(96),SMALL) + RB(97) = RF(97) / MAX(EQK(97),SMALL) + RB(98) = RF(98) / MAX(EQK(98),SMALL) + RB(99) = RF(99) / MAX(EQK(99),SMALL) + RB(100) = RF(100) / MAX(EQK(100),SMALL) + RB(101) = RF(101) / MAX(EQK(101),SMALL) + RB(102) = RF(102) / MAX(EQK(102),SMALL) + RB(103) = RF(103) / MAX(EQK(103),SMALL) + RB(104) = RF(104) / MAX(EQK(104),SMALL) + RB(105) = RF(105) / MAX(EQK(105),SMALL) + RB(106) = RF(106) / MAX(EQK(106),SMALL) + RB(107) = RF(107) / MAX(EQK(107),SMALL) + RB(108) = RF(108) / MAX(EQK(108),SMALL) + RB(109) = RF(109) / MAX(EQK(109),SMALL) + RB(110) = RF(110) / MAX(EQK(110),SMALL) + RB(111) = RF(111) / MAX(EQK(111),SMALL) + RB(112) = RF(112) / MAX(EQK(112),SMALL) + RB(113) = RF(113) / MAX(EQK(113),SMALL) + RB(114) = RF(114) / MAX(EQK(114),SMALL) + RB(115) = RF(115) / MAX(EQK(115),SMALL) + RB(116) = RF(116) / MAX(EQK(116),SMALL) + RB(117) = RF(117) / MAX(EQK(117),SMALL) + RB(118) = RF(118) / MAX(EQK(118),SMALL) + RB(119) = RF(119) / MAX(EQK(119),SMALL) + RB(120) = RF(120) / MAX(EQK(120),SMALL) + RB(121) = RF(121) / MAX(EQK(121),SMALL) + RB(122) = RF(122) / MAX(EQK(122),SMALL) + RB(123) = RF(123) / MAX(EQK(123),SMALL) + RB(124) = RF(124) / MAX(EQK(124),SMALL) + RB(125) = RF(125) / MAX(EQK(125),SMALL) + RB(126) = 0.0 + RB(127) = RF(127) / MAX(EQK(127),SMALL) + RB(128) = RF(128) / MAX(EQK(128),SMALL) + RB(129) = RF(129) / MAX(EQK(129),SMALL) + RB(130) = RF(130) / MAX(EQK(130),SMALL) + RB(131) = RF(131) / MAX(EQK(131),SMALL) + RB(132) = RF(132) / MAX(EQK(132),SMALL) + RB(133) = RF(133) / MAX(EQK(133),SMALL) + RB(134) = RF(134) / MAX(EQK(134),SMALL) + RB(135) = RF(135) / MAX(EQK(135),SMALL) + RB(136) = RF(136) / MAX(EQK(136),SMALL) + RB(137) = RF(137) / MAX(EQK(137),SMALL) + RB(138) = RF(138) / MAX(EQK(138),SMALL) + RB(139) = RF(139) / MAX(EQK(139),SMALL) + RB(140) = RF(140) / MAX(EQK(140),SMALL) + RB(141) = RF(141) / MAX(EQK(141),SMALL) + RB(142) = RF(142) / MAX(EQK(142),SMALL) + RB(143) = RF(143) / MAX(EQK(143),SMALL) + RB(144) = RF(144) / MAX(EQK(144),SMALL) + RB(145) = RF(145) / MAX(EQK(145),SMALL) + RB(146) = RF(146) / MAX(EQK(146),SMALL) + RB(147) = RF(147) / MAX(EQK(147),SMALL) + RB(148) = RF(148) / MAX(EQK(148),SMALL) + RB(149) = RF(149) / MAX(EQK(149),SMALL) + RB(150) = RF(150) / MAX(EQK(150),SMALL) + RB(151) = RF(151) / MAX(EQK(151),SMALL) + RB(152) = RF(152) / MAX(EQK(152),SMALL) + RB(153) = RF(153) / MAX(EQK(153),SMALL) + RB(154) = RF(154) / MAX(EQK(154),SMALL) + RB(155) = RF(155) / MAX(EQK(155),SMALL) + RB(156) = RF(156) / MAX(EQK(156),SMALL) + RB(157) = RF(157) / MAX(EQK(157),SMALL) + RB(158) = RF(158) / MAX(EQK(158),SMALL) + RB(159) = RF(159) / MAX(EQK(159),SMALL) + RB(160) = RF(160) / MAX(EQK(160),SMALL) + RB(161) = RF(161) / MAX(EQK(161),SMALL) + RB(162) = RF(162) / MAX(EQK(162),SMALL) + RB(163) = RF(163) / MAX(EQK(163),SMALL) + RB(164) = RF(164) / MAX(EQK(164),SMALL) + RB(165) = RF(165) / MAX(EQK(165),SMALL) + RB(166) = 0.0 + RB(167) = RF(167) / MAX(EQK(167),SMALL) + RB(168) = RF(168) / MAX(EQK(168),SMALL) + RB(169) = 0.0 + RB(170) = RF(170) / MAX(EQK(170),SMALL) + RB(171) = 0.0 + RB(172) = RF(172) / MAX(EQK(172),SMALL) + RB(173) = 0.0 + RB(174) = 0.0 + RB(175) = RF(175) / MAX(EQK(175),SMALL) + RB(176) = RF(176) / MAX(EQK(176),SMALL) + RB(177) = RF(177) / MAX(EQK(177),SMALL) + RB(178) = 0.0 + RB(179) = 0.0 + RB(180) = 0.0 + RB(181) = RF(181) / MAX(EQK(181),SMALL) + RB(182) = RF(182) / MAX(EQK(182),SMALL) + RB(183) = RF(183) / MAX(EQK(183),SMALL) + RB(184) = RF(184) / MAX(EQK(184),SMALL) +! +! +! rates at low pressure limit +! + RKLOW(1) = EXP(3.40312786D1 -1.50965D3/T) + RKLOW(2) = EXP(5.99064331D1 -2.76D0*ALOGT -8.05146668D2/T) + RKLOW(3) = EXP(7.69484824D1 -4.76D0*ALOGT -1.22784867D3/T) + RKLOW(4) = EXP(5.61662604D1 -2.57D0*ALOGT -2.13867084D2/T) + RKLOW(5) = EXP(7.39217399D1 -4.82D0*ALOGT -3.28600484D3/T) + RKLOW(6) = EXP(6.98660102D1 -4.8D0*ALOGT -2.79788467D3/T) + RKLOW(7) = EXP(7.28526099D1 -4.65D0*ALOGT -2.55634067D3/T) + RKLOW(8) = EXP(9.59450043D1 -7.44D0*ALOGT -7.08529068D3/T) + RKLOW(9) = EXP(9.34384048D1 -7.27D0*ALOGT -3.63322434D3/T) + RKLOW(10) = EXP(6.9414025D1 -3.86D0*ALOGT -1.67067934D3/T) + RKLOW(11) = EXP(9.61977483D1 -7.62D0*ALOGT -3.50742017D3/T) + RKLOW(12) = EXP(9.50941235D1 -7.08D0*ALOGT -3.36400342D3/T) + RKLOW(13) = EXP(6.37931383D1 -3.42D0*ALOGT -4.24463259D4/T) + RKLOW(14) = EXP(4.22794408D1 -9.D-1*ALOGT +8.55468335D2/T) + RKLOW(15) = EXP(8.42793577D1 -5.92D0*ALOGT -1.58010034D3/T) + RKLOW(16) = EXP(6.54619238D1 -3.74D0*ALOGT -9.74227469D2/T) + RKLOW(17) = EXP(7.69748493D1 -5.11D0*ALOGT -3.57032226D3/T) + RKLOW(18) = EXP(8.81295053D1 -6.36D0*ALOGT -2.536212D3/T) + RKLOW(19) = EXP(9.56297642D1 -7.03D0*ALOGT -1.38988444D3/T) + RKLOW(20) = EXP(1.17889265D2 -9.3D0*ALOGT -4.92145901D4/T) + RKLOW(21) = EXP(5.91374013D1 -2.8D0*ALOGT -2.96897834D2/T) + RKLOW(22) = EXP(9.67205025D1 -7.63D0*ALOGT -1.93939704D3/T) +! +! END +! ! +! ----------------------------------------------------------------------! +! ! +! +! third-body concentrations +! ! +! SUBROUTINE RATX (T, C, RF, RB, RKLOW) +! IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! PARAMETER (SMALL = 1.D-200) +! DIMENSION C(*), RF(*), RB(*), RKLOW(*) +! + ALOGT = LOG(T) + CTOT = 0.0 + DO K = 1, 19 + CTOT = CTOT + C(K) + ENDDO +! + CTB(1) = CTOT + 1.4D0*C(1) + 1.44D1*C(6) + C(10) + 7.5D-1*C(11) & + + 2.6D0*C(12) + 2.D0*C(17) + CTB(2) = CTOT + C(1) + 5.D0*C(6) + C(10) + 5.D-1*C(11) + C(12) & + + 2.D0*C(17) + CTB(47) = CTB(2) + CTB(51) = CTB(2) + CTB(53) = CTB(2) + CTB(54) = CTB(2) + CTB(56) = CTB(2) + CTB(60) = CTB(2) + CTB(67) = CTB(2) + CTB(68) = CTB(2) + CTB(70) = CTB(2) + CTB(72) = CTB(2) + CTB(78) = CTB(2) + CTB(80) = CTB(2) + CTB(90) = CTB(2) + CTB(122) = CTB(2) + CTB(131) = CTB(2) + CTB(137) = CTB(2) + CTB(148) = CTB(2) + CTB(162) = CTB(2) + CTB(170) = CTB(2) + CTB(177) = CTB(2) + CTB(12) = CTOT + C(1) + 5.D0*C(4) + 5.D0*C(6) + C(10) & + + 5.D-1*C(11) + 2.5D0*C(12) + 2.D0*C(17) + CTB(31) = CTOT - C(4) - C(6) - 2.5D-1*C(11) + 5.D-1*C(12) & + + 5.D-1*C(17) - C(19) + CTB(36) = CTOT - C(1) - C(6) + C(10) - C(12) + 2.D0*C(17) + CTB(40) = CTOT - 2.7D-1*C(1) + 2.65D0*C(6) + C(10) + 2.D0*C(17) + CTB(49) = CTOT + C(1) + 5.D0*C(6) + 2.D0*C(10) + 5.D-1*C(11) & + + C(12) + 2.D0*C(17) + CTB(157) = CTOT + C(1) - C(6) + C(10) + 5.D-1*C(11) + C(12) & + + 2.D0*C(17) +! +! +! fall-off reactions +! +! + PR = RKLOW(1) * CTB(12) / RF(12) + PCOR = PR / (1.0 + PR) + RF(12) = RF(12) * PCOR + RB(12) = RB(12) * PCOR +! + PR = RKLOW(2) * CTB(47) / RF(47) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 4.38D-1*EXP(-T/9.1D1) + 5.62D-1*EXP(-T/5.836D3)& + + EXP(-8.552D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(47) = RF(47) * PCOR + RB(47) = RB(47) * PCOR +! + PR = RKLOW(3) * CTB(49) / RF(49) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.17D-1*EXP(-T/7.4D1) + 7.83D-1*EXP(-T/2.941D3)& + + EXP(-6.964D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(49) = RF(49) * PCOR + RB(49) = RB(49) * PCOR +! + PR = RKLOW(4) * CTB(51) / RF(51) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.176D-1*EXP(-T/2.71D2) + 7.824D-1*EXP(-T/2.755D3)& + + EXP(-6.57D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(51) = RF(51) * PCOR + RB(51) = RB(51) * PCOR + + PR = RKLOW(5) * CTB(53) / RF(53) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.813D-1*EXP(-T/1.03D2) + 7.187D-1*EXP(-T/1.291D3)& + + EXP(-4.16D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(53) = RF(53) * PCOR + RB(53) = RB(53) * PCOR + + PR = RKLOW(6) * CTB(54) / RF(54) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.42D-1*EXP(-T/9.4D1) + 7.58D-1*EXP(-T/1.555D3)& + + EXP(-4.2D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(54) = RF(54) * PCOR + RB(54) = RB(54) * PCOR + + PR = RKLOW(7) * CTB(56) / RF(56) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 4.D-1*EXP(-T/1.D2) + 6.D-1*EXP(-T/9.D4)& + + EXP(-1.D4/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(56) = RF(56) * PCOR + RB(56) = RB(56) * PCOR + + PR = RKLOW(8) * CTB(60) / RF(60) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 3.D-1*EXP(-T/1.D2) + 7.D-1*EXP(-T/9.D4)& + + EXP(-1.D4/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(60) = RF(60) * PCOR + RB(60) = RB(60) * PCOR + + PR = RKLOW(9) * CTB(67) / RF(67) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.493D-1*EXP(-T/9.85D1) + 7.507D-1*EXP(-T/1.302D3)& + + EXP(-4.167D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(67) = RF(67) * PCOR + RB(67) = RB(67) * PCOR + + PR = RKLOW(10) * CTB(68) / RF(68) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.18D-1*EXP(-T/2.075D2) + 7.82D-1*EXP(-T/2.663D3)& + + EXP(-6.095D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(68) = RF(68) * PCOR + RB(68) = RB(68) * PCOR + + PR = RKLOW(11) * CTB(70) / RF(70) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.47D-2*EXP(-T/2.1D2) + 9.753D-1*EXP(-T/9.84D2)& + + EXP(-4.374D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(70) = RF(70) * PCOR + RB(70) = RB(70) * PCOR + + PR = RKLOW(12) * CTB(72) / RF(72) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 1.578D-1*EXP(-T/1.25D2) + 8.422D-1*EXP(-T/2.219D3)& + + EXP(-6.882D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(72) = RF(72) * PCOR + RB(72) = RB(72) * PCOR + + PR = RKLOW(13) * CTB(78) / RF(78) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 6.8D-2*EXP(-T/1.97D2) + 9.32D-1*EXP(-T/1.54D3)& + + EXP(-1.03D4/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(78) = RF(78) * PCOR + RB(78) = RB(78) * PCOR + + PR = RKLOW(14) * CTB(80) / RF(80) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.654D-1*EXP(-T/9.4D1) + 7.346D-1*EXP(-T/1.756D3)& + + EXP(-5.182D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(80) = RF(80) * PCOR + RB(80) = RB(80) * PCOR + + PR = RKLOW(15) * CTB(90) / RF(90) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 5.88D-1*EXP(-T/1.95D2) + 4.12D-1*EXP(-T/5.9D3)& + + EXP(-6.394D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(90) = RF(90) * PCOR + RB(90) = RB(90) * PCOR + + PR = RKLOW(16) * CTB(122) / RF(122) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 4.243D-1*EXP(-T/2.37D2) + 5.757D-1*EXP(-T/1.652D3)& + + EXP(-5.069D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(122) = RF(122) * PCOR + RB(122) = RB(122) * PCOR + + PR = RKLOW(17) * CTB(131) / RF(131) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 4.093D-1*EXP(-T/2.75D2) + 5.907D-1*EXP(-T/1.226D3)& + + EXP(-5.185D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(131) = RF(131) * PCOR + RB(131) = RB(131) * PCOR + + PR = RKLOW(18) * CTB(137) / RF(137) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 3.973D-1*EXP(-T/2.08D2) + 6.027D-1*EXP(-T/3.922D3)& + + EXP(-1.018D4/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(137) = RF(137) * PCOR + RB(137) = RB(137) * PCOR + + PR = RKLOW(19) * CTB(148) / RF(148) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 3.81D-1*EXP(-T/7.32D1) + 6.19D-1*EXP(-T/1.18D3)& + + EXP(-9.999D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(148) = RF(148) * PCOR + RB(148) = RB(148) * PCOR + + PR = RKLOW(20) * CTB(162) / RF(162) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.655D-1*EXP(-T/1.8D2) + 7.345D-1*EXP(-T/1.035D3)& + + EXP(-5.417D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(162) = RF(162) * PCOR + RB(162) = RB(162) * PCOR + + PR = RKLOW(21) * CTB(170) / RF(170) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 4.22D-1*EXP(-T/1.22D2) + 5.78D-1*EXP(-T/2.535D3)& + + EXP(-9.365D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(170) = RF(170) * PCOR + RB(170) = RB(170) * PCOR + + PR = RKLOW(22) * CTB(177) / RF(177) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 5.35D-1*EXP(-T/2.01D2) + 4.65D-1*EXP(-T/1.773D3)& + + EXP(-5.333D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(177) = RF(177) * PCOR + RB(177) = RB(177) * PCOR + + RF(1) = RF(1)*CTB(1)*C(3)*C(3) + RF(2) = RF(2)*CTB(2)*C(3)*C(2) + RF(3) = RF(3)*C(3)*C(1) + RF(4) = RF(4)*C(3)*C(7) + RF(5) = RF(5)*C(3)*C(8) + RF(6) = RF(6)*C(3) + RF(7) = RF(7)*C(3) + RF(8) = RF(8)*C(3) + RF(9) = RF(9)*C(3) + RF(10) = RF(10)*C(3)*C(9) + RF(11) = RF(11)*C(3)*C(10) + RF(12) = RF(12)*C(3)*C(11) + RF(13) = RF(13)*C(3) + RF(14) = RF(14)*C(3) + RF(15) = RF(15)*C(3)*C(13) + RF(16) = RF(16)*C(3) + RF(17) = RF(17)*C(3) + RF(18) = RF(18)*C(3)*C(14) + RF(19) = RF(19)*C(3)*C(14) + RF(20) = RF(20)*C(3)*C(15) + RF(21) = RF(21)*C(3)*C(15) + RF(22) = RF(22)*C(3) + RF(23) = RF(23)*C(3)*C(16) + RF(24) = RF(24)*C(3) + RF(25) = RF(25)*C(3)*C(17) + RF(26) = RF(26)*C(3) + RF(27) = RF(27)*C(3)*C(18) + RF(28) = RF(28)*C(3)*C(18) + RF(29) = RF(29)*C(4)*C(11) + RF(30) = RF(30)*C(4)*C(13) + RF(31) = RF(31)*CTB(31)*C(2)*C(4) + RF(32) = RF(32)*C(2)*C(4)*C(4) + RF(33) = RF(33)*C(2)*C(4)*C(6) + RF(34) = RF(34)*C(2)*C(4)*C(19) + RF(35) = RF(35)*C(2)*C(4) + RF(36) = RF(36)*CTB(36)*C(2)*C(2) + RF(37) = RF(37)*C(2)*C(2)*C(1) + RF(38) = RF(38)*C(2)*C(2)*C(6) + RF(39) = RF(39)*C(2)*C(2)*C(12) + RF(40) = RF(40)*CTB(40)*C(2)*C(5) + RF(41) = RF(41)*C(2)*C(7) + RF(42) = RF(42)*C(2)*C(7) + RF(43) = RF(43)*C(2)*C(7) + RF(44) = RF(44)*C(2)*C(8) + RF(45) = RF(45)*C(2)*C(8) + RF(46) = RF(46)*C(2) + RF(47) = RF(47)*C(2) + RF(48) = RF(48)*C(2) + RF(49) = RF(49)*C(2)*C(9) + RF(50) = RF(50)*C(2)*C(10) + RF(51) = RF(51)*C(2) + RF(52) = RF(52)*C(2) + RF(53) = RF(53)*C(2)*C(13) + RF(54) = RF(54)*C(2)*C(13) + RF(55) = RF(55)*C(2)*C(13) + RF(56) = RF(56)*C(2) + RF(57) = RF(57)*C(2) + RF(58) = RF(58)*C(2) + RF(59) = RF(59)*C(2) + RF(60) = RF(60)*C(2) + RF(61) = RF(61)*C(2) + RF(62) = RF(62)*C(2) + RF(63) = RF(63)*C(2) + RF(64) = RF(64)*C(2) + RF(65) = RF(65)*C(2)*C(14) + RF(66) = RF(66)*C(2)*C(14) + RF(67) = RF(67)*C(2)*C(15) + RF(68) = RF(68)*C(2) + RF(69) = RF(69)*C(2) + RF(70) = RF(70)*C(2)*C(16) + RF(71) = RF(71)*C(2)*C(16) + RF(72) = RF(72)*C(2) + RF(73) = RF(73)*C(2) + RF(74) = RF(74)*C(2)*C(17) + RF(75) = RF(75)*C(2) + RF(76) = RF(76)*C(2)*C(18) + RF(77) = RF(77)*C(2)*C(18) + RF(78) = RF(78)*C(1)*C(11) + RF(79) = RF(79)*C(5)*C(1) + RF(80) = RF(80)*C(5)*C(5) + RF(81) = RF(81)*C(5)*C(5) + RF(82) = RF(82)*C(5)*C(7) + RF(83) = RF(83)*C(5)*C(8) + RF(84) = RF(84)*C(5)*C(8) + RF(85) = RF(85)*C(5) + RF(86) = RF(86)*C(5) + RF(87) = RF(87)*C(5) + RF(88) = RF(88)*C(5) + RF(89) = RF(89)*C(5) + RF(90) = RF(90)*C(5)*C(9) + RF(91) = RF(91)*C(5)*C(9) + RF(92) = RF(92)*C(5)*C(9) + RF(93) = RF(93)*C(5)*C(10) + RF(94) = RF(94)*C(5)*C(11) + RF(95) = RF(95)*C(5) + RF(96) = RF(96)*C(5)*C(13) + RF(97) = RF(97)*C(5) + RF(98) = RF(98)*C(5) + RF(99) = RF(99)*C(5)*C(14) + RF(100) = RF(100)*C(5)*C(14) + RF(101) = RF(101)*C(5)*C(15) + RF(102) = RF(102)*C(5)*C(15) + RF(103) = RF(103)*C(5) + RF(104) = RF(104)*C(5)*C(16) + RF(105) = RF(105)*C(5)*C(17) + RF(106) = RF(106)*C(5)*C(18) + RF(107) = RF(107)*C(7)*C(7) + RF(108) = RF(108)*C(7)*C(7) + RF(109) = RF(109)*C(7) + RF(110) = RF(110)*C(7)*C(9) + RF(111) = RF(111)*C(7)*C(9) + RF(112) = RF(112)*C(7)*C(11) + RF(113) = RF(113)*C(7)*C(13) + RF(114) = RF(114)*C(4) + RF(115) = RF(115)*C(9) + RF(116) = RF(116)*C(4) + RF(117) = RF(117)*C(1) + RF(118) = RF(118)*C(6) + RF(120) = RF(120)*C(9) + RF(121) = RF(121)*C(10) + RF(122) = RF(122)*C(11) + RF(123) = RF(123)*C(12) + RF(124) = RF(124)*C(13) + RF(126) = RF(126)*C(4) + RF(127) = RF(127)*C(1) + RF(129) = RF(129)*C(9) + RF(130) = RF(130)*C(10) + RF(131) = RF(131)*C(11) + RF(133) = RF(133)*C(19) + RF(134) = RF(134)*C(4) + RF(135) = RF(135)*C(4) + RF(136) = RF(136)*C(1) + RF(137) = RF(137)*C(6) + RF(138) = RF(138)*C(6) + RF(139) = RF(139)*C(9) + RF(140) = RF(140)*C(10) + RF(141) = RF(141)*C(11) + RF(142) = RF(142)*C(12) + RF(143) = RF(143)*C(12) + RF(144) = RF(144)*C(17) + RF(145) = RF(145)*C(9)*C(4) + RF(146) = RF(146)*C(9)*C(4) + RF(147) = RF(147)*C(9)*C(8) + RF(148) = RF(148)*C(9)*C(9) + RF(149) = RF(149)*C(9)*C(9) + RF(150) = RF(150)*C(9) + RF(151) = RF(151)*C(9)*C(13) + RF(152) = RF(152)*C(9)*C(14) + RF(153) = RF(153)*C(9)*C(14) + RF(154) = RF(154)*C(9)*C(16) + RF(155) = RF(155)*C(9)*C(17) + RF(156) = RF(156)*C(6) + RF(157) = RF(157)*CTB(157) + RF(158) = RF(158)*C(4) + RF(159) = RF(159)*C(4) + RF(160) = RF(160)*C(4) + RF(161) = RF(161)*C(4) + RF(162) = RF(162)*C(16) + RF(163) = RF(163)*C(4) + RF(164) = RF(164)*C(4) + RF(166) = RF(166)*C(3)*C(9) + RF(167) = RF(167)*C(3)*C(16) + RF(168) = RF(168)*C(5)*C(7) + RF(169) = RF(169)*C(5)*C(9) + RF(170) = RF(170)*C(1) + RF(171) = RF(171)*C(4) + RF(172) = RF(172)*C(4) + RF(174) = RF(174)*C(6) + RF(175) = RF(175)*C(4) + RF(176) = RF(176)*C(4) + RF(177) = RF(177)*C(2)*C(18) + RF(178) = RF(178)*C(3) + RF(179) = RF(179)*C(4) + RF(180) = RF(180)*C(4) + RF(181) = RF(181)*C(2) + RF(182) = RF(182)*C(2) + RF(183) = RF(183)*C(5) + RF(184) = RF(184)*C(5) + RB(1) = RB(1)*CTB(1)*C(4) + RB(2) = RB(2)*CTB(2)*C(5) + RB(3) = RB(3)*C(2)*C(5) + RB(4) = RB(4)*C(5)*C(4) + RB(5) = RB(5)*C(5)*C(7) + RB(6) = RB(6)*C(2)*C(11) + RB(7) = RB(7)*C(2) + RB(8) = RB(8)*C(1)*C(11) + RB(9) = RB(9)*C(2) + RB(10) = RB(10)*C(2)*C(13) + RB(11) = RB(11)*C(5)*C(9) + RB(12) = RB(12)*C(12) + RB(13) = RB(13)*C(5)*C(11) + RB(14) = RB(14)*C(2)*C(12) + RB(15) = RB(15)*C(5) + RB(16) = RB(16)*C(5)*C(13) + RB(17) = RB(17)*C(5)*C(13) + RB(18) = RB(18)*C(5) + RB(19) = RB(19)*C(5) + RB(20) = RB(20)*C(2) + RB(21) = RB(21)*C(11) + RB(22) = RB(22)*C(2)*C(18) + RB(23) = RB(23)*C(9) + RB(24) = RB(24)*C(9)*C(13) + RB(25) = RB(25)*C(5) + RB(26) = RB(26)*C(2)*C(11)*C(11) + RB(27) = RB(27)*C(5) + RB(28) = RB(28)*C(12) + RB(29) = RB(29)*C(3)*C(12) + RB(30) = RB(30)*C(7) + RB(31) = RB(31)*CTB(31)*C(7) + RB(32) = RB(32)*C(7)*C(4) + RB(33) = RB(33)*C(7)*C(6) + RB(34) = RB(34)*C(7)*C(19) + RB(35) = RB(35)*C(3)*C(5) + RB(36) = RB(36)*CTB(36)*C(1) + RB(37) = RB(37)*C(1)*C(1) + RB(38) = RB(38)*C(1)*C(6) + RB(39) = RB(39)*C(1)*C(12) + RB(40) = RB(40)*CTB(40)*C(6) + RB(41) = RB(41)*C(3)*C(6) + RB(42) = RB(42)*C(4)*C(1) + RB(43) = RB(43)*C(5)*C(5) + RB(44) = RB(44)*C(7)*C(1) + RB(45) = RB(45)*C(5)*C(6) + RB(46) = RB(46)*C(1) + RB(47) = RB(47)*C(9) + RB(48) = RB(48)*C(1) + RB(49) = RB(49)*C(10) + RB(50) = RB(50)*C(9)*C(1) + RB(51) = RB(51)*C(13) + RB(52) = RB(52)*C(1)*C(11) + RB(55) = RB(55)*C(1) + RB(56) = RB(56)*C(14) + RB(57) = RB(57)*C(1)*C(13) + RB(58) = RB(58)*C(5)*C(9) + RB(59) = RB(59)*C(6) + RB(60) = RB(60)*C(14) + RB(61) = RB(61)*C(2) + RB(62) = RB(62)*C(1)*C(13) + RB(63) = RB(63)*C(5)*C(9) + RB(64) = RB(64)*C(6) + RB(65) = RB(65)*C(1) + RB(66) = RB(66)*C(1) + RB(68) = RB(68)*C(16) + RB(69) = RB(69)*C(1)*C(15) + RB(71) = RB(71)*C(1) + RB(72) = RB(72)*C(17) + RB(73) = RB(73)*C(1)*C(16) + RB(74) = RB(74)*C(1) + RB(75) = RB(75)*C(11) + RB(76) = RB(76)*C(1) + RB(77) = RB(77)*C(9)*C(11) + RB(78) = RB(78)*C(13) + RB(79) = RB(79)*C(2)*C(6) + RB(80) = RB(80)*C(8) + RB(81) = RB(81)*C(3)*C(6) + RB(82) = RB(82)*C(4)*C(6) + RB(83) = RB(83)*C(7)*C(6) + RB(84) = RB(84)*C(7)*C(6) + RB(85) = RB(85)*C(2)*C(11) + RB(86) = RB(86)*C(2) + RB(87) = RB(87)*C(2)*C(13) + RB(88) = RB(88)*C(6) + RB(89) = RB(89)*C(2)*C(13) + RB(90) = RB(90)*C(14) + RB(91) = RB(91)*C(6) + RB(92) = RB(92)*C(6) + RB(93) = RB(93)*C(9)*C(6) + RB(94) = RB(94)*C(2)*C(12) + RB(95) = RB(95)*C(6)*C(11) + RB(96) = RB(96)*C(6) + RB(97) = RB(97)*C(6)*C(13) + RB(98) = RB(98)*C(6)*C(13) + RB(99) = RB(99)*C(6) + RB(100) = RB(100)*C(6) + RB(101) = RB(101)*C(2)*C(18) + RB(102) = RB(102)*C(9)*C(11) + RB(103) = RB(103)*C(6)*C(15) + RB(104) = RB(104)*C(6) + RB(105) = RB(105)*C(6) + RB(106) = RB(106)*C(6) + RB(107) = RB(107)*C(4)*C(8) + RB(108) = RB(108)*C(4)*C(8) + RB(109) = RB(109)*C(5)*C(13) + RB(110) = RB(110)*C(4)*C(10) + RB(111) = RB(111)*C(5) + RB(112) = RB(112)*C(5)*C(12) + RB(113) = RB(113)*C(8) + RB(114) = RB(114)*C(3)*C(11) + RB(115) = RB(115)*C(2)*C(15) + RB(116) = RB(116)*C(3) + RB(117) = RB(117)*C(2) + RB(118) = RB(118)*C(2)*C(13) + RB(119) = RB(119)*C(2)*C(15) + RB(120) = RB(120)*C(2) + RB(121) = RB(121)*C(2)*C(16) + RB(123) = RB(123)*C(11) + RB(124) = RB(124)*C(2)*C(18) + RB(125) = RB(125)*C(11)*C(15) + RB(127) = RB(127)*C(2)*C(9) + RB(128) = RB(128)*C(1)*C(15) + RB(129) = RB(129)*C(2)*C(16) + RB(130) = RB(130)*C(9)*C(9) + RB(131) = RB(131)*C(18) + RB(132) = RB(132)*C(11) + RB(133) = RB(133)*C(19) + RB(134) = RB(134)*C(2)*C(5)*C(11) + RB(135) = RB(135)*C(11)*C(6) + RB(136) = RB(136)*C(9)*C(2) + RB(137) = RB(137)*C(14) + RB(138) = RB(138)*C(6) + RB(139) = RB(139)*C(2)*C(16) + RB(140) = RB(140)*C(9)*C(9) + RB(141) = RB(141)*C(11) + RB(142) = RB(142)*C(12) + RB(143) = RB(143)*C(11)*C(13) + RB(144) = RB(144)*C(9) + RB(145) = RB(145)*C(3) + RB(146) = RB(146)*C(5)*C(13) + RB(147) = RB(147)*C(7)*C(10) + RB(148) = RB(148)*C(17) + RB(149) = RB(149)*C(2) + RB(150) = RB(150)*C(10)*C(11) + RB(151) = RB(151)*C(10) + RB(152) = RB(152)*C(10) + RB(153) = RB(153)*C(10) + RB(154) = RB(154)*C(10) + RB(155) = RB(155)*C(10) + RB(156) = RB(156)*C(2)*C(11)*C(6) + RB(157) = RB(157)*CTB(157)*C(2)*C(11) + RB(158) = RB(158)*C(7)*C(11) + RB(159) = RB(159)*C(7)*C(13) + RB(160) = RB(160)*C(7)*C(13) + RB(161) = RB(161)*C(13) + RB(162) = RB(162)*C(1)*C(15) + RB(163) = RB(163)*C(7)*C(16) + RB(164) = RB(164)*C(5)*C(11)*C(11) + RB(165) = RB(165)*C(11)*C(11)*C(15) + RB(167) = RB(167)*C(2) + RB(168) = RB(168)*C(4)*C(6) + RB(170) = RB(170)*C(9) + RB(172) = RB(172)*C(3)*C(13) + RB(175) = RB(175)*C(3) + RB(176) = RB(176)*C(7)*C(15) + RB(181) = RB(181)*C(9) + RB(182) = RB(182)*C(18)*C(1) + RB(183) = RB(183)*C(6)*C(18) +! +! END +! ! +! ----------------------------------------------------------------------! +! ! +! +! solving QSS species concentration +! ------------------------------------------- +! +! SUBROUTINE QSSA(RF, RB, XQ) +! IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! PARAMETER (SMALL = 1.D-200) +! DIMENSION RF(*), RB(*), XQ(*) +! + RF(119) = 0.D0 + RF(125) = 0.D0 + RF(128) = 0.D0 + RF(132) = 0.D0 + RF(165) = 0.D0 + RF(173) = 0.D0 + RB(180) = 0.D0 + RB(184) = 0.D0 + +! C + DEN = +RF( 85) +RF(114) +RF(115) +RB( 46) + A1_0 = ( +RB( 85) +RB(114) +RB(115) )/MAX(DEN, SMALL) + A1_2 = ( +RF( 46) )/MAX(DEN, SMALL) +! CH + DEN = +RF( 6) +RF( 46) +RF( 86) +RF(116) +RF(117) & + +RF(118) +RF(120) +RF(121) +RF(122) +RF(123) +RF(124) & + +RF(170) +RB( 48) +RB( 88) + A2_0 = ( +RB( 6) +RB(118) +RB(119) +RB(121) +RB(124) & + +RB(125) +RB(170) )/MAX(DEN, SMALL) + A2_1 = ( +RB( 46) )/MAX(DEN, SMALL) + A2_3 = ( +RF( 88) +RB(117) )/MAX(DEN, SMALL) + A2_4 = ( +RF( 48) )/MAX(DEN, SMALL) + A2_5 = ( +RB( 86) +RB(116) +RB(123) )/MAX(DEN, SMALL) + A2_8 = ( +RB(120) )/MAX(DEN, SMALL) + + A2_10 = ( +RB(122) )/MAX(DEN, SMALL) +! CH2 + DEN = +RF( 7) +RF( 47) +RF( 87) +RF( 88) +RF(109) & + +RF(126) +RF(127) +RF(129) +RF(130) +RF(131) +RF(171) & + +RF(172) +RB( 21) +RB( 28) +RB( 91) +RB(117) +RB(133) & + +RB(138) +RB(141) +RB(142) +RB(178) + A3_0 = ( +RF( 21) +RF( 28) +RB( 47) +RB( 87) +RF( 91) & + +RB(109) +RB(119) +RB(126) +RB(127) +RB(128) +RB(128) & + +RB(129) +RB(130) +RB(131) +RB(171) +RB(172) +RB(173) & + +RB(173) )/MAX(DEN, SMALL) + A3_2 = ( +RB( 88) +RF(117) )/MAX(DEN, SMALL) + A3_4 = ( +RF(133) +RF(138) +RF(141) +RF(142) )/MAX(DEN, SMALL) + A3_5 = ( +RB( 7) )/MAX(DEN, SMALL) + A3_8 = ( +RB(132) )/MAX(DEN, SMALL) + A3_11 = ( +RF(178) )/MAX(DEN, SMALL) +! CH2(S) + DEN = +RF( 8) +RF( 9) +RF( 48) +RF( 89) +RF(133) & + +RF(134) +RF(135) +RF(136) +RF(137) +RF(138) +RF(139) & + +RF(140) +RF(141) +RF(142) +RF(143) +RF(144) +RF(174) & + +RB( 59) +RB( 64) +RB( 75) +RB( 92) + A4_0 = ( +RB( 8) +RB( 89) +RF( 92) +RB(134) +RB(135) & + +RB(136) +RB(137) +RB(139) +RB(140) +RB(143) +RB(174) )& + /MAX(DEN, SMALL) + A4_2 = ( +RB( 48) )/MAX(DEN, SMALL) + A4_3 = ( +RB(133) +RB(138) +RB(141) +RB(142) )/MAX(DEN, SMALL) + A4_5 = ( +RB( 9) )/MAX(DEN, SMALL) + A4_6 = ( +RF( 59) )/MAX(DEN, SMALL) + A4_7 = ( +RF( 64) )/MAX(DEN, SMALL) + A4_9 = ( +RB(144) )/MAX(DEN, SMALL) + A4_10 = ( +RF( 75) )/MAX(DEN, SMALL) +! HCO + DEN = +RF( 13) +RF( 14) +RF( 51) +RF( 52) +RF( 95) & + +RF(150) +RF(156) +RF(157) +RF(158) +RB( 7) +RB( 9) & + +RB( 15) +RB( 23) +RB( 30) +RB( 55) +RB( 86) +RB( 96) & + +RB(113) +RB(116) +RB(123) +RB(151) +RB(161) +RB(181) + A5_0 = ( +RB( 13) +RB( 14) +RF( 15) +RF( 23) +RF( 30) & + +RB( 51) +RB( 52) +RF( 55) +RB( 95) +RF( 96) +RF(113) & + +RB(150) +RF(151) +RB(156) +RB(157) +RB(158) )/MAX(DEN, SMALL) + A5_2 = ( +RF( 86) +RF(116) +RF(123) )/MAX(DEN, SMALL) + A5_3 = ( +RF( 7) )/MAX(DEN, SMALL) + A5_4 = ( +RF( 9) )/MAX(DEN, SMALL) + A5_8 = ( +RF(161) )/MAX(DEN, SMALL) + A5_11 = ( +RF(180) +RF(180) +RF(181) +RF(184) )/MAX(DEN, SMALL) +! CH2OH + DEN = +RF( 16) +RF( 56) +RF( 57) +RF( 58) +RF( 59) & + +RF( 97) +RF(159) +RB( 18) +RB( 53) +RB( 61) +RB( 65) & + +RB( 99) +RB(152) + A6_0 = ( +RB( 16) +RF( 18) +RF( 53) +RB( 56) +RB( 57) & + +RB( 58) +RF( 65) +RB( 97) +RF( 99) +RF(152) +RB(159) )& + /MAX(DEN, SMALL) + A6_4 = ( +RB( 59) )/MAX(DEN, SMALL) + A6_7 = ( +RF( 61) )/MAX(DEN, SMALL) + A6_11 = ( +RF(184) )/MAX(DEN, SMALL) +! CH3O + DEN = +RF( 17) +RF( 60) +RF( 61) +RF( 62) +RF( 63) & + +RF( 64) +RF( 98) +RF(160) +RB( 19) +RB( 54) +RB( 66) & + +RB(100) +RB(111) +RB(145) +RB(153) + A7_0 = ( +RB( 17) +RF( 19) +RF( 54) +RB( 60) +RB( 62) & + +RB( 63) +RF( 66) +RB( 98) +RF(100) +RF(111) +RF(145) & + +RF(153) +RB(160) )/MAX(DEN, SMALL) + A7_4 = ( +RB( 64) )/MAX(DEN, SMALL) + A7_6 = ( +RB( 61) )/MAX(DEN, SMALL) +! C2H3 + DEN = +RF( 22) +RF( 68) +RF( 69) +RF(103) +RF(161) & + +RF(175) +RF(176) +RB( 67) +RB( 71) +RB(104) +RB(120) & + +RB(132) +RB(154) + A8_0 = ( +RB( 22) +RF( 67) +RB( 68) +RB( 69) +RF( 71) & + +RB(103) +RF(104) +RF(154) +RB(176) )/MAX(DEN, SMALL) + A8_2 = ( +RF(120) )/MAX(DEN, SMALL) + A8_5 = ( +RB(161) )/MAX(DEN, SMALL) + A8_11 = ( +RB(175) )/MAX(DEN, SMALL) +! C2H5 + DEN = +RF( 24) +RF( 72) +RF( 73) +RF(163) +RB( 25) & + +RB( 70) +RB( 74) +RB(105) +RB(144) +RB(149) +RB(155) + A9_0 = ( +RB( 24) +RF( 25) +RF( 70) +RB( 72) +RB( 73) & + +RF( 74) +RF(105) +RF(149) +RF(155) +RB(163) )/MAX(DEN, SMALL) + A9_4 = ( +RF(144) )/MAX(DEN, SMALL) +! HCCO + DEN = +RF( 26) +RF( 75) +RF(164) +RB( 20) +RB( 27) & + +RB( 76) +RB(106) +RB(122) + A10_0 = ( +RF( 20) +RB( 26) +RF( 27) +RF( 76) +RF(106) & + +RB(125) +RB(164) +RB(165) +RB(165) )/MAX(DEN, SMALL) + A10_2 = ( +RF(122) )/MAX(DEN, SMALL) + A10_4 = ( +RB( 75) )/MAX(DEN, SMALL) + A10_8 = ( +RB(132) )/MAX(DEN, SMALL) +! CH2CHO + DEN = +RF(178) +RF(179) +RF(180) +RF(181) +RF(182) & + +RF(183) +RF(184) +RB(167) +RB(175) +RB(177) + A11_0 = ( +RF(167) +RF(177) +RB(179) +RB(182) +RB(183) )& + /MAX(DEN, SMALL) + A11_5 = ( +RB(181) )/MAX(DEN, SMALL) + A11_8 = ( +RF(175) )/MAX(DEN, SMALL) +! + A2_0 = A2_0 + A2_1*A1_0 + DEN = 1 -A2_1*A1_2 + A2_0 = A2_0/MAX(DEN, SMALL) + A2_4 = A2_4/MAX(DEN, SMALL) + A2_5 = A2_5/MAX(DEN, SMALL) + A2_3 = A2_3/MAX(DEN, SMALL) + A2_10 = A2_10/MAX(DEN, SMALL) + A2_8 = A2_8/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_9*A9_0 + DEN = 1 -A4_9*A9_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A4_5 = A4_5/MAX(DEN, SMALL) + A4_3 = A4_3/MAX(DEN, SMALL) + A4_6 = A4_6/MAX(DEN, SMALL) + A4_10 = A4_10/MAX(DEN, SMALL) + A4_7 = A4_7/MAX(DEN, SMALL) + A5_0 = A5_0 + A5_11*A11_0 + A5_8 = A5_8 + A5_11*A11_8 + DEN = 1 -A5_11*A11_5 + A5_0 = A5_0/MAX(DEN, SMALL) + A5_4 = A5_4/MAX(DEN, SMALL) + A5_2 = A5_2/MAX(DEN, SMALL) + A5_3 = A5_3/MAX(DEN, SMALL) + A5_8 = A5_8/MAX(DEN, SMALL) + A3_0 = A3_0 + A3_11*A11_0 + A3_5 = A3_5 + A3_11*A11_5 + A3_8 = A3_8 + A3_11*A11_8 + A6_0 = A6_0 + A6_11*A11_0 + A6_5 = A6_11*A11_5 + A6_8 = A6_11*A11_8 + A8_0 = A8_0 + A8_11*A11_0 + A8_5 = A8_5 + A8_11*A11_5 + DEN = 1 -A8_11*A11_8 + A8_0 = A8_0/MAX(DEN, SMALL) + A8_2 = A8_2/MAX(DEN, SMALL) + A8_5 = A8_5/MAX(DEN, SMALL) + A2_0 = A2_0 + A2_8*A8_0 + A2_5 = A2_5 + A2_8*A8_5 + DEN = 1 -A2_8*A8_2 + A2_0 = A2_0/MAX(DEN, SMALL) + A2_4 = A2_4/MAX(DEN, SMALL) + A2_5 = A2_5/MAX(DEN, SMALL) + A2_3 = A2_3/MAX(DEN, SMALL) + A2_10 = A2_10/MAX(DEN, SMALL) + A5_0 = A5_0 + A5_8*A8_0 + A5_2 = A5_2 + A5_8*A8_2 + DEN = 1 -A5_8*A8_5 + A5_0 = A5_0/MAX(DEN, SMALL) + A5_4 = A5_4/MAX(DEN, SMALL) + A5_2 = A5_2/MAX(DEN, SMALL) + A5_3 = A5_3/MAX(DEN, SMALL) + A3_0 = A3_0 + A3_8*A8_0 + A3_2 = A3_2 + A3_8*A8_2 + A3_5 = A3_5 + A3_8*A8_5 + A6_0 = A6_0 + A6_8*A8_0 + A6_2 = A6_8*A8_2 + A6_5 = A6_5 + A6_8*A8_5 + A10_0 = A10_0 + A10_8*A8_0 + A10_2 = A10_2 + A10_8*A8_2 + A10_5 = A10_8*A8_5 + A4_0 = A4_0 + A4_7*A7_0 + A4_6 = A4_6 + A4_7*A7_6 + DEN = 1 -A4_7*A7_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A4_5 = A4_5/MAX(DEN, SMALL) + A4_3 = A4_3/MAX(DEN, SMALL) + A4_6 = A4_6/MAX(DEN, SMALL) + A4_10 = A4_10/MAX(DEN, SMALL) + A6_0 = A6_0 + A6_7*A7_0 + A6_4 = A6_4 + A6_7*A7_4 + DEN = 1 -A6_7*A7_6 + A6_0 = A6_0/MAX(DEN, SMALL) + A6_4 = A6_4/MAX(DEN, SMALL) + A6_2 = A6_2/MAX(DEN, SMALL) + A6_5 = A6_5/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_10*A10_0 + A4_2 = A4_2 + A4_10*A10_2 + A4_5 = A4_5 + A4_10*A10_5 + DEN = 1 -A4_10*A10_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A4_5 = A4_5/MAX(DEN, SMALL) + A4_3 = A4_3/MAX(DEN, SMALL) + A4_6 = A4_6/MAX(DEN, SMALL) + A2_0 = A2_0 + A2_10*A10_0 + A2_4 = A2_4 + A2_10*A10_4 + A2_5 = A2_5 + A2_10*A10_5 + DEN = 1 -A2_10*A10_2 + A2_0 = A2_0/MAX(DEN, SMALL) + A2_4 = A2_4/MAX(DEN, SMALL) + A2_5 = A2_5/MAX(DEN, SMALL) + A2_3 = A2_3/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_6*A6_0 + A4_2 = A4_2 + A4_6*A6_2 + A4_5 = A4_5 + A4_6*A6_5 + DEN = 1 -A4_6*A6_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A4_5 = A4_5/MAX(DEN, SMALL) + A4_3 = A4_3/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_3*A3_0 + A4_2 = A4_2 + A4_3*A3_2 + A4_5 = A4_5 + A4_3*A3_5 + DEN = 1 -A4_3*A3_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A4_5 = A4_5/MAX(DEN, SMALL) + A2_0 = A2_0 + A2_3*A3_0 + A2_4 = A2_4 + A2_3*A3_4 + A2_5 = A2_5 + A2_3*A3_5 + DEN = 1 -A2_3*A3_2 + A2_0 = A2_0/MAX(DEN, SMALL) + A2_4 = A2_4/MAX(DEN, SMALL) + A2_5 = A2_5/MAX(DEN, SMALL) + A5_0 = A5_0 + A5_3*A3_0 + A5_4 = A5_4 + A5_3*A3_4 + A5_2 = A5_2 + A5_3*A3_2 + DEN = 1 -A5_3*A3_5 + A5_0 = A5_0/MAX(DEN, SMALL) + A5_4 = A5_4/MAX(DEN, SMALL) + A5_2 = A5_2/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_5*A5_0 + A4_2 = A4_2 + A4_5*A5_2 + DEN = 1 -A4_5*A5_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A2_0 = A2_0 + A2_5*A5_0 + A2_4 = A2_4 + A2_5*A5_4 + DEN = 1 -A2_5*A5_2 + A2_0 = A2_0/MAX(DEN, SMALL) + A2_4 = A2_4/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_2*A2_0 + DEN = 1 -A4_2*A2_4 + A4_0 = A4_0/MAX(DEN, SMALL) + XQ(4) = A4_0 + XQ(2) = A2_0 +A2_4*XQ(4) + XQ(5) = A5_0 +A5_4*XQ(4) +A5_2*XQ(2) + XQ(3) = A3_0 +A3_4*XQ(4) +A3_2*XQ(2) +A3_5*XQ(5) + XQ(6) = A6_0 +A6_4*XQ(4) +A6_2*XQ(2) +A6_5*XQ(5) + XQ(10) = A10_0 +A10_4*XQ(4) +A10_2*XQ(2) +A10_5*XQ(5) + XQ(7) = A7_0 +A7_4*XQ(4) +A7_6*XQ(6) + XQ(8) = A8_0 +A8_2*XQ(2) +A8_5*XQ(5) + XQ(11) = A11_0 +A11_5*XQ(5) +A11_8*XQ(8) + XQ(9) = A9_0 +A9_4*XQ(4) + XQ(1) = A1_0 +A1_2*XQ(2) +! +! +! --------------------------------------------- +! +! update rates of reactions involving QSS species +! + RF( 6) = RF( 6)*XQ( 2) + RF( 7) = RF( 7)*XQ( 3) + RB( 7) = RB( 7)*XQ( 5) + RF( 8) = RF( 8)*XQ( 4) + RF( 9) = RF( 9)*XQ( 4) + RB( 9) = RB( 9)*XQ( 5) + RF( 13) = RF( 13)*XQ( 5) + RF( 14) = RF( 14)*XQ( 5) + RB( 15) = RB( 15)*XQ( 5) + RF( 16) = RF( 16)*XQ( 6) + RF( 17) = RF( 17)*XQ( 7) + RB( 18) = RB( 18)*XQ( 6) + RB( 19) = RB( 19)*XQ( 7) + RB( 20) = RB( 20)*XQ(10) + RB( 21) = RB( 21)*XQ( 3) + RF( 22) = RF( 22)*XQ( 8) + RB( 23) = RB( 23)*XQ( 5) + RF( 24) = RF( 24)*XQ( 9) + RB( 25) = RB( 25)*XQ( 9) + RF( 26) = RF( 26)*XQ(10) + RB( 27) = RB( 27)*XQ(10) + RB( 28) = RB( 28)*XQ( 3) + RB( 30) = RB( 30)*XQ( 5) + RF( 46) = RF( 46)*XQ( 2) + RB( 46) = RB( 46)*XQ( 1) + RF( 47) = RF( 47)*XQ( 3) + RF( 48) = RF( 48)*XQ( 4) + RB( 48) = RB( 48)*XQ( 2) + RF( 51) = RF( 51)*XQ( 5) + RF( 52) = RF( 52)*XQ( 5) + RB( 53) = RB( 53)*XQ( 6) + RB( 54) = RB( 54)*XQ( 7) + RB( 55) = RB( 55)*XQ( 5) + RF( 56) = RF( 56)*XQ( 6) + RF( 57) = RF( 57)*XQ( 6) + RF( 58) = RF( 58)*XQ( 6) + RF( 59) = RF( 59)*XQ( 6) + RB( 59) = RB( 59)*XQ( 4) + RF( 60) = RF( 60)*XQ( 7) + RF( 61) = RF( 61)*XQ( 7) + RB( 61) = RB( 61)*XQ( 6) + RF( 62) = RF( 62)*XQ( 7) + RF( 63) = RF( 63)*XQ( 7) + RF( 64) = RF( 64)*XQ( 7) + RB( 64) = RB( 64)*XQ( 4) + RB( 65) = RB( 65)*XQ( 6) + RB( 66) = RB( 66)*XQ( 7) + RB( 67) = RB( 67)*XQ( 8) + RF( 68) = RF( 68)*XQ( 8) + RF( 69) = RF( 69)*XQ( 8) + RB( 70) = RB( 70)*XQ( 9) + RB( 71) = RB( 71)*XQ( 8) + RF( 72) = RF( 72)*XQ( 9) + RF( 73) = RF( 73)*XQ( 9) + RB( 74) = RB( 74)*XQ( 9) + RF( 75) = RF( 75)*XQ(10) + RB( 75) = RB( 75)*XQ( 4) + RB( 76) = RB( 76)*XQ(10) + RF( 85) = RF( 85)*XQ( 1) + RF( 86) = RF( 86)*XQ( 2) + RB( 86) = RB( 86)*XQ( 5) + RF( 87) = RF( 87)*XQ( 3) + RF( 88) = RF( 88)*XQ( 3) + RB( 88) = RB( 88)*XQ( 2) + RF( 89) = RF( 89)*XQ( 4) + RB( 91) = RB( 91)*XQ( 3) + RB( 92) = RB( 92)*XQ( 4) + RF( 95) = RF( 95)*XQ( 5) + RB( 96) = RB( 96)*XQ( 5) + RF( 97) = RF( 97)*XQ( 6) + RF( 98) = RF( 98)*XQ( 7) + RB( 99) = RB( 99)*XQ( 6) + RB(100) = RB(100)*XQ( 7) + RF(103) = RF(103)*XQ( 8) + RB(104) = RB(104)*XQ( 8) + RB(105) = RB(105)*XQ( 9) + RB(106) = RB(106)*XQ(10) + RF(109) = RF(109)*XQ( 3) + RB(111) = RB(111)*XQ( 7) + RB(113) = RB(113)*XQ( 5) + RF(114) = RF(114)*XQ( 1) + RF(115) = RF(115)*XQ( 1) + RF(116) = RF(116)*XQ( 2) + RB(116) = RB(116)*XQ( 5) + RF(117) = RF(117)*XQ( 2) + RB(117) = RB(117)*XQ( 3) + RF(118) = RF(118)*XQ( 2) + RF(120) = RF(120)*XQ( 2) + RB(120) = RB(120)*XQ( 8) + RF(121) = RF(121)*XQ( 2) + RF(122) = RF(122)*XQ( 2) + RB(122) = RB(122)*XQ(10) + RF(123) = RF(123)*XQ( 2) + RB(123) = RB(123)*XQ( 5) + RF(124) = RF(124)*XQ( 2) + RF(126) = RF(126)*XQ( 3) + RF(127) = RF(127)*XQ( 3) + RF(129) = RF(129)*XQ( 3) + RF(130) = RF(130)*XQ( 3) + RF(131) = RF(131)*XQ( 3) + RB(132) = RB(132)*XQ( 8) + RF(133) = RF(133)*XQ( 4) + RB(133) = RB(133)*XQ( 3) + RF(134) = RF(134)*XQ( 4) + RF(135) = RF(135)*XQ( 4) + RF(136) = RF(136)*XQ( 4) + RF(137) = RF(137)*XQ( 4) + RF(138) = RF(138)*XQ( 4) + RB(138) = RB(138)*XQ( 3) + RF(139) = RF(139)*XQ( 4) + RF(140) = RF(140)*XQ( 4) + RF(141) = RF(141)*XQ( 4) + RB(141) = RB(141)*XQ( 3) + RF(142) = RF(142)*XQ( 4) + RB(142) = RB(142)*XQ( 3) + RF(143) = RF(143)*XQ( 4) + RF(144) = RF(144)*XQ( 4) + RB(144) = RB(144)*XQ( 9) + RB(145) = RB(145)*XQ( 7) + RB(149) = RB(149)*XQ( 9) + RF(150) = RF(150)*XQ( 5) + RB(151) = RB(151)*XQ( 5) + RB(152) = RB(152)*XQ( 6) + RB(153) = RB(153)*XQ( 7) + RB(154) = RB(154)*XQ( 8) + RB(155) = RB(155)*XQ( 9) + RF(156) = RF(156)*XQ( 5) + RF(157) = RF(157)*XQ( 5) + RF(158) = RF(158)*XQ( 5) + RF(159) = RF(159)*XQ( 6) + RF(160) = RF(160)*XQ( 7) + RF(161) = RF(161)*XQ( 8) + RB(161) = RB(161)*XQ( 5) + RF(163) = RF(163)*XQ( 9) + RF(164) = RF(164)*XQ(10) + RB(167) = RB(167)*XQ(11) + RF(170) = RF(170)*XQ( 2) + RF(171) = RF(171)*XQ( 3) + RF(172) = RF(172)*XQ( 3) + RF(174) = RF(174)*XQ( 4) + RF(175) = RF(175)*XQ( 8) + RB(175) = RB(175)*XQ(11) + RF(176) = RF(176)*XQ( 8) + RB(177) = RB(177)*XQ(11) + RF(178) = RF(178)*XQ(11) + RB(178) = RB(178)*XQ( 3) + RF(179) = RF(179)*XQ(11) + RF(180) = RF(180)*XQ(11) + RF(181) = RF(181)*XQ(11) + RB(181) = RB(181)*XQ( 5) + RF(182) = RF(182)*XQ(11) + RF(183) = RF(183)*XQ(11) + RF(184) = RF(184)*XQ(11) +! +! END +! ! +! ----------------------------------------------------------------------! +! ! +! +! ! ompute WDOT +! +! SUBROUTINE RDOT(RF, RB, WDOT) +! IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! DIMENSION RF(*), RB(*), WDOT(*), ROP(184) +! + DO I = 1, 184 + ROP(I) = RF(I) - RB(I) + ENDDO +! +! H2 + WDOT( 1) = -ROP( 3) +ROP( 8) +ROP( 36) +ROP( 37) & + +ROP( 38) +ROP( 39) +ROP( 42) +ROP( 44) & + +ROP( 46) +ROP( 48) +ROP( 50) +ROP( 52) & + +ROP( 55) +ROP( 57) +ROP( 62) +ROP( 65) & + +ROP( 66) +ROP( 69) +ROP( 71) +ROP( 73) & + +ROP( 74) +ROP( 76) -ROP( 78) -ROP( 79) & + -ROP(117) -ROP(127) +ROP(128) -ROP(136) & + +ROP(162) +ROP(166) +ROP(169) -ROP(170) & + +ROP(174) +ROP(182) +! H + WDOT( 2) = -ROP( 2) +ROP( 3) +ROP( 6) -ROP( 7) & + -2*ROP( 8) -ROP( 9) +ROP( 10) +ROP( 14) & + -ROP( 17) +ROP( 19) +ROP( 20) +2*ROP( 21) & + -ROP( 24) +ROP( 25) +ROP( 26) +2*ROP( 28) & + -ROP( 31) -ROP( 32) -ROP( 33) -ROP( 34) & + -ROP( 35) -2*ROP( 36) -2*ROP( 37) -2*ROP( 38) & + -2*ROP( 39) -ROP( 40) -ROP( 41) -ROP( 42) & + -ROP( 43) -ROP( 44) -ROP( 45) -ROP( 46) & + -3*ROP( 47) -3*ROP( 48) -ROP( 49) -ROP( 50) & + -ROP( 51) -ROP( 52) -ROP( 53) -ROP( 55) & + -ROP( 56) -ROP( 57) -ROP( 58) +ROP( 59) & + -2*ROP( 60) -ROP( 61) -2*ROP( 62) -2*ROP( 63) & + -ROP( 65) -2*ROP( 68) -2*ROP( 69) -2*ROP( 72) & + -2*ROP( 73) +ROP( 75) -ROP( 76) -ROP( 77) & + +ROP( 79) +ROP( 85) +ROP( 86) -ROP( 87) & + -2*ROP( 88) -ROP( 89) +2*ROP( 91) +2*ROP( 92) & + +ROP( 94) -ROP( 98) +ROP(100) +ROP(101) & + -ROP(103) +ROP(104) +ROP(105) -2*ROP(109) & + +ROP(111) +ROP(115) +3*ROP(117) +ROP(118) & + -ROP(119) +2*ROP(120) +ROP(121) +ROP(124) & + -ROP(126) -ROP(127) -4*ROP(128) -ROP(129) & + -2*ROP(130) -2*ROP(131) -ROP(132) -ROP(134) & + -2*ROP(135) -ROP(136) -2*ROP(137) -ROP(139) & + -2*ROP(140) -2*ROP(143) -ROP(144) +ROP(145) & + +2*ROP(149) +ROP(153) +ROP(154) +ROP(155) & + +ROP(156) +ROP(157) -ROP(160) -ROP(161) & + -ROP(163) +ROP(166) +2*ROP(167) -2*ROP(172) & + -2*ROP(173) -2*ROP(174) -ROP(176) +2*ROP(178) & + -ROP(179) -ROP(180) -2*ROP(181) -2*ROP(182) & + -ROP(183) -ROP(184) +! O + WDOT( 3) = -2*ROP( 1) -ROP( 2) -ROP( 3) -ROP( 4) & + -ROP( 5) -2*ROP( 6) -ROP( 7) -ROP( 8) & + -ROP( 9) -ROP( 10) -ROP( 11) -ROP( 12) & + -ROP( 13) -ROP( 14) -ROP( 15) -ROP( 16) & + -ROP( 17) -ROP( 18) -ROP( 19) -ROP( 20) & + -ROP( 21) -2*ROP( 22) -ROP( 23) -ROP( 24) & + -ROP( 25) -ROP( 26) -ROP( 27) -ROP( 28) & + +ROP( 29) +ROP( 35) +ROP( 41) +ROP( 48) & + +ROP( 67) -ROP( 68) -ROP( 69) +ROP( 71) & + +ROP( 81) -ROP( 85) -ROP( 86) +ROP( 88) & + -ROP(103) +ROP(104) -ROP(115) -ROP(117) & + -ROP(118) -ROP(119) -ROP(121) -ROP(122) & + -ROP(123) -ROP(124) -ROP(125) +ROP(132) & + +ROP(145) +ROP(154) -ROP(161) -ROP(166) & + -ROP(167) -ROP(170) +ROP(172) -ROP(176) & + -ROP(178) +! O2 + WDOT( 4) = +ROP( 1) +ROP( 4) +2*ROP( 6) +ROP( 8) & + +ROP( 13) +ROP( 14) -ROP( 15) +ROP( 16) & + -ROP( 18) -ROP( 20) -ROP( 21) +ROP( 22) & + -ROP( 23) +ROP( 26) -ROP( 27) -ROP( 28) & + -ROP( 29) -2*ROP( 30) -ROP( 31) -ROP( 32) & + -ROP( 33) -ROP( 34) -ROP( 35) +ROP( 42) & + +ROP( 46) +ROP( 47) -ROP( 48) +ROP( 51) & + +ROP( 52) -ROP( 53) -ROP( 55) +ROP( 56) & + +ROP( 57) +ROP( 58) -ROP( 61) -ROP( 64) & + -ROP( 65) -ROP( 67) +ROP( 68) +ROP( 69) & + -ROP( 71) -ROP( 76) +ROP( 82) +ROP( 85) & + +ROP( 86) +ROP( 87) -ROP( 88) +ROP( 89) & + -ROP( 91) -ROP( 92) +ROP( 95) -ROP( 96) & + +ROP( 97) -ROP( 99) +ROP(103) -ROP(104) & + -ROP(106) +ROP(107) +ROP(108) +ROP(109) & + +ROP(110) -ROP(113) +ROP(115) +ROP(117) & + +2*ROP(118) +3*ROP(119) +ROP(120) +2*ROP(121) & + +ROP(122) +ROP(123) +2*ROP(124) +3*ROP(125) & + +ROP(127) +2*ROP(128) +ROP(129) +ROP(130) & + +ROP(131) +ROP(132) +ROP(136) +ROP(137) & + +ROP(139) +ROP(140) +ROP(143) +ROP(144) & + -ROP(145) -ROP(146) +ROP(150) -ROP(151) & + -ROP(152) -ROP(154) +ROP(156) +ROP(157) & + -ROP(160) -ROP(161) -ROP(163) +2*ROP(165) & + +ROP(168) +2*ROP(170) +2*ROP(173) +ROP(174) & + -ROP(178) -ROP(179) -3*ROP(180) -ROP(181) & + -2*ROP(184) +! OH + WDOT( 5) = +ROP( 2) +ROP( 3) +ROP( 4) +ROP( 5) & + +ROP( 11) +ROP( 13) +ROP( 15) +ROP( 16) & + +ROP( 17) +ROP( 18) +ROP( 19) +ROP( 20) & + +ROP( 25) -ROP( 26) +2*ROP( 27) +ROP( 35) & + -ROP( 40) +2*ROP( 43) +ROP( 45) +ROP( 58) & + +ROP( 63) -ROP( 75) +ROP( 76) -ROP( 79) & + -2*ROP( 80) -2*ROP( 81) -ROP( 82) -ROP( 83) & + -ROP( 84) -ROP( 85) -ROP( 86) -ROP( 87) & + -ROP( 88) -ROP( 89) -ROP( 90) -ROP( 91) & + -ROP( 92) -ROP( 93) -ROP( 94) -ROP( 95) & + -ROP( 96) -ROP( 97) -ROP( 98) -ROP( 99) & + -ROP(100) -ROP(101) -ROP(102) -ROP(103) & + -ROP(104) -ROP(105) +ROP(109) +ROP(111) & + +ROP(112) +ROP(122) -ROP(125) +ROP(126) & + -ROP(132) +ROP(134) +ROP(146) -2*ROP(165) & + -ROP(168) -ROP(169) +ROP(179) +ROP(180) & + -ROP(183) -ROP(184) +! H2O + WDOT( 6) = +ROP( 40) +ROP( 41) +ROP( 45) +ROP( 59) & + +ROP( 64) +ROP( 79) +ROP( 81) +ROP( 82) & + +ROP( 83) +ROP( 84) +ROP( 88) +ROP( 91) & + +ROP( 92) +ROP( 93) +ROP( 95) +ROP( 96) & + +ROP( 97) +ROP( 98) +ROP( 99) +ROP(100) & + +ROP(103) +ROP(104) +ROP(105) +ROP(106) & + -ROP(118) +ROP(135) -ROP(137) +ROP(168) & + -ROP(174) +ROP(183) +! HO2 + WDOT( 7) = -ROP( 4) +ROP( 5) -ROP( 6) +ROP( 7) & + +ROP( 9) -ROP( 13) -ROP( 14) +ROP( 15) & + -ROP( 16) +ROP( 18) +ROP( 23) +2*ROP( 30) & + +ROP( 31) +ROP( 32) +ROP( 33) +ROP( 34) & + -ROP( 41) -ROP( 42) -ROP( 43) +ROP( 44) & + -ROP( 46) +ROP( 48) -ROP( 51) -ROP( 52) & + +ROP( 53) +ROP( 55) -ROP( 56) -ROP( 57) & + -ROP( 58) -ROP( 59) +ROP( 61) +ROP( 65) & + -ROP( 82) +ROP( 83) +ROP( 84) +ROP( 88) & + -ROP( 95) +ROP( 96) -ROP( 97) +ROP( 99) & + -2*ROP(107) -2*ROP(108) -ROP(109) -ROP(110) & + -ROP(111) -ROP(112) -ROP(117) -ROP(118) & + -ROP(119) -ROP(120) -ROP(121) -ROP(122) & + -ROP(124) -ROP(125) +ROP(147) -ROP(150) & + +ROP(151) +ROP(152) -ROP(156) -ROP(157) & + +ROP(160) +ROP(161) +ROP(163) -ROP(168) & + -ROP(170) +ROP(176) +2*ROP(180) +ROP(181) & + +2*ROP(184) +! H2O2 + WDOT( 8) = -ROP( 5) -ROP( 44) -ROP( 45) +ROP( 80) & + -ROP( 83) -ROP( 84) +ROP(107) +ROP(108) & + +ROP(113) -ROP(147) +! CH3 + WDOT( 9) = -ROP( 10) +ROP( 11) +ROP( 23) +ROP( 24) & + +ROP( 47) -ROP( 49) +ROP( 50) +ROP( 58) & + +ROP( 63) +ROP( 77) -ROP( 90) -ROP( 91) & + -ROP( 92) +ROP( 93) +ROP(102) -ROP(110) & + -ROP(111) -ROP(115) -ROP(120) +ROP(127) & + -ROP(129) +2*ROP(130) +ROP(136) -ROP(139) & + +2*ROP(140) +ROP(144) -ROP(145) -ROP(146) & + -ROP(147) -2*ROP(148) -2*ROP(149) -ROP(150) & + -ROP(151) -ROP(152) -ROP(153) -ROP(154) & + -ROP(155) -ROP(166) -ROP(169) +ROP(170) & + +ROP(181) +! CH4 + WDOT(10) = -ROP( 11) +ROP( 49) -ROP( 50) -ROP( 93) & + +ROP(110) -ROP(121) -ROP(130) -ROP(140) & + +ROP(147) +ROP(150) +ROP(151) +ROP(152) & + +ROP(153) +ROP(154) +ROP(155) +! CO + WDOT(11) = +ROP( 7) +ROP( 8) +ROP( 9) -ROP( 12) & + -ROP( 14) +ROP( 15) +2*ROP( 20) +ROP( 21) & + +ROP( 23) +2*ROP( 27) -ROP( 29) +ROP( 30) & + +ROP( 48) -ROP( 51) +ROP( 55) -ROP( 75) & + +2*ROP( 76) +ROP( 77) -ROP( 78) +ROP( 88) & + -ROP( 94) +ROP( 96) +ROP(102) +2*ROP(106) & + -ROP(112) +ROP(113) -ROP(115) -ROP(117) & + -ROP(118) -ROP(119) -ROP(120) -ROP(121) & + +ROP(123) -ROP(124) -2*ROP(125) +ROP(126) & + -ROP(131) -ROP(132) +ROP(134) +ROP(135) & + +ROP(143) +ROP(151) +ROP(161) -2*ROP(165) & + +ROP(166) -ROP(170) +ROP(179) +2*ROP(180) & + +ROP(181) +ROP(184) +! CO2 + WDOT(12) = -ROP( 7) -ROP( 8) -ROP( 9) +ROP( 12) & + +ROP( 14) +ROP( 21) +2*ROP( 28) +ROP( 29) & + -ROP( 47) -ROP( 48) +ROP( 59) +ROP( 64) & + +ROP( 75) -ROP( 87) -ROP( 88) -ROP( 89) & + +ROP( 91) +ROP( 92) +ROP( 94) -ROP(109) & + +ROP(112) +ROP(117) -ROP(119) -ROP(123) & + -ROP(126) -ROP(127) -2*ROP(128) -ROP(129) & + -ROP(130) -ROP(131) -ROP(132) -ROP(134) & + -ROP(135) -ROP(136) -ROP(137) -ROP(139) & + -ROP(140) -2*ROP(143) -ROP(144) -ROP(172) & + -2*ROP(173) -ROP(174) +2*ROP(178) +! CH2O + WDOT(13) = +ROP( 10) -ROP( 15) +ROP( 18) +ROP( 19) & + +ROP( 24) -ROP( 30) +ROP( 51) -ROP( 55) & + -ROP( 56) -ROP( 58) -ROP( 59) -ROP( 60) & + -ROP( 63) -ROP( 64) +ROP( 65) +ROP( 66) & + +ROP( 78) +ROP( 87) +ROP( 89) -ROP( 96) & + +ROP( 99) +ROP(100) +ROP(109) +ROP(111) & + -ROP(113) +ROP(118) -ROP(124) +ROP(143) & + +ROP(145) +ROP(146) -ROP(151) +ROP(152) & + +ROP(153) +ROP(161) +ROP(169) +ROP(172) & + +ROP(174) +ROP(179) +ROP(184) +! CH3OH + WDOT(14) = -ROP( 18) -ROP( 19) +ROP( 56) +ROP( 60) & + -ROP( 65) -ROP( 66) +ROP( 90) -ROP( 99) & + -ROP(100) +ROP(137) -ROP(152) -ROP(153) +! C2H2 + WDOT(15) = -ROP( 20) -ROP( 21) -ROP( 67) +ROP( 69) & + -ROP(101) -ROP(102) +ROP(103) +ROP(115) & + +ROP(119) +ROP(125) +ROP(128) +ROP(162) & + +ROP(165) +ROP(173) +ROP(176) +! C2H4 + WDOT(16) = -ROP( 23) -ROP( 24) +ROP( 25) +ROP( 68) & + -ROP( 71) -ROP( 72) +ROP( 74) -ROP(104) & + +ROP(105) +ROP(121) +ROP(129) +ROP(139) & + +ROP(144) +ROP(149) -ROP(154) +ROP(155) & + -ROP(162) -ROP(167) +! C2H6 + WDOT(17) = -ROP( 25) +ROP( 72) -ROP( 74) -ROP(105) & + -ROP(144) +ROP(148) -ROP(155) +! CH2CO + WDOT(18) = -ROP( 27) -ROP( 28) +ROP( 67) -ROP( 68) & + -ROP( 69) +ROP( 71) -ROP( 76) -ROP( 77) & + +ROP(101) -ROP(103) +ROP(104) -ROP(106) & + +ROP(120) +ROP(124) +ROP(131) +ROP(132) & + +ROP(154) -ROP(161) +ROP(167) -ROP(176) & + -ROP(178) -ROP(179) -ROP(180) -ROP(181) & + -ROP(184) +! N2 + WDOT(19) = 0.0 + + ! Correction for unit compatibility in Cantera + WDOT(1:19) = WDOT(1:19)*1D6 + + RETURN + END \ No newline at end of file diff --git a/samples/python/AVBP/inputs/Lu_ARC.yaml b/samples/python/AVBP/inputs/Lu_ARC.yaml new file mode 100644 index 00000000000..b759a9f8c64 --- /dev/null +++ b/samples/python/AVBP/inputs/Lu_ARC.yaml @@ -0,0 +1,2231 @@ +units: {length: cm, quantity: mol, activation-energy: cal/mol} +solution: + generator: Cantera SolutionArray + cantera-version: 3.0.0 + git-commit: "'c4e2732'" + date: Tue Dec 19 21:16:13 2023 + reactants: + size: 1 + type: inlet + points: 1 + mass-flux: 0.3218542195132330 + temperature: 300.0 + pressure: 1.0e+05 + mass-fractions: + O2: 0.2201412376866278 + CH4: 0.05518666598235154 + N2: 0.7246720963310207 + flame: + CH2O: [2.512053803898528e-13, 5.963718667192086e-13, 4.060244108455286e-12, + 5.156316656302329e-11, 3.017932821671933e-10, 2.142704546543387e-09, + 1.568562522811727e-08, 5.473619662708908e-08, 2.178288436068591e-07, + 4.934890277869252e-07, 1.205591763701419e-06, 3.038693103931656e-06, + 5.031627156092249e-06, 8.563759718949816e-06, 1.476765182821246e-05, + 1.961492044427392e-05, 2.622122763716273e-05, 3.515119866218731e-05, + 4.709466611079824e-05, 5.458671776967307e-05, 6.327036179369539e-05, + 7.328761907561809e-05, 8.478338008155919e-05, 9.790155071489928e-05, + 1.127805870938681e-04, 1.295486366101845e-04, 1.483185539490984e-04, + 1.691830664707253e-04, 1.922103173599540e-04, 2.174399264348096e-04, + 2.448796000512884e-04, 2.745022214354262e-04, 3.062432846609130e-04, + 3.399985067070681e-04, 3.756214345279704e-04, 4.129207746025741e-04, + 4.323847811943790e-04, 4.521993972936451e-04, 4.723233214268235e-04, + 4.927110287561689e-04, 5.133125011166184e-04, 5.340729431694315e-04, + 5.549324859102945e-04, 5.758258692590154e-04, 5.966820854850825e-04, + 6.174239584000158e-04, 6.379676315080298e-04, 6.582219419524513e-04, + 6.780876667954507e-04, 6.974566468111822e-04, 7.162108238025886e-04, + 7.342196770134151e-04, 7.513419200445636e-04, 7.674291977936843e-04, + 7.823211015261201e-04, 7.892946052905859e-04, 7.958980892963555e-04, + 8.021076938821166e-04, 8.078989280537642e-04, 8.132467523024792e-04, + 8.181256795617379e-04, 8.225098951616811e-04, 8.263733961509715e-04, + 8.2969014977373e-04, 8.324342702061904e-04, 8.345802118728811e-04, + 8.361029767819781e-04, 8.369783323603977e-04, 8.371830352612549e-04, + 8.366950556054275e-04, 8.354937951696713e-04, 8.335602922292375e-04, + 8.308774052052658e-04, 8.274299670724441e-04, 8.232049027757485e-04, + 8.181913028096732e-04, 8.123804477390855e-04, 8.057657808664194e-04, + 7.983428295060086e-04, 7.901090793752616e-04, 7.810638113298180e-04, + 7.712079148043050e-04, 7.659642234609910e-04, 7.605176213276153e-04, + 7.548686445767433e-04, 7.490178071745198e-04, 7.429657316905899e-04, + 7.367131049895832e-04, 7.302606785328122e-04, 7.236092703438868e-04, + 7.167597692050895e-04, 7.097131411571825e-04, 7.024704384611451e-04, + 6.950328111454101e-04, 6.874015212204334e-04, 6.795779595947497e-04, + 6.715636656736668e-04, 6.633603495636184e-04, 6.549699167436230e-04, + 6.463944950007646e-04, 6.376364633609303e-04, 6.286984826804450e-04, + 6.195835275003e-04, 6.102949187040740e-04, 6.008363564655144e-04, + 5.912119529226917e-04, 5.814262639759097e-04, 5.714843195758585e-04, + 5.613916518498106e-04, 5.511543204069877e-04, 5.407789341708296e-04, + 5.302726691062779e-04, 5.196432812447529e-04, 5.088991144574764e-04, + 4.980491024890689e-04, 4.871027648372130e-04, 4.760701961482420e-04, + 4.649620488926223e-04, 4.537895091848745e-04, 4.425642657183772e-04, + 4.312984718939019e-04, 4.200047013284263e-04, 4.086958974496182e-04, + 3.973853163001656e-04, 3.860861491952930e-04, 3.748123955256286e-04, + 3.524058524845366e-04, 3.302655678924825e-04, 3.085009415350808e-04, + 2.872174732124539e-04, 2.665145251918756e-04, 2.464832733922401e-04, + 2.272049395143667e-04, 2.087493762734469e-04, 1.911740540960056e-04, + 1.745234722678595e-04, 1.588289926825976e-04, 1.441090719129753e-04, + 1.303698487634960e-04, 1.176060307004433e-04, 1.058020139949255e-04, + 9.493316895322364e-05, 8.496722273266425e-05, 7.586567714186971e-05, + 6.758520652776391e-05, 6.007899034033536e-05, 5.3297945279603e-05, + 4.719183223815456e-05, 4.171022290285856e-05, 3.680331940840278e-05, + 3.242262756609342e-05, 2.852148981016463e-05, 2.505548812856142e-05, + 2.198272999023423e-05, 1.926403182309834e-05, 1.686301514490703e-05, + 1.474613022020699e-05, 1.288262131725517e-05, 1.124444645438780e-05, + 9.806163112472248e-06, 8.544789874138437e-06, 6.491685361516127e-06, + 4.920595215427144e-06, 3.7214576397747e-06, 2.807681461655717e-06, + 2.111638540671e-06, 1.215662615565951e-06, 6.990879075994651e-07, + 4.017997463994176e-07, 2.306510178248878e-07, 1.317304021078908e-07, + 7.382178264448285e-08, 2.619514583643850e-08, 9.435383475207747e-09, + 3.485294093839820e-09, 1.351620117142246e-09, 5.774263667449611e-10, + 2.920739131071059e-10, 1.842645686851277e-10, 1.416524127549024e-10, + 1.232769812351168e-10, 1.139800305589785e-10, 1.050072707472174e-10, + 9.884576747644950e-11, 9.370045732547296e-11, 8.915905642331576e-11, + 8.508086222194009e-11, 8.138949011947937e-11, 7.500277862253659e-11, + 6.957878055863555e-11, 6.491425722362098e-11, 6.086185762977064e-11, + 5.731248931250820e-11, 5.418392028108043e-11, 4.899569711522903e-11, + 4.476107052376582e-11, 4.124835080091468e-11, 3.829568636857223e-11, + 3.578762189895e-11, 3.364129099651055e-11, 3.024996513966780e-11, + 2.759827739493516e-11, 2.548888277004327e-11, 2.250874349978082e-11, + 2.039262480686945e-11, 1.884339583254460e-11, 1.768834059092178e-11, + 1.629987579525711e-11, 1.629987579525711e-11] + CH3OH: [1.019917912083183e-14, 4.461874287585046e-14, 3.900316782862837e-13, + 5.126962652442178e-12, 3.007959813990653e-11, 2.136530543977868e-10, + 1.564140156178086e-09, 5.458291582987406e-09, 2.172254128506772e-08, + 4.921561785131939e-08, 1.202481206247883e-07, 3.031627878302e-07, + 5.021675989089862e-07, 8.551162888457013e-07, 1.475708632373651e-06, + 1.961281046251522e-06, 2.623833578566966e-06, 3.520732478121796e-06, + 4.722518318150359e-06, 5.477835441700381e-06, 6.354556304677208e-06, + 7.367603892905255e-06, 8.532397696251318e-06, 9.864519498389455e-06, + 1.137932406060218e-05, 1.309151127236611e-05, 1.501467516597722e-05, + 1.716083532749655e-05, 1.953993605712865e-05, 2.215926932016514e-05, + 2.502274458035284e-05, 2.812990395647854e-05, 3.147458783891928e-05, + 3.504323768556208e-05, 3.881304826202634e-05, 4.275059499037567e-05, + 4.4794650118452e-05, 4.686565768727598e-05, 4.895641444522829e-05, + 5.105942686379043e-05, 5.316706864139881e-05, 5.527170861546740e-05, + 5.736578822481295e-05, 5.944183713467164e-05, 6.149242588934334e-05, + 6.351006216277666e-05, 6.548704082398820e-05, 6.741525801566282e-05, + 6.928599724987597e-05, 7.108969281945228e-05, 7.281567388418278e-05, + 7.445174754031868e-05, 7.598415322910084e-05, 7.739764998474683e-05, + 7.867477858272513e-05, 7.925802349973774e-05, 7.979872384057984e-05, + 8.029380539618408e-05, 8.073998803110343e-05, 8.113377907845442e-05, + 8.147146907534291e-05, 8.174913049359499e-05, 8.196262022966811e-05, + 8.210758672579213e-05, 8.217948269622934e-05, 8.217358452045435e-05, + 8.208501942934748e-05, 8.190880163921969e-05, 8.163987856778155e-05, + 8.127318818060371e-05, 8.080372835006722e-05, 8.022663884557640e-05, + 7.953729620029980e-05, 7.873142120643635e-05, 7.780519817503574e-05, + 7.675540436394964e-05, 7.557954714657073e-05, 7.427600559663195e-05, + 7.284417224788075e-05, 7.128458991480687e-05, 6.959907770837226e-05, + 6.779083983293746e-05, 6.684018330020625e-05, 6.586055748809e-05, + 6.485279258475946e-05, 6.381779956888434e-05, 6.275659379512445e-05, + 6.167028609041080e-05, 6.056008089612305e-05, 5.9427273630704e-05, + 5.827324732718327e-05, 5.709946852625739e-05, 5.590748243568730e-05, + 5.469890737695739e-05, 5.347542855038989e-05, 5.223879116011485e-05, + 5.099079295022077e-05, 4.973327621277473e-05, 4.846811933710403e-05, + 4.719722797745967e-05, 4.592252592280129e-05, 4.464594575780501e-05, + 4.336941940807253e-05, 4.209486866491092e-05, 4.082419578581656e-05, + 3.955927426590947e-05, 3.830193987307409e-05, 3.705398203547515e-05, + 3.581713566454082e-05, 3.459307348960847e-05, 3.338339897227976e-05, + 3.218963985942286e-05, 3.101324242385337e-05, 2.985556643122993e-05, + 2.871788086089589e-05, 2.7601360397499e-05, 2.650708269942364e-05, + 2.543602643966922e-05, 2.438907010488863e-05, 2.336699152912846e-05, + 2.237046813049498e-05, 2.140007781157045e-05, 2.045630051262481e-05, + 1.953952025823661e-05, 1.865000298506206e-05, 1.778797457391398e-05, + 1.614836132007402e-05, 1.461861694376140e-05, 1.319757779424587e-05, + 1.188304214639968e-05, 1.067192538044947e-05, 9.560414494522923e-06, + 8.544117447204134e-06, 7.618203842232729e-06, 6.777534439439278e-06, + 6.016777853625110e-06, 5.330513556732240e-06, 4.713320917066815e-06, + 4.159854495022304e-06, 3.664906179219262e-06, 3.223455006533883e-06, + 2.830705681939055e-06, 2.482116916487524e-06, 2.173420749170285e-06, + 1.900634023342056e-06, 1.660063161029206e-06, 1.448303326756173e-06, + 1.262233002936277e-06, 1.099004916577e-06, 9.560341664005774e-07, + 8.309843042072069e-07, 7.217520276381694e-07, 6.264510461984738e-07, + 5.433955907876434e-07, 4.710839509021350e-07, 4.081823444656104e-07, + 3.535093537794089e-07, 3.060210977662160e-07, 2.647972554744113e-07, + 2.290280083006785e-07, 1.980019278080797e-07, 1.483289185093184e-07, + 1.110132368518036e-07, 8.299873986792812e-08, 6.196242941013099e-08, + 4.614243329933923e-08, 2.615083625476107e-08, 1.483755339113642e-08, + 8.429267295634544e-09, 4.789704573804499e-09, 2.710492931099759e-09, + 1.505148355422601e-09, 5.259210379608408e-10, 1.856916052104819e-10, + 6.627127873321577e-11, 2.390525088513364e-11, 8.714481779706751e-12, + 3.210033115277991e-12, 1.194507751993993e-12, 4.484941375597478e-13, + 1.684163167711192e-13, 5.894016060594402e-14, 1.110950829137291e-14, + 2.232742374862688e-15, 5.281890457577288e-16, 1.856309285084594e-16, + 1.098524882630503e-16, 8.800057677991044e-17, 7.295480642641860e-17, + 6.312017960358307e-17, 5.541304538418711e-17, 4.915153591475078e-17, + 4.398464559015592e-17, 3.967219132181059e-17, 3.302128618538845e-17, + 2.804260978160036e-17, 2.421784033201756e-17, 2.121510902510763e-17, + 1.881568372251813e-17, 1.687178673070478e-17, 1.400673123492080e-17, + 1.193995482105032e-17, 1.040483969920518e-17, 8.401558260635511e-18, + 7.096248486376584e-18, 6.202929743654962e-18, 5.571385525660313e-18, + 4.851570506305564e-18, 4.851570506305564e-18] + C2H2: [1.689797897198223e-16, 1.451278835097030e-14, 1.584581649851428e-13, + 2.132499220912569e-12, 1.253111540897391e-11, 8.903245003210037e-11, + 6.518265922743924e-10, 2.274652622674125e-09, 9.052521645150581e-09, + 2.050982964968038e-08, 5.011153283588386e-08, 1.263387227424394e-07, + 2.092728991889542e-07, 3.563669569125761e-07, 6.150231924760664e-07, + 8.174356948309019e-07, 1.093666623402462e-06, 1.467693292870607e-06, + 1.969058805388932e-06, 2.284319974280443e-06, 2.650405249019945e-06, + 3.073637596791984e-06, 3.560592730713039e-06, 4.117979440776793e-06, + 4.752505349195071e-06, 5.470739027895769e-06, 6.278981339483269e-06, + 7.183158618849304e-06, 8.188747639323089e-06, 9.300737647471741e-06, + 1.052362917368353e-05, 1.186146418247950e-05, 1.331787860419926e-05, + 1.489616707094167e-05, 1.659935075754122e-05, 1.843024172910977e-05, + 1.940862540296959e-05, 2.042199064858566e-05, 2.147068766056979e-05, + 2.255505957660991e-05, 2.367544341208797e-05, 2.483217074762333e-05, + 2.602556827111021e-05, 2.725595834429568e-05, 2.852365983867814e-05, + 2.982898956627511e-05, 3.117226472394934e-05, 3.255380688723120e-05, + 3.397394824486202e-05, 3.543304096948548e-05, 3.693147087334019e-05, + 3.846954081163404e-05, 4.004768839500497e-05, 4.166696655389206e-05, + 4.332876328092707e-05, 4.418159089919452e-05, 4.504603201469146e-05, + 4.592241042846687e-05, 4.681109380845873e-05, 4.771249803663955e-05, + 4.862709137659168e-05, 4.955539818117916e-05, 5.049800175288201e-05, + 5.145554583516360e-05, 5.242873404878463e-05, 5.341832639029621e-05, + 5.442513168139561e-05, 5.544999460129399e-05, 5.649377565880265e-05, + 5.755732218254267e-05, 5.864142815141960e-05, 5.974678048860602e-05, + 6.087388934739928e-05, 6.202299998414286e-05, 6.319398410840024e-05, + 6.438620919438152e-05, 6.559838519751888e-05, 6.682838949945120e-05, + 6.807307273016224e-05, 6.932805037314730e-05, 7.058748767893911e-05, + 7.184388825648177e-05, 7.246887013274220e-05, 7.308936721833798e-05, + 7.370387748559660e-05, 7.431077492630163e-05, 7.490829229767223e-05, + 7.549452550303619e-05, 7.606743434052720e-05, 7.662484482803277e-05, + 7.716445319978358e-05, 7.768383170305230e-05, 7.818043629307037e-05, + 7.865161630196922e-05, 7.9094626131532e-05, 7.950663898999391e-05, + 7.988476266042e-05, 8.022605725274755e-05, 8.052755485403579e-05, + 8.078628095243784e-05, 8.099927747074006e-05, 8.116362720587732e-05, + 8.127647943250491e-05, 8.133507639263039e-05, 8.133678036030872e-05, + 8.127910094162804e-05, 8.115972224657910e-05, 8.097652955173548e-05, + 8.072763506185925e-05, 8.041140237511114e-05, 8.002646926103697e-05, + 7.957176837311844e-05, 7.904654553855362e-05, 7.845037529681637e-05, + 7.778317339507714e-05, 7.704520599212565e-05, 7.623709537213266e-05, + 7.535982202440863e-05, 7.441472300405439e-05, 7.340348654963115e-05, + 7.232814299644928e-05, 7.119105208598977e-05, 6.999488687602625e-05, + 6.874261434088315e-05, 6.743743657964273e-05, 6.608287235886243e-05, + 6.32398013471e-05, 6.024633943613078e-05, 5.713615086177983e-05, + 5.394392546078417e-05, 5.070436853570221e-05, 4.745125291826621e-05, + 4.421657433004203e-05, 4.102984115438957e-05, 3.791751859364126e-05, + 3.490263597320255e-05, 3.200455560960857e-05, 2.923889289641785e-05, + 2.661757052776949e-05, 2.414898525603538e-05, 2.1838263214886e-05, + 1.968757939943169e-05, 1.769651802987508e-05, 1.586245282647481e-05, + 1.418092927946974e-05, 1.264603443136145e-05, 1.125074318513686e-05, + 9.987233468554611e-06, 8.847165554440017e-06, 7.821923361669618e-06, + 6.902817600562718e-06, 6.081252183758712e-06, 5.348856434818636e-06, + 4.697586346775630e-06, 4.119798536339679e-06, 3.608300673157739e-06, + 3.156382100861516e-06, 2.757828164370068e-06, 2.406921464383419e-06, + 2.098432914559779e-06, 1.827605110146293e-06, 1.386209190940281e-06, + 1.048213458549714e-06, 7.902954819772736e-07, 5.939637452197747e-07, + 4.446888560544871e-07, 2.534144120864074e-07, 1.440026862067440e-07, + 8.166581330637614e-08, 4.620007394345445e-08, 2.596815252841324e-08, + 1.428145850824694e-08, 4.908492428676768e-09, 1.702418998533893e-09, + 5.965980674224338e-10, 2.114307013937321e-10, 7.581795246034397e-11, + 2.751964167118470e-11, 1.011130952450623e-11, 3.756755561798472e-12, + 1.398932371392651e-12, 4.856682403369416e-13, 9.056058861678949e-14, + 1.751809103049689e-14, 3.510159104916777e-15, 7.272882129462570e-16, + 1.547271153119531e-16, 2.895138276097154e-17, 2.708529410142823e-18, + 2.746146035828978e-19, 3.271017673696630e-20, 6.857786924017581e-21, + 3.717309035377308e-21, 3.131981841190142e-21, 2.717768834033391e-21, + 2.426329017317573e-21, 2.197770261762727e-21, 2.013301887276086e-21, + 1.861557805782856e-21, 1.734915372246098e-21, 1.540530057442954e-21, + 1.392252652261609e-21, 1.276226646076177e-21, 1.114618996283443e-21, + 1.000827028015979e-21, 9.178096878410649e-22, 8.559715233874792e-22, + 7.816299297527754e-22, 7.816299297527754e-22] + C2H4: [-2.905866113839914e-16, 9.900036464508422e-14, 1.095421518870416e-12, + 1.4760162722076e-11, 8.674164561856820e-11, 6.163005285833885e-10, + 4.512084073381887e-09, 1.574563919629343e-08, 6.266352465189727e-08, + 1.419735054785620e-07, 3.468829301053301e-07, 8.745439262048629e-07, + 1.448631077331804e-06, 2.466842862814576e-06, 4.257294854219637e-06, + 5.658398268212060e-06, 7.570442709901753e-06, 1.015935214815469e-05, + 1.362952040828843e-05, 1.581146161257125e-05, 1.834504375752504e-05, + 2.127395612624618e-05, 2.464360256809417e-05, 2.850025876489064e-05, + 3.2890123371225e-05, 3.785833719224570e-05, 4.344805754878360e-05, + 4.969967288927590e-05, 5.665022365986380e-05, 6.433306236482651e-05, + 7.277774578185702e-05, 8.201011428135437e-05, 9.205248431036505e-05, + 1.029238631170752e-04, 1.146400868449504e-04, 1.272137754550576e-04, + 1.339218016687261e-04, 1.408609977524924e-04, 1.480318959133225e-04, + 1.554346117462888e-04, 1.630687652160403e-04, 1.709333759418901e-04, + 1.790267260019572e-04, 1.873461818820765e-04, 1.958879653679325e-04, + 2.046468610523302e-04, 2.136158456719854e-04, 2.227856217451224e-04, + 2.321440350951656e-04, 2.416753529964301e-04, 2.513593769004125e-04, + 2.611694934078804e-04, 2.710726207000173e-04, 2.810303596672708e-04, + 2.909948495377988e-04, 2.959878146914720e-04, 3.009587967635449e-04, + 3.058978049079153e-04, 3.107937116774429e-04, 3.156341316896499e-04, + 3.204052915192118e-04, 3.250918920682678e-04, 3.296769654583362e-04, + 3.341417293999681e-04, 3.384654430071490e-04, 3.426252691048423e-04, + 3.465961491963736e-04, 3.503506983737614e-04, 3.538591285249460e-04, + 3.570892091686540e-04, 3.600062760773044e-04, 3.625732984734123e-04, + 3.647510159444318e-04, 3.664981562507107e-04, 3.677717448339812e-04, + 3.685275159980810e-04, 3.687204343514604e-04, 3.683053330851407e-04, + 3.672376729111773e-04, 3.654744218955894e-04, 3.629750518731086e-04, + 3.597026415181530e-04, 3.577594653300338e-04, 3.556102639675009e-04, + 3.532520002158861e-04, 3.506820654216373e-04, 3.478983723386935e-04, + 3.448993790511472e-04, 3.416841281860022e-04, 3.382522845771217e-04, + 3.346041710546994e-04, 3.307408017952632e-04, 3.266639126988286e-04, + 3.223759882485355e-04, 3.178802843051251e-04, 3.131808462955535e-04, + 3.082825222726563e-04, 3.031909703519361e-04, 2.979126600729914e-04, + 2.924548672869799e-04, 2.868256622376856e-04, 2.810338905820970e-04, + 2.750891471855906e-04, 2.690017426259320e-04, 2.627826624475269e-04, + 2.564435193205780e-04, 2.499964983766842e-04, 2.434542961103931e-04, + 2.368300533521397e-04, 2.301372829293377e-04, 2.233897927358080e-04, + 2.166016050225375e-04, 2.097868728024640e-04, 2.029597943259006e-04, + 1.961345266297007e-04, 1.893250991907609e-04, 1.825453287218614e-04, + 1.758087361351045e-04, 1.691284666651465e-04, 1.625172140920380e-04, + 1.559871499332510e-04, 1.495498583877392e-04, 1.432162779462030e-04, + 1.369966495159141e-04, 1.309003024089246e-04, 1.249361295268966e-04, + 1.134396770104106e-04, 1.025535915462902e-04, 9.231747709529921e-05, + 8.275773205616926e-05, 7.388816270859421e-05, 6.571094635152322e-05, + 5.821786225628317e-05, 5.139170440251873e-05, 4.520779217246250e-05, + 3.963550255688765e-05, 3.463975851263159e-05, 3.018242138136118e-05, + 2.622354931509008e-05, 2.272249726889192e-05, 1.963884642496986e-05, + 1.693316132819836e-05, 1.456758125633307e-05, 1.250625837690170e-05, + 1.071565919915332e-05, 9.164747976032844e-06, 7.825071374974237e-06, + 6.670763262610627e-06, 5.678487166864502e-06, 4.827332182262205e-06, + 4.098676013385491e-06, 3.476026696952177e-06, 2.944852444244672e-06, + 2.492407096665191e-06, 2.107556944844739e-06, 1.780613153292322e-06, + 1.503172763545407e-06, 1.267970209549104e-06, 1.068740450316979e-06, + 9.000941823034360e-07, 7.574051107643344e-07, 5.381003708629225e-07, + 3.815974630711220e-07, 2.700447901366948e-07, 1.905245996319728e-07, + 1.337137728524121e-07, 6.806529832302372e-08, 3.464941844571632e-08, + 1.764718032344266e-08, 8.983264173099947e-09, 4.542891060187289e-09, + 2.221453166414808e-09, 6.402119317057876e-10, 1.865097962118470e-10, + 5.496249729971114e-11, 1.639014756097851e-11, 4.946827062492753e-12, + 1.511157335102574e-12, 4.671663916718372e-13, 1.460178790350020e-13, + 4.572794846475383e-14, 1.293162514975487e-14, 1.846185988570354e-15, + 2.717784022667838e-16, 4.119911413875550e-17, 6.422306865331816e-18, + 1.024316235297810e-18, 1.377026106714976e-19, 8.733811779648720e-21, + 5.845896123486772e-22, 4.136742554325946e-23, 3.239754632155712e-24, + 4.029729044270589e-25, 1.582607199163309e-25, 1.098951792280957e-25, + 8.743941469499322e-26, 7.220037605457641e-26, 6.121019934937032e-26, + 5.300771238957482e-26, 4.672192007047290e-26, 3.803720040090890e-26, + 3.214939009973513e-26, 2.796745165706320e-26, 2.273527142452910e-26, + 1.943301857885007e-26, 1.720605911022982e-26, 1.563513066090035e-26, + 1.381385584547447e-26, 1.381385584547448e-26] + C2H6: [-2.182725151715407e-13, 7.627370419161674e-14, 3.032110929383860e-12, + 4.356790609388915e-11, 2.5673646119457e-10, 1.824776078322764e-09, + 1.336011274839244e-08, 4.662233095387513e-08, 1.855443369927811e-07, + 4.203756700095387e-07, 1.027090131017553e-06, 2.589389514787723e-06, + 4.289039152660145e-06, 7.303378490765827e-06, 1.260335077497234e-05, + 1.675024404625276e-05, 2.240874626323386e-05, 3.006923421250058e-05, + 4.033531148327933e-05, 4.678890910226335e-05, 5.428125795736045e-05, + 6.294084826622205e-05, 7.290090815336528e-05, 8.429676281254e-05, + 9.726281244309139e-05, 1.119293178761868e-04, 1.284192085400619e-04, + 1.468451040705676e-04, 1.673066614481638e-04, 1.898882305887399e-04, + 2.146566409073294e-04, 2.416587715154214e-04, 2.709183946821275e-04, + 3.024316295649456e-04, 3.361601907086797e-04, 3.720214442579603e-04, + 3.909691045833453e-04, 4.104220882594117e-04, 4.303474532475460e-04, + 4.507046818951708e-04, 4.714443781736845e-04, 4.925067470261059e-04, + 5.138198320974322e-04, 5.352974913122906e-04, 5.568370962809754e-04, + 5.783169527080711e-04, 5.995934566166795e-04, 6.204980275912463e-04, + 6.408338983161791e-04, 6.603728930220271e-04, 6.788524001379627e-04, + 6.959713273107651e-04, 7.113911382898945e-04, 7.247392402974936e-04, + 7.356055011922236e-04, 7.399632250197783e-04, 7.435180864515207e-04, + 7.462085330605222e-04, 7.479718830520672e-04, 7.487448117431773e-04, + 7.484639347442471e-04, 7.470664951313110e-04, 7.444911604298403e-04, + 7.406789331440943e-04, 7.355741757709518e-04, 7.291257476565871e-04, + 7.212882466335256e-04, 7.120233430942160e-04, 7.013011880436901e-04, + 6.891018698219446e-04, 6.754168867704051e-04, 6.602505954061872e-04, + 6.436215860389883e-04, 6.255639307047113e-04, 6.061282423888535e-04, + 5.853824804486466e-04, 5.634124356453648e-04, 5.403218299962544e-04, + 5.162319724081011e-04, 4.912809212669e-04, 4.656221200874917e-04, + 4.394224918760389e-04, 4.261558585588080e-04, 4.128212711237631e-04, + 3.994425319785770e-04, 3.860435250035699e-04, 3.726484294314242e-04, + 3.592814932365441e-04, 3.459669105022726e-04, 3.327286958825914e-04, + 3.195905581240790e-04, 3.065757736137635e-04, 2.937070612229143e-04, + 2.810064597401739e-04, 2.684952091903895e-04, 2.561936373176916e-04, + 2.441210524723792e-04, 2.322956440803827e-04, 2.207343917928389e-04, + 2.094529843120808e-04, 1.984657487708150e-04, 1.877855914057508e-04, + 1.774239501173309e-04, 1.673907593469105e-04, 1.576944275346454e-04, + 1.483418272486908e-04, 1.393382979029249e-04, 1.306876608095506e-04, + 1.223922461481353e-04, 1.144529312773823e-04, 1.068691896728894e-04, + 9.963914964633599e-05, 9.275966189123214e-05, 8.622637480907357e-05, + 8.003381649916087e-05, 7.417548224603164e-05, 6.864392631058869e-05, + 6.343085682461615e-05, 5.852723260218813e-05, 5.392336071470695e-05, + 4.960899372709739e-05, 4.557342555898734e-05, 4.180558515234938e-05, + 3.829412663043367e-05, 3.502742489131681e-05, 3.199393792642827e-05, + 2.659660850660901e-05, 2.198972789613262e-05, 1.808435335574228e-05, + 1.479567606346905e-05, 1.204422066523142e-05, 9.756672031818296e-06, + 7.866364424734156e-06, 6.313478079999110e-06, 5.044993439427137e-06, + 4.014454481488351e-06, 3.181590609796783e-06, 2.511842205108309e-06, + 1.975829076615804e-06, 1.548794412096142e-06, 1.210050044409492e-06, + 9.424423940688625e-07, 7.318526348128009e-07, 5.667396475089558e-07, + 4.377302520179431e-07, 3.372580266320514e-07, 2.592496713408469e-07, + 1.988562399149718e-07, 1.522255356195398e-07, 1.163114131192584e-07, + 8.871553937466507e-08, 6.755723724320939e-08, 5.136728173446509e-08, + 3.900187205720542e-08, 2.957341036493894e-08, 2.239514219229682e-08, + 1.693712752591476e-08, 1.279139826541239e-08, 9.644507730760721e-09, + 7.255986382950882e-09, 5.441484244453762e-09, 3.111170687776859e-09, + 1.773851221437308e-09, 1.007525954664011e-09, 5.676117525831269e-10, + 3.122838906508986e-10, 1.058157311581439e-10, 3.582179661074863e-11, + 1.213590044237815e-11, 4.117152613270011e-12, 1.387886704692316e-12, + 4.246113014313626e-13, 6.518729029688039e-14, 1.039661500258351e-14, + 1.762784756990075e-15, 3.260400928882526e-16, 6.710245412708970e-17, + 1.542515859718414e-17, 3.904732119887304e-18, 1.062887807468549e-18, + 3.018019871914702e-19, 7.865610256208808e-20, 1.022729731384169e-20, + 1.380278357972926e-21, 1.929007968468951e-22, 2.784877943263e-23, + 4.129406458630387e-24, 5.161636370501392e-25, 3.011172089578729e-26, + 2.560271553869259e-27, 8.622005467903615e-28, 6.919189313279803e-28, + 6.225665655919739e-28, 5.666664570611909e-28, 4.766475990187e-28, + 4.063023517894361e-28, 3.511368355957676e-28, 3.075105275968127e-28, + 2.727344881085010e-28, 2.449448649951280e-28, 2.061107343347292e-28, + 1.833871508010017e-28, 1.620253371345531e-28, 1.330340446235243e-28, + 1.140116471251957e-28, 1.013002494622252e-28, 9.462888420629666e-29, + 8.375408725544454e-29, 8.375408725544455e-29] + CH2CO: [-1.588900668694150e-15, 1.941479216658160e-14, 2.301945513216723e-13, + 3.120790348288737e-12, 1.834752350289189e-11, 1.303687183300471e-10, + 9.544703192712682e-10, 3.330780646160361e-09, 1.325564004766782e-08, + 3.003262007426402e-08, 7.337850979613980e-08, 1.849983123995713e-07, + 3.064393420371686e-07, 5.218305322061565e-07, 9.005852099126264e-07, + 1.196984467794464e-06, 1.601483077840175e-06, 2.149198788539253e-06, + 2.883407946520721e-06, 3.345099952764569e-06, 3.881239858449914e-06, + 4.501098393896338e-06, 5.214321714046466e-06, 6.030758377634138e-06, + 6.960265806448362e-06, 8.012512514930793e-06, 9.196795321927622e-06, + 1.052189057683132e-05, 1.199595483530433e-05, 1.362648419517864e-05, + 1.542033456958153e-05, 1.738380037591802e-05, 1.952274975828419e-05, + 2.184282234971914e-05, 2.434970525466835e-05, 2.704949450413144e-05, + 2.849510432883041e-05, 2.999481044812563e-05, 3.154976702218833e-05, + 3.316121742966258e-05, 3.483049067000828e-05, 3.655898910554425e-05, + 3.834816572501050e-05, 4.019948780660784e-05, 4.211438241669888e-05, + 4.409415902959132e-05, 4.613990815209975e-05, 4.825238400648880e-05, + 5.043189112642494e-05, 5.267819869968467e-05, 5.499049211811696e-05, + 5.736713311355549e-05, 5.980590371646471e-05, 6.230457962528751e-05, + 6.486021020099977e-05, 6.616599336859197e-05, 6.748470764255835e-05, + 6.881561066528342e-05, 7.015783056118897e-05, 7.151034191695282e-05, + 7.287193797508982e-05, 7.424119869735113e-05, 7.561645438766062e-05, + 7.699574463363054e-05, 7.837677244029446e-05, 7.975685359928098e-05, + 8.113286157078216e-05, 8.250116846247131e-05, 8.385758307421571e-05, + 8.519728744025861e-05, 8.651477383452674e-05, 8.780378479329806e-05, + 8.905725932442548e-05, 9.026728907253573e-05, 9.142508874126411e-05, + 9.252098547196944e-05, 9.354443207258771e-05, 9.448404890979661e-05, + 9.532769886140660e-05, 9.606259893200584e-05, 9.667547095036156e-05, + 9.715273221159797e-05, 9.733570209431646e-05, 9.747941186077745e-05, + 9.758217345660792e-05, 9.764233187592938e-05, 9.765827141174027e-05, + 9.762842728135817e-05, 9.755129610188160e-05, 9.742544650647631e-05, + 9.724952981159537e-05, 9.702229064346060e-05, 9.674257742770351e-05, + 9.640935264394496e-05, 9.602170274608036e-05, 9.557884764919976e-05, + 9.508014968535113e-05, 9.452512193277733e-05, 9.391343582677848e-05, + 9.324492796493198e-05, 9.251960602498505e-05, 9.173765372029939e-05, + 9.089943472515164e-05, 9.000549551049638e-05, 8.905656703981711e-05, + 8.805356528443027e-05, 8.699759052796447e-05, 8.588992544058825e-05, + 8.473203191492051e-05, 8.352554666720393e-05, 8.227227561926531e-05, + 8.097418708883202e-05, 7.963340382787088e-05, 7.825219396052938e-05, + 7.683296088399051e-05, 7.537823220677830e-05, 7.389064780974774e-05, + 7.237294712494650e-05, 7.082795573650871e-05, 6.925857141570801e-05, + 6.766774970897859e-05, 6.605848920299271e-05, 6.443381665413487e-05, + 6.279677193158774e-05, 6.115034715413094e-05, 5.949760851561903e-05, + 5.618563438708822e-05, 5.288351863084059e-05, 4.961336540240299e-05, + 4.639579866597106e-05, 4.324965541294202e-05, 4.019174459669702e-05, + 3.723667564696385e-05, 3.439675707645619e-05, 3.168196257890756e-05, + 2.909995933332258e-05, 2.665619111227070e-05, 2.435400731807483e-05, + 2.219482825383473e-05, 2.017833673614506e-05, 1.830268649131409e-05, + 1.656471853823149e-05, 1.496017782825306e-05, 1.348392366601674e-05, + 1.213012876645968e-05, 1.089246312149153e-05, 9.764260084667324e-06, + 8.738663184973173e-06, 7.808753122437917e-06, 6.967655166573836e-06, + 6.208627774867251e-06, 5.525133683682941e-06, 4.910895015390937e-06, + 4.359934114164454e-06, 3.866601890829903e-06, 3.425595445974036e-06, + 3.031966670172477e-06, 2.681123408297076e-06, 2.368824636307064e-06, + 2.091170945916631e-06, 1.844591474625128e-06, 1.435070907115733e-06, + 1.113722694360803e-06, 8.622916887785862e-07, 6.659851838486902e-07, + 5.129081673362092e-07, 3.080589312098295e-07, 1.845800008429803e-07, + 1.104063449178687e-07, 6.590197253743220e-08, 3.913597789648405e-08, + 2.287745887698598e-08, 8.657488533519801e-09, 3.305142789017346e-09, + 1.274379764597082e-09, 4.966036662368254e-10, 1.956462403465656e-10, + 7.793295381717324e-11, 3.138014911156243e-11, 1.275403107950834e-11, + 5.187188349458656e-12, 1.993216599911330e-12, 4.224837290605844e-13, + 9.222948631141351e-14, 2.069434315057097e-14, 4.763073512875574e-15, + 1.116759727050487e-15, 2.326932862038643e-16, 2.566054156903201e-17, + 4.276343360479937e-18, 1.778327808359581e-18, 1.331295067377848e-18, + 1.144590661375833e-18, 1.012789164561693e-18, 8.217681301046369e-19, + 6.845282777758562e-19, 5.825813165629029e-19, 5.047096308953091e-19, + 4.438557866628017e-19, 3.954260427606763e-19, 3.255103741020403e-19, + 2.760202426356954e-19, 2.397445127412099e-19, 1.929593900950191e-19, + 1.627229751968397e-19, 1.421110817092181e-19, 1.275616773635063e-19, + 1.109858618111150e-19, 1.109858618111150e-19] + H: [5.744751030762036e-15, 1.363244630020445e-19, 6.671607002576797e-24, + 3.212988285080516e-24, 2.113387668667939e-23, 1.531442960597370e-22, + 1.296562682095825e-21, 7.793019152620074e-21, 1.586478933234854e-19, + 1.550552214554875e-18, 1.990346933424722e-17, 2.754063732566977e-16, + 1.189941466865404e-15, 5.348525795534886e-15, 2.440727069341146e-14, + 5.446964363253492e-14, 1.242645768897135e-13, 2.894343015251538e-13, + 6.888676962642929e-13, 1.085531086840041e-12, 1.730058687346217e-12, + 2.789650917077021e-12, 4.551884413656042e-12, 7.518765740009686e-12, + 1.257876997702115e-11, 2.132679614187317e-11, 3.666741147842794e-11, + 6.397059654766956e-11, 1.133429565295256e-10, 2.042931923588161e-10, + 3.759205958479730e-10, 7.1020191395295e-10, 1.384209987093263e-09, + 2.774740305077571e-09, 5.626434837313082e-09, 1.123268252430948e-08, + 1.585537774711956e-08, 2.204263852771626e-08, 3.017746264948403e-08, + 4.066837457623489e-08, 5.394778816241812e-08, 7.047686168509215e-08, + 9.076090536753616e-08, 1.153780836744390e-07, 1.450232100380674e-07, + 1.805681713177579e-07, 2.231410893607579e-07, 2.742277035901449e-07, + 3.358004634137062e-07, 4.104831161323802e-07, 5.017608097551112e-07, + 6.142378546293092e-07, 7.539853025922642e-07, 9.290169811779608e-07, + 1.149825871087544e-06, 1.283441199192152e-06, 1.434309839382837e-06, + 1.604868542499530e-06, 1.7978829501102e-06, 2.016486373007276e-06, + 2.264221595398405e-06, 2.545085538002466e-06, 2.863576472053071e-06, + 3.224743299705010e-06, 3.634236201916161e-06, 4.098357701279565e-06, + 4.624112895112194e-06, 5.219257286401074e-06, 5.892340283077720e-06, + 6.652742059454825e-06, 7.510701091974123e-06, 8.477329314339492e-06, + 9.564611509951509e-06, 1.078538530336580e-05, 1.215329796362e-05, + 1.368273623123249e-05, 1.538872557021456e-05, 1.728679566868964e-05, + 1.939280970454248e-05, 2.172275588504781e-05, 2.429250107719143e-05, + 2.711750796446541e-05, 2.863494132311626e-05, 3.022204914782468e-05, + 3.188049445322830e-05, 3.361187515342685e-05, 3.541767304582924e-05, + 3.729925389274065e-05, 3.925785503634099e-05, 4.129457316864177e-05, + 4.341035225503345e-05, 4.560597175614679e-05, 4.788203526262242e-05, + 5.023895965984415e-05, 5.267696494069925e-05, 5.519606478383602e-05, + 5.779605801260501e-05, 6.047652104590894e-05, 6.323680144645358e-05, + 6.607601266443051e-05, 6.899303006556906e-05, 7.198648832173377e-05, + 7.505478023009373e-05, 7.819605701340604e-05, 8.140823013930008e-05, + 8.468897468095658e-05, 8.803573422538148e-05, 9.144572731881982e-05, + 9.491595542214743e-05, 9.844321233234972e-05, 1.020240950099709e-04, + 1.056550157367762e-04, 1.093322155130741e-04, 1.130517785905469e-04, + 1.168096480240607e-04, 1.206016421150820e-04, 1.244234716101016e-04, + 1.282707575099291e-04, 1.321390493400688e-04, 1.360238437285532e-04, + 1.399206031356123e-04, 1.438247745794869e-04, 1.477318080614338e-04, + 1.516371749770851e-04, 1.555364945745821e-04, 1.594252272700597e-04, + 1.671498146588665e-04, 1.747817744566362e-04, 1.822895756065316e-04, + 1.896439629456299e-04, 1.968182796287245e-04, 2.037887095529348e-04, + 2.105344390159717e-04, 2.170377399469654e-04, 2.232839797698514e-04, + 2.292615651768975e-04, 2.349618287280760e-04, 2.403788682222842e-04, + 2.455093492244419e-04, 2.503522810326469e-04, 2.549087758157981e-04, + 2.591817997466802e-04, 2.6317592380791e-04, 2.668970806648356e-04, + 2.703523326760060e-04, 2.735496548269268e-04, 2.764977351863124e-04, + 2.792057944359932e-04, 2.816834251381918e-04, 2.839404506840632e-04, + 2.859868033102309e-04, 2.878324201624604e-04, 2.894871561092388e-04, + 2.909607118422074e-04, 2.922625757240259e-04, 2.934019778374630e-04, + 2.943878547344013e-04, 2.952288234647474e-04, 2.959331635702075e-04, + 2.965088058463953e-04, 2.969633267978082e-04, 2.975304779933722e-04, + 2.976981319660269e-04, 2.975138938493741e-04, 2.970203574988223e-04, + 2.962554957808778e-04, 2.940155215412565e-04, 2.910580126813388e-04, + 2.875559566714591e-04, 2.836453982106669e-04, 2.794336451864649e-04, + 2.750057524170406e-04, 2.657181629192032e-04, 2.562241325323631e-04, + 2.467644979193917e-04, 2.374954261066906e-04, 2.285164324282733e-04, + 2.198883269838011e-04, 2.116451981135746e-04, 2.038026610491250e-04, + 1.963636221710888e-04, 1.893221295219266e-04, 1.764092853429838e-04, + 1.648585303785160e-04, 1.545256985325818e-04, 1.452689411494655e-04, + 1.369582589440344e-04, 1.294781461202894e-04, 1.167025644123028e-04, + 1.060634315276027e-04, 9.710431000954299e-05, 8.948269762085040e-05, + 8.294106818533417e-05, 7.728429110387175e-05, 6.815213168347339e-05, + 6.092388234372923e-05, 5.509064486632716e-05, 5.030566988794527e-05, + 4.632804678866713e-05, 4.298832092967062e-05, 3.783876514653210e-05, + 3.391762229913555e-05, 3.086675668714787e-05, 2.666493807933703e-05, + 2.375726205939117e-05, 2.167021703535411e-05, 2.013756424398450e-05, + 1.832247927990553e-05, 1.832247927990553e-05] + O: [3.539063137930379e-13, 3.290444692735304e-13, 3.170966500027949e-13, + 3.056826980470099e-13, 3.007452426666908e-13, 3.006853503388121e-13, + 3.369881651421044e-13, 4.586156360084709e-13, 9.859141013632384e-13, + 1.906018009793293e-12, 4.348572091753439e-12, 1.094815193321645e-11, + 1.878596530686538e-11, 3.384917344842381e-11, 6.359999428849466e-11, + 9.046822996273114e-11, 1.313624564904283e-10, 1.943397110301797e-10, + 2.925931798325217e-10, 3.640422736950451e-10, 4.558479404161101e-10, + 5.741534607145548e-10, 7.270865099107515e-10, 9.254667018478125e-10, + 1.183827687718694e-09, 1.521949601788766e-09, 1.967249427648528e-09, + 2.558651744139159e-09, 3.353061486744734e-09, 4.436472463876632e-09, + 5.943417816727082e-09, 8.091508013597470e-09, 1.124315191466925e-08, + 1.601535193376277e-08, 2.347110165072366e-08, 3.543952691430235e-08, + 4.442893083397318e-08, 5.601474642680589e-08, 7.097947397151330e-08, + 9.031700543567748e-08, 1.152790532336245e-07, 1.474312539189359e-07, + 1.887232799220325e-07, 2.415796628573123e-07, 3.090208161962709e-07, + 3.948268038292965e-07, 5.037596495009764e-07, 6.418634348991901e-07, + 8.168651731350409e-07, 1.038703469720235e-06, 1.320216010123896e-06, + 1.677988673573609e-06, 2.133486667169878e-06, 2.714587101799260e-06, + 3.457277096738819e-06, 3.909680609281835e-06, 4.422136775312054e-06, + 5.002821327400480e-06, 5.660970120472758e-06, 6.407001463517162e-06, + 7.252649091432072e-06, 8.211106163860355e-06, 9.297180580543666e-06, + 1.052746177478493e-05, 1.192049898234965e-05, 1.349699077588021e-05, + 1.527998539659922e-05, 1.729509109584544e-05, 1.957069530658389e-05, + 2.213819098449155e-05, 2.503220787175326e-05, 2.829084572410345e-05, + 3.195590568149448e-05, 3.607311493464229e-05, 4.069233862759409e-05, + 4.586777153337409e-05, 5.165810045312106e-05, 5.812662654651778e-05, + 6.534133495531783e-05, 7.337489721252264e-05, 8.230459014356621e-05, + 9.221211338569171e-05, 9.757782750527477e-05, 1.032223614720933e-04, + 1.091571482481313e-04, 1.153939186637429e-04, 1.219445422680539e-04, + 1.288210476063571e-04, 1.360355955336331e-04, 1.436004498478216e-04, + 1.515279447935956e-04, 1.598304495126661e-04, 1.685203294117114e-04, + 1.776099044380324e-04, 1.871114042739758e-04, 1.970369204836633e-04, + 2.073983556695703e-04, 2.182073697223853e-04, 2.2947532327481e-04, + 2.412132184990121e-04, 2.534316374181920e-04, 2.661406779350067e-04, + 2.793498878138823e-04, 2.930681968901888e-04, 3.073038478167293e-04, + 3.220643256972445e-04, 3.373562869971521e-04, 3.531854881630738e-04, + 3.695567144249515e-04, 3.864737092962046e-04, 4.039391053287383e-04, + 4.219543567190140e-04, 4.405196743979057e-04, 4.596339642702267e-04, + 4.792947692973110e-04, 4.994982161376249e-04, 5.202389670741962e-04, + 5.415101779623727e-04, 5.633034629264522e-04, 5.856088665175124e-04, + 6.084148440165534e-04, 6.317082505267118e-04, 6.554743385758543e-04, + 6.796967673639461e-04, 7.043583093429903e-04, 7.294388498866736e-04, + 7.807392598484023e-04, 8.334415550875669e-04, 8.873393370090152e-04, + 9.422074535651878e-04, 9.978052295450087e-04, 1.053880188136816e-03, + 1.110172143178371e-03, 1.166417521557454e-03, 1.222353763572301e-03, + 1.277723646642854e-03, 1.332279384624146e-03, 1.385786370297476e-03, + 1.438026450867590e-03, 1.488800653429157e-03, 1.537931307094221e-03, + 1.585263538510414e-03, 1.630666145797e-03, 1.674031880833227e-03, + 1.715277190195014e-03, 1.754341480218940e-03, 1.791185981531549e-03, + 1.825792293183829e-03, 1.858160686850989e-03, 1.888308248171577e-03, + 1.916266926075320e-03, 1.942081552761823e-03, 1.965807887654110e-03, + 1.987510728867991e-03, 2.007262126082399e-03, 2.025139719601395e-03, + 2.041225222163881e-03, 2.055603052863267e-03, 2.068359126465336e-03, + 2.079579796460570e-03, 2.089350946278599e-03, 2.104791770052863e-03, + 2.115462631606784e-03, 2.121971557376222e-03, 2.124875236662984e-03, + 2.124675589573184e-03, 2.116318569146119e-03, 2.100368897301543e-03, + 2.079015318264548e-03, 2.053887461207295e-03, 2.026187091003281e-03, + 1.996797024872476e-03, 1.9349827244217e-03, 1.872174410777749e-03, + 1.810050843894831e-03, 1.749538427425327e-03, 1.691142725082511e-03, + 1.635125758665795e-03, 1.581603862412636e-03, 1.530603927223904e-03, + 1.482097160182626e-03, 1.436019872634155e-03, 1.351012211591444e-03, + 1.274200322772701e-03, 1.204743332895011e-03, 1.141838237137667e-03, + 1.084754126451929e-03, 1.032841580419965e-03, 9.429117651389283e-04, + 8.666871492277360e-04, 8.014756096985603e-04, 7.452091627328193e-04, + 6.962996315112567e-04, 6.535214494873703e-04, 5.834524347798568e-04, + 5.270524059105853e-04, 4.808848655982978e-04, 4.425493217225907e-04, + 4.103444558889104e-04, 3.830551931448803e-04, 3.405071186392548e-04, + 3.077028435567658e-04, 2.819204384552716e-04, 2.460177699797514e-04, + 2.208887583949324e-04, 2.027003019343991e-04, 1.892591937387627e-04, + 1.732462183924340e-04, 1.732462183924340e-04] + O2: [0.2201412376854688, 0.2201412376563047, 0.2201412373655, + 0.2201412333774883, 0.2201412123699274, 0.2201410578199040, + 0.2201399208482914, 0.2201366423725675, 0.2201229495464931, + 0.2200998032132296, 0.2200400011861493, 0.2198860056412070, + 0.2197184613598139, 0.2194213023716033, 0.2188987706704128, + 0.2184898672625963, 0.2179318470430654, 0.2171762816565854, + 0.2161635085627307, 0.2155266921425196, 0.2147872320390283, + 0.2139323670034753, 0.2129488298920935, 0.2118230910198040, + 0.2105416313928613, 0.2090912237961472, 0.2074591958297511, + 0.2056336494963308, 0.2036036173758239, 0.2013591449140045, + 0.1988912997823193, 0.1961921200038183, 0.19325452033053, + 0.1900721798680030, 0.1866394327274916, 0.1829511781001322, + 0.1809812293218019, 0.17894159600183, 0.1768317240326198, + 0.1746510990816552, 0.1723992494838586, 0.1700757509072644, + 0.1676802331470257, 0.1652123893986809, 0.1626719883796246, + 0.1600588897189697, 0.1573730631257339, 0.1546146119720465, + 0.1517838020806627, 0.1488810966615919, 0.1459071984788133, + 0.1428633695241487, 0.1397511108560099, 0.1365713613582697, + 0.1333252403379589, 0.1316675203539865, 0.1299933491881014, + 0.1283029443465985, 0.1265965443301836, 0.1248744109359868, + 0.1231368318320080, 0.1213841234264214, 0.1196166340523361, + 0.1178347474856106, 0.1160388868089512, 0.1142295186295936, + 0.1124071576501740, 0.1105723715827340, 0.1087257863840239, + 0.1068680917762159, 0.1050000470007692, 0.1031224867344810, + 0.1012363270759589, 0.09934257148813590, 0.09744231655864934, + 0.09553675741568182, 0.09362719261334075, 0.09171502827917091, + 0.08980178129852238, 0.08788908129803517, 0.08597867118528432, + 0.08407240600268701, 0.08311937838333426, 0.08216814971936803, + 0.08121899263208036, 0.08027217006694655, 0.07932795843948247, + 0.07838663962819654, 0.07744850062178753, 0.07651383309038494, + 0.07558293293718103, 0.07465609981264298, 0.07373363659236960, + 0.07281584882001535, 0.07190304411704199, 0.07099553156139704, + 0.07009362103756869, 0.06919762256077543, 0.06830784557836224, + 0.06742459825175928, 0.06654818672261023, 0.06567891436691607, + 0.06481708104122198, 0.06396298232503286, 0.06311690876376752, + 0.06227914511661579, 0.06144996961371136, 0.06062965322700280, + 0.05981845895914976, 0.05901664115467063, 0.05822444483741593, + 0.05744210507825383, 0.05666984639663487, 0.05590788219944013, + 0.05515641426021735, 0.05441563224161404, 0.05368571326344493, + 0.05296682151850281, 0.05225910793782849, 0.05156270990677837, + 0.05087775103285370, 0.05020434096585085, 0.04954257529476519, + 0.04889253544575387, 0.04825427086054253, 0.04762785255766647, + 0.04641190955665759, 0.04524339512995373, 0.04412224433791070, + 0.04304818525507470, 0.04202075009309902, 0.04103928835014317, + 0.04010298161515537, 0.03921085964512767, 0.03836181733509136, + 0.03755463221287871, 0.03678798211177684, 0.03606046270248214, + 0.03537060459948090, 0.03471688979447905, 0.03409776720925199, + 0.03351166720087075, 0.03295701489242280, 0.03243224224100489, + 0.03193579879098980, 0.03146616109361374, 0.03102184080326022, + 0.03060139148603926, 0.03020341419719517, 0.02982656190050634, + 0.02946954281528175, 0.02913112278508858, 0.02881012676729751, + 0.02850543954435088, 0.02821600575679921, 0.02794082935510724, + 0.02767897256246736, 0.02742955443483064, 0.02719174909748307, + 0.02696478373012214, 0.02674793636456427, 0.02634278003571831, + 0.02597034408077684, 0.02562648330461045, 0.02530762457769125, + 0.02501069454775351, 0.02447515650780926, 0.02399937682491349, + 0.02357124774544143, 0.02318175116678426, 0.02282409806025385, + 0.02249310509150734, 0.02189980057860540, 0.02137330907823445, + 0.02089930123604865, 0.02046770577190286, 0.02007113662995138, + 0.01970399980608517, 0.01936195659148657, 0.01904158162328059, + 0.01874013297569459, 0.01845538956248521, 0.01793129860021633, + 0.01745359171324460, 0.01701465830355127, 0.01660889146131686, + 0.01623204617491161, 0.01588083666845807, 0.01524855489648605, + 0.01468583325395276, 0.01418109971531888, 0.01372563354969511, + 0.01331270456992031, 0.01293711022302385, 0.01228717096718445, + 0.01172976632120139, 0.01124639017715459, 0.01082349407577727, + 0.01045100324373073, 0.01012156000248310, 9.578000157070847e-03, + 9.131088765565676e-03, 8.759617482725855e-03, 8.206339741060763e-03, + 7.790035932964228e-03, 7.470637873032321e-03, 7.223341398381182e-03, + 6.914320139649123e-03, 6.914320139649123e-03] + OH: [2.468770478772681e-13, 2.477205356398899e-13, 4.273546403774875e-15, + 2.596269386471977e-16, 1.930075217705539e-16, 3.049571513114830e-16, + 5.778755562055617e-15, 7.384556314169932e-14, 1.092909130001894e-12, + 5.926640551319243e-12, 3.385809353931328e-11, 1.891599145556144e-10, + 4.878189305260910e-10, 1.248154573233388e-09, 3.104268111792533e-09, + 4.953143747649097e-09, 7.876778926775569e-09, 1.243520036143687e-08, + 1.944615118465716e-08, 2.438375463215121e-08, 3.054952913068068e-08, + 3.820813022975402e-08, 4.766903196269339e-08, 5.928947139652808e-08, + 7.347737890682022e-08, 9.069540275909e-08, 1.114680635978278e-07, + 1.363950593878921e-07, 1.661747383178182e-07, 2.016430799823888e-07, + 2.438360361713891e-07, 2.940876910263524e-07, 3.541823229590259e-07, + 4.265802076421219e-07, 5.147367793920799e-07, 6.235891160787034e-07, + 6.895899391132091e-07, 7.639661263190960e-07, 8.480124525576758e-07, + 9.433742031665515e-07, 1.052154332170324e-06, 1.177071330564322e-06, + 1.321674059381043e-06, 1.490624924108027e-06, 1.690070135589931e-06, + 1.928125575384206e-06, 2.215518318072265e-06, 2.566436452870891e-06, + 2.999654106889106e-06, 3.540017345806912e-06, 4.220402577940854e-06, + 5.084213177573663e-06, 6.188793596335866e-06, 7.610143564172157e-06, + 9.448446914346559e-06, 1.058112983948789e-05, 1.187429650873939e-05, + 1.335204496163904e-05, 1.504189854300939e-05, 1.697525875349871e-05, + 1.918789703892554e-05, 2.172048604704021e-05, 2.461916949879338e-05, + 2.793616818875573e-05, 3.173041770142112e-05, 3.606823117349851e-05, + 4.102397782803820e-05, 4.668076505370575e-05, 5.31311085241e-05, + 6.047757129821525e-05, 6.883334909760285e-05, 7.832277513939908e-05, + 8.908171417783892e-05, 1.012578119706674e-04, 1.150105634777680e-04, + 1.305111609823071e-04, 1.479420822797530e-04, 1.674963793837123e-04, + 1.893766300991625e-04, 2.137935185082729e-04, 2.409640160123043e-04, + 2.711091420631460e-04, 2.874203371248903e-04, 3.045638840037816e-04, + 3.225675895239226e-04, 3.414592432003316e-04, 3.612660838867540e-04, + 3.820148131840703e-04, 4.037314699554273e-04, 4.264413012956218e-04, + 4.501686293604190e-04, 4.749367150640076e-04, 5.007676193398635e-04, + 5.276820627150121e-04, 5.556992839999961e-04, 5.848368989451923e-04, + 6.151107597582045e-04, 6.465348164169313e-04, 6.791209807471816e-04, + 7.128789942624166e-04, 7.4781630078612e-04, 7.839379248927407e-04, + 8.212463572122308e-04, 8.597414476443523e-04, 8.994203075212130e-04, + 9.402772217409801e-04, 9.823035718700837e-04, 1.025487771175778e-03, + 1.069815212505638e-03, 1.115268229873438e-03, 1.161826074543214e-03, + 1.209464906324227e-03, 1.258157800697932e-03, 1.307874772296239e-03, + 1.358582815135994e-03, 1.410245959890736e-03, 1.462825348346262e-03, + 1.516279325043334e-03, 1.570563545960673e-03, 1.625631103935548e-03, + 1.681432670358682e-03, 1.737916652519650e-03, 1.795029363729526e-03, + 1.852715211607244e-03, 1.910918519705553e-03, 1.969578930539519e-03, + 2.087965923529452e-03, 2.207447693089620e-03, 2.327523887734914e-03, + 2.447692188709629e-03, 2.567455954324796e-03, 2.686331610900485e-03, + 2.803855571095259e-03, 2.919590483826433e-03, 3.033130652859873e-03, + 3.144106501115880e-03, 3.252188001955129e-03, 3.357087044156842e-03, + 3.458558741061016e-03, 3.556401733869181e-03, 3.650457572392067e-03, + 3.740609282283532e-03, 3.826779245395380e-03, 3.908926529378198e-03, + 3.987043804648938e-03, 4.061153982367421e-03, 4.131306697403308e-03, + 4.197574746825993e-03, 4.260050578597348e-03, 4.318842908152192e-03, + 4.374073523489260e-03, 4.425874323120168e-03, 4.474384616356416e-03, + 4.519748702355488e-03, 4.562113733304786e-03, 4.601627858145516e-03, + 4.638438636253859e-03, 4.672691705348114e-03, 4.704529684364835e-03, + 4.734091289910254e-03, 4.761510643856304e-03, 4.810285792467344e-03, + 4.852022511809322e-03, 4.887586742845887e-03, 4.917751776365341e-03, + 4.943201680569149e-03, 4.981728663310940e-03, 5.007853594953707e-03, + 5.024467400313298e-03, 5.033736527787493e-03, 5.037284955391295e-03, + 5.036336428537544e-03, 5.023765690196118e-03, 5.001922026199122e-03, + 4.973713546725865e-03, 4.941053171884775e-03, 4.905262120957532e-03, + 4.867292004776935e-03, 4.827850750910457e-03, 4.787477537977443e-03, + 4.746590853577442e-03, 4.705527037763328e-03, 4.623960310880641e-03, + 4.543728349785885e-03, 4.465590378758798e-03, 4.390002626114327e-03, + 4.317214170171927e-03, 4.247354280170008e-03, 4.117439896143675e-03, + 3.997514513887216e-03, 3.886876331991775e-03, 3.784756247312599e-03, + 3.690419239712386e-03, 3.603219383953086e-03, 3.449829929851208e-03, + 3.315348441700109e-03, 3.196762443152452e-03, 3.091626771225054e-03, + 2.998010652985818e-03, 2.914445133319319e-03, 2.775368501572519e-03, + 2.659670259989825e-03, 2.562709491530256e-03, 2.417339794345981e-03, + 2.307120143711305e-03, 2.222214257143984e-03, 2.156314125597693e-03, + 2.073858389717672e-03, 2.073858389717672e-03] + H2O: [6.953431749467947e-13, 1.837627600726544e-11, 1.958108592647978e-10, + 2.625414557568647e-09, 1.542370447523305e-08, 1.095791003093091e-07, + 8.022480630463134e-07, 2.799569770210626e-06, 1.114154738323723e-05, + 2.524280177929938e-05, 6.167546249401660e-05, 1.554925424549407e-04, + 2.575632479686702e-04, 4.385964449478603e-04, 7.569274975401681e-04, + 1.006033299991229e-03, 1.345979928497402e-03, 1.806268864807088e-03, + 2.423245316588693e-03, 2.811189875395807e-03, 3.2616640250261e-03, + 3.782442400259468e-03, 4.381608363898147e-03, 5.067406034372968e-03, + 5.848074195477489e-03, 6.731675511593962e-03, 7.725936831250717e-03, + 8.838116049166620e-03, 0.01007490768546011, 0.01144239356540832, + 0.01294603803881013, 0.01459072067927628, 0.0163807947061, + 0.01832015713064391, 0.02041231668666657, 0.02266044718778181, + 0.02386131862582692, 0.02510475104737490, 0.02639108929586552, + 0.02772065154093641, 0.02909372672784401, 0.03051057098646391, + 0.03197140282825, 0.03347639691515288, 0.03502567613281546, + 0.03661930163980581, 0.03825726049303132, 0.03993945036479603, + 0.04166566076835930, 0.04343555009706108, 0.04524861765925126, + 0.04710400574281877, 0.04900069070522312, 0.05093796555718879, + 0.05291497962374152, 0.05392425596839099, 0.05494329134197629, + 0.05597191640351452, 0.05700994432049963, 0.05805716875962758, + 0.05911336165913675, 0.06017827076960992, 0.06125161695278129, + 0.06233309123156427, 0.06342235158937443, 0.06451901952303253, + 0.06562267636129218, 0.06673285937047184, 0.06784905767988937, + 0.06897070807282468, 0.07009719070350473, 0.07122782481694993, + 0.07236186456607972, 0.07349849503876690, 0.07463682862583894, + 0.07577590187846213, 0.07691467301880549, 0.07805202028009925, + 0.07918674125981, 0.08031755347122221, 0.08144309627291023, + 0.08256193433842493, 0.08311955046977267, 0.08367490273396974, + 0.08422778636002458, 0.08477800238435246, 0.08532534425787552, + 0.08586960268305202, 0.08641056598062, 0.08694802050585312, + 0.08748175108060113, 0.08801154145054957, 0.08853717476606490, + 0.08905843408471797, 0.08957510289334455, 0.09008696564724342, + 0.09059380832390308, 0.09109541898843766, 0.09159158836773444, + 0.09208211043015838, 0.09256678296752929, 0.09304540817600557, + 0.09351779323241086, 0.09398375086255213, 0.09444309989803910, + 0.09489566581818105, 0.09534128127358897, 0.09577978658822, + 0.096211030236742, 0.09663486929424824, 0.09705116985554876, + 0.09745980742148687, 0.09786066724995805, 0.09825364466958, + 0.09863864535421245, 0.09901558555685087, 0.09938439230167509, + 0.09974500353335718, 0.1000973682230438, 0.1004414464307154, + 0.1007772093239475, 0.1011046391533836, 0.1014237291738744, + 0.1017344835486188, 0.1020369255931711, 0.1023310722987203, + 0.1028940216518592, 0.1034245057635413, 0.1039230768126680, + 0.1043904265925042, 0.1048273734822563, 0.1052348482577165, + 0.1056138790980637, 0.1059655761440005, 0.1062911159492376, + 0.1065917261440777, 0.1068686705979858, 0.1071232353294343, + 0.1073567153681201, 0.1075704027289590, 0.1077655756112637, + 0.1079434888921086, 0.1081053659417249, 0.1082523917521271, + 0.1083857073389105, 0.1085064053507605, 0.1086155268017611, + 0.1087140588278750, 0.1088029333605216, 0.1088830266064058, + 0.1089551592228724, 0.1090200970813594, 0.1090785525172440, + 0.1091311859718070, 0.1091786079405812, 0.1092213811514983, + 0.1092600229055294, 0.1092950075216530, 0.1093267688366897, + 0.1093557027186803, 0.1093821695587896, 0.1094286617143666, + 0.1094688835323219, 0.1095046506318370, 0.1095374289238418, + 0.1095683909948577, 0.1096276003557728, 0.1096881969402903, + 0.1097529532751541, 0.1098232463060585, 0.1098995595424556, + 0.1099818260762429, 0.1101628013069533, 0.1103605587118664, + 0.1105698774863155, 0.1107861329919378, 0.1110055433346201, + 0.1112251547615379, 0.1114427333096684, 0.1116566345619043, + 0.1118656798657617, 0.1120690450056330, 0.1124563930971087, + 0.1128186652832221, 0.1131561102819767, 0.1134698311234303, + 0.1137613252937115, 0.1140321957707559, 0.1145154265280913, + 0.1149399998544, 0.1153155057285302, 0.1156496873283143, + 0.1159487228583832, 0.1162174903860913, 0.1166741589667628, + 0.1170589784033622, 0.1173874058742398, 0.1176707096838577, + 0.1179171646931866, 0.1181328034992034, 0.1184832385137639, + 0.1187671996043580, 0.1190002539586776, 0.1193419089611775, + 0.1195951522845529, 0.1197870786564711, 0.1199342602974570, + 0.1201163576037857, 0.1201163576037857] + HO2: [-6.794275210417094e-13, -4.577448171328201e-13, -2.015631437989608e-13, + 3.258164602678519e-12, 2.146300890153585e-11, 1.553811290990350e-10, + 1.140593105976299e-09, 3.982196153885690e-09, 1.585635299219314e-08, + 3.596376147614985e-08, 8.803446721175724e-08, 2.228260094040099e-07, + 3.710939096728751e-07, 6.369022821001240e-07, 1.111974843596944e-06, + 1.491450230938030e-06, 2.017655406518187e-06, 2.743477471699112e-06, + 3.736999191486157e-06, 4.373240968927839e-06, 5.121127934386615e-06, + 5.9962370302742e-06, 7.014814723743156e-06, 8.193259869542422e-06, + 9.547445753985508e-06, 1.109189299233099e-05, 1.283881930703121e-05, + 1.479710002326555e-05, 1.697116882947907e-05, 1.935986541203016e-05, + 2.195518221893392e-05, 2.474075592900217e-05, 2.768981063146419e-05, + 3.076234012773346e-05, 3.390232975949159e-05, 3.703847755443659e-05, + 3.859805607979264e-05, 4.012780426556145e-05, 4.161961549066375e-05, + 4.306850894394328e-05, 4.447362852061809e-05, 4.583907058391684e-05, + 4.717443463698440e-05, 4.849505343552829e-05, 4.982190866459238e-05, + 5.118126562655918e-05, 5.260406380703323e-05, 5.412508462262193e-05, + 5.578189370950689e-05, 5.761353866059973e-05, 5.965898793005286e-05, + 6.195511804656384e-05, 6.453492596641162e-05, 6.742616204412486e-05, + 7.064872295363667e-05, 7.239926146062366e-05, 7.423631043354631e-05, + 7.615869737024651e-05, 7.816428064236757e-05, 8.024985629883530e-05, + 8.241106393418555e-05, 8.464229210402111e-05, 8.693658452765228e-05, + 8.928554920287323e-05, 9.167927351645142e-05, 9.410624939396023e-05, + 9.655331341160836e-05, 9.900560750718616e-05, 1.014465664009623e-04, + 1.038579380079030e-04, 1.062198429462952e-04, 1.085108787028748e-04, + 1.107082731028862e-04, 1.127880904814827e-04, 1.147254924102898e-04, + 1.164950530697456e-04, 1.180711274585763e-04, 1.194282686874051e-04, + 1.205416887018021e-04, 1.213877549962385e-04, 1.219445142708659e-04, + 1.221922325820395e-04, 1.221936103399024e-04, 1.221110681336668e-04, + 1.219429214596461e-04, 1.216877202110273e-04, 1.213442643424042e-04, + 1.209116169138441e-04, 1.203891163368579e-04, 1.197763874327850e-04, + 1.190733511765910e-04, 1.182802329753479e-04, 1.173975693388467e-04, + 1.1642621280527e-04, 1.153673349927547e-04, 1.142224276583671e-04, + 1.129933016596255e-04, 1.116820837303025e-04, 1.102912110019232e-04, + 1.088234232249968e-04, 1.072817526693456e-04, 1.056695117107459e-04, + 1.039902781408079e-04, 1.022478782683117e-04, 1.004463679122511e-04, + 9.859001141902656e-05, 9.668325886774944e-05, 9.473072165776192e-05, + 9.273714670035053e-05, 9.070738946161033e-05, 8.864638612469781e-05, + 8.655912515673114e-05, 8.445061857789991e-05, 8.232587323745408e-05, + 8.018986240297747e-05, 7.804749796573571e-05, 7.590360355571331e-05, + 7.376288884589552e-05, 7.162992530628130e-05, 6.950912364502476e-05, + 6.740471314738818e-05, 6.532072309363926e-05, 6.326096648101398e-05, + 6.122902593329304e-05, 5.922818636193799e-05, 5.726159349173629e-05, + 5.344353105392822e-05, 4.979227553696794e-05, 4.632293973212121e-05, + 4.304651937321798e-05, 3.997009578846874e-05, 3.709713307771207e-05, + 3.442784525336091e-05, 3.195960904703346e-05, 2.968739972818372e-05, + 2.760422995791352e-05, 2.570157503773e-05, 2.396977155467933e-05, + 2.239838006549879e-05, 2.097650586463449e-05, 1.969307487872226e-05, + 1.853706422775621e-05, 1.749768895519320e-05, 1.656454786743704e-05, + 1.572773238271095e-05, 1.497790283595491e-05, 1.430633689539539e-05, + 1.370495469418283e-05, 1.316632503854040e-05, 1.268365668517440e-05, + 1.225077823782328e-05, 1.186210973743353e-05, 1.151262854379065e-05, + 1.119783165039189e-05, 1.091369615272287e-05, 1.065663920990461e-05, + 1.042347850217293e-05, 1.021139388803442e-05, 1.001789069627884e-05, + 9.840764834171229e-06, 9.678069629572618e-06, 9.390947359804206e-06, + 9.143352873332702e-06, 8.926784950738852e-06, 8.734675808876698e-06, + 8.561944778029959e-06, 8.262937609909602e-06, 8.004812904728687e-06, + 7.775304996137108e-06, 7.566812067017914e-06, 7.374504885352833e-06, + 7.195185484149395e-06, 6.868959398009178e-06, 6.575099696809244e-06, + 6.307527548434789e-06, 6.062063541143196e-06, 5.835620804973305e-06, + 5.625802865565914e-06, 5.430687695836652e-06, 5.248698717037717e-06, + 5.078519922586094e-06, 4.919027754524164e-06, 4.629272422709293e-06, + 4.371091496502239e-06, 4.139800145973823e-06, 3.931640682527491e-06, + 3.743562033014108e-06, 3.573049055488049e-06, 3.278270269308905e-06, + 3.029207403289549e-06, 2.816618589088936e-06, 2.633548720033852e-06, + 2.474706650171701e-06, 2.336032207026764e-06, 2.109185638579228e-06, + 1.927203497272727e-06, 1.778616080496156e-06, 1.655480621293193e-06, + 1.552193161676942e-06, 1.464770422024337e-06, 1.328482645923067e-06, + 1.223427063236701e-06, 1.140762661442121e-06, 1.025237262489530e-06, + 9.439376846309401e-07, 8.847053439412785e-07, 8.406424276854504e-07, + 7.877135329147619e-07, 7.877135329147619e-07] + H2O2: [2.437037175001457e-15, 7.038764189413098e-15, 9.486036920390029e-14, + 1.325664741659555e-12, 7.819385227111018e-12, 5.559943242978262e-11, + 4.070900615200742e-10, 1.420253847556514e-09, 5.648823601571013e-09, + 1.277901885375006e-08, 3.114029575932029e-08, 7.806351333191348e-08, + 1.282767176995158e-07, 2.158355488157740e-07, 3.656303065488701e-07, + 4.784774682054709e-07, 6.275978224941041e-07, 8.214015799051974e-07, + 1.0679823652503e-06, 1.215099382097818e-06, 1.379359012040665e-06, + 1.561178982673442e-06, 1.760571921385053e-06, 1.977092198817878e-06, + 2.209813001078590e-06, 2.457340796589850e-06, 2.717869203575810e-06, + 2.989267977014176e-06, 3.269196916867187e-06, 3.555230367170314e-06, + 3.844976374234785e-06, 4.136175326588207e-06, 4.426765157599994e-06, + 4.714902964722389e-06, 4.998935376140313e-06, 5.277311335990481e-06, + 5.415676166544282e-06, 5.552014374861317e-06, 5.686060024679876e-06, + 5.817511058772775e-06, 5.946017539799880e-06, 6.071168431887873e-06, + 6.192476864352121e-06, 6.309363735325722e-06, 6.421139401288163e-06, + 6.526983084661626e-06, 6.625919560689138e-06, 6.716792718349774e-06, + 6.798235806350025e-06, 6.868638670199856e-06, 6.926113171223894e-06, + 6.968455625440846e-06, 6.993127808685295e-06, 6.997240328869234e-06, + 6.977535422865323e-06, 6.957232444969141e-06, 6.929479750859902e-06, + 6.893779145791773e-06, 6.849624560277960e-06, 6.796508735020671e-06, + 6.733931475829899e-06, 6.661409609998354e-06, 6.578488738817919e-06, + 6.484756826805940e-06, 6.379859593793033e-06, 6.263517578743335e-06, + 6.135544622351185e-06, 5.995867368904651e-06, 5.844545218722420e-06, + 5.681789975904637e-06, 5.5079842414826e-06, 5.323697413432040e-06, + 5.129697991844030e-06, 4.926960774412113e-06, 4.716667493038088e-06, + 4.500199517486771e-06, 4.279121465679652e-06, 4.055154934719692e-06, + 3.830142111387170e-06, 3.605999725145889e-06, 3.384664634213786e-06, + 3.168033219588723e-06, 3.061914151504057e-06, 2.957641458860846e-06, + 2.855415524439051e-06, 2.755420964361750e-06, 2.657827600150909e-06, + 2.562788185802714e-06, 2.470437199215378e-06, 2.380889868045675e-06, + 2.294241457983315e-06, 2.210566838348630e-06, 2.129920335844377e-06, + 2.052335880713031e-06, 1.977827442628249e-06, 1.906389746615061e-06, + 1.837999252395542e-06, 1.772615374040289e-06, 1.710181910923165e-06, + 1.650628655947878e-06, 1.593873143036179e-06, 1.539822493093762e-06, + 1.488375316200133e-06, 1.439423627651920e-06, 1.392854736711586e-06, + 1.348553069400595e-06, 1.306401890304459e-06, 1.266284892948281e-06, + 1.228087633644693e-06, 1.191698789572485e-06, 1.157011227961196e-06, + 1.123922879384874e-06, 1.092337414070097e-06, 1.062164725585733e-06, + 1.033321231127745e-06, 1.005730001704246e-06, 9.793207387683e-07, + 9.540296161922944e-07, 9.297990079165108e-07, 9.065771221661571e-07, + 8.843175628719044e-07, 8.629788379216611e-07, 8.425238329502277e-07, + 8.229192639734322e-07, 8.041346013837374e-07, 7.861431206259846e-07, + 7.524974081047889e-07, 7.217425361638110e-07, 6.937275132245864e-07, + 6.683082375928350e-07, 6.453416219191069e-07, 6.246820270317018e-07, + 6.061796720812141e-07, 5.896805951394467e-07, 5.750277203517774e-07, + 5.620626203069150e-07, 5.506276240561754e-07, 5.405679953943156e-07, + 5.317339807804223e-07, 5.239825942423722e-07, 5.171790638953850e-07, + 5.111979099607317e-07, 5.059236576889603e-07, 5.012512116258263e-07, + 4.970859319159984e-07, 4.933434606459761e-07, 4.899493483188766e-07, + 4.868385289600762e-07, 4.839546883486619e-07, 4.812495644680403e-07, + 4.786822132360748e-07, 4.762182664639851e-07, 4.738292031772034e-07, + 4.714916501430275e-07, 4.691867228135271e-07, 4.668994139597947e-07, + 4.646180340630531e-07, 4.623337050891757e-07, 4.600399078284702e-07, + 4.577320832926749e-07, 4.554072929942277e-07, 4.507045757451831e-07, + 4.459283060224890e-07, 4.410887570263187e-07, 4.362015509427184e-07, + 4.312845415164319e-07, 4.214247381242229e-07, 4.116591517484955e-07, + 4.020931080180980e-07, 3.927995357606562e-07, 3.838244359056521e-07, + 3.751926187504630e-07, 3.589808858385384e-07, 3.441377983004659e-07, + 3.305636654138356e-07, 3.181381452504858e-07, 3.067416878854584e-07, + 2.962638342888085e-07, 2.866058288493399e-07, 2.776807358041719e-07, + 2.694125809060784e-07, 2.617351443669837e-07, 2.479565575580510e-07, + 2.358726876653473e-07, 2.251926520217015e-07, 2.156884720845150e-07, + 2.071794656377763e-07, 1.995212856626930e-07, 1.863787699079089e-07, + 1.753373196788727e-07, 1.659275799859674e-07, 1.578128577522828e-07, + 1.507466263103881e-07, 1.445457274385107e-07, 1.343069059881935e-07, + 1.259715851000756e-07, 1.190583188676870e-07, 1.132378338190718e-07, + 1.082793084174321e-07, 1.040195246042431e-07, 9.724551023125628e-08, + 9.189395964823570e-08, 8.759068640925053e-08, 8.1419457421953e-08, + 7.694941885685293e-08, 7.361721841057857e-08, 7.109267646638014e-08, + 6.800371548904190e-08, 6.800371548904190e-08] + CH3: [-6.640844686132015e-15, 3.990643921187607e-14, 2.842700234011974e-13, + 4.026317776055947e-13, 1.265069743634452e-12, 7.756609890718485e-12, + 5.563511113969881e-11, 1.937388396954296e-10, 7.703751482168479e-10, + 1.745237899437170e-09, 4.260506773651770e-09, 1.072995365476258e-08, + 1.783719624661384e-08, 3.062106696097518e-08, 5.393048165496421e-08, + 7.352479026974902e-08, 1.021087570376311e-07, 1.445737013515691e-07, + 2.090732574035258e-07, 2.553469185287569e-07, 3.144765585507764e-07, + 3.904607117764376e-07, 4.886230180371555e-07, 6.160446808039032e-07, + 7.821269208210641e-07, 9.993202210364981e-07, 1.284069541904497e-06, + 1.658042886831558e-06, 2.149736877336625e-06, 2.7965897499629e-06, + 3.647781774878726e-06, 4.767968010249470e-06, 6.242272209345307e-06, + 8.182980959204843e-06, 1.073852569871350e-05, 1.410552337622870e-05, + 1.622426776202446e-05, 1.866721728375979e-05, 2.148510543728071e-05, + 2.473674584126548e-05, 2.849027230487785e-05, 3.282450294552307e-05, + 3.783042316399205e-05, 4.361277754257486e-05, 5.029175327925520e-05, + 5.800472350817327e-05, 6.690799320188112e-05, 7.717844884355717e-05, + 8.901495172913077e-05, 1.026392302419608e-04, 1.182959160270636e-04, + 1.362496443492212e-04, 1.567834415800915e-04, 1.801991874980564e-04, + 2.068056409100751e-04, 2.215150191829506e-04, 2.371500342340223e-04, + 2.537456096530340e-04, 2.713336439089660e-04, 2.899420269622710e-04, + 3.095935306898077e-04, 3.303045702840394e-04, 3.520838373111629e-04, + 3.749308095660841e-04, 3.988341483668633e-04, 4.237700005783631e-04, + 4.497002304880092e-04, 4.765706156509060e-04, 5.043090508612459e-04, + 5.328238152614532e-04, 5.620019689014374e-04, 5.917079562810157e-04, + 6.217825048509692e-04, 6.520419152399173e-04, 6.822778460833404e-04, + 7.122576986004936e-04, 7.417257032752546e-04, 7.704048019569105e-04, + 7.979994023657211e-04, 8.241990576200006e-04, 8.486830907083140e-04, + 8.711261431120883e-04, 8.814830676099026e-04, 8.912050098112905e-04, + 9.002526067948211e-04, 9.085877022336357e-04, 9.161733549777985e-04, + 9.229741764819891e-04, 9.289565870260055e-04, 9.340890705595197e-04, + 9.383424251254932e-04, 9.416900063399862e-04, 9.441079611825319e-04, + 9.455754493298511e-04, 9.460748492854263e-04, 9.455919466201262e-04, + 9.441161017465379e-04, 9.416403948012736e-04, 9.381617454057566e-04, + 9.336810053144575e-04, 9.282030222377894e-04, 9.217366734419064e-04, + 9.142948680738533e-04, 9.058945175338815e-04, 8.965564736100401e-04, + 8.863054344973331e-04, 8.751698192375621e-04, 8.631816115287362e-04, + 8.503761742573209e-04, 8.367920364950241e-04, 8.224706550669638e-04, + 8.074561531330398e-04, 7.917950385233015e-04, 7.755359048248870e-04, + 7.587291184286629e-04, 7.414264949043427e-04, 7.236809681804297e-04, + 7.055462560595890e-04, 6.870765255991570e-04, 6.683260618326823e-04, + 6.493489432029734e-04, 6.301987269228339e-04, 6.1092814798624e-04, + 5.915888324556645e-04, 5.722304898090753e-04, 5.529022738269224e-04, + 5.145164904385332e-04, 4.767790794500837e-04, 4.399960389378316e-04, + 4.044320096094416e-04, 3.703081658251646e-04, 3.378016451784703e-04, + 3.070463679930528e-04, 2.781350499327793e-04, 2.511221798556619e-04, + 2.260277209194459e-04, 2.028412943305457e-04, 1.815266196086403e-04, + 1.620260097880131e-04, 1.442647513100032e-04, 1.281552332674480e-04, + 1.136007262649259e-04, 1.004987450941971e-04, 8.874395993651507e-05, + 7.823064675894877e-05, 6.885468841364113e-05, 6.051515360665604e-05, + 5.311549168011508e-05, 4.6564387606862e-05, 4.077632443595173e-05, + 3.567190040777015e-05, 3.117794581892493e-05, 2.722748113069307e-05, + 2.375955335536489e-05, 2.071898288761836e-05, 1.805604802943482e-05, + 1.572612974319e-05, 1.368933482834192e-05, 1.191011185214761e-05, + 1.035687081939487e-05, 9.001614746069258e-06, 6.811784116020497e-06, + 5.148193391520538e-06, 3.885580724700034e-06, 2.927477717322418e-06, + 2.199856880407264e-06, 1.266659600948595e-06, 7.293471853869225e-07, + 4.199645688811844e-07, 2.415612388388239e-07, 1.382086637530723e-07, + 7.754363510980168e-08, 2.753566232806302e-08, 9.857178542669838e-09, + 3.557658601279458e-09, 1.294935855805303e-09, 4.754673771753627e-10, + 1.761433141405233e-10, 6.583932009345444e-11, 2.480403635299131e-11, + 9.335544070734490e-12, 3.268282995188432e-12, 6.133037741729199e-13, + 1.190754685894498e-13, 2.432390663784381e-14, 5.597449190420982e-15, + 1.737985268215554e-15, 8.483617207393556e-16, 5.554129166981295e-16, + 4.441555320699193e-16, 3.699942815202545e-16, 3.141057477322872e-16, + 2.706376310864196e-16, 2.362259925489897e-16, 1.867298915961865e-16, + 1.525822235358804e-16, 1.281392911647352e-16, 1.100788662683232e-16, + 9.637730548169074e-17, 8.575672016406390e-17, 7.090262283356540e-17, + 6.075658159977569e-17, 5.351999887496765e-17, 4.443428659938874e-17, + 3.869625783130323e-17, 3.483165780934516e-17, 3.211829250971422e-17, + 2.903084176179953e-17, 2.903084176179954e-17] + CH4: [0.05518666598192191, 0.05518666597240494, 0.05518666587713637, + 0.05518666457408979, 0.055186657710188, 0.055186607213384, + 0.05518623572577087, 0.05518516453564409, 0.05518069062374577, + 0.05517312794364214, 0.05515358867608895, 0.05510327361438362, + 0.05504853235081923, 0.05495144342690823, 0.054780722232442, + 0.05464712759481336, 0.05446481629470967, 0.05421796755123359, + 0.05388709068084980, 0.05367904182256276, 0.05343746009810486, + 0.05315817638738698, 0.05283685610909522, 0.05246907862969034, + 0.05205042641837683, 0.05157657675991175, 0.05104338757179742, + 0.05044696903810836, 0.04978373454389490, 0.04905042748492875, + 0.04824412424320594, 0.04736221709129767, 0.04640238328425809, + 0.04536254774903196, 0.04424084666176326, 0.04303559827822473, + 0.04239183255893878, 0.04172527595102054, 0.04103574618683599, + 0.04032307519305987, 0.03958711051115961, 0.03882771737382815, + 0.03804478155732599, 0.03723821315119951, 0.03640795141233837, + 0.03555397090293228, 0.034676289154651, 0.03377497615662946, + 0.03285016603356095, 0.03190207136191019, 0.03093100066521355, + 0.02993746755959778, 0.02892209232583137, 0.02788534862800556, + 0.02682781645832261, 0.02628817971643415, 0.02574350812726497, + 0.02519392076497078, 0.02463954984301556, 0.02408054222216185, + 0.02351706106701545, 0.02294928765565954, 0.02237742334390515, + 0.02180169168186758, 0.02122234067584548, 0.02063964518272649, + 0.02005390941729419, 0.01946546954481714, 0.01887469632216703, + 0.01828199774049874, 0.01768782161137126, 0.01709265802632504, + 0.01649704160771475, 0.01590155345649087, 0.01530682269124396, + 0.01471352746290923, 0.01412239532195737, 0.01353420281064782, + 0.01294977415303507, 0.01236997892096, 0.01179572856620719, + 0.01122797172781783, 0.01094625366368507, 0.01066654292946969, + 0.01038896926420875, 0.01011365873932, 9.840740358872889e-03, + 9.570343474795436e-03, 9.302597454147113e-03, 9.037631319104065e-03, + 8.775573377382282e-03, 8.516550839450972e-03, 8.260689424503713e-03, + 8.008112957369648e-03, 7.758942958739815e-03, 7.513298231261597e-03, + 7.271294444216929e-03, 7.033043719627210e-03, 6.798654222735781e-03, + 6.568229759891436e-03, 6.341869386893940e-03, 6.119667030868791e-03, + 5.901711128701521e-03, 5.688084284989335e-03, 5.478862952358373e-03, + 5.274117136842946e-03, 5.073910130838863e-03, 4.878298275921568e-03, + 4.687330757566918e-03, 4.501049433532912e-03, 4.319488697354427e-03, + 4.142675378076721e-03, 3.970628677016303e-03, 3.803360141985189e-03, + 3.640873679060319e-03, 3.483165601628765e-03, 3.330224716088248e-03, + 3.182032443250776e-03, 3.038562974174564e-03, 2.899783458850769e-03, + 2.765654225898894e-03, 2.636129031175831e-03, 2.511155337561251e-03, + 2.390674608943627e-03, 2.274619400184725e-03, 2.162923506651552e-03, + 1.952593850891985e-03, 1.758674103857644e-03, 1.580459350038697e-03, + 1.417195254060487e-03, 1.268090392238301e-03, 1.132328234715150e-03, + 1.009078514243226e-03, 8.975077649221398e-04, 7.967888645498167e-04, + 7.061094648728180e-04, 6.246792425279101e-04, 5.517359479147709e-04, + 4.865502682185704e-04, 4.284295534128206e-04, 3.767204798995153e-04, + 3.308107454876372e-04, 2.901299020165281e-04, 2.541494387008718e-04, + 2.223822309873433e-04, 1.943814672432750e-04, 1.697391598482426e-04, + 1.480843391041162e-04, 1.290810186226734e-04, 1.124260101991058e-04, + 9.784665522744425e-05, 8.509852893439993e-05, 7.396316345982091e-05, + 6.424582634755522e-05, 5.577338248968884e-05, 4.839226007182211e-05, + 4.196653461702950e-05, 3.637613979414808e-05, 3.151520918094296e-05, + 2.729054957131869e-05, 2.362024359196378e-05, 1.772959956172424e-05, + 1.329122923000426e-05, 9.949932974103490e-06, 7.434757877009528e-06, + 5.539472488838330e-06, 3.139414991877778e-06, 1.779045993442230e-06, + 1.008243256084676e-06, 5.709215116247395e-07, 3.216360469737606e-07, + 1.775414893557908e-07, 6.139242834859833e-08, 2.141299281518548e-08, + 7.538615885275598e-09, 2.680045402590819e-09, 9.623476093429868e-10, + 3.490607506667949e-10, 1.278780882898567e-10, 4.726198378558360e-11, + 1.746453895452354e-11, 5.994570513345606e-12, 1.091297318408906e-12, + 2.044690626152096e-13, 3.949094640786698e-14, 7.938419721544079e-15, + 1.724519075510032e-15, 4.182247326018889e-16, 1.422027223604958e-16, + 1.016796399703993e-16, 8.519854576896344e-17, 7.380613348515139e-17, + 6.499967159751330e-17, 5.798635932978181e-17, 4.781007120681138e-17, + 4.066391433546381e-17, 3.546562889934920e-17, 3.156609235347857e-17, + 2.856609108740321e-17, 2.621031678614257e-17, 2.286734969257743e-17, + 2.053989468138467e-17, 1.885489140524189e-17, 1.670610185879699e-17, + 1.532408987580316e-17, 1.438033505153792e-17, 1.371006113249382e-17, + 1.293803900086048e-17, 1.293803900086050e-17] + CO: [3.247715922733025e-13, 8.207133538446695e-12, 8.730952383291450e-11, + 1.172105497422877e-09, 6.886463292611610e-09, 4.892628747691686e-08, + 3.581988881152409e-07, 1.249991441097783e-06, 4.974637819684290e-06, + 1.127077896518660e-05, 2.753781945757442e-05, 6.942698065311056e-05, + 1.150017893710766e-04, 1.958342435963769e-04, 3.379728189118245e-04, + 4.49203121295e-04, 6.009972127978380e-04, 8.065296191023339e-04, + 1.082031784989423e-03, 1.255265569383477e-03, 1.456423715777958e-03, + 1.688978968153132e-03, 1.956542325593036e-03, 2.262797117708740e-03, + 2.611425047901260e-03, 3.006030216266276e-03, 3.450068188940715e-03, + 3.946787040633394e-03, 4.499185815823181e-03, 5.109993270760286e-03, + 5.781666651638025e-03, 6.516407354825220e-03, 7.316188204743256e-03, + 8.182786056817340e-03, 9.117813398988596e-03, 0.01012274323257168, + 0.01065963601843470, 0.01121562792916934, 0.01179088339207811, + 0.01238555545546029, 0.01299978452683809, 0.01363369662470079, + 0.01428740107265597, 0.01496098754717017, 0.01565452236690583, + 0.01636804388055912, 0.01710155676743095, 0.01785502500777164, + 0.01862836321032749, 0.01942142591222521, 0.02023399440082291, + 0.02106568701993335, 0.02191604338840277, 0.02278473881232211, + 0.02367137509405963, 0.02412404141947164, 0.02458110148906731, + 0.02504247236017540, 0.02550806146638712, 0.02597776536472, + 0.02645146831948782, 0.02692904070737925, 0.02741033722845274, + 0.02789519490846677, 0.02838343087933590, 0.02887483992667546, + 0.02936919179655016, 0.02986622825783874, 0.03036565992224, + 0.03086716283103494, 0.03137037482642476, 0.03187489173567850, + 0.03238026340850781, 0.03288598966200194, 0.03339151620301853, + 0.03389623061491974, 0.03439945851365356, 0.03490045999695494, + 0.03539842652928334, 0.03589247842327618, 0.03638166309503371, + 0.03686495428309555, 0.03710452311324978, 0.03734218610441074, + 0.03757779116715415, 0.03781118584758515, 0.03804221160230249, + 0.03827070590062912, 0.03849650242741871, 0.03871943132695379, + 0.03893931947512574, 0.03915599078526343, 0.03936926654817395, + 0.03957896580669971, 0.03978490576483092, 0.03998690223110355, + 0.04018477009568553, 0.04037832384020478, 0.04056737807900225, + 0.04075174813010545, 0.04093125061382336, 0.04110570407645318, + 0.04127492963618890, 0.04143875164792101, 0.04159699838322348, + 0.04174950272145777, 0.04189610284758299, 0.04203664295194037, + 0.04217097392702165, 0.04229895405599960, 0.04242044968763034, + 0.04253533589202756, 0.04264349709176160, 0.04274482766275448, + 0.04283923249953642, 0.04292662753959189, 0.04300694024176311, + 0.04308011001398133, 0.04314608858598706, 0.04320484032312924, + 0.04325634247785282, 0.04330058537604141, 0.04333757253464404, + 0.04336732071384076, 0.04338986050335343, 0.04340523414304275, + 0.04341466139026963, 0.04339637443077846, 0.04335116258105790, + 0.04327999389805044, 0.04318399776518209, 0.04306444473362135, + 0.04292272431368180, 0.04276032145616029, 0.04257879246960348, + 0.04237974108924719, 0.04216479535129223, 0.04193558583875364, + 0.04169372576003738, 0.04144079320665072, 0.04117831581969538, + 0.04090775798290618, 0.04063051055833131, 0.04034788309330889, + 0.04006109835649375, 0.03977128900719833, 0.03947949616588280, + 0.03918666963289279, 0.03889366949548449, 0.03860126886742441, + 0.03831015751844462, 0.03802094617015118, 0.03773417125837686, + 0.03745029998750474, 0.03716973552840025, 0.03689282223704802, + 0.03661985079490424, 0.03635106319377034, 0.03608665750731765, + 0.03582679240811720, 0.03557159140279383, 0.03507571555756941, + 0.03459913109280931, 0.03414190217242163, 0.03370383951286524, + 0.03328456706472434, 0.03250154641160252, 0.03178554351816935, + 0.03113087174355794, 0.03053179478280113, 0.02998280711481517, + 0.02947877697323684, 0.02859264924991098, 0.02783216671447120, + 0.02717214699177573, 0.02659263726707241, 0.02607791840470307, + 0.02561563874263110, 0.02519609964014283, 0.02481168131137187, + 0.02445638783523188, 0.02412548981313435, 0.02352652236898862, + 0.02298637600853718, 0.02249188317187708, 0.02203428145384602, + 0.02160759240247256, 0.02120762726504064, 0.02048007431017125, + 0.01982362798046686, 0.01922705388341817, 0.01868222400924027, + 0.01818296113803308, 0.01772452482260548, 0.01692098737856303, + 0.01622289218003102, 0.01561087489754111, 0.01507049215608713, + 0.01459080321368028, 0.01416375267784772, 0.01345319777949559, + 0.01286411161129585, 0.01237114365370919, 0.01163123009152403, + 0.01107047140324247, 0.01063791377983136, 0.01030165739546825, + 9.879839526301349e-03, 9.879839526301349e-03] + CO2: [4.750505672567616e-13, 1.224164967927148e-11, 1.303237836772711e-10, + 1.749680966932029e-09, 1.027993605805036e-08, 7.303596887361110e-08, + 5.347106287222987e-07, 1.865956991664344e-06, 7.426019075450026e-06, + 1.682474650260284e-05, 4.110779240435014e-05, 1.036389323251378e-04, + 1.716719695316970e-04, 2.923369585208227e-04, 5.045190297724984e-04, + 6.705626643067677e-04, 8.971608120800429e-04, 1.203981989721963e-03, + 1.615259776051031e-03, 1.873871902712838e-03, 2.174174242056071e-03, + 2.521352823428328e-03, 2.920800688148230e-03, 3.378019618502874e-03, + 3.898509883687080e-03, 4.487656969580879e-03, 5.150625834213497e-03, + 5.892273024182527e-03, 6.717084781614151e-03, 7.629145423873636e-03, + 8.632135654223067e-03, 9.729356141177798e-03, 0.01092376859754708, + 0.01221804514251651, 0.01361461683982736, 0.01511571345240603, + 0.01591774555842554, 0.01674835324586936, 0.01760779124444964, + 0.01849629948100376, 0.01941410178048311, 0.02036140396716274, + 0.02133839128496673, 0.02234522503757616, 0.02338203832723452, + 0.02444893074573510, 0.02554596184167199, 0.02667314315425714, + 0.02783042856554787, 0.02901770267995675, 0.03023476689370712, + 0.03148121258286958, 0.03275655696831806, 0.03406057778898616, + 0.03539301712830856, 0.03607400330886093, 0.03676214166450453, + 0.03745738481507695, 0.03815968151523, 0.03886897624463345, + 0.03958520873979927, 0.04030831346198947, 0.04103821899596593, + 0.04177484737490434, 0.04251811332771216, 0.04326792344631591, + 0.04402417527231523, 0.04478675630479392, 0.04555554293409590, + 0.04633039931004240, 0.04711117615738843, 0.04789770955623108, + 0.04868981971046493, 0.04948730973303284, 0.05028996448234276, + 0.05109754948942909, 0.05190981001975042, 0.05272647031638192, + 0.05354723307220795, 0.05437177917699666, 0.05519976778046709, + 0.05603083670246712, 0.05644834417402560, 0.05686647813255902, + 0.05728518337876687, 0.05770441052946205, 0.05812410575753952, + 0.05854421422032886, 0.05896468011714801, 0.05938544676771218, + 0.05980645668584328, 0.06022765165609339, 0.06064897281262185, + 0.06107036071961815, 0.06149175545254285, 0.06191309667944331, + 0.06233432374160886, 0.06275537573282430, 0.06317619157653526, + 0.06359671010025870, 0.06401687010663741, 0.06443661044059862, + 0.06485587005215215, 0.06527458805445939, 0.06569270377688335, + 0.06611015681283451, 0.06652688706233575, 0.06694283476931899, + 0.06735794055377338, 0.06777214543896314, 0.06818539087402108, + 0.06859761875231069, 0.06900877142601325, 0.06941879171747908, + 0.06982762292790609, 0.07023520884396657, 0.07064149374301837, + 0.07104642239753824, 0.07144994007942143, 0.07185199256476504, + 0.07225252613971815, 0.07265148760794993, 0.07304882428569789, + 0.07344448402936729, 0.07383842620669505, 0.07423058906238247, + 0.07500861699780907, 0.07577899369171237, 0.07654133426890208, + 0.07729526575026095, 0.07804042844631572, 0.07877647748887837, + 0.07950308444585215, 0.08021993895833920, 0.08092675033768233, + 0.08162324906290655, 0.08230918812525211, 0.08298434417536633, + 0.08364851843921961, 0.08430153738002676, 0.08494325309457544, + 0.08557354344269473, 0.08619231191769415, 0.08679948727312181, + 0.08739502292702862, 0.08797889616905430, 0.08855110719820126, + 0.08911167802029203, 0.08966065123404642, 0.09019808873370415, + 0.09072407035438304, 0.09123869248411659, 0.09174206666396058, + 0.09223431819484135, 0.09271558476707724, 0.09318601512583223, + 0.09364576778323255, 0.09409500978555357, 0.09453391554176878, + 0.09496266571789362, 0.09538144619894844, 0.09618925169268333, + 0.09695976501195587, 0.09769456619749989, 0.09839524313094332, + 0.09906337430335233, 0.1003055857643619, 0.1014373721739124, + 0.1024698692029, 0.1034133502399116, 0.1042771861266121, + 0.1050698528877935, 0.1064627294649633, 0.1076578010719531, + 0.1086948904959316, 0.1096054359089088, 0.1104141658432108, + 0.1111404979042861, 0.1117996743194108, 0.1124036685823029, + 0.1129619019133631, 0.1134818052731512, 0.1144228962893356, + 0.1152715682487873, 0.1160485098947670, 0.1167674886244007, + 0.1174378977156102, 0.1180663184902240, 0.1192094415987434, + 0.1202408427684380, 0.1211781733519592, 0.1220342039879353, + 0.1228186402555935, 0.1235389302928468, 0.1248014393824313, + 0.1258982787889839, 0.1268598735315961, 0.1277089168804136, + 0.1284625988075212, 0.1291335758559221, 0.1302499918026143, + 0.1311755574324073, 0.1319501031994746, 0.1331126471510514, + 0.1339937049590549, 0.1346733346810661, 0.1352016569681842, + 0.1358644125050918, 0.1358644125050918] + size: 209 + N2: [0.7246720963311385, 0.7246720963311385, 0.7246720963311386, + 0.7246720963311395, 0.7246720963311444, 0.7246720963311803, + 0.7246720963314435, 0.7246720963321994, 0.7246720963353467, + 0.7246720963406450, 0.7246720963542789, 0.7246720963892729, + 0.7246720964271641, 0.7246720964940208, 0.7246720966111064, + 0.7246720967021110, 0.7246720968253267, 0.7246720969909513, + 0.7246720972117765, 0.7246720973491296, 0.7246720975066094, + 0.7246720976864555, 0.7246720978909511, 0.7246720981223770, + 0.7246720983829557, 0.7246720986748173, 0.7246720989999339, + 0.7246720993601092, 0.7246720997569477, 0.7246721001918639, + 0.7246721006660855, 0.7246721011806814, 0.7246721017365961, + 0.7246721023346802, 0.7246721029757230, 0.7246721036642096, + 0.7246721040271197, 0.7246721043987662, 0.7246721047792, + 0.7246721051684875, 0.7246721055667039, 0.7246721059739375, + 0.7246721063902849, 0.7246721068158506, 0.7246721072507452, + 0.7246721076950827, 0.7246721081489764, 0.7246721086125354, + 0.7246721090858601, 0.7246721095690362, 0.7246721100621292, + 0.7246721105651323, 0.7246721110780160, 0.7246721116008699, + 0.7246721121393059, 0.7246721124105904, 0.7246721126835608, + 0.7246721129582815, 0.7246721132348154, 0.7246721135132225, + 0.7246721137935616, 0.7246721140758875, 0.7246721143602546, + 0.7246721146467120, 0.7246721149353059, 0.7246721152260811, + 0.7246721155190761, 0.7246721158143270, 0.7246721161118657, + 0.7246721164117205, 0.7246721167139151, 0.7246721170184681, + 0.7246721173253964, 0.7246721176347081, 0.7246721179464121, + 0.7246721182605109, 0.7246721185770018, 0.7246721188958791, + 0.7246721192171316, 0.7246721195407465, 0.7246721198667042, + 0.7246721201703515, 0.7246721202314015, 0.7246721204007543, + 0.7246721205618072, 0.7246721207217747, 0.7246721208803434, + 0.7246721210376162, 0.7246721211934858, 0.7246721213478463, + 0.7246721215005882, 0.7246721216516088, 0.7246721218008, + 0.72467212194806, 0.7246721220932847, 0.7246721222363740, + 0.7246721223772287, 0.7246721225157532, 0.7246721226518489, + 0.7246721227854261, 0.7246721229163924, 0.7246721230446618, + 0.7246721231701477, 0.7246721232927685, 0.7246721234124445, + 0.7246721235291015, 0.7246721236426646, 0.7246721237530626, + 0.7246721238602315, 0.7246721239641079, 0.7246721240646289, + 0.7246721241617405, 0.7246721242553873, 0.7246721243455202, + 0.7246721244320872, 0.7246721245150495, 0.7246721245943611, + 0.7246721246699844, 0.7246721247418815, 0.7246721248100194, + 0.7246721248743645, 0.7246721249348865, 0.7246721249918664, + 0.7246721250449044, 0.7246721248481, 0.7246721250762502, + 0.7246721251432370, 0.7246721252057106, 0.7246721252638343, + 0.7246721253177696, 0.7246721253676937, 0.7246721254137843, + 0.7246721254562325, 0.7246721254952236, 0.7246721255309464, + 0.7246721255635947, 0.7246721255933527, 0.7246721256204027, + 0.7246721256449277, 0.7246721256670992, 0.7246721256870848, + 0.7246721257050458, 0.7246721257211349, 0.7246721257354986, + 0.7246721257482742, 0.7246721257595913, 0.7246721257695730, + 0.7246721257783327, 0.7246721257859777, 0.7246721257926086, + 0.7246721257983164, 0.7246721258031872, 0.7246721258073008, + 0.7246721258107304, 0.7246721258135440, 0.7246721258158039, + 0.7246721258175678, 0.7246721258188884, 0.7246721258198147, + 0.7246721258203914, 0.7246721258131797, 0.7246721258130351, + 0.7246721258126351, 0.7246721258120451, 0.7246721258113210, + 0.7246721258073053, 0.7246721258056941, 0.7246721258040266, + 0.7246721258023626, 0.7246721258007472, 0.7246721257992172, + 0.7246721257970763, 0.7246721257946178, 0.7246721257921896, + 0.7246721257898190, 0.7246721257875319, 0.7246721257853554, + 0.7246721257833184, 0.7246721257814520, 0.7246721257797898, + 0.7246721257783684, 0.7246721257773332, 0.7246721257754583, + 0.7246721257736815, 0.7246721257720444, 0.7246721257705958, + 0.7246721257693924, 0.7246721257685957, 0.7246721257672106, + 0.7246721257658736, 0.7246721257646237, 0.7246721257635118, + 0.7246721257626063, 0.7246721257620621, 0.7246721257612193, + 0.7246721257603959, 0.7246721257596118, 0.7246721257589006, + 0.7246721257583199, 0.7246721257580058, 0.7246721257576083, + 0.7246721257572717, 0.7246721257570972, 0.7246721257568994, + 0.7246721257567322, 0.7246721257566655, 0.724672125757, + 0.7246721257617005, 0.7246721258884450] + type: free-flow + grid: [0.0, 2.0e-03, 3.0e-03, 4.0e-03, 4.5e-03, 5.0e-03, 5.5e-03, 5.75e-03, + 6.0e-03, 6.125e-03, 6.25e-03, 6.375e-03, 6.4375e-03, 6.5e-03, 6.5625e-03, + 6.59375e-03, 6.625e-03, 6.65625e-03, 6.6875e-03, 6.703125e-03, + 6.71875e-03, 6.734375e-03, 6.75e-03, 6.765625e-03, 6.78125e-03, + 6.796875e-03, 6.8125e-03, 6.828125e-03, 6.84375e-03, 6.859375e-03, + 6.875e-03, 6.890625e-03, 6.90625e-03, 6.921875e-03, 6.9375e-03, + 6.953125e-03, 6.9609375e-03, 6.96875e-03, 6.9765625e-03, 6.984375e-03, + 6.9921875e-03, 7.0e-03, 7.0078125e-03, 7.015625e-03, 7.0234375e-03, + 7.03125e-03, 7.0390625e-03, 7.046875e-03, 7.0546875e-03, 7.0625e-03, + 7.0703125e-03, 7.078125e-03, 7.0859375e-03, 7.09375e-03, 7.1015625e-03, + 7.10546875e-03, 7.109375e-03, 7.11328125e-03, 7.1171875e-03, + 7.12109375e-03, 7.125e-03, 7.12890625e-03, 7.1328125e-03, 7.13671875e-03, + 7.140625e-03, 7.14453125e-03, 7.1484375e-03, 7.15234375e-03, 7.15625e-03, + 7.16015625e-03, 7.1640625e-03, 7.16796875e-03, 7.171875e-03, + 7.17578125e-03, 7.1796875e-03, 7.18359375e-03, 7.1875e-03, + 7.19140625e-03, 7.1953125e-03, 7.19921875e-03, 7.203125e-03, + 7.20703125e-03, 7.208984375e-03, 7.2109375e-03, 7.212890625e-03, + 7.21484375e-03, 7.216796875e-03, 7.21875e-03, 7.220703125e-03, + 7.22265625e-03, 7.224609375e-03, 7.2265625e-03, 7.228515625e-03, + 7.23046875e-03, 7.232421875e-03, 7.234375e-03, 7.236328125e-03, + 7.23828125e-03, 7.240234375e-03, 7.2421875e-03, 7.244140625e-03, + 7.24609375e-03, 7.248046875e-03, 7.25e-03, 7.251953125e-03, + 7.25390625e-03, 7.255859375e-03, 7.2578125e-03, 7.259765625e-03, + 7.26171875e-03, 7.263671875e-03, 7.265625e-03, 7.267578125e-03, + 7.26953125e-03, 7.271484375e-03, 7.2734375e-03, 7.275390625e-03, + 7.27734375e-03, 7.279296875e-03, 7.28125e-03, 7.283203125e-03, + 7.28515625e-03, 7.287109375e-03, 7.2890625e-03, 7.291015625e-03, + 7.29296875e-03, 7.296875e-03, 7.30078125e-03, 7.3046875e-03, + 7.30859375e-03, 7.3125e-03, 7.31640625e-03, 7.3203125e-03, + 7.32421875e-03, 7.328125e-03, 7.33203125e-03, 7.3359375e-03, + 7.33984375e-03, 7.34375e-03, 7.34765625e-03, 7.3515625e-03, + 7.35546875e-03, 7.359375e-03, 7.36328125e-03, 7.3671875e-03, + 7.37109375e-03, 7.375e-03, 7.37890625e-03, 7.3828125e-03, 7.38671875e-03, + 7.390625e-03, 7.39453125e-03, 7.3984375e-03, 7.40234375e-03, 7.40625e-03, + 7.41015625e-03, 7.4140625e-03, 7.41796875e-03, 7.421875e-03, + 7.42578125e-03, 7.4296875e-03, 7.4375e-03, 7.4453125e-03, 7.453125e-03, + 7.4609375e-03, 7.46875e-03, 7.484375e-03, 7.5e-03, 7.515625e-03, + 7.53125e-03, 7.546875e-03, 7.5625e-03, 7.59375e-03, 7.625e-03, + 7.65625e-03, 7.6875e-03, 7.71875e-03, 7.75e-03, 7.78125e-03, 7.8125e-03, + 7.84375e-03, 7.875e-03, 7.9375e-03, 8.0e-03, 8.0625e-03, 8.125e-03, + 8.1875e-03, 8.25e-03, 8.375e-03, 8.5e-03, 8.625e-03, 8.75e-03, 8.875e-03, + 9.0e-03, 9.25e-03, 9.5e-03, 9.75e-03, 0.01, 0.01025, 0.0105, 0.011, + 0.0115, 0.012, 0.013, 0.014, 0.015, 0.016, 0.018, 0.02] + velocity: [0.2905219569067093, 0.2905219571828164, 0.2905219599438704, + 0.2905219977976566, 0.2905221971951902, 0.2905236641390949, + 0.2905344561218914, 0.2905655764052590, 0.2906955778923427, + 0.2909153935208572, 0.2914837436520945, 0.2929501013929648, + 0.2945475417278833, 0.2973887581859902, 0.3024091235931571, + 0.3063389845446498, 0.3117180587833895, 0.3190294580203655, + 0.3288768582245982, 0.3350413637322511, 0.3422068866464203, + 0.3504990694308206, 0.3600482284744435, 0.3709865322306576, + 0.3834447128192074, 0.3975485350567739, 0.4134153176764934, + 0.4311508308120639, 0.4508468672421481, 0.4725797023014128, + 0.4964095348817399, 0.5223808670632959, 0.5505236620018624, + 0.5808550410440185, 0.6133812527551670, 0.6480996680020815, + 0.6662991000626701, 0.6850576219220235, 0.7043728897715894, + 0.7242422434648068, 0.7446627304171018, 0.7656311186440823, + 0.7871438977791091, 0.8091972670165530, 0.8317871089060853, + 0.8549089477422451, 0.8785578909345451, 0.9027285512091237, + 0.9274149468134796, 0.9526103761377641, 0.9783072623854099, + 1.004496908809062, 1.031169050740164, 1.058311981515395, + 1.085912314630399, 1.099881996041632, 1.113961076900347, + 1.128147160457658, 1.142437652109969, 1.156829738026273, + 1.171320361554554, 1.185906197232820, 1.200583622241477, + 1.215348685153399, 1.230197071869035, 1.245124068667575, + 1.260124522364968, 1.275192797647450, 1.290322731747484, + 1.305507586750022, 1.320739999961903, 1.336011932946865, + 1.351314620022363, 1.366638517229355, 1.381973253018903, + 1.397307582142371, 1.412629344476193, 1.427925430745694, + 1.443181757320639, 1.458383252421692, 1.473513856183841, + 1.488556537000944, 1.496038771933413, 1.503492069467419, + 1.510913995397834, 1.518302124488207, 1.525653955518726, + 1.532966942934879, 1.540238500611806, 1.547466006186927, + 1.554646805718230, 1.561778218744469, 1.568857543741220, + 1.575882063962752, 1.582849053656313, 1.589755784631681, + 1.596599533164584, 1.603377587209479, 1.610087253892474, + 1.616725867252208, 1.623290796192143, 1.629779452604816, + 1.636189299624487, 1.642517859962531, 1.648762724276142, + 1.654921559518969, 1.660992117220245, 1.666972241636989, + 1.672859877722988, 1.678653078857224, 1.684350014274796, + 1.689948976142990, 1.695448386227087, 1.700846802091354, + 1.706142922783387, 1.711335593952564, 1.716423812357105, + 1.721406729718111, 1.726283655883608, 1.731054061271386, + 1.735717578563862, 1.740274003636183, 1.744723295616, 1.749065576334864, + 1.753301187447713, 1.757430516114324, 1.765372288764880, + 1.772899412138019, 1.780020758539447, 1.786747293326798, + 1.793091852694744, 1.799068894929352, 1.804694233147906, + 1.809984757846264, 1.814958157477101, 1.819632644797976, + 1.824026695916606, 1.828158807894983, 1.832047279536529, + 1.835710018664326, 1.839164377886533, 1.842427019609433, + 1.845513809959265, 1.848439740349768, 1.851218874704694, + 1.853864319819523, 1.856388216014859, 1.858801745077052, + 1.861115152472420, 1.863337780932490, 1.865478112707050, + 1.867543818042274, 1.869541807737330, 1.871478287943279, + 1.873358815675801, 1.875188353806373, 1.876971324565393, + 1.878711660831223, 1.880412854687572, 1.882078002908943, + 1.883709849160625, 1.886881262482567, 1.889945915271714, + 1.892916319301412, 1.895802324788626, 1.898611737901652, + 1.904020763210271, 1.909187113936804, 1.914135323043892, + 1.918883614928204, 1.923446427958166, 1.927835837489208, + 1.936129549752284, 1.943857356724486, 1.951078877049506, + 1.957845339417835, 1.964201057829339, 1.970184501930557, + 1.975829166249620, 1.981164298896386, 1.986215512617018, + 1.991005283478509, 1.999863780975622, 2.007928642554278, + 2.015305951135082, 2.022081951492399, 2.028327393500021, + 2.034100628234249, 2.044380767886724, 2.053390683766458, + 2.061356557386271, 2.068450557564490, 2.074805203470808, + 2.080522645004686, 2.090284554430835, 2.098528049443768, + 2.105581442577328, 2.111681053275232, 2.116999413809557, + 2.121661259470699, 2.129271245925710, 2.135454620109248, + 2.140542908903751, 2.148037296587159, 2.153612487859878, + 2.157852162450954, 2.161112196896217, 2.165158524713242, + 2.165158524981732] + D: [1.107848174162564, 1.107848173109685, 1.107848162580950, + 1.107848018233028, 1.107847257870624, 1.107841664007043, + 1.107800512922645, 1.107681864782549, 1.107186500222119, + 1.106349910278407, 1.104192691833961, 1.098665670427094, + 1.092707199927950, 1.082267606748884, 1.064300626300255, + 1.050647276075564, 1.032517079559433, 1.008854234764684, + 0.9786466020019624, 0.9606402511415647, 0.9405252564372346, + 0.9182741065704046, 0.8939197429589645, 0.8675630835647298, + 0.8393758190200605, 0.8095972981755093, 0.7785251443598789, + 0.7465002891499, 0.7138881142182194, 0.6810580697227145, + 0.6483642984292697, 0.6161294183676551, 0.5846328540873237, + 0.5541042032539940, 0.5247213184949097, 0.4966122273099303, + 0.4830476577171987, 0.4698206534800883, 0.4569372618606808, + 0.4444013345856027, 0.4322147549353288, 0.4203776618748113, + 0.4088886674973468, 0.3977450648783348, 0.3869430242426228, + 0.3764777761110614, 0.3663437807819857, 0.3565348840990707, + 0.3470444599385866, 0.3378655401996863, 0.3289909333053335, + 0.3204133496750423, 0.3121255617952668, 0.3041203585222684, + 0.2963906154203925, 0.2926261365981333, 0.2889277066132170, + 0.2852945346814719, 0.2817258505008386, 0.2782209071872186, + 0.2747789842376811, 0.2713993905302369, 0.2680814673653155, + 0.2648245915491962, 0.2616281785137483, 0.2584916854599133, + 0.2554146145042775, 0.2523965157988391, 0.2494369905837165, + 0.2465356941211332, 0.2436923384467685, 0.2409066948617497, + 0.2381785960756142, 0.2355079378980807, 0.2328946803660547, + 0.2303388481828737, 0.2278405303401796, 0.2253998787900594, + 0.2230171060370829, 0.2206924815274766, 0.2184263267266037, + 0.21621900880392, 0.2151376186442781, 0.2140711118581249, + 0.2130195497296296, 0.2119829866454616, 0.2109614816741717, + 0.2099550942445339, 0.2089638837422822, 0.2079879090656853, + 0.2070272281737970, 0.2060818976180329, 0.2051519720588308, + 0.2042375037693432, 0.2033385421282864, 0.2024551331042312, + 0.2015873187337927, 0.2007351365963062, 0.1998986192877145, + 0.1990777938965031, 0.1982726814846217, 0.1974832965764017, + 0.1967096466585591, 0.1959517316943848, 0.1952095436552747, + 0.1944830660727328, 0.1937722736139633, 0.1930771316841229, + 0.1923975960582280, 0.1917336125456318, 0.1910851166898528, + 0.1904520335063942, 0.1898342772610375, 0.1892317512908723, + 0.1886443478701329, 0.1880719481226285, 0.1875144219823173, + 0.1869716282032472, 0.1864434144197844, 0.1859296172577015, + 0.1854300624963439, 0.1849445652817120, 0.1844729303995375, + 0.1840149525771341, 0.1835704103740233, 0.1831390863744442, + 0.1823152097500621, 0.1815411618584624, 0.1808148683757777, + 0.1801341579675598, 0.1794967830132630, 0.1789004412970576, + 0.1783427980954, 0.1778215080924876, 0.1773342365805724, + 0.1768786794511014, 0.1764525815512792, 0.1760537530639163, + 0.1756800836608, 0.1753295542753605, 0.1750002464335480, + 0.1746903491677798, 0.1743981636136991, 0.1741221054508281, + 0.1738607053946145, 0.1736126079787266, 0.1733765688835525, + 0.1731514510712489, 0.1729362199813891, 0.1727299380265406, + 0.1725317586062694, 0.1723409198332606, 0.1721567381384074, + 0.1719786018944141, 0.1718059651709819, 0.1716383417098814, + 0.1714752991858130, 0.1713164537992363, 0.1711614652304716, + 0.1710100319702933, 0.1708618870325652, 0.1705747075087958, + 0.1702981111009876, 0.1700308757305781, 0.1697720354324951, + 0.1695208204148479, 0.1690392382685674, 0.1685818100871418, + 0.1681460111986105, 0.1677299326346857, 0.1673320425195117, + 0.1669510511266154, 0.1662358903162576, 0.1655750193599841, + 0.1649621772140764, 0.1643920553866404, 0.1638601192044617, + 0.1633624765413102, 0.1628957730645862, 0.1624571064903943, + 0.1620439561755271, 0.1616541262613565, 0.1609380711554326, + 0.1602916620958781, 0.1597048921056321, 0.1591697207173453, + 0.1586796197293776, 0.1582292513066016, 0.1574335977643245, + 0.1567428069259526, 0.1561370925065146, 0.1556016015527784, + 0.1551250300276412, 0.1546987341198886, 0.1539762702679622, + 0.1533714164912705, 0.1528576444403265, 0.1524161136882717, + 0.1520332114357515, 0.1516991546374640, 0.1511569839230329, + 0.1507192971729440, 0.1503610220324231, 0.1498364204371286, + 0.1494485295286651, 0.1491548981367329, 0.1489298982006189, + 0.1486515725334895, 0.1486515725150559] + T: [300.0, 300.0000002834252, 300.0000031171282, 300.0000419668567, + 300.0002466104594, 300.0017521489687, 300.012828062, 300.0447670811881, + 300.17818845089, 300.4037853823133, 300.9870765197385, 302.4919358758698, + 304.1312273634453, 307.0466604990806, 312.1974770144460, + 316.2287101073051, 321.7455788442369, 329.2424910592653, + 339.3365021495068, 345.6531126835671, 352.9934733338712, + 361.4853384742619, 371.2609219851648, 382.4539337059483, + 395.1961345718391, 409.6136438280544, 425.8233046874159, + 443.9294445737937, 464.0213378422267, 486.1715926238284, + 510.4355560556434, 536.8516921910060, 565.4427647804877, + 596.2175759822588, 629.1729837069433, 664.2959447016494, + 682.6814832979751, 701.6151471390043, 721.0929259828359, + 741.1104323757515, 761.6629268625964, 782.7453321944735, + 804.3522353295190, 826.4778761763039, 849.1161220635189, + 872.2604267945173, 895.9037728452242, 920.0385947982415, + 944.6566815172018, 969.7490539350033, 995.3058147307273, + 1021.315966458477, 1047.766898423163, 1074.644341589196, + 1101.932275632253, 1115.724967735560, 1129.614161692057, + 1143.597108943243, 1157.670861842087, 1171.832253593880, + 1186.077876296489, 1200.404056954178, 1214.806831353886, + 1229.281915715837, 1243.824676063261, 1258.430095300798, + 1273.092738049879, 1287.806713363924, 1302.565635538276, + 1317.362583340955, 1332.190058121365, 1347.039941405152, + 1361.903452753310, 1376.771108849657, 1391.632684978588, + 1406.477180257908, 1421.292788190674, 1436.066874284131, + 1450.785962639866, 1465.435733532303, 1480.001034046836, 1494.4659038285, + 1501.654257626032, 1508.811025543835, 1515.933963686604, + 1523.020839586934, 1530.069359587176, 1537.077197046158, + 1544.041996018034, 1550.961375415117, 1557.832933439073, + 1564.654252345503, 1571.422903533087, 1578.136452945297, + 1584.792466769668, 1591.388517416417, 1597.922189755016, + 1604.391087584233, 1610.792840308123, 1617.125109787399, + 1623.385597332956, 1629.572050805494, 1635.682271782899, + 1641.714122754776, 1647.665534301583, 1653.534512214233, + 1659.319144508696, 1665.017608289191, 1670.628176413033, + 1676.149223909964, 1681.579234109127, 1686.916804427542, + 1692.160651775054, 1697.309617532413, 1702.362672061205, + 1707.318918706947, 1712.177597259715, 1716.938086840114, + 1721.599908182393, 1726.162725290852, 1730.626346450318, + 1734.990724576621, 1739.255956813130, 1743.422283637647, + 1747.490145085291, 1751.460000982013, 1759.108201049167, + 1766.375199233603, 1773.269808020956, 1779.802645226477, + 1785.985932798265, 1791.833273790312, 1797.359414390519, + 1802.579998142671, 1807.511319410843, 1812.170082719588, + 1816.573173906675, 1820.737448108025, 1824.6795385292, 1828.415688820380, + 1831.961610735159, 1835.332367681824, 1838.542283819669, + 1841.604877547988, 1844.532817601453, 1847.337899507816, + 1850.031039875332, 1852.622285841763, 1855.120837011783, + 1857.535077309505, 1859.872614351406, 1862.140324177099, + 1864.344399439049, 1866.490399428538, 1868.583300589160, + 1870.627546429599, 1872.627095986784, 1874.585470204073, + 1876.505795774620, 1878.390846157254, 1880.243079602179, + 1883.855720109561, 1887.360910121215, 1890.769911588223, + 1894.091624392034, 1897.333138128450, 1903.593092801762, + 1909.591554483741, 1915.351813571790, 1920.891621097302, + 1926.225394018837, 1931.365448819856, 1941.098379381124, + 1950.192145599971, 1958.710827440606, 1966.710063308685, + 1974.238376954650, 1981.338188023193, 1988.046660687477, + 1994.396430380034, 2000.416222138095, 2006.131361066117, + 2016.715682260196, 2026.369937868078, 2035.215746261244, + 2043.352515367021, 2050.862146122044, 2057.812423251413, + 2070.204365659221, 2081.085186379306, 2090.720661767063, + 2099.313789684221, 2107.021233106788, 2113.963996102109, + 2125.832747206670, 2135.872359900766, 2144.474928745595, + 2151.923482058023, 2158.425114378367, 2164.129783916384, + 2173.451912574005, 2181.036460141638, 2187.284681882024, + 2196.498038656943, 2203.360551571940, 2208.584078305962, + 2212.603562088391, 2217.595918214984, 2217.595918214984] + H2: [1.131724064268807e-14, 3.107025805905462e-13, 3.315144206728407e-12, + 4.451751711517e-11, 2.615584230771075e-10, 1.858301549080384e-09, + 1.360499432904208e-08, 4.747677322099418e-08, 1.889450982217693e-07, + 4.280831162203875e-07, 1.045932665897631e-06, 2.636953769557909e-06, + 4.367963702460079e-06, 7.438124685825040e-06, 1.283682194389903e-05, + 1.706159494105545e-05, 2.282711360102619e-05, 3.063383570807140e-05, + 4.109839046536078e-05, 4.767855914611222e-05, 5.531953881591972e-05, + 6.415330675223906e-05, 7.431711812758931e-05, 8.595101005295720e-05, + 9.919500263571928e-05, 1.141862261562323e-04, 1.310562440659909e-04, + 1.499288370125545e-04, 1.709184579703246e-04, 1.941294717883072e-04, + 2.196561757351662e-04, 2.475834876176024e-04, 2.779881060892531e-04, + 3.109399011609850e-04, 3.465032720308471e-04, 3.847381949768489e-04, + 4.051719575963318e-04, 4.263374343895583e-04, 4.482415890686385e-04, + 4.708909380869243e-04, 4.942914669137047e-04, 5.184485213552605e-04, + 5.433666712003492e-04, 5.690495421840665e-04, 5.954996105334587e-04, + 6.227179522091802e-04, 6.507039363131578e-04, 6.794548488155215e-04, + 7.089654285243290e-04, 7.392272918233e-04, 7.702282159462507e-04, + 8.019484383273658e-04, 8.343635021990164e-04, 8.674519316708628e-04, + 9.011865805582754e-04, 9.183898197954340e-04, 9.357445162503641e-04, + 9.532446855075783e-04, 9.708835665639083e-04, 9.886535179840009e-04, + 1.006545901635616e-03, 1.024550953272821e-03, 1.042657639390773e-03, + 1.060853499998054e-03, 1.079124477253193e-03, 1.097454730302230e-03, + 1.115826437145327e-03, 1.134219584961244e-03, 1.152611751035546e-03, + 1.170977877273329e-03, 1.189290042226532e-03, 1.207517235618185e-03, + 1.225625141481525e-03, 1.243575937220835e-03, 1.261328117103084e-03, + 1.278836349853154e-03, 1.296051381089118e-03, 1.312919992224959e-03, + 1.329385028106257e-03, 1.345385505942283e-03, 1.360856817963238e-03, + 1.375731039523506e-03, 1.382933765534570e-03, 1.389959282194735e-03, + 1.396798247551685e-03, 1.403441332320953e-03, 1.409879070748225e-03, + 1.416101945431666e-03, 1.422100416560688e-03, 1.427864953505640e-03, + 1.433386068314958e-03, 1.438654351169016e-03, 1.443660507685619e-03, + 1.448395397946944e-03, 1.452850077092140e-03, 1.457015837293448e-03, + 1.460884250907486e-03, 1.464447214566749e-03, 1.467696993950838e-03, + 1.470626268951922e-03, 1.473228178925450e-03, 1.475496367695664e-03, + 1.477425027965641e-03, 1.479008944765807e-03, 1.480243537560820e-03, + 1.481124900625784e-03, 1.481649841297221e-03, 1.481815915703354e-03, + 1.481621461582522e-03, 1.481065627807920e-03, 1.480148400251324e-03, + 1.478870623638724e-03, 1.477234019076329e-03, 1.475241196956614e-03, + 1.472895664989848e-03, 1.470201831148010e-03, 1.467165001353287e-03, + 1.463791371792678e-03, 1.460088015793334e-03, 1.456062865247929e-03, + 1.451724686637409e-03, 1.447083051755509e-03, 1.442148303479457e-03, + 1.4369315162813e-03, 1.431444298507878e-03, 1.425699191722949e-03, + 1.413487738114604e-03, 1.400409980518608e-03, 1.386581809198861e-03, + 1.372123645865250e-03, 1.357158339453635e-03, 1.341809066348298e-03, + 1.326197301541784e-03, 1.310440921534008e-03, 1.294652491240378e-03, + 1.278937776514237e-03, 1.263394511902906e-03, 1.248111440797214e-03, + 1.233167632998746e-03, 1.218632073607134e-03, 1.204563507556932e-03, + 1.191010516465705e-03, 1.178011798867544e-03, 1.165596621405701e-03, + 1.153785407013307e-03, 1.142590426283601e-03, 1.132016559818967e-03, + 1.122062102014602e-03, 1.112719580144e-03, 1.103976566457858e-03, + 1.095816465014159e-03, 1.088219258903480e-03, 1.081162207251e-03, + 1.074620484746381e-03, 1.068567759402811e-03, 1.062976706742886e-03, + 1.057819460649170e-03, 1.053068002721185e-03, 1.048694493184370e-03, + 1.044671547245858e-03, 1.040972461325939e-03, 1.034471491207220e-03, + 1.028961460746110e-03, 1.024268090209447e-03, 1.020236760336096e-03, + 1.016732433915388e-03, 1.010960385897505e-03, 1.006102054492809e-03, + 1.001667867660712e-03, 9.973335701283360e-04, 9.928952792968842e-04, + 9.882336733935814e-04, 9.780691072481230e-04, 9.667526140723845e-04, + 9.544743213487807e-04, 9.414888451019567e-04, 9.280439350862083e-04, + 9.143537916229969e-04, 9.005927056401863e-04, 8.8689727858418e-04, + 8.733717799135008e-04, 8.600945133436306e-04, 8.345045984533324e-04, + 8.102785796400816e-04, 7.874879524611385e-04, 7.661242170725260e-04, + 7.461351350988778e-04, 7.274492519226412e-04, 6.938578229485752e-04, + 6.641005412707733e-04, 6.376025666780774e-04, 6.138857044788264e-04, + 5.925598387215128e-04, 5.733126300268433e-04, 5.404393792762642e-04, + 5.125804694986034e-04, 4.886939638459787e-04, 4.680107986181931e-04, + 4.499604928702777e-04, 4.341246088246213e-04, 4.083057189403645e-04, + 3.873106278845861e-04, 3.700307560735034e-04, 3.446189899139374e-04, + 3.257224650483669e-04, 3.113660086682688e-04, 3.003354203984228e-04, + 2.866615157885249e-04, 2.866615157885249e-04] + points: 209 + tolerances: + steady-abstol: 1.0e-09 + transient-abstol: 1.0e-11 + steady-reltol: 1.0e-04 + transient-reltol: 1.0e-04 + transport-model: unity-Lewis-number + phase: + name: gas + source: ./Lu_ARC.yaml + radiation-enabled: false + energy-enabled: true + Soret-enabled: false + species-enabled: true + refine-criteria: + ratio: 2.0 + slope: 0.05 + curve: 0.05 + prune: 0.01 + grid-min: 1.0e-10 + max-points: 1000 + fixed-point: + location: 7.0e-03 + temperature: 782.7453321944735 + basis: mass + components: [grid, velocity, T, D, H2, H, O, O2, OH, H2O, HO2, H2O2, CH3, CH4, CO, + CO2, CH2O, CH3OH, C2H2, C2H4, C2H6, CH2CO, N2] + products: + type: outlet + size: 0 + points: 1 +description: | + --------------------------------------------------------------------------- + CTI File converted from Solution Object + --------------------------------------------------------------------------- +generator: cti2yaml +cantera-version: 3.0.0 +date: Tue, 19 Dec 2023 20:13:38 +0100 +input-files: [Lu_ARC.cti] +phases: + - name: gas + thermo: ideal-gas + elements: [N, O, H, C] + species: [H2, H, O, O2, OH, H2O, HO2, H2O2, CH3, CH4, CO, CO2, CH2O, CH3OH, C2H2, + C2H4, C2H6, CH2CO, N2] + kinetics: custom + reactions: all + state: + T: 300.0 + P: 1.01325e+05 + transport: unity-Lewis-number +species: + - name: H2 + composition: + H: 2 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.34433112, 7.98052075e-03, -1.9478151e-05, 2.01572094e-08, + -7.37611761e-12, -917.935173, 0.683010238] + - [3.3372792, -4.94024731e-05, 4.99456778e-07, -1.79566394e-10, + 2.00255376e-14, -950.158922, -3.20502331] + transport: + model: gas + geometry: linear + diameter: 2.92 + well-depth: 38.0 + polarizability: 0.79 + rotational-relaxation: 280.0 + note: TPIS78 + - name: H + composition: + H: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.5, 7.05332819e-13, -1.99591964e-15, 2.30081632e-18, -9.27732332e-22, + 2.54736599e+04, -0.446682853] + - [2.50000001, -2.30842973e-11, 1.61561948e-14, -4.73515235e-18, + 4.98197357e-22, 2.54736599e+04, -0.446682914] + transport: + model: gas + geometry: atom + diameter: 2.05 + well-depth: 145.0 + note: L7/88 + - name: O + composition: + O: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.1682671, -3.27931884e-03, 6.64306396e-06, -6.12806624e-09, + 2.11265971e-12, 2.91222592e+04, 2.05193346] + - [2.56942078, -8.59741137e-05, 4.19484589e-08, -1.00177799e-11, + 1.22833691e-15, 2.92175791e+04, 4.78433864] + transport: + model: gas + geometry: atom + diameter: 2.75 + well-depth: 80.0 + note: L1/90 + - name: O2 + composition: + O: 2 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.78245636, -2.99673416e-03, 9.84730201e-06, -9.68129509e-09, + 3.24372837e-12, -1063.94356, 3.65767573] + - [3.28253784, 1.48308754e-03, -7.57966669e-07, 2.09470555e-10, + -2.16717794e-14, -1088.45772, 5.45323129] + transport: + model: gas + geometry: linear + diameter: 3.458 + well-depth: 107.4 + polarizability: 1.6 + rotational-relaxation: 3.8 + note: TPIS89 + - name: OH + composition: + H: 1 + O: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.99201543, -2.40131752e-03, 4.61793841e-06, -3.88113333e-09, + 1.3641147e-12, 3615.08056, -0.103925458] + - [3.09288767, 5.48429716e-04, 1.26505228e-07, -8.79461556e-11, + 1.17412376e-14, 3858.657, 4.4766961] + transport: + model: gas + geometry: linear + diameter: 2.75 + well-depth: 80.0 + note: RUS78 + - name: H2O + composition: + H: 2 + O: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.19864056, -2.0364341e-03, 6.52040211e-06, -5.48797062e-09, + 1.77197817e-12, -3.02937267e+04, -0.849032208] + - [3.03399249, 2.17691804e-03, -1.64072518e-07, -9.7041987e-11, + 1.68200992e-14, -3.00042971e+04, 4.9667701] + transport: + model: gas + geometry: nonlinear + diameter: 2.605 + well-depth: 572.4 + dipole: 1.844 + rotational-relaxation: 4.0 + note: L8/89 + - name: HO2 + composition: + H: 1 + O: 2 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.30179801, -4.74912051e-03, 2.11582891e-05, -2.42763894e-08, + 9.29225124e-12, 294.80804, 3.71666245] + - [4.0172109, 2.23982013e-03, -6.3365815e-07, 1.1424637e-10, + -1.07908535e-14, 111.856713, 3.78510215] + transport: + model: gas + geometry: nonlinear + diameter: 3.458 + well-depth: 107.4 + rotational-relaxation: 1.0 + note: L5/89 + - name: H2O2 + composition: + H: 2 + O: 2 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.27611269, -5.42822417e-04, 1.67335701e-05, -2.15770813e-08, + 8.62454363e-12, -1.77025821e+04, 3.43505074] + - [4.16500285, 4.90831694e-03, -1.90139225e-06, 3.71185986e-10, + -2.87908305e-14, -1.78617877e+04, 2.91615662] + transport: + model: gas + geometry: nonlinear + diameter: 3.458 + well-depth: 107.4 + rotational-relaxation: 3.8 + note: L7/88 + - name: C + composition: + C: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.55423955, -3.21537724e-04, 7.33792245e-07, -7.32234889e-10, + 2.66521446e-13, 8.54438832e+04, 4.53130848] + - [2.49266888, 4.79889284e-05, -7.2433502e-08, 3.74291029e-11, + -4.87277893e-15, 8.54512953e+04, 4.80150373] + transport: + model: gas + geometry: atom + diameter: 3.298 + well-depth: 71.4 + note: L11/88 + - name: CH + composition: + H: 1 + C: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.48981665, 3.23835541e-04, -1.68899065e-06, 3.16217327e-09, + -1.40609067e-12, 7.07972934e+04, 2.08401108] + - [2.87846473, 9.70913681e-04, 1.44445655e-07, -1.30687849e-10, + 1.76079383e-14, 7.10124364e+04, 5.48497999] + transport: + model: gas + geometry: linear + diameter: 2.75 + well-depth: 80.0 + note: TPIS79 + - name: CH2 + composition: + H: 2 + C: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.76267867, 9.68872143e-04, 2.79489841e-06, -3.85091153e-09, + 1.68741719e-12, 4.60040401e+04, 1.56253185] + - [2.87410113, 3.65639292e-03, -1.40894597e-06, 2.60179549e-10, + -1.87727567e-14, 4.6263604e+04, 6.17119324] + transport: + model: gas + geometry: linear + diameter: 3.8 + well-depth: 144.0 + note: LS/93 + - name: CH2(S) + composition: + H: 2 + C: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.19860411, -2.36661419e-03, 8.2329622e-06, -6.68815981e-09, + 1.94314737e-12, 5.04968163e+04, -0.769118967] + - [2.29203842, 4.65588637e-03, -2.01191947e-06, 4.17906e-10, + -3.39716365e-14, 5.09259997e+04, 8.62650169] + transport: + model: gas + geometry: linear + diameter: 3.8 + well-depth: 144.0 + note: LS/93 + - name: CH3 + composition: + H: 3 + C: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.6735904, 2.01095175e-03, 5.73021856e-06, -6.87117425e-09, + 2.54385734e-12, 1.64449988e+04, 1.60456433] + - [2.28571772, 7.23990037e-03, -2.98714348e-06, 5.95684644e-10, + -4.67154394e-14, 1.67755843e+04, 8.48007179] + transport: + model: gas + geometry: linear + diameter: 3.8 + well-depth: 144.0 + note: L11/89 + - name: CH4 + composition: + H: 4 + C: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [5.14987613, -0.0136709788, 4.91800599e-05, -4.84743026e-08, + 1.66693956e-11, -1.02466476e+04, -4.64130376] + - [0.074851495, 0.0133909467, -5.73285809e-06, 1.22292535e-09, + -1.0181523e-13, -9468.34459, 18.437318] + transport: + model: gas + geometry: nonlinear + diameter: 3.746 + well-depth: 141.4 + polarizability: 2.6 + rotational-relaxation: 13.0 + note: L8/88 + - name: CO + composition: + C: 1 + O: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.57953347, -6.1035368e-04, 1.01681433e-06, 9.07005884e-10, + -9.04424499e-13, -1.4344086e+04, 3.50840928] + - [2.71518561, 2.06252743e-03, -9.98825771e-07, 2.30053008e-10, + -2.03647716e-14, -1.41518724e+04, 7.81868772] + transport: + model: gas + geometry: linear + diameter: 3.65 + well-depth: 98.1 + polarizability: 1.95 + rotational-relaxation: 1.8 + note: TPIS79 + - name: CO2 + composition: + C: 1 + O: 2 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.35677352, 8.98459677e-03, -7.12356269e-06, 2.45919022e-09, + -1.43699548e-13, -4.83719697e+04, 9.90105222] + - [3.85746029, 4.41437026e-03, -2.21481404e-06, 5.23490188e-10, + -4.72084164e-14, -4.8759166e+04, 2.27163806] + transport: + model: gas + geometry: linear + diameter: 3.763 + well-depth: 244.0 + polarizability: 2.65 + rotational-relaxation: 2.1 + note: L7/88 + - name: HCO + composition: + H: 1 + C: 1 + O: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.22118584, -3.24392532e-03, 1.37799446e-05, -1.33144093e-08, + 4.33768865e-12, 3839.56496, 3.39437243] + - [2.77217438, 4.95695526e-03, -2.48445613e-06, 5.89161778e-10, + -5.33508711e-14, 4011.91815, 9.79834492] + transport: + model: gas + geometry: nonlinear + diameter: 3.59 + well-depth: 498.0 + note: L12/89 + - name: CH2O + composition: + H: 2 + C: 1 + O: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.79372315, -9.90833369e-03, 3.73220008e-05, -3.79285261e-08, + 1.31772652e-11, -1.43089567e+04, 0.6028129] + - [1.76069008, 9.20000082e-03, -4.42258813e-06, 1.00641212e-09, + -8.8385564e-14, -1.39958323e+04, 13.656323] + transport: + model: gas + geometry: nonlinear + diameter: 3.59 + well-depth: 498.0 + rotational-relaxation: 2.0 + note: L8/88 + - name: CH2OH + composition: + H: 3 + C: 1 + O: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.86388918, 5.59672304e-03, 5.93271791e-06, -1.04532012e-08, + 4.36967278e-12, -3193.91367, 5.47302243] + - [3.69266569, 8.64576797e-03, -3.7510112e-06, 7.87234636e-10, + -6.48554201e-14, -3242.50627, 5.81043215] + transport: + model: gas + geometry: nonlinear + diameter: 3.69 + well-depth: 417.0 + dipole: 1.7 + rotational-relaxation: 2.0 + note: GUNL93 + - name: CH3O + composition: + H: 3 + C: 1 + O: 1 + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 3000.0] + data: + - [2.106204, 7.216595e-03, 5.338472e-06, -7.377636e-09, 2.07561e-12, + 978.6011, 13.152177] + - [3.770799, 7.871497e-03, -2.656384e-06, 3.944431e-10, -2.112616e-14, + 127.83252, 2.929575] + transport: + model: gas + geometry: nonlinear + diameter: 3.69 + well-depth: 417.0 + dipole: 1.7 + rotational-relaxation: 2.0 + note: 121686 + - name: CH3OH + composition: + H: 4 + C: 1 + O: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [5.71539582, -0.0152309129, 6.52441155e-05, -7.10806889e-08, + 2.61352698e-11, -2.56427656e+04, -1.50409823] + - [1.78970791, 0.0140938292, -6.36500835e-06, 1.38171085e-09, + -1.1706022e-13, -2.53748747e+04, 14.5023623] + transport: + model: gas + geometry: nonlinear + diameter: 3.626 + well-depth: 481.8 + rotational-relaxation: 1.0 + note: L8/88 + - name: C2H2 + composition: + H: 2 + C: 2 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [0.808681094, 0.0233615629, -3.55171815e-05, 2.80152437e-08, + -8.50072974e-12, 2.64289807e+04, 13.9397051] + - [4.14756964, 5.96166664e-03, -2.37294852e-06, 4.67412171e-10, + -3.61235213e-14, 2.59359992e+04, -1.23028121] + transport: + model: gas + geometry: linear + diameter: 4.1 + well-depth: 209.0 + rotational-relaxation: 2.5 + note: L1/91 + - name: C2H3 + composition: + H: 3 + C: 2 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.21246645, 1.51479162e-03, 2.59209412e-05, -3.57657847e-08, + 1.47150873e-11, 3.48598468e+04, 8.51054025] + - [3.016724, 0.0103302292, -4.68082349e-06, 1.01763288e-09, -8.62607041e-14, + 3.46128739e+04, 7.78732378] + transport: + model: gas + geometry: nonlinear + diameter: 4.1 + well-depth: 209.0 + rotational-relaxation: 1.0 + note: L2/92 + - name: C2H4 + composition: + H: 4 + C: 2 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [3.95920148, -7.57052247e-03, 5.70990292e-05, -6.91588753e-08, + 2.69884373e-11, 5089.77593, 4.09733096] + - [2.03611116, 0.0146454151, -6.71077915e-06, 1.47222923e-09, + -1.25706061e-13, 4939.88614, 10.3053693] + transport: + model: gas + geometry: nonlinear + diameter: 3.971 + well-depth: 280.8 + rotational-relaxation: 1.5 + note: L1/91 + - name: C2H5 + composition: + H: 5 + C: 2 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.30646568, -4.18658892e-03, 4.97142807e-05, -5.99126606e-08, + 2.30509004e-11, 1.28416265e+04, 4.70720924] + - [1.95465642, 0.0173972722, -7.98206668e-06, 1.75217689e-09, + -1.49641576e-13, 1.285752e+04, 13.4624343] + transport: + model: gas + geometry: nonlinear + diameter: 4.302 + well-depth: 252.3 + rotational-relaxation: 1.5 + note: L12/92 + - name: C2H6 + composition: + H: 6 + C: 2 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [4.29142492, -5.5015427e-03, 5.99438288e-05, -7.08466285e-08, + 2.68685771e-11, -1.15222055e+04, 2.66682316] + - [1.0718815, 0.0216852677, -1.00256067e-05, 2.21412001e-09, -1.9000289e-13, + -1.14263932e+04, 15.1156107] + transport: + model: gas + geometry: nonlinear + diameter: 4.302 + well-depth: 252.3 + rotational-relaxation: 1.5 + note: L8/88 + - name: HCCO + composition: + H: 1 + C: 2 + O: 1 + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 4000.0] + data: + - [2.2517214, 0.017655021, -2.3729101e-05, 1.7275759e-08, -5.0664811e-12, + 2.0059449e+04, 12.490417] + - [5.6282058, 4.0853401e-03, -1.5934547e-06, 2.8626052e-10, -1.9407832e-14, + 1.9327215e+04, -3.9302595] + transport: + model: gas + geometry: nonlinear + diameter: 2.5 + well-depth: 150.0 + rotational-relaxation: 1.0 + note: SRIC91 + - name: CH2CO + composition: + H: 2 + C: 2 + O: 1 + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 3500.0] + data: + - [2.1358363, 0.0181188721, -1.73947474e-05, 9.34397568e-09, + -2.01457615e-12, -7042.91804, 12.215648] + - [4.51129732, 9.00359745e-03, -4.16939635e-06, 9.23345882e-10, + -7.94838201e-14, -7551.05311, 0.632247205] + transport: + model: gas + geometry: nonlinear + diameter: 3.97 + well-depth: 436.0 + rotational-relaxation: 2.0 + note: L5/90 + - name: CH2CHO + composition: + H: 3 + C: 2 + O: 1 + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [3.409062, 0.010738574, 1.891492e-06, -7.158583e-09, 2.867385e-12, + 1521.4766, 9.55829] + - [5.97567, 8.130591e-03, -2.743624e-06, 4.070304e-10, -2.176017e-14, + 490.3218, -5.045251] + transport: + model: gas + geometry: nonlinear + diameter: 3.97 + well-depth: 436.0 + rotational-relaxation: 2.0 + note: SAND86 + - name: N2 + composition: + N: 2 + thermo: + model: NASA7 + temperature-ranges: [300.0, 1000.0, 5000.0] + data: + - [3.298677, 1.4082404e-03, -3.963222e-06, 5.641515e-09, -2.444854e-12, + -1020.8999, 3.950372] + - [2.92664, 1.4879768e-03, -5.68476e-07, 1.0097038e-10, -6.753351e-15, + -922.7977, 5.980528] + transport: + model: gas + geometry: linear + diameter: 3.621 + well-depth: 97.53 + polarizability: 1.76 + rotational-relaxation: 4.0 + note: 121286 +reactions: + - equation: O + H2 <=> H + OH + rate-constant: + A: 0.0 + b: 0.0 + Ea: 0.0 diff --git a/samples/python/AVBP/inputs/T_vs_x.dat b/samples/python/AVBP/inputs/T_vs_x.dat new file mode 100644 index 00000000000..6ca21dfcd1a --- /dev/null +++ b/samples/python/AVBP/inputs/T_vs_x.dat @@ -0,0 +1,203 @@ +0.00E+00 298.00 +7.53E-06 303.00 +1.51E-05 308.03 +2.26E-05 313.09 +3.01E-05 318.19 +3.77E-05 323.36 +4.55E-05 328.69 +5.38E-05 334.34 +6.26E-05 340.46 +7.24E-05 347.25 +8.33E-05 354.92 +9.56E-05 363.57 +1.09E-04 373.18 +1.24E-04 383.69 +1.39E-04 395.00 +1.56E-04 407.01 +1.73E-04 419.61 +1.90E-04 432.72 +2.08E-04 446.19 +2.26E-04 459.83 +2.44E-04 473.46 +2.61E-04 487.02 +2.78E-04 500.52 +2.95E-04 514.03 +3.12E-04 527.58 +3.29E-04 541.22 +3.46E-04 554.97 +3.63E-04 568.83 +3.80E-04 582.83 +3.97E-04 597.02 +4.14E-04 611.48 +4.32E-04 626.30 +4.50E-04 641.66 +4.69E-04 657.72 +4.88E-04 674.76 +5.09E-04 693.11 +5.32E-04 713.21 +5.57E-04 735.54 +5.85E-04 760.34 +6.14E-04 786.95 +6.44E-04 813.91 +6.72E-04 840.23 +7.00E-04 865.91 +7.27E-04 891.23 +7.53E-04 916.32 +7.79E-04 941.06 +8.05E-04 965.37 +8.30E-04 989.32 +8.55E-04 1013.04 +8.79E-04 1036.66 +9.04E-04 1060.21 +9.28E-04 1083.70 +9.53E-04 1107.13 +9.77E-04 1130.50 +1.00E-03 1153.87 +1.03E-03 1177.21 +1.05E-03 1200.31 +1.08E-03 1222.70 +1.10E-03 1243.92 +1.13E-03 1263.92 +1.15E-03 1282.84 +1.17E-03 1300.85 +1.19E-03 1318.09 +1.22E-03 1334.62 +1.24E-03 1350.46 +1.26E-03 1365.67 +1.28E-03 1380.36 +1.31E-03 1394.65 +1.33E-03 1408.62 +1.36E-03 1422.30 +1.39E-03 1435.72 +1.41E-03 1448.93 +1.44E-03 1461.98 +1.48E-03 1474.88 +1.51E-03 1487.58 +1.55E-03 1500.01 +1.59E-03 1512.07 +1.64E-03 1523.69 +1.69E-03 1534.80 +1.74E-03 1545.39 +1.80E-03 1555.47 +1.86E-03 1565.11 +1.94E-03 1574.31 +2.02E-03 1583.08 +2.10E-03 1591.35 +2.20E-03 1599.10 +2.31E-03 1606.25 +2.43E-03 1612.72 +2.56E-03 1618.49 +2.70E-03 1623.52 +2.85E-03 1627.83 +3.00E-03 1631.47 +3.16E-03 1634.51 +3.32E-03 1637.00 +3.48E-03 1639.00 +3.65E-03 1640.58 +3.82E-03 1641.77 +3.99E-03 1642.62 +4.17E-03 1643.18 +4.34E-03 1643.49 +4.52E-03 1643.56 +4.69E-03 1643.44 +4.87E-03 1643.12 +5.05E-03 1642.64 +5.23E-03 1641.99 +5.42E-03 1641.20 +5.61E-03 1640.25 +5.80E-03 1639.17 +6.00E-03 1637.94 +6.20E-03 1636.58 +6.40E-03 1635.08 +6.61E-03 1633.46 +6.83E-03 1631.69 +7.04E-03 1629.80 +7.27E-03 1627.77 +7.49E-03 1625.60 +7.73E-03 1623.29 +7.97E-03 1620.85 +8.21E-03 1618.26 +8.46E-03 1615.55 +8.71E-03 1612.70 +8.97E-03 1609.72 +9.23E-03 1606.62 +9.50E-03 1603.41 +9.77E-03 1600.08 +1.00E-02 1596.65 +1.03E-02 1593.11 +1.06E-02 1589.48 +1.09E-02 1585.72 +1.12E-02 1581.85 +1.15E-02 1577.85 +1.18E-02 1573.72 +1.21E-02 1569.48 +1.24E-02 1565.13 +1.27E-02 1560.69 +1.30E-02 1556.17 +1.34E-02 1551.60 +1.37E-02 1546.96 +1.40E-02 1542.27 +1.44E-02 1537.53 +1.47E-02 1532.73 +1.50E-02 1527.87 +1.54E-02 1522.97 +1.57E-02 1518.01 +1.61E-02 1513.01 +1.64E-02 1507.93 +1.68E-02 1502.80 +1.71E-02 1497.60 +1.75E-02 1492.36 +1.79E-02 1487.08 +1.82E-02 1481.79 +1.86E-02 1476.49 +1.90E-02 1471.19 +1.94E-02 1465.88 +1.98E-02 1460.56 +2.01E-02 1455.25 +2.05E-02 1449.95 +2.09E-02 1444.67 +2.13E-02 1439.41 +2.17E-02 1434.17 +2.21E-02 1428.95 +2.25E-02 1423.72 +2.28E-02 1418.48 +2.32E-02 1413.23 +2.36E-02 1407.97 +2.40E-02 1402.72 +2.45E-02 1397.48 +2.49E-02 1392.28 +2.53E-02 1387.11 +2.57E-02 1381.97 +2.61E-02 1376.83 +2.65E-02 1371.70 +2.69E-02 1366.57 +2.73E-02 1361.43 +2.78E-02 1356.29 +2.82E-02 1351.18 +2.86E-02 1346.09 +2.91E-02 1341.04 +2.95E-02 1336.02 +2.99E-02 1331.05 +3.04E-02 1326.11 +3.08E-02 1321.21 +3.12E-02 1316.36 +3.16E-02 1311.55 +3.21E-02 1306.81 +3.25E-02 1302.11 +3.29E-02 1297.47 +3.34E-02 1292.87 +3.38E-02 1288.31 +3.42E-02 1283.79 +3.46E-02 1279.29 +3.51E-02 1274.81 +3.55E-02 1270.32 +3.60E-02 1265.84 +3.64E-02 1261.40 +3.69E-02 1257.03 +3.73E-02 1252.79 +3.78E-02 1248.75 +3.82E-02 1245.00 +3.87E-02 1241.67 +3.91E-02 1239.00 +3.96E-02 1237.36 +4.00E-02 1237.36 diff --git a/samples/python/AVBP/mech_lib/Makefile b/samples/python/AVBP/mech_lib/Makefile new file mode 100644 index 00000000000..222dea3eec1 --- /dev/null +++ b/samples/python/AVBP/mech_lib/Makefile @@ -0,0 +1,4 @@ +customkinetics.so: customkinetics.f90 + gfortran -ffixed-line-length-0 -c customkinetics.f90 -g -fPIC -o customkinetics.o + gfortran -shared -o customkinetics.so customkinetics.o + \ No newline at end of file diff --git a/samples/python/AVBP/mech_lib/customkinetics.f90 b/samples/python/AVBP/mech_lib/customkinetics.f90 new file mode 100755 index 00000000000..355e516069d --- /dev/null +++ b/samples/python/AVBP/mech_lib/customkinetics.f90 @@ -0,0 +1,2317 @@ +! +! A 15-step reduced mechanism based on GRI3.0 +! +! by Tianfeng Lu +! Email: tlu@engr.uconn.edu +! +! Reference: +! Tianfeng Lu and Chung K. Law, +! "A criterion based on computational singular perturbation +! for the identification of quasi steady state species: +! A reduced mechanism for methane oxidation with NO chemistry," +! Combustion and Flame, Vol.154 No.4 pp.761�774, 2008. +! +! SUBROUTINE CKWYP (P, T, Y, ICKWRK, RCKWRK, WDOT) + SUBROUTINE customkinetics(P, T, Y, WDOT) + IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! +! DIMENSION ICKWRK(*), RCKWRK(*), WDOT(*), Y(*) + PARAMETER (RU=8.314510D7, PATM=1.01325D6, SMALL = 1.D-200) + DIMENSION WDOT(19), Y(19) + DIMENSION TN(5), ROP(184), CTB(184) + DIMENSION RF(184), RB(184), RKLOW(22), XQ(11), C(19) + DIMENSION EQK(184), SMH(30), EG(30) + + ! Correction for units compatibility in Cantera + P = P*10.D0 +! +! CALL YTCP(P, T, Y, C) +! CALL RATT(T, RF, RB, RKLOW) +! CALL RATX(T, C, RF, RB, RKLOW) +! CALL QSSA(RF, RB, XQ) +! CALL RDOT(RF, RB, WDOT) +! END +! +! ----------------------------------------------------------------------! +! +! SUBROUTINE YTCP (P, T, Y, C) +! IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! DIMENSION Y(*), C(*) +! +! +! convert Y to ! + + C(1) = Y(1)*4.96046521D-1 + C(2) = Y(2)*9.92093043D-1 + C(3) = Y(3)*6.25023433D-2 + C(4) = Y(4)*3.12511716D-2 + C(5) = Y(5)*5.87980383D-2 + C(6) = Y(6)*5.55082499D-2 + C(7) = Y(7)*3.02968146D-2 + C(8) = Y(8)*2.93990192D-2 + C(9) = Y(9)*6.65112065D-2 + C(10) = Y(10)*6.23323639D-2 + C(11) = Y(11)*3.57008335D-2 + C(12) = Y(12)*2.27221341D-2 + C(13) = Y(13)*3.33039255D-2 + C(14) = Y(14)*3.12086189D-2 + C(15) = Y(15)*3.84050525D-2 + C(16) = Y(16)*3.56453112D-2 + C(17) = Y(17)*3.32556033D-2 + C(18) = Y(18)*2.37882046D-2 + C(19) = Y(19)*3.56972032D-2 +! + SUM = 0.0 + DO K = 1, 19 + SUM = SUM + C(K) + ENDDO + SUM = P/(SUM*T*8.314510D7) +! + DO K = 1, 19 + C(K) = MAX(C(K),SMALL) * SUM + ENDDO +! END +! +! ----------------------------------------------------------------------! +! +! +! forward reaction rates +! +! SUBROUTINE RATT (T, RF, RB, RKLOW) +! IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! DIMENSION RF(*), RB(*), RKLOW(*), EQK(184), SMH(30), EG(30) +! + ALOGT = LOG(T) + TI = 1.0D0/T + TI2 = TI*TI +! + RF(1) = 1.2D17*TI + RF(2) = 5.D17*TI + RF(3) = EXP(1.05635949D1 +2.7D0*ALOGT -3.15013634D3*TI) + RF(4) = 2.D13 + RF(5) = EXP(1.60803938D1 +2.D0*ALOGT -2.01286667D3*TI) + RF(6) = 5.7D13 + RF(7) = 8.D13 + RF(8) = 1.5D13 + RF(9) = 1.5D13 + RF(10) = 5.06D13 + RF(11) = EXP(2.07430685D1 +1.5D0*ALOGT -4.32766334D3*TI) + RF(12) = EXP(2.36136376D1 -1.20017175D3*TI) + RF(13) = 3.D13 + RF(14) = 3.D13 + RF(15) = EXP(3.12945828D1 -1.781387D3*TI) + RF(16) = 1.D13 + RF(17) = 1.D13 + RF(18) = EXP(1.28687606D1 +2.5D0*ALOGT -1.55997167D3*TI) + RF(19) = EXP(1.17752897D1 +2.5D0*ALOGT -2.51608334D3*TI) + TMP = EXP(2.D0*ALOGT -9.56111669D2*TI ) + RF(20) = 1.35D7 * TMP + RF(21) = 6.94D6 * TMP + RF(22) = 3.D13 + TMP = EXP(1.83D0*ALOGT -1.10707667D2*TI ) + RF(23) = 1.25D7 * TMP + RF(167) = 6.7D6 * TMP + RF(24) = 2.24D13 + RF(25) = EXP(1.83130955D1 +1.92D0*ALOGT -2.86330284D3*TI) + RF(26) = 1.D14 + TMP = EXP(-4.02573334D3*TI) + RF(27) = 1.D13 * TMP + RF(76) = 5.D13 * TMP + RF(28) = EXP(2.81906369D1 -6.79342501D2*TI) + RF(29) = EXP(2.85473118D1 -2.40537567D4*TI) + RF(30) = EXP(3.22361913D1 -2.01286667D4*TI) + RF(31) = EXP(4.24761511D1 -8.6D-1*ALOGT) + TMP = EXP(-1.24D0*ALOGT) + RF(32) = 2.08D19 * TMP + RF(34) = 2.6D19 * TMP + RF(33) = EXP(4.38677883D1 -7.6D-1*ALOGT) + RF(35) = EXP(3.78159211D1 -6.707D-1*ALOGT -8.57531523D3*TI) + RF(36) = 1.D18*TI + RF(37) = EXP(3.90385861D1 -6.D-1*ALOGT) + RF(38) = EXP(4.55408762D1 -1.25D0*ALOGT) + RF(39) = 5.5D20*TI2 + RF(40) = 2.2D22*TI2 + RF(41) = EXP(2.90097872D1 -3.37658384D2*TI) + RF(42) = EXP(3.14332293D1 -5.37435401D2*TI) + RF(43) = EXP(3.20618379D1 -3.19542584D2*TI) + RF(44) = EXP(1.6308716D1 +2.D0*ALOGT -2.61672667D3*TI) + RF(45) = EXP(2.99336062D1 -1.81158D3*TI) + RF(46) = 1.65D14 + RF(47) = 6.D14 + RF(48) = 3.D13 + RF(49) = EXP(3.71706652D1 -5.34D-1*ALOGT -2.69724134D2*TI) + RF(50) = EXP(2.03077504D1 +1.62D0*ALOGT -5.45486868D3*TI) + RF(51) = EXP(2.77171988D1 +4.8D-1*ALOGT +1.30836334D2*TI) + RF(52) = 7.34D13 + RF(53) = EXP(2.7014835D1 +4.54D-1*ALOGT -1.81158D3*TI) + RF(54) = EXP(2.7014835D1 +4.54D-1*ALOGT -1.30836334D3*TI) + RF(55) = EXP(1.78655549D1 +1.9D0*ALOGT -1.3798201D3*TI) + RF(56) = EXP(2.76845619D1 +5.D-1*ALOGT -4.32766334D1*TI) + RF(57) = 2.D13 + RF(58) = EXP(2.58292113D1 +6.5D-1*ALOGT +1.42913534D2*TI) + RF(59) = EXP(3.11214496D1 -9.D-2*ALOGT -3.06962167D2*TI) + RF(60) = EXP(2.85189124D1 +5.15D-1*ALOGT -2.51608334D1*TI) + RF(61) = EXP(1.7541204D1 +1.63D0*ALOGT -9.68188869D2*TI) + RF(62) = 2.D13 + RF(63) = EXP(2.80364862D1 +5.D-1*ALOGT +5.53538334D1*TI) + RF(64) = EXP(3.31993656D1 -2.3D-1*ALOGT -5.38441834D2*TI) + TMP = EXP(2.1D0*ALOGT -2.45066517D3*TI ) + RF(65) = 1.7D7 * TMP + RF(66) = 4.2D6 * TMP + RF(67) = EXP(2.93537877D1 -1.20772D3*TI) + RF(68) = EXP(2.94360258D1 +2.7D-1*ALOGT -1.40900667D2*TI) + RF(69) = 3.D13 + RF(70) = EXP(2.7014835D1 +4.54D-1*ALOGT -9.15854335D2*TI) + RF(71) = EXP(1.4096923D1 +2.53D0*ALOGT -6.15937201D3*TI) + RF(72) = EXP(4.07945264D1 -9.9D-1*ALOGT -7.95082335D2*TI) + RF(73) = 2.D12 + RF(74) = EXP(1.85604427D1 +1.9D0*ALOGT -3.78922151D3*TI) + RF(75) = 1.D14 + RF(77) = EXP(3.00558238D1 -1.72502674D3*TI) + RF(78) = EXP(1.75767107D1 +1.5D0*ALOGT -4.00560467D4*TI) + RF(79) = EXP(1.9190789D1 +1.51D0*ALOGT -1.72603317D3*TI) + RF(80) = EXP(3.19350862D1 -3.7D-1*ALOGT) + RF(81) = EXP(1.0482906D1 +2.4D0*ALOGT +1.06178717D3*TI) + RF(82) = EXP(3.03051698D1 +2.51608334D2*TI) + RF(83) = EXP(2.83241683D1 -2.14873517D2*TI) + RF(84) = EXP(4.19771599D1 -1.47996022D4*TI) + RF(85) = 5.D13 + RF(86) = 3.D13 + RF(87) = 2.D13 + RF(88) = EXP(1.62403133D1 +2.D0*ALOGT -1.50965D3*TI) + RF(89) = 3.D13 + RF(90) = EXP(4.24725733D1 -1.43D0*ALOGT -6.69278168D2*TI) + RF(91) = EXP(1.78408622D1 +1.6D0*ALOGT -2.72743434D3*TI) + RF(92) = EXP(4.10064751D1 -1.34D0*ALOGT -7.13058018D2*TI) + RF(93) = EXP(1.84206807D1 +1.6D0*ALOGT -1.570036D3*TI) + RF(94) = EXP(1.76783433D1 +1.228D0*ALOGT -3.52251667D1*TI) + RF(95) = 5.D13 + RF(96) = EXP(2.19558261D1 +1.18D0*ALOGT +2.2493785D2*TI) + RF(97) = 5.D12 + RF(98) = 5.D12 + RF(99) = EXP(1.41801537D1 +2.D0*ALOGT +4.22702001D2*TI) + RF(100) = EXP(1.56560602D1 +2.D0*ALOGT -7.54825001D2*TI) + RF(101) = EXP(-8.4310155D0 +4.5D0*ALOGT +5.03216668D2*TI) + RF(102) = EXP(-7.6354939D0 +4.D0*ALOGT +1.00643334D3*TI) + RF(103) = 5.D12 + RF(104) = EXP(1.50964444D1 +2.D0*ALOGT -1.25804167D3*TI) + RF(105) = EXP(1.50796373D1 +2.12D0*ALOGT -4.37798501D2*TI) + RF(106) = EXP(2.96459241D1 -1.00643334D3*TI) + RF(107) = EXP(2.55908003D1 +8.20243168D2*TI) + RF(108) = EXP(3.36712758D1 -6.03860001D3*TI) + RF(109) = 2.D13 + RF(110) = 1.D12 + RF(111) = 3.78D13 + RF(112) = EXP(3.26416564D1 -1.18759134D4*TI) + RF(113) = EXP(1.55382772D1 +2.D0*ALOGT -6.03860001D3*TI) + RF(114) = EXP(3.16914641D1 -2.89852801D2*TI) + RF(115) = 5.D13 + RF(116) = 6.71D13 + RF(117) = EXP(3.23131523D1 -1.56500384D3*TI) + RF(118) = EXP(2.93732401D1 +3.79928584D2*TI) + RF(119) = 4.D13 + RF(120) = 3.D13 + RF(121) = 6.D13 + RF(122) = 5.D13 + RF(123) = EXP(3.28780452D1 -7.94679762D3*TI) + RF(124) = EXP(3.21806786D1 +2.59156584D2*TI) + RF(125) = 5.D13 + TMP = EXP(-7.54825001D2*TI) + RF(126) = 5.D12 * TMP + RF(171) = 5.8D12 * TMP + RF(172) = 2.4D12 * TMP + RF(127) = EXP(1.31223634D1 +2.D0*ALOGT -3.63825651D3*TI) + RF(128) = EXP(3.500878D1 -6.01041988D3*TI) + RF(129) = 4.D13 + RF(130) = EXP(1.47156719D1 +2.D0*ALOGT -4.16160184D3*TI) + RF(131) = EXP(2.74203001D1 +5.D-1*ALOGT -2.26950717D3*TI) + RF(132) = 3.D13 + RF(133) = EXP(3.03390713D1 -3.01930001D2*TI) + RF(134) = 2.8D13 + RF(135) = 1.2D13 + RF(136) = 7.D13 + RF(137) = EXP(4.07167205D1 -1.16D0*ALOGT -5.76183084D2*TI) + RF(138) = 3.D13 + TMP = EXP(2.86833501D2*TI) + RF(139) = 1.2D13 * TMP + RF(140) = 1.6D13 * TMP + RF(141) = 9.D12 + RF(142) = 7.D12 + RF(143) = 1.4D13 + RF(144) = EXP(3.13199006D1 +2.76769167D2*TI) + RF(145) = EXP(3.12033668D1 -1.5338044D4*TI) + RF(146) = EXP(2.84682686D1 -1.02228466D4*TI) + RF(147) = EXP(1.01064284D1 +2.47D0*ALOGT -2.60666234D3*TI) + RF(148) = EXP(3.87538626D1 -1.18D0*ALOGT -3.29103701D2*TI) + RF(149) = EXP(2.95538088D1 +1.D-1*ALOGT -5.33409668D3*TI) + RF(150) = 2.648D13 + RF(151) = EXP(8.10772006D0 +2.81D0*ALOGT -2.94884967D3*TI) + TMP = EXP(1.5D0*ALOGT -5.00197368D3*TI) + RF(152) = 3.D7 * TMP + RF(153) = 1.D7 * TMP + RF(154) = EXP(1.23327053D1 +2.D0*ALOGT -4.62959334D3*TI) + RF(155) = EXP(1.56303353D1 +1.74D0*ALOGT -5.25861418D3*TI) + TMP = EXP(-1.D0*ALOGT -8.55468335D3*TI) + RF(156) = 1.5D18 * TMP + RF(157) = 1.87D17 * TMP + RF(158) = EXP(3.02300002D1 -2.01286667D2*TI) + RF(159) = EXP(3.05213929D1 -4.52895001D2*TI) + RF(160) = EXP(-2.84796532D1 +7.6D0*ALOGT +1.77635484D3*TI) + RF(161) = EXP(3.83630605D1 -1.39D0*ALOGT -5.10764918D2*TI) + RF(162) = EXP(2.97104627D1 +4.4D-1*ALOGT -4.36641103D4*TI) + RF(163) = EXP(2.74566677D1 -1.94996459D3*TI) + RF(164) = EXP(2.87941719D1 -4.29747034D2*TI) + RF(165) = 1.D13 + RF(166) = 3.37D13 + RF(168) = EXP(3.61482143D1 -8.72074485D3*TI) + RF(169) = EXP(2.28027074D1 +5.D-1*ALOGT +8.83145252D2*TI) + RF(170) = EXP(2.83090547D1 +4.3D-1*ALOGT +1.86190167D2*TI) + RF(173) = EXP(3.29293385D1 -5.52984796D3*TI) + RF(174) = EXP(2.49457104D1 +2.5D-1*ALOGT +4.70507584D2*TI) + RF(175) = EXP(2.64369986D1 +2.9D-1*ALOGT -5.53538334D0*TI) + RF(176) = EXP(1.41059389D1 +1.61D0*ALOGT +1.932352D2*TI) + RF(177) = EXP(2.69105027D1 +4.22D-1*ALOGT +8.83145252D2*TI) + RF(178) = 1.5D14 + RF(179) = 1.81D10 + RF(180) = 2.35D10 + RF(181) = 2.2D13 + RF(182) = 1.1D13 + RF(183) = 1.2D13 + RF(184) = 3.01D13 +! +! +! thermal data +! +! + TLOG = LOG(T) + TI = 1.0D0/T + TN(1) = TLOG - 1.0 + TN(2) = T + TN(3) = TN(2)*T + TN(4) = TN(3)*T + TN(5) = TN(4)*T +! + IF (T .GT. 1.D3) THEN +! + SMH(1) = -3.20502331D+00 + 9.50158922D+02*TI & + + 3.33727920D+00*TN(1) - 2.47012365D-05*TN(2) & + + 8.32427963D-08*TN(3) - 1.49638662D-11*TN(4) & + + 1.00127688D-15*TN(5) + SMH(2) = -4.46682914D-01 - 2.54736599D+04*TI & + + 2.50000001D+00*TN(1) - 1.15421486D-11*TN(2) & + + 2.69269913D-15*TN(3) - 3.94596029D-19*TN(4) & + + 2.49098679D-23*TN(5) + SMH(3) = 4.78433864D+00 - 2.92175791D+04*TI & + + 2.56942078D+00*TN(1) - 4.29870569D-05*TN(2) & + + 6.99140982D-09*TN(3) - 8.34814992D-13*TN(4) & + + 6.14168455D-17*TN(5) + SMH(4) = 5.45323129D+00 + 1.08845772D+03*TI & + + 3.28253784D+00*TN(1) + 7.41543770D-04*TN(2) & + - 1.26327778D-07*TN(3) + 1.74558796D-11*TN(4) & + - 1.08358897D-15*TN(5) + SMH(5) = 4.47669610D+00 - 3.85865700D+03*TI & + + 3.09288767D+00*TN(1) + 2.74214858D-04*TN(2) & + + 2.10842047D-08*TN(3) - 7.32884630D-12*TN(4) & + + 5.87061880D-16*TN(5) + SMH(6) = 4.96677010D+00 + 3.00042971D+04*TI & + + 3.03399249D+00*TN(1) + 1.08845902D-03*TN(2) & + - 2.73454197D-08*TN(3) - 8.08683225D-12*TN(4) & + + 8.41004960D-16*TN(5) + SMH(7) = 3.78510215D+00 - 1.11856713D+02*TI & + + 4.01721090D+00*TN(1) + 1.11991007D-03*TN(2) & + - 1.05609692D-07*TN(3) + 9.52053083D-12*TN(4) & + - 5.39542675D-16*TN(5) + SMH(8) = 2.91615662D+00 + 1.78617877D+04*TI & + + 4.16500285D+00*TN(1) + 2.45415847D-03*TN(2) & + - 3.16898708D-07*TN(3) + 3.09321655D-11*TN(4) & + - 1.43954153D-15*TN(5) + SMH(9) = 4.80150373D+00 - 8.54512953D+04*TI & + + 2.49266888D+00*TN(1) + 2.39944642D-05*TN(2) & + - 1.20722503D-08*TN(3) + 3.11909191D-12*TN(4) & + - 2.43638946D-16*TN(5) + SMH(10) = 5.48497999D+00 - 7.10124364D+04*TI & + + 2.87846473D+00*TN(1) + 4.85456841D-04*TN(2) & + + 2.40742758D-08*TN(3) - 1.08906541D-11*TN(4) & + + 8.80396915D-16*TN(5) + SMH(11) = 6.17119324D+00 - 4.62636040D+04*TI & + + 2.87410113D+00*TN(1) + 1.82819646D-03*TN(2) & + - 2.34824328D-07*TN(3) + 2.16816291D-11*TN(4) & + - 9.38637835D-16*TN(5) + SMH(12) = 8.62650169D+00 - 5.09259997D+04*TI & + + 2.29203842D+00*TN(1) + 2.32794319D-03*TN(2) & + - 3.35319912D-07*TN(3) + 3.48255000D-11*TN(4) & + - 1.69858183D-15*TN(5) + SMH(13) = 8.48007179D+00 - 1.67755843D+04*TI & + + 2.28571772D+00*TN(1) + 3.61995018D-03*TN(2) & + - 4.97857247D-07*TN(3) + 4.96403870D-11*TN(4) & + - 2.33577197D-15*TN(5) + SMH(14) = 1.84373180D+01 + 9.46834459D+03*TI & + + 7.48514950D-02*TN(1) + 6.69547335D-03*TN(2) & + - 9.55476348D-07*TN(3) + 1.01910446D-10*TN(4) & + - 5.09076150D-15*TN(5) + SMH(15) = 7.81868772D+00 + 1.41518724D+04*TI & + + 2.71518561D+00*TN(1) + 1.03126372D-03*TN(2) & + - 1.66470962D-07*TN(3) + 1.91710840D-11*TN(4) & + - 1.01823858D-15*TN(5) + SMH(16) = 2.27163806D+00 + 4.87591660D+04*TI & + + 3.85746029D+00*TN(1) + 2.20718513D-03*TN(2) & + - 3.69135673D-07*TN(3) + 4.36241823D-11*TN(4) & + - 2.36042082D-15*TN(5) + SMH(17) = 9.79834492D+00 - 4.01191815D+03*TI & + + 2.77217438D+00*TN(1) + 2.47847763D-03*TN(2) & + - 4.14076022D-07*TN(3) + 4.90968148D-11*TN(4) & + - 2.66754356D-15*TN(5) + SMH(18) = 1.36563230D+01 + 1.39958323D+04*TI & + + 1.76069008D+00*TN(1) + 4.60000041D-03*TN(2) & + - 7.37098022D-07*TN(3) + 8.38676767D-11*TN(4) & + - 4.41927820D-15*TN(5) + SMH(19) = 5.81043215D+00 + 3.24250627D+03*TI & + + 3.69266569D+00*TN(1) + 4.32288399D-03*TN(2) & + - 6.25168533D-07*TN(3) + 6.56028863D-11*TN(4) & + - 3.24277101D-15*TN(5) + SMH(20) = 2.92957500D+00 - 1.27832520D+02*TI & + + 3.77079900D+00*TN(1) + 3.93574850D-03*TN(2) & + - 4.42730667D-07*TN(3) + 3.28702583D-11*TN(4) & + - 1.05630800D-15*TN(5) + + SMH(21) = 1.45023623D+01 + 2.53748747D+04*TI & + + 1.78970791D+00*TN(1) + 7.04691460D-03*TN(2) & + - 1.06083472D-06*TN(3) + 1.15142571D-10*TN(4) & + - 5.85301100D-15*TN(5) + SMH(22) = -1.23028121D+00 - 2.59359992D+04*TI & + + 4.14756964D+00*TN(1) + 2.98083332D-03*TN(2) & + - 3.95491420D-07*TN(3) + 3.89510143D-11*TN(4) & + - 1.80617607D-15*TN(5) + SMH(23) = 7.78732378D+00 - 3.46128739D+04*TI & + + 3.01672400D+00*TN(1) + 5.16511460D-03*TN(2) & + - 7.80137248D-07*TN(3) + 8.48027400D-11*TN(4) & + - 4.31303520D-15*TN(5) + SMH(24) = 1.03053693D+01 - 4.93988614D+03*TI & + + 2.03611116D+00*TN(1) + 7.32270755D-03*TN(2) & + - 1.11846319D-06*TN(3) + 1.22685769D-10*TN(4) & + - 6.28530305D-15*TN(5) + SMH(25) = 1.34624343D+01 - 1.28575200D+04*TI & + + 1.95465642D+00*TN(1) + 8.69863610D-03*TN(2) & + - 1.33034445D-06*TN(3) + 1.46014741D-10*TN(4) & + - 7.48207880D-15*TN(5) + SMH(26) = 1.51156107D+01 + 1.14263932D+04*TI & + + 1.07188150D+00*TN(1) + 1.08426339D-02*TN(2) & + - 1.67093445D-06*TN(3) + 1.84510001D-10*TN(4) & + - 9.50014450D-15*TN(5) + SMH(27) = -3.93025950D+00 - 1.93272150D+04*TI & + + 5.62820580D+00*TN(1) + 2.04267005D-03*TN(2) & + - 2.65575783D-07*TN(3) + 2.38550433D-11*TN(4) & + - 9.70391600D-16*TN(5) + SMH(28) = 6.32247205D-01 + 7.55105311D+03*TI & + + 4.51129732D+00*TN(1) + 4.50179872D-03*TN(2) & + - 6.94899392D-07*TN(3) + 7.69454902D-11*TN(4) & + - 3.97419100D-15*TN(5) + SMH(29) = -5.04525100D+00 - 4.90321800D+02*TI & + + 5.97567000D+00*TN(1) + 4.06529550D-03*TN(2) & + - 4.57270667D-07*TN(3) + 3.39192000D-11*TN(4) & + - 1.08800850D-15*TN(5) +! + ELSE +! + SMH(1) = 6.83010238D-01 + 9.17935173D+02*TI & + + 2.34433112D+00*TN(1) + 3.99026037D-03*TN(2) & + - 3.24635850D-06*TN(3) + 1.67976745D-09*TN(4) & + - 3.68805881D-13*TN(5) + SMH(2) = -4.46682853D-01 - 2.54736599D+04*TI & + + 2.50000000D+00*TN(1) + 3.52666409D-13*TN(2) & + - 3.32653273D-16*TN(3) + 1.91734693D-19*TN(4) & + - 4.63866166D-23*TN(5) + SMH(3) = 2.05193346D+00 - 2.91222592D+04*TI & + + 3.16826710D+00*TN(1) - 1.63965942D-03*TN(2) & + + 1.10717733D-06*TN(3) - 5.10672187D-10*TN(4) & + + 1.05632986D-13*TN(5) + SMH(4) = 3.65767573D+00 + 1.06394356D+03*TI & + + 3.78245636D+00*TN(1) - 1.49836708D-03*TN(2) & + + 1.64121700D-06*TN(3) - 8.06774591D-10*TN(4) & + + 1.62186419D-13*TN(5) + SMH(5) = -1.03925458D-01 - 3.61508056D+03*TI & + + 3.99201543D+00*TN(1) - 1.20065876D-03*TN(2) & + + 7.69656402D-07*TN(3) - 3.23427778D-10*TN(4) & + + 6.82057350D-14*TN(5) + SMH(6) = -8.49032208D-01 + 3.02937267D+04*TI & + + 4.19864056D+00*TN(1) - 1.01821705D-03*TN(2) & + + 1.08673369D-06*TN(3) - 4.57330885D-10*TN(4) & + + 8.85989085D-14*TN(5) + SMH(7) = 3.71666245D+00 - 2.94808040D+02*TI & + + 4.30179801D+00*TN(1) - 2.37456025D-03*TN(2) & + + 3.52638152D-06*TN(3) - 2.02303245D-09*TN(4) & + + 4.64612562D-13*TN(5) + SMH(8) = 3.43505074D+00 + 1.77025821D+04*TI & + + 4.27611269D+00*TN(1) - 2.71411208D-04*TN(2) & + + 2.78892835D-06*TN(3) - 1.79809011D-09*TN(4) & + + 4.31227182D-13*TN(5) + SMH(9) = 4.53130848D+00 - 8.54438832D+04*TI & + + 2.55423955D+00*TN(1) - 1.60768862D-04*TN(2) & + + 1.22298708D-07*TN(3) - 6.10195741D-11*TN(4) & + + 1.33260723D-14*TN(5) + SMH(10) = 2.08401108D+00 - 7.07972934D+04*TI & + + 3.48981665D+00*TN(1) + 1.61917771D-04*TN(2) & + - 2.81498442D-07*TN(3) + 2.63514439D-10*TN(4) & + - 7.03045335D-14*TN(5) + SMH(11) = 1.56253185D+00 - 4.60040401D+04*TI & + + 3.76267867D+00*TN(1) + 4.84436072D-04*TN(2) & + + 4.65816402D-07*TN(3) - 3.20909294D-10*TN(4) & + + 8.43708595D-14*TN(5) + SMH(12) = -7.69118967D-01 - 5.04968163D+04*TI & + + 4.19860411D+00*TN(1) - 1.18330710D-03*TN(2) & + + 1.37216037D-06*TN(3) - 5.57346651D-10*TN(4) & + + 9.71573685D-14*TN(5) + SMH(13) = 1.60456433D+00 - 1.64449988D+04*TI & + + 3.67359040D+00*TN(1) + 1.00547588D-03*TN(2) & + + 9.55036427D-07*TN(3) - 5.72597854D-10*TN(4) & + + 1.27192867D-13*TN(5) + SMH(14) = -4.64130376D+00 + 1.02466476D+04*TI & + + 5.14987613D+00*TN(1) - 6.83548940D-03*TN(2) & + + 8.19667665D-06*TN(3) - 4.03952522D-09*TN(4) & + + 8.33469780D-13*TN(5) + SMH(15) = 3.50840928D+00 + 1.43440860D+04*TI & + + 3.57953347D+00*TN(1) - 3.05176840D-04*TN(2) & + + 1.69469055D-07*TN(3) + 7.55838237D-11*TN(4) & + - 4.52212249D-14*TN(5) + SMH(16) = 9.90105222D+00 + 4.83719697D+04*TI & + + 2.35677352D+00*TN(1) + 4.49229839D-03*TN(2) & + - 1.18726045D-06*TN(3) + 2.04932518D-10*TN(4) & + - 7.18497740D-15*TN(5) + SMH(17) = 3.39437243D+00 - 3.83956496D+03*TI & + + 4.22118584D+00*TN(1) - 1.62196266D-03*TN(2) & + + 2.29665743D-06*TN(3) - 1.10953411D-09*TN(4) & + + 2.16884433D-13*TN(5) + SMH(18) = 6.02812900D-01 + 1.43089567D+04*TI & + + 4.79372315D+00*TN(1) - 4.95416685D-03*TN(2) & + + 6.22033347D-06*TN(3) - 3.16071051D-09*TN(4) & + + 6.58863260D-13*TN(5) + SMH(19) = 5.47302243D+00 + 3.19391367D+03*TI & + + 3.86388918D+00*TN(1) + 2.79836152D-03*TN(2) & + + 9.88786318D-07*TN(3) - 8.71100100D-10*TN(4) & + + 2.18483639D-13*TN(5) + SMH(20) = 1.31521770D+01 - 9.78601100D+02*TI & + + 2.10620400D+00*TN(1) + 3.60829750D-03*TN(2) & + + 8.89745333D-07*TN(3) - 6.14803000D-10*TN(4) & + + 1.03780500D-13*TN(5) + SMH(21) = -1.50409823D+00 + 2.56427656D+04*TI & + + 5.71539582D+00*TN(1) - 7.61545645D-03*TN(2) & + + 1.08740193D-05*TN(3) - 5.92339074D-09*TN(4) & + + 1.30676349D-12*TN(5) + SMH(22) = 1.39397051D+01 - 2.64289807D+04*TI & + + 8.08681094D-01*TN(1) + 1.16807815D-02*TN(2) & + - 5.91953025D-06*TN(3) + 2.33460364D-09*TN(4) & + - 4.25036487D-13*TN(5) + SMH(23) = 8.51054025D+00 - 3.48598468D+04*TI & + + 3.21246645D+00*TN(1) + 7.57395810D-04*TN(2) & + + 4.32015687D-06*TN(3) - 2.98048206D-09*TN(4) & + + 7.35754365D-13*TN(5) + SMH(24) = 4.09733096D+00 - 5.08977593D+03*TI & + + 3.95920148D+00*TN(1) - 3.78526124D-03*TN(2) & + + 9.51650487D-06*TN(3) - 5.76323961D-09*TN(4) & + + 1.34942187D-12*TN(5) + SMH(25) = 4.70720924D+00 - 1.28416265D+04*TI & + + 4.30646568D+00*TN(1) - 2.09329446D-03*TN(2) & + + 8.28571345D-06*TN(3) - 4.99272172D-09*TN(4) & + + 1.15254502D-12*TN(5) + SMH(26) = 2.66682316D+00 + 1.15222055D+04*TI & + + 4.29142492D+00*TN(1) - 2.75077135D-03*TN(2) & + + 9.99063813D-06*TN(3) - 5.90388571D-09*TN(4) & + + 1.34342886D-12*TN(5) + SMH(27) = 1.24904170D+01 - 2.00594490D+04*TI & + + 2.25172140D+00*TN(1) + 8.82751050D-03*TN(2) & + - 3.95485017D-06*TN(3) + 1.43964658D-09*TN(4) & + - 2.53324055D-13*TN(5) + SMH(28) = 1.22156480D+01 + 7.04291804D+03*TI & + + 2.13583630D+00*TN(1) + 9.05943605D-03*TN(2) & + - 2.89912457D-06*TN(3) + 7.78664640D-10*TN(4) & + - 1.00728807D-13*TN(5) + SMH(29) = 9.55829000D+00 - 1.52147660D+03*TI & + + 3.40906200D+00*TN(1) + 5.36928700D-03*TN(2) & + + 3.15248667D-07*TN(3) - 5.96548583D-10*TN(4) & + + 1.43369250D-13*TN(5) + ENDIF +! CALL RDSMH (T, SMH) +! +! equilibrium constants +! + DO N = 1, 29 + EG(N) = EXP(SMH(N)) + ENDDO +! + PFAC = PATM / (RU*T) + PFAC2 = PFAC*PFAC + PFAC3 = PFAC2*PFAC +! + EQK(1)=EG(4)/EG(3)/EG(3)/PFAC + EQK(2)=EG(5)/EG(2)/EG(3)/PFAC + EQK(3)=EG(2)*EG(5)/EG(1)/EG(3) + EQK(4)=EG(4)*EG(5)/EG(3)/EG(7) + EQK(5)=EG(5)*EG(7)/EG(3)/EG(8) + EQK(6)=EG(2)*EG(15)/EG(3)/EG(10) + EQK(7)=EG(2)*EG(17)/EG(3)/EG(11) + EQK(8)=EG(1)*EG(15)/EG(3)/EG(12) + EQK(9)=EG(2)*EG(17)/EG(3)/EG(12) + EQK(10)=EG(2)*EG(18)/EG(3)/EG(13) + EQK(11)=EG(5)*EG(13)/EG(3)/EG(14) + EQK(12)=EG(16)/EG(3)/EG(15)/PFAC + EQK(13)=EG(5)*EG(15)/EG(3)/EG(17) + EQK(14)=EG(2)*EG(16)/EG(3)/EG(17) + EQK(15)=EG(5)*EG(17)/EG(3)/EG(18) + EQK(16)=EG(5)*EG(18)/EG(3)/EG(19) + EQK(17)=EG(5)*EG(18)/EG(3)/EG(20) + EQK(18)=EG(5)*EG(19)/EG(3)/EG(21) + EQK(19)=EG(5)*EG(20)/EG(3)/EG(21) + EQK(20)=EG(2)*EG(27)/EG(3)/EG(22) + EQK(21)=EG(11)*EG(15)/EG(3)/EG(22) + EQK(22)=EG(2)*EG(28)/EG(3)/EG(23) + EQK(23)=EG(13)*EG(17)/EG(3)/EG(24) + EQK(24)=EG(13)*EG(18)/EG(3)/EG(25) + EQK(25)=EG(5)*EG(25)/EG(3)/EG(26) + EQK(26)=EG(2)*EG(15)*EG(15)/EG(3)/EG(27)*PFAC + EQK(27)=EG(5)*EG(27)/EG(3)/EG(28) + EQK(28)=EG(11)*EG(16)/EG(3)/EG(28) + EQK(29)=EG(3)*EG(16)/EG(4)/EG(15) + EQK(30)=EG(7)*EG(17)/EG(4)/EG(18) + EQK(31)=EG(7)/EG(2)/EG(4)/PFAC + EQK(32)=EQK(31) + EQK(33)=EQK(31) + EQK(34)=EQK(31) + EQK(35)=EG(3)*EG(5)/EG(2)/EG(4) + EQK(36)=EG(1)/EG(2)/EG(2)/PFAC + EQK(37)=EQK(36) + EQK(38)=EQK(36) + EQK(39)=EQK(36) + EQK(40)=EG(6)/EG(2)/EG(5)/PFAC + EQK(41)=EG(3)*EG(6)/EG(2)/EG(7) + EQK(42)=EG(1)*EG(4)/EG(2)/EG(7) + EQK(43)=EG(5)*EG(5)/EG(2)/EG(7) + EQK(44)=EG(1)*EG(7)/EG(2)/EG(8) + EQK(45)=EG(5)*EG(6)/EG(2)/EG(8) + EQK(46)=EG(1)*EG(9)/EG(2)/EG(10) + EQK(47)=EG(13)/EG(2)/EG(11)/PFAC + EQK(48)=EG(1)*EG(10)/EG(2)/EG(12) + EQK(49)=EG(14)/EG(2)/EG(13)/PFAC + EQK(50)=EG(1)*EG(13)/EG(2)/EG(14) + EQK(51)=EG(18)/EG(2)/EG(17)/PFAC + EQK(52)=EG(1)*EG(15)/EG(2)/EG(17) + EQK(53)=EG(19)/EG(2)/EG(18)/PFAC + EQK(54)=EG(20)/EG(2)/EG(18)/PFAC + EQK(55)=EG(1)*EG(17)/EG(2)/EG(18) + EQK(56)=EG(21)/EG(2)/EG(19)/PFAC + EQK(57)=EG(1)*EG(18)/EG(2)/EG(19) + EQK(58)=EG(5)*EG(13)/EG(2)/EG(19) + EQK(59)=EG(6)*EG(12)/EG(2)/EG(19) + EQK(60)=EG(21)/EG(2)/EG(20)/PFAC + EQK(61)=EG(19)/EG(20) + EQK(62)=EG(1)*EG(18)/EG(2)/EG(20) + EQK(63)=EG(5)*EG(13)/EG(2)/EG(20) + EQK(64)=EG(6)*EG(12)/EG(2)/EG(20) + EQK(65)=EG(1)*EG(19)/EG(2)/EG(21) + EQK(66)=EG(1)*EG(20)/EG(2)/EG(21) + EQK(67)=EG(23)/EG(2)/EG(22)/PFAC + EQK(68)=EG(24)/EG(2)/EG(23)/PFAC + EQK(69)=EG(1)*EG(22)/EG(2)/EG(23) + EQK(70)=EG(25)/EG(2)/EG(24)/PFAC + EQK(71)=EG(1)*EG(23)/EG(2)/EG(24) + EQK(72)=EG(26)/EG(2)/EG(25)/PFAC + EQK(73)=EG(1)*EG(24)/EG(2)/EG(25) + EQK(74)=EG(1)*EG(25)/EG(2)/EG(26) + EQK(75)=EG(12)*EG(15)/EG(2)/EG(27) + EQK(76)=EG(1)*EG(27)/EG(2)/EG(28) + EQK(77)=EG(13)*EG(15)/EG(2)/EG(28) + EQK(78)=EG(18)/EG(1)/EG(15)/PFAC + EQK(79)=EG(2)*EG(6)/EG(1)/EG(5) + EQK(80)=EG(8)/EG(5)/EG(5)/PFAC + EQK(81)=EG(3)*EG(6)/EG(5)/EG(5) + EQK(82)=EG(4)*EG(6)/EG(5)/EG(7) + EQK(168)=EQK(82) + EQK(83)=EG(6)*EG(7)/EG(5)/EG(8) + EQK(84)=EQK(83) + EQK(85)=EG(2)*EG(15)/EG(5)/EG(9) + EQK(86)=EG(2)*EG(17)/EG(5)/EG(10) + EQK(87)=EG(2)*EG(18)/EG(5)/EG(11) + EQK(88)=EG(6)*EG(10)/EG(5)/EG(11) + EQK(89)=EG(2)*EG(18)/EG(5)/EG(12) + EQK(90)=EG(21)/EG(5)/EG(13)/PFAC + EQK(91)=EG(6)*EG(11)/EG(5)/EG(13) + EQK(92)=EG(6)*EG(12)/EG(5)/EG(13) + EQK(93)=EG(6)*EG(13)/EG(5)/EG(14) + EQK(94)=EG(2)*EG(16)/EG(5)/EG(15) + EQK(95)=EG(6)*EG(15)/EG(5)/EG(17) + EQK(96)=EG(6)*EG(17)/EG(5)/EG(18) + EQK(97)=EG(6)*EG(18)/EG(5)/EG(19) + EQK(98)=EG(6)*EG(18)/EG(5)/EG(20) + EQK(99)=EG(6)*EG(19)/EG(5)/EG(21) + EQK(100)=EG(6)*EG(20)/EG(5)/EG(21) + EQK(101)=EG(2)*EG(28)/EG(5)/EG(22) + EQK(102)=EG(13)*EG(15)/EG(5)/EG(22) + EQK(103)=EG(6)*EG(22)/EG(5)/EG(23) + EQK(104)=EG(6)*EG(23)/EG(5)/EG(24) + EQK(105)=EG(6)*EG(25)/EG(5)/EG(26) + EQK(106)=EG(6)*EG(27)/EG(5)/EG(28) + EQK(107)=EG(4)*EG(8)/EG(7)/EG(7) + EQK(108)=EQK(107) + EQK(109)=EG(5)*EG(18)/EG(7)/EG(11) + EQK(110)=EG(4)*EG(14)/EG(7)/EG(13) + EQK(111)=EG(5)*EG(20)/EG(7)/EG(13) + EQK(112)=EG(5)*EG(16)/EG(7)/EG(15) + EQK(113)=EG(8)*EG(17)/EG(7)/EG(18) + EQK(114)=EG(3)*EG(15)/EG(4)/EG(9) + EQK(115)=EG(2)*EG(22)/EG(9)/EG(13) + EQK(116)=EG(3)*EG(17)/EG(4)/EG(10) + EQK(117)=EG(2)*EG(11)/EG(1)/EG(10) + EQK(118)=EG(2)*EG(18)/EG(6)/EG(10) + EQK(119)=EG(2)*EG(22)/EG(10)/EG(11) + EQK(120)=EG(2)*EG(23)/EG(10)/EG(13) + EQK(121)=EG(2)*EG(24)/EG(10)/EG(14) + EQK(122)=EG(27)/EG(10)/EG(15)/PFAC + EQK(123)=EG(15)*EG(17)/EG(10)/EG(16) + EQK(124)=EG(2)*EG(28)/EG(10)/EG(18) + EQK(125)=EG(15)*EG(22)/EG(10)/EG(27) + EQK(127)=EG(2)*EG(13)/EG(1)/EG(11) + EQK(128)=EG(1)*EG(22)/EG(11)/EG(11) + EQK(129)=EG(2)*EG(24)/EG(11)/EG(13) + EQK(130)=EG(13)*EG(13)/EG(11)/EG(14) + EQK(131)=EG(28)/EG(11)/EG(15)/PFAC + EQK(132)=EG(15)*EG(23)/EG(11)/EG(27) + EQK(133)=EG(11)/EG(12) + EQK(138)=EQK(133) + EQK(141)=EQK(133) + EQK(142)=EQK(133) + EQK(134)=EG(2)*EG(5)*EG(15)/EG(4)/EG(12)*PFAC + EQK(135)=EG(6)*EG(15)/EG(4)/EG(12) + EQK(136)=EG(2)*EG(13)/EG(1)/EG(12) + EQK(137)=EG(21)/EG(6)/EG(12)/PFAC + EQK(139)=EG(2)*EG(24)/EG(12)/EG(13) + EQK(140)=EG(13)*EG(13)/EG(12)/EG(14) + EQK(143)=EG(15)*EG(18)/EG(12)/EG(16) + EQK(144)=EG(13)*EG(25)/EG(12)/EG(26) + EQK(145)=EG(3)*EG(20)/EG(4)/EG(13) + EQK(146)=EG(5)*EG(18)/EG(4)/EG(13) + EQK(147)=EG(7)*EG(14)/EG(8)/EG(13) + EQK(148)=EG(26)/EG(13)/EG(13)/PFAC + EQK(149)=EG(2)*EG(25)/EG(13)/EG(13) + EQK(150)=EG(14)*EG(15)/EG(13)/EG(17) + EQK(151)=EG(14)*EG(17)/EG(13)/EG(18) + EQK(152)=EG(14)*EG(19)/EG(13)/EG(21) + EQK(153)=EG(14)*EG(20)/EG(13)/EG(21) + EQK(154)=EG(14)*EG(23)/EG(13)/EG(24) + EQK(155)=EG(14)*EG(25)/EG(13)/EG(26) + EQK(156)=EG(2)*EG(15)/EG(17)*PFAC + EQK(157)=EQK(156) + EQK(158)=EG(7)*EG(15)/EG(4)/EG(17) + EQK(159)=EG(7)*EG(18)/EG(4)/EG(19) + EQK(160)=EG(7)*EG(18)/EG(4)/EG(20) + EQK(161)=EG(17)*EG(18)/EG(4)/EG(23) + EQK(162)=EG(1)*EG(22)/EG(24)*PFAC + EQK(163)=EG(7)*EG(24)/EG(4)/EG(25) + EQK(164)=EG(5)*EG(15)*EG(15)/EG(4)/EG(27)*PFAC + EQK(165)=EG(15)*EG(15)*EG(22)/EG(27)/EG(27)*PFAC + EQK(167)=EG(2)*EG(29)/EG(3)/EG(24) + EQK(170)=EG(13)/EG(1)/EG(10)/PFAC + EQK(172)=EG(3)*EG(18)/EG(4)/EG(11) + EQK(175)=EG(3)*EG(29)/EG(4)/EG(23) + EQK(176)=EG(7)*EG(22)/EG(4)/EG(23) + EQK(177)=EG(29)/EG(2)/EG(28)/PFAC + EQK(181)=EG(13)*EG(17)/EG(2)/EG(29) + EQK(182)=EG(1)*EG(28)/EG(2)/EG(29) + EQK(183)=EG(6)*EG(28)/EG(5)/EG(29) + EQK(184)=EG(17)*EG(19)/EG(5)/EG(29) +! +! +! ! Compute reverse reaction rates +! +! PARAMETER (SMALL = 1.D-200) +! + RB(1) = RF(1) / MAX(EQK(1),SMALL) + RB(2) = RF(2) / MAX(EQK(2),SMALL) + RB(3) = RF(3) / MAX(EQK(3),SMALL) + RB(4) = RF(4) / MAX(EQK(4),SMALL) + RB(5) = RF(5) / MAX(EQK(5),SMALL) + RB(6) = RF(6) / MAX(EQK(6),SMALL) + RB(7) = RF(7) / MAX(EQK(7),SMALL) + RB(8) = RF(8) / MAX(EQK(8),SMALL) + RB(9) = RF(9) / MAX(EQK(9),SMALL) + RB(10) = RF(10) / MAX(EQK(10),SMALL) + RB(11) = RF(11) / MAX(EQK(11),SMALL) + RB(12) = RF(12) / MAX(EQK(12),SMALL) + RB(13) = RF(13) / MAX(EQK(13),SMALL) + RB(14) = RF(14) / MAX(EQK(14),SMALL) + RB(15) = RF(15) / MAX(EQK(15),SMALL) + RB(16) = RF(16) / MAX(EQK(16),SMALL) + RB(17) = RF(17) / MAX(EQK(17),SMALL) + RB(18) = RF(18) / MAX(EQK(18),SMALL) + RB(19) = RF(19) / MAX(EQK(19),SMALL) + RB(20) = RF(20) / MAX(EQK(20),SMALL) + RB(21) = RF(21) / MAX(EQK(21),SMALL) + RB(22) = RF(22) / MAX(EQK(22),SMALL) + RB(23) = RF(23) / MAX(EQK(23),SMALL) + RB(24) = RF(24) / MAX(EQK(24),SMALL) + RB(25) = RF(25) / MAX(EQK(25),SMALL) + RB(26) = RF(26) / MAX(EQK(26),SMALL) + RB(27) = RF(27) / MAX(EQK(27),SMALL) + RB(28) = RF(28) / MAX(EQK(28),SMALL) + RB(29) = RF(29) / MAX(EQK(29),SMALL) + RB(30) = RF(30) / MAX(EQK(30),SMALL) + RB(31) = RF(31) / MAX(EQK(31),SMALL) + RB(32) = RF(32) / MAX(EQK(32),SMALL) + RB(33) = RF(33) / MAX(EQK(33),SMALL) + RB(34) = RF(34) / MAX(EQK(34),SMALL) + RB(35) = RF(35) / MAX(EQK(35),SMALL) + RB(36) = RF(36) / MAX(EQK(36),SMALL) + RB(37) = RF(37) / MAX(EQK(37),SMALL) + + RB(38) = RF(38) / MAX(EQK(38),SMALL) + RB(39) = RF(39) / MAX(EQK(39),SMALL) + RB(40) = RF(40) / MAX(EQK(40),SMALL) + RB(41) = RF(41) / MAX(EQK(41),SMALL) + RB(42) = RF(42) / MAX(EQK(42),SMALL) + RB(43) = RF(43) / MAX(EQK(43),SMALL) + RB(44) = RF(44) / MAX(EQK(44),SMALL) + RB(45) = RF(45) / MAX(EQK(45),SMALL) + RB(46) = RF(46) / MAX(EQK(46),SMALL) + RB(47) = RF(47) / MAX(EQK(47),SMALL) + RB(48) = RF(48) / MAX(EQK(48),SMALL) + RB(49) = RF(49) / MAX(EQK(49),SMALL) + RB(50) = RF(50) / MAX(EQK(50),SMALL) + RB(51) = RF(51) / MAX(EQK(51),SMALL) + RB(52) = RF(52) / MAX(EQK(52),SMALL) + RB(53) = RF(53) / MAX(EQK(53),SMALL) + RB(54) = RF(54) / MAX(EQK(54),SMALL) + RB(55) = RF(55) / MAX(EQK(55),SMALL) + RB(56) = RF(56) / MAX(EQK(56),SMALL) + RB(57) = RF(57) / MAX(EQK(57),SMALL) + RB(58) = RF(58) / MAX(EQK(58),SMALL) + RB(59) = RF(59) / MAX(EQK(59),SMALL) + RB(60) = RF(60) / MAX(EQK(60),SMALL) + RB(61) = RF(61) / MAX(EQK(61),SMALL) + RB(62) = RF(62) / MAX(EQK(62),SMALL) + RB(63) = RF(63) / MAX(EQK(63),SMALL) + RB(64) = RF(64) / MAX(EQK(64),SMALL) + RB(65) = RF(65) / MAX(EQK(65),SMALL) + RB(66) = RF(66) / MAX(EQK(66),SMALL) + RB(67) = RF(67) / MAX(EQK(67),SMALL) + RB(68) = RF(68) / MAX(EQK(68),SMALL) + RB(69) = RF(69) / MAX(EQK(69),SMALL) + RB(70) = RF(70) / MAX(EQK(70),SMALL) + RB(71) = RF(71) / MAX(EQK(71),SMALL) + RB(72) = RF(72) / MAX(EQK(72),SMALL) + RB(73) = RF(73) / MAX(EQK(73),SMALL) + RB(74) = RF(74) / MAX(EQK(74),SMALL) + RB(75) = RF(75) / MAX(EQK(75),SMALL) + RB(76) = RF(76) / MAX(EQK(76),SMALL) + RB(77) = RF(77) / MAX(EQK(77),SMALL) + RB(78) = RF(78) / MAX(EQK(78),SMALL) + RB(79) = RF(79) / MAX(EQK(79),SMALL) + RB(80) = RF(80) / MAX(EQK(80),SMALL) + RB(81) = RF(81) / MAX(EQK(81),SMALL) + RB(82) = RF(82) / MAX(EQK(82),SMALL) + RB(83) = RF(83) / MAX(EQK(83),SMALL) + RB(84) = RF(84) / MAX(EQK(84),SMALL) + RB(85) = RF(85) / MAX(EQK(85),SMALL) + RB(86) = RF(86) / MAX(EQK(86),SMALL) + RB(87) = RF(87) / MAX(EQK(87),SMALL) + RB(88) = RF(88) / MAX(EQK(88),SMALL) + RB(89) = RF(89) / MAX(EQK(89),SMALL) + RB(90) = RF(90) / MAX(EQK(90),SMALL) + RB(91) = RF(91) / MAX(EQK(91),SMALL) + RB(92) = RF(92) / MAX(EQK(92),SMALL) + RB(93) = RF(93) / MAX(EQK(93),SMALL) + RB(94) = RF(94) / MAX(EQK(94),SMALL) + RB(95) = RF(95) / MAX(EQK(95),SMALL) + RB(96) = RF(96) / MAX(EQK(96),SMALL) + RB(97) = RF(97) / MAX(EQK(97),SMALL) + RB(98) = RF(98) / MAX(EQK(98),SMALL) + RB(99) = RF(99) / MAX(EQK(99),SMALL) + RB(100) = RF(100) / MAX(EQK(100),SMALL) + RB(101) = RF(101) / MAX(EQK(101),SMALL) + RB(102) = RF(102) / MAX(EQK(102),SMALL) + RB(103) = RF(103) / MAX(EQK(103),SMALL) + RB(104) = RF(104) / MAX(EQK(104),SMALL) + RB(105) = RF(105) / MAX(EQK(105),SMALL) + RB(106) = RF(106) / MAX(EQK(106),SMALL) + RB(107) = RF(107) / MAX(EQK(107),SMALL) + RB(108) = RF(108) / MAX(EQK(108),SMALL) + RB(109) = RF(109) / MAX(EQK(109),SMALL) + RB(110) = RF(110) / MAX(EQK(110),SMALL) + RB(111) = RF(111) / MAX(EQK(111),SMALL) + RB(112) = RF(112) / MAX(EQK(112),SMALL) + RB(113) = RF(113) / MAX(EQK(113),SMALL) + RB(114) = RF(114) / MAX(EQK(114),SMALL) + RB(115) = RF(115) / MAX(EQK(115),SMALL) + RB(116) = RF(116) / MAX(EQK(116),SMALL) + RB(117) = RF(117) / MAX(EQK(117),SMALL) + RB(118) = RF(118) / MAX(EQK(118),SMALL) + RB(119) = RF(119) / MAX(EQK(119),SMALL) + RB(120) = RF(120) / MAX(EQK(120),SMALL) + RB(121) = RF(121) / MAX(EQK(121),SMALL) + RB(122) = RF(122) / MAX(EQK(122),SMALL) + RB(123) = RF(123) / MAX(EQK(123),SMALL) + RB(124) = RF(124) / MAX(EQK(124),SMALL) + RB(125) = RF(125) / MAX(EQK(125),SMALL) + RB(126) = 0.0 + RB(127) = RF(127) / MAX(EQK(127),SMALL) + RB(128) = RF(128) / MAX(EQK(128),SMALL) + RB(129) = RF(129) / MAX(EQK(129),SMALL) + RB(130) = RF(130) / MAX(EQK(130),SMALL) + RB(131) = RF(131) / MAX(EQK(131),SMALL) + RB(132) = RF(132) / MAX(EQK(132),SMALL) + RB(133) = RF(133) / MAX(EQK(133),SMALL) + RB(134) = RF(134) / MAX(EQK(134),SMALL) + RB(135) = RF(135) / MAX(EQK(135),SMALL) + RB(136) = RF(136) / MAX(EQK(136),SMALL) + RB(137) = RF(137) / MAX(EQK(137),SMALL) + RB(138) = RF(138) / MAX(EQK(138),SMALL) + RB(139) = RF(139) / MAX(EQK(139),SMALL) + RB(140) = RF(140) / MAX(EQK(140),SMALL) + RB(141) = RF(141) / MAX(EQK(141),SMALL) + RB(142) = RF(142) / MAX(EQK(142),SMALL) + RB(143) = RF(143) / MAX(EQK(143),SMALL) + RB(144) = RF(144) / MAX(EQK(144),SMALL) + RB(145) = RF(145) / MAX(EQK(145),SMALL) + RB(146) = RF(146) / MAX(EQK(146),SMALL) + RB(147) = RF(147) / MAX(EQK(147),SMALL) + RB(148) = RF(148) / MAX(EQK(148),SMALL) + RB(149) = RF(149) / MAX(EQK(149),SMALL) + RB(150) = RF(150) / MAX(EQK(150),SMALL) + RB(151) = RF(151) / MAX(EQK(151),SMALL) + RB(152) = RF(152) / MAX(EQK(152),SMALL) + RB(153) = RF(153) / MAX(EQK(153),SMALL) + RB(154) = RF(154) / MAX(EQK(154),SMALL) + RB(155) = RF(155) / MAX(EQK(155),SMALL) + RB(156) = RF(156) / MAX(EQK(156),SMALL) + RB(157) = RF(157) / MAX(EQK(157),SMALL) + RB(158) = RF(158) / MAX(EQK(158),SMALL) + RB(159) = RF(159) / MAX(EQK(159),SMALL) + RB(160) = RF(160) / MAX(EQK(160),SMALL) + RB(161) = RF(161) / MAX(EQK(161),SMALL) + RB(162) = RF(162) / MAX(EQK(162),SMALL) + RB(163) = RF(163) / MAX(EQK(163),SMALL) + RB(164) = RF(164) / MAX(EQK(164),SMALL) + RB(165) = RF(165) / MAX(EQK(165),SMALL) + RB(166) = 0.0 + RB(167) = RF(167) / MAX(EQK(167),SMALL) + RB(168) = RF(168) / MAX(EQK(168),SMALL) + RB(169) = 0.0 + RB(170) = RF(170) / MAX(EQK(170),SMALL) + RB(171) = 0.0 + RB(172) = RF(172) / MAX(EQK(172),SMALL) + RB(173) = 0.0 + RB(174) = 0.0 + RB(175) = RF(175) / MAX(EQK(175),SMALL) + RB(176) = RF(176) / MAX(EQK(176),SMALL) + RB(177) = RF(177) / MAX(EQK(177),SMALL) + RB(178) = 0.0 + RB(179) = 0.0 + RB(180) = 0.0 + RB(181) = RF(181) / MAX(EQK(181),SMALL) + RB(182) = RF(182) / MAX(EQK(182),SMALL) + RB(183) = RF(183) / MAX(EQK(183),SMALL) + RB(184) = RF(184) / MAX(EQK(184),SMALL) +! +! +! rates at low pressure limit +! + RKLOW(1) = EXP(3.40312786D1 -1.50965D3/T) + RKLOW(2) = EXP(5.99064331D1 -2.76D0*ALOGT -8.05146668D2/T) + RKLOW(3) = EXP(7.69484824D1 -4.76D0*ALOGT -1.22784867D3/T) + RKLOW(4) = EXP(5.61662604D1 -2.57D0*ALOGT -2.13867084D2/T) + RKLOW(5) = EXP(7.39217399D1 -4.82D0*ALOGT -3.28600484D3/T) + RKLOW(6) = EXP(6.98660102D1 -4.8D0*ALOGT -2.79788467D3/T) + RKLOW(7) = EXP(7.28526099D1 -4.65D0*ALOGT -2.55634067D3/T) + RKLOW(8) = EXP(9.59450043D1 -7.44D0*ALOGT -7.08529068D3/T) + RKLOW(9) = EXP(9.34384048D1 -7.27D0*ALOGT -3.63322434D3/T) + RKLOW(10) = EXP(6.9414025D1 -3.86D0*ALOGT -1.67067934D3/T) + RKLOW(11) = EXP(9.61977483D1 -7.62D0*ALOGT -3.50742017D3/T) + RKLOW(12) = EXP(9.50941235D1 -7.08D0*ALOGT -3.36400342D3/T) + RKLOW(13) = EXP(6.37931383D1 -3.42D0*ALOGT -4.24463259D4/T) + RKLOW(14) = EXP(4.22794408D1 -9.D-1*ALOGT +8.55468335D2/T) + RKLOW(15) = EXP(8.42793577D1 -5.92D0*ALOGT -1.58010034D3/T) + RKLOW(16) = EXP(6.54619238D1 -3.74D0*ALOGT -9.74227469D2/T) + RKLOW(17) = EXP(7.69748493D1 -5.11D0*ALOGT -3.57032226D3/T) + RKLOW(18) = EXP(8.81295053D1 -6.36D0*ALOGT -2.536212D3/T) + RKLOW(19) = EXP(9.56297642D1 -7.03D0*ALOGT -1.38988444D3/T) + RKLOW(20) = EXP(1.17889265D2 -9.3D0*ALOGT -4.92145901D4/T) + RKLOW(21) = EXP(5.91374013D1 -2.8D0*ALOGT -2.96897834D2/T) + RKLOW(22) = EXP(9.67205025D1 -7.63D0*ALOGT -1.93939704D3/T) +! +! END +! ! +! ----------------------------------------------------------------------! +! ! +! +! third-body concentrations +! ! +! SUBROUTINE RATX (T, C, RF, RB, RKLOW) +! IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! PARAMETER (SMALL = 1.D-200) +! DIMENSION C(*), RF(*), RB(*), RKLOW(*) +! + ALOGT = LOG(T) + CTOT = 0.0 + DO K = 1, 19 + CTOT = CTOT + C(K) + ENDDO +! + CTB(1) = CTOT + 1.4D0*C(1) + 1.44D1*C(6) + C(10) + 7.5D-1*C(11) & + + 2.6D0*C(12) + 2.D0*C(17) + CTB(2) = CTOT + C(1) + 5.D0*C(6) + C(10) + 5.D-1*C(11) + C(12) & + + 2.D0*C(17) + CTB(47) = CTB(2) + CTB(51) = CTB(2) + CTB(53) = CTB(2) + CTB(54) = CTB(2) + CTB(56) = CTB(2) + CTB(60) = CTB(2) + CTB(67) = CTB(2) + CTB(68) = CTB(2) + CTB(70) = CTB(2) + CTB(72) = CTB(2) + CTB(78) = CTB(2) + CTB(80) = CTB(2) + CTB(90) = CTB(2) + CTB(122) = CTB(2) + CTB(131) = CTB(2) + CTB(137) = CTB(2) + CTB(148) = CTB(2) + CTB(162) = CTB(2) + CTB(170) = CTB(2) + CTB(177) = CTB(2) + CTB(12) = CTOT + C(1) + 5.D0*C(4) + 5.D0*C(6) + C(10) & + + 5.D-1*C(11) + 2.5D0*C(12) + 2.D0*C(17) + CTB(31) = CTOT - C(4) - C(6) - 2.5D-1*C(11) + 5.D-1*C(12) & + + 5.D-1*C(17) - C(19) + CTB(36) = CTOT - C(1) - C(6) + C(10) - C(12) + 2.D0*C(17) + CTB(40) = CTOT - 2.7D-1*C(1) + 2.65D0*C(6) + C(10) + 2.D0*C(17) + CTB(49) = CTOT + C(1) + 5.D0*C(6) + 2.D0*C(10) + 5.D-1*C(11) & + + C(12) + 2.D0*C(17) + CTB(157) = CTOT + C(1) - C(6) + C(10) + 5.D-1*C(11) + C(12) & + + 2.D0*C(17) +! +! +! fall-off reactions +! +! + PR = RKLOW(1) * CTB(12) / RF(12) + PCOR = PR / (1.0 + PR) + RF(12) = RF(12) * PCOR + RB(12) = RB(12) * PCOR +! + PR = RKLOW(2) * CTB(47) / RF(47) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 4.38D-1*EXP(-T/9.1D1) + 5.62D-1*EXP(-T/5.836D3)& + + EXP(-8.552D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(47) = RF(47) * PCOR + RB(47) = RB(47) * PCOR +! + PR = RKLOW(3) * CTB(49) / RF(49) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.17D-1*EXP(-T/7.4D1) + 7.83D-1*EXP(-T/2.941D3)& + + EXP(-6.964D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(49) = RF(49) * PCOR + RB(49) = RB(49) * PCOR +! + PR = RKLOW(4) * CTB(51) / RF(51) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.176D-1*EXP(-T/2.71D2) + 7.824D-1*EXP(-T/2.755D3)& + + EXP(-6.57D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(51) = RF(51) * PCOR + RB(51) = RB(51) * PCOR + + PR = RKLOW(5) * CTB(53) / RF(53) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.813D-1*EXP(-T/1.03D2) + 7.187D-1*EXP(-T/1.291D3)& + + EXP(-4.16D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(53) = RF(53) * PCOR + RB(53) = RB(53) * PCOR + + PR = RKLOW(6) * CTB(54) / RF(54) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.42D-1*EXP(-T/9.4D1) + 7.58D-1*EXP(-T/1.555D3)& + + EXP(-4.2D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(54) = RF(54) * PCOR + RB(54) = RB(54) * PCOR + + PR = RKLOW(7) * CTB(56) / RF(56) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 4.D-1*EXP(-T/1.D2) + 6.D-1*EXP(-T/9.D4)& + + EXP(-1.D4/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(56) = RF(56) * PCOR + RB(56) = RB(56) * PCOR + + PR = RKLOW(8) * CTB(60) / RF(60) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 3.D-1*EXP(-T/1.D2) + 7.D-1*EXP(-T/9.D4)& + + EXP(-1.D4/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(60) = RF(60) * PCOR + RB(60) = RB(60) * PCOR + + PR = RKLOW(9) * CTB(67) / RF(67) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.493D-1*EXP(-T/9.85D1) + 7.507D-1*EXP(-T/1.302D3)& + + EXP(-4.167D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(67) = RF(67) * PCOR + RB(67) = RB(67) * PCOR + + PR = RKLOW(10) * CTB(68) / RF(68) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.18D-1*EXP(-T/2.075D2) + 7.82D-1*EXP(-T/2.663D3)& + + EXP(-6.095D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(68) = RF(68) * PCOR + RB(68) = RB(68) * PCOR + + PR = RKLOW(11) * CTB(70) / RF(70) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.47D-2*EXP(-T/2.1D2) + 9.753D-1*EXP(-T/9.84D2)& + + EXP(-4.374D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(70) = RF(70) * PCOR + RB(70) = RB(70) * PCOR + + PR = RKLOW(12) * CTB(72) / RF(72) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 1.578D-1*EXP(-T/1.25D2) + 8.422D-1*EXP(-T/2.219D3)& + + EXP(-6.882D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(72) = RF(72) * PCOR + RB(72) = RB(72) * PCOR + + PR = RKLOW(13) * CTB(78) / RF(78) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 6.8D-2*EXP(-T/1.97D2) + 9.32D-1*EXP(-T/1.54D3)& + + EXP(-1.03D4/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(78) = RF(78) * PCOR + RB(78) = RB(78) * PCOR + + PR = RKLOW(14) * CTB(80) / RF(80) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.654D-1*EXP(-T/9.4D1) + 7.346D-1*EXP(-T/1.756D3)& + + EXP(-5.182D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(80) = RF(80) * PCOR + RB(80) = RB(80) * PCOR + + PR = RKLOW(15) * CTB(90) / RF(90) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 5.88D-1*EXP(-T/1.95D2) + 4.12D-1*EXP(-T/5.9D3)& + + EXP(-6.394D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(90) = RF(90) * PCOR + RB(90) = RB(90) * PCOR + + PR = RKLOW(16) * CTB(122) / RF(122) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 4.243D-1*EXP(-T/2.37D2) + 5.757D-1*EXP(-T/1.652D3)& + + EXP(-5.069D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(122) = RF(122) * PCOR + RB(122) = RB(122) * PCOR + + PR = RKLOW(17) * CTB(131) / RF(131) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 4.093D-1*EXP(-T/2.75D2) + 5.907D-1*EXP(-T/1.226D3)& + + EXP(-5.185D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(131) = RF(131) * PCOR + RB(131) = RB(131) * PCOR + + PR = RKLOW(18) * CTB(137) / RF(137) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 3.973D-1*EXP(-T/2.08D2) + 6.027D-1*EXP(-T/3.922D3)& + + EXP(-1.018D4/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(137) = RF(137) * PCOR + RB(137) = RB(137) * PCOR + + PR = RKLOW(19) * CTB(148) / RF(148) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 3.81D-1*EXP(-T/7.32D1) + 6.19D-1*EXP(-T/1.18D3)& + + EXP(-9.999D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(148) = RF(148) * PCOR + RB(148) = RB(148) * PCOR + + PR = RKLOW(20) * CTB(162) / RF(162) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 2.655D-1*EXP(-T/1.8D2) + 7.345D-1*EXP(-T/1.035D3)& + + EXP(-5.417D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(162) = RF(162) * PCOR + RB(162) = RB(162) * PCOR + + PR = RKLOW(21) * CTB(170) / RF(170) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 4.22D-1*EXP(-T/1.22D2) + 5.78D-1*EXP(-T/2.535D3)& + + EXP(-9.365D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(170) = RF(170) * PCOR + RB(170) = RB(170) * PCOR + + PR = RKLOW(22) * CTB(177) / RF(177) + PCOR = PR / (1.0 + PR) + PRLOG = LOG10(MAX(PR,SMALL)) + FCENT = 5.35D-1*EXP(-T/2.01D2) + 4.65D-1*EXP(-T/1.773D3)& + + EXP(-5.333D3/T) + FCLOG = LOG10(MAX(FCENT,SMALL)) + XN = 0.75 - 1.27*FCLOG + CPRLOG= PRLOG - (0.4 + 0.67*FCLOG) + FLOG = FCLOG/(1.0 + (CPRLOG/(XN-0.14*CPRLOG))**2) + FC = 10.0**FLOG + PCOR = FC * PCOR + RF(177) = RF(177) * PCOR + RB(177) = RB(177) * PCOR + + RF(1) = RF(1)*CTB(1)*C(3)*C(3) + RF(2) = RF(2)*CTB(2)*C(3)*C(2) + RF(3) = RF(3)*C(3)*C(1) + RF(4) = RF(4)*C(3)*C(7) + RF(5) = RF(5)*C(3)*C(8) + RF(6) = RF(6)*C(3) + RF(7) = RF(7)*C(3) + RF(8) = RF(8)*C(3) + RF(9) = RF(9)*C(3) + RF(10) = RF(10)*C(3)*C(9) + RF(11) = RF(11)*C(3)*C(10) + RF(12) = RF(12)*C(3)*C(11) + RF(13) = RF(13)*C(3) + RF(14) = RF(14)*C(3) + RF(15) = RF(15)*C(3)*C(13) + RF(16) = RF(16)*C(3) + RF(17) = RF(17)*C(3) + RF(18) = RF(18)*C(3)*C(14) + RF(19) = RF(19)*C(3)*C(14) + RF(20) = RF(20)*C(3)*C(15) + RF(21) = RF(21)*C(3)*C(15) + RF(22) = RF(22)*C(3) + RF(23) = RF(23)*C(3)*C(16) + RF(24) = RF(24)*C(3) + RF(25) = RF(25)*C(3)*C(17) + RF(26) = RF(26)*C(3) + RF(27) = RF(27)*C(3)*C(18) + RF(28) = RF(28)*C(3)*C(18) + RF(29) = RF(29)*C(4)*C(11) + RF(30) = RF(30)*C(4)*C(13) + RF(31) = RF(31)*CTB(31)*C(2)*C(4) + RF(32) = RF(32)*C(2)*C(4)*C(4) + RF(33) = RF(33)*C(2)*C(4)*C(6) + RF(34) = RF(34)*C(2)*C(4)*C(19) + RF(35) = RF(35)*C(2)*C(4) + RF(36) = RF(36)*CTB(36)*C(2)*C(2) + RF(37) = RF(37)*C(2)*C(2)*C(1) + RF(38) = RF(38)*C(2)*C(2)*C(6) + RF(39) = RF(39)*C(2)*C(2)*C(12) + RF(40) = RF(40)*CTB(40)*C(2)*C(5) + RF(41) = RF(41)*C(2)*C(7) + RF(42) = RF(42)*C(2)*C(7) + RF(43) = RF(43)*C(2)*C(7) + RF(44) = RF(44)*C(2)*C(8) + RF(45) = RF(45)*C(2)*C(8) + RF(46) = RF(46)*C(2) + RF(47) = RF(47)*C(2) + RF(48) = RF(48)*C(2) + RF(49) = RF(49)*C(2)*C(9) + RF(50) = RF(50)*C(2)*C(10) + RF(51) = RF(51)*C(2) + RF(52) = RF(52)*C(2) + RF(53) = RF(53)*C(2)*C(13) + RF(54) = RF(54)*C(2)*C(13) + RF(55) = RF(55)*C(2)*C(13) + RF(56) = RF(56)*C(2) + RF(57) = RF(57)*C(2) + RF(58) = RF(58)*C(2) + RF(59) = RF(59)*C(2) + RF(60) = RF(60)*C(2) + RF(61) = RF(61)*C(2) + RF(62) = RF(62)*C(2) + RF(63) = RF(63)*C(2) + RF(64) = RF(64)*C(2) + RF(65) = RF(65)*C(2)*C(14) + RF(66) = RF(66)*C(2)*C(14) + RF(67) = RF(67)*C(2)*C(15) + RF(68) = RF(68)*C(2) + RF(69) = RF(69)*C(2) + RF(70) = RF(70)*C(2)*C(16) + RF(71) = RF(71)*C(2)*C(16) + RF(72) = RF(72)*C(2) + RF(73) = RF(73)*C(2) + RF(74) = RF(74)*C(2)*C(17) + RF(75) = RF(75)*C(2) + RF(76) = RF(76)*C(2)*C(18) + RF(77) = RF(77)*C(2)*C(18) + RF(78) = RF(78)*C(1)*C(11) + RF(79) = RF(79)*C(5)*C(1) + RF(80) = RF(80)*C(5)*C(5) + RF(81) = RF(81)*C(5)*C(5) + RF(82) = RF(82)*C(5)*C(7) + RF(83) = RF(83)*C(5)*C(8) + RF(84) = RF(84)*C(5)*C(8) + RF(85) = RF(85)*C(5) + RF(86) = RF(86)*C(5) + RF(87) = RF(87)*C(5) + RF(88) = RF(88)*C(5) + RF(89) = RF(89)*C(5) + RF(90) = RF(90)*C(5)*C(9) + RF(91) = RF(91)*C(5)*C(9) + RF(92) = RF(92)*C(5)*C(9) + RF(93) = RF(93)*C(5)*C(10) + RF(94) = RF(94)*C(5)*C(11) + RF(95) = RF(95)*C(5) + RF(96) = RF(96)*C(5)*C(13) + RF(97) = RF(97)*C(5) + RF(98) = RF(98)*C(5) + RF(99) = RF(99)*C(5)*C(14) + RF(100) = RF(100)*C(5)*C(14) + RF(101) = RF(101)*C(5)*C(15) + RF(102) = RF(102)*C(5)*C(15) + RF(103) = RF(103)*C(5) + RF(104) = RF(104)*C(5)*C(16) + RF(105) = RF(105)*C(5)*C(17) + RF(106) = RF(106)*C(5)*C(18) + RF(107) = RF(107)*C(7)*C(7) + RF(108) = RF(108)*C(7)*C(7) + RF(109) = RF(109)*C(7) + RF(110) = RF(110)*C(7)*C(9) + RF(111) = RF(111)*C(7)*C(9) + RF(112) = RF(112)*C(7)*C(11) + RF(113) = RF(113)*C(7)*C(13) + RF(114) = RF(114)*C(4) + RF(115) = RF(115)*C(9) + RF(116) = RF(116)*C(4) + RF(117) = RF(117)*C(1) + RF(118) = RF(118)*C(6) + RF(120) = RF(120)*C(9) + RF(121) = RF(121)*C(10) + RF(122) = RF(122)*C(11) + RF(123) = RF(123)*C(12) + RF(124) = RF(124)*C(13) + RF(126) = RF(126)*C(4) + RF(127) = RF(127)*C(1) + RF(129) = RF(129)*C(9) + RF(130) = RF(130)*C(10) + RF(131) = RF(131)*C(11) + RF(133) = RF(133)*C(19) + RF(134) = RF(134)*C(4) + RF(135) = RF(135)*C(4) + RF(136) = RF(136)*C(1) + RF(137) = RF(137)*C(6) + RF(138) = RF(138)*C(6) + RF(139) = RF(139)*C(9) + RF(140) = RF(140)*C(10) + RF(141) = RF(141)*C(11) + RF(142) = RF(142)*C(12) + RF(143) = RF(143)*C(12) + RF(144) = RF(144)*C(17) + RF(145) = RF(145)*C(9)*C(4) + RF(146) = RF(146)*C(9)*C(4) + RF(147) = RF(147)*C(9)*C(8) + RF(148) = RF(148)*C(9)*C(9) + RF(149) = RF(149)*C(9)*C(9) + RF(150) = RF(150)*C(9) + RF(151) = RF(151)*C(9)*C(13) + RF(152) = RF(152)*C(9)*C(14) + RF(153) = RF(153)*C(9)*C(14) + RF(154) = RF(154)*C(9)*C(16) + RF(155) = RF(155)*C(9)*C(17) + RF(156) = RF(156)*C(6) + RF(157) = RF(157)*CTB(157) + RF(158) = RF(158)*C(4) + RF(159) = RF(159)*C(4) + RF(160) = RF(160)*C(4) + RF(161) = RF(161)*C(4) + RF(162) = RF(162)*C(16) + RF(163) = RF(163)*C(4) + RF(164) = RF(164)*C(4) + RF(166) = RF(166)*C(3)*C(9) + RF(167) = RF(167)*C(3)*C(16) + RF(168) = RF(168)*C(5)*C(7) + RF(169) = RF(169)*C(5)*C(9) + RF(170) = RF(170)*C(1) + RF(171) = RF(171)*C(4) + RF(172) = RF(172)*C(4) + RF(174) = RF(174)*C(6) + RF(175) = RF(175)*C(4) + RF(176) = RF(176)*C(4) + RF(177) = RF(177)*C(2)*C(18) + RF(178) = RF(178)*C(3) + RF(179) = RF(179)*C(4) + RF(180) = RF(180)*C(4) + RF(181) = RF(181)*C(2) + RF(182) = RF(182)*C(2) + RF(183) = RF(183)*C(5) + RF(184) = RF(184)*C(5) + RB(1) = RB(1)*CTB(1)*C(4) + RB(2) = RB(2)*CTB(2)*C(5) + RB(3) = RB(3)*C(2)*C(5) + RB(4) = RB(4)*C(5)*C(4) + RB(5) = RB(5)*C(5)*C(7) + RB(6) = RB(6)*C(2)*C(11) + RB(7) = RB(7)*C(2) + RB(8) = RB(8)*C(1)*C(11) + RB(9) = RB(9)*C(2) + RB(10) = RB(10)*C(2)*C(13) + RB(11) = RB(11)*C(5)*C(9) + RB(12) = RB(12)*C(12) + RB(13) = RB(13)*C(5)*C(11) + RB(14) = RB(14)*C(2)*C(12) + RB(15) = RB(15)*C(5) + RB(16) = RB(16)*C(5)*C(13) + RB(17) = RB(17)*C(5)*C(13) + RB(18) = RB(18)*C(5) + RB(19) = RB(19)*C(5) + RB(20) = RB(20)*C(2) + RB(21) = RB(21)*C(11) + RB(22) = RB(22)*C(2)*C(18) + RB(23) = RB(23)*C(9) + RB(24) = RB(24)*C(9)*C(13) + RB(25) = RB(25)*C(5) + RB(26) = RB(26)*C(2)*C(11)*C(11) + RB(27) = RB(27)*C(5) + RB(28) = RB(28)*C(12) + RB(29) = RB(29)*C(3)*C(12) + RB(30) = RB(30)*C(7) + RB(31) = RB(31)*CTB(31)*C(7) + RB(32) = RB(32)*C(7)*C(4) + RB(33) = RB(33)*C(7)*C(6) + RB(34) = RB(34)*C(7)*C(19) + RB(35) = RB(35)*C(3)*C(5) + RB(36) = RB(36)*CTB(36)*C(1) + RB(37) = RB(37)*C(1)*C(1) + RB(38) = RB(38)*C(1)*C(6) + RB(39) = RB(39)*C(1)*C(12) + RB(40) = RB(40)*CTB(40)*C(6) + RB(41) = RB(41)*C(3)*C(6) + RB(42) = RB(42)*C(4)*C(1) + RB(43) = RB(43)*C(5)*C(5) + RB(44) = RB(44)*C(7)*C(1) + RB(45) = RB(45)*C(5)*C(6) + RB(46) = RB(46)*C(1) + RB(47) = RB(47)*C(9) + RB(48) = RB(48)*C(1) + RB(49) = RB(49)*C(10) + RB(50) = RB(50)*C(9)*C(1) + RB(51) = RB(51)*C(13) + RB(52) = RB(52)*C(1)*C(11) + RB(55) = RB(55)*C(1) + RB(56) = RB(56)*C(14) + RB(57) = RB(57)*C(1)*C(13) + RB(58) = RB(58)*C(5)*C(9) + RB(59) = RB(59)*C(6) + RB(60) = RB(60)*C(14) + RB(61) = RB(61)*C(2) + RB(62) = RB(62)*C(1)*C(13) + RB(63) = RB(63)*C(5)*C(9) + RB(64) = RB(64)*C(6) + RB(65) = RB(65)*C(1) + RB(66) = RB(66)*C(1) + RB(68) = RB(68)*C(16) + RB(69) = RB(69)*C(1)*C(15) + RB(71) = RB(71)*C(1) + RB(72) = RB(72)*C(17) + RB(73) = RB(73)*C(1)*C(16) + RB(74) = RB(74)*C(1) + RB(75) = RB(75)*C(11) + RB(76) = RB(76)*C(1) + RB(77) = RB(77)*C(9)*C(11) + RB(78) = RB(78)*C(13) + RB(79) = RB(79)*C(2)*C(6) + RB(80) = RB(80)*C(8) + RB(81) = RB(81)*C(3)*C(6) + RB(82) = RB(82)*C(4)*C(6) + RB(83) = RB(83)*C(7)*C(6) + RB(84) = RB(84)*C(7)*C(6) + RB(85) = RB(85)*C(2)*C(11) + RB(86) = RB(86)*C(2) + RB(87) = RB(87)*C(2)*C(13) + RB(88) = RB(88)*C(6) + RB(89) = RB(89)*C(2)*C(13) + RB(90) = RB(90)*C(14) + RB(91) = RB(91)*C(6) + RB(92) = RB(92)*C(6) + RB(93) = RB(93)*C(9)*C(6) + RB(94) = RB(94)*C(2)*C(12) + RB(95) = RB(95)*C(6)*C(11) + RB(96) = RB(96)*C(6) + RB(97) = RB(97)*C(6)*C(13) + RB(98) = RB(98)*C(6)*C(13) + RB(99) = RB(99)*C(6) + RB(100) = RB(100)*C(6) + RB(101) = RB(101)*C(2)*C(18) + RB(102) = RB(102)*C(9)*C(11) + RB(103) = RB(103)*C(6)*C(15) + RB(104) = RB(104)*C(6) + RB(105) = RB(105)*C(6) + RB(106) = RB(106)*C(6) + RB(107) = RB(107)*C(4)*C(8) + RB(108) = RB(108)*C(4)*C(8) + RB(109) = RB(109)*C(5)*C(13) + RB(110) = RB(110)*C(4)*C(10) + RB(111) = RB(111)*C(5) + RB(112) = RB(112)*C(5)*C(12) + RB(113) = RB(113)*C(8) + RB(114) = RB(114)*C(3)*C(11) + RB(115) = RB(115)*C(2)*C(15) + RB(116) = RB(116)*C(3) + RB(117) = RB(117)*C(2) + RB(118) = RB(118)*C(2)*C(13) + RB(119) = RB(119)*C(2)*C(15) + RB(120) = RB(120)*C(2) + RB(121) = RB(121)*C(2)*C(16) + RB(123) = RB(123)*C(11) + RB(124) = RB(124)*C(2)*C(18) + RB(125) = RB(125)*C(11)*C(15) + RB(127) = RB(127)*C(2)*C(9) + RB(128) = RB(128)*C(1)*C(15) + RB(129) = RB(129)*C(2)*C(16) + RB(130) = RB(130)*C(9)*C(9) + RB(131) = RB(131)*C(18) + RB(132) = RB(132)*C(11) + RB(133) = RB(133)*C(19) + RB(134) = RB(134)*C(2)*C(5)*C(11) + RB(135) = RB(135)*C(11)*C(6) + RB(136) = RB(136)*C(9)*C(2) + RB(137) = RB(137)*C(14) + RB(138) = RB(138)*C(6) + RB(139) = RB(139)*C(2)*C(16) + RB(140) = RB(140)*C(9)*C(9) + RB(141) = RB(141)*C(11) + RB(142) = RB(142)*C(12) + RB(143) = RB(143)*C(11)*C(13) + RB(144) = RB(144)*C(9) + RB(145) = RB(145)*C(3) + RB(146) = RB(146)*C(5)*C(13) + RB(147) = RB(147)*C(7)*C(10) + RB(148) = RB(148)*C(17) + RB(149) = RB(149)*C(2) + RB(150) = RB(150)*C(10)*C(11) + RB(151) = RB(151)*C(10) + RB(152) = RB(152)*C(10) + RB(153) = RB(153)*C(10) + RB(154) = RB(154)*C(10) + RB(155) = RB(155)*C(10) + RB(156) = RB(156)*C(2)*C(11)*C(6) + RB(157) = RB(157)*CTB(157)*C(2)*C(11) + RB(158) = RB(158)*C(7)*C(11) + RB(159) = RB(159)*C(7)*C(13) + RB(160) = RB(160)*C(7)*C(13) + RB(161) = RB(161)*C(13) + RB(162) = RB(162)*C(1)*C(15) + RB(163) = RB(163)*C(7)*C(16) + RB(164) = RB(164)*C(5)*C(11)*C(11) + RB(165) = RB(165)*C(11)*C(11)*C(15) + RB(167) = RB(167)*C(2) + RB(168) = RB(168)*C(4)*C(6) + RB(170) = RB(170)*C(9) + RB(172) = RB(172)*C(3)*C(13) + RB(175) = RB(175)*C(3) + RB(176) = RB(176)*C(7)*C(15) + RB(181) = RB(181)*C(9) + RB(182) = RB(182)*C(18)*C(1) + RB(183) = RB(183)*C(6)*C(18) +! +! END +! ! +! ----------------------------------------------------------------------! +! ! +! +! solving QSS species concentration +! ------------------------------------------- +! +! SUBROUTINE QSSA(RF, RB, XQ) +! IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! PARAMETER (SMALL = 1.D-200) +! DIMENSION RF(*), RB(*), XQ(*) +! + RF(119) = 0.D0 + RF(125) = 0.D0 + RF(128) = 0.D0 + RF(132) = 0.D0 + RF(165) = 0.D0 + RF(173) = 0.D0 + RB(180) = 0.D0 + RB(184) = 0.D0 + +! C + DEN = +RF( 85) +RF(114) +RF(115) +RB( 46) + A1_0 = ( +RB( 85) +RB(114) +RB(115) )/MAX(DEN, SMALL) + A1_2 = ( +RF( 46) )/MAX(DEN, SMALL) +! CH + DEN = +RF( 6) +RF( 46) +RF( 86) +RF(116) +RF(117) & + +RF(118) +RF(120) +RF(121) +RF(122) +RF(123) +RF(124) & + +RF(170) +RB( 48) +RB( 88) + A2_0 = ( +RB( 6) +RB(118) +RB(119) +RB(121) +RB(124) & + +RB(125) +RB(170) )/MAX(DEN, SMALL) + A2_1 = ( +RB( 46) )/MAX(DEN, SMALL) + A2_3 = ( +RF( 88) +RB(117) )/MAX(DEN, SMALL) + A2_4 = ( +RF( 48) )/MAX(DEN, SMALL) + A2_5 = ( +RB( 86) +RB(116) +RB(123) )/MAX(DEN, SMALL) + A2_8 = ( +RB(120) )/MAX(DEN, SMALL) + + A2_10 = ( +RB(122) )/MAX(DEN, SMALL) +! CH2 + DEN = +RF( 7) +RF( 47) +RF( 87) +RF( 88) +RF(109) & + +RF(126) +RF(127) +RF(129) +RF(130) +RF(131) +RF(171) & + +RF(172) +RB( 21) +RB( 28) +RB( 91) +RB(117) +RB(133) & + +RB(138) +RB(141) +RB(142) +RB(178) + A3_0 = ( +RF( 21) +RF( 28) +RB( 47) +RB( 87) +RF( 91) & + +RB(109) +RB(119) +RB(126) +RB(127) +RB(128) +RB(128) & + +RB(129) +RB(130) +RB(131) +RB(171) +RB(172) +RB(173) & + +RB(173) )/MAX(DEN, SMALL) + A3_2 = ( +RB( 88) +RF(117) )/MAX(DEN, SMALL) + A3_4 = ( +RF(133) +RF(138) +RF(141) +RF(142) )/MAX(DEN, SMALL) + A3_5 = ( +RB( 7) )/MAX(DEN, SMALL) + A3_8 = ( +RB(132) )/MAX(DEN, SMALL) + A3_11 = ( +RF(178) )/MAX(DEN, SMALL) +! CH2(S) + DEN = +RF( 8) +RF( 9) +RF( 48) +RF( 89) +RF(133) & + +RF(134) +RF(135) +RF(136) +RF(137) +RF(138) +RF(139) & + +RF(140) +RF(141) +RF(142) +RF(143) +RF(144) +RF(174) & + +RB( 59) +RB( 64) +RB( 75) +RB( 92) + A4_0 = ( +RB( 8) +RB( 89) +RF( 92) +RB(134) +RB(135) & + +RB(136) +RB(137) +RB(139) +RB(140) +RB(143) +RB(174) )& + /MAX(DEN, SMALL) + A4_2 = ( +RB( 48) )/MAX(DEN, SMALL) + A4_3 = ( +RB(133) +RB(138) +RB(141) +RB(142) )/MAX(DEN, SMALL) + A4_5 = ( +RB( 9) )/MAX(DEN, SMALL) + A4_6 = ( +RF( 59) )/MAX(DEN, SMALL) + A4_7 = ( +RF( 64) )/MAX(DEN, SMALL) + A4_9 = ( +RB(144) )/MAX(DEN, SMALL) + A4_10 = ( +RF( 75) )/MAX(DEN, SMALL) +! HCO + DEN = +RF( 13) +RF( 14) +RF( 51) +RF( 52) +RF( 95) & + +RF(150) +RF(156) +RF(157) +RF(158) +RB( 7) +RB( 9) & + +RB( 15) +RB( 23) +RB( 30) +RB( 55) +RB( 86) +RB( 96) & + +RB(113) +RB(116) +RB(123) +RB(151) +RB(161) +RB(181) + A5_0 = ( +RB( 13) +RB( 14) +RF( 15) +RF( 23) +RF( 30) & + +RB( 51) +RB( 52) +RF( 55) +RB( 95) +RF( 96) +RF(113) & + +RB(150) +RF(151) +RB(156) +RB(157) +RB(158) )/MAX(DEN, SMALL) + A5_2 = ( +RF( 86) +RF(116) +RF(123) )/MAX(DEN, SMALL) + A5_3 = ( +RF( 7) )/MAX(DEN, SMALL) + A5_4 = ( +RF( 9) )/MAX(DEN, SMALL) + A5_8 = ( +RF(161) )/MAX(DEN, SMALL) + A5_11 = ( +RF(180) +RF(180) +RF(181) +RF(184) )/MAX(DEN, SMALL) +! CH2OH + DEN = +RF( 16) +RF( 56) +RF( 57) +RF( 58) +RF( 59) & + +RF( 97) +RF(159) +RB( 18) +RB( 53) +RB( 61) +RB( 65) & + +RB( 99) +RB(152) + A6_0 = ( +RB( 16) +RF( 18) +RF( 53) +RB( 56) +RB( 57) & + +RB( 58) +RF( 65) +RB( 97) +RF( 99) +RF(152) +RB(159) )& + /MAX(DEN, SMALL) + A6_4 = ( +RB( 59) )/MAX(DEN, SMALL) + A6_7 = ( +RF( 61) )/MAX(DEN, SMALL) + A6_11 = ( +RF(184) )/MAX(DEN, SMALL) +! CH3O + DEN = +RF( 17) +RF( 60) +RF( 61) +RF( 62) +RF( 63) & + +RF( 64) +RF( 98) +RF(160) +RB( 19) +RB( 54) +RB( 66) & + +RB(100) +RB(111) +RB(145) +RB(153) + A7_0 = ( +RB( 17) +RF( 19) +RF( 54) +RB( 60) +RB( 62) & + +RB( 63) +RF( 66) +RB( 98) +RF(100) +RF(111) +RF(145) & + +RF(153) +RB(160) )/MAX(DEN, SMALL) + A7_4 = ( +RB( 64) )/MAX(DEN, SMALL) + A7_6 = ( +RB( 61) )/MAX(DEN, SMALL) +! C2H3 + DEN = +RF( 22) +RF( 68) +RF( 69) +RF(103) +RF(161) & + +RF(175) +RF(176) +RB( 67) +RB( 71) +RB(104) +RB(120) & + +RB(132) +RB(154) + A8_0 = ( +RB( 22) +RF( 67) +RB( 68) +RB( 69) +RF( 71) & + +RB(103) +RF(104) +RF(154) +RB(176) )/MAX(DEN, SMALL) + A8_2 = ( +RF(120) )/MAX(DEN, SMALL) + A8_5 = ( +RB(161) )/MAX(DEN, SMALL) + A8_11 = ( +RB(175) )/MAX(DEN, SMALL) +! C2H5 + DEN = +RF( 24) +RF( 72) +RF( 73) +RF(163) +RB( 25) & + +RB( 70) +RB( 74) +RB(105) +RB(144) +RB(149) +RB(155) + A9_0 = ( +RB( 24) +RF( 25) +RF( 70) +RB( 72) +RB( 73) & + +RF( 74) +RF(105) +RF(149) +RF(155) +RB(163) )/MAX(DEN, SMALL) + A9_4 = ( +RF(144) )/MAX(DEN, SMALL) +! HCCO + DEN = +RF( 26) +RF( 75) +RF(164) +RB( 20) +RB( 27) & + +RB( 76) +RB(106) +RB(122) + A10_0 = ( +RF( 20) +RB( 26) +RF( 27) +RF( 76) +RF(106) & + +RB(125) +RB(164) +RB(165) +RB(165) )/MAX(DEN, SMALL) + A10_2 = ( +RF(122) )/MAX(DEN, SMALL) + A10_4 = ( +RB( 75) )/MAX(DEN, SMALL) + A10_8 = ( +RB(132) )/MAX(DEN, SMALL) +! CH2CHO + DEN = +RF(178) +RF(179) +RF(180) +RF(181) +RF(182) & + +RF(183) +RF(184) +RB(167) +RB(175) +RB(177) + A11_0 = ( +RF(167) +RF(177) +RB(179) +RB(182) +RB(183) )& + /MAX(DEN, SMALL) + A11_5 = ( +RB(181) )/MAX(DEN, SMALL) + A11_8 = ( +RF(175) )/MAX(DEN, SMALL) +! + A2_0 = A2_0 + A2_1*A1_0 + DEN = 1 -A2_1*A1_2 + A2_0 = A2_0/MAX(DEN, SMALL) + A2_4 = A2_4/MAX(DEN, SMALL) + A2_5 = A2_5/MAX(DEN, SMALL) + A2_3 = A2_3/MAX(DEN, SMALL) + A2_10 = A2_10/MAX(DEN, SMALL) + A2_8 = A2_8/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_9*A9_0 + DEN = 1 -A4_9*A9_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A4_5 = A4_5/MAX(DEN, SMALL) + A4_3 = A4_3/MAX(DEN, SMALL) + A4_6 = A4_6/MAX(DEN, SMALL) + A4_10 = A4_10/MAX(DEN, SMALL) + A4_7 = A4_7/MAX(DEN, SMALL) + A5_0 = A5_0 + A5_11*A11_0 + A5_8 = A5_8 + A5_11*A11_8 + DEN = 1 -A5_11*A11_5 + A5_0 = A5_0/MAX(DEN, SMALL) + A5_4 = A5_4/MAX(DEN, SMALL) + A5_2 = A5_2/MAX(DEN, SMALL) + A5_3 = A5_3/MAX(DEN, SMALL) + A5_8 = A5_8/MAX(DEN, SMALL) + A3_0 = A3_0 + A3_11*A11_0 + A3_5 = A3_5 + A3_11*A11_5 + A3_8 = A3_8 + A3_11*A11_8 + A6_0 = A6_0 + A6_11*A11_0 + A6_5 = A6_11*A11_5 + A6_8 = A6_11*A11_8 + A8_0 = A8_0 + A8_11*A11_0 + A8_5 = A8_5 + A8_11*A11_5 + DEN = 1 -A8_11*A11_8 + A8_0 = A8_0/MAX(DEN, SMALL) + A8_2 = A8_2/MAX(DEN, SMALL) + A8_5 = A8_5/MAX(DEN, SMALL) + A2_0 = A2_0 + A2_8*A8_0 + A2_5 = A2_5 + A2_8*A8_5 + DEN = 1 -A2_8*A8_2 + A2_0 = A2_0/MAX(DEN, SMALL) + A2_4 = A2_4/MAX(DEN, SMALL) + A2_5 = A2_5/MAX(DEN, SMALL) + A2_3 = A2_3/MAX(DEN, SMALL) + A2_10 = A2_10/MAX(DEN, SMALL) + A5_0 = A5_0 + A5_8*A8_0 + A5_2 = A5_2 + A5_8*A8_2 + DEN = 1 -A5_8*A8_5 + A5_0 = A5_0/MAX(DEN, SMALL) + A5_4 = A5_4/MAX(DEN, SMALL) + A5_2 = A5_2/MAX(DEN, SMALL) + A5_3 = A5_3/MAX(DEN, SMALL) + A3_0 = A3_0 + A3_8*A8_0 + A3_2 = A3_2 + A3_8*A8_2 + A3_5 = A3_5 + A3_8*A8_5 + A6_0 = A6_0 + A6_8*A8_0 + A6_2 = A6_8*A8_2 + A6_5 = A6_5 + A6_8*A8_5 + A10_0 = A10_0 + A10_8*A8_0 + A10_2 = A10_2 + A10_8*A8_2 + A10_5 = A10_8*A8_5 + A4_0 = A4_0 + A4_7*A7_0 + A4_6 = A4_6 + A4_7*A7_6 + DEN = 1 -A4_7*A7_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A4_5 = A4_5/MAX(DEN, SMALL) + A4_3 = A4_3/MAX(DEN, SMALL) + A4_6 = A4_6/MAX(DEN, SMALL) + A4_10 = A4_10/MAX(DEN, SMALL) + A6_0 = A6_0 + A6_7*A7_0 + A6_4 = A6_4 + A6_7*A7_4 + DEN = 1 -A6_7*A7_6 + A6_0 = A6_0/MAX(DEN, SMALL) + A6_4 = A6_4/MAX(DEN, SMALL) + A6_2 = A6_2/MAX(DEN, SMALL) + A6_5 = A6_5/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_10*A10_0 + A4_2 = A4_2 + A4_10*A10_2 + A4_5 = A4_5 + A4_10*A10_5 + DEN = 1 -A4_10*A10_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A4_5 = A4_5/MAX(DEN, SMALL) + A4_3 = A4_3/MAX(DEN, SMALL) + A4_6 = A4_6/MAX(DEN, SMALL) + A2_0 = A2_0 + A2_10*A10_0 + A2_4 = A2_4 + A2_10*A10_4 + A2_5 = A2_5 + A2_10*A10_5 + DEN = 1 -A2_10*A10_2 + A2_0 = A2_0/MAX(DEN, SMALL) + A2_4 = A2_4/MAX(DEN, SMALL) + A2_5 = A2_5/MAX(DEN, SMALL) + A2_3 = A2_3/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_6*A6_0 + A4_2 = A4_2 + A4_6*A6_2 + A4_5 = A4_5 + A4_6*A6_5 + DEN = 1 -A4_6*A6_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A4_5 = A4_5/MAX(DEN, SMALL) + A4_3 = A4_3/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_3*A3_0 + A4_2 = A4_2 + A4_3*A3_2 + A4_5 = A4_5 + A4_3*A3_5 + DEN = 1 -A4_3*A3_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A4_5 = A4_5/MAX(DEN, SMALL) + A2_0 = A2_0 + A2_3*A3_0 + A2_4 = A2_4 + A2_3*A3_4 + A2_5 = A2_5 + A2_3*A3_5 + DEN = 1 -A2_3*A3_2 + A2_0 = A2_0/MAX(DEN, SMALL) + A2_4 = A2_4/MAX(DEN, SMALL) + A2_5 = A2_5/MAX(DEN, SMALL) + A5_0 = A5_0 + A5_3*A3_0 + A5_4 = A5_4 + A5_3*A3_4 + A5_2 = A5_2 + A5_3*A3_2 + DEN = 1 -A5_3*A3_5 + A5_0 = A5_0/MAX(DEN, SMALL) + A5_4 = A5_4/MAX(DEN, SMALL) + A5_2 = A5_2/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_5*A5_0 + A4_2 = A4_2 + A4_5*A5_2 + DEN = 1 -A4_5*A5_4 + A4_0 = A4_0/MAX(DEN, SMALL) + A4_2 = A4_2/MAX(DEN, SMALL) + A2_0 = A2_0 + A2_5*A5_0 + A2_4 = A2_4 + A2_5*A5_4 + DEN = 1 -A2_5*A5_2 + A2_0 = A2_0/MAX(DEN, SMALL) + A2_4 = A2_4/MAX(DEN, SMALL) + A4_0 = A4_0 + A4_2*A2_0 + DEN = 1 -A4_2*A2_4 + A4_0 = A4_0/MAX(DEN, SMALL) + XQ(4) = A4_0 + XQ(2) = A2_0 +A2_4*XQ(4) + XQ(5) = A5_0 +A5_4*XQ(4) +A5_2*XQ(2) + XQ(3) = A3_0 +A3_4*XQ(4) +A3_2*XQ(2) +A3_5*XQ(5) + XQ(6) = A6_0 +A6_4*XQ(4) +A6_2*XQ(2) +A6_5*XQ(5) + XQ(10) = A10_0 +A10_4*XQ(4) +A10_2*XQ(2) +A10_5*XQ(5) + XQ(7) = A7_0 +A7_4*XQ(4) +A7_6*XQ(6) + XQ(8) = A8_0 +A8_2*XQ(2) +A8_5*XQ(5) + XQ(11) = A11_0 +A11_5*XQ(5) +A11_8*XQ(8) + XQ(9) = A9_0 +A9_4*XQ(4) + XQ(1) = A1_0 +A1_2*XQ(2) +! +! +! --------------------------------------------- +! +! update rates of reactions involving QSS species +! + RF( 6) = RF( 6)*XQ( 2) + RF( 7) = RF( 7)*XQ( 3) + RB( 7) = RB( 7)*XQ( 5) + RF( 8) = RF( 8)*XQ( 4) + RF( 9) = RF( 9)*XQ( 4) + RB( 9) = RB( 9)*XQ( 5) + RF( 13) = RF( 13)*XQ( 5) + RF( 14) = RF( 14)*XQ( 5) + RB( 15) = RB( 15)*XQ( 5) + RF( 16) = RF( 16)*XQ( 6) + RF( 17) = RF( 17)*XQ( 7) + RB( 18) = RB( 18)*XQ( 6) + RB( 19) = RB( 19)*XQ( 7) + RB( 20) = RB( 20)*XQ(10) + RB( 21) = RB( 21)*XQ( 3) + RF( 22) = RF( 22)*XQ( 8) + RB( 23) = RB( 23)*XQ( 5) + RF( 24) = RF( 24)*XQ( 9) + RB( 25) = RB( 25)*XQ( 9) + RF( 26) = RF( 26)*XQ(10) + RB( 27) = RB( 27)*XQ(10) + RB( 28) = RB( 28)*XQ( 3) + RB( 30) = RB( 30)*XQ( 5) + RF( 46) = RF( 46)*XQ( 2) + RB( 46) = RB( 46)*XQ( 1) + RF( 47) = RF( 47)*XQ( 3) + RF( 48) = RF( 48)*XQ( 4) + RB( 48) = RB( 48)*XQ( 2) + RF( 51) = RF( 51)*XQ( 5) + RF( 52) = RF( 52)*XQ( 5) + RB( 53) = RB( 53)*XQ( 6) + RB( 54) = RB( 54)*XQ( 7) + RB( 55) = RB( 55)*XQ( 5) + RF( 56) = RF( 56)*XQ( 6) + RF( 57) = RF( 57)*XQ( 6) + RF( 58) = RF( 58)*XQ( 6) + RF( 59) = RF( 59)*XQ( 6) + RB( 59) = RB( 59)*XQ( 4) + RF( 60) = RF( 60)*XQ( 7) + RF( 61) = RF( 61)*XQ( 7) + RB( 61) = RB( 61)*XQ( 6) + RF( 62) = RF( 62)*XQ( 7) + RF( 63) = RF( 63)*XQ( 7) + RF( 64) = RF( 64)*XQ( 7) + RB( 64) = RB( 64)*XQ( 4) + RB( 65) = RB( 65)*XQ( 6) + RB( 66) = RB( 66)*XQ( 7) + RB( 67) = RB( 67)*XQ( 8) + RF( 68) = RF( 68)*XQ( 8) + RF( 69) = RF( 69)*XQ( 8) + RB( 70) = RB( 70)*XQ( 9) + RB( 71) = RB( 71)*XQ( 8) + RF( 72) = RF( 72)*XQ( 9) + RF( 73) = RF( 73)*XQ( 9) + RB( 74) = RB( 74)*XQ( 9) + RF( 75) = RF( 75)*XQ(10) + RB( 75) = RB( 75)*XQ( 4) + RB( 76) = RB( 76)*XQ(10) + RF( 85) = RF( 85)*XQ( 1) + RF( 86) = RF( 86)*XQ( 2) + RB( 86) = RB( 86)*XQ( 5) + RF( 87) = RF( 87)*XQ( 3) + RF( 88) = RF( 88)*XQ( 3) + RB( 88) = RB( 88)*XQ( 2) + RF( 89) = RF( 89)*XQ( 4) + RB( 91) = RB( 91)*XQ( 3) + RB( 92) = RB( 92)*XQ( 4) + RF( 95) = RF( 95)*XQ( 5) + RB( 96) = RB( 96)*XQ( 5) + RF( 97) = RF( 97)*XQ( 6) + RF( 98) = RF( 98)*XQ( 7) + RB( 99) = RB( 99)*XQ( 6) + RB(100) = RB(100)*XQ( 7) + RF(103) = RF(103)*XQ( 8) + RB(104) = RB(104)*XQ( 8) + RB(105) = RB(105)*XQ( 9) + RB(106) = RB(106)*XQ(10) + RF(109) = RF(109)*XQ( 3) + RB(111) = RB(111)*XQ( 7) + RB(113) = RB(113)*XQ( 5) + RF(114) = RF(114)*XQ( 1) + RF(115) = RF(115)*XQ( 1) + RF(116) = RF(116)*XQ( 2) + RB(116) = RB(116)*XQ( 5) + RF(117) = RF(117)*XQ( 2) + RB(117) = RB(117)*XQ( 3) + RF(118) = RF(118)*XQ( 2) + RF(120) = RF(120)*XQ( 2) + RB(120) = RB(120)*XQ( 8) + RF(121) = RF(121)*XQ( 2) + RF(122) = RF(122)*XQ( 2) + RB(122) = RB(122)*XQ(10) + RF(123) = RF(123)*XQ( 2) + RB(123) = RB(123)*XQ( 5) + RF(124) = RF(124)*XQ( 2) + RF(126) = RF(126)*XQ( 3) + RF(127) = RF(127)*XQ( 3) + RF(129) = RF(129)*XQ( 3) + RF(130) = RF(130)*XQ( 3) + RF(131) = RF(131)*XQ( 3) + RB(132) = RB(132)*XQ( 8) + RF(133) = RF(133)*XQ( 4) + RB(133) = RB(133)*XQ( 3) + RF(134) = RF(134)*XQ( 4) + RF(135) = RF(135)*XQ( 4) + RF(136) = RF(136)*XQ( 4) + RF(137) = RF(137)*XQ( 4) + RF(138) = RF(138)*XQ( 4) + RB(138) = RB(138)*XQ( 3) + RF(139) = RF(139)*XQ( 4) + RF(140) = RF(140)*XQ( 4) + RF(141) = RF(141)*XQ( 4) + RB(141) = RB(141)*XQ( 3) + RF(142) = RF(142)*XQ( 4) + RB(142) = RB(142)*XQ( 3) + RF(143) = RF(143)*XQ( 4) + RF(144) = RF(144)*XQ( 4) + RB(144) = RB(144)*XQ( 9) + RB(145) = RB(145)*XQ( 7) + RB(149) = RB(149)*XQ( 9) + RF(150) = RF(150)*XQ( 5) + RB(151) = RB(151)*XQ( 5) + RB(152) = RB(152)*XQ( 6) + RB(153) = RB(153)*XQ( 7) + RB(154) = RB(154)*XQ( 8) + RB(155) = RB(155)*XQ( 9) + RF(156) = RF(156)*XQ( 5) + RF(157) = RF(157)*XQ( 5) + RF(158) = RF(158)*XQ( 5) + RF(159) = RF(159)*XQ( 6) + RF(160) = RF(160)*XQ( 7) + RF(161) = RF(161)*XQ( 8) + RB(161) = RB(161)*XQ( 5) + RF(163) = RF(163)*XQ( 9) + RF(164) = RF(164)*XQ(10) + RB(167) = RB(167)*XQ(11) + RF(170) = RF(170)*XQ( 2) + RF(171) = RF(171)*XQ( 3) + RF(172) = RF(172)*XQ( 3) + RF(174) = RF(174)*XQ( 4) + RF(175) = RF(175)*XQ( 8) + RB(175) = RB(175)*XQ(11) + RF(176) = RF(176)*XQ( 8) + RB(177) = RB(177)*XQ(11) + RF(178) = RF(178)*XQ(11) + RB(178) = RB(178)*XQ( 3) + RF(179) = RF(179)*XQ(11) + RF(180) = RF(180)*XQ(11) + RF(181) = RF(181)*XQ(11) + RB(181) = RB(181)*XQ( 5) + RF(182) = RF(182)*XQ(11) + RF(183) = RF(183)*XQ(11) + RF(184) = RF(184)*XQ(11) +! +! END +! ! +! ----------------------------------------------------------------------! +! ! +! +! ! ompute WDOT +! +! SUBROUTINE RDOT(RF, RB, WDOT) +! IMPLICIT DOUBLE PRECISION (A-H, O-Z), INTEGER (I-N) +! DIMENSION RF(*), RB(*), WDOT(*), ROP(184) +! + DO I = 1, 184 + ROP(I) = RF(I) - RB(I) + ENDDO +! +! H2 + WDOT( 1) = -ROP( 3) +ROP( 8) +ROP( 36) +ROP( 37) & + +ROP( 38) +ROP( 39) +ROP( 42) +ROP( 44) & + +ROP( 46) +ROP( 48) +ROP( 50) +ROP( 52) & + +ROP( 55) +ROP( 57) +ROP( 62) +ROP( 65) & + +ROP( 66) +ROP( 69) +ROP( 71) +ROP( 73) & + +ROP( 74) +ROP( 76) -ROP( 78) -ROP( 79) & + -ROP(117) -ROP(127) +ROP(128) -ROP(136) & + +ROP(162) +ROP(166) +ROP(169) -ROP(170) & + +ROP(174) +ROP(182) +! H + WDOT( 2) = -ROP( 2) +ROP( 3) +ROP( 6) -ROP( 7) & + -2*ROP( 8) -ROP( 9) +ROP( 10) +ROP( 14) & + -ROP( 17) +ROP( 19) +ROP( 20) +2*ROP( 21) & + -ROP( 24) +ROP( 25) +ROP( 26) +2*ROP( 28) & + -ROP( 31) -ROP( 32) -ROP( 33) -ROP( 34) & + -ROP( 35) -2*ROP( 36) -2*ROP( 37) -2*ROP( 38) & + -2*ROP( 39) -ROP( 40) -ROP( 41) -ROP( 42) & + -ROP( 43) -ROP( 44) -ROP( 45) -ROP( 46) & + -3*ROP( 47) -3*ROP( 48) -ROP( 49) -ROP( 50) & + -ROP( 51) -ROP( 52) -ROP( 53) -ROP( 55) & + -ROP( 56) -ROP( 57) -ROP( 58) +ROP( 59) & + -2*ROP( 60) -ROP( 61) -2*ROP( 62) -2*ROP( 63) & + -ROP( 65) -2*ROP( 68) -2*ROP( 69) -2*ROP( 72) & + -2*ROP( 73) +ROP( 75) -ROP( 76) -ROP( 77) & + +ROP( 79) +ROP( 85) +ROP( 86) -ROP( 87) & + -2*ROP( 88) -ROP( 89) +2*ROP( 91) +2*ROP( 92) & + +ROP( 94) -ROP( 98) +ROP(100) +ROP(101) & + -ROP(103) +ROP(104) +ROP(105) -2*ROP(109) & + +ROP(111) +ROP(115) +3*ROP(117) +ROP(118) & + -ROP(119) +2*ROP(120) +ROP(121) +ROP(124) & + -ROP(126) -ROP(127) -4*ROP(128) -ROP(129) & + -2*ROP(130) -2*ROP(131) -ROP(132) -ROP(134) & + -2*ROP(135) -ROP(136) -2*ROP(137) -ROP(139) & + -2*ROP(140) -2*ROP(143) -ROP(144) +ROP(145) & + +2*ROP(149) +ROP(153) +ROP(154) +ROP(155) & + +ROP(156) +ROP(157) -ROP(160) -ROP(161) & + -ROP(163) +ROP(166) +2*ROP(167) -2*ROP(172) & + -2*ROP(173) -2*ROP(174) -ROP(176) +2*ROP(178) & + -ROP(179) -ROP(180) -2*ROP(181) -2*ROP(182) & + -ROP(183) -ROP(184) +! O + WDOT( 3) = -2*ROP( 1) -ROP( 2) -ROP( 3) -ROP( 4) & + -ROP( 5) -2*ROP( 6) -ROP( 7) -ROP( 8) & + -ROP( 9) -ROP( 10) -ROP( 11) -ROP( 12) & + -ROP( 13) -ROP( 14) -ROP( 15) -ROP( 16) & + -ROP( 17) -ROP( 18) -ROP( 19) -ROP( 20) & + -ROP( 21) -2*ROP( 22) -ROP( 23) -ROP( 24) & + -ROP( 25) -ROP( 26) -ROP( 27) -ROP( 28) & + +ROP( 29) +ROP( 35) +ROP( 41) +ROP( 48) & + +ROP( 67) -ROP( 68) -ROP( 69) +ROP( 71) & + +ROP( 81) -ROP( 85) -ROP( 86) +ROP( 88) & + -ROP(103) +ROP(104) -ROP(115) -ROP(117) & + -ROP(118) -ROP(119) -ROP(121) -ROP(122) & + -ROP(123) -ROP(124) -ROP(125) +ROP(132) & + +ROP(145) +ROP(154) -ROP(161) -ROP(166) & + -ROP(167) -ROP(170) +ROP(172) -ROP(176) & + -ROP(178) +! O2 + WDOT( 4) = +ROP( 1) +ROP( 4) +2*ROP( 6) +ROP( 8) & + +ROP( 13) +ROP( 14) -ROP( 15) +ROP( 16) & + -ROP( 18) -ROP( 20) -ROP( 21) +ROP( 22) & + -ROP( 23) +ROP( 26) -ROP( 27) -ROP( 28) & + -ROP( 29) -2*ROP( 30) -ROP( 31) -ROP( 32) & + -ROP( 33) -ROP( 34) -ROP( 35) +ROP( 42) & + +ROP( 46) +ROP( 47) -ROP( 48) +ROP( 51) & + +ROP( 52) -ROP( 53) -ROP( 55) +ROP( 56) & + +ROP( 57) +ROP( 58) -ROP( 61) -ROP( 64) & + -ROP( 65) -ROP( 67) +ROP( 68) +ROP( 69) & + -ROP( 71) -ROP( 76) +ROP( 82) +ROP( 85) & + +ROP( 86) +ROP( 87) -ROP( 88) +ROP( 89) & + -ROP( 91) -ROP( 92) +ROP( 95) -ROP( 96) & + +ROP( 97) -ROP( 99) +ROP(103) -ROP(104) & + -ROP(106) +ROP(107) +ROP(108) +ROP(109) & + +ROP(110) -ROP(113) +ROP(115) +ROP(117) & + +2*ROP(118) +3*ROP(119) +ROP(120) +2*ROP(121) & + +ROP(122) +ROP(123) +2*ROP(124) +3*ROP(125) & + +ROP(127) +2*ROP(128) +ROP(129) +ROP(130) & + +ROP(131) +ROP(132) +ROP(136) +ROP(137) & + +ROP(139) +ROP(140) +ROP(143) +ROP(144) & + -ROP(145) -ROP(146) +ROP(150) -ROP(151) & + -ROP(152) -ROP(154) +ROP(156) +ROP(157) & + -ROP(160) -ROP(161) -ROP(163) +2*ROP(165) & + +ROP(168) +2*ROP(170) +2*ROP(173) +ROP(174) & + -ROP(178) -ROP(179) -3*ROP(180) -ROP(181) & + -2*ROP(184) +! OH + WDOT( 5) = +ROP( 2) +ROP( 3) +ROP( 4) +ROP( 5) & + +ROP( 11) +ROP( 13) +ROP( 15) +ROP( 16) & + +ROP( 17) +ROP( 18) +ROP( 19) +ROP( 20) & + +ROP( 25) -ROP( 26) +2*ROP( 27) +ROP( 35) & + -ROP( 40) +2*ROP( 43) +ROP( 45) +ROP( 58) & + +ROP( 63) -ROP( 75) +ROP( 76) -ROP( 79) & + -2*ROP( 80) -2*ROP( 81) -ROP( 82) -ROP( 83) & + -ROP( 84) -ROP( 85) -ROP( 86) -ROP( 87) & + -ROP( 88) -ROP( 89) -ROP( 90) -ROP( 91) & + -ROP( 92) -ROP( 93) -ROP( 94) -ROP( 95) & + -ROP( 96) -ROP( 97) -ROP( 98) -ROP( 99) & + -ROP(100) -ROP(101) -ROP(102) -ROP(103) & + -ROP(104) -ROP(105) +ROP(109) +ROP(111) & + +ROP(112) +ROP(122) -ROP(125) +ROP(126) & + -ROP(132) +ROP(134) +ROP(146) -2*ROP(165) & + -ROP(168) -ROP(169) +ROP(179) +ROP(180) & + -ROP(183) -ROP(184) +! H2O + WDOT( 6) = +ROP( 40) +ROP( 41) +ROP( 45) +ROP( 59) & + +ROP( 64) +ROP( 79) +ROP( 81) +ROP( 82) & + +ROP( 83) +ROP( 84) +ROP( 88) +ROP( 91) & + +ROP( 92) +ROP( 93) +ROP( 95) +ROP( 96) & + +ROP( 97) +ROP( 98) +ROP( 99) +ROP(100) & + +ROP(103) +ROP(104) +ROP(105) +ROP(106) & + -ROP(118) +ROP(135) -ROP(137) +ROP(168) & + -ROP(174) +ROP(183) +! HO2 + WDOT( 7) = -ROP( 4) +ROP( 5) -ROP( 6) +ROP( 7) & + +ROP( 9) -ROP( 13) -ROP( 14) +ROP( 15) & + -ROP( 16) +ROP( 18) +ROP( 23) +2*ROP( 30) & + +ROP( 31) +ROP( 32) +ROP( 33) +ROP( 34) & + -ROP( 41) -ROP( 42) -ROP( 43) +ROP( 44) & + -ROP( 46) +ROP( 48) -ROP( 51) -ROP( 52) & + +ROP( 53) +ROP( 55) -ROP( 56) -ROP( 57) & + -ROP( 58) -ROP( 59) +ROP( 61) +ROP( 65) & + -ROP( 82) +ROP( 83) +ROP( 84) +ROP( 88) & + -ROP( 95) +ROP( 96) -ROP( 97) +ROP( 99) & + -2*ROP(107) -2*ROP(108) -ROP(109) -ROP(110) & + -ROP(111) -ROP(112) -ROP(117) -ROP(118) & + -ROP(119) -ROP(120) -ROP(121) -ROP(122) & + -ROP(124) -ROP(125) +ROP(147) -ROP(150) & + +ROP(151) +ROP(152) -ROP(156) -ROP(157) & + +ROP(160) +ROP(161) +ROP(163) -ROP(168) & + -ROP(170) +ROP(176) +2*ROP(180) +ROP(181) & + +2*ROP(184) +! H2O2 + WDOT( 8) = -ROP( 5) -ROP( 44) -ROP( 45) +ROP( 80) & + -ROP( 83) -ROP( 84) +ROP(107) +ROP(108) & + +ROP(113) -ROP(147) +! CH3 + WDOT( 9) = -ROP( 10) +ROP( 11) +ROP( 23) +ROP( 24) & + +ROP( 47) -ROP( 49) +ROP( 50) +ROP( 58) & + +ROP( 63) +ROP( 77) -ROP( 90) -ROP( 91) & + -ROP( 92) +ROP( 93) +ROP(102) -ROP(110) & + -ROP(111) -ROP(115) -ROP(120) +ROP(127) & + -ROP(129) +2*ROP(130) +ROP(136) -ROP(139) & + +2*ROP(140) +ROP(144) -ROP(145) -ROP(146) & + -ROP(147) -2*ROP(148) -2*ROP(149) -ROP(150) & + -ROP(151) -ROP(152) -ROP(153) -ROP(154) & + -ROP(155) -ROP(166) -ROP(169) +ROP(170) & + +ROP(181) +! CH4 + WDOT(10) = -ROP( 11) +ROP( 49) -ROP( 50) -ROP( 93) & + +ROP(110) -ROP(121) -ROP(130) -ROP(140) & + +ROP(147) +ROP(150) +ROP(151) +ROP(152) & + +ROP(153) +ROP(154) +ROP(155) +! CO + WDOT(11) = +ROP( 7) +ROP( 8) +ROP( 9) -ROP( 12) & + -ROP( 14) +ROP( 15) +2*ROP( 20) +ROP( 21) & + +ROP( 23) +2*ROP( 27) -ROP( 29) +ROP( 30) & + +ROP( 48) -ROP( 51) +ROP( 55) -ROP( 75) & + +2*ROP( 76) +ROP( 77) -ROP( 78) +ROP( 88) & + -ROP( 94) +ROP( 96) +ROP(102) +2*ROP(106) & + -ROP(112) +ROP(113) -ROP(115) -ROP(117) & + -ROP(118) -ROP(119) -ROP(120) -ROP(121) & + +ROP(123) -ROP(124) -2*ROP(125) +ROP(126) & + -ROP(131) -ROP(132) +ROP(134) +ROP(135) & + +ROP(143) +ROP(151) +ROP(161) -2*ROP(165) & + +ROP(166) -ROP(170) +ROP(179) +2*ROP(180) & + +ROP(181) +ROP(184) +! CO2 + WDOT(12) = -ROP( 7) -ROP( 8) -ROP( 9) +ROP( 12) & + +ROP( 14) +ROP( 21) +2*ROP( 28) +ROP( 29) & + -ROP( 47) -ROP( 48) +ROP( 59) +ROP( 64) & + +ROP( 75) -ROP( 87) -ROP( 88) -ROP( 89) & + +ROP( 91) +ROP( 92) +ROP( 94) -ROP(109) & + +ROP(112) +ROP(117) -ROP(119) -ROP(123) & + -ROP(126) -ROP(127) -2*ROP(128) -ROP(129) & + -ROP(130) -ROP(131) -ROP(132) -ROP(134) & + -ROP(135) -ROP(136) -ROP(137) -ROP(139) & + -ROP(140) -2*ROP(143) -ROP(144) -ROP(172) & + -2*ROP(173) -ROP(174) +2*ROP(178) +! CH2O + WDOT(13) = +ROP( 10) -ROP( 15) +ROP( 18) +ROP( 19) & + +ROP( 24) -ROP( 30) +ROP( 51) -ROP( 55) & + -ROP( 56) -ROP( 58) -ROP( 59) -ROP( 60) & + -ROP( 63) -ROP( 64) +ROP( 65) +ROP( 66) & + +ROP( 78) +ROP( 87) +ROP( 89) -ROP( 96) & + +ROP( 99) +ROP(100) +ROP(109) +ROP(111) & + -ROP(113) +ROP(118) -ROP(124) +ROP(143) & + +ROP(145) +ROP(146) -ROP(151) +ROP(152) & + +ROP(153) +ROP(161) +ROP(169) +ROP(172) & + +ROP(174) +ROP(179) +ROP(184) +! CH3OH + WDOT(14) = -ROP( 18) -ROP( 19) +ROP( 56) +ROP( 60) & + -ROP( 65) -ROP( 66) +ROP( 90) -ROP( 99) & + -ROP(100) +ROP(137) -ROP(152) -ROP(153) +! C2H2 + WDOT(15) = -ROP( 20) -ROP( 21) -ROP( 67) +ROP( 69) & + -ROP(101) -ROP(102) +ROP(103) +ROP(115) & + +ROP(119) +ROP(125) +ROP(128) +ROP(162) & + +ROP(165) +ROP(173) +ROP(176) +! C2H4 + WDOT(16) = -ROP( 23) -ROP( 24) +ROP( 25) +ROP( 68) & + -ROP( 71) -ROP( 72) +ROP( 74) -ROP(104) & + +ROP(105) +ROP(121) +ROP(129) +ROP(139) & + +ROP(144) +ROP(149) -ROP(154) +ROP(155) & + -ROP(162) -ROP(167) +! C2H6 + WDOT(17) = -ROP( 25) +ROP( 72) -ROP( 74) -ROP(105) & + -ROP(144) +ROP(148) -ROP(155) +! CH2CO + WDOT(18) = -ROP( 27) -ROP( 28) +ROP( 67) -ROP( 68) & + -ROP( 69) +ROP( 71) -ROP( 76) -ROP( 77) & + +ROP(101) -ROP(103) +ROP(104) -ROP(106) & + +ROP(120) +ROP(124) +ROP(131) +ROP(132) & + +ROP(154) -ROP(161) +ROP(167) -ROP(176) & + -ROP(178) -ROP(179) -ROP(180) -ROP(181) & + -ROP(184) +! N2 + WDOT(19) = 0.0 + + ! Correction for unit compatibility in Cantera + WDOT(1:19) = WDOT(1:19)*1D6 + + RETURN + END \ No newline at end of file diff --git a/samples/python/AVBP/mixture_database.dat b/samples/python/AVBP/mixture_database.dat new file mode 100755 index 00000000000..17db30799c2 --- /dev/null +++ b/samples/python/AVBP/mixture_database.dat @@ -0,0 +1,102 @@ +$MIXTURE + +!--------------------------------------------------------------------------------------------------------------------- +! Reactive mixture CH4/AIR. Reduced chemistry with PEA formalism, 2S-BFER scheme. +!--------------------------------------------------------------------------------------------------------------------- + mixture_name = BFER_nopea + validity_info = 300-700K/1-12atm + transport = computed + combustion_chemistry = reduced_pea + species_name = CH4 CO2 CO O2 H2O N2 + species_Schmidt_number = 0.7d0 0.7d0 0.7d0 0.7d0 0.7d0 0.7d0 + viscosity_law = power + mu_ref = 1.8405d-5 + T_ref = 300.d0 + viscosity_law_coeff = 0.6759d0 + prandtl_number = 0.7d0 + atom_for_z_calculation = C + fuel_tank_composition = 1.d0 0.d0 0.d0 0.d0 0.d0 0.d0 + oxydizer_tank_composition = 0.d0 0.d0 0.d0 0.233d0 0.d0 0.767d0 + + ! 2S-BFER Reaction #1 : CH4 + 1.5 O2 => CO + 2 H2O + !----------------------------------------- + reac_name = CH4-AIR-2S-BFER-1 + reac_species_number = 4 + reac_species_name = CH4 O2 CO H2O + reac_stoich_coeff = -1.d0 -1.5d0 1.d0 2.d0 + reac_Arrh_fwd_coeff = 0.5d0 0.65d0 0.d0 0.d0 + reac_Arrh_bwd_coeff = 0.d0 0.d0 0.d0 0.d0 + reac_preexp = 4.9d9 + reac_act_energ = 35500.0d0 + reac_temp_exp = 0.d0 + reac_third_body_number = 0 + reac_third_body_name = no + reac_third_body_eff = 0.d0 + + ! 2S-BFER Reaction #2 : CO + 0.5 O2 <=> CO2 + !---------------------------------- + reac_name = CH4-AIR-2S-BFER-2 + reac_species_number = 3 + reac_species_name = CO O2 CO2 + reac_stoich_coeff = -1.d0 -0.5d0 1.d0 + reac_Arrh_fwd_coeff = 1.d0 0.5d0 0.d0 + reac_Arrh_bwd_coeff = 0.d0 0.d0 1.d0 + reac_preexp = -2.0d8 + reac_act_energ = 12000.0d0 + reac_temp_exp = 0.7d0 + reac_third_body_number = 0 + reac_third_body_name = no + reac_third_body_eff = 0.d0 + +!--------------------------------------------------------------------------------------------------------------------- +! Reactive mixture CH4/AIR. Reduced chemistry with PEA formalism, 2S-BFER scheme. +!--------------------------------------------------------------------------------------------------------------------- + mixture_name = BFER_pea + validity_info = 300-700K/1-12atm + transport = computed + combustion_chemistry = reduced_pea + species_name = CH4 CO2 CO O2 H2O N2 + species_Schmidt_number = 0.7d0 0.7d0 0.7d0 0.7d0 0.7d0 0.7d0 + viscosity_law = power + mu_ref = 1.8405d-5 + T_ref = 300.d0 + viscosity_law_coeff = 0.6759d0 + prandtl_number = 0.7d0 + pea_method = pea2 + pea_coeff = 1.10d0 0.09d0 0.37d0 1.13d0 0.03d0 6.7d0 1.6d0 0.22d0 + pea_coeff = 0.95d0 0.08d0 2.5d-5 1.3d0 0.04d0 0.0087d0 1.2d0 0.04d0 1.2d0 0.05d0 + atom_for_z_calculation = C + fuel_tank_composition = 1.d0 0.d0 0.d0 0.d0 0.d0 0.d0 + oxydizer_tank_composition = 0.d0 0.d0 0.d0 0.233d0 0.d0 0.767d0 + + ! 2S-BFER Reaction #1 : CH4 + 1.5 O2 => CO + 2 H2O + !----------------------------------------- + reac_name = CH4-AIR-2S-BFER-1 + reac_species_number = 4 + reac_species_name = CH4 O2 CO H2O + reac_stoich_coeff = -1.d0 -1.5d0 1.d0 2.d0 + reac_Arrh_fwd_coeff = 0.5d0 0.65d0 0.d0 0.d0 + reac_Arrh_bwd_coeff = 0.d0 0.d0 0.d0 0.d0 + reac_preexp = 4.9d9 + reac_act_energ = 35500.0d0 + reac_temp_exp = 0.d0 + reac_third_body_number = 0 + reac_third_body_name = no + reac_third_body_eff = 0.d0 + + ! 2S-BFER Reaction #2 : CO + 0.5 O2 <=> CO2 + !---------------------------------- + reac_name = CH4-AIR-2S-BFER-2 + reac_species_number = 3 + reac_species_name = CO O2 CO2 + reac_stoich_coeff = -1.d0 -0.5d0 1.d0 + reac_Arrh_fwd_coeff = 1.d0 0.5d0 0.d0 + reac_Arrh_bwd_coeff = 0.d0 0.d0 1.d0 + reac_preexp = -2.0d8 + reac_act_energ = 12000.0d0 + reac_temp_exp = 0.7d0 + reac_third_body_number = 0 + reac_third_body_name = no + reac_third_body_eff = 0.d0 + +$end_MIXTURE \ No newline at end of file diff --git a/samples/python/AVBP/postproc.py b/samples/python/AVBP/postproc.py new file mode 100644 index 00000000000..6bea2f1c5e9 --- /dev/null +++ b/samples/python/AVBP/postproc.py @@ -0,0 +1,79 @@ +import cantera as ct +import numpy as np +import matplotlib.pyplot as plt +import os +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +# Parameters of the solver +loglevel = 1 +refine_grid = 'refine' + +# Setting up the gas object (operating conditions) +if ct.__version__ >= '2.5.0': + gas = ct.Solution('gri30.yaml') +else: + gas = ct.Solution('gri30.cti') + +p = 1e5 +tin = 300.0 +phi = 1.0 +fuel = {'CH4':1} +oxidizer = {'O2': 1, 'N2': 3.76} +gas.TP = tin, p +gas.set_equivalence_ratio(phi, fuel, oxidizer) + +# Setting up the flame object +f = ct.FreeFlame(gas, width=0.02) +f.inlet.X = gas.X +f.inlet.T = gas.T + +f.energy_enabled = True +f.set_refine_criteria(ratio=2.0, slope=0.05, curve=0.05, prune=0.01) +f.set_max_jac_age(10, 10) +f.set_time_step(1e-8, [10, 20, 40, 80, 100, 100, 150]) +f.max_time_step_count = 500 + +f.solve(loglevel, refine_grid) + +# Compute thermal flame thickness +z = f.flame.grid +T = f.T +grad = np.gradient(T,z) +thickness = (max(T) -min(T)) / max(grad) +print(' ') +print('laminar thermal flame thickness (delta_T) = ', thickness) +print(' ') + +# Compute HRR flame thickness +# Remark : slight difference when using np.gradient (5% in relative) +# Therefore manual computation of gradient is used +HRR = f.heat_release_rate +gradHRR = (HRR[2:]-HRR[0:-2])/(z[2:]-z[0:-2]) +HRR = HRR[1:-1] +x = z[1:-1] +gradHRR2 = (gradHRR[2:]-gradHRR[0:-2])/(x[2:]-x[0:-2]) +x = x[1:-1] +gradHRR = gradHRR[1:-1] +HRR = HRR[1:-1] +delta_HRR = -2.0*(-2.0*HRR*gradHRR2)**0.5/gradHRR2 +where = np.where(HRR > 1e3) +delta_HRR = np.nanmin(delta_HRR[where]) + +print(' ') +print('laminar HRR flame thickness (delta_HRR) = ', delta_HRR) +print(' ') +print('delta_T / delta_HRR = ', thickness / delta_HRR) +print(' ') + +# Compute schmidt numbers +print('SCHMIDT NUMBERS (in burnt gases):') +f.set_gas_state(f.flame.n_points-1) +list_species = f.gas.species_names +for species in list_species: + print (species,gas.viscosity/gas.mix_diff_coeffs[gas.species_index(species)]/gas.density) +print(' ') + +print('PRANDTL NUMBER (in fresh gases):') +f.set_gas_state(f.flame.n_points-f.flame.n_points) +Pr = gas.cp_mass * gas.viscosity / gas.thermal_conductivity +print('Prandtl = '+str(Pr)) \ No newline at end of file diff --git a/samples/python/AVBP/write_csv.py b/samples/python/AVBP/write_csv.py new file mode 100644 index 00000000000..e41ae5bac68 --- /dev/null +++ b/samples/python/AVBP/write_csv.py @@ -0,0 +1,37 @@ +import cantera as ct +import matplotlib.pyplot as plt +import os +os.chdir(os.path.dirname(os.path.abspath(__file__))) + +# Parameters of the solver +loglevel = 1 +refine_grid = 'refine' + +# Setting up the gas object (operating conditions) +if ct.__version__ >= '2.5.0': + gas = ct.Solution('gri30.yaml') +else: + gas = ct.Solution('gri30.cti') +p = 1e5 +tin = 300.0 +phi = 1.0 +fuel = {'CH4':1} +oxidizer = {'O2': 1, 'N2': 3.76} +gas.TP = tin, p +gas.set_equivalence_ratio(phi, fuel, oxidizer) + +# Setting up the flame object +f = ct.FreeFlame(gas, width=0.02) +f.inlet.X = gas.X +f.inlet.T = gas.T + +f.energy_enabled = True +f.set_refine_criteria(ratio=2.0, slope=0.05, curve=0.05, prune=0.01) +f.set_max_jac_age(10, 10) +f.set_time_step(1e-8, [10, 20, 40, 80, 100, 100, 150]) +f.max_time_step_count = 500 + +f.solve(loglevel, refine_grid) + +# Write AVBP solution for can2av +f.write_AVBP("./RESULTS/AVBP-Solution.csv") \ No newline at end of file diff --git a/samples/python/multiphase/README.rst b/samples/python/multiphase/README.rst new file mode 100644 index 00000000000..b6b2d91eff3 --- /dev/null +++ b/samples/python/multiphase/README.rst @@ -0,0 +1,2 @@ +Multiphase +---------- diff --git a/samples/python/onedim/adiabatic_flame.csv b/samples/python/onedim/adiabatic_flame.csv new file mode 100644 index 00000000000..42bb921593b --- /dev/null +++ b/samples/python/onedim/adiabatic_flame.csv @@ -0,0 +1,141 @@ +grid,velocity,T,D,X_H2,X_H,X_O,X_O2,X_OH,X_H2O,X_HO2,X_H2O2,X_AR,X_N2 +0,0.726900879,300,1.33861236,0.154929577,4.93387039e-16,-4.84126673e-16,0.14084507,3.97637309e-16,1.79757153e-18,-3.87453949e-16,-3.03668592e-17,0.704225352,-1.50725451e-19 +0.006,0.726900879,300,1.33861236,0.154929577,2.76369319e-20,-3.66309982e-16,0.14084507,1.24216063e-18,2.83801921e-16,2.14240411e-16,8.14425203e-18,0.704225352,2.75321532e-19 +0.012,0.726900879,300,1.33861236,0.154929577,-7.72167922e-21,-2.79807643e-16,0.14084507,-3.89166248e-19,1.99606361e-16,-4.12209565e-17,4.05466759e-17,0.704225352,-1.25521169e-18 +0.015,0.726900877,300,1.33861237,0.154929575,-7.65295492e-21,-2.41768768e-16,0.140845071,-3.6302677e-19,5.60985511e-16,-1.65037877e-16,5.62878814e-17,0.704225354,-3.05934442e-18 +0.0165,0.726900859,300,1.3386124,0.154929553,-1.73104995e-21,-1.61862364e-16,0.140845074,-1.70102201e-19,1.37919789e-14,-1.45844071e-16,8.6436998e-17,0.704225372,-1.31092865e-18 +0.018,0.726900604,300,1.33861287,0.154929236,5.71723534e-20,1.83515625e-15,0.140845127,2.73651965e-18,5.96816272e-13,2.24903059e-15,1.09385933e-15,0.704225637,4.61711689e-18 +0.01875,0.726899195,300.000003,1.33861546,0.154927483,6.56300577e-19,2.66197463e-14,0.140845419,3.5979252e-17,1.02957284e-11,4.19164786e-14,1.97983442e-14,0.704227098,-6.63856002e-18 +0.019125,0.72689497,300.000019,1.33862325,0.154922202,4.84847373e-18,1.84040451e-13,0.140846296,2.54922355e-16,9.34101271e-11,4.07732526e-13,2.00858923e-13,0.704231501,2.93992903e-18 +0.0195,0.726876777,300.000168,1.33865675,0.154899225,4.02062955e-17,1.54908575e-12,0.140850115,2.13596075e-15,1.07088363e-09,5.13929217e-12,2.59716717e-12,0.704250659,-1.02556892e-17 +0.019875,0.726799284,300.0015,1.3387995,0.154799245,3.50439007e-16,1.33822278e-11,0.140866731,1.86951059e-14,1.25679058e-08,6.67017472e-11,3.43180725e-11,0.704334012,3.62150919e-17 +0.0200625,0.726668773,300.006143,1.33903996,0.154623601,1.46912071e-15,5.33282014e-11,0.140895912,8.2028074e-14,6.47208727e-08,3.75820351e-10,1.95762101e-10,0.704480421,4.77181436e-18 +0.02025,0.726345784,300.02928,1.33963541,0.154153576,8.6439354e-15,2.45312272e-10,0.140973945,5.72301508e-13,3.9761825e-07,2.55702864e-09,1.34541667e-09,0.704872077,5.98661185e-17 +0.0204375,0.725613017,300.144818,1.34098823,0.152895492,9.12971021e-14,1.16842603e-09,0.141182439,7.92118429e-12,2.52349551e-06,1.79648753e-08,9.53577166e-09,0.705919517,1.57516311e-17 +0.02053125,0.725033512,300.376161,1.34205996,0.151475813,7.26132716e-13,2.95296815e-09,0.141416789,7.09917456e-11,7.87818668e-06,6.06843227e-08,3.24216039e-08,0.707099424,2.9248393e-16 +0.020578125,0.724810244,300.666179,1.34247326,0.150320652,2.80559744e-12,5.12490131e-09,0.141606265,2.80290075e-10,1.59523481e-05,1.30496308e-07,7.00619505e-08,0.708056924,4.97139142e-17 +0.020625,0.724910555,301.248667,1.3422873,0.148683546,1.05156953e-11,9.37767347e-09,0.141872282,1.05442785e-09,3.48580156e-05,3.05734068e-07,1.65042143e-07,0.709408833,-3.29175501e-16 +0.020671875,0.7258931,302.420598,1.34047014,0.146366164,4.01616222e-11,1.77693758e-08,0.142242785,3.95542442e-09,7.9045471e-05,7.45081772e-07,4.03989825e-07,0.711310834,1.93070355e-16 +0.02071875,0.728978563,304.781784,1.33479609,0.14309398,1.5936948e-10,3.46487428e-08,0.142751405,1.48919991e-08,0.000181914729,1.84557593e-06,1.00083228e-06,0.713969804,1.1556209e-15 +0.0207421875,0.732279677,306.860884,1.32877863,0.140958957,3.66852777e-10,5.00965064e-08,0.143070245,3.20610987e-08,0.000284004418,3.01910869e-06,1.62601251e-06,0.715682066,5.11186803e-16 +0.020765625,0.737756037,309.992193,1.31891494,0.138398368,8.74222483e-10,7.43820165e-08,0.143435011,6.92459774e-08,0.000452187342,5.07553326e-06,2.69948052e-06,0.717706514,-9.9987095e-17 +0.0207890625,0.746580807,314.698189,1.30332494,0.135339567,2.26375196e-09,1.13924814e-07,0.143841278,1.52205527e-07,0.000727276467,8.68439697e-06,4.51613649e-06,0.720078409,-1.88280257e-15 +0.0208007812,0.752905991,317.931129,1.29237567,0.133592876,4.11036686e-09,1.44363379e-07,0.144054919,2.35273757e-07,0.000929060612,1.15232336e-05,5.87171464e-06,0.721405366,-1.40424711e-15 +0.0208125,0.760987819,321.961504,1.27865044,0.131686069,7.89068906e-09,1.85890625e-07,0.144269962,3.68110391e-07,0.00119234352,1.54358149e-05,7.65928973e-06,0.722827969,1.77757025e-15 +0.0208242187,0.771247267,326.973709,1.26164136,0.129609918,1.64205001e-08,2.43747002e-07,0.144480234,5.848691e-07,0.00153409156,2.08270751e-05,9.98840055e-06,0.724344096,6.52603803e-16 +0.0208359375,0.784185213,333.187188,1.24082614,0.127356468,3.71442448e-08,3.2635894e-07,0.144677359,9.46942929e-07,0.00197492385,2.82455594e-05,1.29758768e-05,0.725948717,8.43453051e-15 +0.0208417969,0.791886751,336.843829,1.22875846,0.126160128,5.95588352e-08,3.82238397e-07,0.144766879,1.2253217e-06,0.00224206408,3.29907311e-05,1.4759037e-05,0.726781512,9.9682563e-16 +0.0208476562,0.800544068,340.925485,1.21547034,0.124916377,9.58410549e-08,4.51001497e-07,0.144847661,1.59573996e-06,0.00254608645,3.85928565e-05,1.6761972e-05,0.727632379,7.51909579e-15 +0.0208535156,0.81025436,345.474707,1.20090387,0.123624899,1.55177768e-07,5.36252857e-07,0.14491757,2.09166658e-06,0.00289119023,4.51800885e-05,1.89946429e-05,0.728499383,6.65847545e-16 +0.020859375,0.821120315,350.536501,1.18501223,0.122285605,2.52229858e-07,6.42753278e-07,0.144974246,2.75937259e-06,0.00328183182,5.28839723e-05,2.14615545e-05,0.729380318,-2.47697618e-15 +0.0208652344,0.833249274,356.157978,1.16776293,0.120898649,4.10093283e-07,7.76803596e-07,0.145015106,3.66255602e-06,0.00372268683,6.18295181e-05,2.41597493e-05,0.730272719,8.93213967e-15 +0.0208710937,0.846752009,362.387828,1.14914119,0.119464452,6.64489991e-07,9.46742768e-07,0.145037374,4.88819423e-06,0.00421859758,7.2120478e-05,2.70766977e-05,0.73117388,9.99286321e-15 +0.0208769531,0.861741036,369.275601,1.12915313,0.117983705,1.06950658e-06,1.16357967e-06,0.145038104,6.5535444e-06,0.00477450454,8.38195108e-05,3.01883236e-05,0.732080892,-7.78245555e-15 +0.0208828125,0.878328398,376.870744,1.10782886,0.116457381,1.705156e-06,1.44177049e-06,0.145014237,8.81383477e-06,0.00539536084,9.69240737e-05,3.34575081e-05,0.732990679,-2.59737352e-15 +0.0208857422,0.887266736,380.953418,1.09666855,0.115677354,2.15338962e-06,1.61107667e-06,0.144991858,1.02436474e-05,0.00573218985,0.000103971834,3.51327166e-05,0.733445486,-8.39651488e-15 +0.0208886719,0.896658213,385.236402,1.08518217,0.114886326,2.70800714e-06,1.80383392e-06,0.144961845,1.1907787e-05,0.00608765708,0.000111334939,3.68277658e-05,0.73389959,2.52877532e-15 +0.0208916016,0.906516083,389.725571,1.07338137,0.114084506,3.39168225e-06,2.02336143e-06,0.144923783,1.38402968e-05,0.00646237469,0.000118980571,3.85340441e-05,0.734352566,4.17518338e-15 +0.0208945313,0.916852893,394.426499,1.06127978,0.113272121,4.230916e-06,2.27340315e-06,0.144877265,1.60785815e-05,0.00685693207,0.000126867328,4.02422326e-05,0.73480399,7.49101328e-15 +0.0208974609,0.927680335,399.344397,1.04889299,0.112449412,5.25648293e-06,2.5581632e-06,0.144821888,1.8663225e-05,0.00727189107,0.000134945078,4.19424306e-05,0.735253443,3.7684749e-15 +0.0209003906,0.939009101,404.484042,1.03623848,0.111616635,6.50387349e-06,2.88233971e-06,0.144757265,2.16376424e-05,0.00770778116,0.000143155152,4.36243096e-05,0.735700515,8.96376048e-15 +0.0209033203,0.950848722,409.849711,1.02333558,0.110774062,8.01371975e-06,3.25115601e-06,0.144683019,2.50475381e-05,0.0081650947,0.000151430915,4.52772897e-05,0.736144804,7.55462487e-15 +0.02090625,0.963207418,415.445114,1.01020536,0.109921975,9.83218941e-06,3.6703884e-06,0.144598791,2.89401509e-05,0.00864428224,0.000159698739,4.68907346e-05,0.736585919,-2.89134684e-15 +0.0209091797,0.976091948,421.273329,0.996870487,0.10906067,1.20113301e-05,4.14638948e-06,0.144504241,3.33632762e-05,0.00914574808,0.000167879356,4.84541545e-05,0.737023487,4.76120577e-15 +0.0209121094,0.989507473,427.336737,0.983355101,0.10819045,1.46093449e-05,4.68610664e-06,0.144399048,3.83640689e-05,0.00966984619,0.000175889572,4.99574099e-05,0.737457149,1.90858668e-15 +0.0209150391,1.00345742,433.636966,0.969684578,0.107311631,1.76907781e-05,5.29709575e-06,0.144282916,4.39876473e-05,0.0102168766,0.000183644271,5.13909056e-05,0.737886566,7.05761735e-15 +0.0209179687,1.01794339,440.174846,0.955885331,0.106424533,2.13265917e-05,5.98753011e-06,0.144155571,5.02755386e-05,0.0107870821,0.000191058607,5.27457665e-05,0.73831142,3.31367672e-15 +0.0209238281,1.0485069,453.957089,0.928021663,0.104627031,3.04807864e-05,7.63142052e-06,0.143866778,6.49391906e-05,0.0119967638,0.000204622152,5.5196234e-05,0.739146558,3.53640636e-15 +0.0209296875,1.08112992,468.655243,0.900018649,0.102800562,4.28230374e-05,9.69686434e-06,0.143532064,8.25545197e-05,0.0132980203,0.00021602278,5.72618843e-05,0.739960995,4.42805814e-15 +0.0209355469,1.11575434,484.24488,0.872089008,0.10094773,5.91143216e-05,1.2269458e-05,0.143150334,0.000103173698,0.0146905371,0.000224871736,5.89095901e-05,0.74075306,5.28222365e-15 +0.0209414062,1.15229237,500.688487,0.844435974,0.0990711439,8.01776698e-05,1.54451428e-05,0.14272095,0.000126661345,0.0161730874,0.000230960486,6.01219942e-05,0.741521452,4.49911491e-15 +0.0209472656,1.19062962,517.936747,0.817245914,0.0971733865,0.00010686719,1.93316489e-05,0.142243728,0.000152687454,0.0177436057,0.000234272271,6.08954745e-05,0.742265226,4.41489604e-15 +0.020953125,1.23062956,535.930445,0.790682521,0.095256997,0.000140032122,2.40510866e-05,0.141718919,0.000180749476,0.0193992968,0.000234963805,6.12374224e-05,0.742983754,3.46208562e-15 +0.0209589844,1.27213891,554.602788,0.764882977,0.0933244499,0.000180480055,2.97438078e-05,0.141147157,0.000210221157,0.0211367689,0.000233325027,6.11635657e-05,0.74367669,4.31160089e-15 +0.0209648437,1.31499335,573.881872,0.739956235,0.0913781394,0.000228943683,3.65733778e-05,0.1405294,0.00024041928,0.0229521805,0.000229728419,6.06957806e-05,0.74434392,4.26709427e-15 +0.0209707031,1.35902304,593.693075,0.715983209,0.0894203619,0.000286054619,4.47322114e-05,0.139866836,0.000270675884,0.0248413887,0.000224579101,5.98605174e-05,0.744985511,4.72911158e-15 +0.0209765625,1.40405751,613.961199,0.693018506,0.0874533008,0.000352326317,5.44472097e-05,0.139160794,0.000300403748,0.0268000912,0.000218273734,5.86877311e-05,0.745601675,3.30489681e-15 +0.0209824219,1.44992973,634.612257,0.671093212,0.0854790122,0.000428146392,6.59846213e-05,0.138412648,0.000329146268,0.0288239554,0.000211172031,5.72101229e-05,0.746192725,4.13002503e-15 +0.0209882812,1.49647928,655.574859,0.650218266,0.0834994138,0.000513777161,7.96533631e-05,0.13762373,0.000356607582,0.0309087266,0.000203580994,5.54625142e-05,0.746759048,4.59410771e-15 +0.0209941406,1.54355458,676.781228,0.630388022,0.0815162789,0.000609362285,9.58061403e-05,0.136795262,0.000382663272,0.0330503139,0.000195749614,5.34812435e-05,0.747301083,4.58082806e-15 +0.021,1.59101435,698.167849,0.611583716,0.0795312369,0.000714937064,0.00011483789,0.135928309,0.000407355009,0.0352448492,0.000187870878,5.13035445e-05,0.7478193,3.69856386e-15 +0.0210058594,1.63872835,719.675835,0.593776634,0.0775457802,0.000830440129,0.000137181289,0.135023755,0.000430873913,0.0374887186,0.000180088022,4.89669097e-05,0.748314196,4.96646707e-15 +0.0210117187,1.68657762,741.25106,0.57693089,0.0755612796,0.000955724704,0.000163299323,0.134082298,0.000453537386,0.0397785686,0.000172502613,4.65084618e-05,0.748786281,3.27851639e-15 +0.0210175781,1.73445426,762.844101,0.561005761,0.0735790051,0.00109056826,0.000193675127,0.13310447,0.000475763328,0.0421112876,0.000165182843,4.39643592e-05,0.749236083,3.33745954e-15 +0.0210234375,1.78226097,784.41006,0.545957604,0.0716001535,0.00123467991,0.000228799546,0.132090672,0.000498044478,0.044483968,0.000158171105,4.1369253e-05,0.749664143,5.10475627e-15 +0.0210292969,1.82991029,805.908294,0.531741369,0.069625879,0.0013877054,0.000269157002,0.131041219,0.000520924496,0.0468938527,0.000151490444,3.87558071e-05,0.750071016,4.49329804e-15 +0.0210351562,1.87732385,827.302093,0.518311779,0.0676573267,0.00154922992,0.000315210405,0.129956402,0.000544976535,0.0493382709,0.000145149794,3.61542865e-05,0.75045728,3.9713209e-15 +0.0210410156,1.92443145,848.558336,0.5056242,0.0656956665,0.00171877914,0.00036738586,0.128836547,0.000570784436,0.0518145679,0.000139148074,3.35922148e-05,0.750823529,5.51458236e-15 +0.021046875,1.97117018,869.647133,0.493635282,0.0637421258,0.00189581903,0.000426057928,0.127682083,0.0005989264,0.0543200341,0.00013347733,3.10941043e-05,0.751170383,4.10905939e-15 +0.0210527344,2.01748357,890.541486,0.482303392,0.0617980188,0.00207975509,0.000491536157,0.1264936,0.000629960812,0.0568518372,0.000128125085,2.86812568e-05,0.751498486,5.22355526e-15 +0.0210585938,2.06332077,911.216964,0.471588903,0.0598647728,0.00226993166,0.000564053448,0.12527191,0.000664413937,0.0594069608,0.000123076076,2.63716389e-05,0.751808509,3.89001336e-15 +0.0210644531,2.10863581,931.651414,0.461454355,0.057943947,0.00246563172,0.000643756725,0.1240181,0.000702769255,0.0619821534,0.000118313516,2.41798312e-05,0.752101149,4.37735084e-15 +0.0210703125,2.15338696,951.824693,0.451864523,0.0560372469,0.0026660778,0.000730700203,0.122733565,0.00074545827,0.0645738889,0.000113820007,2.2117051e-05,0.752377126,3.88521784e-15 +0.0210761719,2.19753611,971.718447,0.442786425,0.0541465298,0.00287043426,0.000824841414,0.121420045,0.000792852751,0.0671783416,0.000109578193,2.01912461e-05,0.752637186,5.18558131e-15 +0.0210820313,2.24104832,991.315913,0.43418927,0.0522738043,0.00307781131,0.000926039983,0.120079639,0.000845258382,0.0697913758,0.000105571239,1.84072554e-05,0.752882093,3.26254482e-15 +0.0210878906,2.28389048,1010.60135,0.426044556,0.0504212212,0.00328727084,0.00103405907,0.118714811,0.00090290983,0.0724085506,0.000101783222,1.6767028e-05,0.753112627,4.09075787e-15 +0.02109375,2.32601439,1029.55255,0.418328913,0.0485910532,0.00349783468,0.0011485696,0.117328378,0.000965967398,0.0750251469,9.81994887e-05,1.52698885e-05,0.753329581,4.34926549e-15 +0.0210996094,2.36739106,1048.15606,0.411017448,0.0467856727,0.0037084944,0.00126915769,0.115923486,0.0010345159,0.0776362009,9.48059638e-05,1.39128343e-05,0.753533754,3.15817127e-15 +0.0211054687,2.40799409,1066.39977,0.404086952,0.0450075288,0.00391822146,0.00139533284,0.114503586,0.00110856521,0.0802365412,9.15894148e-05,1.26908723e-05,0.753725944,3.33299669e-15 +0.0211113281,2.44779953,1084.27292,0.397515785,0.0432591156,0.00412597903,0.0015265378,0.113072388,0.00118805293,0.0828208429,8.85375275e-05,1.15973684e-05,0.753906948,3.34597305e-15 +0.0211171875,2.48678586,1101.76602,0.391283753,0.0415429372,0.00433073449,0.00166215953,0.111633816,0.00127284901,0.0853836892,8.56388427e-05,1.06244003e-05,0.754077551,5.02984664e-15 +0.0211289062,2.56227009,1135.59814,0.379756533,0.0382136297,0.00472832742,0.00194467712,0.10874631,0.00145775142,0.0904300919,8.02655251e-05,9.01159444e-06,0.754389936,3.95190065e-15 +0.021140625,2.63438641,1167.87466,0.369360664,0.0350406395,0.00510225928,0.00223646187,0.105878094,0.00166049221,0.0953300786,7.53877393e-05,7.75669464e-06,0.75466883,3.67328841e-15 +0.0211523437,2.70306203,1198.5696,0.359976431,0.0320406004,0.00544574856,0.00253182727,0.103061318,0.00187810282,0.100045074,7.09504428e-05,6.78471671e-06,0.754919594,3.91048653e-15 +0.0211640625,2.76826542,1227.67698,0.351497559,0.0292269975,0.00575322655,0.00282518886,0.100326044,0.00210710395,0.104541399,6.69063652e-05,6.02661228e-06,0.755147106,3.59789814e-15 +0.0211757812,2.83000453,1255.20933,0.343829294,0.0266095003,0.00602054812,0.0031113398,0.0976988141,0.00234377356,0.108791685,6.32157731e-05,5.42397412e-06,0.755355699,5.51115284e-15 +0.0211875,2.88832398,1281.19571,0.336886859,0.0241936193,0.00624508643,0.00338565797,0.095201623,0.00258438612,0.112775723,5.9844838e-05,4.93122419e-06,0.755549128,3.96230792e-15 +0.0211992187,2.94330095,1305.67935,0.330594237,0.0219806869,0.00642571407,0.00364424335,0.0928513528,0.00282540799,0.116480745,5.67641243e-05,4.51550171e-06,0.75573057,3.50733383e-15 +0.0212109375,2.99504031,1328.71504,0.324883201,0.0199681197,0.00656268702,0.00388399042,0.0906596287,0.00306364142,0.119901178,5.3947469e-05,4.15485943e-06,0.755902652,4.23324486e-15 +0.0212226562,3.04366909,1350.36634,0.31969252,0.0181498942,0.00665745695,0.00410260455,0.0886330388,0.00329631663,0.12303799,5.13712237e-05,3.83559928e-06,0.756067492,2.96320298e-15 +0.021234375,3.08933093,1370.703,0.314967296,0.0165171592,0.00671244025,0.00429857324,0.0867736209,0.00352113693,0.125897756,4.90137612e-05,3.54954118e-06,0.75622675,3.88056862e-15 +0.0212460938,3.13218063,1389.79846,0.310658387,0.0150589092,0.00673077103,0.00447110368,0.0850795214,0.00373628516,0.128491571,4.68551587e-05,3.29176531e-06,0.756381692,3.27066697e-15 +0.0212578125,3.17237918,1407.72768,0.306721898,0.0137626546,0.00671606036,0.00462003724,0.083545738,0.00394040083,0.130833927,4.4876996e-05,3.05904267e-06,0.756533245,3.73787979e-15 +0.0212695313,3.21008944,1424.56536,0.303118704,0.0126150426,0.00667217835,0.00474575028,0.0821648728,0.00413253698,0.132941646,4.30622331e-05,2.84891026e-06,0.756682062,4.29331384e-15 +0.02128125,3.24547258,1440.38451,0.299814007,0.0116023961,0.00660306932,0.00484904879,0.0809278446,0.00431210404,0.134832915,4.13951383e-05,2.65921667e-06,0.756828567,4.82237299e-15 +0.0212929687,3.27868526,1455.25529,0.296776926,0.0107111563,0.00651260485,0.00493106239,0.0798245268,0.00447880517,0.136526482,3.98612229e-05,2.48794638e-06,0.756973013,4.31379133e-15 +0.0213046875,3.30987753,1469.24437,0.293980101,0.00992822384,0.00640447571,0.00499314041,0.0788442976,0.00463256423,0.138041002,3.8447025e-05,2.33317189e-06,0.757115516,4.46909579e-15 +0.021328125,3.36665899,1494.77948,0.289021886,0.00864895021,0.00614559408,0.00506206643,0.0772197476,0.00490162061,0.140589287,3.59356714e-05,2.06732592e-06,0.757394731,2.73520451e-15 +0.0213515625,3.41729266,1517.62629,0.284739481,0.00766169685,0.00585308389,0.00507226153,0.0759414936,0.00512485768,0.142645876,3.37572232e-05,1.84708208e-06,0.757665126,4.48938333e-15 +0.021375,3.46265575,1538.16469,0.281009207,0.00689603274,0.00554451262,0.00503619961,0.0749379503,0.00530697996,0.144318485,3.1847664e-05,1.66341719e-06,0.757926329,4.31075281e-15 +0.0213984375,3.5034916,1556.71491,0.277733835,0.00629634122,0.00523264522,0.00496516748,0.0741489943,0.00545298823,0.145694355,3.01559656e-05,1.50902664e-06,0.758177844,5.24194688e-15 +0.021421875,3.54042324,1573.54475,0.27483668,0.00581993961,0.00492624927,0.00486878343,0.0735259785,0.00556778519,0.146841987,2.86423071e-05,1.37818857e-06,0.758419257,4.33405132e-15 +0.0214453125,3.57397018,1588.87743,0.272256939,0.00543475137,0.00463098484,0.00475488648,0.0730305739,0.0056559264,0.147814011,2.72758032e-05,1.26644672e-06,0.758650324,4.31789572e-15 +0.02146875,3.60456493,1602.89907,0.269946085,0.00511703541,0.00435021605,0.00462964762,0.0726331456,0.00572149275,0.148650274,2.60325003e-05,1.17031675e-06,0.758870985,4.02896276e-15 +0.0214921875,3.63256785,1615.7652,0.267865114,0.00484940773,0.00408568048,0.00449779036,0.0723110779,0.00576804769,0.149380666,2.48937394e-05,1.08705437e-06,0.759081349,4.48815392e-15 +0.021515625,3.65827984,1627.60616,0.265982443,0.00461922839,0.00383800705,0.00436284729,0.072047256,0.00579864827,0.1500275,2.38448715e-05,1.01448072e-06,0.759281654,3.72745896e-15 +0.0215390625,3.6819528,1638.53149,0.264272323,0.00441734191,0.00360709856,0.004227412,0.0718287822,0.00581588882,0.150607419,2.28742711e-05,9.50852328e-07,0.759472233,4.43265507e-15 +0.0215625,3.7037979,1648.63344,0.262713639,0.0042371225,0.00339240257,0.00409337174,0.0716459256,0.00582196679,0.151132867,2.19726063e-05,8.94754435e-07,0.759653477,3.90728367e-15 +0.021609375,3.74255479,1666.60796,0.259993051,0.00392712104,0.003009001,0.00383361166,0.0713645794,0.00580636232,0.152048853,2.03539469e-05,8.0102253e-07,0.759989317,4.06603605e-15 +0.02165625,3.77633195,1682.31569,0.257667563,0.00366020162,0.002678318,0.00358924994,0.0711515078,0.00576579957,0.152842194,1.8921841e-05,7.253482e-07,0.760293082,4.47678879e-15 +0.021703125,3.80599475,1696.14291,0.255659381,0.00342395022,0.00239260722,0.00336201773,0.0709855281,0.00570749293,0.15354163,1.76445604e-05,6.6318154e-07,0.760568466,3.96030447e-15 +0.02175,3.83221299,1708.39042,0.253910279,0.00321121973,0.00214495378,0.00315197074,0.0708535471,0.00563658364,0.154165818,1.6497994e-05,6.11295236e-07,0.760818798,3.36461988e-15 +0.021796875,3.85551273,1719.29573,0.252375844,0.00301763733,0.00192946176,0.00295834965,0.0707471635,0.00555676871,0.154727576,1.54633991e-05,5.67375939e-07,0.761047012,4.26118694e-15 +0.02184375,3.87631137,1729.04816,0.251021703,0.00284032723,0.00174120562,0.00278004948,0.0706607786,0.00547074562,0.155236166,1.45258774e-05,5.29737126e-07,0.761255672,4.89768774e-15 +0.021890625,3.89494169,1737.79929,0.249821015,0.00267725548,0.00157610069,0.00261587071,0.0705905361,0.00538052313,0.155698545,1.36733607e-05,4.97131397e-07,0.761446998,4.42009949e-15 +0.0219375,3.91166796,1745.66997,0.248752784,0.00252689945,0.00143074879,0.00246467629,0.0705336782,0.00528769314,0.156120031,1.28958945e-05,4.68628485e-07,0.761622909,4.36502615e-15 +0.02203125,3.94003678,1759.05734,0.24696173,0.00226080881,0.00119044938,0.00219858322,0.0704531581,0.00509927545,0.15685228,1.15457174e-05,4.21514617e-07,0.761933478,4.03276066e-15 +0.022125,3.9637212,1770.25974,0.245486061,0.00203094264,0.000999221845,0.00196982808,0.0703997486,0.00491130182,0.157478392,1.03935407e-05,3.83333749e-07,0.762199788,4.43487342e-15 +0.02221875,3.98369882,1779.72836,0.244254989,0.00183138585,0.000845390597,0.0017722897,0.0703658224,0.00472717295,0.158018324,9.40288253e-06,3.51669593e-07,0.76242986,4.54201316e-15 +0.0223125,4.00069335,1787.7984,0.243217419,0.00165743904,0.000720465765,0.0016009431,0.0703461572,0.00454904182,0.15848712,8.54561868e-06,3.24921993e-07,0.762629962,4.40847233e-15 +0.02240625,4.01524502,1794.72105,0.242335974,0.0015052981,0.000618174924,0.00145171216,0.0703371484,0.00437819409,0.158896306,7.799879e-06,3.01995416e-07,0.762805064,4.10014229e-15 +0.0225,4.02775233,1800.68255,0.241583453,0.00137188314,0.000533799259,0.00132132007,0.0703363559,0.00421546026,0.159254592,7.14835874e-06,2.82125982e-07,0.762959159,4.20104592e-15 +0.0226875,4.04746057,1810.11007,0.240407115,0.00115416169,0.000407317439,0.00110996264,0.0703528654,0.00391980178,0.159835526,6.09375487e-06,2.49958433e-07,0.763214021,4.3438303e-15 +0.022875,4.06289805,1817.51045,0.239493659,0.000981255599,0.000316546481,0.000942690475,0.0703795729,0.00365382628,0.16030238,5.25552848e-06,2.24077646e-07,0.763418249,4.16618016e-15 +0.0230625,4.07520422,1823.42047,0.238770443,0.000842385321,0.000250103529,0.000808789611,0.0704111523,0.00341546846,0.160683089,4.58146793e-06,2.02792312e-07,0.763584228,4.15288141e-15 +0.02325,4.08516283,1828.21053,0.23818838,0.000729737485,0.000200607925,0.000700457017,0.0704445326,0.00320223457,0.160997426,4.03381082e-06,1.8499728e-07,0.763720785,4.37695094e-15 +0.0234375,4.09332246,1832.14071,0.237713576,0.000637558293,0.000163164622,0.000611984662,0.0704779634,0.0030115841,0.161259653,3.58497054e-06,1.6993703e-07,0.763834337,4.19718728e-15 +0.023625,4.10006332,1835.39213,0.237322754,0.000561586855,0.000134458809,0.000539182936,0.0705105337,0.00284128264,0.161479956,3.21454314e-06,1.5708404e-07,0.763929627,4.21681553e-15 +0.024,4.10998127,1840.19173,0.236750061,0.000449206049,9.58246531e-05,0.000431745348,0.0705700919,0.00256169832,0.161812534,2.66750475e-06,1.37130409e-07,0.764076095,4.28970787e-15 +0.024375,4.11736526,1843.7696,0.236325478,0.000367422646,7.07240853e-05,0.000353594116,0.0706222651,0.00233156578,0.162065518,2.26937001e-06,1.21618429e-07,0.764186519,4.23296805e-15 +0.02475,4.12300809,1846.50646,0.236002039,0.000306536263,5.3832202e-05,0.000295436981,0.0706673907,0.00214062923,0.162262368,1.97415356e-06,1.09355784e-07,0.764271723,4.16855998e-15 +0.025125,4.12741448,1848.64522,0.235750085,0.000260307091,4.21105426e-05,0.000251280952,0.0707062376,0.00198104868,0.162418425,1.75166644e-06,9.9536839e-08,0.764338739,4.27347986e-15 +0.0255,4.13091069,1850.34332,0.235550557,0.000224632298,3.37641994e-05,0.0002172063,0.0707396493,0.00184696951,0.162543869,1.58180069e-06,9.16046493e-08,0.764392236,4.22562424e-15 +0.02625,4.13572165,1852.68489,0.235276548,0.000176912217,2.36283773e-05,0.000171572705,0.0707908238,0.00164778684,0.162719827,1.35910767e-06,8.04227528e-08,0.76446801,4.30221806e-15 +0.027,4.13912122,1854.34029,0.235083309,0.00014485872,1.75445307e-05,0.000140910534,0.0708301301,0.00149743229,0.162846083,1.21449867e-06,7.25062188e-08,0.764521754,4.27339119e-15 +0.0285,4.14306763,1856.26455,0.234859384,0.000109655632,1.16023262e-05,0.000107129894,0.0708800315,0.00130981633,0.162995306,1.06408336e-06,6.34069352e-08,0.764585331,4.2978567e-15 +0.03,4.14547336,1857.43774,0.234723089,8.96116326e-05,8.60954318e-06,8.78848401e-05,0.0709125201,0.00118869799,0.163087527,9.85282412e-07,5.8084735e-08,0.764624105,4.28423375e-15 +0.033,4.14770968,1858.52895,0.234596533,7.21003372e-05,6.24937824e-06,7.10058819e-05,0.0709444644,0.00107040631,0.163174329,9.23137026e-07,5.34091584e-08,0.764660468,4.27225287e-15 +0.036,4.14879208,1859.05712,0.234535328,6.40728554e-05,5.25536347e-06,6.32560734e-05,0.0709604997,0.00101119454,0.163216693,8.97721472e-07,5.12954079e-08,0.76467808,4.2888648e-15 +0.042,4.14950186,1859.40357,0.234495211,5.89807944e-05,4.65463005e-06,5.83239559e-05,0.0709712664,0.000971522183,0.16324463,8.82915872e-07,4.99758886e-08,0.764689689,4.28024601e-15 +0.048,4.14973751,1859.51859,0.234481894,5.73248814e-05,4.46447717e-06,5.67172647e-05,0.0709748771,0.000958225424,0.163253925,8.78358605e-07,4.95521534e-08,0.764693538,4.27549738e-15 +0.06,4.14973751,1859.51859,0.234481894,5.73248814e-05,4.46447717e-06,5.67172647e-05,0.0709748771,0.000958225424,0.163253925,8.78358605e-07,4.95521534e-08,0.764693538,4.27549738e-15 diff --git a/samples/python/onedim/adiabatic_flame.yaml b/samples/python/onedim/adiabatic_flame.yaml new file mode 100644 index 00000000000..c79edba04e4 --- /dev/null +++ b/samples/python/onedim/adiabatic_flame.yaml @@ -0,0 +1,1338 @@ +multi: + description: solution with multicomponent transport + generator: Cantera SolutionArray + cantera-version: 3.0.0 + git-commit: "'16450ba'" + date: Thu Dec 21 15:41:16 2023 + reactants: + size: 1 + type: inlet + points: 1 + mass-flux: 0.9730385028851246 + temperature: 300.0 + pressure: 1.01325e+05 + mass-fractions: + H2: 9.478316470455491e-03 + O2: 0.1367636951757011 + AR: 0.8537579883538435 + flame: + type: free-flow + size: 140 + grid: [0.0, 6.0e-03, 0.012, 0.015, 0.0165, 0.018, 0.01875, 0.019125, 0.0195, + 0.019875, 0.0200625, 0.02025, 0.0204375, 0.02053125, 0.020578125, + 0.020625, 0.020671875, 0.02071875, 0.0207421875, 0.020765625, + 0.0207890625, 0.02080078125, 0.0208125, 0.02082421875, 0.0208359375, + 0.020841796875, 0.02084765625, 0.020853515625, 0.020859375, + 0.020865234375, 0.02087109375, 0.020876953125, 0.0208828125, + 0.0208857421875, 0.020888671875, 0.0208916015625, 0.02089453125, + 0.0208974609375, 0.020900390625, 0.0209033203125, 0.02090625, + 0.0209091796875, 0.020912109375, 0.0209150390625, 0.02091796875, + 0.020923828125, 0.0209296875, 0.020935546875, 0.02094140625, + 0.020947265625, 0.020953125, 0.020958984375, 0.02096484375, + 0.020970703125, 0.0209765625, 0.020982421875, 0.02098828125, + 0.020994140625, 0.021, 0.021005859375, 0.02101171875, 0.021017578125, + 0.0210234375, 0.021029296875, 0.02103515625, 0.021041015625, 0.021046875, + 0.021052734375, 0.02105859375, 0.021064453125, 0.0210703125, + 0.021076171875, 0.02108203125, 0.021087890625, 0.02109375, + 0.021099609375, 0.02110546875, 0.021111328125, 0.0211171875, + 0.02112890625, 0.021140625, 0.02115234375, 0.0211640625, 0.02117578125, + 0.0211875, 0.02119921875, 0.0212109375, 0.02122265625, 0.021234375, + 0.02124609375, 0.0212578125, 0.02126953125, 0.02128125, 0.02129296875, + 0.0213046875, 0.021328125, 0.0213515625, 0.021375, 0.0213984375, + 0.021421875, 0.0214453125, 0.02146875, 0.0214921875, 0.021515625, + 0.0215390625, 0.0215625, 0.021609375, 0.02165625, 0.021703125, 0.02175, + 0.021796875, 0.02184375, 0.021890625, 0.0219375, 0.02203125, 0.022125, + 0.02221875, 0.0223125, 0.02240625, 0.0225, 0.0226875, 0.022875, + 0.0230625, 0.02325, 0.0234375, 0.023625, 0.024, 0.024375, 0.02475, + 0.025125, 0.0255, 0.02625, 0.027, 0.0285, 0.03, 0.033, 0.036, 0.042, + 0.048, 0.06] + velocity: [0.7269008787945559, 0.7269008787930720, 0.7269008787112815, + 0.7269008770266571, 0.7269008592600827, 0.7269006036570654, + 0.7268991946128804, 0.7268949704404416, 0.7268767768929614, + 0.7267992841151135, 0.7266687729718321, 0.7263457842152885, + 0.7256130171082285, 0.7250335124544154, 0.7248102441337715, + 0.7249105549530261, 0.7258930999351623, 0.7289785627458653, + 0.7322796768446542, 0.7377560371074732, 0.7465808072455928, + 0.7529059909607905, 0.7609878192858879, 0.7712472670471049, + 0.7841852128588762, 0.7918867506688472, 0.8005440681936169, + 0.8102543601910012, 0.8211203148185044, 0.8332492739447327, + 0.8467520090772201, 0.8617410363976248, 0.8783283979025547, + 0.8872667355616708, 0.8966582133439935, 0.9065160834873468, + 0.9168528927004060, 0.9276803352215685, 0.9390091010863856, + 0.9508487219464756, 0.9632074178504283, 0.9760919484271435, + 0.9895074728854737, 1.003457423014743, 1.017943394030659, + 1.048506895396822, 1.081129920794485, 1.115754338833436, + 1.152292368446342, 1.190629617206981, 1.230629556000981, + 1.272138905817710, 1.314993349898307, 1.359023040996685, + 1.404057508159011, 1.449929728738227, 1.496479278082147, + 1.543554579630626, 1.591014347514534, 1.638728348272371, + 1.686577617808375, 1.734454263684540, 1.782260968458292, + 1.829910292040707, 1.877323852896478, 1.924431451035189, + 1.971170180976196, 2.017483570467318, 2.063320770594884, + 2.108635814903236, 2.153386958769892, 2.197536105350436, + 2.241048320407703, 2.283890480939384, 2.326014392614932, + 2.367391063998211, 2.407994090184207, 2.447799525411374, + 2.486785856937829, 2.562270094727629, 2.634386406331712, + 2.703062032133326, 2.768265418317446, 2.830004533548304, + 2.888323980372804, 2.943300953602480, 2.995040306910346, + 3.043669089522669, 3.089330933299570, 3.132180631316951, + 3.172379175912071, 3.210089437548191, 3.245472582409246, + 3.278685258295266, 3.309877534002992, 3.366658987802190, + 3.417292655907701, 3.462655754409049, 3.503491595181458, + 3.540423236296786, 3.573970182133190, 3.604564929261366, + 3.632567846156320, 3.658279843511873, 3.681952797301779, + 3.703797903112392, 3.742554793858922, 3.776331952895399, + 3.805994748872928, 3.832212988271814, 3.8555127272598, 3.876311370500928, + 3.894941693575378, 3.911667958285878, 3.940036780610187, + 3.963721199049410, 3.983698819978768, 4.000693349942559, + 4.015245024961214, 4.027752329366473, 4.047460570501602, + 4.062898052076372, 4.075204222977842, 4.085162833308090, + 4.093322457933588, 4.100063317177269, 4.109981266618289, + 4.117365263717607, 4.123008092644291, 4.127414479101037, + 4.130910692678529, 4.135721653663761, 4.139121223021949, + 4.143067626131690, 4.145473358291351, 4.147709678772011, + 4.148792079011162, 4.149501858371051, 4.149737512053367, + 4.149737512052265] + AR: [0.8537579883538455, 0.8537579883539611, 0.8537579883602691, + 0.8537579884902187, 0.8537579898613099, 0.8537580096075432, + 0.8537581187216403, 0.8537584474682224, 0.8537598775398818, + 0.8537660964593, 0.8537770065591054, 0.8538061110316411, + 0.8538834278608812, 0.8539694067394914, 0.8540379390962165, + 0.8541323815460632, 0.8542601036721028, 0.8544273120263316, + 0.8545257999665705, 0.8546308301166693, 0.8547361079053469, + 0.8547847275281477, 0.8548272970277423, 0.8548607610369553, + 0.8548815126684521, 0.8548855307742718, 0.8548844040414377, + 0.8548775220342735, 0.8548642828851453, 0.8548441115269493, + 0.8548164807715076, 0.8547809346529772, 0.8547371130122753, + 0.8547119681292495, 0.8546846223814317, 0.8546550713428028, + 0.8546233217488516, 0.8545893919080518, 0.8545533119559118, + 0.8545151239182277, 0.8544748815775750, 0.8544326501284784, + 0.8543885056083186, 0.8543425341283456, 0.8542948309003323, + 0.8541946610834358, 0.8540888451766817, 0.8539782598808218, + 0.8538637946930899, 0.8537463161318227, 0.8536266413710782, + 0.8535055232312442, 0.8533836461853216, 0.8532616312807472, + 0.8531400469806197, 0.8530194228901118, 0.8529002638464569, + 0.8527830625948590, 0.8526683099781550, 0.8525565021118336, + 0.8524481443833942, 0.8523437523517561, 0.8522438497555391, + 0.8521489639456744, 0.8520596191327063, 0.8519763278958911, + 0.8518995814481475, 0.8518298391892579, 0.8517675180656767, + 0.8517129822650422, 0.8516665337098430, 0.8516284037772243, + 0.8515987465775777, 0.8515776340256510, 0.8515650525897410, + 0.8515609031992198, 0.8515650032790512, 0.8515770904401542, + 0.8515968280678479, 0.8516578797385699, 0.8517433372948607, + 0.8518489321220238, 0.8519700866385269, 0.8521022020928479, + 0.8522409036996259, 0.8523822275589750, 0.8525227440133427, + 0.8526596204477811, 0.8527906322428916, 0.8529141335518279, + 0.8530290002183737, 0.8531345560832388, 0.8532304918330744, + 0.8533167829394122, 0.8533936104469471, 0.8535198617071792, + 0.8536188113730824, 0.8536951583232214, 0.8537533528151418, + 0.8537972861377836, 0.8538301892843243, 0.8538546507216536, + 0.8538726913376010, 0.8538858591949339, 0.8538953246970351, + 0.8539019693789702, 0.8539088355178119, 0.8539117807171430, + 0.8539124647829957, 0.8539118389184697, 0.8539104491310215, + 0.8539086053652692, 0.8539064740709620, 0.8539041399608056, + 0.8538992114677726, 0.8538944733252816, 0.8538900313811676, + 0.8538859249485367, 0.8538821486061090, 0.8538786618768825, + 0.8538729383667966, 0.8538681470640248, 0.8538641270353227, + 0.8538607372434526, 0.8538578569251759, 0.8538553830098231, + 0.8538520965039647, 0.8538496172433132, 0.8538477096562040, + 0.8538462056104024, 0.8538449759845881, 0.8538436044777858, + 0.8538426196606941, 0.8538417422042688, 0.8538412218686414, + 0.85384085225196, 0.8538406911563524, 0.8538406103118493, + 0.8538405833052579, 0.8538405833051369] + D: [1.338612362800754, 1.338612362803483, 1.338612362954160, + 1.338612366057424, 1.338612398783819, 1.338612869588748, + 1.338615464859212, 1.338623245000324, 1.338656754114037, + 1.338799495713633, 1.339039958807502, 1.339635410660841, + 1.340988229069570, 1.342059961874304, 1.342473255598589, + 1.342287300699832, 1.340470135255656, 1.334796091570793, + 1.328778629619407, 1.318914939219313, 1.303324939767032, + 1.292375667889949, 1.278650435255560, 1.261641362147691, + 1.240826142356304, 1.228758459809327, 1.215470342753, 1.200903869467653, + 1.185012225568673, 1.167762933445231, 1.149141186731827, + 1.129153128245923, 1.107828864279901, 1.096668554876905, + 1.085182166029495, 1.073381366296613, 1.061279783591846, + 1.048892994282276, 1.036238484611664, 1.023335582188751, + 1.010205356437823, 0.9968704870462098, 0.9833551008709054, + 0.9696845782771135, 0.9558853314918543, 0.9280216633477885, + 0.9000186489128853, 0.8720890083351427, 0.8444359735977921, + 0.8172459143877956, 0.7906825211380074, 0.7648829774680734, + 0.7399562349711236, 0.7159832085057902, 0.6930185055293446, + 0.6710932119952833, 0.6502182657406413, 0.6303880217394899, + 0.6115837155801058, 0.5937766341846231, 0.5769308900730550, + 0.5610057612758111, 0.5459576036621007, 0.5317413694355577, + 0.5183117793023387, 0.5056242004814240, 0.4936352816613166, + 0.4823033917002332, 0.4715889030569358, 0.4614543546826164, + 0.4518645231186297, 0.4427864251212231, 0.4341892704778861, + 0.4260445562576985, 0.4183289130243859, 0.4110174483781741, + 0.4040869522725807, 0.3975157846252663, 0.3912837529878636, + 0.3797565331389044, 0.3693606644861550, 0.3599764308154533, + 0.3514975591976350, 0.3438292939657780, 0.3368868586168343, + 0.3305942371092612, 0.3248832014571958, 0.3196925202996304, + 0.3149672955188636, 0.3106583871170224, 0.3067218984576641, + 0.3031187037543798, 0.2998140070025890, 0.2967769263910507, + 0.2939801006390055, 0.2890218864046974, 0.2847394812066252, + 0.2810092069156776, 0.2777338354283356, 0.2748366803394450, + 0.2722569385421205, 0.2699460849833979, 0.2678651141022079, + 0.2659824429535566, 0.2642723228268956, 0.2627136392301386, + 0.2599930510736840, 0.2576675629600024, 0.2556593808761544, + 0.2539102791438783, 0.2523758435555201, 0.2510217034083541, + 0.2498210153405605, 0.2487527836248921, 0.2469617301960527, + 0.2454860614219178, 0.2442549885727171, 0.2432174194967382, + 0.2423359742636894, 0.2415834532860331, 0.2404071149166160, + 0.2394936586641255, 0.2387704434410579, 0.2381883804709653, + 0.2377135759058212, 0.2373227540729387, 0.2367500613862407, + 0.2363254784937211, 0.2360020386203171, 0.2357500850006808, + 0.2355505567631141, 0.2352765476418250, 0.2350833086717595, + 0.2348593842765014, 0.2347230889128448, 0.2345965333618829, + 0.2345353283273375, 0.2344952107589714, 0.2344818943782993, + 0.2344818943783246] + T: [300.0, 300.0000000000070, 300.0000000000108, 300.0000000002687, + 300.0000000065693, 300.0000002132894, 300.0000027826704, + 300.0000193941369, 300.0001681400629, 300.0015003504334, + 300.0061428670680, 300.0292802306796, 300.1448179293330, + 300.3761608262342, 300.6661790607913, 301.2486671297469, + 302.4205979396078, 304.7817841919639, 306.8608835919098, + 309.9921926294803, 314.6981890370801, 317.9311292635529, + 321.9615036173018, 326.9737093143841, 333.1871876084583, + 336.8438285279670, 340.9254847210682, 345.4747067384279, + 350.5365013126785, 356.1579780998554, 362.3878283242927, + 369.2756010523225, 376.8707441696486, 380.9534184256838, + 385.2364020880806, 389.7255708286686, 394.4264994064849, + 399.3443972829146, 404.4840419016, 409.8497108719712, 415.4451143131838, + 421.2733290801222, 427.3367365828986, 433.6369662365457, + 440.1748464591460, 453.9570894414850, 468.6552434338483, + 484.2448799317477, 500.6884871634321, 517.9367471218153, + 535.9304454177487, 554.6027881790613, 573.8818718286051, + 593.6930749919896, 613.9611994373872, 634.6122565317498, + 655.5748592861629, 676.7812280733682, 698.1678485027371, + 719.6758352769334, 741.2510603373420, 762.8441012726894, + 784.4100599398455, 805.9082936496180, 827.3020934185413, + 848.5583364291731, 869.6471333526786, 890.5414857093275, + 911.2169639699630, 931.6514135447680, 951.8246930299555, + 971.7184469363331, 991.3159134483654, 1010.601347813729, + 1029.552553278925, 1048.156058664798, 1066.399770788217, + 1084.272915135195, 1101.766016493295, 1135.598143413298, + 1167.874660713730, 1198.569600988308, 1227.676982349926, + 1255.209329093092, 1281.195707398623, 1305.679352963535, + 1328.715037213822, 1350.366341947176, 1370.703003237505, + 1389.798456495227, 1407.727676213377, 1424.565364418489, + 1440.384507220289, 1455.255293183601, 1469.244373424290, + 1494.779480370433, 1517.626293852714, 1538.164689155057, + 1556.714913150863, 1573.544750116989, 1588.877428610280, + 1602.899073328062, 1615.765204858317, 1627.606161654609, + 1638.531494408310, 1648.633442428082, 1666.607955806545, + 1682.315687304585, 1696.142905648512, 1708.390420173991, + 1719.295731220542, 1729.048159770760, 1737.799286887171, + 1745.669971018631, 1759.057335856597, 1770.259744522981, + 1779.728364474655, 1787.798397425383, 1794.721045004506, + 1800.682551079716, 1810.110071383727, 1817.510450774082, + 1823.420470566981, 1828.210529363771, 1832.140708463875, 1835.3921260375, + 1840.191727789621, 1843.769595966525, 1846.506456330811, + 1848.645218335756, 1850.343316287510, 1852.684886375564, + 1854.340292411425, 1856.264554073758, 1857.437744935444, + 1858.528945102283, 1859.057118965463, 1859.403572899182, + 1859.518587025786, 1859.518587025786] + H2: [9.478316470453024e-03, 9.478316470319940e-03, 9.478316463054172e-03, + 9.478316313373123e-03, 9.478314734096769e-03, 9.478291989504483e-03, + 9.478166304410703e-03, 9.477787608208022e-03, 9.476139982878657e-03, + 9.468971864210605e-03, 9.456383018405302e-03, 9.422720313125115e-03, + 9.332797049231265e-03, 9.231640070573742e-03, 9.149584789489604e-03, + 9.033691381567651e-03, 8.870439470421827e-03, 8.641524857209482e-03, + 8.493202231290806e-03, 8.316419367482362e-03, 8.106824827979052e-03, + 7.987933284667082e-03, 7.858813992706350e-03, 7.719024817536711e-03, + 7.568237189311534e-03, 7.488588387862622e-03, 7.406081739545e-03, + 7.3207302426435e-03, 7.232562773945237e-03, 7.141624986212447e-03, + 7.047979898819448e-03, 6.951708106337269e-03, 6.852907535590327e-03, + 6.802585888079684e-03, 6.751671899591439e-03, 6.700183068455890e-03, + 6.648137785030819e-03, 6.595555255881429e-03, 6.542455420057075e-03, + 6.488858858359116e-03, 6.434786696992216e-03, 6.380260507162505e-03, + 6.325302202117295e-03, 6.269933933956094e-03, 6.214177991770584e-03, + 6.101602876547808e-03, 5.987747164636867e-03, 5.872779070557665e-03, + 5.756861760388205e-03, 5.640152029541396e-03, 5.522799454822606e-03, + 5.404945878765840e-03, 5.286725068908107e-03, 5.168262430657538e-03, + 5.049674720464778e-03, 4.931069778710270e-03, 4.812546355197164e-03, + 4.694194122641138e-03, 4.576093965509401e-03, 4.458318602149678e-03, + 4.340933558905679e-03, 4.223998476006336e-03, 4.107568692600622e-03, + 3.991697035372581e-03, 3.876435721616533e-03, 3.761838282264299e-03, + 3.647961411463419e-03, 3.534866655302205e-03, 3.422621861830412e-03, + 3.311302326982777e-03, 3.200991585364174e-03, 3.091781810871465e-03, + 2.983773808898188e-03, 2.877076578253419e-03, 2.771806224280844e-03, + 2.668084781156576e-03, 2.566038997460979e-03, 2.465798609816e-03, + 2.367494431500893e-03, 2.177014480952728e-03, 1.995713064349913e-03, + 1.824468103087948e-03, 1.663990071533280e-03, 1.514783758524512e-03, + 1.377127819973850e-03, 1.251072274927541e-03, 1.136451797196725e-03, + 1.032911165572619e-03, 9.399385998491197e-04, 8.569027998624831e-04, + 7.830901012315182e-04, 7.177390265840251e-04, 6.600704404301620e-04, + 6.093123638330460e-04, 5.647191883830353e-04, 4.918452632589677e-04, + 4.355975088279342e-04, 3.919664388878761e-04, 3.577859920798732e-04, + 3.306264854116922e-04, 3.086620835857576e-04, 2.905414947352290e-04, + 2.752753019139349e-04, 2.621441042691977e-04, 2.506267919775719e-04, + 2.403461938810447e-04, 2.226650482456303e-04, 2.074487008940789e-04, + 1.939886068299842e-04, 1.818760727132425e-04, 1.708604831420008e-04, + 1.607766481962210e-04, 1.515075194198749e-04, 1.429653611353436e-04, + 1.278577733009928e-04, 1.148171549715812e-04, 1.035036452648419e-04, + 9.3647739892358e-05, 8.503165329048178e-05, 7.747930764913495e-05, + 6.516093523512406e-05, 5.538398074134532e-05, 4.753531254299649e-05, + 4.117113436641645e-05, 3.596499836394212e-05, 3.167536625085087e-05, + 2.533176068871594e-05, 2.071675266059658e-05, 1.728177030292840e-05, + 1.467416923283760e-05, 1.266218645568012e-05, 9.971272431630188e-06, + 8.164063401505058e-06, 6.179539440584981e-06, 5.049719633708048e-06, + 4.062742817794007e-06, 3.610322768843118e-06, 3.323348875367929e-06, + 3.230027964936513e-06, 3.230027964936514e-06] + H: [1.509227152898944e-17, 8.453892115939076e-22, -2.361993122261e-22, + -2.340970964790591e-22, -5.295127977636312e-23, 1.748850871085461e-21, + 2.007560529402576e-20, 1.483092918546306e-19, 1.229833411572551e-18, + 1.071806616976279e-17, 4.492382787843926e-17, 2.641826017248179e-16, + 2.786404334040354e-15, 2.212695137469344e-14, 8.538431435973557e-14, + 3.194554774686471e-13, 1.216986316433906e-12, 4.812205687940982e-12, + 1.105199306797404e-11, 2.626620849755704e-11, 6.779924364187698e-11, + 1.228858053395627e-10, 2.354518523603361e-10, 4.889681660641923e-10, + 1.103659904659858e-09, 1.767640891237876e-09, 2.841127418191953e-09, + 4.594602658282877e-09, 7.459047556227018e-09, 1.211234556151330e-08, + 1.960127897705816e-08, 3.150815431179699e-08, 5.016975452771459e-08, + 6.331670524713827e-08, 7.957246259582e-08, 9.959674936092753e-08, + 1.241599090581682e-07, 1.541556467683141e-07, 1.906136223868187e-07, + 2.347115176880512e-07, 2.877861390921553e-07, 3.513430439431987e-07, + 4.270641309973376e-07, 5.168126179031821e-07, 6.226348075104019e-07, + 8.887839627353830e-07, 1.247140660306032e-06, 1.719530246375894e-06, + 2.329496476044574e-06, 3.101400610662694e-06, 4.059383298034650e-06, + 5.226309555895650e-06, 6.622822025095116e-06, 8.266603426577945e-06, + 1.017190476428685e-05, 1.234934564433487e-05, 1.480595068838744e-05, + 1.754535961208024e-05, 2.056813972476493e-05, 2.387213504361882e-05, + 2.745280032227245e-05, 3.130348565684506e-05, 3.541565398264038e-05, + 3.977902752677983e-05, 4.438166936394655e-05, 4.921001278908058e-05, + 5.424885484937681e-05, 5.948133174052267e-05, 6.488889347305245e-05, + 7.045129373993149e-05, 7.614660860584245e-05, 8.195129477994144e-05, + 8.784029503322464e-05, 9.378719621758862e-05, 9.976445544152629e-05, + 1.057436699160184e-04, 1.116958578224140e-04, 1.175917863517057e-04, + 1.234023215387883e-04, 1.346854167165596e-04, 1.452976550272063e-04, + 1.550469471831233e-04, 1.637751510280740e-04, 1.713641445216091e-04, + 1.777386460375988e-04, 1.828658212516571e-04, 1.867521225514230e-04, + 1.894380637702726e-04, 1.909917318821374e-04, 1.915018034893015e-04, + 1.910707100214729e-04, 1.898084269474345e-04, 1.878271875579679e-04, + 1.852372682191270e-04, 1.821438751169270e-04, 1.747426719872e-04, + 1.663853851794447e-04, 1.575734156582682e-04, 1.486710374163130e-04, + 1.399282976677069e-04, 1.315064234459145e-04, 1.235010286010118e-04, + 1.159612667885577e-04, 1.089046520958088e-04, 1.023280016824173e-04, + 9.621518465172056e-05, 8.530413839601785e-05, 7.589931474004155e-05, + 6.777822574714958e-05, 6.074261538041954e-05, 5.462365626416333e-05, + 4.928044903845310e-05, 4.459624928466695e-05, 4.047401189133670e-05, + 3.366233507196856e-05, 2.824496544125790e-05, 2.388928809732553e-05, + 2.035368683676813e-05, 1.745980942252164e-05, 1.507358606002134e-05, + 1.149803595108994e-05, 8.933250527852384e-06, 7.056598152842816e-06, + 5.659059596532607e-06, 4.602101042479357e-06, 3.791962005061643e-06, + 2.701886122478603e-06, 1.993852850679023e-06, 1.517464428483916e-06, + 1.186938909525167e-06, 9.516186949945872e-07, 6.658810557577747e-07, + 4.943943356171511e-07, 3.269190588977174e-07, 2.425788816407055e-07, + 1.760714135236656e-07, 1.480623757807565e-07, 1.311355644762266e-07, + 1.257777228722884e-07, 1.257777228722881e-07] + O: [-2.350488823231979e-16, -1.778475689473990e-16, -1.358497213417349e-16, + -1.173814244548850e-16, -7.858597536186805e-17, 8.909884249894563e-16, + 1.292415273125382e-14, 8.935295292577082e-14, 7.520729942122546e-13, + 6.496279735125462e-12, 2.588263677149828e-11, 1.189992656325350e-10, + 5.660055304831320e-10, 1.428225052039870e-09, 2.475543437630071e-09, + 4.521679299724987e-09, 8.546315626727546e-09, 1.660576218533883e-08, + 2.395457883719777e-08, 3.547118280169095e-08, 5.415600823249345e-08, + 6.850314019552050e-08, 8.803938016262212e-08, 1.152035322232734e-07, + 1.539116706480419e-07, 1.800588453894382e-07, 2.122019719908846e-07, + 2.520115140867959e-07, 3.016917868065884e-07, 3.641573920907717e-07, + 4.4326176259038e-07, 5.440864801944415e-07, 6.732964069625623e-07, + 7.518725129381818e-07, 8.412824885372053e-07, 9.430523005075562e-07, + 1.058901946466119e-06, 1.190761356081427e-06, 1.340785549736946e-06, + 1.511368506267632e-06, 1.705155407557613e-06, 1.925052845577288e-06, + 2.174236733136103e-06, 2.456158012663302e-06, 2.774546180474554e-06, + 3.531894595555809e-06, 4.482306982947146e-06, 5.664672356538884e-06, + 7.122506638122129e-06, 8.904605439488518e-06, 1.106622253101910e-05, + 1.367082700044378e-05, 1.679236237908672e-05, 2.051780105249583e-05, + 2.494968900117310e-05, 3.020832833274224e-05, 3.643325109492133e-05, + 4.378368932320458e-05, 5.243782985533837e-05, 6.259074492120492e-05, + 7.445099899388784e-05, 8.823603870270331e-05, 1.041665666207582e-04, + 1.224601740838669e-04, 1.433245572819440e-04, 1.669506621522455e-04, + 1.935060975363622e-04, 2.231291257875559e-04, 2.559234907631877e-04, + 2.919542814211948e-04, 3.312449613522125e-04, 3.737756267274471e-04, + 4.194824918724021e-04, 4.682585563283167e-04, 5.199555034229913e-04, + 5.743870530684977e-04, 6.313325945518208e-04, 6.905415898924308e-04, + 7.517384806893849e-04, 8.792104541259470e-04, 1.010857378456486e-03, + 1.144121148301174e-03, 1.276486789199571e-03, 1.405606240598409e-03, + 1.529391960268775e-03, 1.646079553590545e-03, 1.754261409995030e-03, + 1.852895142810710e-03, 1.941291578470509e-03, 2.019087306575791e-03, + 2.086206574028486e-03, 2.142816744028374e-03, 2.189280757287277e-03, + 2.226109090330171e-03, 2.253912612203416e-03, 2.284521489314868e-03, + 2.288570905108660e-03, 2.271720067507019e-03, 2.239088659247631e-03, + 2.195037431124252e-03, 2.143117915153957e-03, 2.086123381784853e-03, + 2.026189534561353e-03, 1.964911443743133e-03, 1.903458296869044e-03, + 1.842679170934016e-03, 1.724996394285146e-03, 1.614402132710711e-03, + 1.511649454239715e-03, 1.416739597682507e-03, 1.329310391716369e-03, + 1.248847560532541e-03, 1.174797348471357e-03, 1.106636681937384e-03, + 9.867531486356838e-04, 8.837710249619972e-04, 7.949005827451642e-04, + 7.178570044406366e-04, 6.507900995638493e-04, 5.922143892800764e-04, + 4.973147312873546e-04, 4.222536858501736e-04, 3.621958233699438e-04, + 3.136244975955552e-04, 2.739699899232626e-04, 2.413476980752327e-04, + 1.932189678602805e-04, 1.582206264771402e-04, 1.321823709264586e-04, + 1.124163302625584e-04, 9.716530817271312e-05, 7.674379409712988e-05, + 6.302422233952503e-05, 4.791132180829289e-05, 3.930240748759830e-05, + 3.175255465468782e-05, 2.828632271909388e-05, 2.608042115227358e-05, + 2.536183694605392e-05, 2.536183694605392e-05] + O2: [0.1367636951757019, 0.1367636951757188, 0.1367636951766769, + 0.1367636951964082, 0.1367636954045859, 0.1367636984026219, + 0.1367637149682451, 0.1367637648717986, 0.1367639818832374, + 0.1367649246980210, 0.1367665744480807, 0.1367709474029936, + 0.1367823702864450, 0.1367945673603183, 0.1368035948723562, + 0.1368145231414644, 0.1368254858937756, 0.1368301239961639, + 0.1368234121778317, 0.1368021391845778, 0.1367545688997742, + 0.1367135396663162, 0.1366549604367965, 0.1365730300641497, + 0.1364603898273319, 0.1363890035807469, 0.1363053534874742, + 0.1362077454828083, 0.1360943329111904, 0.1359631269410095, + 0.1358120157662959, 0.1356387939365384, 0.1354412023136479, + 0.1353323456609950, 0.1352162857659595, 0.1350927277341048, + 0.1349613838536390, 0.1348219757054289, 0.1346742361942461, + 0.1345179114612453, 0.1343527626482111, 0.1341785674903084, + 0.1339951217239397, 0.1338022403115043, 0.1335997584878353, + 0.1331658485386554, 0.1326933636727345, 0.1321818352174045, + 0.1316311443729389, 0.1310415148030837, 0.1304134917791189, + 0.1297479045673398, 0.1290458114015968, 0.1283084300633869, + 0.1275370603409163, 0.1267330063525564, 0.1258975065834323, + 0.1250316778972884, 0.1241364774699364, 0.1232126842222841, + 0.1222608993424316, 0.1212815640480090, 0.1202749918319555, + 0.1192414119583082, 0.1181810208030706, 0.11709403766851, + 0.1159807618682, 0.1148416281423323, 0.1136772577884189, + 0.1124885032775772, 0.1112764845465195, 0.1100426156120651, + 0.1087886206228594, 0.1075165386778920, 0.1062287144096908, + 0.1049277804628715, 0.1036166336473659, 0.1022983996793340, + 0.1009763909015976, 0.09833086559006796, 0.09571158297864520, + 0.09314587546384583, 0.09065933395711705, 0.08827455150392030, + 0.08601022203761750, 0.08388062959091050, 0.08189550990758934, + 0.08006022770606504, 0.07837619142882449, 0.07684142169450636, + 0.07545119602822285, 0.07419870620816446, 0.07307568161282613, + 0.07207294926208326, 0.07118091713804542, 0.06969887694329810, + 0.06852860068696785, 0.06760575778505375, 0.06687636338266660, + 0.06629675650195509, 0.06583254162656460, 0.06545712154372837, + 0.06515019040466907, 0.06489637084481414, 0.06468406268682404, + 0.06450450298227907, 0.06422332418331390, 0.06400621183165665, + 0.06383383052759586, 0.06369413556132082, 0.06357932681445967, + 0.06348415127107905, 0.06340494901505943, 0.06333907300757034, + 0.06324061320160244, 0.06317024157766704, 0.06312041776659119, + 0.06308591692505490, 0.06306307950176755, 0.06304937474410892, + 0.06304269213170133, 0.06304939924761060, 0.06306368163240474, + 0.06308204671008172, 0.06310238841517146, 0.06312349253259947, + 0.06316445746437084, 0.06320183809289780, 0.06323503047897516, + 0.06326413293435243, 0.06328950705484726, 0.06332891244318797, + 0.06335954815879102, 0.06339884899355817, 0.06342465338776732, + 0.06345017963843125, 0.06346304747213885, 0.06347170693684138, + 0.06347461458404531, 0.06347461458404531] + OH: [2.052207068638989e-16, 6.410793872448810e-19, -2.008487903705338e-19, + -1.873581990375177e-19, -8.778978288132647e-20, 1.412317887039819e-18, + 1.8568857014943e-17, 1.315644079879299e-16, 1.102332661913009e-15, + 9.647151572579817e-15, 4.232032257371926e-14, 2.951105738565427e-13, + 4.078912990115311e-12, 3.649897023562433e-11, 1.439221497922704e-10, + 5.404510817271835e-10, 2.022249415607129e-09, 7.586809962081593e-09, + 1.629650126433014e-08, 3.510242701549330e-08, 7.691191308319527e-08, + 1.186757000329394e-07, 1.853243299454976e-07, 2.938461894495477e-07, + 4.747169264636135e-07, 6.135714576170045e-07, 7.981204296010634e-07, + 1.044908100946484e-06, 1.376779551410474e-06, 1.825143651182144e-06, + 2.432829089177289e-06, 3.257488786092067e-06, 4.375321211631772e-06, + 5.081799105633071e-06, 5.903522587502364e-06, 6.857133265595410e-06, + 7.960894950642108e-06, 9.234599177246227e-06, 1.069938879217688e-05, + 1.237748696105357e-05, 1.429182230287407e-05, 1.646554563183276e-05, + 1.892144053131472e-05, 2.168123850268872e-05, 2.476485859117719e-05, + 3.194803070940925e-05, 4.056448860262486e-05, 5.063528835756906e-05, + 6.208974868177075e-05, 7.476253335195340e-05, 8.840495728704829e-05, + 1.027092401918032e-04, 1.173412987628351e-04, 1.319759759164063e-04, + 1.463287723236917e-04, 1.601798095818069e-04, 1.733880875574590e-04, + 1.858962648272514e-04, 1.977276669264825e-04, 2.089778783899364e-04, + 2.198032509543818e-04, 2.304082306339024e-04, 2.410328269474314e-04, + 2.519409975359255e-04, 2.634102921622626e-04, 2.757228157890351e-04, + 2.891574150617168e-04, 3.039829330566602e-04, 3.204523786191616e-04, + 3.387978898127365e-04, 3.592264142554542e-04, 3.819160687908450e-04, + 4.070131681734099e-04, 4.346299267765043e-04, 4.648429042221027e-04, + 4.976925044911250e-04, 5.331832695640289e-04, 5.712851600886361e-04, + 6.119357722145394e-04, 7.005895965116535e-04, 7.978111533537444e-04, + 9.021778897629975e-04, 1.012021347615048e-03, 1.125555087806720e-03, + 1.240989174741549e-03, 1.356623990627636e-03, 1.470919705276463e-03, + 1.582541037453753e-03, 1.690379540789695e-03, 1.793557258545809e-03, + 1.891416215726054e-03, 1.983498021813196e-03, 2.069517055887721e-03, + 2.149329452402552e-03, 2.222898426730525e-03, 2.351483706252010e-03, + 2.457986065246498e-03, 2.544685997334578e-03, 2.614007453308038e-03, + 2.668325568223360e-03, 2.709845535826305e-03, 2.740540851249097e-03, + 2.762132918191122e-03, 2.776096828655604e-03, 2.783682887841166e-03, + 2.785948839902356e-03, 2.777276248163853e-03, 2.756782074617466e-03, + 2.727918229024199e-03, 2.693138475973092e-03, 2.654202729615983e-03, + 2.612391715611242e-03, 2.568656658698072e-03, 2.523749771740148e-03, + 2.432814282246194e-03, 2.342302228546117e-03, 2.253795287222049e-03, + 2.168287412756948e-03, 2.086365077933350e-03, 2.008402703520028e-03, + 1.866903816120432e-03, 1.739751014555881e-03, 1.625896986577827e-03, + 1.524110671017591e-03, 1.433152233496639e-03, 1.351936625221030e-03, + 1.218666713393504e-03, 1.109023162585166e-03, 1.018087265535450e-03, + 9.421061890577054e-04, 8.782808510047972e-04, 7.834855139196311e-04, + 7.119444387585038e-04, 6.226912331370038e-04, 5.650821509812386e-04, + 5.088243426246221e-04, 4.806664949434215e-04, 4.618013751989834e-04, + 4.554786143424252e-04, 4.554786143424252e-04] + H2O: [9.827131951968502e-19, 1.551514857183658e-16, 1.091226700128891e-16, + 3.066847993857935e-16, 7.539927654020604e-15, 3.262729717132693e-13, + 5.628551865938293e-12, 5.1065902502183e-11, 5.854209237652617e-10, + 6.869745427353181e-09, 3.537018850089899e-08, 2.171864590480984e-07, + 1.376459429922076e-06, 4.290477007986930e-06, 8.676630261115607e-06, + 1.892555997830022e-05, 4.280802335942837e-05, 9.817041430231337e-05, + 1.529141321584911e-04, 2.428105494051192e-04, 3.892864425922537e-04, + 4.964081655706858e-04, 6.358611813526746e-04, 8.164305013078759e-04, + 1.048739968961201e-03, 1.189240248563452e-03, 1.348919416818466e-03, + 1.529920487561188e-03, 1.734510511884181e-03, 1.965060080466330e-03, + 2.22401545134e-03, 2.513862670008694e-03, 2.837083300679946e-03, + 3.012242929293336e-03, 3.196957832707469e-03, 3.391531656540372e-03, + 3.596255709621983e-03, 3.811406566184269e-03, 4.037243648047701e-03, + 4.274006829249435e-03, 4.521914111190475e-03, 4.781159421458335e-03, + 5.051910592936205e-03, 5.334307579951362e-03, 5.628460966754797e-03, + 6.251840454933815e-03, 6.921475693359491e-03, 7.637100706976038e-03, + 8.397988882888119e-03, 9.202992951988721e-03, 0.01005060287053166, + 0.01093901577467776, 0.01186621204188855, 0.01283003210833776, + 0.01382824956252422, 0.01485863686797438, 0.01591902082067839, + 0.01700732560916939, 0.01812160219065010, 0.01926004361273820, + 0.02042098681555568, 0.02160290224155803, 0.02280437318563042, + 0.02402406720605115, 0.025260702096655, 0.02651300892550362, + 0.02777969451763193, 0.02905940553868566, 0.03035069605166699, + 0.03165200009750376, 0.03296161050312306, 0.03427766476503034, + 0.03559813849787969, 0.03692084688081447, 0.03824345725264285, + 0.03956350514257767, 0.04087841252211986, 0.04218551468433589, + 0.04348209109835613, 0.04603622860505579, 0.04851765104353339, + 0.05090671561917534, 0.05318615265923192, 0.05534181048835934, + 0.05736312060542087, 0.05924326961514229, 0.06097910387017980, + 0.06257081930359473, 0.06402150173448325, 0.06533658387837066, + 0.06652327771827919, 0.06759002847549508, 0.06854602241957912, + 0.06940076758876609, 0.07016375565531270, 0.07144322719757970, + 0.07247085459178011, 0.07330190608428291, 0.07398122886477777, + 0.07454407888968902, 0.07501756157996553, 0.07542220024786199, + 0.07577338304292007, 0.07608258675920504, 0.076358358512379, + 0.07660707628947824, 0.07703793797473904, 0.07740922375654345, + 0.07773536950052248, 0.07802564645452424, 0.07828635029796610, + 0.07852197938781211, 0.07873587607101250, 0.07893056857389578, + 0.07926799537180047, 0.07955616408486819, 0.07980442631589245, + 0.08001979746833481, 0.08020762389060633, 0.08037191492928426, + 0.08063762129688835, 0.08085106189911866, 0.08102508088537816, + 0.08116874857379763, 0.08128859268216541, 0.08138925489220890, + 0.08154093344087010, 0.08165637967158308, 0.08174626480085262, + 0.08181756648684413, 0.08187491008485416, 0.08195528599065506, + 0.08201301548943288, 0.08208125774595294, 0.08212348365781244, + 0.08216324999220194, 0.08218267323955834, 0.08219548446741391, + 0.08219974846188537, 0.08219974846188537] + HO2: [-3.880782716480313e-16, 2.145856267990014e-16, -4.128737782789990e-17, + -1.653038101065647e-16, -1.460790723201657e-16, 2.252653705289939e-15, + 4.198392296480772e-14, 4.083861788487023e-13, 5.147399775830609e-12, + 6.679955452500009e-11, 3.762980189276359e-10, 2.558943263814080e-09, + 1.795327627147862e-08, 6.055004207342492e-08, 1.300419056479534e-07, + 3.041224934130115e-07, 7.392830536964684e-07, 1.824749723042023e-06, + 2.978241462134744e-06, 4.993320673043499e-06, 8.516635101964362e-06, + 1.128048735519439e-05, 1.508165867321318e-05, 2.030742478652493e-05, + 2.748060414059905e-05, 3.206063702426172e-05, 3.746091780860381e-05, + 4.380239919228739e-05, 5.120864838911776e-05, 5.979623236189324e-05, + 6.966055432433239e-05, 8.085688177974392e-05, 9.337742214646566e-05, + 1.001022324121016e-04, 1.071215458824276e-04, 1.144032642975933e-04, + 1.219071390957411e-04, 1.295846594527026e-04, 1.373792671184862e-04, + 1.452269317258369e-04, 1.530571024002379e-04, 1.607940276588918e-04, + 1.683584083456949e-04, 1.756693201013959e-04, 1.826463138416111e-04, + 1.953687298061202e-04, 2.060012641534464e-04, 2.141826779738223e-04, + 2.197245966810472e-04, 2.226213069622590e-04, 2.230312515881628e-04, + 2.212379380552384e-04, 2.176013102156207e-04, 2.125102303831923e-04, + 2.063436188248708e-04, 1.994437440405293e-04, 1.921016513488439e-04, + 1.845525203583277e-04, 1.769778965549561e-04, 1.695118744189415e-04, + 1.622489447782513e-04, 1.552519792508932e-04, 1.4855948890249e-04, + 1.421917787140445e-04, 1.361559245410605e-04, 1.304496638136221e-04, + 1.250643614628744e-04, 1.199872272619847e-04, 1.152029473036517e-04, + 1.106948681158775e-04, 1.064458461812050e-04, 1.024388544671543e-04, + 9.865742501169233e-05, 9.508600997497746e-05, 9.17103069891e-05, + 8.851660991935552e-05, 8.549205097177394e-05, 8.262466745923778e-05, + 7.990333831380955e-05, 7.486424446029937e-05, 7.029576546597139e-05, + 6.614440404714419e-05, 6.236434029191006e-05, 5.891715163180034e-05, + 5.577023485350394e-05, 5.289534446362442e-05, 5.026750048319820e-05, + 4.786423847162689e-05, 4.566511202557661e-05, 4.365136486550683e-05, + 4.180571621842623e-05, 4.011222507932765e-05, 3.855620675978651e-05, + 3.712415873539426e-05, 3.580355014343327e-05, 3.345747997839068e-05, + 3.142168758088356e-05, 2.963667785550439e-05, 2.805502659789842e-05, + 2.663971206081161e-05, 2.536200117073446e-05, 2.419958918854663e-05, + 2.313508258877478e-05, 2.215480914186196e-05, 2.124790478587954e-05, + 2.040563768296531e-05, 1.889421129969247e-05, 1.755785531029402e-05, + 1.636673282916080e-05, 1.529815490164362e-05, 1.433447919112290e-05, + 1.346168220377951e-05, 1.266840709508326e-05, 1.194529012285454e-05, + 1.069021871048480e-05, 9.619998661189172e-06, 8.700398981630294e-06, + 7.905068046857313e-06, 7.213538325791770e-06, 6.609632621588865e-06, + 5.632588205063073e-06, 4.856470796875211e-06, 4.232652175013807e-06, + 3.726010474228898e-06, 3.310915557622605e-06, 2.968426752466533e-06, + 2.462789822678487e-06, 2.094900687796825e-06, 1.822173261603746e-06, + 1.616669710669365e-06, 1.459790831229087e-06, 1.254148571195052e-06, + 1.120627144597790e-06, 9.817551390049620e-07, 9.090043773857389e-07, + 8.516292581879978e-07, 8.281632067715274e-07, 8.144923480296920e-07, + 8.102841523435322e-07, 8.102841523435322e-07] + H2O2: [-3.134468609077161e-17, 8.406500689778311e-18, 4.185229755407352e-17, + 5.810037693084122e-17, 8.922030670152627e-17, 1.129081674363114e-15, + 2.043581246295249e-14, 2.073249740905624e-13, 2.680706749843377e-12, + 3.541800181392843e-11, 2.019970689463786e-10, 1.387543731071559e-09, + 9.820648394968893e-09, 3.333782388674613e-08, 7.195022184535e-08, + 1.691859805833238e-07, 4.130874977665272e-07, 1.019758905708880e-06, + 1.652988567648486e-06, 2.736861306927886e-06, 4.564153519390459e-06, + 5.923566254834276e-06, 7.712103598805455e-06, 1.003661653997904e-05, + 1.301000967638941e-05, 1.478097358476186e-05, 1.676723354650094e-05, + 1.897783941008373e-05, 2.141633894670215e-05, 2.407881967584221e-05, + 2.695186595416760e-05, 3.001066888484485e-05, 3.321762857291413e-05, + 3.485817143144398e-05, 3.651619696729638e-05, 3.818315155730677e-05, + 3.984980726964653e-05, 4.150638874758684e-05, 4.314272687977591e-05, + 4.474843472414604e-05, 4.631309964450612e-05, 4.782648365831510e-05, + 4.927872292960456e-05, 5.066051725037763e-05, 5.196330006215970e-05, + 5.430960754883269e-05, 5.627309235172929e-05, 5.782295538950075e-05, + 5.894394244882492e-05, 5.963423747855734e-05, 5.990270987254080e-05, + 5.976623333909509e-05, 5.924750904430908e-05, 5.837350632884923e-05, + 5.717441073978317e-05, 5.568288315742594e-05, 5.393345374125235e-05, + 5.196194213813131e-05, 4.980486278350066e-05, 4.749881853255276e-05, + 4.507990484465273e-05, 4.258314845155216e-05, 4.004199803229473e-05, + 3.748787696908356e-05, 3.494980262376988e-05, 3.2454073616615e-05, + 3.002402570157287e-05, 2.767985687718723e-05, 2.543852239194674e-05, + 2.331370003323631e-05, 2.131582480029273e-05, 1.945219040689907e-05, + 1.772711276892066e-05, 1.614214822944765e-05, 1.469635383788707e-05, + 1.338657693961e-05, 1.220778126238652e-05, 1.115338262056034e-05, + 1.021558810702472e-05, 8.661873664147284e-06, 7.453666397255862e-06, + 6.518302755967227e-06, 5.789045456578825e-06, 5.209531994369453e-06, + 4.735821629907111e-06, 4.336250178646351e-06, 3.989673572808819e-06, + 3.682894540948716e-06, 3.408030935475091e-06, 3.160342053988974e-06, + 2.936717944874194e-06, 2.734788770318286e-06, 2.552486763869055e-06, + 2.387876327656116e-06, 2.239107271476937e-06, 1.983541198837481e-06, + 1.771796331344308e-06, 1.595210256922168e-06, 1.446768894685252e-06, + 1.320976174067740e-06, 1.2135500854991e-06, 1.121141283868034e-06, + 1.041110897978280e-06, 9.713631801806041e-07, 9.102207534745429e-07, + 8.563223292781283e-07, 7.662838538384503e-07, 6.936165190788859e-07, + 6.339403429900332e-07, 5.841491317598937e-07, 5.420167164135630e-07, + 5.059203902020335e-07, 4.746601184523957e-07, 4.473410234499697e-07, + 4.022009754612869e-07, 3.656397127631184e-07, 3.353341539058323e-07, + 3.097462260627983e-07, 2.878230966985645e-07, 2.688307090737028e-07, + 2.380979342695366e-07, 2.133868897372218e-07, 1.930741937647814e-07, + 1.760997339880068e-07, 1.617392212600950e-07, 1.494871809572924e-07, + 1.304730251616486e-07, 1.156970619288022e-07, 1.040196311045714e-07, + 9.467134552495056e-08, 8.712066874439901e-08, 7.647841377286504e-08, + 6.894522013922960e-08, 6.028775433657545e-08, 5.522453513276867e-08, + 5.077675578245475e-08, 4.876605440538234e-08, 4.751087416832557e-08, + 4.710780070273972e-08, 4.710780070273972e-08] + N2: [-1.281350839446908e-19, 2.340570045811268e-19, -1.067083587133074e-18, + -2.600817248526069e-18, -1.114449793485311e-18, 3.925113052306830e-18, + -5.643575524036139e-18, 2.499279076914794e-18, -8.718297196914486e-18, + 3.078280399310612e-17, 4.055247888512853e-18, 5.084969981712694e-17, + 1.336064021419387e-17, 2.476978171618925e-16, 4.204799469076606e-17, + -2.779165702139495e-16, 1.625940452307933e-16, 9.697705816022347e-16, + 4.279992611202566e-16, -8.348990345868582e-17, -1.567167382406722e-15, + -1.166753908779180e-15, 1.474105433963584e-15, 5.400803779797696e-16, + 6.964969800180678e-15, 8.222078744871875e-16, 6.194686546592645e-15, + 5.479082672684281e-16, -2.035744652634793e-15, 7.331885836446295e-15, + 8.192199145544360e-15, -6.371926310339694e-15, -2.123864756726568e-15, + -6.861346434105845e-15, 2.065084515148820e-15, 3.407376729722067e-15, + 6.109450384949591e-15, 3.071456703235352e-15, 7.301072907372186e-15, + 6.149329262557741e-15, -2.351984311702414e-15, 3.870542137110845e-15, + 1.550560927595466e-15, 5.730056092736627e-15, 2.688664852196408e-15, + 2.865806063794553e-15, 3.583982474921223e-15, 4.270202656411139e-15, + 3.632873746015733e-15, 3.560807944062242e-15, 2.789232957149365e-15, + 3.469916790275818e-15, 3.430530214567853e-15, 3.798151571642519e-15, + 2.651732416257865e-15, 3.310693175917177e-15, 3.679402247507151e-15, + 3.665601809931817e-15, 2.957160626217010e-15, 3.967757192593689e-15, + 2.617253506250105e-15, 2.662382484319081e-15, 4.069401014324839e-15, + 3.579618161364567e-15, 3.161821374732447e-15, 4.387939412941401e-15, + 3.267764175546057e-15, 4.151922837480184e-15, 3.090461026487041e-15, + 3.476055580965264e-15, 3.083952734505870e-15, 4.114530200901118e-15, + 2.587753309984293e-15, 3.243593581983153e-15, 3.447522177622381e-15, + 2.502689793350695e-15, 2.640569260293908e-15, 2.650250973748513e-15, + 3.983190773843694e-15, 3.128481864864060e-15, 2.907138357725488e-15, + 3.094218798868278e-15, 2.846426598643754e-15, 4.359543077247008e-15, + 3.134052228013010e-15, 2.773976903947016e-15, 3.347895050923635e-15, + 2.343337667941584e-15, 3.068626936944828e-15, 2.586181310967780e-15, + 2.955421643443957e-15, 3.394337887787578e-15, 3.812308078363151e-15, + 3.409944926040685e-15, 3.532362325421534e-15, 2.161421645038439e-15, + 3.546759242407040e-15, 3.404766125393673e-15, 4.139160718502781e-15, + 3.421352394709920e-15, 3.407692114572202e-15, 3.178832125539836e-15, + 3.540225180252628e-15, 2.939463869458420e-15, 3.494741150652526e-15, + 3.079823074305192e-15, 3.203565334991989e-15, 3.525793825183894e-15, + 3.117898367968495e-15, 2.648049793954963e-15, 3.352661990325435e-15, + 3.852390312986440e-15, 3.475849891186029e-15, 3.431739481793658e-15, + 3.169205091515714e-15, 3.483974350815285e-15, 3.567046534304827e-15, + 3.461245870785830e-15, 3.218411977730355e-15, 3.296936928562383e-15, + 3.407831406811098e-15, 3.267568211732833e-15, 3.256414567208938e-15, + 3.431487754693870e-15, 3.290054482371834e-15, 3.305018621784780e-15, + 3.361492097162922e-15, 3.316540823635068e-15, 3.2657055262929e-15, + 3.347601730851772e-15, 3.309877918241936e-15, 3.369533458623461e-15, + 3.346716869129374e-15, 3.365593751402855e-15, 3.354753632057596e-15, + 3.345211507431726e-15, 3.358140820033787e-15, 3.351341190339522e-15, + 3.347606162036604e-15, 3.347606162036604e-15] + points: 140 + tolerances: + transient-reltol: 1.0e-04 + transient-abstol: 1.0e-11 + steady-reltol: 1.0e-04 + steady-abstol: 1.0e-09 + transport-model: multicomponent + phase: + name: ohmech + source: /Users/theot/Documents/INSTALL_DIR/lib/python3.9/site-packages/cantera/data/h2o2.yaml + radiation-enabled: false + energy-enabled: true + Soret-enabled: false + species-enabled: true + refine-criteria: + ratio: 3.0 + slope: 0.06 + curve: 0.12 + prune: 0.0 + grid-min: 1.0e-10 + max-points: 1000 + fixed-point: + location: 0.021 + temperature: 698.1678485027371 + basis: mass + components: [grid, velocity, T, D, H2, H, O, O2, OH, H2O, HO2, H2O2, AR, N2] + products: + size: 0 + type: outlet + points: 1 +mix: + description: solution with mixture-averaged transport + generator: Cantera SolutionArray + cantera-version: 3.0.0 + git-commit: "'16450ba'" + date: Thu Dec 21 15:41:16 2023 + reactants: + type: inlet + size: 1 + points: 1 + mass-flux: 0.9521610000489243 + temperature: 300.0 + pressure: 1.01325e+05 + mass-fractions: + H2: 9.478316470455491e-03 + O2: 0.1367636951757011 + AR: 0.8537579883538435 + flame: + size: 140 + type: free-flow + grid: [0.0, 6.0e-03, 0.012, 0.015, 0.0165, 0.018, 0.01875, 0.019125, 0.0195, + 0.019875, 0.0200625, 0.02025, 0.0204375, 0.02053125, 0.020578125, + 0.020625, 0.020671875, 0.02071875, 0.0207421875, 0.020765625, + 0.0207890625, 0.02080078125, 0.0208125, 0.02082421875, 0.0208359375, + 0.020841796875, 0.02084765625, 0.020853515625, 0.020859375, + 0.020865234375, 0.02087109375, 0.020876953125, 0.0208828125, + 0.0208857421875, 0.020888671875, 0.0208916015625, 0.02089453125, + 0.0208974609375, 0.020900390625, 0.0209033203125, 0.02090625, + 0.0209091796875, 0.020912109375, 0.0209150390625, 0.02091796875, + 0.020923828125, 0.0209296875, 0.020935546875, 0.02094140625, + 0.020947265625, 0.020953125, 0.020958984375, 0.02096484375, + 0.020970703125, 0.0209765625, 0.020982421875, 0.02098828125, + 0.020994140625, 0.021, 0.021005859375, 0.02101171875, 0.021017578125, + 0.0210234375, 0.021029296875, 0.02103515625, 0.021041015625, 0.021046875, + 0.021052734375, 0.02105859375, 0.021064453125, 0.0210703125, + 0.021076171875, 0.02108203125, 0.021087890625, 0.02109375, + 0.021099609375, 0.02110546875, 0.021111328125, 0.0211171875, + 0.02112890625, 0.021140625, 0.02115234375, 0.0211640625, 0.02117578125, + 0.0211875, 0.02119921875, 0.0212109375, 0.02122265625, 0.021234375, + 0.02124609375, 0.0212578125, 0.02126953125, 0.02128125, 0.02129296875, + 0.0213046875, 0.021328125, 0.0213515625, 0.021375, 0.0213984375, + 0.021421875, 0.0214453125, 0.02146875, 0.0214921875, 0.021515625, + 0.0215390625, 0.0215625, 0.021609375, 0.02165625, 0.021703125, 0.02175, + 0.021796875, 0.02184375, 0.021890625, 0.0219375, 0.02203125, 0.022125, + 0.02221875, 0.0223125, 0.02240625, 0.0225, 0.0226875, 0.022875, + 0.0230625, 0.02325, 0.0234375, 0.023625, 0.024, 0.024375, 0.02475, + 0.025125, 0.0255, 0.02625, 0.027, 0.0285, 0.03, 0.033, 0.036, 0.042, + 0.048, 0.06] + velocity: [0.7113045019670247, 0.7113045019644114, 0.7113045018273962, + 0.7113044991263576, 0.7113044718388901, 0.7113040955057054, + 0.7113021058972171, 0.7112963708330893, 0.7112725871618710, + 0.7111753497056166, 0.7110186072016497, 0.7106491430126759, + 0.7098707196148568, 0.7093408337930682, 0.7092299768962025, + 0.7095818165190751, 0.7110652891555418, 0.7150763048459968, + 0.7190880212049084, 0.7254970352464670, 0.7355011036301861, + 0.7424987371799427, 0.7512974371586337, 0.7622975529264311, + 0.7759686893362994, 0.7840121581335248, 0.7929862058694460, + 0.8029786529306665, 0.8140816910051568, 0.8263911016996344, + 0.8400051503252387, 0.8550230935684117, 0.8715432417042469, + 0.8804032450944526, 0.8896854600613008, 0.8994014264129908, + 0.9095618762341799, 0.9201769416099332, 0.9312556986128311, + 0.9428063518855770, 0.9548358078422888, 0.9673498214114267, + 0.9803526352004325, 0.9938470780585706, 1.007834307473914, + 1.037281326953577, 1.068623838981573, 1.101810717546721, + 1.136765230580992, 1.173387539461909, 1.2115583851851, 1.251143550815087, + 1.291998633693628, 1.333973695827823, 1.376917459225773, + 1.420680836424228, 1.465119704667494, 1.510096925214386, + 1.555483672194924, 1.6011601700555, 1.647015952022495, 1.692949750782523, + 1.738869122895852, 1.784689894512756, 1.830335500707546, + 1.875736275898547, 1.920828739388809, 1.965554908434, 2.009861661576125, + 2.053700167088413, 2.097025385128384, 2.139795647238750, + 2.181972313002160, 2.223519500653150, 2.264403968669149, + 2.304595560331155, 2.344066754149499, 2.382792437288318, + 2.420749875082358, 2.494326103083528, 2.564716465887726, + 2.631842191181413, 2.695663030017649, 2.756176074312551, + 2.813413465089891, 2.867438970860057, 2.918343644575474, + 2.966240880573958, 3.011261225040077, 3.053547268496704, + 3.093248888144499, 3.130519030464563, 3.165510145930775, + 3.198371319787367, 3.229246095148034, 3.285476165881619, + 3.335635179042746, 3.380578087306476, 3.421033022729407, + 3.457612928018830, 3.490830634305487, 3.521114232718290, + 3.548821147854034, 3.574250266434189, 3.597651988741307, + 3.619236293776723, 3.657499808652356, 3.690820596774601, + 3.720059693054663, 3.745883497992812, 3.768815311142039, + 3.789270196390742, 3.807578810012286, 3.824003282057937, + 3.851820624163097, 3.875017592195556, 3.894562266478355, + 3.911170820646242, 3.925377399069682, 3.937575212865106, + 3.956753836039012, 3.971752733537163, 3.983691956020369, + 3.993340929356191, 4.001237574915233, 4.007754135802742, + 4.017318821336158, 4.024428702712037, 4.029854755664635, + 4.034086995291809, 4.037441787045164, 4.042047979016695, + 4.045297952372367, 4.049059741861663, 4.051346736060948, 4.053462512347, + 4.054481165362239, 4.055143919184262, 4.055362175614569, + 4.055362175624151] + D: [1.338612362800799, 1.338612362805714, 1.338612363063561, + 1.338612368146590, 1.338612419498432, 1.338613127715616, + 1.338616871957309, 1.338627664903283, 1.338672425854409, + 1.338855458482176, 1.339150604742227, 1.339846821607608, + 1.341316050771896, 1.342318019736218, 1.342527821543820, + 1.341862120919865, 1.339062595819734, 1.331551424148545, + 1.324122765410581, 1.312425404697347, 1.294574025142544, + 1.282373288849556, 1.267354856710154, 1.249066515382351, + 1.227060109447808, 1.214471163473420, 1.200727176497512, + 1.185784967674286, 1.169612280653685, 1.152190372333734, + 1.133516623533790, 1.113607040989986, 1.092498495522564, + 1.081503981528738, 1.070220530705454, 1.058659196173132, + 1.046833273770510, 1.034757068669289, 1.022447064614902, + 1.009920674181247, 0.9971973129434230, 0.9842971639789870, + 0.9712421226477250, 0.9580546057744699, 0.9447583428357316, + 0.9179380268642648, 0.8910151955125323, 0.8641776360485039, + 0.8376050348213484, 0.8114628316364583, 0.7858973009440512, + 0.7610322153763539, 0.7369672074578376, 0.7137777141085142, + 0.6915162215530855, 0.6702144432385291, 0.6498860561349742, + 0.6305296671824425, 0.6121317557876695, 0.5946694178251473, + 0.5781128078362162, 0.5624272324592885, 0.5475748884254552, + 0.5335162644768150, 0.5202112413093517, 0.5076199302221490, + 0.4957032922808208, 0.4844235775979482, 0.4737446203303748, + 0.4636320202435779, 0.4540532368498343, 0.4449776175874542, + 0.4363763774535983, 0.4282225440208652, 0.4204908635124985, + 0.4131576050751689, 0.4062005411649783, 0.3995988783407451, + 0.3933331550763927, 0.3817308351191641, 0.3712539760990759, + 0.3617850594715188, 0.3532196607476919, 0.3454645682608394, + 0.3384362751605720, 0.3320597853640571, 0.3262676642701115, + 0.3209992707176633, 0.3162001178526990, 0.3118213229471989, + 0.3078191177101511, 0.3041544002827679, 0.3007923175508320, + 0.2977018715664274, 0.2948555467061014, 0.2898091677164634, + 0.2854512118575521, 0.2816562940489895, 0.2783256056761467, + 0.2753810506772897, 0.2727606045948252, 0.2704147054874408, + 0.2683034796238738, 0.2663946243940273, 0.2646618003139869, + 0.2630834160276805, 0.2603311247768719, 0.2579808490780580, + 0.2559531574458542, 0.2541886362426560, 0.2526419931277288, + 0.2512782032140372, 0.2500699391548333, 0.2489958628141958, + 0.2471976452348548, 0.2457178472137528, 0.2444847222485526, + 0.2434465308981145, 0.2425654569977075, 0.2418140369233042, + 0.2406419477526072, 0.2397331876085277, 0.2390146999600381, + 0.2384371757159756, 0.2379666068348890, 0.2375796750886989, + 0.2370140291359410, 0.2365952999687240, 0.2362767322078061, + 0.2360288490334828, 0.2358327273973872, 0.2355639790506352, + 0.2353747275379, 0.2351560514051029, 0.2350233048876260, + 0.2349006299111079, 0.2348416129537017, 0.2348032313663537, + 0.2347905943758692, 0.2347905943754298] + T: [300.0, 300.0000000000048, 300.0000000000190, 300.0000000006543, + 300.0000000151754, 300.0000004626892, 300.0000056904672, + 300.0000375328316, 300.0003067623791, 300.0025835763590, + 300.0100914572876, 300.0456372348747, 300.2143051136086, + 300.5363648153183, 300.9251802812575, 301.6820640994231, + 303.1579243724814, 306.0391696934788, 308.5080304362910, + 312.1476813786551, 317.5007479794486, 321.1136117962501, + 325.5596057792276, 331.0177716562450, 337.6981790566028, + 341.5908169881620, 345.9063203307176, 350.6839846028756, + 355.9651042100633, 361.79263405694, 368.2107054859491, 375.2639690776746, + 382.9967363924724, 387.1356751372064, 391.4654070389512, + 395.9912277320819, 400.7179293284373, 405.6501934698810, + 410.7920778620223, 416.1474162562110, 421.7193010497369, + 427.5104820529256, 433.5228633655196, 439.7578940436055, + 446.2160988835831, 459.7960609509079, 474.2366200900562, + 489.5156556678137, 505.5994986104225, 522.4440083029319, + 539.9961835304501, 558.1961271812422, 576.9791575122307, + 596.2778742588320, 616.0240302493828, 636.1501141829584, + 656.5906022758152, 677.2828781690984, 698.1678485027371, + 719.1902973298718, 740.2990286972499, 761.4468464289565, + 782.5904159779165, 803.6900470925887, 824.7094292636990, + 845.6153452711241, 866.3773820968353, 886.9676532185686, + 907.3605419192229, 927.5324716921176, 947.4617070202891, + 967.1281856241712, 986.5133816187671, 1005.600197762869, + 1024.372921393393, 1042.817430381663, 1060.920990151098, + 1078.672146720739, 1096.060703939049, 1129.731942771671, + 1161.908076225511, 1192.558963873048, 1221.673247258332, + 1249.257209834609, 1275.333185383248, 1299.937546053693, + 1323.118385209472, 1344.933044611105, 1365.445637368334, + 1384.724698778849, 1402.841065991485, 1419.866052099916, + 1435.869946780432, 1450.920848337070, 1465.083814571401, + 1490.942207832254, 1514.082092544088, 1534.882868011405, + 1553.666151052659, 1570.702051552031, 1586.216480369983, + 1600.398247122504, 1613.405372646286, 1625.370423181255, + 1636.404866028731, 1646.602514597948, 1664.730184087217, + 1680.559314804466, 1694.482665206372, 1706.806003792596, + 1717.770681790896, 1727.569004722779, 1736.354812039650, + 1744.250532233944, 1757.660021468748, 1768.868170065175, + 1778.331331552264, 1786.388335468214, 1793.292876090557, + 1799.232649946471, 1808.604704584425, 1815.950149425541, + 1821.807958244220, 1826.549585433562, 1830.435559317933, + 1833.647015585456, 1838.376050878237, 1841.895895709161, + 1844.584804194264, 1846.683712391726, 1848.3485852933, 1850.639284737392, + 1852.256316631304, 1854.130526699780, 1855.270131833285, + 1856.325036196075, 1856.832955655525, 1857.163521794665, + 1857.272372965013, 1857.272372965013] + H2: [9.478316470450839e-03, 9.478316470212130e-03, 9.478316457740108e-03, + 9.478316211798394e-03, 9.4783137253974e-03, 9.478279380934124e-03, + 9.478097189534299e-03, 9.477568398764567e-03, 9.475345843358560e-03, + 9.466005111954690e-03, 9.450119428081757e-03, 9.408822234916892e-03, + 9.301615057150391e-03, 9.184079879147227e-03, 9.090435511090627e-03, + 8.960083460193695e-03, 8.779316537416731e-03, 8.530281927799040e-03, + 8.370932119098156e-03, 8.183231231546739e-03, 7.963618103582801e-03, + 7.839762502960977e-03, 7.706214225693057e-03, 7.562716581181404e-03, + 7.409146245069588e-03, 7.328062917854e-03, 7.244372371115787e-03, + 7.158108482759685e-03, 7.069319698835279e-03, 6.978069391281560e-03, + 6.884435894660073e-03, 6.788512171256094e-03, 6.690405063579583e-03, + 6.640290485317770e-03, 6.589656072644093e-03, 6.538518989209717e-03, + 6.486896971712599e-03, 6.434808439418248e-03, 6.382272216137503e-03, + 6.329307665455298e-03, 6.275934376103767e-03, 6.222172314482465e-03, + 6.168041491974444e-03, 6.113562125747699e-03, 6.058754310382308e-03, + 5.949081061653340e-03, 5.838393624296080e-03, 5.726836510872695e-03, + 5.614547893374880e-03, 5.501658914129581e-03, 5.388293414807390e-03, + 5.274567934350751e-03, 5.160591820172402e-03, 5.046467333439179e-03, + 4.932289690739845e-03, 4.8181470497639e-03, 4.704120496738478e-03, + 4.590284118499722e-03, 4.476705241940561e-03, 4.363444904253974e-03, + 4.250558587778719e-03, 4.138097221239676e-03, 4.026108420460722e-03, + 3.914637919095782e-03, 3.803731124451616e-03, 3.693434724637921e-03, + 3.583798270112775e-03, 3.474875654162552e-03, 3.366726422054164e-03, + 3.259416846831163e-03, 3.153020720409155e-03, 3.047619821271032e-03, + 2.943304034148917e-03, 2.840171112064179e-03, 2.738326089444026e-03, + 2.637880384156422e-03, 2.538950583252787e-03, 2.441656975083684e-03, + 2.346121890094785e-03, 2.162057523729016e-03, 1.986287621762815e-03, + 1.819677510793294e-03, 1.662955470163577e-03, 1.516672068644961e-03, + 1.381174825024113e-03, 1.256599268713831e-03, 1.142875263191762e-03, + 1.039745840329932e-03, 9.467949087603125e-04, 8.634800023881839e-04, + 7.891665723048139e-04, 7.231609964548796e-04, 6.647402934547921e-04, + 6.131773273352156e-04, 5.677609793333214e-04, 4.935964599822975e-04, + 4.361439151921690e-04, 3.914742917071461e-04, 3.564441117446431e-04, + 3.286149912892460e-04, 3.061381836955631e-04, 2.876352059586760e-04, + 2.720903530814687e-04, 2.587611407127153e-04, 2.471072762310659e-04, + 2.367362048417656e-04, 2.190255070879239e-04, 2.038469195882761e-04, + 1.904602634815e-04, 1.784388980856587e-04, 1.675221332561401e-04, + 1.575391285889050e-04, 1.483696290910557e-04, 1.399240325597968e-04, + 1.250261984649431e-04, 1.121775765559436e-04, 1.010396821576492e-04, + 9.134430445071134e-05, 8.287465559684982e-05, 7.545530946379692e-05, + 6.337935602942819e-05, 5.380794027589140e-05, 4.613457170576381e-05, + 3.992046338570642e-05, 3.484304965332616e-05, 3.066369845999304e-05, + 2.449455455116453e-05, 2.001445937970610e-05, 1.668516683572809e-05, + 1.416132073430117e-05, 1.221626803109238e-05, 9.619104599347966e-06, + 7.877899298413050e-06, 5.970313906510046e-06, 4.887048125966062e-06, + 3.944351714878992e-06, 3.514119889803486e-06, 3.243051196229130e-06, + 3.155563266857228e-06, 3.155563266857228e-06] + H: [3.323038663806807e-18, 5.741551562804608e-22, 4.950644341042833e-23, + 4.619516904409817e-23, 1.044980952725614e-22, 2.096852686522307e-21, + 2.669440906822917e-20, 1.799968450086892e-19, 1.485428266186209e-18, + 1.266272022278472e-17, 5.244134008583465e-17, 3.057672278560322e-16, + 3.216648512322620e-15, 2.518911124709246e-14, 9.603360214252613e-14, + 3.559137209335782e-13, 1.347514305755158e-12, 5.325843432480928e-12, + 1.231050032924587e-11, 2.959037719531453e-11, 7.788958931642195e-11, + 1.440539490182460e-10, 2.813198500784556e-10, 5.930474216972578e-10, + 1.346067664188679e-09, 2.152715035332911e-09, 3.442482190709407e-09, + 5.520763379480781e-09, 8.864008609185477e-09, 1.420579120568268e-08, + 2.265511826663103e-08, 3.585388747734907e-08, 5.617866880830555e-08, + 7.037214368710457e-08, 8.778072718213589e-08, 1.090571328036372e-07, + 1.349579511115340e-07, 1.663547269340354e-07, 2.042451934408748e-07, + 2.497634570697090e-07, 3.041898965442164e-07, 3.689589052962147e-07, + 4.456658294178424e-07, 5.360703815934228e-07, 6.420987865210327e-07, + 9.049103045686006e-07, 1.255337635772681e-06, 1.713256699248334e-06, + 2.300060774413708e-06, 3.037893063271305e-06, 3.948768623784250e-06, + 5.053679535102568e-06, 6.3717814862268e-06, 7.919742590693023e-06, + 9.711302399376609e-06, 1.175705104350589e-05, 1.406440512461066e-05, + 1.663773481335750e-05, 1.947858745721555e-05, 2.258595497021246e-05, + 2.595654160961379e-05, 2.958500146270203e-05, 3.346412793728218e-05, + 3.758498884411387e-05, 4.193700941937103e-05, 4.650801174835560e-05, + 5.128422280595964e-05, 5.625026516074097e-05, 6.138914473064859e-05, + 6.668224919419089e-05, 7.210936903794569e-05, 7.764875098253530e-05, + 8.327719085662752e-05, 8.897017003972572e-05, 9.470203634552993e-05, + 1.004462261921253e-04, 1.061755250630980e-04, 1.118623580275623e-04, + 1.174790995227898e-04, 1.283403027259454e-04, 1.386137318405904e-04, + 1.481126217340049e-04, 1.566797112061485e-04, 1.641935835730789e-04, + 1.705721249776660e-04, 1.757730189204630e-04, 1.797915773337315e-04, + 1.826564780037378e-04, 1.844241105489661e-04, 1.851722404973136e-04, + 1.849936155397231e-04, 1.839899989119074e-04, 1.822669581395e-04, + 1.799295904597021e-04, 1.770792460277654e-04, 1.701580442045779e-04, + 1.622235371192815e-04, 1.537751034674413e-04, 1.451813209473079e-04, + 1.366994025254141e-04, 1.284984147794988e-04, 1.206813100675301e-04, + 1.133035695586160e-04, 1.063878958135065e-04, 9.993521487466355e-05, + 9.393254461362896e-05, 8.323690189293248e-05, 7.401236781453131e-05, + 6.604624558103820e-05, 5.914625981910399e-05, 5.314743523396794e-05, + 4.791147928274060e-05, 4.332349255560812e-05, 3.928777050599714e-05, + 3.263585737206841e-05, 2.735085234721981e-05, 2.310606465403845e-05, + 1.966405571637680e-05, 1.684956751531408e-05, 1.453086281938684e-05, + 1.106482135905790e-05, 8.582982546584901e-06, 6.770131946962717e-06, + 5.422283628892322e-06, 4.404415999900991e-06, 3.625248763400863e-06, + 2.579070880018006e-06, 1.900982313640442e-06, 1.445567892118607e-06, + 1.130079892027569e-06, 9.057497224260274e-07, 6.337857181035672e-07, + 4.708209141018780e-07, 3.119587345680919e-07, 2.320888243495509e-07, + 1.692658449629807e-07, 1.428830123002080e-07, 1.270251087086103e-07, + 1.220384630390324e-07, 1.220384630390323e-07] + O: [3.975823710237348e-17, 3.409419913730937e-17, 2.912220324216109e-17, + 2.821520856168605e-17, 6.428961413740681e-17, 1.281216029743709e-15, + 1.630140858123638e-14, 1.098583755139863e-13, 9.061920241063893e-13, + 7.680076598093431e-12, 3.013025484394310e-11, 1.361195902562329e-10, + 6.359029404002395e-10, 1.584108322089512e-09, 2.721390120288253e-09, + 4.918904869264016e-09, 9.195336682589758e-09, 1.767934066210703e-08, + 2.541513853318473e-08, 3.751729154727309e-08, 5.714629371891064e-08, + 7.232141762078366e-08, 9.300492551732393e-08, 1.217832794474308e-07, + 1.627856286917575e-07, 1.906177214820029e-07, 2.248104492066814e-07, + 2.671124843714071e-07, 3.198164873953006e-07, 3.859310998494589e-07, + 4.693999965681783e-07, 5.753741189537874e-07, 7.105393918268843e-07, + 7.928282132947591e-07, 8.862124214285227e-07, 9.922096492988497e-07, + 1.112522247182101e-06, 1.249053060653689e-06, 1.403917637849708e-06, + 1.579458205308348e-06, 1.778253431965687e-06, 2.003129259842131e-06, + 2.257165402600955e-06, 2.543702460615647e-06, 2.866345437843565e-06, + 3.624876124691049e-06, 4.571061688167419e-06, 5.741669762258723e-06, + 7.177899929317354e-06, 8.926041289677947e-06, 1.103857663575819e-05, + 1.357577166920877e-05, 1.660768421573614e-05, 2.021642372245236e-05, + 2.4498409478677e-05, 2.956633214064841e-05, 3.555052131369456e-05, + 4.259945762404456e-05, 5.087923201279769e-05, 6.057183801182301e-05, + 7.187227507143622e-05, 8.498453390034216e-05, 1.001166202368285e-04, + 1.174748444736030e-04, 1.372576556393282e-04, 1.596493261173354e-04, + 1.848137974002066e-04, 2.128889788477912e-04, 2.439817545624935e-04, + 2.781639031704242e-04, 3.154690771119833e-04, 3.558909274773965e-04, + 3.993824022889938e-04, 4.458561942699559e-04, 4.951862692083121e-04, + 5.472103662974117e-04, 6.017333445064929e-04, 6.585312460218232e-04, + 7.173559481488096e-04, 8.393304600256017e-04, 9.658302422433929e-04, + 1.094431474913041e-03, 1.222725883367597e-03, 1.348438825642514e-03, + 1.469521368068659e-03, 1.584214687967009e-03, 1.691087829778861e-03, + 1.789051696515590e-03, 1.877353233152609e-03, 1.955554191444856e-03, + 2.023498819550720e-03, 2.081274440893190e-03, 2.129168285388575e-03, + 2.167623183063682e-03, 2.197193853965378e-03, 2.231480964316460e-03, + 2.239255546193401e-03, 2.225912390215281e-03, 2.196436237240433e-03, + 2.155139370538461e-03, 2.105578075338e-03, 2.050579338489722e-03, + 1.992325229483849e-03, 1.932459849643509e-03, 1.872198736899121e-03, + 1.812432563972160e-03, 1.696675698430683e-03, 1.587634074276163e-03, + 1.486177595151528e-03, 1.392386600315219e-03, 1.305948939585867e-03, + 1.226381088256632e-03, 1.153147846384240e-03, 1.085736964988238e-03, + 9.673995931305634e-04, 8.657930953299337e-04, 7.781563008201943e-04, + 7.022250739572810e-04, 6.361628372293567e-04, 5.784922922563743e-04, + 4.852310730965198e-04, 4.115565569162538e-04, 3.526793273814822e-04, + 3.051183147552432e-04, 2.663308454790817e-04, 2.344521888974023e-04, + 1.874997618748768e-04, 1.534143830616838e-04, 1.280933632938990e-04, + 1.088972571895418e-04, 9.410294678267419e-05, 7.432317960294501e-05, + 6.105693395221094e-05, 4.647596766033136e-05, 3.819031303925909e-05, + 3.095112904902167e-05, 2.764178487830649e-05, 2.554982257922780e-05, + 2.487345275208508e-05, 2.487345275208508e-05] + O2: [0.1367636951757017, 0.1367636951757859, 0.1367636951802053, + 0.1367636952673531, 0.1367636961483854, 0.1367637083176650, + 0.1367637728678616, 0.1367639601711399, 0.1367647469122059, + 0.1367680478276037, 0.1367736391281347, 0.1367880497839283, + 0.1368247455064029, 0.1368634040883464, 0.1368923302745801, + 0.1369289784098975, 0.1369716393717548, 0.1370120862421754, + 0.1370224933770941, 0.1370148839898881, 0.1369742514283666, + 0.1369323028939318, 0.1368688000418731, 0.1367772000815696, + 0.1366495105629625, 0.1365679120384024, 0.1364723414338538, + 0.1363610880963184, 0.1362323247531108, 0.1360841234807892, + 0.1359144792343980, 0.1357213414854638, 0.1355026536761585, + 0.1353822244078223, 0.1352542981184115, 0.1351186100548847, + 0.1349749045374184, 0.1348229358628922, 0.1346624707015882, + 0.1344932889583276, 0.1343151857092935, 0.1341279719704406, + 0.1339314761122150, 0.1337255445266610, 0.1335100425511102, + 0.1330538068855945, 0.1325601431210282, 0.1320287929161912, + 0.1314598008200953, 0.1308535036092433, 0.1302105098353546, + 0.1295316668267880, 0.1288180143789696, 0.1280707271684303, + 0.1272910504769191, 0.1264802352931558, 0.12563947897875, + 0.1247698766670218, 0.1238723869004689, 0.1229478132021, + 0.1219968016680806, 0.1210198534292359, 0.1200173499814396, + 0.1189895888745, 0.1179368269967383, 0.1168593286244928, + 0.1157574154681620, 0.1146315161035688, 0.1134822124078752, + 0.1123102809091980, 0.1111167272977381, 0.1099028127227314, + 0.1086700709014411, 0.1074203154795515, 0.1061556375316915, + 0.1048783936622897, 0.1035911848589751, 0.1022968271848786, + 0.1009983155569388, 0.09841802125018989, 0.0958601743405, + 0.09335019594659465, 0.09091225599836916, 0.08856806894611342, + 0.08633598207299215, 0.08423040395046202, 0.08226157252792385, + 0.08043562423203254, 0.07875490132077606, 0.07721842468291387, + 0.07582246083264650, 0.07456112138007895, 0.07342694706877206, + 0.07241144355807584, 0.07150555053900441, 0.07000053385320519, + 0.06880755567918367, 0.06786410693183782, 0.06711696475442779, + 0.06652259814169914, 0.06604640308765505, 0.06566142204567742, + 0.06534694609971951, 0.06508720922799031, 0.06487026103441487, + 0.06468702924063922, 0.06440136983379885, 0.06418154273385371, + 0.06400755910472564, 0.06386695484554743, 0.06375166896348641, + 0.06365628430124506, 0.06357703171350040, 0.06351118094661683, + 0.06341294941611005, 0.06334289681172345, 0.06329343360179208, + 0.06325930238222578, 0.06323682117073734, 0.06322343408778257, + 0.06321716933604382, 0.06322416052826491, 0.06323861657056974, + 0.06325706664557171, 0.06327742553284239, 0.06329849385299173, + 0.06333924038645637, 0.06337631798318413, 0.06340916829671606, + 0.06343791757906189, 0.06346294417800588, 0.06350173259694669, + 0.06353181710298328, 0.06357029232535449, 0.06359546129021046, + 0.06362022843702377, 0.06363263879187614, 0.06364092301484167, + 0.06364368101198313, 0.06364368101198313] + OH: [1.543691143456899e-16, 7.640970397328210e-19, 4.599960916273292e-20, + 4.143213169851410e-20, 9.299575889686261e-20, 1.878022301629217e-18, + 2.390070327469739e-17, 1.609996828845960e-16, 1.329588681750948e-15, + 1.141287034184444e-14, 4.954754667790097e-14, 3.443844864127346e-13, + 4.741517054998726e-12, 4.163758865719983e-11, 1.617653902715529e-10, + 5.991385277103173e-10, 2.210468054919495e-09, 8.175537325984284e-09, + 1.745609228586953e-08, 3.738669985219162e-08, 8.154801498933072e-08, + 1.258829982304038e-07, 1.966250767840389e-07, 3.118168905585849e-07, + 5.036776840857870e-07, 6.515895209865691e-07, 8.479136438820591e-07, + 1.109924751796878e-06, 1.461263029633118e-06, 1.934083809885805e-06, + 2.571693698747324e-06, 3.431583761632552e-06, 4.588593282005280e-06, + 5.318964360584966e-06, 6.164975709609993e-06, 7.142604844221704e-06, + 8.269244997804005e-06, 9.563605567019279e-06, 1.104551197852207e-05, + 1.273564850585838e-05, 1.465518511266232e-05, 1.682533743851171e-05, + 1.926681428453076e-05, 2.199920998989095e-05, 2.504031549436161e-05, + 3.203351599325049e-05, 4.036475240196415e-05, 5.004891083783517e-05, + 6.102075967955794e-05, 7.313315805444038e-05, 8.616682318314504e-05, + 9.985059908971020e-05, 1.138887787166147e-04, 1.279907103111632e-04, + 1.418979755663484e-04, 1.554056205512488e-04, 1.683756687086145e-04, + 1.807428355018451e-04, 1.925135856881664e-04, 2.037602891845850e-04, + 2.146123178177581e-04, 2.252456656521368e-04, 2.358722610521616e-04, + 2.467297136893960e-04, 2.580718873935273e-04, 2.701604408923e-04, + 2.832573297267907e-04, 2.976181935781177e-04, 3.134865387174057e-04, + 3.310886423378431e-04, 3.506291364243120e-04, 3.722872616671099e-04, + 3.962138099976069e-04, 4.225287950878762e-04, 4.513199029535017e-04, + 4.826417838707478e-04, 5.165162546668554e-04, 5.529335037594658e-04, + 5.9185447245038e-04, 6.763355159281450e-04, 7.693837916100880e-04, + 8.697295293690707e-04, 9.758408058156829e-04, 1.086040050668455e-03, + 1.198612848016216e-03, 1.311900736415765e-03, 1.424373369123651e-03, + 1.534678495991987e-03, 1.641670792699032e-03, 1.7444223549956e-03, + 1.842218620084445e-03, 1.934543664902614e-03, 2.021058436934984e-03, + 2.101574675342298e-03, 2.176026215565e-03, 2.306311143678765e-03, + 2.414771226733194e-03, 2.503433001624124e-03, 2.574585973971788e-03, + 2.630539634653213e-03, 2.673474820083383e-03, 2.705365176426517e-03, + 2.727946168695759e-03, 2.742714504564346e-03, 2.750946993008766e-03, + 2.753735004886052e-03, 2.745914179868482e-03, 2.726005445310113e-03, + 2.697529823518204e-03, 2.663003594910794e-03, 2.624231319011848e-03, + 2.582523299556595e-03, 2.538849785014642e-03, 2.493977459543493e-03, + 2.403285992290240e-03, 2.313020902454734e-03, 2.224773882899953e-03, + 2.139543137463436e-03, 2.057912357828739e-03, 1.980248058535979e-03, + 1.839526165511393e-03, 1.713197866073138e-03, 1.6001941335746e-03, + 1.499265002676940e-03, 1.409153426944249e-03, 1.328756547457014e-03, + 1.197023780306054e-03, 1.088805874438017e-03, 9.991749482092160e-04, + 9.243783634178457e-04, 8.616195363590796e-04, 7.685581434323508e-04, + 6.984593311894566e-04, 6.112478901030401e-04, 5.551440396763860e-04, + 5.006327010845754e-04, 4.735074975769925e-04, 4.554797204615282e-04, + 4.494885007155755e-04, 4.494885007155755e-04] + H2O: [1.064940458594485e-18, 1.712977614058545e-16, 1.834651828574379e-16, + 5.536817492762945e-16, 1.234777774719062e-14, 5.209496528881942e-13, + 8.810563336499148e-12, 7.844572361905403e-11, 8.816140075662077e-10, + 1.014455610124876e-08, 5.135790273249420e-08, 3.094757923663469e-07, + 1.923836457604029e-06, 5.905388848607641e-06, 1.180195761561287e-05, + 2.537229308347263e-05, 5.645803030142856e-05, 1.270630109343078e-04, + 1.957147678703842e-04, 3.065767457738698e-04, 4.8375408851454e-04, + 6.117893630564703e-04, 7.764527282078718e-04, 9.869192796789984e-04, + 1.253988964245618e-03, 1.414648803184914e-03, 1.595964050915218e-03, + 1.800035542209667e-03, 2.029053381235724e-03, 2.285272972655173e-03, + 2.570984795587355e-03, 2.888477731696606e-03, 3.239996021764925e-03, + 3.430511586195415e-03, 3.630781576662962e-03, 3.841080604439171e-03, + 4.061669410176327e-03, 4.292793447491646e-03, 4.534680259332781e-03, + 4.787537810955042e-03, 5.051552319580525e-03, 5.326886490793942e-03, + 5.613677974567717e-03, 5.912037711636875e-03, 6.222049150423524e-03, + 6.871716602541276e-03, 7.565992516524708e-03, 8.304435530455784e-03, + 9.086201304485368e-03, 9.910080879652759e-03, 0.01077455262605815, + 0.01167784311627898, 0.01261799228299665, 0.01359291874100438, + 0.01460048182895497, 0.01563853754585306, 0.01670498610495916, + 0.01779780937755761, 0.01891509711665491, 0.02005506154078, + 0.02121604056503603, 0.02239649061566022, 0.02359497049030278, + 0.02481011809548732, 0.02604062210009387, 0.02728519060629635, + 0.02854251888345746, 0.02981125806419828, 0.03108998648964117, + 0.03237718513230951, 0.03367121823541719, 0.03497031999837987, + 0.03627258782065037, 0.03757598229923510, 0.03887833382780974, + 0.04017735516088375, 0.04147065979601756, 0.04275578514091063, + 0.04403021935483556, 0.04652072465668236, 0.04894019187794933, + 0.05127047428070367, 0.05349548972544745, 0.05560192397168464, + 0.05757969262585553, 0.05942214193761541, 0.06112600475164731, + 0.06269115359553790, 0.06412020677718566, 0.06541804654448220, + 0.06659130338998205, 0.06764785057487679, 0.06859634081506399, + 0.06944580509989244, 0.07020532330710418, 0.07147660641260802, + 0.07249945811317871, 0.07332739999846329, 0.07400425387592613, + 0.07456473492507833, 0.07503570754903674, 0.07543762567690425, + 0.07578589791744034, 0.07609206262206171, 0.07636474223867441, + 0.07661038878408373, 0.07703417069333739, 0.07739867808123729, + 0.07771845066157813, 0.07800279926276550, 0.07825802549253966, + 0.07848862027835130, 0.07869791873081503, 0.07888845161854877, + 0.07921828442701058, 0.07949987769214122, 0.07974239447612977, + 0.07995271322112962, 0.08013608830461333, 0.08029648702501566, + 0.08055586701332565, 0.08076411970525052, 0.08093382098857611, + 0.08107385102608071, 0.08119060131519303, 0.081288629423714, + 0.08143639848326474, 0.08154879353197449, 0.08163624827497483, + 0.08170557842094342, 0.08176130050148844, 0.08183941540312380, + 0.08189545718092973, 0.08196163350212293, 0.08200248258547468, + 0.08204080963695087, 0.08205943642375543, 0.08207163386277759, + 0.08207566038963073, 0.08207566038963073] + HO2: [6.074352222671953e-16, 1.043565123155166e-15, 1.065672315096314e-15, + 1.078454730420738e-15, 1.163505021356007e-15, 4.550146095923011e-15, + 6.052932675001726e-14, 5.669723020421252e-13, 7.000088902678869e-12, + 8.912317344984216e-11, 4.936951537710948e-10, 3.294246298001588e-09, + 2.266622816022711e-08, 7.526312637084901e-08, 1.596998762738890e-07, + 3.680620474949686e-07, 8.804911215260049e-07, 2.135381562272840e-06, + 3.451208581115712e-06, 5.718385626585439e-06, 9.621739861230407e-06, + 1.265867666696614e-05, 1.679498231965642e-05, 2.242068971810253e-05, + 3.004957423037094e-05, 3.489604132709679e-05, 4.056938706063185e-05, + 4.717987530202344e-05, 5.483596153262185e-05, 6.363419897556273e-05, + 7.364527261802652e-05, 8.489631814763777e-05, 9.735074586191668e-05, + 1.040247843908858e-04, 1.109578517376373e-04, 1.181163225719749e-04, + 1.254593094372472e-04, 1.329388142938429e-04, 1.404999551958023e-04, + 1.480817137948652e-04, 1.556177930058054e-04, 1.630379662043496e-04, + 1.702694995982558e-04, 1.772389459663925e-04, 1.838738903108162e-04, + 1.958424362983628e-04, 2.058140391161485e-04, 2.134815359769432e-04, + 2.186890154515557e-04, 2.214387814272860e-04, 2.218750799199615e-04, + 2.202510456253521e-04, 2.168877525284703e-04, 2.121339052746205e-04, + 2.063323338184637e-04, 1.997963158931467e-04, 1.927959654125859e-04, + 1.855530937658420e-04, 1.782421569133942e-04, 1.709948984294942e-04, + 1.639067394478785e-04, 1.570435529983449e-04, 1.504480041937701e-04, + 1.441450549515214e-04, 1.381465092392187e-04, 1.324546350842563e-04, + 1.270649766373174e-04, 1.219684946498712e-04, 1.171531702762697e-04, + 1.126051905260914e-04, 1.083098129323730e-04, 1.042519866042730e-04, + 1.004167885101592e-04, 9.678971740383070e-05, 9.335687134203488e-05, + 9.010501906138063e-05, 8.702157168351203e-05, 8.409434886627738e-05, + 8.131089472698385e-05, 7.616938496631055e-05, 7.149907808378553e-05, + 6.725205308907820e-05, 6.338333865595597e-05, 5.985424235041622e-05, + 5.663165283614413e-05, 5.368680449054543e-05, 5.099424145703625e-05, + 4.853107702403101e-05, 4.627649369484067e-05, 4.421140973109176e-05, + 4.231825591405621e-05, 4.058082627365240e-05, 3.898417118154547e-05, + 3.751446603941108e-05, 3.615860010794414e-05, 3.375512122236472e-05, + 3.166983350667070e-05, 2.984270672846112e-05, 2.822519556554505e-05, + 2.677920910662714e-05, 2.547509839765461e-05, 2.428980471062417e-05, + 2.320532546130640e-05, 2.220749840331070e-05, 2.128505442612e-05, + 2.042886020980793e-05, 1.889629759314334e-05, 1.754277834750338e-05, + 1.633774807319069e-05, 1.525788359176127e-05, 1.428504111373126e-05, + 1.340479896157243e-05, 1.260547690938913e-05, 1.187742684612880e-05, + 1.061700555145916e-05, 9.543756904020516e-06, 8.622794448354746e-06, + 7.827266771499109e-06, 7.136332340156918e-06, 6.533522957189987e-06, + 5.560588517434732e-06, 4.789055355742742e-06, 4.169907567852933e-06, + 3.667798051794119e-06, 3.256967382986742e-06, 2.918393029707136e-06, + 2.419563784781884e-06, 2.057368902157740e-06, 1.789369224730750e-06, + 1.587779785926176e-06, 1.434132028176680e-06, 1.233166850727090e-06, + 1.103012976735770e-06, 9.680876932463854e-07, 8.976525750730982e-07, + 8.423354643868471e-07, 8.197954324019309e-07, 8.067321140140285e-07, + 8.027346432091543e-07, 8.027346432091543e-07] + H2O2: [-1.017468323298754e-16, -1.023866382456682e-16, -1.023746180446753e-16, + -1.015046391955675e-16, -6.980390840562653e-17, 1.478565847047640e-15, + 2.988457966898543e-14, 2.992372592949131e-13, 3.794982478801953e-12, + 4.916038527142604e-11, 2.755711064818042e-10, 1.856999917787916e-09, + 1.288764759910507e-08, 4.305477082801263e-08, 9.175391751829411e-08, + 2.124447127852542e-07, 5.097549228688778e-07, 1.233308437510616e-06, + 1.974260574091045e-06, 3.218836765795554e-06, 5.271241359208722e-06, + 6.775352014728482e-06, 8.725580542447145e-06, 1.122056394347621e-05, + 1.435816207545016e-05, 1.6211613554893e-05, 1.827157310711948e-05, + 2.054290732469913e-05, 2.302459946260393e-05, 2.570805117450441e-05, + 2.857542148051837e-05, 3.159823438149925e-05, 3.473655665149730e-05, + 3.633925034591203e-05, 3.795192329055923e-05, 3.956628281842908e-05, + 4.117351143680138e-05, 4.276438566855255e-05, 4.432942753826067e-05, + 4.585905617826668e-05, 4.734376870445928e-05, 4.877430262675225e-05, + 5.014181806977934e-05, 5.143804249535948e-05, 5.265542307699066e-05, + 5.481750439467429e-05, 5.660804723176634e-05, 5.800228177154e-05, + 5.898917723307660e-05, 5.956944952786086e-05, 5.975308506346018e-05, + 5.955696004824e-05, 5.900290796976960e-05, 5.811633406606082e-05, + 5.692529215898762e-05, 5.545986052518581e-05, 5.375166027465212e-05, + 5.183340991369675e-05, 4.973846594460912e-05, 4.750034083410403e-05, + 4.515221161427250e-05, 4.272643895152510e-05, 4.025411450691689e-05, + 3.776464942114669e-05, 3.528541206294063e-05, 3.284142001140512e-05, + 3.045508957271493e-05, 2.814604538103409e-05, 2.593099214566374e-05, + 2.382364988437851e-05, 2.183475277238587e-05, 1.997211001884511e-05, + 1.824072511874685e-05, 1.664296768190580e-05, 1.517879014304089e-05, + 1.384598037869786e-05, 1.264043987976769e-05, 1.155647716743278e-05, + 1.058710616064836e-05, 8.978963730679503e-06, 7.716088420814941e-06, + 6.730743638164570e-06, 5.959040672450544e-06, 5.345568117194082e-06, + 4.845895398643702e-06, 4.427017577674298e-06, 4.066161314674520e-06, + 3.748622011599678e-06, 3.465343253299337e-06, 3.210783007143755e-06, + 2.981339956092304e-06, 2.774364921060558e-06, 2.587632441431288e-06, + 2.419099515265798e-06, 2.266785162984781e-06, 2.005505373880639e-06, + 1.789199507555232e-06, 1.609041862409208e-06, 1.457780474715e-06, + 1.329736199358132e-06, 1.220493957453527e-06, 1.126607052962534e-06, + 1.045364468224185e-06, 9.746164713890245e-07, 9.126451484244606e-07, + 8.580556634292959e-07, 7.670171884038385e-07, 6.936297406839341e-07, + 6.334274576286065e-07, 5.832467093599245e-07, 5.408225168267493e-07, + 5.045052334936185e-07, 4.730759817145586e-07, 4.456268984111537e-07, + 4.003559674712499e-07, 3.637191278606147e-07, 3.333712656437550e-07, + 3.077617461623028e-07, 2.858299499111792e-07, 2.668368149177216e-07, + 2.361484123320730e-07, 2.114896068868303e-07, 1.912335126818903e-07, + 1.743178110488024e-07, 1.600164305812670e-07, 1.478221145438170e-07, + 1.289236119385196e-07, 1.142567457089294e-07, 1.026807735312977e-07, + 9.3425678071199e-08, 8.595942128954178e-08, 7.545529227436928e-08, + 6.803563841707906e-08, 5.953349632236044e-08, 5.457674755808184e-08, + 5.024027316032204e-08, 4.828776868008840e-08, 4.707617011651516e-08, + 4.668971337643054e-08, 4.668971337643054e-08] + AR: [0.8537579883538466, 0.8537579883540007, 0.8537579883620533, + 0.8537579885208468, 0.8537579901262036, 0.8537580123008726, + 0.8537581299336867, 0.8537584713506736, 0.8537599063511191, + 0.8537659367699126, 0.8537761892864382, 0.8538028132176568, + 0.8538716794054758, 0.8539464906999891, 0.8540051779196470, + 0.8540849798116074, 0.8541911844072105, 0.8543271742683588, + 0.8544053913825899, 0.8544862958760376, 0.8545633446241824, + 0.8545965128609117, 0.8546227225280706, 0.8546390886088364, + 0.8546422786790407, 0.8546374242231, 0.8546274050152225, + 0.8546116625365026, 0.8545896516613745, 0.8545608576842458, + 0.8545248156330781, 0.8544811312487722, 0.8544295026319704, + 0.8544004273293592, 0.8543692154971249, 0.8543358638838289, + 0.8543003795443641, 0.8542627800470419, 0.8542230937756508, + 0.8541813599355177, 0.8541376284150594, 0.8540919595398844, + 0.8540444234675804, 0.8539950996737412, 0.8539440759205598, + 0.8538381722120277, 0.8537268575042402, 0.8536109473907313, + 0.8534912730713405, 0.8533686512749940, 0.8532438617907284, + 0.8531176340659760, 0.8529906426113039, 0.8528635096385445, + 0.8527368126864092, 0.8526110949266272, 0.8524868761934344, + 0.8523646632992390, 0.8522449587061381, 0.8521282670239974, + 0.8520150990855092, 0.8519059735323272, 0.8518014159708160, + 0.8517019558500537, 0.8516081212950959, 0.8515204322005142, + 0.8514393919516184, 0.8513654781896784, 0.8512991330689827, + 0.8512407534653178, 0.8511906815867284, 0.8511491964092567, + 0.8511165063152053, 0.8510927432527204, 0.8510779586689590, + 0.8510721214046127, 0.8510751176135465, 0.8510867527527270, + 0.8511067556692689, 0.8511700419340313, 0.8512603032194725, + 0.8513733958309434, 0.8515047100180064, 0.8516494627348757, + 0.8518029665785145, 0.8519608525695860, 0.8521192342700961, + 0.8522748099545886, 0.8524249070121805, 0.8525674777830459, + 0.8527010585468140, 0.8528247037457882, 0.8529379063320476, + 0.8530405129940299, 0.8531326404693713, 0.8532855524913718, + 0.8534071329456402, 0.8535024465306030, 0.8535764507464256, + 0.8536335645858121, 0.8536775042741034, 0.8537112748318758, + 0.8537372399693480, 0.8537572226416710, 0.8537726108037141, + 0.8537844587387333, 0.8537999438684802, 0.8538100439675342, + 0.8538168051281538, 0.8538214294059903, 0.8538246298510027, + 0.8538268311182814, 0.8538282802475151, 0.8538291181513266, + 0.8538294011519451, 0.8538289755912655, 0.8538281398236890, + 0.8538270727944021, 0.8538258689420577, 0.8538245520022423, + 0.8538219654955972, 0.8538195738736069, 0.8538174231330650, + 0.8538155141459410, 0.85381382442798, 0.8538123128224802, + 0.8538102154731797, 0.8538085811579114, 0.8538072923299918, + 0.8538062557712096, 0.8538053907260726, 0.8538044091623459, + 0.8538036896800291, 0.8538030404188401, 0.8538026504032374, + 0.8538023719005056, 0.8538022504137208, 0.8538021896926619, + 0.8538021696167427, 0.8538021696188320] + N2: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + points: 140 + tolerances: + steady-abstol: 1.0e-09 + transient-reltol: 1.0e-04 + transient-abstol: 1.0e-11 + steady-reltol: 1.0e-04 + transport-model: mixture-averaged + phase: + name: ohmech + source: /Users/theot/Documents/INSTALL_DIR/lib/python3.9/site-packages/cantera/data/h2o2.yaml + radiation-enabled: false + energy-enabled: true + Soret-enabled: false + species-enabled: true + refine-criteria: + ratio: 3.0 + slope: 0.06 + curve: 0.12 + prune: 0.0 + grid-min: 1.0e-10 + max-points: 1000 + fixed-point: + location: 0.021 + temperature: 698.1678485027371 + basis: mass + components: [grid, velocity, T, D, H2, H, O, O2, OH, H2O, HO2, H2O2, AR, N2] + products: + size: 0 + type: outlet + points: 1 diff --git a/samples/python/surface_chemistry/README.rst b/samples/python/surface_chemistry/README.rst new file mode 100644 index 00000000000..baaa67d5443 --- /dev/null +++ b/samples/python/surface_chemistry/README.rst @@ -0,0 +1,2 @@ +Surface chemistry +----------------- diff --git a/src/base/Parser.cpp b/src/base/Parser.cpp new file mode 100644 index 00000000000..2e3567e5dce --- /dev/null +++ b/src/base/Parser.cpp @@ -0,0 +1,277 @@ +#include "cantera/base/Parser.h" + +#include +#include +#include +#include +#include +#include +#include + +void Param::print() { + cout << m_name; + for (int i = 0; i < m_args.size(); ++i) + cout << " " << m_args[i]; + cout << endl; +} + +double Param::readDouble(const int i) { + double value; + std::string value_str; + if ( i >= m_args.size() ) { + cout << "---------------------------------------------------------" << endl; + cout << " Parser error: no argument " << i << " of param " << m_name << endl; + cout << "---------------------------------------------------------" << endl; + exit(1); + } else { + //std::stringstream stream(m_args[i]); + value_str = Param::readString(i); + std::replace( value_str.begin(), value_str.end(), 'd', 'e'); + std::stringstream stream(value_str); + if ( stream >> value ) { + return(value); + } else { + cout << "---------------------------------------------------------" << endl; + cout << " Parser error: argument " << i << " of param " << m_name << " in not a double" << endl; + cout << "---------------------------------------------------------" << endl; + exit(1); + } + } +} + +int Param::readInteger(const int i) { + int value; + if ( i >= m_args.size() ) { + cout << "---------------------------------------------------------" << endl; + cout << " Parser error: no argument " << i << " of param " << m_name << endl; + cout << "---------------------------------------------------------" << endl; + exit(1); + } else { + std::stringstream stream(m_args[i]); + if ( stream >> value ) { + return(value); + } else { + cout << "---------------------------------------------------------" << endl; + cout << " Parser error: argument " << i << " of param " << m_name << " in not an integer" << endl; + cout << "---------------------------------------------------------" << endl; + exit(1); + } + } +} + +string Param::readString(const int i) { + if ( i >= m_args.size() ) { + cout << "---------------------------------------------------------" << endl; + cout << " Parser error: no argument " << i << " of param " << m_name << endl; + cout << "---------------------------------------------------------" << endl; + exit(1); + } else { + return(m_args[i]); + } +} + +bool Param::readBool(const int i) { + if ( i >= m_args.size() ) { + cout << "---------------------------------------------------------" << endl; + cout << " Parser error: no argument " << i << " of param " << m_name << endl; + cout << "---------------------------------------------------------" << endl; + exit(1); + } else { + if ((m_args[i]=="true")||(m_args[i]=="TRUE")) + return(true); + else if ((m_args[i]=="false")||(m_args[i]=="FALSE")) + return(false); + else { + cout << "---------------------------------------------------------" << endl; + cout << " Parser error: argument " << i << " of param " << m_name << " in not a boolean" << endl; + cout << "---------------------------------------------------------" << endl; + exit(1); + } + } +} + +Param * Parser::getParam(const string& name) { + for (std::list::iterator p = m_params.begin(); p != m_params.end(); ++p) { + if ( p->Name() == name ) { + p->incrCount(); + return(&(*p)); + } + } + cout << " Param " << name << " is required ! " << endl; + exit(1); +} + +Param * Parser::getParam(const string& name, const size_t n) { + size_t count = 0; + for (std::list::iterator p = m_params.begin(); p != m_params.end(); ++p) { + if (p->Name() == name) { + if (count == n ) { + p->incrCount(); + return(&(*p)); + } else { + ++count; + } + } + } + cout << n <<"th param " << name << " does not exist ! " << endl; + exit(1); +} + +Param * Parser::getParam(const string& name, const size_t n, const size_t m) { + size_t global_count = 0; + for (std::list::iterator p = m_params.begin(); p != m_params.end(); ++p) { + if (p->Name() == name && global_count >= n && global_count <= m) { + p->incrCount(); + return(&(*p)); + } + global_count = global_count + 1; + } + cout << " param " << name << " does not exist for selected mixture ! " << endl; + exit(1); +} + +// Non-existing method in cantera version +Param * Parser::getParam(const string& name, const size_t n, const size_t m, const size_t l) { + size_t global_count = 0; + size_t count = 0; + for (std::list::iterator p = m_params.begin(); p != m_params.end(); ++p) { + if (p->Name() == name && global_count >=n && global_count <=m) { + if (count == l ) { + p->incrCount(); + return(&(*p)); + } else { + ++count; + } + } + global_count = global_count + 1; + } + cout << n <<"th param " << name << " does not exist ! " << endl; + exit(1); +} + + +size_t Parser::getParamNumber(const string& name, const size_t n) { + size_t global_count = 0; + size_t param_count = 0; + for (std::list::iterator p = m_params.begin(); p != m_params.end(); ++p) { + if (p->Name() == name) { + if (param_count == n) { + return(global_count); + } + param_count = param_count + 1; + } + global_count = global_count + 1; + } + return(string::npos); +} + +bool Parser::checkParam(const string& name) { + for (std::list::iterator p = m_params.begin(); p != m_params.end(); ++p) { + if ( p->Name() == name ) { + p->incrCount(); + return(true); + } + } + return(false); +} + +// Non-existing method in cantera version +bool Parser::checkParam(const string& name, const size_t n, const size_t m) { + size_t global_count = 0; + for (std::list::iterator p = m_params.begin(); p != m_params.end(); ++p) { + if ( p->Name() == name && global_count >= n && global_count <= m) { + p->incrCount(); + return(true); + } + global_count = global_count + 1; + } + return(false); +} + + +size_t Parser::nbParamOccurence(const string& name) { + size_t count = 0; + for (std::list::iterator p = m_params.begin(); p != m_params.end(); ++p) { + if ( p->Name() == name ) { + ++count; + } + } + return(count); +} + +void Parser::parseFile(const string& file) { + +// Disclaimer + //cout << "--------------------------------------------" << endl; + //cout << " Parsing input file "+ file<< endl; + //cout << "--------------------------------------------" << endl; + +// File exist ? + ifstream inputfile(file); + if (!inputfile.good()) { + cout << "------------------------------------------------------" << endl; + cout << " Parser error: input file "+file+" does not exist !" << endl; + cout << "------------------------------------------------------" << endl; + exit(1); + } + +// Loop on lines + bool goodParam; + while (inputfile.good()) { + string line; + Param buffer_param; + goodParam = false; + getline(inputfile,line); + if (addParamFromLine(buffer_param,line)) { + m_params.push_back(buffer_param); + m_count += 1; + //i_count.push_back(m_count); + } + } + +// Print params +// for (std::list::iterator p = m_params.begin(); p != m_params.end(); ++p) +// p->print(); + +} + +bool Parser::addParamFromLine(Param& param,const string& line) { + // look for a hash (Comment operator) and trim + size_t hashPos = line.find_first_of("!",0); + string trimmed_line = line.substr(0,hashPos); + + // look for first character /= of "=" + string delimiters = " \t="; + size_t beg = trimmed_line.find_first_not_of(delimiters,0); + + // Empty line + if (beg == string::npos) return(false); + + // look for "=" and store Param name + size_t delpos = trimmed_line.find_first_of(delimiters,beg); + param.setName(trimmed_line.substr(beg,delpos-beg)); + + // look for parameter arguments, separated by space + trimmed_line = trimmed_line.substr(delpos+2,trimmed_line.size()); + + // Remove initial spaces + beg = trimmed_line.find_first_not_of(" ",0); + size_t end = trimmed_line.find_last_not_of(" \t"); + trimmed_line = trimmed_line.substr(beg,end); + + // Loop on arguments + while (!(beg == string::npos)) { + beg = trimmed_line.find_first_of(" ",0); + if (!(beg == string::npos)) { + param.addArgs(trimmed_line.substr(0,beg)); + trimmed_line = trimmed_line.substr(beg,trimmed_line.size()); + size_t space = trimmed_line.find_first_not_of(" ",0); + if (!(space == string::npos)) { + trimmed_line = trimmed_line.substr(space,trimmed_line.size()); + } + } else { + param.addArgs(trimmed_line.substr(0,trimmed_line.size())); + } + } + return(true); +} diff --git a/src/clib/ctonedim.cpp b/src/clib/ctonedim.cpp index cc53c4074fe..e5d415f160c 100644 --- a/src/clib/ctonedim.cpp +++ b/src/clib/ctonedim.cpp @@ -518,10 +518,11 @@ extern "C" { } } - int sim1D_solve(int i, int loglevel, int refine_grid) + int sim1D_solve(int i, int loglevel, const char* refine_grid) { try { - bool r = (refine_grid == 0 ? false : true); + // bool r = (refine_grid == 0 ? false : true); + string r = (std::strcmp(refine_grid, "remesh") ? "disabled" : "refine"); SimCabinet::at(i)->solve(loglevel, r); return 0; } catch (...) { diff --git a/src/extensions/pythonShim.cpp b/src/extensions/pythonShim.cpp index e5c1f0d5f67..d8f70ff2275 100644 --- a/src/extensions/pythonShim.cpp +++ b/src/extensions/pythonShim.cpp @@ -72,7 +72,7 @@ void loadCanteraPython() const char* venv_path = getenv("VIRTUAL_ENV"); if (venv_path != nullptr) { PyConfig pyconf; - pyconf.buffered_stdio = 0; + // pyconf.buffered_stdio = 0; PyConfig_InitPythonConfig(&pyconf); #ifdef _WIN32 diff --git a/src/kinetics/CustomKinetics.cpp b/src/kinetics/CustomKinetics.cpp new file mode 100644 index 00000000000..bd03c243077 --- /dev/null +++ b/src/kinetics/CustomKinetics.cpp @@ -0,0 +1,58 @@ +/** + * @file CustomKinetics.cpp + * + * @ingroup chemkinetics + */ + +// +// Author: Q. Cazeres, A. Felden, P. Pepiot +// +// +#include "cantera/kinetics/CustomKinetics.h" +// #include "cantera/kinetics/Kinetics.h" +#include "cantera/thermo/ThermoPhase.h" + +#include +#include + +using namespace std; + +namespace Cantera +{ + CustomKinetics::CustomKinetics() : BulkKinetics() + { + printf("WARNING: Using customized kinetics from f90 file.\n"); + handle = dlopen("customkinetics.so", RTLD_LAZY); + + // load symbol + ck = (ck_t) dlsym(handle, "customkinetics_"); + + } + + void CustomKinetics::get_wdot_reduced(double* wdot) + { + + double P = thermo().pressure(); + double T = thermo().temperature(); + // New yarc2 format + //double rho = thermo().density(); + const double* m_y = thermo().massFractions(); + + ck(&P,&T,&m_y[0],&wdot[0]); + + // New yarc2 format + //ck(&P,&T,&rho,&m_y[0],&wdot[0]); + + // Old yarc format + //mol/kmol conversion cantera is in kmol + for (size_t i=0;i namespace Cantera @@ -35,6 +37,7 @@ KineticsFactory::KineticsFactory() { addDeprecatedAlias("surface", "surf"); reg("edge", []() { return new EdgeKinetics(); }); addDeprecatedAlias("edge", "Edge"); + reg("custom", []() { return new CustomKinetics(); }); } KineticsFactory* KineticsFactory::factory() { diff --git a/src/oneD/Boundary1D.cpp b/src/oneD/Boundary1D.cpp index d6395a7da5b..ae4c78d3a2a 100644 --- a/src/oneD/Boundary1D.cpp +++ b/src/oneD/Boundary1D.cpp @@ -35,10 +35,19 @@ void Boundary1D::_init(size_t n) Domain1D& r = container().domain(m_index-1); if (!r.isConnector()) { // multi-point domain m_left_nv = r.nComponents(); - if (m_left_nv > c_offset_Y) { - m_left_nsp = m_left_nv - c_offset_Y; - } else { - m_left_nsp = 0; + + if (domainType() == "flamelet-flow") { + if (m_left_nv > c_offset_Yflamelet) { + m_left_nsp = m_left_nv - c_offset_Yflamelet; + } else { + m_left_nsp = 0; + } + }else{ + if (m_left_nv > c_offset_Y) { + m_left_nsp = m_left_nv - c_offset_Y; + } else { + m_left_nsp = 0; + } } m_flow_left = dynamic_cast(&r); if (m_flow_left != nullptr) { @@ -56,10 +65,19 @@ void Boundary1D::_init(size_t n) Domain1D& r = container().domain(m_index+1); if (!r.isConnector()) { // multi-point domain m_right_nv = r.nComponents(); - if (m_right_nv > c_offset_Y) { - m_right_nsp = m_right_nv - c_offset_Y; - } else { - m_right_nsp = 0; + + if (domainType() == "flamelet-flow") { + if (m_right_nv > c_offset_Yflamelet) { + m_right_nsp = m_right_nv - c_offset_Yflamelet; + } else { + m_right_nsp = 0; + } + }else{ + if (m_right_nv > c_offset_Y) { + m_right_nsp = m_right_nv - c_offset_Y; + } else { + m_right_nsp = 0; + } } m_flow_right = dynamic_cast(&r); if (m_flow_right != nullptr) { @@ -143,6 +161,25 @@ void Inlet1D::setMoleFractions(const double* xin) } } +void Inlet1D::setMassFractions(const std::string& xin) +{ + m_xstr = xin; + if (m_flow) { + m_flow->phase().setMassFractionsByName(xin); + m_flow->phase().getMassFractions(m_yin.data()); + needJacUpdate(); + } +} + +void Inlet1D::setMassFractions(const double* xin) +{ + if (m_flow) { + m_flow->phase().setMassFractions(xin); + m_flow->phase().getMassFractions(m_yin.data()); + needJacUpdate(); + } +} + void Inlet1D::init() { _init(0); @@ -188,17 +225,31 @@ void Inlet1D::eval(size_t jg, double* xg, double* rg, double* xb = xg + m_flow->loc(); double* rb = rg + m_flow->loc(); - // The first flow residual is for u. This, however, is not modified by - // the inlet, since this is set within the flow domain from the - // continuity equation. - - if (m_flow->doEnergy(0)) { - // The third flow residual is for T, where it is set to T(0). Subtract - // the local temperature to hold the flow T to the inlet T. - rb[c_offset_T] -= m_temp; - } else { - rb[c_offset_T] -= m_flow->T_fixed(0); - } + if ( m_flow->nEq() == 1 ) { // Solving in mixture fraction space + if (m_flow->doEnergy(0)) { + // The third flow residual is for T, where it is set to T(0). Subtract + // the local temperature to hold the flow T to the inlet T. + rb[c_offset_Tflamelet] -= m_temp; + } else { + rb[c_offset_Tflamelet] -= m_flow->T_fixed(0); + } + for (size_t k = 0; k < m_nsp; k++) { + if (k != m_flow_right->leftExcessSpecies()) { + rb[c_offset_Yflamelet+k] -= m_yin[k]; + } + } + } else { // Phisical space + // The first flow residual is for u. This, however, is not modified by + // the inlet, since this is set within the flow domain from the + // continuity equation. + + if (m_flow->doEnergy(0)) { + // The third flow residual is for T, where it is set to T(0). Subtract + // the local temperature to hold the flow T to the inlet T. + rb[c_offset_T] -= m_temp; + } else { + rb[c_offset_T] -= m_flow->T_fixed(0); + } if (m_flow->isFree()) { // if the flow is a freely-propagating flame, mdot is not specified. @@ -226,39 +277,54 @@ void Inlet1D::eval(size_t jg, double* xg, double* rg, rb[c_offset_U] = m_flow->density(0) * xb[c_offset_U] - m_mdot; } - // add the convective term to the species residual equations - for (size_t k = 0; k < m_nsp; k++) { - if (k != m_flow_right->leftExcessSpecies()) { - rb[c_offset_Y+k] += m_mdot*m_yin[k]; + // add the convective term to the species residual equations + for (size_t k = 0; k < m_nsp; k++) { + if (k != m_flow_right->leftExcessSpecies()) { + rb[c_offset_Y+k] += m_mdot*m_yin[k]; + } } } } else { // right inlet (should only be used for counter-flow flames) // Array elements corresponding to the last point in the flow domain + double* rb = rg + loc() - m_flow->nComponents(); double* xb = xg + loc() - m_flow->nComponents(); size_t last_index = m_flow->nPoints() - 1; + if (m_flow->nEq() == 1 ) { // mixture fraction space + if (m_flow->doEnergy(m_flow->nPoints() - 1)) { + rb[c_offset_Tflamelet] -= m_temp; // T + } else { + rb[c_offset_Tflamelet] -= m_flow->T_fixed(m_flow->nPoints() - 1); + } + for (size_t k = 0; k < m_nsp; k++) { + if (k != m_flow_left->rightExcessSpecies()) { + rb[c_offset_Yflamelet+k] -= m_yin[k]; + } + } + } else { // physical space rb[c_offset_V] -= m_V0; - if (m_flow->doEnergy(m_flow->nPoints() - 1)) { - rb[c_offset_T] -= m_temp; // T - } else { - rb[c_offset_T] -= m_flow->T_fixed(m_flow->nPoints() - 1); - } + if (m_flow->doEnergy(m_flow->nPoints() - 1)) { + rb[c_offset_T] -= m_temp; // T + } else { + rb[c_offset_T] -= m_flow->T_fixed(m_flow->nPoints() - 1); + } - if (m_flow->twoPointControlEnabled()) { // For point control adjustments - // At the right boundary, the mdot is dictated by the velocity at the right - // boundary, which comes from the Uo variable. The variable Uo is the - // left-moving velocity and has a negative value, so the mass flow has to be - // negated to give a positive value when using Uo. - m_mdot = -m_flow->density(last_index) * xb[c_offset_Uo]; - } - rb[c_offset_U] += m_mdot; + if (m_flow->twoPointControlEnabled()) { // For point control adjustments + // At the right boundary, the mdot is dictated by the velocity at the right + // boundary, which comes from the Uo variable. The variable Uo is the + // left-moving velocity and has a negative value, so the mass flow has to be + // negated to give a positive value when using Uo. + m_mdot = -m_flow->density(last_index) * xb[c_offset_Uo]; + } + rb[c_offset_U] += m_mdot; - for (size_t k = 0; k < m_nsp; k++) { - if (k != m_flow_left->rightExcessSpecies()) { - rb[c_offset_Y+k] += m_mdot * m_yin[k]; + for (size_t k = 0; k < m_nsp; k++) { + if (k != m_flow_left->rightExcessSpecies()) { + rb[c_offset_Y+k] += m_mdot * m_yin[k]; + } } } } @@ -415,10 +481,18 @@ void Outlet1D::eval(size_t jg, double* xg, double* rg, integer* diagg, int* db = diag - nc; size_t last = m_flow_left->nPoints() - 1; - if (m_flow_left->doEnergy(last)) { - rb[c_offset_T] = xb[c_offset_T] - xb[c_offset_T - nc]; // zero T gradient + if (m_flow_left->nEq() == 1) { // mixture fraction space + if (m_flow_left->doEnergy(last)) { + rb[c_offset_Tflamelet] = xb[c_offset_Tflamelet] - xb[c_offset_Tflamelet - nc]; // zero T gradient + } else { + rb[c_offset_Tflamelet] = xb[c_offset_Tflamelet] - m_flow_left->T_fixed(last); + } } else { - rb[c_offset_T] = xb[c_offset_T] - m_flow_left->T_fixed(last); + if (m_flow_left->doEnergy(last)) { + rb[c_offset_T] = xb[c_offset_T] - xb[c_offset_T - nc]; // zero T gradient + } else { + rb[c_offset_T] = xb[c_offset_T] - m_flow_left->T_fixed(last); + } } size_t kSkip = c_offset_Y + m_flow_left->rightExcessSpecies(); for (size_t k = c_offset_Y; k < nc; k++) { diff --git a/src/oneD/Domain1D.cpp b/src/oneD/Domain1D.cpp index c5c2790d4f8..61bd1f1c338 100644 --- a/src/oneD/Domain1D.cpp +++ b/src/oneD/Domain1D.cpp @@ -16,9 +16,9 @@ namespace Cantera { -Domain1D::Domain1D(size_t nv, size_t points, double time) +Domain1D::Domain1D(size_t nv, size_t points, double time, size_t nsoot, size_t nfic, size_t neq) { - resize(nv, points); + resize(nv+nsoot+nfic+neq, points); } Domain1D::~Domain1D() diff --git a/src/oneD/DomainFactory.cpp b/src/oneD/DomainFactory.cpp index de164e3a32b..bdc60ea4e15 100644 --- a/src/oneD/DomainFactory.cpp +++ b/src/oneD/DomainFactory.cpp @@ -6,8 +6,8 @@ #include "cantera/oneD/DomainFactory.h" #include "cantera/oneD/Boundary1D.h" #include "cantera/oneD/Flow1D.h" +#include "cantera/oneD/Flamelet.h" #include "cantera/oneD/IonFlow.h" -#include "cantera/oneD/StFlow.h" #include "cantera/transport/Transport.h" namespace Cantera @@ -18,66 +18,76 @@ std::mutex DomainFactory::domain_mutex; DomainFactory::DomainFactory() { - reg("inlet", [](shared_ptr solution, const string& id) { + reg("inlet", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { return new Inlet1D(solution, id); }); - reg("empty", [](shared_ptr solution, const string& id) { + reg("empty", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { return new Empty1D(solution, id); }); - reg("symmetry-plane", [](shared_ptr solution, const string& id) { + reg("symmetry-plane", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { return new Symm1D(solution, id); }); - reg("outlet", [](shared_ptr solution, const string& id) { + reg("outlet", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { return new Outlet1D(solution, id); }); - reg("outlet-reservoir", [](shared_ptr solution, const string& id) { + reg("outlet-reservoir", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { return new OutletRes1D(solution, id); }); - reg("surface", [](shared_ptr solution, const string& id) { + reg("surface", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { return new Surf1D(solution, id); }); - reg("reacting-surface", [](shared_ptr solution, const string& id) { + reg("reacting-surface", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { return new ReactingSurf1D(solution, id); }); - reg("gas-flow", [](shared_ptr solution, const string& id) { - return new Flow1D(solution, id); + reg("gas-flow", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { + return new Flow1D(solution, id, sections, fictives); }); - reg("legacy-flow", [](shared_ptr solution, const string& id) { - return new StFlow(solution, id); + reg("legacy-flow", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { + return new Flow1D(solution, id, sections, fictives); }); - reg("ion-flow", [](shared_ptr solution, const string& id) { + reg("ion-flow", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { return new IonFlow(solution, id); }); - reg("free-flow", [](shared_ptr solution, const string& id) { + reg("free-flow", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { Flow1D* ret; if (solution->transport()->transportModel() == "ionized-gas") { ret = new IonFlow(solution, id); } else { - ret = new Flow1D(solution, id); + ret = new Flow1D(solution, id, sections, fictives); } ret->setFreeFlow(); return ret; }); - reg("axisymmetric-flow", [](shared_ptr solution, const string& id) { + reg("axisymmetric-flow", [](shared_ptr solution, const string& id, const size_t& sections = 0 , const size_t& fictives = 0) { Flow1D* ret; if (solution->transport()->transportModel() == "ionized-gas") { ret = new IonFlow(solution, id); } else { - ret = new Flow1D(solution, id); + ret = new Flow1D(solution, id, sections, fictives); } ret->setAxisymmetricFlow(); return ret; }); - reg("unstrained-flow", [](shared_ptr solution, const string& id) { + reg("unstrained-flow", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { Flow1D* ret; if (solution->transport()->transportModel() == "ionized-gas") { ret = new IonFlow(solution, id); } else { - ret = new Flow1D(solution, id); + ret = new Flow1D(solution, id, sections, fictives); } ret->setUnstrainedFlow(); return ret; }); + reg("flamelet-flow", [](shared_ptr solution, const string& id, const size_t& sections = 0, const size_t& fictives = 0) { + Flow1D* ret; + if (solution->transport()->transportModel() == "ionized-gas") { + ret = new IonFlow(solution, id); + } else { + ret = new Flamelet(solution, id, sections, fictives); // neq = 1 for flamelet + } + ret->setFlameletFlow(); + return ret; + }); } DomainFactory* DomainFactory::factory() diff --git a/src/oneD/Flamelet.cpp b/src/oneD/Flamelet.cpp new file mode 100644 index 00000000000..7791032ff18 --- /dev/null +++ b/src/oneD/Flamelet.cpp @@ -0,0 +1,467 @@ +// ! Flamelet definitions +// +#include "cantera/numerics/funcs.h" +#include "cantera/base/SolutionArray.h" +#include "cantera/oneD/Flow1D.h" +#include "cantera/oneD/refine.h" +#include "cantera/transport/Transport.h" +#include "cantera/transport/TransportFactory.h" +#include "cantera/numerics/funcs.h" +#include "cantera/base/global.h" +#include "cantera/base/Parser.h" + +#include + +#include "cantera/oneD/Flamelet.h" +// import erf function +using namespace std; + +namespace Cantera +{ + +Flamelet::Flamelet(IdealGasPhase* ph, size_t nsp, size_t nsoot, size_t nfic, size_t neq, size_t points) : + Flow1D(ph, nsp, nsoot, nfic, neq, points) { + m_dovisc = true; + m_updateChi = true; + m_do_unityLewisNumber = true; + } + +Flamelet::Flamelet(shared_ptr th, size_t nsp, size_t nsoot, size_t nfic, size_t neq, size_t points) + : Flow1D(th.get(), nsp, nsoot, nfic, neq, points) { + m_solution = Solution::create(); + m_solution->setThermo(th); + } + +Flamelet::Flamelet(shared_ptr sol, const string& id, size_t nsoot, size_t nfic, size_t neq, size_t points) + : Flow1D(sol->thermo().get(), sol->thermo()->nSpecies(), nsoot, nfic, neq, points) { + m_solution = sol; + m_id = id; + m_kin = m_solution->kinetics().get(); + m_trans = m_solution->transport().get(); + + m_solution->registerChangedCallback(this, [this]() { + setKinetics(m_solution->kinetics()); + setTransport(m_solution->transport()); + }); + + if (m_trans->transportModel() == "none") { + // @deprecated + warn_deprecated("Flow1D", + "An appropriate transport model\nshould be set when instantiating the " + "Solution ('gas') object.\nImplicit setting of the transport model " + "is deprecated and\nwill be removed after Cantera 3.0."); + setTransportModel("mixture-averaged"); + } + } + +Flamelet::~Flamelet() {} + +void Flamelet::resize(size_t ncomponents, size_t points) +{ + Domain1D::resize(ncomponents, points); + m_rho.resize(m_points, 0.0); + m_wtm.resize(m_points, 0.0); + m_cp.resize(m_points, 0.0); + m_hr.resize(m_points, 0.0); + m_h.resize(m_points, 0.0); + m_tcon.resize(m_points, 0.0); + m_visc.resize(m_points, 0.0); + h_RT.resize(m_nsp, 0.0); + cp_R.resize(m_nsp, 0.0); + m_hk.resize(m_nsp, m_points, 0.0); + m_Lek.resize(m_nsp*m_points); + + m_diff.resize(m_nsp*m_points); + if (m_do_multicomponent) { + m_multidiff.resize(m_nsp*m_nsp*m_points); + m_dthermal.resize(m_nsp, m_points, 0.0); + } + + m_wdot.resize(m_nsp,m_points, 0.0); + m_do_energy.resize(m_points,false); + m_qdotRadiation.resize(m_points, 0.0); + m_fixedtemp.resize(m_points); + + m_dz.resize(m_points-1); + m_z.resize(m_points); + m_chi.resize(m_points); + m_updateChi = true; +} + +void Flamelet::eval(size_t jg, double* xg, + double* rg, integer* diagg, double rdt) +{ + // if evaluating a Jacobian, and the global point is outside + // the domain of influence for this domain, then skip + // evaluating the residual + if (jg != npos && (jg + 1 < firstPoint() || jg > lastPoint() + 1)) { + return; + } + + // if evaluating a Jacobian, compute the steady-state residual + if (jg != npos) { + rdt = 0.0; + } + + // start of local part of global arrays + double* x = xg + loc(); + double* rsd = rg + loc(); + integer* diag = diagg + loc(); + + size_t jmin, jmax; + + if (jg == npos) { // evaluate all points + jmin = 0; + jmax = m_points - 1; + } else { // evaluate points for Jacobian + size_t jpt = (jg == 0) ? 0 : jg - firstPoint(); + jmin = std::max(jpt, 1) - 1; + jmax = std::min(jpt+1,m_points-1); + } + + // properties are computed for grid points from j0 to j1 + size_t j0 = std::max(jmin, 1) - 1; + size_t j1 = std::min(jmax+1,m_points-1); + + //----------------------------------------------------- + // update properties + //----------------------------------------------------- + // update thermodynamic properties + updateThermo(x, j0, j1); + + // update transport properties + if (jg == npos) { + updateTransport(x, j0, j1); + } + + //--------------------------------------------------- + // evaluate the chi profile + //--------------------------------------------------- + if ( m_updateChi ) setChi(); + + //---------------------------------------------------- + // evaluate the residual equations at all required + // grid points + //---------------------------------------------------- + + for (size_t j = jmin; j <= jmax; j++) { + //---------------------------------------------- + // left boundary + //---------------------------------------------- + + if (j == 0) { + + // these may be modified by a boundary object + rsd[index(c_offset_Tflamelet, j)] = T(x,j); + + // The default boundary condition for species is zero + // flux. However, the boundary object may modify this. + double sum = 0.0; + for ( size_t k = 0; k < m_nsp; k++) { + sum += Y(x,k,0); + rsd[index(c_offset_Yflamelet + k, j)] = Y(x,k,j); + } + rsd[index(c_offset_Yflamelet + leftExcessSpecies(), 0)] = 1.0 - sum; + } + + //---------------------------------------------- + // right boundary + //---------------------------------------------- + + else if (j == m_points - 1) { + + // the boundary object connected to the right of this + // one may modify or replace these equations. The + // default boundary conditions are zero u, V, and T, + // and zero diffusive flux for all species. + rsd[index(c_offset_Tflamelet,j)] = T(x,j); + + double sum = 0.0; + for (size_t k = 0; k < m_nsp; k++) { + sum += Y(x,k,j); + rsd[index(c_offset_Yflamelet + k ,j)] = Y(x,k,j); + } + rsd[index(c_offset_Yflamelet + rightExcessSpecies(), j)] = 1.0 - sum; + diag[index(c_offset_Yflamelet + rightExcessSpecies(), j)] = 0; + } + + //------------------------------------------ + // interior points + //------------------------------------------ + + else { + + //------------------------------------------------- + // Species equations + // + // rho * dY/dt = 1/2 * 1/Le_k * \rho * \chi * d^2Y/dz^2 + // + 1/4 * (1/Le_k - 1 ) * ( d\rho\chi/dz + \rho * \chi * Cp * 1/\lambda * d(\lambda * 1/Cp)/dz ) + // + M_k * \omega_k + // + // Temperature equation + // + // rho * dT/dt = 1/2 * \rho * \chi * d^2T/dz^2 + 1/2 * \rho * \chi 1/Cp * dCp/dz * dT/dz + HR + // + 1/2 * \rho * \chi 1/Cp * dT/dz * ∑_k Cp_k dYk/dz + //------------------------------------------------- + getWdot(x,j); + + double drhoChidZ = (m_rho[j+1]*chi(j+1) - m_rho[j-1]*chi(j-1))/(z(j+1) - z(j-1)); + double dlambdaoverCpdZ = (m_tcon[j+1]/m_cp[j+1] - m_tcon[j-1]/m_cp[j-1])/(z(j+1) - z(j-1)); + + for (size_t k = 0; k < m_nsp; k++) { + rsd[index(c_offset_Yflamelet + k, j)] = + m_wt[k]*wdot(k,j)/m_rho[j] + + 0.5*chi(j)/Lek(k,j)*d2Ydz2(x,k,j) + + 0.25 / m_rho[j] * (1.0/Lek(k,j) - 1.0) + * ( drhoChidZ + m_rho[j] * chi(j) * m_cp[j] / m_tcon[j] * dlambdaoverCpdZ ) + * cdif1(x,c_offset_Yflamelet+k,j) + - rdt*(Y(x,k,j) - Y_prev(k,j)); + diag[index(c_offset_Yflamelet + k, j)] = 1; + } + + // heat release term + setGas(x,j); + + m_thermo->getEnthalpy_RT_ref(&h_RT[0]); + m_thermo->getCp_R_ref(&cp_R[0]); + + double dCpdZ; + double sum = 0.0; + double sum2 = 0.0; + for (size_t k = 0; k < m_nsp; k++) { + sum += wdot(k,j) * h_RT[k]; + sum2 += cp_R[k] / m_wt[k] * GasConstant / Lek(k,j) + * cdif1(x,c_offset_Yflamelet+k,j); + } + sum *= -T(x,j) * GasConstant / m_cp[j]; // consistent units + m_hr[j] = sum*m_cp[j]; + dCpdZ = (m_cp[j+1] - m_cp[j-1])/(z(j+1) - z(j-1)); + + rsd[index(c_offset_Tflamelet, j)] = + sum/m_rho[j] + + 0.5*chi(j)*d2Tdz2(x,j) + + 0.5*chi(j)/m_cp[j]*dCpdZ*cdif1(x,c_offset_Tflamelet,j) + + 0.5*chi(j)/m_cp[j]*sum2*cdif1(x,c_offset_Tflamelet,j) + - rdt*(T(x,j) - T_prev(j)); + diag[index(c_offset_Tflamelet, j)] = 1; + } + } +} + +string Flamelet::componentName(size_t n) const +{ + switch (n) { + case c_offset_Tflamelet: + return "T"; + default: + if (n >= c_offset_Yflamelet && n < (c_offset_Yflamelet + m_nsp)) { + return m_thermo->speciesName(n - c_offset_Yflamelet); + } else { + return ""; + } + } +} + +size_t Flamelet::componentIndex(const string &name) const +{ + if (name=="T") { + return c_offset_Tflamelet; + } else { + for (size_t n=m_neq; nsetTemperature(T(x,j)); + const double* yy = x + m_nv*j + c_offset_Yflamelet; + m_thermo->setMassFractions_NoNorm(yy); + m_thermo->setPressure(m_press); +} + +void Flamelet::resetBadValues(double* xg) +{ + double* x = xg + loc(); + for (size_t j = 0; j < m_points; j++) { + double* Y = x + m_nv*j + c_offset_Yflamelet; + m_thermo->setMassFractions(Y); + m_thermo->getMassFractions(Y); + } +} + +vector Flamelet::dCpdT(const Array2D sol) +{ + vector dCpdT; + double delta_T = 1.0; + double cp_l, cp_u; + double * yspec = new double[m_nsp]; + m_thermo->setPressure(m_press); + for (size_t n = 0; n < m_points; n++) { + for (size_t k = 0; k < m_nsp; k++) { + yspec[k] = sol(k+1,n); + } + m_thermo->setMassFractions_NoNorm(yspec); + m_thermo->setTemperature(sol(0,n)-delta_T); + cp_l = m_thermo->cp_mass(); + m_thermo->setTemperature(sol(0,n)+delta_T); + cp_u = m_thermo->cp_mass(); + dCpdT.push_back( ( cp_u - cp_l ) / ( 2.0 * delta_T )); + } + return dCpdT; + delete[] yspec; +} + +vector Flamelet::d2CpdT2(const Array2D sol) +{ + vector d2CpdT2; + double delta_T = 1.0; + double cp_l, cp_c, cp_u; + double * yspec = new double[m_nsp]; + m_thermo->setPressure(m_press); + for (size_t n = 0; n < m_points; n++) { + for (size_t k = 0; k < m_nsp; k++) { + yspec[k] = sol(k+1,n); + } + m_thermo->setMassFractions_NoNorm(yspec); + m_thermo->setTemperature(sol(0,n)); + cp_c = m_thermo->cp_mass(); + m_thermo->setTemperature(sol(0,n)-2.0*delta_T); + cp_l = m_thermo->cp_mass(); + m_thermo->setTemperature(sol(0,n)+2.0*delta_T); + cp_u = m_thermo->cp_mass(); + d2CpdT2.push_back( ( cp_u + cp_l - 2.0*cp_c ) / ( 4.0 * std::pow(delta_T,2.0) )); + } + return d2CpdT2; + delete[] yspec; +} + +/** + * Set the gas state to be consistent with the solution at the + * midpoint between j and j + 1. + */ +void Flamelet::setGasAtMidpoint(const double* x, size_t j) +{ + m_thermo->setTemperature(0.5*(T(x,j)+T(x,j+1))); + const double* yyj = x + m_nv*j + c_offset_Yflamelet; + const double* yyjp = x + m_nv*(j+1) + c_offset_Yflamelet; + for (size_t k = 0; k < m_nsp; k++) { + m_ybar[k] = 0.5*(yyj[k] + yyjp[k]); + } + + m_thermo->setMassFractions_NoNorm(m_ybar.data()); + m_thermo->setPressure(m_press); +} + +void Flamelet::updateTransport(double* x, size_t j0, size_t j1) +{ + for (size_t j = j0; j < j1; j++) { + setGasAtMidpoint(x,j); + m_visc[j] = m_trans->viscosity(); + m_tcon[j] = m_trans->thermalConductivity(); + m_trans->getMixDiffCoeffs(&m_diff[j*m_nsp]); + for (size_t k = 0; k < m_nsp; k++) { + if ( m_do_unityLewisNumber ) { + m_Lek[m_nsp*j+k] = 1.0; + } else { + m_Lek[m_nsp*j+k] = m_tcon[j] / ( m_rho[j] * m_cp[j] * m_diff[j*m_nsp+k] ); + } + } + } +} + +void Flamelet::setChi() +{ + m_chi[0]=0.0; + m_chi[m_points-1]=0.0; + for (size_t j = 1; j < m_points-1; j++) { + m_chi[j] = m_chiSt * exactChi(z(j)) / exactChi(m_zSt); + } + m_updateChi = false; +} + +double Flamelet::exactChi(double zz) +{ + double p1 = fabs(2.0*zz - 1.0); + double q1 = 1.0 - p1; + return exp(-2.0 * erfinv(p1,q1) * erfinv(p1,q1)); +} + +double Flamelet::erfinv(double p1,double q1) +{ + double X,S,T,LNQ,F; + T = 0.0; + S = 0.0; + const double C = 0.5625; + const double C1 = 0.87890625; + const double C2 =-0.2302585092994045684017991454684364e3; + const double R = 0.8862269254527580136490837416705726; + const double A[7] = {0.841467547194693616e-01,0.160499904248262200e1,0.809451641478547505e1,0.164273396973002581e2,0.154297507839223692e2,0.669584134660994039e1,0.108455979679682472e1}; + const double B[7] = {.352281538790042405e-2,0.293409069065309557,0.326709873508963100e1,0.123611641257633210e2,0.207984023857547070e2,0.170791197367677668e2,0.669253523595376683e1}; + const double A1[7] = {0.552755110179178015e2,0.657347545992519152e3,0.124276851197202733e4,0.818859792456464820e3,0.234425632359410093e3,0.299942187305427917e2,0.140496035731853946e1}; + const double B1[6] = {0.179209835890172156e3,0.991315839349539886e3,0.138271033653003487e4,0.764020340925985926e3,0.194354053300991923e3,0.228139510050586581e2}; + + const double A2[7] ={0.500926197430588206e1,0.111349802614499199e3,0.353872732756132161e3,0.356000407341490731e3,0.143264457509959760e3,0.240823237485307567e2,0.140496035273226366e1}; + const double B2[6]= {0.209004294324106981e2,0.198607335199741185e3,0.439311287748524270e3,0.355415991280861051e3,0.123303672628828521e3,0.186060775181898848e2}; + const double A3[11]={0.237121026548776092e4,0.732899958728969905e6,0.182063754893444775e7,0.269191299062422172e7,0.304817224671614253e7,0.130643103351072345e7,0.296799076241952125e6,0.457006532030955554e5,0.373449801680687213e4,0.118062255483596543e3,0.100000329157954960e1}; + const double B3[10]={0.851911109952055378e6,0.194746720192729966e7,0.373640079258593694e7,0.397271370110424145e7,0.339457682064283712e7,0.136888294898155938e7,0.303357770911491406e6,0.459721480357533823e5,0.373762573565814355e4,0.118064334590001264e3}; + const double A4[9]={0.154269429680540807e12,0.430207405012067454e12,0.182623446525965017e12,0.248740194409838713e11,0.133506080294978121e10,0.302446226073105850e08,0.285909602878724425e6,0.101789226017835707e04,0.100000004821118676e1}; + const double B4[9]={0.220533001293836387e12,0.347822938010402687e12,0.468373326975152250e12,0.185251723580351631e12,0.249464490520921771e11,0.133587491840784926e10,0.302480682561295591e08,0.285913799407861384e6,0.101789250893050230e04}; + + if (p1 <= 0.0 || q1 <= 0.0) { + return 0.0; + } + if (p1 <= 0.75) { + X = C - p1*p1; + S = (((((A[0]*X + A[1])*X + A[2])*X + A[3])*X + A[4])*X + A[5])*X + A[6]; + T = ((((((B[0]*X + B[1])*X + B[2])*X + B[3])*X + B[4])*X + B[5])*X + B[6])*X+1.0; + X=p1*(S/T); + F=erf(X)-p1; + return X-R*exp(X*X)*F; + } + // p = [0,0.75] + else if (p1 >0.75 && p1 <= 0.9375) { + X = C1 - p1*p1; + if (X < 0.1) { + S = ((((((A1[0]*X + A1[1])*X + A1[2])*X + A1[3])*X+ A1[4])*X + A1[5])*X + A1[6]); + T = ((((((B1[0]*X + B1[1])*X + B1[2])*X + B1[3])*X+ B1[4])*X + B1[5])*X +1.0); + } + else if (X>0.1) { + S = ((((((A2[0]*X + A2[1])*X + A2[2])*X + A2[3])*X+ A2[4])*X + A2[5])*X + A2[6]); + T = ((((((B2[0]*X + B2[1])*X + B2[2])*X + B2[3])*X+ B2[4])*X + B2[5])*X + 1.0); + } + X = p1*(S/T); + T = exp(X*X)*erfc(X)-exp(X*X)*q1; + return X + R*T; + } + else if (p1 > 0.9375) { + LNQ = log(q1); + X= 1.0 / pow(-LNQ,0.5); + if (LNQ > C2) { + S = (((((((((A3[0]*X + A3[1])*X + A3[2])*X + A3[3])*X + A3[4])*X+ A3[5])*X + A3[6])*X + A3[7])*X + A3[8])*X+ A3[9])*X + A3[10]; + T = (((((((((B3[0]*X + B3[1])*X + B3[2])*X + B3[3])*X + B3[4])*X+ B3[5])*X + B3[6])*X + B3[7])*X + B3[8])*X + B3[9])*X + 1.0; + } + else if (LNQ < C2) { + S = (((((((A4[0]*X + A4[1])*X + A4[2])*X + A4[3])*X + A4[4])*X+ A4[5])*X + A4[6])*X + A4[7])*X + A4[8]; + T = ((((((((B4[0]*X + B4[1])*X + B4[2])*X + B4[3])*X + B4[4])*X+ B4[5])*X + B4[6])*X + B4[7])*X + B4[8])*X + 1.0; + } + X=S/(X*T); + T = exp(X*X)*erfc(X); + F = log(T) - LNQ - X*X; + return X + R*T*F; + } + else { + return -2.0; + } + +} + +} \ No newline at end of file diff --git a/src/oneD/Flow1D.cpp b/src/oneD/Flow1D.cpp index 720a7724311..d3fca653076 100644 --- a/src/oneD/Flow1D.cpp +++ b/src/oneD/Flow1D.cpp @@ -10,15 +10,20 @@ #include "cantera/transport/TransportFactory.h" #include "cantera/numerics/funcs.h" #include "cantera/base/global.h" +#include "cantera/base/Parser.h" +#include using namespace std; namespace Cantera { -Flow1D::Flow1D(ThermoPhase* ph, size_t nsp, size_t points) : - Domain1D(nsp+c_offset_Y, points), - m_nsp(nsp) +Flow1D::Flow1D(ThermoPhase* ph, size_t nsp, size_t nsoot, size_t nfic, size_t neq, size_t points) : + Domain1D(nsp, points, 0.0, nsoot, nfic, neq), // CERFACS : c_offset_Y is not added like in the official cantera release because in Domain1D.cpp we resize with nsoot and neq. + m_nsp(nsp), + m_neq(neq), + m_nsoot(nsoot), + m_nfic(nfic) { m_points = points; @@ -28,9 +33,12 @@ Flow1D::Flow1D(ThermoPhase* ph, size_t nsp, size_t points) : m_thermo = ph; size_t nsp2 = m_thermo->nSpecies(); - if (nsp2 != m_nsp) { + m_nv = m_neq + m_nsp + m_nsoot + m_nfic; // CERFACS the number of variable is number of equations + number of species + number of soot sections (soot sections are placed after the species.) + number of fictive species + + // CERFACS : I don't understand why do we do that ? nsp2 will always be different than nsp if we have soots. And even if we have soots, the domain size should already have the correct size. + if (nsp2 + m_nsoot + m_nfic != m_nsp) { m_nsp = nsp2; - Domain1D::resize(m_nsp+c_offset_Y, points); + Domain1D::resize(m_nv, points); } // make a local copy of the species molecular weight vector @@ -39,11 +47,6 @@ Flow1D::Flow1D(ThermoPhase* ph, size_t nsp, size_t points) : // set pressure based on associated thermo object setPressure(m_thermo->pressure()); - // the species mass fractions are the last components in the solution - // vector, so the total number of components is the number of species - // plus the offset of the first mass fraction. - m_nv = c_offset_Y + m_nsp; - // Turn off the energy equation at all points m_do_energy.resize(m_points,false); @@ -57,23 +60,31 @@ Flow1D::Flow1D(ThermoPhase* ph, size_t nsp, size_t points) : m_qdotRadiation.resize(m_points, 0.0); //-------------- default solution bounds -------------------- - setBounds(c_offset_U, -1e20, 1e20); // no bounds on u - setBounds(c_offset_V, -1e20, 1e20); // no bounds on V - setBounds(c_offset_T, 200.0, 2*m_thermo->maxTemp()); // temperature bounds - setBounds(c_offset_L, -1e20, 1e20); // lambda should be negative - setBounds(c_offset_E, -1e20, 1e20); // no bounds on electric field - setBounds(c_offset_Uo, -1e20, 1e20); // no bounds on Uo + if (m_neq == 1) { + setBounds(c_offset_Tflamelet, 200.0, 2*m_thermo->maxTemp()); // temperature bounds + } else { + setBounds(c_offset_U, -1e20, 1e20); // no bounds on u + setBounds(c_offset_V, -1e20, 1e20); // no bounds on V + setBounds(c_offset_T, 200.0, 2*m_thermo->maxTemp()); // temperature bounds + setBounds(c_offset_L, -1e20, 1e20); // lambda should be negative + setBounds(c_offset_E, -1e20, 1e20); // no bounds on electric field + setBounds(c_offset_Uo, -1e20, 1e20); // no bounds on Uo + } // mass fraction bounds for (size_t k = 0; k < m_nsp; k++) { - setBounds(c_offset_Y+k, -1.0e-7, 1.0e5); + setBounds(m_neq+k, -1.0e-7, 1.0e5); } //-------------------- grid refinement ------------------------- - m_refiner->setActive(c_offset_U, false); - m_refiner->setActive(c_offset_V, false); - m_refiner->setActive(c_offset_T, false); - m_refiner->setActive(c_offset_L, false); - m_refiner->setActive(c_offset_Uo, false); + if (m_neq == 1) { + m_refiner->setActive(c_offset_Tflamelet, false); + } else { + m_refiner->setActive(c_offset_U, false); + m_refiner->setActive(c_offset_V, false); + m_refiner->setActive(c_offset_T, false); + m_refiner->setActive(c_offset_L, false); + m_refiner->setActive(c_offset_Uo, false); + } vector gr; for (size_t ng = 0; ng < m_points; ng++) { @@ -85,18 +96,43 @@ Flow1D::Flow1D(ThermoPhase* ph, size_t nsp, size_t points) : m_kRadiating.resize(2, npos); m_kRadiating[0] = m_thermo->speciesIndex("CO2"); m_kRadiating[1] = m_thermo->speciesIndex("H2O"); + + // P. Wolf + //---------------------AVBP PEA initialization------------------- + AVBPReadInputPea(); + + // B. Franzelli + //---------------------AVBP thickening initialisation------------ + AVBPReadInputChem(); + + if ( m_nsoot > 0 & m_nfic > 0 ){ + throw CanteraError("Flow1D::Flow1D", + "Cannot use both fictive species and soot sections at the same time"); + } + + // E. Lameloise + //---------------------Soot computation initialisation----------- + if (m_nsoot > 0){ + initSoot(); + } + // A. Coudray + //---------------------Fictive initialisation----------- + + if (m_nfic > 0){ + initFictive(); + } } -Flow1D::Flow1D(shared_ptr th, size_t nsp, size_t points) - : Flow1D(th.get(), nsp, points) +Flow1D::Flow1D(shared_ptr th, size_t nsp, size_t nsoot, size_t nfic, size_t neq, size_t points) + : Flow1D(th.get(), nsp, nsoot, nfic, neq, points) { auto sol = Solution::create(); sol->setThermo(th); setSolution(sol); } -Flow1D::Flow1D(shared_ptr sol, const string& id, size_t points) - : Flow1D(sol->thermo().get(), sol->thermo()->nSpecies(), points) +Flow1D::Flow1D(shared_ptr sol, const string& id, size_t nsoot, size_t nfic, size_t neq, size_t points) + : Flow1D(sol->thermo().get(), sol->thermo()->nSpecies(), nsoot, nfic, neq, points) { setSolution(sol); m_id = id; @@ -162,8 +198,11 @@ void Flow1D::resize(size_t ncomponents, size_t points) m_rho.resize(m_points, 0.0); m_wtm.resize(m_points, 0.0); m_cp.resize(m_points, 0.0); + m_h.resize(m_points, 0.0); + m_hr.resize(m_points, 0.0); m_visc.resize(m_points, 0.0); m_tcon.resize(m_points, 0.0); + avbp_thick.resize(m_points,0.0); m_diff.resize(m_nsp*m_points); if (m_do_multicomponent) { @@ -180,6 +219,32 @@ void Flow1D::resize(size_t ncomponents, size_t points) m_dz.resize(m_points-1); m_z.resize(m_points); + + // P. Wolf + m_zmixfrac.resize(m_points); + + // Soot + if (m_nsoot > 0){ + sootConsumption.resize(m_nsp, m_points, 0.0); + m_soot_diff.resize(m_nsoot, m_points, 0.0); + m_soot_soret.resize(m_nsoot, m_points, 0.0); + m_qdotNucleation.resize(m_points, 0.0); + m_qdotCondensation.resize(m_nsoot, m_points, 0.0); + m_qdotCoagulation.resize(m_nsoot, m_points, 0.0); + m_qdotSg.resize(m_nsoot, m_points, 0.0); + m_qdotOxidation.resize(m_nsoot, m_points, 0.0); + } + + // Fictive species + if (m_nfic != 0){ + m_fic_diff.resize(m_nfic, m_points, 0.0); + m_fic_soret.resize(m_nfic, m_points, 0.0); + m_fictive_source_term.resize(m_nfic,m_points, 0.0); + m_fictive_oxidizer_inlet_Y.resize(m_nfic); + m_fictive_fuel_inlet_Y.resize(m_nfic); + m_fictive_schmidt.resize(m_nfic); + } + } void Flow1D::setupGrid(size_t n, const double* z) @@ -197,6 +262,17 @@ void Flow1D::setupGrid(size_t n, const double* z) } } +void Flow1D::setupGrid(size_t n) +{ + resize(m_nv, n); + + m_z[0] = 0.0; + for (size_t j = 1; j < m_points; j++) { + m_z[j] = (double) j / ( (double) (n-1) ); + m_dz[j-1] = m_z[j] - m_z[j-1]; + } +} + void Flow1D::resetBadValues(double* xg) { double* x = xg + loc(); @@ -241,6 +317,10 @@ void Flow1D::setGas(const double* x, size_t j) const double* yy = x + m_nv*j + c_offset_Y; m_thermo->setMassFractions_NoNorm(yy); m_thermo->setPressure(m_press); + // P. Wolf + if ((avbp_ipea==1)||(avbp_ipea==2)||(avbp_ipea==3)){ + calcMixFrac(x,j); + } } void Flow1D::setGasAtMidpoint(const double* x, size_t j) @@ -253,6 +333,34 @@ void Flow1D::setGasAtMidpoint(const double* x, size_t j) } m_thermo->setMassFractions_NoNorm(m_ybar.data()); m_thermo->setPressure(m_press); + // P. Wolf + if ((avbp_ipea==1)||(avbp_ipea==2)||(avbp_ipea==3)){ + calcMixFrac(x,j); + } +} + + /// Calculates and updates the mixture fraction at point j + /// WARNING: Only correct if no Carbon atoms in the oxidizer line + /// and pure fuel in the fuel line + /// Added by P. Wolf - March 2010 + /// Thanks to Alireza Najafiyazdi + +void Flow1D::calcMixFrac(const double* x, size_t j) { + size_t id_C = this->m_thermo->elementIndex("C"); // Index of C atom + size_t id_fuel = this->m_thermo->speciesIndex(avbp_fuel); // Index of fuel + double Z_C = 0.0; // passive scalar for C atom + double Z_C_F; // value of the passive scalar in fuel line + double W_C = this->m_thermo->atomicWeight(id_C); // Molecular weight of C atom + double W_fuel = this->m_thermo->molecularWeight(id_fuel); + double n_C; // Number of C atoms in each species + + for (size_t k=0; km_nsp; k++) { + n_C = this->m_thermo->nAtoms(k,id_C); + Z_C += n_C*x[index(c_offset_Y + k, j)]/this->m_thermo->molecularWeight(k); + } + Z_C = Z_C*W_C; + Z_C_F = W_C*this->m_thermo->nAtoms(id_fuel,id_C)/W_fuel; + m_zmixfrac[j] = Z_C/Z_C_F; // ie Z_C=0 in oxidizer line } void Flow1D::_finalize(const double* x) @@ -331,16 +439,24 @@ void Flow1D::eval(size_t jGlobal, double* xGlobal, double* rsdGlobal, if (m_do_radiation) { // Calculation of qdotRadiation computeRadiation(x, jmin, jmax); } + for (size_t j = jmin; j <= jmax; j++) { + AVBPcompute_local_thick(x,j); + } + // CERFACS : Do not change the eval order : Soot -> Species -> Energy evalContinuity(x, rsd, diag, rdt, jmin, jmax); evalMomentum(x, rsd, diag, rdt, jmin, jmax); + evalSoot(x, rsd, diag, rdt, jmin, jmax); + evalFictives(x, rsd, diag, rdt, jmin, jmax); + evalSpecies(x, rsd, diag, rdt, jmin, jmax); evalEnergy(x, rsd, diag, rdt, jmin, jmax); evalLambda(x, rsd, diag, rdt, jmin, jmax); evalElectricField(x, rsd, diag, rdt, jmin, jmax); evalUo(x, rsd, diag, rdt, jmin, jmax); - evalSpecies(x, rsd, diag, rdt, jmin, jmax); + } + void Flow1D::updateProperties(size_t jg, double* x, size_t jmin, size_t jmax) { // properties are computed for grid points from j0 to j1 @@ -363,6 +479,13 @@ void Flow1D::updateProperties(size_t jg, double* x, size_t jmin, size_t jmax) // update the species diffusive mass fluxes whether or not a // Jacobian is being evaluated updateDiffFluxes(x, j0, j1); + if (m_nsoot > 0){ + updateSootDiffFluxes(x, j0, j1); + } + if (m_nfic > 0){ + updateFictiveDiffFluxes(x, j0, j1); + } + } void Flow1D::updateTransport(double* x, size_t j0, size_t j1) @@ -475,6 +598,7 @@ void Flow1D::computeRadiation(double* x, size_t jmin, size_t jmax) double boundary_Rad_left = m_epsilon_left * StefanBoltz * pow(T(x, 0), 4); double boundary_Rad_right = m_epsilon_right * StefanBoltz * pow(T(x, m_points - 1), 4); + // loop over all grid points for (size_t j = jmin; j < jmax; j++) { // calculation of the mean Planck absorption coefficient double k_P = 0; @@ -496,6 +620,12 @@ void Flow1D::computeRadiation(double* x, size_t jmin, size_t jmax) k_P_CO2 /= k_P_ref; k_P += m_press * X(x, m_kRadiating[0], j) * k_P_CO2; } + // absorption coefficient for soot + if (m_nsoot != 0 && m_do_soot_radiation) { + double k_P_soot = 0.0; + k_P_soot = 3.83 * CRad0 * fv(x,j) * T(x,j) / CRad2; + k_P += k_P_soot; + } // Calculation of the radiative heat loss term double radiative_heat_loss = 2 * k_P *(2 * StefanBoltz * pow(T(x, j), 4) @@ -658,16 +788,18 @@ void Flow1D::evalEnergy(double* x, double* rsd, int* diag, size_t j1 = std::min(jmax, m_points-2); for (size_t j = j0; j <= j1; j++) { if (m_do_energy[j]) { + setGas(x,j); grad_hk(x, j); double sum = 0.0; + double sum2 = 0.0; for (size_t k = 0; k < m_nsp; k++) { - double flxk = 0.5*(m_flux(k, j-1) + m_flux(k, j)); + double flxk = 0.5*(m_flux(k, j-1)*avbp_thick[j-1] + m_flux(k, j)*avbp_thick[j]); sum += m_wdot(k, j)*m_hk(k, j); - sum += flxk * m_dhk_dz(k, j) / m_wt[k]; + sum2 += flxk * m_dhk_dz(k, j) / m_wt[k]; } rsd[index(c_offset_T, j)] = - m_cp[j]*rho_u(x, j)*dTdz(x, j) - - conduction(x, j) - sum; + - AVBPdivHeatFlux(x, j) - sum/avbp_thick[j] - sum2; rsd[index(c_offset_T, j)] /= (m_rho[j]*m_cp[j]); rsd[index(c_offset_T, j)] -= (m_qdotRadiation[j] / (m_rho[j] * m_cp[j])); if (!m_twoPointControl || (m_z[j] != m_tLeft && m_z[j] != m_tRight)) { @@ -731,7 +863,7 @@ void Flow1D::evalSpecies(double* x, double* rsd, int* diag, double sum = 0.0; for (size_t k = 0; k < m_nsp; k++) { sum += Y(x,k,jmin); - rsd[index(c_offset_Y+k, jmin)] = -(m_flux(k, jmin) + + rsd[index(c_offset_Y+k, jmin)] = -(m_flux(k, jmin) * avbp_thick[jmin] + rho_u(x, jmin) * Y(x, k, jmin)); } rsd[index(c_offset_Y + leftExcessSpecies(), jmin)] = 1.0 - sum; @@ -740,9 +872,14 @@ void Flow1D::evalSpecies(double* x, double* rsd, int* diag, if (jmax == m_points - 1) { // right boundary double sum = 0.0; + if (m_nsoot > 0){ + for (size_t k = 0; k < m_nsoot; k++){ + if (m_do_retroaction){sum += Ys(x,k,jmax);} // CERFACS : Done for right Bnd but not for left ?? Maybe not needed because there are no soot at the inlet ? + } + } for (size_t k = 0; k < m_nsp; k++) { sum += Y(x,k,jmax); - rsd[index(k+c_offset_Y, jmax)] = m_flux(k, jmax-1) + + rsd[index(k+c_offset_Y, jmax)] = m_flux(k, jmax-1) * avbp_thick[jmax-1] + rho_u(x, jmax)*Y(x, k, jmax); } rsd[index(c_offset_Y + rightExcessSpecies(), jmax)] = 1.0 - sum; @@ -753,10 +890,19 @@ void Flow1D::evalSpecies(double* x, double* rsd, int* diag, size_t j0 = std::max(jmin, 1); size_t j1 = std::min(jmax, m_points-2); for (size_t j = j0; j <= j1; j++) { + + getWdot(x,j); + + for (size_t k = 0; k < m_nsp; k++) { + if (m_nsoot > 0 && m_do_retroaction){ + m_wdot(k,j) -= sootConsumption(k,j); + } + } for (size_t k = 0; k < m_nsp; k++) { double convec = rho_u(x, j)*dYdz(x, k, j); - double diffus = 2*(m_flux(k, j) - m_flux(k, j-1)) / (z(j+1) - z(j-1)); - rsd[index(c_offset_Y + k, j)] = (m_wt[k]*m_wdot(k, j) + double diffus = 2*(m_flux(k, j)*avbp_thick[j] - m_flux(k, j-1)*avbp_thick[j-1]) / (z(j+1) - z(j-1)); + + rsd[index(c_offset_Y + k, j)] = (m_wt[k]*m_wdot(k, j)/avbp_thick[j] - convec - diffus) / m_rho[j] - rdt*(Y(x, k, j) - Y_prev(k, j)); diag[index(c_offset_Y + k, j)] = 1; @@ -773,10 +919,107 @@ void Flow1D::evalElectricField(double* x, double* rsd, int* diag, } } -void Flow1D::evalContinuity(size_t j, double* x, double* rsd, int* diag, double rdt) +void Flow1D::evalSoot(double* x, double* rsd, int* diag, + double rdt, size_t jmin, size_t jmax) { - throw CanteraError("Flow1D::evalContinuity", - "Overloaded by StFlow; to be removed after Cantera 3.1"); + if (m_nsoot > 0){ + + if (jmin == 0) { // left boundary + for (size_t k = 0; k < m_nsoot; k++){ + rsd[index(c_offset_S + k, jmin)] = - (m_soot_diff(k,jmin) + + rho_u(x,jmin)* Ys(x,k,jmin)); + diag[index(c_offset_S + k, jmin)] = 0; + } + } + if (jmax == m_points - 1) { // right boundary + for (size_t k = 0; k < m_nsoot; k++){ //right boundary + rsd[index(c_offset_S + k, jmax)] = + m_soot_diff(k,jmax-1) + rho_u(x,jmax)*Ys(x,k,jmax); + diag[index(c_offset_S + k, jmax)] = 0; + } + } + // j0 and j1 are constrained to only interior points + size_t j0 = std::max(jmin, 1); + size_t j1 = std::min(jmax, m_points-2); + for (size_t j = j0; j <= j1; j++) { // interior points + + getDistributionOrdre0(x,j); + sootSource(x,j); + + for (size_t k = 0; k < m_nsoot; k++){ + // Convection + double soot_convec = rho_u(x,j)*dYsdz(x,k,j); + // Diffusion + double soot_diffus = 2.0 * (m_soot_diff(k,j) - m_soot_diff(k,j-1)) + / (z(j+1) - z(j-1)); + // Thermophoresis + double soot_soret = 2.0 * (m_soot_soret(k,j) - m_soot_soret(k,j-1)) + / (z(j+1) - z(j-1)); + + // Source terms [m3/kg/s] + double soot_source = 0; + soot_source += (k == 0 ? m_qdotNucleation[j] : 0.0); + soot_source += (m_do_condensation ? m_qdotCondensation(k,j) : 0.0); + soot_source += (m_do_coagulation ? m_qdotCoagulation(k,j) : 0.0); + soot_source += (m_do_sg ? m_qdotSg(k,j) : 0.0); + soot_source += (m_do_oxidation ? m_qdotOxidation(k,j) : 0.0); + // kg/s/m^3 + soot_source *= (rho_soot * m_rho[j]); + if(k == m_nsoot - 1 && m_trash_section){soot_source = 0.0;} + + // Residual + rsd[index(c_offset_S + k, j)] = + (soot_source - soot_convec + soot_diffus + soot_soret) / m_rho[j] + - rdt * (Ys(x,k,j) - Ys_prev(k,j)); + diag[index(c_offset_S + k, j)] = 1; + } + } + } +} + +void Flow1D::evalFictives(double* x, double* rsd, int* diag, + double rdt, size_t jmin, size_t jmax) +{ + if (m_nfic > 0){ + + if (jmin == 0) { // left boundary + for (size_t k = 0; k < m_nfic; k++){ + rsd[index(c_offset_F + k, jmin)] = Yfic(x,k,0)-m_fictive_fuel_inlet_Y[k]; + diag[index(c_offset_F + k, jmin)] = 0; + } + } + if (jmax == m_points - 1) { // right boundary + for (size_t k = 0; k < m_nfic; k++){ //right boundary + rsd[index(c_offset_F + k, jmax)] = m_fic_diff(k,jmax-1) + rho_u(x,jmax)*Yfic(x,k,jmax); + diag[index(c_offset_F + k, jmax)] = 0; + } + } + // j0 and j1 are constrained to only interior points + size_t j0 = std::max(jmin, 1); + size_t j1 = std::min(jmax, m_points-2); + for (size_t j = j0; j <= j1; j++) { // interior points + + for (size_t k = 0; k < m_nfic; k++){ + // Convection + double fic_convec = rho_u(x,j)*dYficdz(x,k,j); + // Diffusion + double fic_diffus = 2.0 * (m_fic_diff(k,j) - m_fic_diff(k,j-1)) + / (z(j+1) - z(j-1)); + // Thermophoresis + double fic_soret = 2.0 * (m_fic_soret(k,j) - m_fic_soret(k,j-1)) + / (z(j+1) - z(j-1)); + + // Source terms [m3/kg/s] + double fic_source = m_fictive_source_term(k,j); // m_wt[5]*m_wdot(5, j); // + + // Residual + rsd[index(c_offset_F + k, j)] = + (fic_source - fic_convec + fic_diffus + fic_soret) / m_rho[j] + - rdt * (Yfic(x,k,j) - Yfic_prev(k,j)); + diag[index(c_offset_F + k, j)] = 1; + } + } + } } void Flow1D::show(const double* x) @@ -814,6 +1057,10 @@ string Flow1D::componentName(size_t n) const default: if (n >= c_offset_Y && n < (c_offset_Y + m_nsp)) { return m_thermo->speciesName(n - c_offset_Y); + } else if (n >= c_offset_S && n < (c_offset_S + m_nsoot)) { + return sectionName(n-c_offset_S); + } else if (n >= c_offset_F && n < (c_offset_F + m_nfic)) { + return fictiveName(n-c_offset_F); } else { return ""; } @@ -834,13 +1081,17 @@ size_t Flow1D::componentIndex(const string& name) const return c_offset_E; } else if (name == "Uo") { return c_offset_Uo; + } else if (find(m_section_name.begin(), m_section_name.end(), name) != m_section_name.end()) { + return stoi(name.substr(2))+c_offset_S; // offset not required in previous version, why? + } else if (find(m_fictive_name.begin(), m_fictive_name.end(), name) != m_fictive_name.end()) { + return stoi(name.substr(5))+c_offset_F; // CAC } else { for (size_t n=c_offset_Y; npressure(); + vector did_section(m_nsoot,false); + vector did_fictive(m_nfic,false); + bool wrote_header = false; const auto grid = arr.getComponent("grid").as>(); setupGrid(nPoints(), &grid[0]); @@ -964,15 +1218,68 @@ void Flow1D::fromArray(SolutionArray& arr, double* soln) string name = componentName(i); if (arr.hasComponent(name)) { const vector data = arr.getComponent(name).as>(); + if (find(m_section_name.begin(), m_section_name.end(), name) != m_section_name.end()){ + size_t n = stoi(name.substr(2)); + did_section[n]=true; + writelog("Adding soot section to soln "+name+"\n"); + } + else if (find(m_fictive_name.begin(), m_fictive_name.end(), name) != m_fictive_name.end()){ + size_t n = stoi(name.substr(5)); + did_fictive[n]=true; + writelog("Adding fictive equation to soln "+name+"\n"); + } for (size_t j = 0; j < nPoints(); j++) { soln[index(i,j)] = data[j]; } + } else if (find(m_section_name.begin(), m_section_name.end(), name) != m_section_name.end()){ + size_t n = stoi(name.substr(2)); + did_section[n]=true; + writelog("Creating soot section in soln "+name+"\n"); + for (size_t j = 0; j < nPoints(); j++) { + soln[index(n+c_offset_S,j)] = 0.0; + } + } else if (find(m_fictive_name.begin(), m_fictive_name.end(), name) != m_fictive_name.end()){ + size_t n = stoi(name.substr(5)); + did_fictive[n]=true; + writelog("Creating fictive equation in soln "+name+"\n"); + for (size_t j = 0; j < nPoints(); j++) { + soln[index(n+c_offset_F,j)] = 0.0; + } } else { warn_user("Flow1D::fromArray", "Saved state does not contain values for " "component '{}' in domain '{}'.", name, id()); } } + if (soot_loglevel >= 1 && m_nsoot != 0) { + wrote_header = false; + for (size_t ks = 0; ks < m_nsoot; ks++) { + if (did_section[ks] == false) { + if (!wrote_header) { + writelog("\n\n"); + writelog("Missing data for soot sections:\n"); + wrote_header = true; + } + writelog(m_section_name[ks]+" "); + } + } + } + + if (m_nfic != 0) { + wrote_header = false; + for (size_t ks = 0; ks < m_nfic; ks++) { + if (did_fictive[ks] == false) { + if (!wrote_header) { + writelog("\n\n"); + writelog("Missing data for fictives species:\n"); + wrote_header = true; + } + writelog(m_fictive_name[ks]+" "); + } + } + } + + updateProperties(npos, soln + loc(), 0, m_points - 1); } @@ -1135,6 +1442,1080 @@ void Flow1D::fixTemperature(size_t j) } } +/* ------------------------------------------------------------------------ + Reads the mixture_database.dat file and sets accordingly the PEA function(s) + P. Wolf modif by J. Wirtz +--------------------------------------------------------------------------*/ +void Flow1D::AVBPReadInputPea() { + Parser parser; + Param* param; + + ifstream avbp_mixturedb("mixture_database.dat"); + if (avbp_mixturedb.good()){ + parser.parseFile("mixture_database.dat"); + // In case of pea, the name of the gas should be the same than the one in the mixture_database. + // Get number of mixtures in database + size_t n_mixtures = parser.nbParamOccurence("mixture_name"); + size_t idx_beg = std::string::npos; + size_t idx_end = std::string::npos; + // Loop through all occurences of keyword "mixture name" + for (size_t i=0; i< n_mixtures; ++i) { + param = parser.getParam("mixture_name",i); + std::string current_str = param->readString(0); + // Check if mixture_name is the one requested in the cti file + if ( current_str == m_thermo->name() ) { + // Store bounding idx to get important info + idx_beg = parser.getParamNumber("mixture_name",i); + idx_end = parser.getParamNumber("mixture_name",i+1); + + // Get the fuel of the 2-step chemistry + param = parser.getParam("species_name", idx_beg, idx_end); + for (size_t i=0; ireadString(i); + if (avbp_species.find('C')!=string::npos && avbp_species.find('H')!=string::npos){ + avbp_fuel = avbp_species; + } + if (avbp_species == "H2"){ + avbp_fuel = avbp_species; + } + + } + + // Check if PEA method and search for the coefficient + if (parser.checkParam("pea_method", idx_beg, idx_end) == true){ + param = parser.getParam("pea_method", idx_beg, idx_end); + std::string avbp_pea = param->readString(0); + if (avbp_pea == "pea1"){ + avbp_ipea = 1; + cout<<"ipea set to 1, PEA_1 will be applied"<readDouble(i); + } + } + else if (avbp_pea == "pea2") { + avbp_ipea = 2; + cout<<"ipea set to 2, PEA_2 will be applied"<readDouble(i); + } + param = parser.getParam("pea_coeff", idx_beg, idx_end, 1); + for (size_t i=0; i<10; i++) { + avbp_pea_coeffs[i+8] = param->readDouble(i); + } + + } + else{ + throw CanteraError("readAvbpInputPEA","ipea is set to a weird value"); + } + } + else { + avbp_ipea = 0; + } + } + else { + // pea not considered as mixture_name (mixture_database.dat) does not correspond to gas name (cti) + avbp_ipea = 0; + } + + // calculate the global equivalence ratio phi_cst + if ((avbp_ipea==1)||(avbp_ipea==2)){ + size_t id_C = this->m_thermo->elementIndex("C"); // Index of C atom + size_t id_H = this->m_thermo->elementIndex("H"); // Index of H atom + size_t id_fuel = this->m_thermo->speciesIndex(avbp_fuel); // Index of fuel + size_t id_ox = this->m_thermo->speciesIndex("O2"); // Index of O2 + size_t n_C = this->m_thermo->nAtoms(id_fuel,id_C); + size_t n_H = this->m_thermo->nAtoms(id_fuel,id_H); + //Calculate in mass units phi = s_m*Yf/Yo + phi_cst = (n_C + n_H/4)*this->m_thermo->molecularWeight(id_ox)/this->m_thermo->molecularWeight(id_fuel); + phi_cst = phi_cst*1./0.2333; // WARNING: valid only for Fuel/AIR mixture + } + + if (avbp_ipea!=0){ + break; + } + + } + } + else { + avbp_ipea = 0; + } +} +/********** + Reading the AVBP input_chem.dat + B. Franzelli +*************/ +void Flow1D::AVBPReadInputChem() { + avbp_fthick = m_thick; + if (avbp_fthick > 1.0) { + cout << "INFO: Thickening applied with constant value." << endl; + } + else { + avbp_fthick = 1.0; + } +} +void Flow1D::AVBPcompute_local_thick(double* x,size_t j){ + avbp_thick[j] = avbp_fthick; +} + +//---------------------------------// +// Fictive SPECIES RELATED MTEHODS // +//---------------------------------// + +void Flow1D:: initFictive(){ + //---------------------------------------------------- + // Initializes fictives computation + //---------------------------------------------------- + + // Sets offset of fictives equations in solution array + // Resizes necessay arrays + // Sets fictives names "Yfic_X", disables refinement on fictives and sets clipping + + // Offset definition + c_offset_F = c_offset_Y + m_nsp; + // Array allocation + m_fictive_name.resize(m_nfic); + m_fic_diff.resize(m_nfic, m_points, 0.0); + m_fic_soret.resize(m_nfic, m_points, 0.0); + m_fictive_source_term.resize(m_nfic,m_points, 0.0); + m_fictive_oxidizer_inlet_Y.resize(m_nfic); + m_fictive_fuel_inlet_Y.resize(m_nfic); + m_fictive_schmidt.resize(m_nfic); + // Fictive equations setup + for (size_t k = 0; k < m_nfic; k++) { + std::string string_k = std::to_string(k); + m_fictive_name[k] = "Yfic_" + string_k; + m_refiner->setActive(c_offset_F+k, false); + setBounds(c_offset_F + k, -1.0e-5, 1e5); + + } +} + + +void Flow1D::updateFictiveDiffFluxes(const doublereal* x, size_t j0, size_t j1){ + //---------------------------------------------------- + // Computes fictive species molecular and thermal diffusion fluxes + //---------------------------------------------------- + for (size_t j = j0; j < j1; j++) { + // Evaluate gas at midpoints : j->j+1/2 + setGasAtMidpoint(x,j); + + doublereal rho = m_thermo->density(); + doublereal visco = m_trans->viscosity(); + doublereal lambda_th = m_trans->thermalConductivity(); + + doublereal dz = z(j+1) - z(j); + // Evaluate viscosity + for (size_t k = 0; k < m_nfic; k++){ + // Evaluate fictive mass fraction at j+1/2 + doublereal Yficmid = 0.5 * (Yfic(x,k,j)+Yfic(x,k,j+1)); + // Evaluate centered differencies at j+1/2 + doublereal dYfic = Yfic(x,k,j+1) - Yfic(x,k,j); + //Evaluate diffusion coefficient at j+1/2 + doublereal Dfic = visco / rho / m_fictive_schmidt[k]; + // Evaluate fictive mass diffusion flux at j+1/2 + m_fic_diff(k,j) = rho * Dfic * dYfic/dz; + } + } +} + +//--------------------------------------// +// END FICITVE SPECIES RELATED MTEHODS // +//---------------------------------// + + +//----------------------// +// SOOT RELATED MTEHODS // +//----------------------// +void Flow1D::initSoot(){ + //---------------------------------------------------- + // Initializes soot computation + //---------------------------------------------------- + + // Sets offset of soot sections in solution array + // Resizes necessay arrays + // Sets sections names "YsXX", disables refinement on soot and sets clipping + + // Offset definition + c_offset_S = c_offset_Y + m_nsp; + // Array allocation + m_section_name.resize(m_nsoot); + sootConsumption.resize(m_nsp, m_points, 0.0); + q.resize(m_nsoot,0.0); + vSectMin.resize(m_nsoot, 0.0); + vSectMax.resize(m_nsoot, 0.0); + vSectMean.resize(m_nsoot, 0.0); + sSectMean.resize(m_nsoot, 0.0); + dSectMean.resize(m_nsoot, 0.0); + dSectCol.resize(m_nsoot, 0.0); + kfractal.resize(m_nsoot, 1.0); + Dfractal.resize(m_nsoot, 3); + nNucMean.resize(m_nsoot, 0.0); + rNucMean.resize(m_nsoot, 0.0); + rSectCol.resize(m_nsoot, 0.0); + aSectCol.resize(m_nsoot, 0.0); + theta_surf.resize(m_nsoot,2.0); + m_soot_diff.resize(m_nsoot, m_points, 0.0); + m_soot_soret.resize(m_nsoot, m_points, 0.0); + m_qdotNucleation.resize(m_points, 0.0); + m_qdotCondensation.resize(m_nsoot, m_points, 0.0); + m_qdotCoagulation.resize(m_nsoot, m_points, 0.0); + collision_mat.resize(m_nsoot, m_nsoot, 0.0); + m_qdotSg.resize(m_nsoot, m_points, 0.0); + m_qdotOxidation.resize(m_nsoot, m_points, 0.0); + // Sections setup + for (size_t k = 0; k < m_nsoot; k++) { + std::string string_k = std::to_string(k); + m_section_name[k] = "Ys" + string_k; + m_refiner->setActive(c_offset_S+k, false); + setBounds(c_offset_S + k, -1.0e-5, 1e5); + } + +} + +void Flow1D::setPrecursors(vector id_precursors){ + //---------------------------------------------------- + // Recovers precursor data for further computation + //---------------------------------------------------- + + if (m_nsoot <= 0){ + writelog("\n--> CANTERA SOOT : no sections :(\n"); + return; + } + size_t id_C = m_thermo->elementIndex("C"); + W_C = m_thermo->atomicWeight(id_C); + n_PAH = id_precursors.size(); + m_precursors.resize(n_PAH); + W_PAH.resize(n_PAH,0.0); + n_C.resize(n_PAH,0.0); + for (size_t k = 0; k != n_PAH; k++){ + m_precursors[k] = id_precursors[k] - c_offset_Y; + W_PAH[k] = m_thermo->molecularWeight(m_precursors[k]); + n_C[k] = m_thermo->nAtoms(m_precursors[k],id_C); + } +} + +void Flow1D::finalizeSoot(){ + //---------------------------------------------------- + // Soot setup finalization + //---------------------------------------------------- + // Creates soot volumes + sootCreationVol(); + // Computes collision matrix + sootCollisionInverse(); + // Load surface reactions + if (m_do_sg || m_do_oxidation){ + loadHaca(m_haca_model); + loadSurface();} + + if (soot_loglevel >= 1){showSootInfo();} + if (soot_loglevel >= 2){showSootSections();} +} + +void Flow1D::sootCreationVol(){ + // Sections creations + // PAH list boundaries + size_t n_C_min = *min_element(n_C.begin(),n_C.end()); + size_t n_C_max = *max_element(n_C.begin(),n_C.end()); + // First section lower boundary : smallest possible dimer + vSectMin[0] = 2.0 * (double)n_C_min * V_C2; + // First section upper boundary : biggest possible dimer + vSectMax[0] = V_C2 * max(2.0 * n_C_min + n_C_max, 2.0 * n_C_max); + // Following sections : geometrical progression + vSectMin[1] = vSectMax[0]; + if (m_trash_section){ + double vTrashLowLim = Pi * pow(dTrashLowLim,3.0) / 6; + for (size_t k = 1; k < m_nsoot - 2; k++){ + double exponent = double(k) / double(m_nsoot-2); + vSectMax[k] = vSectMin[1] * pow(vTrashLowLim / vSectMin[1],exponent); + vSectMin[k+1] = vSectMax[k]; + } + vSectMax[m_nsoot - 2] = vTrashLowLim; + vSectMin[m_nsoot - 1] = vTrashLowLim; + }else{ + for (size_t k = 1; k < m_nsoot - 1; k++){ + double exponent = double(k) / double(m_nsoot-1); + vSectMax[k] = vSectMin[1] * pow(bigSoot / vSectMin[1],exponent); + vSectMin[k+1] = vSectMax[k]; + } + } + + vSectMax[m_nsoot-1] = bigSoot; + // Building mean values + for (size_t k = 0; k < m_nsoot; k++){ + vSectMean[k] = (vSectMax[k] + vSectMin[k]) / 2.0 ; //(vSectMax[k] - vSectMin[k]) / log (vSectMax[k] / vSectMin[k]); + dSectMean[k] = pow(6 / Pi * vSectMean[k], 1.0 / 3.0); + } + + // Sections morphology + for (size_t k = 0; k < m_nsoot; k++){ + if (vSectMean[k] >= vlim1){ + // Fractal dimension + Dfractal[k] = Df; + // Fractal prefactor + kfractal[k] = 4.46 * pow(Dfractal[k], -2.08); + } + } + + if (m_soot_morphology == "sphere" || m_soot_morphology == "rodrigues"){ + // Soot morphological properties as defined by P. Rodrigues (PhD Thesis, 2018) + // For spheres, theta = 2.0 + for (size_t k = 0; k < m_nsoot; k++){ + if (m_soot_morphology == "rodrigues" && vSectMin[k] >= vlim1){ + theta_surf[k] = (3.0 * (log(vSectMean[k] / vlim1)) + + 2.0 * (log(vlim1 / V_C2))) + / (log(vSectMean[k] / V_C2)); + if (k == m_nsoot-1 && m_trash_section){theta_surf[k] = theta_surf[k-1];} + } + // Collision diameter + dSectCol[k] = 6 / pow(36 * Pi, 1.0 /Dfractal[k]) + * pow(vSectMean[k], (Dfractal[k]-2.0) / Dfractal[k]) + * pow(S_C2 * + pow(vSectMean[k]/V_C2,theta_surf[k] / 3.0),(3.0-Dfractal[k]) / Dfractal[k]); + // Collision radius + rSectCol[k] = dSectCol[k] / 2.0; + // Collision cross-section + aSectCol[k] = Pi * pow(rSectCol[k], 2.0); + // Surface area + sSectMean[k] = S_C2 * pow(vSectMean[k] / V_C2, theta_surf[k] / 3.0); + // Nuclei number + nNucMean[k] = pow(sSectMean[k], 2) / (36. * Pi * pow(vSectMean[k], 2.)); + // Nuclei radius[m] + rNucMean[k] = 3. * vSectMean[k] / sSectMean[k]; + } + // // From P. Rodrigues, trick to help numerical stability (not tested its impact) + // dSectCol[m_nsoot-1] = dSectMean[m_nsoot-1]; + // rSectCol[m_nsoot-1] = dSectCol[m_nsoot-1] / 2.0; + // aSectCol[m_nsoot-1] = Pi * pow(rSectCol[m_nsoot-1], 2.0); + }else if (m_soot_morphology == "thajudeen"){ + // Soot morphological properties as defined by Thajudeen (2012) + for (size_t k = 0; k < m_nsoot; k++){ + // Nuclei number + nNucMean[k] = max(1., vSectMean[k] / vlim1); + // Nuclei radius + rNucMean[k] = min(pow(3.0 * vSectMean[k] / (4.0 * Pi), 1./3.), pow(3.0 * vlim1 / (4.0 * Pi), 1.0/3.0)); + if (vSectMean[k] >= vlim1){ + // Collision radius (Smoluchowski radius) + double alpha1 = 0.253 * pow(Dfractal[k], 2.0) - 1.209 * Dfractal[k] + 1.433; + double alpha2 = -0.218 * pow(Dfractal[k], 2.0) + 0.964 * Dfractal[k] - 0.180; + double phi_r = 1 / (alpha1 * log(nNucMean[k]) + alpha2); + rSectCol[k] = rNucMean[k] * phi_r * pow(nNucMean[k] / kfractal[k], 1/Dfractal[k]); + // Collision cross-section (Projected Area) + double alpha3 = 0.439 * pow(Dfractal[k], 2.0) - 2.221 * Dfractal[k] + 2.787; + double alpha4 = -0.232 * pow(Dfractal[k], 3.0) + 1.273 * pow(Dfractal[k], 2.0) - 2.183 * Dfractal[k] + 1.906; + double phi_p = pow(nNucMean[k], -alpha3) / alpha4; + aSectCol[k] = Pi * pow(rNucMean[k], 2.) * phi_p * pow(nNucMean[k] / kfractal[k], 2.0/Dfractal[k]); + }else{ + rSectCol[k] = dSectMean[k] / 2.; + aSectCol[k] = Pi * pow(rSectCol[k], 2.); + } + //Collision diameter ("Smoluchowski diameter") + dSectCol[k] = 2. * rSectCol[k]; + // Surface area (computed from smoluchowski radius, close to Rodrigues definition) + sSectMean[k] = Pi * pow(dSectCol[k], 2.); + // theta parameter (needed for surface reactions) + theta_surf[k] = 3. * log(sSectMean[k]/S_C2) / log(vSectMean[k]/V_C2); + } + } +} + +void Flow1D::sootCollisionInverse(){ + //---------------------------------------------------- + // Computes colision matrix (coagulation) + //---------------------------------------------------- + + for (size_t k = 0; k < m_nsoot; k++){ + for (size_t l = k; l < m_nsoot; l++){ + for (size_t m = l; m < m_nsoot; m++){ + double vol_min = vSectMin[l] + vSectMin[k]; + if(vol_min <= vSectMax[m] && vol_min >= vSectMin[m]){ + collision_mat(k,l) = m; + } + } + } + } +} + +void Flow1D::loadSurface(){ + //---------------------------------------------------- + // Resizes and compute surface reactions arrays + //---------------------------------------------------- + + kpower.resize(m_nsoot,0.0); + mpower.resize(m_nsoot,0.0); + vc2power.resize(m_nsoot,0.0); + vc2powerm.resize(m_nsoot,0.0); + vmax_kpower.resize(m_nsoot,0.0); + vmin_kpower.resize(m_nsoot,0.0); + vmax_mpower.resize(m_nsoot,0.0); + vmin_mpower.resize(m_nsoot,0.0); + vmaxmc2_kpower.resize(m_nsoot,0.0); + vminpc2_kpower.resize(m_nsoot,0.0); + vmaxmc2_mpower.resize(m_nsoot,0.0); + vminpc2_mpower.resize(m_nsoot,0.0); + vc2powervect.resize(m_nsoot,0.0); + vc2powermvect.resize(m_nsoot,0.0); + for (size_t k = 0; k < m_nsoot; k++){ + kpower[k] = (theta_surf[k] + 3.0)/3.0; + mpower[k] = theta_surf[k]/3.0; + vc2power[k] = (3.0 - theta_surf[k] )/3.0; + vc2powerm[k] = - mpower[k]; + vmax_kpower[k] = pow(vSectMax[k],kpower[k]); + vmin_kpower[k] = pow(vSectMin[k],kpower[k]); + vmax_mpower[k] = pow(vSectMax[k],mpower[k]); + vmin_mpower[k] = pow(vSectMin[k],mpower[k]); + vmaxmc2_kpower[k] = pow(vSectMax[k] - V_C2,kpower[k]); + vminpc2_kpower[k] = pow(vSectMin[k] + V_C2,kpower[k]); + vmaxmc2_mpower[k] = pow(vSectMax[k] - V_C2,mpower[k]); + vminpc2_mpower[k] = pow(vSectMin[k] + V_C2,mpower[k]); + vc2powervect[k] = pow(V_C2,vc2power[k]); + vc2powermvect[k] = pow(V_C2,vc2powerm[k]); + } +} + +void Flow1D::showSootInfo(){ + writelog("\n{:=^47}{:9}{:=^47}", "", "SOOT INFO", ""); + writelog("\n{:21}{:2}{}", "NUMBER OF SECTIONS", ":", m_nsoot); + writelog("\n{:21}{:1}","PRECURSORS", ":"); + for (size_t k = 0; k != n_PAH; k++){ + writelog(" {}", m_thermo->speciesName(m_precursors[k])); + } + if (dTrashLowLim > 0){writelog("\n{:21}{:2}{} m", "MAX DIAMETER", ":", dTrashLowLim);} + writelog("\n{:21}{:2}{}", "AGGREGATES MORPHOLOGY", ":", m_soot_morphology); + writelog("\n{:21}{:2}{}", "RETROACTION", ":", m_do_retroaction); + writelog("\n{:21}{:2}{}", "CONDENSATION", ":", m_do_condensation); + writelog("\n{:21}{:2}{}", "COAGULATION", ":", m_do_coagulation); + writelog("\n{:21}{:2}{}", "SURFACE GROWTH", ":", m_do_sg); + writelog("\n{:21}{:2}{}", "OXIDATION", ":", m_do_oxidation); + if (m_do_sg || m_do_oxidation){ + writelog("\n{:21}{:2}", "HACA MODEL", ":"); + if (m_haca_model == 1){ + writelog("Mauss"); + }else if (m_haca_model == 2){ + writelog("Blanquart"); + }else if (m_haca_model == 3){ + writelog("Kazakov"); + writelog("\n{:21}{:2}{}{:2}", "-> Flame temperature", ":", kazakovTad, " K"); + } + } + writelog("\n{:21}{:2}{}", "RADIATIVE HEAT LOSSES", ":", m_do_soot_radiation); + writelog("\n{:21}{:2}{}", "SORET EFFECT", ":", m_do_soot_soret); + writeline('=', 103, false, true); + writelog("\n"); +} +void Flow1D::showSootSections(){ + //---------------------------------------------------- + // Displays section informations + //---------------------------------------------------- + + if (m_nsoot <= 0){ + writelog ("\nSOOT INFO : no sections to show :("); + return; + } + writelog("\n{:=^36}{:30}{:=^37}", "", "SOOT SECTIONS INFO (SI UNITS)", ""); + writelog("\n Section Vol. min. Vol. mean Vol. max. Diam. mean Diam. coll"); + writeline('-', 103, false, true); + for (size_t k = 0; k < m_nsoot; k++) { + writelog("\n {:10d} {:10.4g} {:10.4g} {:10.4g} {:10.4g} {:10.4g}", + k,vSectMin[k],vSectMean[k],vSectMax[k],dSectMean[k],dSectCol[k]); + } + writeline('=', 103, false, true); + writelog("\n"); +} + +void Flow1D::sootSource(const double* x, size_t j) { + //---------------------------------------------------- + // Computes soot source terms + //---------------------------------------------------- + // Dimerization + sootDimerization(x,j); + // Nucleation + sootNucleation(x,j); + // Condensation + if (m_do_condensation){sootCondensation(x,j);} + // Coagulation + if (m_do_coagulation){sootCoagulation(x,j);} + // Surface chemistry + if (m_do_sg || m_do_oxidation){sootSurface(x,j);} +} + +void Flow1D::sootDimerization(const double* x, size_t j){ + //---------------------------------------------------- + // Computes dimerization source term + //---------------------------------------------------- + double omega = 0, c_dimer = 0; + double V_k, d2_k, omega_k, C_k, gamma_k, k_k; + for (size_t k = 0; k < n_PAH; k++){ + // PAH volume [m3] + V_k = n_C[k] * V_C2 / 2.0; + // Squared PAH diameter [m2] + d2_k = pow(6.0 * V_k / Pi, 2.0/3.0); + // PAH concentraiton [kmol/m3] + C_k = m_rho[j] * Y(x,m_precursors[k],j) / W_PAH[k]; + // PAH sticking coefficient [-] + gamma_k = Cn_cst * pow(W_PAH[k], 4.0); + // Reaction rate constant [m3/kmol/s] + k_k = sqrt(4.0 * Pi * Boltzmann * T(x,j) / (W_C * n_C[k] / Avogadro)) * d2_k * Avogadro; + // PAH dimerization reaction rate [kmol/m3/s] + omega_k = gamma_k * k_k * pow(C_k, 2.0); + // PAH consumption [kmol/m3/s] (x2 because 2 mol PAH -> 1 mol dimer) + sootConsumption(m_precursors[k],j) = 2 * omega_k; + // Adds PAH contribution to overall local dimerization rate sootConsumption[index(k,j)] + omega += omega_k; + // Adds PAH contribution to overall dimer carbon atoms + c_dimer += omega_k * n_C[k]; + } + // Overall dimerization rate [1/kg/s] + r_dimer = omega * Avogadro / m_rho[j]; + // Overall dimer volume [m3] + V_dimer = c_dimer * V_C2 / omega; + + // double K00 = 0, cdimer = 0; + // double V_k, d_k, kdimfwd_k, K00_k, C_k; + // for (size_t k = 0; k < n_PAH; k++){ + // // PAH volume [m3] + // V_k = n_C[k] * V_C2 / 2.0; + // // PAH diameter [m] + // d_k = pow(6.0 * V_k / Pi, 1.0/3.0); + // // PAH concentraiton [mol/m3] + // C_k = m_rho[j] * Y(x,m_precursors[k],j) / W_PAH[k]; + // // m6/s/kg/mol2 + // kdimfwd_k = Cn_cst * pow(W_PAH[k], 4.0) / m_rho[j] + // * sqrt((4.0 * Pi * Boltzmann * T(x,j)) / ((W_C / Avogadro) * n_C[k])) + // * pow(d_k, 2.0) * pow(Avogadro, 2.0) ; + // // (mol.g^(-1).s^(-1)) + // K00_k = pow(C_k, 2.0) * kdimfwd_k / Avogadro; + // // (mol.g^(-1).s^(-1)) + // K00 += K00_k; + // cdimer += K00_k * n_C[k]; + // // Precursor consumption (mol/m3/s) + // // (x2 because 2 mol PAH -> 1 mol dimer) + // sootConsumption[m_precursors[k]] = 2 * K00_k * m_rho[j]; + // } + // // Dimerization rate [1/kg/s] + // r_dimer = K00 * Avogadro; + // // Equivalent dimer volume [m3] + // V_dimer = cdimer * V_C2 / K00; +} + +void Flow1D::sootNucleation(const double* x, size_t j){ + //---------------------------------------------------- + // Compute nucleation source terms + //---------------------------------------------------- + // [m(11/2)/s/kg] + beta_fm = sqrt(Pi * Boltzmann * T(x,j) + / (rho_soot * 2.0)) / m_rho[j]; + // Dimer collision frequency [m6/s/kg] + beta_dimer = eps_nucl * beta_fm * sqrt(2.0 / V_dimer) + * pow (2.0 * pow(6.0 * V_dimer / Pi, 1.0 / 3.0), 2.0); + // // Dimer particle density [1/m3] + // N_dimer = sqrt((r_dimer / beta_dimer)); + // // Source term for nucleation [m3/kg/s] + // m_qdotNucleation[j] = V_dimer * beta_dimer * pow(N_dimer, 2.0); + + // Dimer diameter [m] + double d_dimer = 2.0 * pow(3.0 * V_dimer / (4.0 * Pi), 1.0/3.0); + // Dimer mass [kg] + double m_dimer = V_dimer * rho_soot; + // Reaction rate constant [m3/kmol/s] + // k_nuc = beta_dimer * m_rho[j] * Avogadro / 2 + double k_nuc = eps_nucl * Avogadro * pow(d_dimer, 2.0) + * sqrt(4.0 * Pi * Boltzmann * T(x, j) / m_dimer); + // Dimer concentration (QSS Assumption) [kmol/m3] + double C_dimer = sqrt((r_dimer / Avogadro * m_rho[j]) / (2.0 * k_nuc)); + // Dimer number concentration [1/m3] + N_dimer = C_dimer * Avogadro; + // Nucleation reaction rate [kmol/m3/s] + double omega_nuc = k_nuc * pow(C_dimer, 2.0); + // Nucleation rate [m3/kg/s] + m_qdotNucleation[j] = omega_nuc * Avogadro * V_dimer / m_rho[j] * 2.0; + +} + +void Flow1D::sootCondensation(const double* x, size_t j){ + //---------------------------------------------------- + // Compute condensation source term and corrects + // nucleation source term + //---------------------------------------------------- + + double kCond = 0; + double interval, vmoy, term1, term2, term3; + vector beta_cond(m_nsoot,0.0); + for (size_t k = 0; k < m_nsoot; k++){ + // Condensation collision kernel[m6/s/kg] + beta_cond[k] = eps_cond * beta_fm * sqrt(1.0/vSectMean[k]+1.0/V_dimer) + * pow(dSectCol[k] + pow(6.0 / Pi * V_dimer, 1.0/3.0), 2.0); + // Collisional frequency between a dimer and any soot particle [m3/s/kg] + kCond += beta_cond[k] * (q[k] * (vSectMax[k] - vSectMin[k]) / (vSectMean[k])); + } + // Correction of dimer density and nucleation source term + N_dimer = - (kCond / (2.0 * beta_dimer)) + + sqrt((r_dimer / beta_dimer) + + pow(kCond / (2.0 * beta_dimer),2.0)); + // Nucleation source term [m3/kg/1] + m_qdotNucleation[j] = V_dimer * beta_dimer * pow(N_dimer,2.0); + + // Condensation source terms + for (size_t k = 0; k < m_nsoot; k++){ + interval = (vSectMax[k] - V_dimer) - vSectMin[k]; + vmoy = ((vSectMax[k] - V_dimer) + vSectMin[k]) / 2; + term1 = N_dimer * beta_cond[k] * q[k] / vmoy * V_dimer * interval; + if ( k==0 ){ + term2 = 0.0; + term3 = 0.0; + }else{ + interval = vSectMax[k-1] - (vSectMax[k-1] - V_dimer); + vmoy = (vSectMax[k-1] + (vSectMax[k-1] - V_dimer)) / 2; + term2 = N_dimer * beta_cond[k-1] * q[k-1] / vmoy * V_dimer * interval; + term3 = N_dimer * beta_cond[k-1] * q[k-1] / vmoy * vmoy * interval; + } + m_qdotCondensation(k,j) = term1 + term2 + term3; + if ( k>0 ){ + m_qdotCondensation(k-1,j) -= term3; + } + } +} + + +void Flow1D::sootCoagulation(const double* x, size_t j){ + //---------------------------------------------------- + // Compute coagulation source terms + //---------------------------------------------------- + + for (size_t k = 0; k < m_nsoot; k++){ + m_qdotCoagulation(k,j) = 0.0; + } + // Viscosity (Cantera) [Pa.s-1] [CLEAN BUT SLOW] + // setGas(x,j); + // double visc = m_trans->viscosity(); + // Viscosity (Sutherland, air) [Pa.s-1] [TRASH BUT QUICK] + double visc = Csut1 * pow(T(x,j),1.5) / (T(x,j) + Csut2); + // Mean free path [m] + double mfp_rod = Boltzmann * T(x,j) / (sqrt(2.0) * Pi * pow(d_gaz,2.0) * m_press); + double mfp_tha = 66.4e-7 * (101325. / m_press) * (T(x,j) / 293.) * (1. + 110./293.) / (1 + 110. / T(x,j)); + double beta_coag_lk = 0.0; + for (size_t k = 0; k < m_nsoot; k++){ + for (size_t l = k; l < m_nsoot; l++){ + if (m_collision_model == "rodrigues" || m_collision_model == "sphere"){ + //Cunnningham numbers [-] + double Cu_k = 1 + 1.257 * 2.0 * mfp_rod / dSectCol[k]; + double Cu_l = 1 + 1.257 * 2.0 * mfp_rod / dSectCol[l]; + // Coagulation rate in continuous regime [m^6.kg^(-1).s-(-1)] + double beta_cont_lk = (2.0 * Boltzmann * T(x,j)) / (3.0 * visc) + * (dSectCol[l] + dSectCol[k]) + * (Cu_l / dSectCol[l] + Cu_k / dSectCol[k]) + / m_rho[j]; + // Coagulation rate in free molecular regime [m^6.kg^(-1).s-(-1)] + double beta_fm_lk = eps_coag * beta_fm + * sqrt(1 / vSectMean[k] + 1 / vSectMean[l]) + * pow(dSectCol[k] + dSectCol[l], 2.0); + // Overall coagulation rate [m^6.kg^(-1).s-(-1)] + beta_coag_lk = (beta_fm_lk * beta_cont_lk) + / (beta_fm_lk + beta_cont_lk); + }else if (m_collision_model == "thajudeen"){ + double reduced_mass = rho_soot * vSectMean[k] * vSectMean[l] / (vSectMean[k] + vSectMean[l]); + double smoluchowski_radius = rNucMean[k] * (1.203 - (0.4315*(nNucMean[k] + nNucMean[l]))/(nNucMean[k]*Dfractal[k] + nNucMean[l]*Dfractal[l])) * pow(rSectCol[k]/rNucMean[k] + rSectCol[l]/rNucMean[k], 0.8806 + (0.3497*(nNucMean[k] + nNucMean[l]))/(nNucMean[k]*Dfractal[k] + nNucMean[l]*Dfractal[l])); + double kn_diff_k = mfp_tha * Pi * rSectCol[k] / aSectCol[k]; + double kn_diff_l = mfp_tha * Pi * rSectCol[l] / aSectCol[l]; + double f_k = (6.0 * Pi * rSectCol[k] * visc) / (1 + kn_diff_k * (1.257 + 0.4 * exp(-1.1/kn_diff_k))); + double f_l = (6.0 * Pi * rSectCol[l] * visc) / (1 + kn_diff_l * (1.257 + 0.4 * exp(-1.1/kn_diff_l))); + double friction_coefficient = f_k * f_l / (f_k + f_l); + double projected_area = pow(smoluchowski_radius, 2.0) * Pi; + double kn_diff = (sqrt(Boltzmann * T(x,j) * reduced_mass) * Pi * smoluchowski_radius) / (friction_coefficient * projected_area); + double H = (4.0 * Pi * pow(kn_diff, 2.0) + 25.836 * pow(kn_diff, 3.0) + eps_coag * sqrt(8.0 * Pi) * 11.211 * pow(kn_diff, 4.0)) / (1 + 3.502 * kn_diff + 7.211 * pow(kn_diff, 2.0) + 11.211 * pow(kn_diff, 3.0)); + beta_coag_lk = (H * friction_coefficient * pow(projected_area, 2.0)) / (reduced_mass * pow(Pi, 2.0) * smoluchowski_radius) / m_rho[j]; + } + // Section of the particle corresponding to the coagulation of (l,k)y + size_t m = collision_mat(k,l); + // Loss of mass in section l due to coagulation with k + double terml = beta_coag_lk * q[l] * q[k] / vSectMean[k] + * (vSectMax[l] - vSectMin[l]) * (vSectMax[k] - vSectMin[k]); + // Loss of mass in section k due to coagulation with l + double termk = beta_coag_lk * q[l] * q[k] / vSectMean[l] + * (vSectMax[l] - vSectMin[l]) * (vSectMax[k] - vSectMin[k]); + double termm, termmplus; + // Gain in mass in m and m+1 thanks to coagulation of (l,k) + if (vSectMax[l] + vSectMax[k] <= vSectMax[m]){ + termm = terml + termk; + termmplus = 0.0; + }else{ + termm = (terml + termk) + * (vSectMax[m] - (vSectMin[k] + vSectMin[l])) + / (vSectMax[k]+vSectMax[l]-vSectMin[k]-vSectMin[l]); + termmplus = (terml + termk) + * (vSectMax[k]+vSectMax[l]-vSectMax[m]) + / (vSectMax[k]+vSectMax[l]-vSectMin[k]-vSectMin[l]); + } + if (m < m_nsoot-1){ + m_qdotCoagulation(m+1,j) += termmplus; + }else{ + termm = terml + termk; + } + m_qdotCoagulation(m,j) += termm; + m_qdotCoagulation(l,j) -= terml; + m_qdotCoagulation(k,j) -= termk; + } + } +} + +void Flow1D::updateSootDiffFluxes(const double* x, size_t j0, size_t j1) +{ + //---------------------------------------------------- + // Computes soot molecular and thermal diffusion fluxes + //---------------------------------------------------- + for (size_t j = j0; j < j1; j++) { + // Evaluate gas at midpoints : j->j+1/2 + double Tmid = 0.5 * (T(x,j)+T(x,j+1)); + // [CLEAN BUT SLOW] + // setGasAtMidpoint(x,j); + // double wtm = m_thermo->meanMolecularWeight(); + // double rho = m_thermo->density(); + // double visco = m_trans->viscosity(); + // [TRASH BUT QUICK] + double wtm = 0.5*(m_wtm[j]+m_wtm[j+1]); + double rho = 0.5*(m_rho[j]+m_rho[j+1]); + double visco = Csut1 * pow(Tmid,1.5) / (Tmid + Csut2); + // Evaluate centered differencies at j+1/2 + double dT = T(x,j+1)-T(x,j); + double dz = z(j+1) - z(j); + // Evaluate viscosity + for (size_t k = 0; k < m_nsoot; k++){ + // Evaluate soot mass fraction at j+1/2 + + double Ysmid = 0.5 * (Ys(x,k,j)+Ys(x,k,j+1)); + // Evaluate centered differencies at j+1/2 + double dYs = Ys(x,k,j+1) - Ys(x,k,j); + //Evaluate diffusion coefficient at j+1/2 + double Ds = 3 / (2 * rho_soot * pow(dSectMean[k], 2.0) + * (1 + alphaT * Pi / 8)) + * sqrt ((wtm*Boltzmann*Tmid)/(2*Pi*Avogadro)); + // Evaluate soot mass diffusion flux at j+1/2 + m_soot_diff(k,j) = rho * Ds * dYs/dz; + // Evaluate soot mass soret flux at j+1/2 + if (m_do_soot_soret){ + m_soot_soret(k,j) = C_soot_soret * visco * Ysmid * dT/dz / Tmid; + } + } + } +} + +void Flow1D::sootSurface(const double* x, size_t j){ + //---------------------------------------------------- + // Compute surface chemistry source terms + //---------------------------------------------------- + + // Computes reaction rates + sootSurfaceInitialization(x,j); + double term1, term2, term3; + //--------------- + // SURFACE GROWTH + //--------------- + if (m_do_sg){ + for (size_t k = 0; k < m_nsoot; k++){ + term1 = n_sites * alpha_surf * ksg / m_rho[j] * vc2powervect[k] / mpower[k] * q[k] + * (vmaxmc2_mpower[k] - vmin_mpower[k]); + if (k==0){ + term2 = 0.0; + term3 = 0.0; + }else{ + term2 = n_sites * alpha_surf * ksg / m_rho[j] * vc2powervect[k-1] / mpower[k-1] * q[k-1] + * (vmax_mpower[k-1] - vmaxmc2_mpower[k-1]); + term3 = n_sites * alpha_surf * ksg / m_rho[j] * vc2powermvect[k-1] / kpower[k-1] * q[k-1] + * (vmax_kpower[k-1] - vmaxmc2_kpower[k-1]); + } + // Surface growth source term [m3/kg/s] + m_qdotSg(k,j) = term1 + term2 + term3; + if (k > 0){m_qdotSg(k-1,j) -= term3;} + } + } + //---------- + // OXYDATION + //---------- + if (m_do_oxidation){ + for (size_t k=m_nsoot; k --> 0;){ + term1 = alpha_surf * kox / m_rho[j] * vc2powervect[k] / mpower[k] * q[k] + * (vmax_mpower[k] - vminpc2_mpower[k]); + if (k==m_nsoot-1){ + term2 = 0.0; + term3 = 0.0; + }else if (k==m_nsoot-2 && m_trash_section) { + term2 = 0.0; + term3 = 0.0; + }else{ + term2 = alpha_surf * kox / m_rho[j] * vc2powervect[k+1] / mpower[k+1] * q[k+1] + * (vminpc2_mpower[k+1] - vmin_mpower[k+1]); + term3 = alpha_surf * kox / m_rho[j] * vc2powermvect[k+1] / kpower[k+1] * q[k+1] + * (vminpc2_kpower[k+1] - vmin_kpower[k+1]); + } + // Oxidation source term [m3/kg/s] + m_qdotOxidation(k,j) = - (term1 + term2 - term3); + if (k < m_nsoot - 1){ + m_qdotOxidation(k+1,j) -= term3; + } + } + } +} + +void Flow1D::sootSurfaceInitialization(const double* x, size_t j){ + // Recover species concentrations [kmol/m3] + double conc_H = 0, conc_H2 = 0, conc_OH = 0, conc_H2O = 0, conc_C2H2 = 0, conc_O2 = 0; + double k01f = 0, k01b = 0, k02f = 0, k02b = 0, k03f = 0, k03b = 0, k04f = 0, k04b = 0; + double k05f = 0, k05b = 0, k06f = 0, k06bisf = 0; + double r01f = 0, r01b = 0, r02f = 0, r02b = 0, r03f = 0, r03b = 0, r04f = 0, r04b = 0; + double r05f = 0, r05b = 0, r06f = 0, r06bisf = 0, r07f = 0; + double ko2, koh, kd, krev, chi, chip, chic, alpha_kazakov; + size_t k; + // Recover molar concentrations + k = m_thermo->speciesIndex("H"); + if (k != npos){conc_H = Y(x,k,j) * m_rho[j] / m_wt[k];} + k = m_thermo->speciesIndex("H2"); + if (k != npos){conc_H2 = Y(x,k,j) * m_rho[j] / m_wt[k];} + k = m_thermo->speciesIndex("H2O"); + if (k != npos){conc_H2O = Y(x,k,j) * m_rho[j] / m_wt[k];} + k = m_thermo->speciesIndex("C2H2"); + if (k != npos){conc_C2H2 = Y(x,k,j) * m_rho[j] / m_wt[k];} + k = m_thermo->speciesIndex("O2"); + if (k != npos){conc_O2 = Y(x,k,j) * m_rho[j] / m_wt[k];} + k = m_thermo->speciesIndex("OH"); + if (k != npos){conc_OH = Y(x,k,j) * m_rho[j] / m_wt[k];} + // SI units + double slt = 1.0e3 / GasConstant / T(x,j); // 1e3 because GasConstant in J/kmol/K + double T_log=log(T(x,j)); + if (m_haca_model == 1 || m_haca_model == 11){ //Mauss + // Arrhenius constants + k01f = ak01f * exp(nk01f*T_log - ek01f*slt); // [m3/kmol/s] + k01b = ak01b * exp(nk01b*T_log - ek01b*slt); // [m3/kmol/s] + k02f = ak02f * exp(nk02f*T_log - ek02f*slt); // [m3/kmol/s] + k02b = ak02b * exp(nk02b*T_log - ek02b*slt); // [m3/kmol/s] + k03f = ak03f * exp(nk03f*T_log - ek03f*slt); // [m3/kmol/s] + k03b = ak03b * exp(nk03b*T_log - ek03b*slt); // [1/s] + k04f = ak04f * exp(nk04f*T_log - ek04f*slt); // [m3/kmol/s] + k04b = ak04b * exp(nk04b*T_log - ek04b*slt); // [1/s] + k05f = ak05f * exp(nk05f*T_log - ek05f*slt); // [1/s] + k05b = ak05b * exp(nk05b*T_log - ek05b*slt); // [m3/kmol/s] + k06f = ak06f * exp(nk06f*T_log - ek06f*slt); // [m3/kmol/s] + k06bisf = k06f; + // Partial (soot or soot radical concentration not accounted) surface chemistry reaction rates [1/s] + r01f = k01f * conc_H; + r01b = k01b * conc_H2; + r02f = k02f * conc_OH; + r02b = k02b * conc_H2O; + r03f = k03f * conc_H; + r03b = k03b; + r04f = k04f * conc_C2H2; + r04b = k04b; + r05f = k05f; + r05b = k05b * conc_H; + r06f = k06f * conc_O2; + r06bisf = k06bisf * conc_O2; + r07f = Avogadro * S_C2 * gamma_oh * conc_OH * + pow(GasConstant * T(x,j)/(2* Pi * m_wt[k]), 0.5); // Bizarre k correspond à OH ? + // From QSS [-] + double fk10 = r05f / (r04b+r06bisf+r05f); + double A_QSS = (r01f + r02f + r03b + r07f + r05b * (1.0 - fk10)) / (r01b + r02b + r03f + r04f * fk10); + double B_QSS = r04f / ( r04b + r06bisf + r05f); + double D_QSS = r05b / (r04b + r06f + r05f); + + chi = 1.0; + chip = chi * A_QSS; + chic = chi * (A_QSS*B_QSS + D_QSS); + // Partial reaction rates[1/s] + koh = r07f * chi; + kd = r04f * chip; + ko2 = r06f * (chip + chic); + krev = r04b * chic; + // Partial surface growth and oxidation rates [1/s] + ksg = kd - krev; + kox = ko2 + koh; + } else if (m_haca_model == 2){ //Blanquart + // Arrhenius constants [m3/kmol/s] + k01f = ak01f * exp(nk01f*T_log - ek01f*slt); + k01b = ak01b * exp(nk01b*T_log - ek01b*slt); + k02f = ak02f * exp(nk02f*T_log - ek02f*slt); + k02b = ak02b * exp(nk02b*T_log - ek02b*slt); + k03f = ak03f * exp(nk03f*T_log - ek03f*slt); // [1/s] + k03b = ak03b * exp(nk03b*T_log - ek03b*slt); + k04f = ak04f * exp(nk04f*T_log - ek04f*slt); + k05f = ak05f * exp(nk05f*T_log - ek05f*slt); + // Partial (soot or soot radical concentration not accounted) surface chemistry reaction rates [1/s] + r01f = k01f * conc_H; + r01b = k01b * conc_H2; + r02f = k02f * conc_OH; + r02b = k02b * conc_H2O; + r03f = k03f; + r03b = k03b * conc_H; + r04f = k04f * conc_C2H2; + r05f = k05f * conc_O2; + r06f = Avogadro * S_C2 * gamma_oh * conc_OH * + pow(GasConstant * T(x,j)/(2* Pi * m_wt[k]), 0.5); // Bizarre k correspond à OH ? + // From QSS [-] + chi = (r01f + r02f + r03f) / (r01b + r02b + r03b + r04f + r05f); // * 1.7e15; + // Oxidation O2 [must be 1/s] + ko2 = chi * r05f; + // Oxidation OH [1/s] + koh = r06f * chi; + // Oxidation + kox = ko2 + koh; + // Surface growth [1/s] + ksg = chi * r04f; + } else if (m_haca_model == 3){ //Kazakov + // Fraction of sites available at the surface of the particle for reaction [-] + alpha_kazakov = (1.0 + tanh(8.168e3/kazakovTad - 4.57)) / 2.0; + // Arrhenius constants [m3/kmol/s] + k01f = ak01f * exp(nk01f*T_log - ek01f*slt); + k01b = ak01b * exp(nk01b*T_log - ek01b*slt); + k02f = ak02f * exp(nk02f*T_log - ek02f*slt); + k03f = ak03f * exp(nk03f*T_log - ek03f*slt); + k04f = ak04f * exp(nk04f*T_log - ek04f*slt); + // Partial (soot or soot radical concentration not accounted) surface chemistry reaction rates [1/s] + r01f = k01f * conc_H; + r01b = k01b * conc_H2; + r02f = k02f * conc_H; + r03f = k03f * conc_C2H2; + r04f = k04f * conc_O2; + r05f = Avogadro * S_C2 * gamma_oh * conc_OH * + pow(GasConstant * T(x,j)/(2* Pi * m_wt[k]), 0.5); // Bizarre k correspond à OH ? + // From QSS [-] + chi = r01f / (r01b + r02f + r03f + r04f); // * 2.3e14 + // Oxidation O2 [1/s] + ko2 = alpha_kazakov * chi * r04f; + // Oxidation OH [1/s] + koh = r05f * chi; + //Oxidation [1/s] + kox = ko2 + koh; + // Surface growth [1/s] + ksg = alpha_kazakov * chi * r03f; + } + //------------------------- + // RETROACTION ON GAS PHASE + //------------------------- + if (m_do_retroaction){ + double deltaQ = 0.0, soot_surface = 0.0; + for (size_t k = 0; k < m_nsoot; k++){ + deltaQ += vc2powervect[k] / mpower[k] * q[k] * (vmax_mpower[k]-vmin_mpower[k]); + } + //Overall active sites concentration [kmol/m3] + soot_surface = alpha_surf * n_sites * deltaQ / (V_C2 * Avogadro); // n_sites added here + // Surface chemistry reaction rates [kmol/s/m3] + double w01f = 0, w01b = 0, w02f = 0, w02b = 0, w03f = 0, w03b = 0; + double w04f = 0, w04b = 0, w05f = 0, w05b = 0, w06f = 0, w06bisf = 0; + double w07f = 0; + if (m_do_sg || m_do_oxidation){ + // Reaction rates for reactions occuring on both oxidation & surface growth + if (m_haca_model == 1){ + w01f = r01f * soot_surface * chi; + w01b = r01b * soot_surface * chip; + w02f = r02f * soot_surface * chi; + w02b = r02b * soot_surface * chip; + w03f = r03f * soot_surface * chip; + w03b = r03b * soot_surface * chi; + w05f = r05f * soot_surface * chic; + w05b = r05b * soot_surface * chi; + w06bisf = r06bisf * soot_surface * chic; + }else if (m_haca_model == 2){ + w01f = r01f * soot_surface * chi; + w01b = r01b * soot_surface * chi; + w02f = r02f * soot_surface * chi; + w02b = r02b * soot_surface * chi; + w03f = r03f * soot_surface * chi; + w03b = r03b * soot_surface * chi; + }else if (m_haca_model == 3){ + w01f = r01f * soot_surface * chi; + w01b = r01b * soot_surface * chi; + w02f = r02f * soot_surface * chi; + } + } + // Reaction rates for reactions occuring on surfacce growth only + if (m_do_sg){ + if (m_haca_model == 1){ + w04f = r04f * soot_surface * chip; + w04b = r04b * soot_surface * chic; + }else if (m_haca_model == 2){ + w04f = r04f * soot_surface * chi; + }else if (m_haca_model == 3){ + w03f = r03f * soot_surface * chi; + } + } + // Reaction rates for reactions occuring on oxidation only + if (m_do_oxidation){ + if (m_haca_model == 1){ + // Reaction rates [kmol/m3/s] + w06f = r06f * soot_surface * chip; + w07f = r07f * soot_surface * chi; + }else if (m_haca_model == 2){ + w05f = r05f * soot_surface * chi; + w06f = r06f * soot_surface * chi; + }else if (m_haca_model == 3){ + w04f = r04f * soot_surface * chi; + w05f = r05f * soot_surface * chi; + } + } + + // Gaseous species consumption [kmol/s/m3] + if (m_haca_model == 1){ + k = m_thermo->speciesIndex("H"); + if (k != npos){sootConsumption(k,j) = - (w01f - w01b) - (w03f - w03b) + (w05f - w05b);} + k = m_thermo->speciesIndex("C2H2"); + if (k != npos){sootConsumption(k,j) = (w04f - w04b);} + k = m_thermo->speciesIndex("H2"); + if (k != npos){sootConsumption(k,j) = (w01f - w01b);} + k = m_thermo->speciesIndex("O2"); + if (k != npos){sootConsumption(k,j) = - w06f - w06bisf;} + k = m_thermo->speciesIndex("CO"); + if (k != npos){sootConsumption(k,j) = 2.0 * w06f;} + k = m_thermo->speciesIndex("OH"); + if (k != npos){sootConsumption(k,j) = - (w02f - w02b) - w07f;} + k = m_thermo->speciesIndex("H2O"); + if (k != npos){sootConsumption(k,j) = + (w02f - w02b);} + k = m_thermo->speciesIndex("HCO"); + if (k != npos){sootConsumption(k,j) = 2.0 * w06bisf + w07f;} + k = m_thermo->speciesIndex("CH"); + if (k != npos){sootConsumption(k,j) = w07f;} + }else if (m_haca_model == 2){ + k = m_thermo->speciesIndex("H"); + if (k != npos){sootConsumption(k,j) = -(w01f-w01b) + (w03f-w03b) + w04f;} + k = m_thermo->speciesIndex("C2H2"); + if (k != npos){sootConsumption(k,j) = -w04f;} + k = m_thermo->speciesIndex("H2"); + if (k != npos){sootConsumption(k,j) = (w01f-w01b) + w05f + w06f;} + k = m_thermo->speciesIndex("O2"); + if (k != npos){sootConsumption(k,j) = -w05f;} + k = m_thermo->speciesIndex("CO"); + if (k != npos){sootConsumption(k,j) = 2.0 * w05f + w06f;} + k = m_thermo->speciesIndex("OH"); + if (k != npos){sootConsumption(k,j) = -(w02f-w02b) - w06f;} + k = m_thermo->speciesIndex("H2O"); + if (k != npos){sootConsumption(k,j) = (w02f-w02b);} + }else if (m_haca_model == 3){ + k = m_thermo->speciesIndex("H"); + if (k != npos){sootConsumption(k,j) = -(w01f-w01b) - w02f + w03f;} + k = m_thermo->speciesIndex("C2H2"); + if (k != npos){sootConsumption(k,j) = -w03f;} + k = m_thermo->speciesIndex("H2"); + if (k != npos){sootConsumption(k,j) = (w01f-w01b) + w05f;} + k = m_thermo->speciesIndex("O2"); + if (k != npos){sootConsumption(k,j) = -w04f;} + k = m_thermo->speciesIndex("CO"); + if (k != npos){sootConsumption(k,j) = 2.0 * w04f + w05f;} + k = m_thermo->speciesIndex("OH"); + if (k != npos){sootConsumption(k,j) = - w05f;} + } + } +} + +void Flow1D::getDistributionOrdre0(const double* x, size_t j){ + for (size_t k = 0; k < m_nsoot; k++){ + // Soot volume fraction density [1/m3] + q[k] = m_rho[j] * Ys(x,k,j) / (rho_soot * (vSectMax[k] - vSectMin[k])); + } +} +//-----------------------------// +// END OF SOOT RELATED METHODS // +//-----------------------------// + void Flow1D::grad_hk(const double* x, size_t j) { size_t jloc = (u(x, j) > 0.0 ? j : j + 1); diff --git a/src/oneD/IonFlow.cpp b/src/oneD/IonFlow.cpp index b1f66f4be06..3d2cac4a38c 100644 --- a/src/oneD/IonFlow.cpp +++ b/src/oneD/IonFlow.cpp @@ -16,7 +16,7 @@ namespace Cantera { IonFlow::IonFlow(ThermoPhase* ph, size_t nsp, size_t points) : - Flow1D(ph, nsp, points) + Flow1D(ph, nsp, 0, 0, c_offset_Y, points) //CERFACS 0,0 are set here because it correspond to nsoot=0 and nfic = 0, that have been added in Flow1D { // make a local copy of species charge for (size_t k = 0; k < m_nsp; k++) { diff --git a/src/oneD/Sim1D.cpp b/src/oneD/Sim1D.cpp index ec3f1841208..335f9131970 100644 --- a/src/oneD/Sim1D.cpp +++ b/src/oneD/Sim1D.cpp @@ -408,7 +408,7 @@ int Sim1D::newtonSolve(int loglevel) } } -void Sim1D::solve(int loglevel, bool refine_grid) +void Sim1D::solve(int loglevel, const string& refine_grid) { int new_points = 1; double dt = m_tstep; @@ -421,6 +421,23 @@ void Sim1D::solve(int loglevel, bool refine_grid) if (loglevel > 6) { clearDebugFile(); } + double domain_size = 0.0; + for (size_t n = 0; n < nDomains(); n++) + { + Domain1D& d = domain(n); + size_t length = d.z().size(); + + domain_size += d.z(length-1); + } + domain_size = domain_size/2.0; + + const double& criterion=1.0e-4; + + double mesh_distance; + // maximum number of remeshes (problem sometimes encountered, eternal loop) + int MAX_REMESHES = 20; + int n_remeshes = 0; + while (new_points > 0) { size_t istep = 0; @@ -493,18 +510,77 @@ void Sim1D::solve(int loglevel, bool refine_grid) if (loglevel > 3) { show(); } +/////////////////////////////////////////////////// + + //if (std::strcmp(refine_grid, "remesh") == 0) + if (refine_grid == "remesh") + { + // print new line + if (loglevel>=0) + { + cout<=0) + { + cout<<"old mesh = ["< 6) { + save("debug_sim1d.yaml", "debug", "After regridding"); + } + if (new_points && loglevel > 7) { + saveResidual("debug_sim1d.yaml", "residual", + "After regridding"); + } + } else if (refine_grid == "disabled"){ debuglog("grid refinement disabled.\n", loglevel); new_points = 0; + + } else { + debuglog("WARNING: wrong keyword for refine_grid\nonly acceptable values being: disabled, refine (default value) or remesh \ngrid refinement disabled.\n", loglevel); + new_points = 0; } } if (new_points < 0) { @@ -533,10 +609,10 @@ int Sim1D::refine(int loglevel) Refiner& r = d.refiner(); // Save the old grid corresponding to the converged solution - m_grid_last_ss.push_back(d.grid()); + m_grid_last_ss.push_back(d.z()); // determine where new points are needed - r.analyze(d.grid().size(), d.grid().data(), m_state->data() + start(n)); + r.analyze(d.z().size(), d.z().data(), m_state->data() + start(n)); if (loglevel > 0) { r.show(); @@ -604,6 +680,256 @@ int Sim1D::refine(int loglevel) finalize(); return added || -discarded; } +/** +* Remesh the grid in all domains. +*/ +double Sim1D::remesh(int loglevel, double dist_min, double domain_size) //from MUTAGEN +{ + vector znew, xnew; + std::vector dsize; + + double distance=0.0; + for (size_t n = 0; n < nDomains(); n++) + { + Domain1D& d = domain(n); + Refiner& r = d.refiner(); + + // proceed with the remeshing + // double this_distance = r.remeshFromSolution( d.grid().size(), + // d.grid().data(), &m_state[start(n)], + // dist_min, domain_size ); + double this_distance = r.remeshFromSolution( d.z().size(), + d.z().data(), m_state->data() + start(n), + dist_min, domain_size ); + distance += this_distance; + + // interpolate the solution on the new grid points + int np_old = d.nPoints(); // old domain grid points + int np_new = r.z_new_size(); // new domain grid points + // loop over points in the new grid + for (size_t m = 0; m < np_new; m++) + { + // new position + double znew_curr = r.z_new(m); + // add it to the global array + znew.push_back(znew_curr); + // interpolation + if (np_new>1) + { + int m_old = r.indxtp(np_old,znew_curr,d.z().data()); + double z0_old = d.z(m_old ); + double z1_old = d.z(m_old+1); + for (size_t i = 0; i < d.nComponents(); i++) + { + double x0_old = value(n,i,m_old ); + double x1_old = value(n,i,m_old+1); + double slope = (x1_old-x0_old)/(z1_old-z0_old); + double val = x0_old + slope * (znew_curr-z0_old); + xnew.push_back(val); + } + } + else + { + for (size_t i = 0; i < d.nComponents(); i++) + { + xnew.push_back(value(n,i,0)); + } + } + } + dsize.push_back(np_new); + } + + // At this point, the new grid znew and the new solution + // vector xnew have been constructed, but the domains + // themselves have not yet been modified. Now update each + // domain with the new grid. + + size_t gridstart = 0, gridsize; + for (size_t n = 0; n < nDomains(); n++) { + Domain1D& d = domain(n); + gridsize = dsize[n]; + d.setupGrid(gridsize, &znew[gridstart]); + gridstart += gridsize; + } + + // Replace the current solution vector with the new one + *m_state = xnew; + resize(); + finalize(); + return distance; +} + + +void Sim1D::getRatio() //from MUTAGEN +{ + for (size_t n = 0; n < nDomains(); n++) + { + Domain1D& d = domain(n); + Refiner& r = d.refiner(); + // r.getRatio(d.grid().size(), d.grid().data(), &m_state[start(n)]); + r.getRatio(d.z().size(), d.z().data(), m_state->data() + start(n)); + } +} + +/** +* Add a point in a domain +*/ +void Sim1D::addPoint(size_t ndomain, double zpoint, vector xpoint, int loglevel, bool newjac) //from MUTAGEN +{ + vector znew, xnew; + vector dsize; + + // check the domain number + if ((ndomain<0)||(ndomain>=nDomains())) + { + cout<<"wrong ndomain"<(xpoint.size())!=ncomp) + { + cout<<"wrong number of components in xpoint"<0) + { + if (zpoint(xnew.begin(), xnew.end())); + + // resize the work array + m_xnew.resize(xnew.size()); + // copy(xnew.begin(), xnew.end(), m_xnew.begin()); + + resize(); + finalize(); +} void Sim1D::clearDebugFile() { diff --git a/src/oneD/StFlow.cpp b/src/oneD/StFlow.cpp deleted file mode 100644 index 3d69ca8038a..00000000000 --- a/src/oneD/StFlow.cpp +++ /dev/null @@ -1,315 +0,0 @@ -//! @file StFlow.cpp - -// This file is part of Cantera. See License.txt in the top-level directory or -// at https://cantera.org/license.txt for license and copyright information. - -#include "cantera/oneD/StFlow.h" -#include "cantera/base/global.h" - -using namespace std; - -namespace Cantera -{ - -StFlow::StFlow(ThermoPhase* ph, size_t nsp, size_t points) : - Flow1D(ph, nsp, points) -{ - warn_deprecated("StFlow::StFlow", - "To be removed after Cantera 3.1. Class replaced by Flow1D."); -} - -StFlow::StFlow(shared_ptr th, size_t nsp, size_t points) - : Flow1D(th, nsp, points) -{ - warn_deprecated("StFlow::StFlow", - "To be removed after Cantera 3.1. Class replaced by Flow1D."); -} - -StFlow::StFlow(shared_ptr sol, const string& id, size_t points) - : Flow1D(sol, id, points) -{ - warn_deprecated("StFlow::StFlow", - "To be removed after Cantera 3.1. Class replaced by Flow1D."); -} - -void StFlow::eval(size_t jg, double* xg, double* rg, integer* diagg, double rdt) -{ - // if evaluating a Jacobian, and the global point is outside the domain of - // influence for this domain, then skip evaluating the residual - if (jg != npos && (jg + 1 < firstPoint() || jg > lastPoint() + 1)) { - return; - } - - // start of local part of global arrays - double* x = xg + loc(); - double* rsd = rg + loc(); - integer* diag = diagg + loc(); - - size_t jmin, jmax; - if (jg == npos) { // evaluate all points - jmin = 0; - jmax = m_points - 1; - } else { // evaluate points for Jacobian - size_t jpt = (jg == 0) ? 0 : jg - firstPoint(); - jmin = std::max(jpt, 1) - 1; - jmax = std::min(jpt+1,m_points-1); - } - - updateProperties(jg, x, jmin, jmax); - evalResidual(x, rsd, diag, rdt, jmin, jmax); - evalUo(x, rsd, diag, rdt, jmin, jmax); -} - -void StFlow::evalResidual(double* x, double* rsd, int* diag, - double rdt, size_t jmin, size_t jmax) -{ - //---------------------------------------------------- - // evaluate the residual equations at all required - // grid points - //---------------------------------------------------- - - // calculation of qdotRadiation (see docstring of enableRadiation) - if (m_do_radiation) { - // variable definitions for the Planck absorption coefficient and the - // radiation calculation: - double k_P_ref = 1.0*OneAtm; - - // polynomial coefficients: - const double c_H2O[6] = {-0.23093, -1.12390, 9.41530, -2.99880, - 0.51382, -1.86840e-5}; - const double c_CO2[6] = {18.741, -121.310, 273.500, -194.050, - 56.310, -5.8169}; - - // calculation of the two boundary values - double boundary_Rad_left = m_epsilon_left * StefanBoltz * pow(T(x, 0), 4); - double boundary_Rad_right = m_epsilon_right * StefanBoltz * pow(T(x, m_points - 1), 4); - - // loop over all grid points - for (size_t j = jmin; j < jmax; j++) { - // helping variable for the calculation - double radiative_heat_loss = 0; - - // calculation of the mean Planck absorption coefficient - double k_P = 0; - // absorption coefficient for H2O - if (m_kRadiating[1] != npos) { - double k_P_H2O = 0; - for (size_t n = 0; n <= 5; n++) { - k_P_H2O += c_H2O[n] * pow(1000 / T(x, j), (double) n); - } - k_P_H2O /= k_P_ref; - k_P += m_press * X(x, m_kRadiating[1], j) * k_P_H2O; - } - // absorption coefficient for CO2 - if (m_kRadiating[0] != npos) { - double k_P_CO2 = 0; - for (size_t n = 0; n <= 5; n++) { - k_P_CO2 += c_CO2[n] * pow(1000 / T(x, j), (double) n); - } - k_P_CO2 /= k_P_ref; - k_P += m_press * X(x, m_kRadiating[0], j) * k_P_CO2; - } - - // calculation of the radiative heat loss term - radiative_heat_loss = 2 * k_P *(2 * StefanBoltz * pow(T(x, j), 4) - - boundary_Rad_left - boundary_Rad_right); - - // set the radiative heat loss vector - m_qdotRadiation[j] = radiative_heat_loss; - } - } - - for (size_t j = jmin; j <= jmax; j++) { - //---------------------------------------------- - // left boundary - //---------------------------------------------- - - if (j == 0) { - // these may be modified by a boundary object - - // Continuity. This propagates information right-to-left, since - // rho_u at point 0 is dependent on rho_u at point 1, but not on - // mdot from the inlet. - rsd[index(c_offset_U,0)] = - -(rho_u(x,1) - rho_u(x,0))/m_dz[0] - -(density(1)*V(x,1) + density(0)*V(x,0)); - - // the inlet (or other) object connected to this one will modify - // these equations by subtracting its values for V, T, and mdot. As - // a result, these residual equations will force the solution - // variables to the values for the boundary object - rsd[index(c_offset_V,0)] = V(x,0); - rsd[index(c_offset_T,0)] = T(x,0); - if (m_usesLambda) { - rsd[index(c_offset_L, 0)] = -rho_u(x, 0); - } else { - rsd[index(c_offset_L, 0)] = lambda(x, 0); - diag[index(c_offset_L, 0)] = 0; - } - - // The default boundary condition for species is zero flux. However, - // the boundary object may modify this. - double sum = 0.0; - for (size_t k = 0; k < m_nsp; k++) { - sum += Y(x,k,0); - rsd[index(c_offset_Y + k, 0)] = - -(m_flux(k,0) + rho_u(x,0)* Y(x,k,0)); - } - rsd[index(c_offset_Y + leftExcessSpecies(), 0)] = 1.0 - sum; - - // set residual of poisson's equ to zero - rsd[index(c_offset_E, 0)] = x[index(c_offset_E, j)]; - } else if (j == m_points - 1) { - evalRightBoundary(x, rsd, diag, rdt); - } else { // interior points - evalContinuity(j, x, rsd, diag, rdt); - // set residual of poisson's equ to zero - rsd[index(c_offset_E, j)] = x[index(c_offset_E, j)]; - - //------------------------------------------------ - // Radial momentum equation - // - // \rho dV/dt + \rho u dV/dz + \rho V^2 - // = d(\mu dV/dz)/dz - lambda - //------------------------------------------------- - if (m_usesLambda) { - rsd[index(c_offset_V,j)] = - (shear(x, j) - lambda(x, j) - rho_u(x, j) * dVdz(x, j) - - m_rho[j] * V(x, j) * V(x, j)) / m_rho[j] - - rdt * (V(x, j) - V_prev(j)); - diag[index(c_offset_V, j)] = 1; - } else { - rsd[index(c_offset_V, j)] = V(x, j); - diag[index(c_offset_V, j)] = 0; - } - - //------------------------------------------------- - // Species equations - // - // \rho dY_k/dt + \rho u dY_k/dz + dJ_k/dz - // = M_k\omega_k - //------------------------------------------------- - getWdot(x,j); - for (size_t k = 0; k < m_nsp; k++) { - double convec = rho_u(x,j)*dYdz(x,k,j); - double diffus = 2.0*(m_flux(k,j) - m_flux(k,j-1)) - / (z(j+1) - z(j-1)); - rsd[index(c_offset_Y + k, j)] - = (m_wt[k]*(wdot(k,j)) - - convec - diffus)/m_rho[j] - - rdt*(Y(x,k,j) - Y_prev(k,j)); - diag[index(c_offset_Y + k, j)] = 1; - } - - //----------------------------------------------- - // energy equation - // - // \rho c_p dT/dt + \rho c_p u dT/dz - // = d(k dT/dz)/dz - // - sum_k(\omega_k h_k_ref) - // - sum_k(J_k c_p_k / M_k) dT/dz - //----------------------------------------------- - if (m_do_energy[j]) { - - setGas(x,j); - double dtdzj = dTdz(x,j); - double sum = 0.0; - - grad_hk(x, j); - for (size_t k = 0; k < m_nsp; k++) { - double flxk = 0.5*(m_flux(k,j-1) + m_flux(k,j)); - sum += wdot(k,j)*m_hk(k,j); - sum += flxk * m_dhk_dz(k,j) / m_wt[k]; - } - - rsd[index(c_offset_T, j)] = - m_cp[j]*rho_u(x,j)*dtdzj - - conduction(x,j) - sum; - rsd[index(c_offset_T, j)] /= (m_rho[j]*m_cp[j]); - rsd[index(c_offset_T, j)] -= rdt*(T(x,j) - T_prev(j)); - rsd[index(c_offset_T, j)] -= (m_qdotRadiation[j] / (m_rho[j] * m_cp[j])); - diag[index(c_offset_T, j)] = 1; - } else { - // residual equations if the energy equation is disabled - rsd[index(c_offset_T, j)] = T(x,j) - T_fixed(j); - diag[index(c_offset_T, j)] = 0; - } - - if (m_usesLambda) { - rsd[index(c_offset_L, j)] = lambda(x, j) - lambda(x, j - 1); - } else { - rsd[index(c_offset_L, j)] = lambda(x, j); - } - diag[index(c_offset_L, j)] = 0; - } - } -} - -void StFlow::evalRightBoundary(double* x, double* rsd, int* diag, double rdt) -{ - size_t j = m_points - 1; - - // the boundary object connected to the right of this one may modify or - // replace these equations. The default boundary conditions are zero u, V, - // and T, and zero diffusive flux for all species. - - rsd[index(c_offset_V,j)] = V(x,j); - diag[index(c_offset_V,j)] = 0; - double sum = 0.0; - // set residual of poisson's equ to zero - rsd[index(c_offset_E, j)] = x[index(c_offset_E, j)]; - for (size_t k = 0; k < m_nsp; k++) { - sum += Y(x,k,j); - rsd[index(k+c_offset_Y,j)] = m_flux(k,j-1) + rho_u(x,j)*Y(x,k,j); - } - rsd[index(c_offset_Y + rightExcessSpecies(), j)] = 1.0 - sum; - diag[index(c_offset_Y + rightExcessSpecies(), j)] = 0; - if (m_usesLambda) { - rsd[index(c_offset_U, j)] = rho_u(x, j); - } else { - rsd[index(c_offset_U, j)] = rho_u(x, j) - rho_u(x, j-1); - } - - rsd[index(c_offset_L, j)] = lambda(x, j) - lambda(x, j-1); - diag[index(c_offset_L, j)] = 0; - rsd[index(c_offset_T, j)] = T(x, j); -} - -void StFlow::evalContinuity(size_t j, double* x, double* rsd, int* diag, double rdt) -{ - //algebraic constraint - diag[index(c_offset_U, j)] = 0; - //---------------------------------------------- - // Continuity equation - // - // d(\rho u)/dz + 2\rho V = 0 - //---------------------------------------------- - if (m_usesLambda) { - // Note that this propagates the mass flow rate information to the left - // (j+1 -> j) from the value specified at the right boundary. The - // lambda information propagates in the opposite direction. - rsd[index(c_offset_U,j)] = - -(rho_u(x,j+1) - rho_u(x,j))/m_dz[j] - -(density(j+1)*V(x,j+1) + density(j)*V(x,j)); - } else if (m_isFree) { - // terms involving V are zero as V=0 by definition - if (z(j) > m_zfixed) { - rsd[index(c_offset_U,j)] = - - (rho_u(x,j) - rho_u(x,j-1))/m_dz[j-1]; - } else if (z(j) == m_zfixed) { - if (m_do_energy[j]) { - rsd[index(c_offset_U,j)] = (T(x,j) - m_tfixed); - } else { - rsd[index(c_offset_U,j)] = (rho_u(x,j) - - m_rho[0]*0.3); // why 0.3? - } - } else if (z(j) < m_zfixed) { - rsd[index(c_offset_U,j)] = - - (rho_u(x,j+1) - rho_u(x,j))/m_dz[j]; - } - } else { - // unstrained with fixed mass flow rate - rsd[index(c_offset_U, j)] = rho_u(x, j) - rho_u(x, j - 1); - } -} - -} // namespace diff --git a/src/oneD/refine.cpp b/src/oneD/refine.cpp index 95b1ae3806f..b88a5151664 100644 --- a/src/oneD/refine.cpp +++ b/src/oneD/refine.cpp @@ -263,4 +263,421 @@ int Refiner::getNewGrid(int n, const double* z, int nn, double* zn) zn[jn] = z[n-1]; return 0; } + + +double Refiner::remeshFromSolution(int np, const doublereal* z, const doublereal* x, const double dist_min, const double domain_size) //from MUTAGEN +// int np; : number of points in the old mesh +// double* z : array of the old mesh points +// double* x : array of variables on the old mesh +{ + + double distance; + + if (m_domain->nPoints() == 1) + { + m_z_new.clear(); + m_z_new.push_back(z[0]); + distance=0.0; + return distance; + } + + if (m_domain->nPoints() <= 0) + { + distance=0.0; + return distance; + } + + // a few defintions + double z_start = z[0]; + double z_end = z[np-1]; + + // compute w_old + // [w_old] = [m^-1] + vector w_old(np-1); + for (int i=0;iz[i+1]-z[i]) + { + dz_min = z[i+1]-z[i]; + z_center = z[i]; + } + } + + // init w1 with a very small (but non-zero) value + // [w1] = [m^-1] + vector w1(np-1); + for (int i=0;i vn(np); + vector gn(np); + vector gc(np-1); + vector cc(np-1); + // loop over active components + for (int icomp=0;icomp m_min_range*vv) + { + // compute w1 for gradient + for (int i=0;i m_min_range*gg) + { + // compute w1 for curvature + for (int i=0;i w2(np-1); + // first, copy w1 in w2 + copy(w1.begin(),w1.end(),w2.begin()); + // parameters + double bndr = m_ratio; + double bndq = 2.0*log10(bndr); + for (int i=0;i w3(np-1); + double rwidth = 5.0; // parameter for the gaussian width + double alpha = 2.5; // the integration interval is [-alpha.sigma;+alpha.sigma] + int nint = 100; // half the number of integration intervals + double w2_max = *max_element(w2.begin(), w2.end()); // max value of w2 + double sigma = rwidth/w2_max; // width of the gaussian [m] + double gintg = sigma*sqrt(Pi); // integral of the gaussian [m] + double dz_int = alpha*sigma/static_cast(nint); // integration step size [m] + for (int i=0;i(j)+0.5)*dz_int; + double zc = 0.5*(z[i+1]+z[i ]); + double zint = zc+c; + double f; + // value at zc+c + if (zint<=z_start) + { + f = 0.0; + } + else if (zint>=z_end) + { + f = 0.0; + } + else + { + int i1=indxtp(np,zint,z); + f = w2[i1]; + } + // convolution product + f = f * exp(-c*c/(sigma*sigma)); + // integration and normalization + w3[i] = w3[i] + f*dz_int/gintg; + } + } + + // compute distance between the two meshes + distance=0.0; + for (int i=0;i w4(np); + w4[0] = 0.0; + for (int i=0;i(1.0+w4_last + 0.5); + + // final remeshing + m_z_new.clear(); + for (int i_new=0;i_new(i_new); + int i = indxtp(np,w,&w4[0]); + double slope = (z[i+1] -z[i])/(w4[i+1]-w4[i]); + double dz = slope*(w-w4[i]); + double z_add = z[i] + dz; + if (z_add<=z_center+domain_size) + { + m_z_new.push_back(z_add); + } + } + + // New size + np_new = m_z_new.size(); + + // Add points if necessary + bool done=false; + if (m_z_new[np_new-1]>=z_center+domain_size) + { + done = true; + } + while(!done) + { + double ratio_last = (m_z_new[np_new-1] - m_z_new[np_new-2])/(m_z_new[np_new-2] - m_z_new[np_new-3]); + double z_add = m_z_new[np_new-1] + ratio_last*(m_z_new[np_new-1] - m_z_new[np_new-2]); + m_z_new.push_back(z_add); + np_new++; + if (m_z_new[np_new-1]>=z_center+domain_size) + { + done = true; + } + } + +/* DO NOTHING... + m_z_new.clear(); + for (int i=0;inPoints() == 1) + { + return; + } + + if (m_domain->nPoints() <= 0) + { + return; + } + + // get gradient and curvature criterions in w1 + vector vn(np); + vector gn(np); + vector gc(np-1); + vector cc(np-1); + vector grad_max(np-1); + vector curve_max(np-1); + // loop over active components + for (int icomp=0;icomp m_min_range*vv) + { + // compute w1 for gradient + for (int i=0;i m_min_range*gg) + { + // compute w1 for curvature + for (int i=0;i +bool has_key(const M& m, int j) { + if (m.find(j) != m.end()) return true; + return false; +} + +static void r_drawline() { + string s(78,'#'); + s += '\n'; + writelog(s.c_str()); +} + +/** + * Return the square root of machine precision. + */ +static doublereal eps() { + doublereal e = 1.0; + while (1.0 + e != 1.0) e *= 0.5; + return sqrt(e); +} + } diff --git a/src/thermo/Phase.cpp b/src/thermo/Phase.cpp index dc0f6a4fd36..c0987d531cf 100644 --- a/src/thermo/Phase.cpp +++ b/src/thermo/Phase.cpp @@ -846,8 +846,10 @@ void Phase::addSpeciesAlias(const string& name, const string& alias) void Phase::removeSpeciesLock() { if (!m_nSpeciesLocks) { - throw CanteraError("Phase::removeSpeciesLock", - "ThermoPhase '{}' has no current species locks.", m_name); + // throw CanteraError("Phase::removeSpeciesLock", + // "ThermoPhase '{}' has no current species locks.", m_name); + // CERFACS : crash after computation of Flamelets because cantera wants to remove the species lock that doen't exist in this case, and send an error. Then, the error message has been convert into a user warning. + warn_user("Phase::removeSpeciesLock","ThermoPhase '{}' has no current species locks.", m_name); } m_nSpeciesLocks--; } diff --git a/src/transport/AVBPTransport.cpp b/src/transport/AVBPTransport.cpp new file mode 100644 index 00000000000..509345c859c --- /dev/null +++ b/src/transport/AVBPTransport.cpp @@ -0,0 +1,278 @@ +/** + * @file AVBPTransport.cpp + * Simplified AVBP transport properties for ideal gas mixtures. + */ + +/* $Author: B. Franzelli (v. 1.7) $ + * $Revision: A. Felden (v 2.1-2.3) $ + * $Date: 01/2018 $ + */ + +#include "cantera/transport/AVBPTransport.h" +#include "cantera/thermo/ThermoPhase.h" +#include "cantera/base/stringUtils.h" +#include "cantera/base/utilities.h" +#include "cantera/base/Parser.h" + +#include +#include +#include +#include +#include +#include + +using namespace std; + +namespace Cantera +{ + +// AVBPTransport::AVBPTransport() : +// m_lambda(0.0) +// { +// } + +void AVBPTransport::init(ThermoPhase* thermo, int mode, int log_level) +{ + + GasTransport::init(thermo, mode, log_level); + + ifstream avbp_mixturedb("mixture_database.dat"); + + if (avbp_mixturedb.good()){ + //cout << thermo->name() << thermo->id() << endl; + //std::string mixture_id; + //mixture_id = thermo->name(); + //cout<<"INFO: using simplified transport data for "<< m_thermo->name()<<" from the 'mixture_database.dat' file."<0){ +// cout<<"-Exponent for Second Sutherland Constant: "<cp_mass(); + m_density = m_thermo->density(); + if(avbp_beta<0){ + double avbp_absbeta; + avbp_absbeta = - avbp_beta; + m_viscmix = avbp_mu0 * pow(m_temp/avbp_T0,avbp_absbeta); + } + else if(avbp_beta>0){ + double coeff; + coeff= (avbp_T0 + avbp_beta) / pow(avbp_T0,1.5); + m_viscmix = avbp_mu0 * coeff * pow(m_temp, 1.5) / (m_temp + avbp_beta); + } + else{ + m_viscmix = avbp_mu0; + } + m_lambda = m_viscmix * m_cp / avbp_Prandtl; +} + + +double AVBPTransport::viscosity() +{ + update_T(); + update_C(); + + double vismix = 0.0; + + // AVBP Transport Properties + if(avbp_beta<0){ + double avbp_absbeta; + avbp_absbeta = - avbp_beta; + vismix = avbp_mu0 * pow(m_temp/avbp_T0,avbp_absbeta); + } + else if(avbp_beta>0){ + double coeff; + coeff= (avbp_T0 + avbp_beta) / pow(avbp_T0,1.5); + vismix = avbp_mu0 * coeff * pow(m_temp, 1.5) / (m_temp + avbp_beta); + } + else{ + vismix = avbp_mu0; + } + + m_viscmix = vismix; + return m_viscmix; +} + + +double AVBPTransport::thermalConductivity() +{ + update_T(); + update_C(); + + double m_cp = 0.0; + double m_vismix = 0.0; + m_cp = m_thermo->cp_mass(); + + if(avbp_beta<0){ + double avbp_absbeta; + avbp_absbeta = - avbp_beta; + m_vismix = avbp_mu0 * pow(m_temp/avbp_T0,avbp_absbeta); + }else if(avbp_beta>0){ + double coeff; + coeff = (avbp_T0 + avbp_beta) / pow(avbp_T0,1.5); + m_vismix = avbp_mu0 * coeff * pow (m_temp, 1.5) / (m_temp + avbp_beta); + }else{ + m_vismix = avbp_mu0; + } + + m_lambda = m_vismix * m_cp / avbp_Prandtl; + return m_lambda; +} + + +void AVBPTransport::getMixDiffCoeffs(double* const d) +{ + update_T(); + update_C(); + + double m_cp = 0.0; + double m_density = 0.0; + m_cp = m_thermo->cp_mass(); + m_density = m_thermo->density(); + + double m_vismix = 0.0; + if(avbp_beta<0){ + double avbp_absbeta; + avbp_absbeta = - avbp_beta; + m_vismix = avbp_mu0 * pow(m_temp/avbp_T0,avbp_absbeta); + }else if(avbp_beta>0){ + double coeff; + coeff = (avbp_T0 + avbp_beta) / pow(avbp_T0,1.5); + m_vismix = avbp_mu0 * coeff * pow(m_temp,1.5)/ (m_temp + avbp_beta); + }else{ + m_vismix = avbp_mu0; + } + + for (size_t k=0; ktemperature(); + if (t == m_temp && m_nsp == m_thermo->nSpecies()) { + return; + } + if (t <= 0.0) { + throw CanteraError("AVBPTransport::update_T", + "negative temperature {}", t); + } + + GasTransport::update_T(); + +} + +void AVBPTransport::update_C() +{ + // signal that concentration-dependent quantities will need to + // be recomputed before use, and update the local mole + // fractions. + + m_thermo->getMoleFractions(m_molefracs.data()); + + // add an offset to avoid a pure species condition + for (size_t k = 0; k < m_nsp; k++) { + m_molefracs[k] = std::max(Tiny, m_molefracs[k]); + } +} + + +/** + * Parse the specific mixture_param.dat input file of + * AVBP v7 ++. Use the Parser.cpp located in ../base + */ +void AVBPTransport::read_mixture(std::string inputfile) +{ + Parser parser; + Param* param; + + parser.parseFile(inputfile); + // Get number of mixtures in database + size_t n_mixtures = parser.nbParamOccurence("mixture_name"); + size_t idx_beg = std::string::npos; + size_t idx_end = std::string::npos; + // Loop through all occurences of keyword "mixture name" + for (size_t i=0; i< n_mixtures; ++i) { + param = parser.getParam("mixture_name",i); + std::string current_str = param->readString(0); + // Check if mixture_name is the one requested in the cti file + if ( current_str == m_thermo->name() ) { + // Store bounding idx to get important info + idx_beg = parser.getParamNumber("mixture_name",i); + idx_end = parser.getParamNumber("mixture_name",i+1); + } + } + // Get an error if requested mixture does not match any entry in database + if (idx_beg == idx_end) { + cout<<"FATAL ERROR: cannot find the requested mixture in the 'mixture_database.dat' file.\n \ + Make sure that the name of your gas instance in the Cantera mechanism (.cti/.xml) file matches that provided in the 'mixture_database.dat'."<readDouble(0); + // SCH LE + param = parser.getParam("species_Schmidt_number", idx_beg, idx_end); + avbp_Le.resize(m_nsp); + avbp_Sch.resize(m_nsp); + for (size_t i=0; ireadDouble(i); + avbp_Le[i]= avbp_Sch[i] / avbp_Prandtl; + } + // VISCO + param = parser.getParam("mu_ref", idx_beg, idx_end); + avbp_mu0 = param->readDouble(0); + param = parser.getParam("T_ref", idx_beg, idx_end); + avbp_T0 = param->readDouble(0); + param = parser.getParam("viscosity_law_coeff", idx_beg, idx_end); + avbp_beta = param->readDouble(0); + param = parser.getParam("viscosity_law", idx_beg, idx_end); + avbp_law = param->readString(0); + if (avbp_law == "power") { + avbp_beta = - avbp_beta; + } +} + +double AVBPTransport::pressure_ig() +{ + return (m_thermo->molarDensity() * GasConstant * + m_thermo->temperature()); + +} + +} \ No newline at end of file diff --git a/src/transport/TransportFactory.cpp b/src/transport/TransportFactory.cpp index 2589697261a..f923771d749 100644 --- a/src/transport/TransportFactory.cpp +++ b/src/transport/TransportFactory.cpp @@ -4,6 +4,7 @@ // at https://cantera.org/license.txt for license and copyright information. // known transport models +#include "cantera/transport/AVBPTransport.h" #include "cantera/transport/MultiTransport.h" #include "cantera/transport/MixTransport.h" #include "cantera/transport/UnityLewisTransport.h" @@ -36,6 +37,11 @@ TransportFactory::TransportFactory() addDeprecatedAlias("mixture-averaged", "Mix"); reg("mixture-averaged-CK", []() { return new MixTransport(); }); addDeprecatedAlias("mixture-averaged-CK", "CK_Mix"); + + reg("AVBP", []() { return new AVBPTransport(); }); + reg("AVBP-CK", []() { return new AVBPTransport(); }); + addDeprecatedAlias("AVBP", "CK_AVBP"); + reg("multicomponent", []() { return new MultiTransport(); }); addDeprecatedAlias("multicomponent", "Multi"); reg("multicomponent-CK", []() { return new MultiTransport(); }); @@ -48,6 +54,7 @@ TransportFactory::TransportFactory() addDeprecatedAlias("high-pressure", "HighP"); m_CK_mode["CK_Mix"] = m_CK_mode["mixture-averaged-CK"] = true; m_CK_mode["CK_Multi"] = m_CK_mode["multicomponent-CK"] = true; + m_CK_mode["CK_AVBP"] = m_CK_mode["AVBP-CK"] = true; } TransportFactory* TransportFactory::factory() { diff --git a/test/clib/test_ctonedim.cpp b/test/clib/test_ctonedim.cpp index 3e4f45d20bd..d416562c6c7 100644 --- a/test/clib/test_ctonedim.cpp +++ b/test/clib/test_ctonedim.cpp @@ -183,7 +183,7 @@ TEST(ctonedim, freeflame) // solve and save flow1D_solveEnergyEqn(flow, 1); - bool refine_grid = false; + const char* refine_grid = "disabled"; int loglevel = 0; sim1D_solve(flame, loglevel, refine_grid); ret = sim1D_save(flame, "gtest-freeflame.yaml", "clib", diff --git a/test/data/surface2.inp b/test/data/surface2.inp index 2f86a724ad2..706f24a97a3 100644 --- a/test/data/surface2.inp +++ b/test/data/surface2.inp @@ -1,6 +1,6 @@ SITE/PT_SURFACE/ SDEN/2.72E-9/ _Pt_ H_Pt O2_Pt/3/ H2O_Pt OH_Pt O_Pt - +END REACTIONS JOULES/MOLE MWON H2 + 2_Pt_ => 2H_Pt 4.4579E+10 0.5 0.0 diff --git a/test/oneD/test_oneD.cpp b/test/oneD/test_oneD.cpp index 02194ab6885..9ad78963460 100644 --- a/test/oneD/test_oneD.cpp +++ b/test/oneD/test_oneD.cpp @@ -5,7 +5,7 @@ #include "cantera/core.h" #include "cantera/onedim.h" #include "cantera/oneD/DomainFactory.h" -#include "cantera/oneD/StFlow.h" +#include "cantera/oneD/Flow1D.h" #include "cantera/oneD/IonFlow.h" using namespace Cantera; @@ -85,7 +85,7 @@ TEST(onedim, freeflame) // solve flow->solveEnergyEqn(); - bool refine_grid = false; + string refine_grid = "disabled"; int loglevel = 0; flame.solve(loglevel, refine_grid); flame.save("gtest-freeflame.yaml", "cpp", "Solution from C++ interface", true); @@ -103,97 +103,6 @@ TEST(onedim, freeflame) } } -TEST(onedim, legacy) -{ - //! @todo: Remove after Cantera 3.1 - auto sol = newSolution("h2o2.yaml", "ohmech", "mixture-averaged"); - auto gas = sol->thermo(); - size_t nsp = gas->nSpecies(); - - // reactants - double uin = .3; - double T = 300; - double P = 101325; - string X = "H2:0.65, O2:0.5, AR:2"; - gas->setState_TPX(T, P, X); - double rho_in = gas->density(); - vector yin(nsp); - gas->getMassFractions(&yin[0]); - - // product estimate - gas->equilibrate("HP"); - vector yout(nsp); - gas->getMassFractions(&yout[0]); - double rho_out = gas->density(); - double Tad = gas->temperature(); - - // flow - suppress_deprecation_warnings(); - auto flow = newDomain("legacy-flow", sol); - make_deprecation_warnings_fatal(); - flow->setID("flow"); - flow->setFreeFlow(); - - // grid - int nz = 21; - double lz = 0.02; - vector z(nz); - double dz = lz; - dz /= (double)(nz - 1); - for (int iz = 0; iz < nz; iz++) { - z[iz] = iz * dz; - } - flow->setupGrid(nz, &z[0]); - - // inlet - auto inlet = newDomain("inlet", sol); - inlet->setMoleFractions(X); - inlet->setMdot(uin * rho_in); - inlet->setTemperature(T); - - // outlet - auto outlet = newDomain("outlet", sol); - double uout = inlet->mdot() / rho_out; - - // set up simulation - vector> domains { inlet, flow, outlet }; - Sim1D flame(domains); - int dom = static_cast(flame.domainIndex("flow")); - ASSERT_EQ(dom, 1); - - // set up initial guess - vector locs{0.0, 0.3, 0.7, 1.0}; - vector value{uin, uin, uout, uout}; - flame.setInitialGuess("velocity", locs, value); - value = {T, T, Tad, Tad}; - flame.setInitialGuess("T", locs, value); - for (size_t i = 0; i < nsp; i++) { - value = {yin[i], yin[i], yout[i], yout[i]}; - flame.setInitialGuess(gas->speciesName(i), locs, value); - } - - // simulation settings - double ratio = 15.0; - double slope = 0.3; - double curve = 0.5; - flame.setRefineCriteria(dom, ratio, slope, curve); - flame.setFixedTemperature(0.85 * T + .15 * Tad); - - // solve - flow->solveEnergyEqn(); - bool refine_grid = false; - int loglevel = 0; - flame.solve(loglevel, refine_grid); - - ASSERT_EQ(flow->nPoints(), static_cast(nz + 1)); - size_t comp = flow->componentIndex("T"); - double Tprev = flame.value(dom, comp, 0); - for (size_t n = 0; n < flow->nPoints(); n++) { - T = flame.value(dom, comp, n); - ASSERT_GE(T, Tprev); - Tprev = T; - } -} TEST(onedim, flame_types) { diff --git a/test_problems/mixGasTransport/mixGasTransport b/test_problems/mixGasTransport/mixGasTransport new file mode 100755 index 00000000000..3928421dfa0 Binary files /dev/null and b/test_problems/mixGasTransport/mixGasTransport differ diff --git a/test_problems/multiGasTransport/multiGasTransport b/test_problems/multiGasTransport/multiGasTransport new file mode 100755 index 00000000000..892f9bb6bf5 Binary files /dev/null and b/test_problems/multiGasTransport/multiGasTransport differ